summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathieu Lirzin <mthl@gnu.org>2017-09-20 00:08:59 +0200
committerMathieu Lirzin <mthl@gnu.org>2017-09-20 00:08:59 +0200
commit7508174f4a6c19eeda89a7e18b8d1398fe85ccf0 (patch)
tree2938ba28267cfc6d6cba0b763f80e4b32ce49b03
parentc2757b974cb4c182333859edb45a01194550bc0e (diff)
parentced195a8556b68eab3dd0887e07a97c6ae4917bf (diff)
downloadautomake-7508174f4a6c19eeda89a7e18b8d1398fe85ccf0.tar.gz
Merge branch 'minor'
-rw-r--r--.autom4te.cfg5
-rw-r--r--.git-log-fix13
-rw-r--r--.gitattributes1
-rw-r--r--.gitignore68
-rw-r--r--AUTHORS27
-rw-r--r--COPYING339
-rw-r--r--GNUmakefile88
-rw-r--r--HACKING406
-rw-r--r--INSTALL370
-rw-r--r--Makefile.am134
-rw-r--r--NEWS3013
-rw-r--r--PLANS/README25
-rw-r--r--PLANS/obsolete-removed/am-prog-mkdir-p.txt62
-rw-r--r--PLANS/obsolete-removed/configure.in.txt28
-rw-r--r--PLANS/rm-f-without-args.txt40
-rw-r--r--PLANS/subdir-objects.txt67
-rw-r--r--PLANS/texi/drop-split-info-files.txt27
-rw-r--r--PLANS/texi/warnings-for-automake-ng-compatibility.txt21
-rw-r--r--README68
-rw-r--r--THANKS446
-rw-r--r--bin/aclocal.in1242
-rw-r--r--bin/automake.in8396
-rw-r--r--bin/local.mk82
-rwxr-xr-xbootstrap121
-rw-r--r--configure.ac604
-rw-r--r--contrib/README26
-rw-r--r--contrib/check-html.am57
-rw-r--r--contrib/multilib/README9
-rw-r--r--contrib/multilib/config-ml.in876
-rw-r--r--contrib/multilib/multi.m464
-rw-r--r--contrib/multilib/multilib.am45
-rwxr-xr-xcontrib/multilib/symlink-tree78
-rwxr-xr-xcontrib/t/help-multilib.sh32
-rw-r--r--contrib/t/local.mk26
-rwxr-xr-xcontrib/t/multilib.sh160
-rwxr-xr-xcontrib/t/parallel-tests-html-recursive.sh163
-rwxr-xr-xcontrib/t/parallel-tests-html.sh144
-rwxr-xr-xcontrib/tap-driver.pl563
-rw-r--r--doc/amhello/Makefile.am6
-rw-r--r--doc/amhello/README2
-rw-r--r--doc/amhello/configure.ac13
-rw-r--r--doc/amhello/src/Makefile.am6
-rw-r--r--doc/amhello/src/main.c14
-rw-r--r--doc/automake-history.texi1214
-rw-r--r--doc/automake.texi13225
-rw-r--r--doc/fdl.texi506
-rwxr-xr-xdoc/help2man768
-rw-r--r--doc/local.mk115
-rwxr-xr-xgen-testsuite-part420
-rw-r--r--lib/Automake/ChannelDefs.pm444
-rw-r--r--lib/Automake/Channels.pm836
-rw-r--r--lib/Automake/Condition.pm657
-rw-r--r--lib/Automake/Config.in62
-rw-r--r--lib/Automake/Configure_ac.pm128
-rw-r--r--lib/Automake/DisjConditions.pm557
-rw-r--r--lib/Automake/FileUtils.pm425
-rw-r--r--lib/Automake/General.pm87
-rw-r--r--lib/Automake/Getopt.pm115
-rw-r--r--lib/Automake/Item.pm206
-rw-r--r--lib/Automake/ItemDef.pm113
-rw-r--r--lib/Automake/Language.pm122
-rw-r--r--lib/Automake/Location.pm279
-rw-r--r--lib/Automake/Options.pm476
-rw-r--r--lib/Automake/Rule.pm879
-rw-r--r--lib/Automake/RuleDef.pm129
-rw-r--r--lib/Automake/VarDef.pm349
-rw-r--r--lib/Automake/Variable.pm1693
-rw-r--r--lib/Automake/Version.pm159
-rw-r--r--lib/Automake/Wrap.pm166
-rw-r--r--lib/Automake/XFile.pm324
-rw-r--r--lib/Automake/local.mk57
-rw-r--r--lib/COPYING674
-rw-r--r--lib/INSTALL368
-rw-r--r--lib/am/check.am573
-rw-r--r--lib/am/check2.am60
-rw-r--r--lib/am/clean-hdr.am20
-rw-r--r--lib/am/clean.am62
-rw-r--r--lib/am/compile.am29
-rw-r--r--lib/am/configure.am166
-rw-r--r--lib/am/data.am100
-rw-r--r--lib/am/dejagnu.am93
-rw-r--r--lib/am/depend.am35
-rw-r--r--lib/am/depend2.am114
-rw-r--r--lib/am/distdir.am561
-rw-r--r--lib/am/footer.am19
-rw-r--r--lib/am/header-vars.am168
-rw-r--r--lib/am/header.am19
-rw-r--r--lib/am/inst-vars.am73
-rw-r--r--lib/am/install.am105
-rw-r--r--lib/am/java.am92
-rw-r--r--lib/am/lang-compile.am39
-rw-r--r--lib/am/lex.am30
-rw-r--r--lib/am/library.am20
-rw-r--r--lib/am/libs.am106
-rw-r--r--lib/am/libtool.am28
-rw-r--r--lib/am/lisp.am124
-rw-r--r--lib/am/local.mk65
-rw-r--r--lib/am/ltlib.am123
-rw-r--r--lib/am/ltlibrary.am18
-rw-r--r--lib/am/mans-vars.am20
-rw-r--r--lib/am/mans.am154
-rw-r--r--lib/am/program.am24
-rw-r--r--lib/am/progs.am152
-rw-r--r--lib/am/python.am148
-rw-r--r--lib/am/remake-hdr.am71
-rw-r--r--lib/am/scripts.am127
-rw-r--r--lib/am/subdirs.am75
-rw-r--r--lib/am/tags.am182
-rw-r--r--lib/am/texi-vers.am58
-rw-r--r--lib/am/texibuild.am128
-rw-r--r--lib/am/texinfos.am411
-rw-r--r--lib/am/vala.am17
-rw-r--r--lib/am/yacc.am50
-rwxr-xr-xlib/ar-lib270
-rwxr-xr-xlib/compile348
-rwxr-xr-xlib/config.guess1448
-rwxr-xr-xlib/config.sub1836
-rwxr-xr-xlib/depcomp791
-rwxr-xr-xlib/gendocs.sh504
-rw-r--r--lib/gendocs_template91
-rwxr-xr-xlib/gitlog-to-changelog499
-rwxr-xr-xlib/gnupload440
-rwxr-xr-xlib/install-sh501
-rw-r--r--lib/local.mk67
-rwxr-xr-xlib/mdate-sh228
-rwxr-xr-xlib/missing215
-rwxr-xr-xlib/mkinstalldirs162
-rwxr-xr-xlib/py-compile170
-rwxr-xr-xlib/tap-driver.sh651
-rwxr-xr-xlib/test-driver148
-rw-r--r--lib/texinfo.tex11687
-rwxr-xr-xlib/update-copyright274
-rwxr-xr-xlib/ylwrap247
-rw-r--r--m4/acdir/README9
-rw-r--r--m4/amversion.in37
-rw-r--r--m4/amversion.m437
-rw-r--r--m4/ar-lib.m460
-rw-r--r--m4/as.m419
-rw-r--r--m4/auxdir.m451
-rw-r--r--m4/cond-if.m436
-rw-r--r--m4/cond.m432
-rw-r--r--m4/depend.m4189
-rw-r--r--m4/depout.m465
-rw-r--r--m4/dmalloc.m426
-rw-r--r--m4/extra-recurs.m416
-rw-r--r--m4/gcj.m418
-rw-r--r--m4/init.m4198
-rw-r--r--m4/install-sh.m421
-rw-r--r--m4/internal/ac-config-macro-dirs.m415
-rw-r--r--m4/lead-dot.m419
-rw-r--r--m4/lex.m419
-rw-r--r--m4/lispdir.m451
-rw-r--r--m4/local.mk79
-rw-r--r--m4/maintainer.m435
-rw-r--r--m4/make.m442
-rw-r--r--m4/missing.m438
-rw-r--r--m4/mkdirp.m432
-rw-r--r--m4/obsolete.m428
-rw-r--r--m4/options.m430
-rw-r--r--m4/prog-cc-c-o.m447
-rw-r--r--m4/python.m4241
-rw-r--r--m4/runlog.m417
-rw-r--r--m4/sanity.m482
-rw-r--r--m4/silent.m460
-rw-r--r--m4/strip.m428
-rw-r--r--m4/substnot.m417
-rw-r--r--m4/tar.m4132
-rw-r--r--m4/upc.m420
-rw-r--r--m4/vala.m437
-rwxr-xr-xmaintainer/am-ft131
-rwxr-xr-xmaintainer/am-xft18
-rwxr-xr-xmaintainer/check-perl-protos50
-rw-r--r--maintainer/maint.mk658
-rwxr-xr-xmaintainer/rename-tests75
-rw-r--r--maintainer/syntax-checks.mk549
-rw-r--r--old/ChangeLog-tests1448
-rw-r--r--old/ChangeLog.002211
-rw-r--r--old/ChangeLog.014937
-rw-r--r--old/ChangeLog.023225
-rw-r--r--old/ChangeLog.032971
-rw-r--r--old/ChangeLog.041623
-rw-r--r--old/ChangeLog.095767
-rw-r--r--old/ChangeLog.1113107
-rw-r--r--old/ChangeLog.963685
-rw-r--r--old/ChangeLog.982191
-rw-r--r--old/TODO504
-rw-r--r--pre-inst-env.in41
-rw-r--r--t/CheckListOfTests.am68
-rw-r--r--t/README303
-rw-r--r--t/ac-output-old.tap177
-rw-r--r--t/aclocal-I-and-install.sh100
-rw-r--r--t/aclocal-I-order-1.sh49
-rw-r--r--t/aclocal-I-order-2.sh46
-rw-r--r--t/aclocal-I-order-3.sh46
-rw-r--r--t/aclocal-acdir.sh78
-rw-r--r--t/aclocal-amflags.sh68
-rw-r--r--t/aclocal-autoconf-version-check.sh50
-rw-r--r--t/aclocal-comments-respected.sh31
-rw-r--r--t/aclocal-deleted-header-aclocal-amflags.sh60
-rw-r--r--t/aclocal-deleted-header.sh57
-rw-r--r--t/aclocal-deps-subdir.sh69
-rw-r--r--t/aclocal-deps.sh75
-rw-r--r--t/aclocal-dirlist-abspath.sh42
-rw-r--r--t/aclocal-dirlist-globbing.sh55
-rw-r--r--t/aclocal-dirlist.sh56
-rw-r--r--t/aclocal-install-absdir.sh33
-rw-r--r--t/aclocal-install-fail.sh63
-rw-r--r--t/aclocal-install-mkdir.sh70
-rw-r--r--t/aclocal-m4-include-are-scanned-aclocal-amflags.sh108
-rw-r--r--t/aclocal-m4-include-are-scanned.sh108
-rw-r--r--t/aclocal-m4-sinclude.sh73
-rw-r--r--t/aclocal-macrodir.tap239
-rw-r--r--t/aclocal-macrodirs.tap445
-rw-r--r--t/aclocal-missing-macros.sh41
-rw-r--r--t/aclocal-no-extra-scan.sh37
-rw-r--r--t/aclocal-no-force.sh117
-rw-r--r--t/aclocal-no-install-no-mkdir.sh36
-rw-r--r--t/aclocal-no-symlinked-overwrite.sh41
-rw-r--r--t/aclocal-no-unused-required.sh42
-rw-r--r--t/aclocal-path-install-serial.sh86
-rw-r--r--t/aclocal-path-install.sh53
-rw-r--r--t/aclocal-path-nonexistent.sh34
-rw-r--r--t/aclocal-path-precedence.sh91
-rw-r--r--t/aclocal-path.sh56
-rw-r--r--t/aclocal-pr450.sh49
-rw-r--r--t/aclocal-print-acdir.sh31
-rw-r--r--t/aclocal-remake-misc.sh74
-rw-r--r--t/aclocal-req.sh34
-rw-r--r--t/aclocal-scan-configure-ac-pr319.sh47
-rw-r--r--t/aclocal-serial.sh137
-rw-r--r--t/aclocal-underquoted-defun.sh37
-rw-r--r--t/aclocal-verbose-install.sh52
-rw-r--r--t/aclocal.sh49
-rw-r--r--t/acsilent.sh36
-rw-r--r--t/acsubst.sh31
-rw-r--r--t/acsubst2.sh31
-rw-r--r--t/add-missing-install-sh.sh41
-rw-r--r--t/add-missing-multiple.sh47
-rw-r--r--t/add-missing.tap382
-rw-r--r--t/all.sh33
-rw-r--r--t/all2.sh32
-rw-r--r--t/alloca.sh40
-rw-r--r--t/alloca2.sh40
-rw-r--r--t/alpha.sh71
-rw-r--r--t/alpha2.sh59
-rw-r--r--t/am-config-header.sh50
-rw-r--r--t/am-default-source-ext.sh87
-rw-r--r--t/am-include-only-one-generated-fragment.sh48
-rw-r--r--t/am-macro-not-found.sh25
-rw-r--r--t/am-missing-prog.sh97
-rw-r--r--t/am-prog-cc-c-o.sh126
-rw-r--r--t/am-prog-cc-stdc.sh44
-rw-r--r--t/am-prog-mkdir-p.sh90
-rw-r--r--t/am-tests-environment.sh90
-rw-r--r--t/amassign.sh28
-rw-r--r--t/amhello-binpkg.sh51
-rw-r--r--t/amhello-cflags.sh50
-rw-r--r--t/amhello-cross-compile.sh53
-rw-r--r--t/aminit-moreargs-deprecation.sh51
-rw-r--r--t/aminit-trailing-dnl-comment-pr16841.sh44
-rw-r--r--t/amopt.sh38
-rw-r--r--t/amopts-location.sh83
-rw-r--r--t/amopts-variable-expansion.sh52
-rw-r--r--t/amsubst.sh39
-rw-r--r--t/ansi2knr-no-more.sh56
-rw-r--r--t/ar-lib.sh113
-rw-r--r--t/ar-lib2.sh38
-rw-r--r--t/ar-lib3.sh44
-rw-r--r--t/ar-lib4.sh57
-rw-r--r--t/ar-lib5a.sh71
-rw-r--r--t/ar-lib5b.sh97
-rw-r--r--t/ar-lib6a.sh37
-rw-r--r--t/ar-lib6b.sh37
-rw-r--r--t/ar-lib7.sh34
-rw-r--r--t/ar.sh44
-rw-r--r--t/ar2.sh38
-rw-r--r--t/ar3.sh41
-rw-r--r--t/ar4.sh37
-rw-r--r--t/ar5.sh40
-rw-r--r--t/asm.sh100
-rw-r--r--t/asm2.sh116
-rw-r--r--t/asm3.sh116
-rw-r--r--t/autodist-acconfig-no-subdir.sh56
-rw-r--r--t/autodist-acconfig.sh44
-rw-r--r--t/autodist-aclocal-m4.sh53
-rw-r--r--t/autodist-config-headers.sh59
-rw-r--r--t/autodist-configure-no-subdir.sh70
-rw-r--r--t/autodist-no-duplicate.sh50
-rw-r--r--t/autodist-stamp-vti.sh58
-rw-r--r--t/autodist-subdir.sh120
-rw-r--r--t/autodist.sh103
-rw-r--r--t/autohdr-subdir-pr12495.sh83
-rw-r--r--t/autohdr.sh30
-rw-r--r--t/autohdr3.sh53
-rw-r--r--t/autohdr4.sh80
-rw-r--r--t/autohdrdry.sh42
-rw-r--r--t/automake-cmdline.tap63
-rw-r--r--t/auxdir-autodetect.sh130
-rw-r--r--t/auxdir-cc-pr15981.sh57
-rw-r--r--t/auxdir-computed.tap39
-rw-r--r--t/auxdir-misplaced.sh31
-rw-r--r--t/auxdir-nonexistent.sh34
-rw-r--r--t/auxdir-pr15981.sh39
-rw-r--r--t/auxdir-pr19311.sh45
-rw-r--r--t/auxdir-unportable.tap51
-rw-r--r--t/auxdir.sh42
-rw-r--r--t/auxdir6.sh50
-rw-r--r--t/auxdir7.sh47
-rw-r--r--t/auxdir8.sh46
-rw-r--r--t/ax/am-test-lib.sh1063
-rw-r--r--t/ax/cc-no-c-o.in41
-rw-r--r--t/ax/deltree.pl34
-rw-r--r--t/ax/depcomp.sh417
-rw-r--r--t/ax/distcheck-hook-m4.am30
-rw-r--r--t/ax/extract-testsuite-summary.pl30
-rwxr-xr-xt/ax/is57
-rwxr-xr-xt/ax/is_newest42
-rw-r--r--t/ax/runtest.in130
-rw-r--r--t/ax/shell-no-trail-bslash.in85
-rw-r--r--t/ax/tap-functions.sh231
-rw-r--r--t/ax/tap-setup.sh47
-rw-r--r--t/ax/tap-summary-aux.sh357
-rw-r--r--t/ax/test-defs.in201
-rw-r--r--t/ax/test-init.sh29
-rw-r--r--t/ax/test-lib.sh317
-rw-r--r--t/ax/testsuite-summary-checks.sh102
-rw-r--r--t/ax/trivial-test-driver102
-rw-r--r--t/backcompat-acout.sh66
-rw-r--r--t/backcompat.sh64
-rw-r--r--t/backcompat2.sh73
-rw-r--r--t/backcompat3.sh147
-rw-r--r--t/backcompat6.sh105
-rw-r--r--t/backslash-before-trailing-whitespace.sh45
-rw-r--r--t/backslash-issues.sh47
-rw-r--r--t/badline.sh33
-rw-r--r--t/badopt.sh25
-rw-r--r--t/badprog.sh32
-rw-r--r--t/built-sources-check.sh67
-rw-r--r--t/built-sources-cond.sh91
-rw-r--r--t/built-sources-fork-bomb.sh67
-rw-r--r--t/built-sources-install.sh69
-rw-r--r--t/built-sources-subdir.sh62
-rw-r--r--t/built-sources.sh68
-rw-r--r--t/c-demo.sh178
-rw-r--r--t/candist.sh32
-rw-r--r--t/canon-name.sh38
-rw-r--r--t/canon.sh35
-rw-r--r--t/canon2.sh35
-rw-r--r--t/canon3.sh36
-rw-r--r--t/canon4.sh40
-rw-r--r--t/canon5.sh58
-rw-r--r--t/canon6.sh42
-rw-r--r--t/canon7.sh101
-rw-r--r--t/canon8.sh37
-rwxr-xr-xt/ccnoco-deps.sh82
-rwxr-xr-xt/ccnoco-lib.sh73
-rwxr-xr-xt/ccnoco-lt.sh76
-rw-r--r--t/ccnoco.sh72
-rw-r--r--t/ccnoco3.sh59
-rw-r--r--t/ccnoco4.sh53
-rw-r--r--t/check-concurrency-bug9245.sh57
-rw-r--r--t/check-exported-srcdir.sh64
-rw-r--r--t/check-fd-redirect.sh108
-rw-r--r--t/check-no-test-driver.sh37
-rw-r--r--t/check-subst-prog.sh82
-rw-r--r--t/check-subst.sh88
-rw-r--r--t/check-tests-in-builddir.sh91
-rw-r--r--t/check.sh41
-rw-r--r--t/check10.sh82
-rw-r--r--t/check11.sh59
-rw-r--r--t/check12.sh212
-rw-r--r--t/check2.sh68
-rw-r--r--t/check4.sh80
-rw-r--r--t/check5.sh60
-rw-r--r--t/check6.sh54
-rw-r--r--t/check7.sh67
-rw-r--r--t/check8.sh95
-rw-r--r--t/checkall.sh31
-rw-r--r--t/clean.sh26
-rw-r--r--t/colneq.sh32
-rw-r--r--t/colneq2.sh40
-rw-r--r--t/colneq3.sh44
-rw-r--r--t/colon.sh46
-rw-r--r--t/colon2.sh79
-rw-r--r--t/colon3.sh91
-rw-r--r--t/colon4.sh39
-rw-r--r--t/colon5.sh71
-rw-r--r--t/colon6.sh102
-rw-r--r--t/colon7.sh54
-rw-r--r--t/color-tests-opt.sh39
-rw-r--r--t/color-tests.sh150
-rw-r--r--t/color-tests2.sh201
-rw-r--r--t/commen10.sh32
-rw-r--r--t/commen11.sh41
-rw-r--r--t/comment-block.sh34
-rw-r--r--t/comment.sh27
-rw-r--r--t/comment2.sh34
-rw-r--r--t/comment3.sh31
-rw-r--r--t/comment4.sh41
-rw-r--r--t/comment5.sh85
-rw-r--r--t/comment6.sh68
-rw-r--r--t/comment7.sh57
-rw-r--r--t/comment8.sh48
-rw-r--r--t/comment9.sh53
-rw-r--r--t/comments-in-var-def.sh56
-rw-r--r--t/compile.sh45
-rw-r--r--t/compile2.sh84
-rw-r--r--t/compile3.sh62
-rw-r--r--t/compile4.sh82
-rw-r--r--t/compile5.sh80
-rw-r--r--t/compile6.sh115
-rw-r--r--t/compile7.sh82
-rw-r--r--t/compile_f90_c_cxx.sh43
-rw-r--r--t/compile_f_c_cxx.sh46
-rw-r--r--t/cond-basic.sh42
-rw-r--r--t/cond.sh42
-rw-r--r--t/cond10.sh47
-rw-r--r--t/cond11.sh61
-rw-r--r--t/cond13.sh58
-rw-r--r--t/cond14.sh51
-rw-r--r--t/cond15.sh61
-rw-r--r--t/cond16.sh55
-rw-r--r--t/cond17.sh42
-rw-r--r--t/cond18.sh63
-rw-r--r--t/cond19.sh69
-rw-r--r--t/cond20.sh46
-rw-r--r--t/cond21.sh76
-rw-r--r--t/cond22.sh69
-rw-r--r--t/cond23.sh37
-rw-r--r--t/cond24.sh39
-rw-r--r--t/cond25.sh39
-rw-r--r--t/cond26.sh38
-rw-r--r--t/cond27.sh38
-rw-r--r--t/cond28.sh38
-rw-r--r--t/cond3.sh79
-rw-r--r--t/cond30.sh59
-rw-r--r--t/cond31.sh56
-rw-r--r--t/cond32.sh71
-rw-r--r--t/cond33.sh79
-rw-r--r--t/cond34.sh71
-rw-r--r--t/cond35.sh100
-rw-r--r--t/cond36.sh61
-rw-r--r--t/cond37.sh53
-rw-r--r--t/cond38.sh67
-rw-r--r--t/cond39.sh105
-rw-r--r--t/cond4.sh65
-rw-r--r--t/cond40.sh83
-rw-r--r--t/cond41.sh30
-rw-r--r--t/cond42.sh60
-rw-r--r--t/cond43.sh44
-rw-r--r--t/cond44.sh38
-rw-r--r--t/cond45.sh39
-rw-r--r--t/cond46.sh112
-rw-r--r--t/cond5.sh69
-rw-r--r--t/cond6.sh69
-rw-r--r--t/cond7.sh39
-rw-r--r--t/cond8.sh77
-rw-r--r--t/cond9.sh44
-rw-r--r--t/condd.sh73
-rw-r--r--t/condhook.sh48
-rw-r--r--t/condhook2.sh47
-rw-r--r--t/condinc.sh42
-rw-r--r--t/condinc2.sh59
-rw-r--r--t/condlib.sh44
-rw-r--r--t/condman2.sh33
-rw-r--r--t/condman3.sh74
-rw-r--r--t/confdeps.sh37
-rw-r--r--t/conff.sh88
-rw-r--r--t/conff2.sh36
-rw-r--r--t/conffile-leading-dot.sh60
-rw-r--r--t/confh-subdir-clean.sh40
-rw-r--r--t/confh.sh63
-rw-r--r--t/confh4.sh47
-rw-r--r--t/confh5.sh58
-rw-r--r--t/confh6.sh45
-rw-r--r--t/confh7.sh44
-rw-r--r--t/confh8.sh66
-rw-r--r--t/configure.sh59
-rw-r--r--t/confincl.sh36
-rw-r--r--t/conflnk.sh70
-rw-r--r--t/conflnk2.sh57
-rw-r--r--t/conflnk3.sh86
-rw-r--r--t/conflnk4.sh93
-rw-r--r--t/confsub.sh57
-rw-r--r--t/confvar.sh32
-rw-r--r--t/confvar2.sh34
-rw-r--r--t/copy.sh101
-rw-r--r--t/cscope.tap170
-rw-r--r--t/cscope2.sh34
-rw-r--r--t/cscope3.sh39
-rw-r--r--t/cxx-demo.sh182
-rw-r--r--t/cxx-lt-demo.sh134
-rw-r--r--t/cxx.sh34
-rw-r--r--t/cxx2.sh30
-rw-r--r--t/cxxcpp.sh32
-rw-r--r--t/cxxlibobj.sh40
-rw-r--r--t/cxxlink.sh39
-rw-r--r--t/cxxnoc.sh37
-rw-r--r--t/cygnus-no-more.sh46
-rw-r--r--t/cygwin32.sh38
-rw-r--r--t/dash.sh29
-rw-r--r--t/defun.sh35
-rw-r--r--t/defun2.sh40
-rw-r--r--t/dejagnu-absolute-builddir.sh60
-rw-r--r--t/dejagnu-relative-srcdir.sh84
-rw-r--r--t/dejagnu-siteexp-append.sh70
-rw-r--r--t/dejagnu-siteexp-extend.sh159
-rw-r--r--t/dejagnu-siteexp-useredit.sh67
-rw-r--r--t/dejagnu.sh35
-rw-r--r--t/dejagnu2.sh46
-rw-r--r--t/dejagnu3.sh69
-rw-r--r--t/dejagnu4.sh102
-rw-r--r--t/dejagnu5.sh63
-rw-r--r--t/dejagnu6.sh58
-rw-r--r--t/dejagnu7.sh62
-rw-r--r--t/deleted-am.sh57
-rw-r--r--t/deleted-m4.sh63
-rw-r--r--t/depacl2.sh27
-rw-r--r--t/depcomp-implicit-auxdir.sh70
-rw-r--r--t/depcomp.sh48
-rw-r--r--t/depcomp2.sh53
-rw-r--r--t/depcomp8a.sh83
-rw-r--r--t/depcomp8b.sh78
-rw-r--r--t/depdist.sh74
-rw-r--r--t/depend-postproc.sh71
-rw-r--r--t/depend.sh36
-rw-r--r--t/depend3.sh46
-rw-r--r--t/depend4.sh36
-rw-r--r--t/depend5.sh77
-rw-r--r--t/depend6.sh46
-rw-r--r--t/deprecated-acinit.sh52
-rw-r--r--t/destdir.sh50
-rw-r--r--t/dir-named-obj-is-bad.sh61
-rw-r--r--t/discover.sh43
-rw-r--r--t/dist-auxdir-many-subdirs.sh137
-rw-r--r--t/dist-auxfile-2.sh60
-rw-r--r--t/dist-auxfile.sh95
-rw-r--r--t/dist-formats.tap469
-rw-r--r--t/dist-included-parent-dir.sh51
-rw-r--r--t/dist-install-sh.sh40
-rw-r--r--t/dist-lzma.sh41
-rw-r--r--t/dist-missing-am.sh65
-rw-r--r--t/dist-missing-included-m4.sh67
-rw-r--r--t/dist-missing-m4.sh69
-rw-r--r--t/dist-pr109765.sh42
-rw-r--r--t/dist-readonly.sh62
-rw-r--r--t/dist-repeated.sh102
-rw-r--r--t/dist-shar.sh47
-rw-r--r--t/dist-tarZ.sh59
-rw-r--r--t/dist-with-unreadable-makefile-fails.sh52
-rw-r--r--t/distcheck-configure-flags-am.sh67
-rw-r--r--t/distcheck-configure-flags-subpkg.sh80
-rw-r--r--t/distcheck-configure-flags.sh53
-rw-r--r--t/distcheck-hook.sh51
-rw-r--r--t/distcheck-hook2.sh79
-rw-r--r--t/distcheck-missing-m4.sh116
-rw-r--r--t/distcheck-no-prefix-or-srcdir-override.sh60
-rw-r--r--t/distcheck-outdated-m4.sh134
-rw-r--r--t/distcheck-override-infodir.sh78
-rw-r--r--t/distcheck-pr10470.sh57
-rw-r--r--t/distcheck-pr18286.sh70
-rw-r--r--t/distcheck-pr9579.sh92
-rw-r--r--t/distcheck-writable-srcdir.sh48
-rw-r--r--t/distcleancheck.sh69
-rw-r--r--t/distcom-subdir.sh76
-rw-r--r--t/distcom2.sh79
-rw-r--r--t/distcom3.sh55
-rw-r--r--t/distcom4.sh62
-rw-r--r--t/distcom5.sh72
-rw-r--r--t/distdir.sh81
-rw-r--r--t/disthook.sh86
-rw-r--r--t/distlinks.sh72
-rw-r--r--t/distlinksbrk.sh67
-rw-r--r--t/distname.sh47
-rw-r--r--t/dmalloc.sh59
-rw-r--r--t/doc-parsing-buglets-colneq-subst.sh37
-rw-r--r--t/doc-parsing-buglets-tabs.sh59
-rw-r--r--t/dollar.sh46
-rw-r--r--t/dollarvar.sh56
-rw-r--r--t/dollarvar2.sh86
-rw-r--r--t/double.sh29
-rw-r--r--t/dup2.sh29
-rw-r--r--t/else.sh38
-rw-r--r--t/empty-data-primary.sh31
-rw-r--r--t/empty-sources-primary.tap49
-rw-r--r--t/exdir.sh30
-rw-r--r--t/exdir2.sh29
-rw-r--r--t/exdir3.sh35
-rw-r--r--t/exeext.sh83
-rw-r--r--t/exeext2.sh43
-rw-r--r--t/exeext3.sh43
-rw-r--r--t/exeext4.sh70
-rw-r--r--t/ext.sh43
-rw-r--r--t/ext2.sh67
-rw-r--r--t/ext3.sh39
-rw-r--r--t/extra-data.sh33
-rw-r--r--t/extra-deps-lt.sh86
-rw-r--r--t/extra-deps.sh104
-rw-r--r--t/extra-dist-dirs-and-subdirs.sh57
-rw-r--r--t/extra-dist-vpath-dir-merge.sh66
-rw-r--r--t/extra-dist-vpath-dir.sh40
-rw-r--r--t/extra-dist-wildcards-gnu.sh93
-rw-r--r--t/extra-dist-wildcards-vpath.sh53
-rw-r--r--t/extra-dist-wildcards.sh50
-rw-r--r--t/extra-portability.sh95
-rw-r--r--t/extra-portability2.sh50
-rw-r--r--t/extra-portability3.sh60
-rw-r--r--t/extra-programs-and-libs.sh43
-rw-r--r--t/extra-programs-empty.sh53
-rw-r--r--t/extra-programs-misc.sh36
-rw-r--r--t/extra-sources-no-spurious.sh34
-rw-r--r--t/extra-sources.sh37
-rw-r--r--t/extra.sh41
-rw-r--r--t/f90only.sh34
-rw-r--r--t/flavor.sh60
-rw-r--r--t/flibs.sh54
-rw-r--r--t/fn99.sh50
-rw-r--r--t/fn99subdir.sh80
-rw-r--r--t/fnoc.sh39
-rw-r--r--t/fonly.sh34
-rw-r--r--t/forcemiss.sh34
-rw-r--r--t/forcemiss2.sh40
-rw-r--r--t/fort1.sh30
-rw-r--r--t/fort2.sh92
-rw-r--r--t/fort4.sh94
-rw-r--r--t/fort5.sh109
-rw-r--r--t/fortdep.sh39
-rw-r--r--t/gcj.sh36
-rw-r--r--t/gcj2.sh33
-rw-r--r--t/gcj3.sh36
-rw-r--r--t/gcj4.sh49
-rw-r--r--t/gcj5.sh32
-rw-r--r--t/gcj6.sh51
-rw-r--r--t/get-sysconf.sh70
-rw-r--r--t/gettext-basics.sh58
-rw-r--r--t/gettext-config-rpath.sh45
-rw-r--r--t/gettext-external-pr338.sh65
-rw-r--r--t/gettext-intl-subdir.sh49
-rw-r--r--t/gettext-macros.sh96
-rw-r--r--t/gettext-pr381.sh45
-rw-r--r--t/gnits.sh42
-rw-r--r--t/gnits2.sh115
-rw-r--r--t/gnits3.sh105
-rw-r--r--t/gnumake.sh43
-rw-r--r--t/gnuwarn.sh54
-rw-r--r--t/gnuwarn2.sh42
-rw-r--r--t/hdr-vars-defined-once.sh46
-rw-r--r--t/header.sh45
-rw-r--r--t/help-depend.sh37
-rw-r--r--t/help-depend2.sh38
-rw-r--r--t/help-dmalloc.sh32
-rw-r--r--t/help-init.sh37
-rw-r--r--t/help-lispdir.sh37
-rw-r--r--t/help-python.sh32
-rw-r--r--t/help-silent.sh38
-rw-r--r--t/help-upc.sh33
-rw-r--r--t/help.sh44
-rw-r--r--t/help2.sh52
-rw-r--r--t/help3.sh60
-rw-r--r--t/help4.sh54
-rw-r--r--t/hfs.sh33
-rw-r--r--t/implicit.sh35
-rw-r--r--t/init.sh38
-rw-r--r--t/init2.sh30
-rw-r--r--t/install-info-dir.sh190
-rw-r--r--t/install-sh-option-C.sh45
-rw-r--r--t/install-sh-unittests.sh152
-rw-r--r--t/installdir.sh64
-rw-r--r--t/instdat.sh33
-rw-r--r--t/instdat2.sh88
-rw-r--r--t/instdir-cond.sh48
-rw-r--r--t/instdir-cond2.sh51
-rw-r--r--t/instdir-java.sh51
-rw-r--r--t/instdir-lisp.sh48
-rw-r--r--t/instdir-ltlib.sh73
-rw-r--r--t/instdir-no-empty.sh122
-rw-r--r--t/instdir-prog.sh72
-rw-r--r--t/instdir-python.sh52
-rw-r--r--t/instdir-texi.sh62
-rw-r--r--t/instdir.sh61
-rw-r--r--t/instdir2.sh83
-rw-r--r--t/instexec.sh27
-rw-r--r--t/instfail-info.sh63
-rw-r--r--t/instfail-java.sh57
-rw-r--r--t/instfail-libtool.sh81
-rw-r--r--t/instfail.sh94
-rw-r--r--t/insthook.sh77
-rw-r--r--t/instman.sh36
-rw-r--r--t/instman2.sh33
-rw-r--r--t/instmany-mans.sh168
-rw-r--r--t/instmany-python.sh157
-rw-r--r--t/instmany.sh212
-rw-r--r--t/instspc.tap341
-rw-r--r--t/interp.sh38
-rw-r--r--t/interp2.sh37
-rw-r--r--t/java-check.sh64
-rw-r--r--t/java-clean.sh66
-rw-r--r--t/java-compile-install.sh97
-rw-r--r--t/java-compile-run-flat.sh241
-rw-r--r--t/java-compile-run-nested.sh250
-rw-r--r--t/java-empty-classpath.sh88
-rw-r--r--t/java-extra.sh73
-rw-r--r--t/java-mix.sh68
-rw-r--r--t/java-no-duplicate.sh45
-rw-r--r--t/java-nobase.sh65
-rw-r--r--t/java-noinst.sh55
-rw-r--r--t/java-rebuild.sh124
-rw-r--r--t/java-sources.sh65
-rw-r--r--t/java-uninstall.sh97
-rw-r--r--t/java.sh45
-rw-r--r--t/java2.sh47
-rw-r--r--t/java3.sh56
-rw-r--r--t/javadir-undefined.sh35
-rw-r--r--t/javaflags.sh56
-rw-r--r--t/javaprim.sh36
-rw-r--r--t/javasubst.sh36
-rw-r--r--t/ldadd.sh46
-rw-r--r--t/ldflags.sh50
-rw-r--r--t/lex-clean-cxx.sh126
-rw-r--r--t/lex-clean.sh114
-rw-r--r--t/lex-depend-cxx.sh97
-rw-r--r--t/lex-depend-grep.sh46
-rw-r--r--t/lex-depend.sh93
-rw-r--r--t/lex-header.sh93
-rw-r--r--t/lex-lib-external.sh79
-rw-r--r--t/lex-lib.sh72
-rw-r--r--t/lex-libobj.sh83
-rw-r--r--t/lex-line.sh135
-rw-r--r--t/lex-multiple.sh107
-rw-r--r--t/lex-nodist.sh90
-rw-r--r--t/lex-noyywrap.sh76
-rw-r--r--t/lex-pr204.sh88
-rw-r--r--t/lex-subobj-nodep.sh73
-rw-r--r--t/lex.sh40
-rw-r--r--t/lex2.sh35
-rw-r--r--t/lex3.sh91
-rw-r--r--t/lex5.sh97
-rw-r--r--t/lexcpp.sh44
-rw-r--r--t/lexvpath.sh128
-rw-r--r--t/lflags-cxx.sh70
-rw-r--r--t/lflags.sh71
-rw-r--r--t/libexec.sh35
-rw-r--r--t/libobj-basic.sh112
-rw-r--r--t/libobj-no-dependency-tracking.sh56
-rw-r--r--t/libobj10.sh56
-rw-r--r--t/libobj12.sh77
-rw-r--r--t/libobj13.sh51
-rw-r--r--t/libobj14.sh44
-rw-r--r--t/libobj15a.sh40
-rw-r--r--t/libobj15b.sh43
-rw-r--r--t/libobj15c.sh50
-rw-r--r--t/libobj16a.sh139
-rw-r--r--t/libobj16b.sh140
-rw-r--r--t/libobj17.sh72
-rw-r--r--t/libobj18.sh45
-rw-r--r--t/libobj19.sh94
-rw-r--r--t/libobj2.sh68
-rw-r--r--t/libobj20a.sh45
-rw-r--r--t/libobj20b.sh57
-rw-r--r--t/libobj20c.sh54
-rw-r--r--t/libobj3.sh39
-rw-r--r--t/libobj4.sh34
-rw-r--r--t/libobj5.sh39
-rw-r--r--t/libobj7.sh72
-rw-r--r--t/library.sh36
-rw-r--r--t/library2.sh31
-rw-r--r--t/library3.sh54
-rw-r--r--t/libtoo10.sh62
-rw-r--r--t/libtoo11.sh38
-rw-r--r--t/libtool-macros.sh60
-rw-r--r--t/libtool.sh41
-rw-r--r--t/libtool2.sh49
-rw-r--r--t/libtool3.sh94
-rw-r--r--t/libtool4.sh37
-rw-r--r--t/libtool5.sh44
-rw-r--r--t/libtool6.sh47
-rw-r--r--t/libtool7.sh98
-rw-r--r--t/libtool8.sh53
-rw-r--r--t/libtool9.sh106
-rw-r--r--t/license.sh61
-rw-r--r--t/license2.sh39
-rw-r--r--t/link_c_cxx.sh45
-rw-r--r--t/link_cond.sh88
-rw-r--r--t/link_dist.sh47
-rw-r--r--t/link_f90_only.sh44
-rw-r--r--t/link_f_only.sh44
-rw-r--r--t/link_fc.sh46
-rw-r--r--t/link_fccxx.sh46
-rw-r--r--t/link_fcxx.sh45
-rw-r--r--t/link_override.sh44
-rw-r--r--t/lisp-flags.sh41
-rw-r--r--t/lisp-loadpath.sh67
-rw-r--r--t/lisp-pr11806.sh51
-rw-r--r--t/lisp-subdir-mix.sh96
-rw-r--r--t/lisp-subdir.sh80
-rw-r--r--t/lisp-subdir2.sh78
-rw-r--r--t/lisp2.sh75
-rw-r--r--t/lisp3.sh84
-rw-r--r--t/lisp4.sh81
-rw-r--r--t/lisp5.sh80
-rw-r--r--t/lisp6.sh105
-rw-r--r--t/lisp7.sh47
-rw-r--r--t/lisp8.sh55
-rw-r--r--t/lispdry.sh56
-rw-r--r--t/list-of-tests.mk1323
-rw-r--r--t/listval.sh46
-rw-r--r--t/local.mk268
-rw-r--r--t/location.sh97
-rw-r--r--t/longlin2.sh48
-rw-r--r--t/longline.sh32
-rw-r--r--t/ltcond.sh106
-rw-r--r--t/ltcond2.sh91
-rw-r--r--t/ltconv.sh158
-rw-r--r--t/ltdeps.sh61
-rw-r--r--t/ltinit.sh66
-rw-r--r--t/ltinstloc.sh69
-rw-r--r--t/ltlibobjs.sh43
-rw-r--r--t/ltlibsrc.sh76
-rw-r--r--t/ltorder.sh62
-rw-r--r--t/m4-inclusion.sh56
-rw-r--r--t/maintclean-vpath.sh104
-rw-r--r--t/maintclean.sh96
-rw-r--r--t/maintmode-configure-msg.sh72
-rw-r--r--t/make-dryrun.tap147
-rw-r--r--t/make-is-gnu.sh65
-rw-r--r--t/make-keepgoing.tap137
-rw-r--r--t/make.sh52
-rw-r--r--t/makefile-deps.sh29
-rw-r--r--t/makej.sh53
-rw-r--r--t/makej2.sh44
-rw-r--r--t/maken.sh62
-rw-r--r--t/maken3.sh188
-rw-r--r--t/makevars.sh33
-rw-r--r--t/man.sh33
-rw-r--r--t/man2.sh55
-rw-r--r--t/man3.sh44
-rw-r--r--t/man5.sh69
-rw-r--r--t/man6.sh101
-rw-r--r--t/man7.sh59
-rw-r--r--t/man8.sh61
-rw-r--r--t/mdate.sh37
-rw-r--r--t/mdate2.sh40
-rw-r--r--t/mdate3.sh49
-rw-r--r--t/mdate4.sh46
-rw-r--r--t/mdate5.sh45
-rw-r--r--t/mdate6.sh36
-rw-r--r--t/missing-auxfile-stops-makefiles-creation.sh65
-rw-r--r--t/missing-version-mismatch.sh50
-rw-r--r--t/missing3.sh55
-rw-r--r--t/mkdir_p.sh55
-rw-r--r--t/mkdirp-deprecation.sh48
-rw-r--r--t/mkinst2.sh40
-rw-r--r--t/mkinst3.sh68
-rw-r--r--t/mkinstall.sh31
-rw-r--r--t/mmode.sh64
-rw-r--r--t/mmodely.sh94
-rw-r--r--t/no-extra-c-stuff.sh74
-rw-r--r--t/no-extra-makefile-code.sh41
-rw-r--r--t/no-spurious-install-recursive.sh32
-rw-r--r--t/nobase-libtool.sh94
-rw-r--r--t/nobase-nodist.sh60
-rw-r--r--t/nobase-python.sh84
-rw-r--r--t/nobase.sh147
-rw-r--r--t/nodef.sh58
-rw-r--r--t/nodef2.sh54
-rw-r--r--t/nodep.sh42
-rw-r--r--t/nodep2.sh45
-rw-r--r--t/nodepcomp.sh26
-rw-r--r--t/nodist.sh40
-rw-r--r--t/nodist2.sh38
-rw-r--r--t/nodist3.sh37
-rw-r--r--t/noinst.sh32
-rw-r--r--t/noinstdir.sh70
-rw-r--r--t/nolink.sh36
-rw-r--r--t/nostdinc.sh56
-rw-r--r--t/notrans.sh135
-rw-r--r--t/number.sh36
-rw-r--r--t/objc-basic.sh38
-rw-r--r--t/objc-deps.sh72
-rw-r--r--t/objc-flags.sh62
-rw-r--r--t/objc-megademo.sh340
-rw-r--r--t/objc-minidemo.sh76
-rw-r--r--t/objcxx-basic.sh40
-rw-r--r--t/objcxx-deps.sh72
-rw-r--r--t/objcxx-flags.sh63
-rw-r--r--t/objcxx-minidemo.sh68
-rw-r--r--t/objext-pr10128.sh58
-rw-r--r--t/oldvars.sh37
-rw-r--r--t/order.sh32
-rw-r--r--t/output-order.sh53
-rw-r--r--t/output.sh35
-rw-r--r--t/output10.sh61
-rw-r--r--t/output11.sh63
-rw-r--r--t/output12.sh60
-rw-r--r--t/output13.sh50
-rw-r--r--t/output2.sh38
-rw-r--r--t/output3.sh38
-rw-r--r--t/output4.sh35
-rw-r--r--t/output5.sh31
-rw-r--r--t/output6.sh72
-rw-r--r--t/output7.sh71
-rw-r--r--t/output8.sh54
-rw-r--r--t/output9.sh52
-rw-r--r--t/override-conditional-1.sh53
-rw-r--r--t/override-conditional-2.sh39
-rw-r--r--t/override-conditional-pr13940.sh44
-rw-r--r--t/override-html.sh33
-rw-r--r--t/override-suggest-local.sh44
-rw-r--r--t/parallel-am.sh103
-rw-r--r--t/parallel-am2.sh77
-rw-r--r--t/parallel-am3.sh74
-rw-r--r--t/parallel-tests-basics.sh144
-rw-r--r--t/parallel-tests-cmdline-override.sh82
-rw-r--r--t/parallel-tests-concurrency-2.sh65
-rw-r--r--t/parallel-tests-concurrency.sh120
-rw-r--r--t/parallel-tests-console-output.sh102
-rw-r--r--t/parallel-tests-driver-install.sh53
-rw-r--r--t/parallel-tests-dry-run-1.sh92
-rw-r--r--t/parallel-tests-dry-run-2.sh110
-rw-r--r--t/parallel-tests-empty-testlogs.sh94
-rw-r--r--t/parallel-tests-empty.sh42
-rw-r--r--t/parallel-tests-exeext.sh66
-rw-r--r--t/parallel-tests-exit-status-reported.sh68
-rw-r--r--t/parallel-tests-exit-statuses.sh91
-rw-r--r--t/parallel-tests-extra-programs.sh176
-rw-r--r--t/parallel-tests-fd-redirect-exeext.sh115
-rw-r--r--t/parallel-tests-fd-redirect.sh68
-rw-r--r--t/parallel-tests-fork-bomb.sh146
-rw-r--r--t/parallel-tests-generated-and-distributed.sh74
-rw-r--r--t/parallel-tests-harderror.sh94
-rw-r--r--t/parallel-tests-interrupt.tap116
-rw-r--r--t/parallel-tests-log-compiler-1.sh125
-rw-r--r--t/parallel-tests-log-compiler-2.sh95
-rw-r--r--t/parallel-tests-log-compiler-example.sh68
-rw-r--r--t/parallel-tests-log-override-1.sh109
-rw-r--r--t/parallel-tests-log-override-2.sh82
-rw-r--r--t/parallel-tests-log-override-recheck.sh97
-rw-r--r--t/parallel-tests-no-color-in-log.sh53
-rw-r--r--t/parallel-tests-no-spurious-summary.sh65
-rw-r--r--t/parallel-tests-once.sh47
-rw-r--r--t/parallel-tests-recheck-depends-on-all.sh89
-rw-r--r--t/parallel-tests-recheck-pr11791.sh85
-rw-r--r--t/parallel-tests-recheck.sh82
-rw-r--r--t/parallel-tests-reset-term.sh62
-rw-r--r--t/parallel-tests-subdir.sh50
-rw-r--r--t/parallel-tests-suffix-prog.sh77
-rw-r--r--t/parallel-tests-suffix.sh62
-rw-r--r--t/parallel-tests-trailing-whitespace.sh46
-rw-r--r--t/parallel-tests-unreadable.sh75
-rw-r--r--t/parse.sh36
-rw-r--r--t/per-target-flags.sh92
-rw-r--r--t/percent.sh36
-rw-r--r--t/percent2.sh39
-rwxr-xr-xt/perf/cond.sh56
-rwxr-xr-xt/perf/testsuite-recheck.sh98
-rwxr-xr-xt/perf/testsuite-summary.sh75
-rw-r--r--t/phony.sh32
-rw-r--r--t/pkg-config-macros.sh95
-rw-r--r--t/pluseq.sh30
-rw-r--r--t/pluseq10.sh52
-rw-r--r--t/pluseq11.sh52
-rw-r--r--t/pluseq2.sh46
-rw-r--r--t/pluseq3.sh50
-rw-r--r--t/pluseq4.sh34
-rw-r--r--t/pluseq5.sh60
-rw-r--r--t/pluseq6.sh38
-rw-r--r--t/pluseq7.sh37
-rw-r--r--t/pluseq8.sh43
-rw-r--r--t/pluseq9.sh71
-rw-r--r--t/pm/Cond2.pl22
-rw-r--r--t/pm/Cond3.pl22
-rw-r--r--t/pm/Condition-t.pl327
-rw-r--r--t/pm/Condition.pl277
-rw-r--r--t/pm/DisjCon2.pl24
-rw-r--r--t/pm/DisjCon3.pl23
-rw-r--r--t/pm/DisjConditions-t.pl461
-rw-r--r--t/pm/DisjConditions.pl404
-rw-r--r--t/pm/Version.pl129
-rw-r--r--t/pm/Version2.pl20
-rw-r--r--t/pm/Version3.pl20
-rw-r--r--t/pm/Wrap.pl112
-rw-r--r--t/posixsubst-data.sh74
-rw-r--r--t/posixsubst-extradist.sh54
-rw-r--r--t/posixsubst-ldadd.sh78
-rw-r--r--t/posixsubst-libraries.sh65
-rw-r--r--t/posixsubst-ltlibraries.sh66
-rw-r--r--t/posixsubst-programs.sh63
-rw-r--r--t/posixsubst-scripts.sh99
-rw-r--r--t/posixsubst-sources.sh81
-rw-r--r--t/posixsubst-tests.sh68
-rw-r--r--t/ppf77.sh34
-rw-r--r--t/pr2.sh48
-rw-r--r--t/pr211.sh51
-rw-r--r--t/pr220.sh58
-rw-r--r--t/pr224.sh63
-rw-r--r--t/pr229.sh35
-rw-r--r--t/pr243.sh57
-rw-r--r--t/pr266.sh46
-rw-r--r--t/pr279-2.sh51
-rw-r--r--t/pr279.sh50
-rw-r--r--t/pr287.sh47
-rw-r--r--t/pr300-lib.sh76
-rw-r--r--t/pr300-ltlib.sh82
-rw-r--r--t/pr300-prog.sh72
-rw-r--r--t/pr307.sh93
-rw-r--r--t/pr401.sh187
-rw-r--r--t/pr401b.sh187
-rw-r--r--t/pr401c.sh189
-rw-r--r--t/pr72.sh44
-rw-r--r--t/pr87.sh75
-rw-r--r--t/pr9.sh58
-rw-r--r--t/precious.sh32
-rw-r--r--t/prefix.sh33
-rw-r--r--t/preproc-basics.sh106
-rw-r--r--t/preproc-c-compile.sh118
-rw-r--r--t/preproc-demo.sh230
-rw-r--r--t/preproc-errmsg.sh78
-rw-r--r--t/primary-prefix-couples-documented-valid.sh87
-rw-r--r--t/primary-prefix-couples-force-valid.sh92
-rw-r--r--t/primary-prefix-invalid-couples.tap193
-rw-r--r--t/primary-prefix-valid-couples.sh87
-rw-r--r--t/primary.sh30
-rw-r--r--t/primary2.sh32
-rw-r--r--t/primary3.sh43
-rw-r--r--t/print-libdir.sh46
-rw-r--r--t/proginst.sh29
-rw-r--r--t/programs-primary-rewritten.sh61
-rw-r--r--t/py-compile-basedir.sh54
-rw-r--r--t/py-compile-basic.sh70
-rw-r--r--t/py-compile-destdir.sh47
-rw-r--r--t/py-compile-env.sh59
-rw-r--r--t/py-compile-option-terminate.sh43
-rw-r--r--t/py-compile-usage.sh75
-rw-r--r--t/python-am-path-iftrue.sh55
-rw-r--r--t/python-dist.sh78
-rw-r--r--t/python-missing.sh82
-rw-r--r--t/python-pr10995.sh56
-rw-r--r--t/python-too-old.sh61
-rw-r--r--t/python-vars.sh105
-rw-r--r--t/python-virtualenv.sh201
-rw-r--r--t/python.sh60
-rw-r--r--t/python10.sh87
-rw-r--r--t/python11.sh58
-rw-r--r--t/python12.sh54
-rw-r--r--t/python2.sh106
-rw-r--r--t/python3.sh47
-rw-r--r--t/recurs-user-deeply-nested.sh97
-rw-r--r--t/recurs-user-indir.sh99
-rw-r--r--t/recurs-user-keep-going.sh95
-rw-r--r--t/recurs-user-many.sh73
-rw-r--r--t/recurs-user-no-subdirs.sh52
-rw-r--r--t/recurs-user-no-top-level.sh50
-rw-r--r--t/recurs-user-override.sh68
-rw-r--r--t/recurs-user-phony.sh64
-rw-r--r--t/recurs-user-wrap.sh59
-rw-r--r--t/recurs-user.sh81
-rw-r--r--t/recurs-user2.sh103
-rw-r--r--t/relativize.tap96
-rw-r--r--t/remake-aclocal-version-mismatch.sh45
-rw-r--r--t/remake-after-acinclude-m4.sh112
-rw-r--r--t/remake-after-aclocal-m4.sh112
-rw-r--r--t/remake-after-configure-ac.sh109
-rw-r--r--t/remake-after-makefile-am.sh111
-rw-r--r--t/remake-all-1.sh67
-rw-r--r--t/remake-all-2.sh75
-rw-r--r--t/remake-am-pr10111.sh62
-rw-r--r--t/remake-config-status-dependencies.sh70
-rw-r--r--t/remake-configure-dependencies.sh83
-rw-r--r--t/remake-deeply-nested.sh83
-rw-r--r--t/remake-deleted-am-2.sh75
-rw-r--r--t/remake-deleted-am-subdir.sh77
-rw-r--r--t/remake-deleted-am.sh67
-rw-r--r--t/remake-deleted-m4-file.sh74
-rw-r--r--t/remake-fail.sh69
-rw-r--r--t/remake-gnulib-add-acsubst.sh133
-rw-r--r--t/remake-gnulib-add-header.sh109
-rw-r--r--t/remake-gnulib-remove-header.sh136
-rw-r--r--t/remake-include-aclocal.sh115
-rw-r--r--t/remake-include-configure.sh112
-rw-r--r--t/remake-include-makefile.sh112
-rw-r--r--t/remake-m4-pr10111.sh60
-rw-r--r--t/remake-macrodir.sh83
-rw-r--r--t/remake-maintainer-mode.sh80
-rw-r--r--t/remake-makefile-intree.sh190
-rw-r--r--t/remake-makefile-vpath.sh192
-rw-r--r--t/remake-mild-stress.sh146
-rw-r--r--t/remake-moved-m4-file.sh76
-rw-r--r--t/remake-not-after-make-dist.sh56
-rw-r--r--t/remake-recurs-user.sh89
-rw-r--r--t/remake-renamed-am.sh58
-rw-r--r--t/remake-renamed-m4-file.sh83
-rw-r--r--t/remake-renamed-m4-macro-and-file.sh86
-rw-r--r--t/remake-renamed-m4-macro.sh72
-rw-r--r--t/remake-subdir-from-subdir.sh56
-rw-r--r--t/remake-subdir-gnu.sh80
-rw-r--r--t/remake-subdir-grepping.sh39
-rw-r--r--t/remake-subdir-long-time.sh114
-rw-r--r--t/remake-subdir-no-makefile.sh72
-rw-r--r--t/remake-subdir-only.sh55
-rw-r--r--t/remake-subdir.sh81
-rw-r--r--t/remake-subdir2.sh82
-rw-r--r--t/remake-subdir3.sh62
-rw-r--r--t/remake-timing-bug-pr8365.sh106
-rw-r--r--t/repeated-options.sh81
-rw-r--r--t/reqd2.sh57
-rw-r--r--t/rm-f-probe.sh74
-rw-r--r--t/rulepat.sh30
-rw-r--r--t/sanity.sh43
-rw-r--r--t/seenc.sh43
-rw-r--r--t/self-check-cc-no-c-o.sh35
-rw-r--r--t/self-check-configure-help.sh274
-rw-r--r--t/self-check-dir.tap71
-rw-r--r--t/self-check-exit.tap82
-rw-r--r--t/self-check-explicit-skips.sh54
-rw-r--r--t/self-check-is-blocked-signal.tap29
-rw-r--r--t/self-check-is_newest.tap90
-rw-r--r--t/self-check-me.tap67
-rw-r--r--t/self-check-report.sh54
-rw-r--r--t/self-check-seq.tap75
-rw-r--r--t/self-check-shell-no-trail-bslash.sh81
-rw-r--r--t/self-check-unindent.tap255
-rw-r--r--t/serial-tests.sh84
-rw-r--r--t/silent-c.sh88
-rw-r--r--t/silent-configsite.sh86
-rw-r--r--t/silent-custom.sh110
-rw-r--r--t/silent-cxx.sh107
-rw-r--r--t/silent-f77.sh89
-rw-r--r--t/silent-f90.sh89
-rw-r--r--t/silent-gen.sh82
-rw-r--r--t/silent-lex.sh133
-rw-r--r--t/silent-lt.sh93
-rw-r--r--t/silent-many-languages.sh253
-rw-r--r--t/silent-nested-vars.sh144
-rw-r--r--t/silent-texi.sh82
-rw-r--r--t/silent-yacc-headers.sh164
-rw-r--r--t/silent-yacc.sh130
-rw-r--r--t/sourcefile-in-subdir.sh36
-rw-r--r--t/space.sh29
-rw-r--r--t/specflg-dummy.sh246
-rw-r--r--t/specflg6.sh53
-rw-r--r--t/specflg7.sh64
-rw-r--r--t/specflg8.sh63
-rw-r--r--t/specflg9.sh45
-rw-r--r--t/spell.sh29
-rw-r--r--t/spell2.sh31
-rw-r--r--t/spell3.sh31
-rw-r--r--t/spelling.sh30
-rw-r--r--t/spy-double-colon.sh106
-rw-r--r--t/spy-rm.tap48
-rw-r--r--t/src-acsubst.sh44
-rw-r--r--t/stamph2.sh68
-rw-r--r--t/stdinc.sh62
-rw-r--r--t/stdlib.sh51
-rw-r--r--t/stdlib2.sh94
-rw-r--r--t/strictness-override.sh123
-rw-r--r--t/strictness-precedence.sh77
-rw-r--r--t/strip.sh50
-rw-r--r--t/strip2.sh46
-rw-r--r--t/strip3.sh48
-rw-r--r--t/subdir-ac-subst.sh94
-rw-r--r--t/subdir-add-pr46.sh96
-rw-r--r--t/subdir-add2-pr46.sh97
-rw-r--r--t/subdir-am-cond.sh93
-rw-r--r--t/subdir-cond-err.sh40
-rw-r--r--t/subdir-cond-gettext.sh44
-rw-r--r--t/subdir-distclean.sh103
-rw-r--r--t/subdir-env-interference.sh37
-rw-r--r--t/subdir-keep-going-pr12554.sh70
-rw-r--r--t/subdir-order.sh159
-rw-r--r--t/subdir-subsub.sh59
-rw-r--r--t/subdir-with-slash.sh55
-rw-r--r--t/subdir.sh40
-rw-r--r--t/subobj-clean-lt-pr10697.sh168
-rw-r--r--t/subobj-clean-pr10697.sh163
-rw-r--r--t/subobj-indir-pr13928.sh51
-rw-r--r--t/subobj-objname-clash.sh104
-rw-r--r--t/subobj-pr13928-more-langs.sh138
-rw-r--r--t/subobj-vpath-pr13928.sh127
-rw-r--r--t/subobj.sh91
-rw-r--r--t/subobj10.sh55
-rw-r--r--t/subobj11a.sh80
-rw-r--r--t/subobj11b.sh82
-rw-r--r--t/subobj11c.sh48
-rw-r--r--t/subobj2.sh38
-rw-r--r--t/subobj4.sh50
-rw-r--r--t/subobj5.sh69
-rw-r--r--t/subobj6.sh85
-rw-r--r--t/subobj7.sh38
-rw-r--r--t/subobj8.sh46
-rw-r--r--t/subobj9.sh87
-rw-r--r--t/subobjname.sh72
-rw-r--r--t/subpkg-macrodir.sh85
-rw-r--r--t/subpkg-yacc.sh129
-rw-r--r--t/subpkg.sh111
-rw-r--r--t/subpkg2.sh70
-rw-r--r--t/subpkg3.sh55
-rw-r--r--t/subpkg4.sh71
-rw-r--r--t/subst-no-trailing-empty-line.sh93
-rw-r--r--t/subst.sh39
-rw-r--r--t/subst3.sh178
-rw-r--r--t/subst4.sh44
-rw-r--r--t/subst5.sh40
-rw-r--r--t/substre2.sh50
-rw-r--r--t/substref.sh54
-rw-r--r--t/substtarg.sh51
-rw-r--r--t/suffix-chain.tap64
-rw-r--r--t/suffix-custom-pr14441.sh56
-rw-r--r--t/suffix-custom-subobj-and-specflg.sh62
-rw-r--r--t/suffix-custom-subobj.sh59
-rw-r--r--t/suffix-extra-c-stuff-pr14560.sh37
-rw-r--r--t/suffix.sh59
-rw-r--r--t/suffix10.tap82
-rw-r--r--t/suffix11.tap82
-rw-r--r--t/suffix2.sh54
-rw-r--r--t/suffix3.tap82
-rw-r--r--t/suffix4.sh39
-rw-r--r--t/suffix5.sh66
-rw-r--r--t/suffix6.sh63
-rw-r--r--t/suffix6b.sh75
-rw-r--r--t/suffix6c.sh92
-rw-r--r--t/suffix7.sh37
-rw-r--r--t/suffix8.tap105
-rw-r--r--t/suffix9.sh64
-rw-r--r--t/symlink.sh40
-rw-r--r--t/symlink2.sh32
-rw-r--r--t/syntax.sh31
-rw-r--r--t/tags-pr12372.sh85
-rw-r--r--t/tags.sh29
-rw-r--r--t/tags2.sh42
-rw-r--r--t/tagsub.sh48
-rw-r--r--t/tap-ambiguous-directive.sh53
-rw-r--r--t/tap-autonumber.sh73
-rw-r--r--t/tap-bad-prog.tap85
-rw-r--r--t/tap-bailout-and-logging.sh48
-rw-r--r--t/tap-bailout-leading-space.sh63
-rw-r--r--t/tap-bailout-suppress-badexit.sh63
-rw-r--r--t/tap-bailout-suppress-later-diagnostic.sh40
-rw-r--r--t/tap-bailout-suppress-later-errors.sh70
-rw-r--r--t/tap-bailout.sh134
-rw-r--r--t/tap-basic.sh168
-rw-r--r--t/tap-color.sh163
-rw-r--r--t/tap-common-setup.sh42
-rw-r--r--t/tap-deps.sh84
-rw-r--r--t/tap-diagnostic-custom.sh91
-rw-r--r--t/tap-diagnostic.sh117
-rw-r--r--t/tap-doc.sh96
-rw-r--r--t/tap-doc2.sh138
-rw-r--r--t/tap-driver-stderr.sh49
-rw-r--r--t/tap-empty-diagnostic.sh39
-rw-r--r--t/tap-empty.sh53
-rw-r--r--t/tap-escape-directive-2.sh52
-rw-r--r--t/tap-escape-directive.sh36
-rw-r--r--t/tap-exit.sh51
-rw-r--r--t/tap-fancy.sh127
-rw-r--r--t/tap-fancy2.sh136
-rw-r--r--t/tap-global-log.sh122
-rw-r--r--t/tap-global-result.sh185
-rw-r--r--t/tap-log.sh162
-rw-r--r--t/tap-merge-stdout-stderr.sh63
-rw-r--r--t/tap-missing-plan-and-bad-exit.sh41
-rw-r--r--t/tap-more.sh159
-rw-r--r--t/tap-more2.sh89
-rw-r--r--t/tap-msg0-bailout.sh35
-rw-r--r--t/tap-msg0-directive.sh38
-rw-r--r--t/tap-msg0-misc.sh79
-rw-r--r--t/tap-msg0-planskip.sh34
-rw-r--r--t/tap-msg0-result.sh60
-rw-r--r--t/tap-negative-numbers.sh55
-rw-r--r--t/tap-no-disable-hard-error.sh47
-rw-r--r--t/tap-no-merge-stdout-stderr.sh51
-rw-r--r--t/tap-no-spurious-numbers.sh98
-rw-r--r--t/tap-no-spurious-summary.sh44
-rw-r--r--t/tap-no-spurious.sh111
-rw-r--r--t/tap-not-ok-skip.sh36
-rw-r--r--t/tap-number-wordboundary.sh105
-rw-r--r--t/tap-numbers-leading-zero.sh107
-rw-r--r--t/tap-numeric-description.sh66
-rw-r--r--t/tap-out-of-order.sh77
-rw-r--r--t/tap-passthrough-exit.sh58
-rw-r--r--t/tap-passthrough.sh165
-rw-r--r--t/tap-plan-corner.sh189
-rw-r--r--t/tap-plan-errors.sh112
-rw-r--r--t/tap-plan-leading-zero.sh53
-rw-r--r--t/tap-plan-malformed.sh57
-rw-r--r--t/tap-plan-middle.sh80
-rw-r--r--t/tap-plan-whitespace.sh38
-rw-r--r--t/tap-plan.sh51
-rw-r--r--t/tap-planskip-and-logging.sh70
-rw-r--r--t/tap-planskip-badexit.sh50
-rw-r--r--t/tap-planskip-bailout.sh34
-rw-r--r--t/tap-planskip-case-insensitive.sh42
-rw-r--r--t/tap-planskip-late.sh42
-rw-r--r--t/tap-planskip-later-errors.sh37
-rw-r--r--t/tap-planskip-unplanned-corner.sh45
-rw-r--r--t/tap-planskip-unplanned.sh68
-rw-r--r--t/tap-planskip-whitespace.sh44
-rw-r--r--t/tap-planskip.sh75
-rw-r--r--t/tap-recheck-logs.sh113
-rw-r--r--t/tap-recheck.sh220
-rw-r--r--t/tap-result-comment.sh51
-rw-r--r--t/tap-signal.tap133
-rw-r--r--t/tap-summary-color.sh23
-rw-r--r--t/tap-summary.sh23
-rw-r--r--t/tap-test-number-0.sh58
-rw-r--r--t/tap-todo-skip-together.sh37
-rw-r--r--t/tap-todo-skip-whitespace.sh99
-rw-r--r--t/tap-todo-skip.sh86
-rw-r--r--t/tap-unplanned.sh153
-rw-r--r--t/tap-whitespace-normalization.sh163
-rw-r--r--t/tap-with-and-without-number.sh48
-rw-r--r--t/tap-xfail-tests.sh63
-rw-r--r--t/tar-opts-errors.sh52
-rw-r--r--t/tar-override.sh68
-rw-r--r--t/tar-pax.sh43
-rw-r--r--t/tar-ustar-id-too-high.sh88
-rw-r--r--t/tar-ustar.sh43
-rw-r--r--t/target-cflags.sh75
-rw-r--r--t/targetclash.sh33
-rw-r--r--t/test-driver-acsubst.sh86
-rw-r--r--t/test-driver-cond.sh116
-rw-r--r--t/test-driver-create-log-dir.sh82
-rw-r--r--t/test-driver-custom-multitest-recheck.sh220
-rw-r--r--t/test-driver-custom-multitest-recheck2.sh176
-rw-r--r--t/test-driver-custom-multitest.sh168
-rw-r--r--t/test-driver-custom-no-extra-driver.sh63
-rw-r--r--t/test-driver-custom-xfail-tests.sh163
-rw-r--r--t/test-driver-custom.sh143
-rw-r--r--t/test-driver-fail.sh64
-rw-r--r--t/test-driver-is-distributed.sh83
-rw-r--r--t/test-driver-strip-vpath.sh97
-rw-r--r--t/test-driver-trs-suffix-registered.sh57
-rw-r--r--t/test-extensions-cond.sh69
-rw-r--r--t/test-extensions.sh71
-rw-r--r--t/test-harness-vpath-rewrite.sh57
-rw-r--r--t/test-log.sh176
-rw-r--r--t/test-logs-repeated.sh44
-rw-r--r--t/test-metadata-global-log.sh146
-rw-r--r--t/test-metadata-global-result.sh195
-rw-r--r--t/test-metadata-recheck.sh164
-rw-r--r--t/test-metadata-results.sh177
-rw-r--r--t/test-missing.sh65
-rw-r--r--t/test-missing2.sh52
-rw-r--r--t/test-trs-basic.sh157
-rw-r--r--t/test-trs-recover.sh161
-rw-r--r--t/test-trs-recover2.sh118
-rw-r--r--t/tests-environment-and-log-compiler.sh74
-rw-r--r--t/tests-environment-backcompat.sh59
-rw-r--r--t/tests-environment-fd-redirect.sh92
-rw-r--r--t/tests-environment.sh46
-rw-r--r--t/testsuite-summary-color.sh197
-rw-r--r--t/testsuite-summary-count-many.sh102
-rw-r--r--t/testsuite-summary-count.sh159
-rw-r--r--t/testsuite-summary-reference-log.sh82
-rw-r--r--t/transform.sh68
-rw-r--r--t/transform2.sh99
-rw-r--r--t/transform3.sh92
-rw-r--r--t/txinfo-absolute-srcdir-pr408.sh70
-rw-r--r--t/txinfo-add-missing-and-dist.sh62
-rw-r--r--t/txinfo-bsd-make-recurs.sh40
-rw-r--r--t/txinfo-builddir.sh131
-rw-r--r--t/txinfo-clean.sh126
-rw-r--r--t/txinfo-dvi-recurs.sh39
-rw-r--r--t/txinfo-include.sh164
-rw-r--r--t/txinfo-info-in-srcdir.sh91
-rw-r--r--t/txinfo-makeinfo-error-no-clobber.sh78
-rw-r--r--t/txinfo-many-output-formats-vpath.sh206
-rw-r--r--t/txinfo-many-output-formats.sh206
-rw-r--r--t/txinfo-no-clutter.sh146
-rw-r--r--t/txinfo-no-extra-dist.sh59
-rw-r--r--t/txinfo-no-installinfo.sh48
-rw-r--r--t/txinfo-no-repeated-targets.sh41
-rw-r--r--t/txinfo-no-split.sh101
-rw-r--r--t/txinfo-nodist-info.sh66
-rw-r--r--t/txinfo-other-suffixes.sh41
-rw-r--r--t/txinfo-override-infodeps.sh62
-rw-r--r--t/txinfo-override-texinfo-tex.sh68
-rw-r--r--t/txinfo-setfilename-repeated.sh41
-rw-r--r--t/txinfo-setfilename-suffix-strip.sh33
-rw-r--r--t/txinfo-subdir-pr343.sh60
-rw-r--r--t/txinfo-tex-dist.sh47
-rw-r--r--t/txinfo-unrecognized-extension.sh38
-rw-r--r--t/txinfo-unrecognized-info-suffix.sh32
-rw-r--r--t/txinfo-vtexi.sh62
-rw-r--r--t/txinfo-vtexi2.sh42
-rw-r--r--t/txinfo-vtexi3.sh124
-rw-r--r--t/txinfo-vtexi4.sh106
-rw-r--r--t/txinfo-without-info-suffix.sh57
-rw-r--r--t/txinfo19.sh72
-rw-r--r--t/txinfo23.sh69
-rw-r--r--t/txinfo24.sh83
-rw-r--r--t/txinfo25.sh116
-rw-r--r--t/txinfo28.sh89
-rw-r--r--t/uninstall-fail.sh101
-rw-r--r--t/uninstall-pr9578.sh67
-rw-r--r--t/unused.sh35
-rw-r--r--t/upc.sh50
-rw-r--r--t/upc2.sh31
-rw-r--r--t/upc3.sh65
-rw-r--r--t/vala-configure.sh118
-rw-r--r--t/vala-grepping.sh86
-rw-r--r--t/vala-headers.sh85
-rw-r--r--t/vala-libs.sh100
-rw-r--r--t/vala-mix.sh125
-rw-r--r--t/vala-mix2.sh122
-rw-r--r--t/vala-non-recursive-setup.sh94
-rw-r--r--t/vala-parallel.sh76
-rw-r--r--t/vala-per-target-flags.sh100
-rw-r--r--t/vala-recursive-setup.sh107
-rw-r--r--t/vala-vapi.sh95
-rw-r--r--t/vala-vpath.sh93
-rw-r--r--t/var-recurs.sh34
-rw-r--r--t/var-recurs2.sh31
-rw-r--r--t/vars.sh36
-rw-r--r--t/vars3.sh72
-rw-r--r--t/vartar.sh39
-rw-r--r--t/vartypo2.sh69
-rw-r--r--t/vartypos.sh89
-rw-r--r--t/version3.sh27
-rw-r--r--t/version4.sh26
-rw-r--r--t/version6.sh36
-rw-r--r--t/version7.sh67
-rw-r--r--t/version8.sh24
-rw-r--r--t/vpath.sh33
-rw-r--r--t/warning-groups-win-over-strictness.sh64
-rw-r--r--t/warnings-obsolete-default.sh39
-rw-r--r--t/warnings-override.sh111
-rw-r--r--t/warnings-precedence.sh77
-rw-r--r--t/warnings-strictness-interactions.sh59
-rw-r--r--t/warnings-unknown.sh44
-rw-r--r--t/warnings-win-over-strictness.sh90
-rw-r--r--t/warnopts.sh75
-rw-r--r--t/werror.sh26
-rw-r--r--t/werror2.sh48
-rw-r--r--t/werror3.sh48
-rw-r--r--t/werror4.sh66
-rw-r--r--t/whoami.sh27
-rw-r--r--t/xsource.sh38
-rw-r--r--t/yacc-auxdir.sh56
-rw-r--r--t/yacc-basic.sh108
-rw-r--r--t/yacc-bison-skeleton-cxx.sh102
-rw-r--r--t/yacc-bison-skeleton.sh77
-rw-r--r--t/yacc-clean-cxx.sh161
-rw-r--r--t/yacc-clean.sh147
-rw-r--r--t/yacc-cxx-grepping.sh81
-rw-r--r--t/yacc-cxx.sh140
-rw-r--r--t/yacc-d-basic.sh163
-rw-r--r--t/yacc-d-cxx.sh232
-rw-r--r--t/yacc-d-vpath.sh108
-rw-r--r--t/yacc-deleted-headers.sh163
-rw-r--r--t/yacc-depend.sh82
-rw-r--r--t/yacc-depend2.sh81
-rw-r--r--t/yacc-dist-nobuild-subdir.sh92
-rw-r--r--t/yacc-dist-nobuild.sh89
-rw-r--r--t/yacc-dry.sh58
-rw-r--r--t/yacc-grepping.sh80
-rw-r--r--t/yacc-grepping2.sh81
-rw-r--r--t/yacc-headers-and-dist-pr47.sh89
-rw-r--r--t/yacc-line.sh126
-rw-r--r--t/yacc-misc.sh86
-rw-r--r--t/yacc-mix-c-cxx.sh206
-rw-r--r--t/yacc-nodist.sh101
-rw-r--r--t/yacc-pr204.sh83
-rw-r--r--t/yacc-subdir.sh106
-rw-r--r--t/yacc-vpath.sh97
-rw-r--r--t/yacc-weirdnames.sh54
-rw-r--r--t/yflags-cmdline-override.sh87
-rw-r--r--t/yflags-conditional.sh143
-rw-r--r--t/yflags-cxx.sh68
-rw-r--r--t/yflags-d-false-positives.sh41
-rw-r--r--t/yflags-force-conditional.sh85
-rw-r--r--t/yflags-force-override.sh62
-rw-r--r--t/yflags-var-expand.sh61
-rw-r--r--t/yflags.sh68
1473 files changed, 211282 insertions, 0 deletions
diff --git a/.autom4te.cfg b/.autom4te.cfg
new file mode 100644
index 000000000..787905ad8
--- /dev/null
+++ b/.autom4te.cfg
@@ -0,0 +1,5 @@
+## autom4te.cfg for the Automake package.
+##
+begin-language: "Autoconf-without-aclocal-m4"
+args: --cache=.autom4te.cache
+end-language: "Autoconf-without-aclocal-m4"
diff --git a/.git-log-fix b/.git-log-fix
new file mode 100644
index 000000000..d87a0ec22
--- /dev/null
+++ b/.git-log-fix
@@ -0,0 +1,13 @@
+# This file is expected to be used via gitlog-to-changelog's --amend=FILE
+# option. It specifies what changes to make to each given SHA1's commit
+# log and metadata, using Perl-eval'able expressions.
+
+3b369e6bbe0fb6d7359398935706c87dd9375cb6
+# Date: Thu Feb 16 22:29:32 2012 +0100
+# Fix a typo.
+s| bur | bug |
+
+22729165f6bb902daeb8a4d8e7cb06982390f327
+# Date: Fri Feb 17 10:13:15 2012 +0100
+# Fix a typo.
+s|.fix-git-log|.git-log-fix|
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 000000000..0d86adb5e
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1 @@
+*.texi* diff=texinfo
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 000000000..56bdce2c6
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,68 @@
+/announcement
+/maintainer/autoconf-*/
+/maintainer/autoconf-*.tar.gz
+/ChangeLog
+/aclocal.m4
+/configure
+/Makefile.in
+/Makefile
+/.autom4te.cache
+/config.cache
+/config.log
+/config.status
+/config.status.lineno
+/configure.lineno
+/bin/aclocal
+/bin/aclocal-1.*
+/bin/automake
+/bin/automake-1.*
+/runtest
+/doc/.dirstamp
+/doc/automake*.info
+/doc/automake*.info-[0-9]
+/doc/automake*.html
+/doc/automake*.dvi
+/doc/automake*.pdf
+/doc/automake*.ps
+/doc/automake*.t2d/
+/doc/automake*.t2p/
+/doc/automake*.1
+/doc/aclocal*.1
+/doc/stamp-vti
+/doc/version.texi
+/doc/amhello-*.tar.gz
+/doc/amhello/Makefile.in
+/doc/amhello/aclocal.m4
+/doc/amhello/config.h.in
+/doc/amhello/config.h.in~
+/doc/amhello/configure
+/doc/amhello/depcomp
+/doc/amhello/compile
+/doc/amhello/install-sh
+/doc/amhello/missing
+/doc/web-manual
+/lib/Automake/Config.pm
+/test-suite.log
+/t/ax/test-defs.sh
+/t/ax/shell-no-trail-bslash
+/t/ax/cc-no-c-o
+/t/testsuite-part.am
+/t/*-w.tap
+/t/*-w.sh
+/t/depcomp-*.tap
+/t/*.dir
+/t/*.log
+/t/*.trs
+/contrib/t/*.dir
+/contrib/t/*.log
+/contrib/t/*.trs
+/t/pm/*.log
+/t/pm/*.trs
+/t/perf/*.log
+/t/perf/*.trs
+cscope.files
+cscope.in.out
+cscope.out
+cscope.po.out
+tags
+TAGS
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 000000000..a3c5c0113
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,27 @@
+Authors of GNU Automake.
+
+David Mackenzie
+ First version of most ".am" files.
+ Wrote sh version of automake.in.
+
+Tom Tromey
+ Touched all ".am" files.
+ Rewrote automake.in
+
+Alexandre Oliva
+ Some of the user-side dependency tracking system.
+ Some more random hacking.
+
+Alexandre Duret-Lutz
+ Major overhaul of everything.
+ Maintenance since 2002.
+
+Ralf Wildenhues
+ Random breakage.
+ Maintenance since 2006.
+
+Stefano Lattarini
+ Testsuite overhaul.
+ TAP support and custom testsuite drivers.
+ Random breakage.
+ De-facto maintenance since 2012.
diff --git a/COPYING b/COPYING
new file mode 100644
index 000000000..d511905c1
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ 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 of the License, 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.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/GNUmakefile b/GNUmakefile
new file mode 100644
index 000000000..fc1e911ae
--- /dev/null
+++ b/GNUmakefile
@@ -0,0 +1,88 @@
+# Maintainer makefile for Automake. Requires GNU make.
+
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+ifeq ($(filter bootstrap,$(MAKECMDGOALS)),)
+
+ifeq ($(wildcard Makefile),)
+ # Any target but 'bootstrap' specified in an unconfigured tree
+ # is an error, even when the user is running GNU make.
+ $(warning There seems to be no Makefile in this directory.)
+ $(warning You must run ./configure before running 'make'.)
+ $(error Fatal Error)
+endif
+include ./Makefile
+include $(srcdir)/maintainer/maint.mk
+include $(srcdir)/maintainer/syntax-checks.mk
+
+else # ! bootstrap in $(MAKECMDGOALS)
+
+other-targets := $(filter-out bootstrap,$(MAKECMDGOALS))
+config-status := $(wildcard ./config.status)
+
+BOOTSTRAP_SHELL ?= /bin/sh
+export BOOTSTRAP_SHELL
+
+# Allow the user (or more likely the developer) to ask for a bootstrap
+# of the package.
+#
+# Two issues that must be kept in mind in the implementation below:
+#
+# [1] "make bootstrap" can be invoked before 'configure' is run (and in
+# fact, even before it is created, if we are bootstrapping from a
+# freshly-cloned checkout).
+#
+# [2] When re-bootstrapping an already configured tree, we must ensure
+# that the automatic remake rules for Makefile and company do not
+# kick in, because the tree might be in an inconsistent state (e.g.,
+# we have just switched from 'maint' to 'master', and have the built
+# 'automake' script left from 'maint', but the files 'lib/am/*.am'
+# are from 'master': if 'automake' gets run and uses those files --
+# boom!).
+
+ifdef config-status # Bootstrap from an already-configured tree.
+ # We need the definition of $(srcdir) in the 'bootstrap' rule
+ # below.
+ srcdir := $(shell echo @srcdir@ | $(config-status) --file=-)
+ ifndef srcdir
+ $(error Could not obtain $$(srcdir) from $(config-status))
+ endif
+ # Also, if we are re-bootstrapping an already-configured tree, we
+ # want to re-configure it with the same pre-existing configuration.
+ old-configure-flags := $(shell $(config-status) --config)
+else # Assume we are bootstrapping from an unconfigured srcdir.
+ srcdir := .
+ old-configure-flags :=
+endif
+
+configure-flags := $(old-configure-flags) $(BOOTSTRAP_CONFIGURE_FLAGS)
+
+.PHONY: bootstrap
+bootstrap:
+ cd $(srcdir) && $(SHELL) ./bootstrap
+ $(srcdir)/configure $(configure-flags)
+ $(MAKE) clean
+ $(MAKE) check TESTS=t/get-sysconf
+
+# Ensure that all the specified targets but 'bootstrap' (if any) are
+# run with a properly re-bootstrapped tree.
+ifdef other-targets
+$(other-targets): restart
+.PHONY: $(other-targets) restart
+restart: bootstrap; $(MAKE) $(AM_MAKEFLAGS) $(other-targets)
+endif
+
+endif # ! bootstrap in $(MAKECMDGOALS)
diff --git a/HACKING b/HACKING
new file mode 100644
index 000000000..a603b6953
--- /dev/null
+++ b/HACKING
@@ -0,0 +1,406 @@
+============================================================================
+= This file
+
+* This file attempts to describe the rules to use when hacking
+ automake.
+
+============================================================================
+= Administrivia
+
+* 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.
+
+* 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 commit message.
+ If a change fixes a bug registered in the Automake debbugs tracker,
+ mention the bug number in the commit message.
+
+* If somebody reports a new bug, mention his name in the commit message
+ that fixes or exposes the bug, and put him into THANKS.
+
+* When documenting a non-trivial idiom or example in the manual, be
+ sure to add a test case for it, and to reference such test case from
+ a proper Texinfo comment.
+
+* Some files in the automake package are not owned by automake; these
+ files are listed in the $(FETCHFILES) variable in Makefile.am. They
+ should never be edited here. Almost all of them can be updated from
+ respective upstreams with "make fetch" (this should be done especially
+ before releases). The only exception is the 'lib/COPYING' (from FSF),
+ which should be updated by hand whenever the GPL gets updated (which
+ shouldn't happen that often anyway :-)
+
+* Changes other than *trivial* bug fixes must be mentioned in NEWS.
+
+* Changes which are potentially controversial, require a non-trivial
+ plan, or must be implemented gradually with a roadmap spanning several
+ releases (either minor or major) should be discussed on the list,
+ and have a proper entry in the PLANS directory. This entry should be
+ always committed in the "maint" branch, even if the change it deals
+ with is only for the master branch, or a topic branch. Usually, in
+ addition to this, it is useful to open a "wishlist" report on the
+ Automake debbugs tracker, to keep the idea more visible, and have the
+ discussions surrounding it easily archived in a central place.
+
+============================================================================
+= Naming
+
+* We've adopted the convention that internal AC_SUBSTs and make variables
+ should be named with a leading 'am__', and internally generated targets
+ should be named with a leading 'am--'. This convention, although in
+ place from at least February 2001, isn't yet universally used.
+ But all new code should use it.
+
+ We used to use '_am_' as the prefix for an internal AC_SUBSTs.
+ However, it turns out that NEWS-OS 4.2R complains if a Makefile
+ variable begins with the underscore character. Yay for them.
+ I changed the target naming convention just to be safe.
+
+============================================================================
+= Editing '.am' files
+
+* Always use $(...) and not ${...}
+
+* Prefer ':' over 'true', mostly for consistency with existing code.
+
+* Use '##' comments liberally. Comment anything even remotely unusual.
+
+* Never use basename or dirname. Instead, use sed.
+
+* Do not use 'cd' within back-quotes, use '$(am__cd)' instead.
+ Otherwise the directory name may be printed, depending on CDPATH.
+ More generally, do not ever use plain 'cd' together with a relative
+ directory that does not start with a dot, or you might end up in one
+ computed with CDPATH.
+
+* For install and uninstall rules, if a loop is required, it should be
+ silent. Then the body of the loop itself should print each "important"
+ command it runs. The printed commands should be preceded by a single
+ space.
+
+* Ensure install rules do not create any installation directory where
+ nothing is to be actually installed. See automake bug#11030.
+
+============================================================================
+= Editing automake.in and aclocal.in
+
+* Indent using GNU style. For historical reasons, the perl code
+ contains portions indented using Larry Wall's style (perl-mode's
+ default), and other portions using the GNU style (cperl-mode's
+ default). Write new code using GNU style.
+
+* Don't use & for function calls, unless really required.
+ The use of & prevents prototypes from being checked.
+
+============================================================================
+= Automake versioning and compatibility scheme
+
+* There are three kinds of automake releases:
+
+ - new major releases (e.g., 2.0, 5.0)
+ - new minor releases (e.g., 1.14, 2.1)
+ - micro a.k.a. "bug-fixing" releases (e.g., 1.13.2, 2.0.1, 3.5.17).
+
+ A new major release should have the major version number bumped, and
+ the minor and micro version numbers reset to zero. A new minor release
+ should have the major version number unchanged, the minor version number
+ bumped, and the micro version number reset to zero. Finally, a new
+ micro version should have the major and minor version numbers unchanged,
+ and the micro version number bumped by one.
+
+ For example, the first minor version after 1.13.2 will be 1.14; the
+ first bug-fixing version after 1.14 that will be 1.14.1; the first
+ new major version after all such releases will be 2.0; the first
+ bug-fixing version after 2.0 will be 2.0.1; and a further bug-fixing
+ version after 2.0.1 will be 2.0.2.
+
+* Micro releases should be just bug-fixing releases; no new features
+ should be added, and ideally, only trivial bugs, recent regressions,
+ or documentation issues should be addressed by them. On the other
+ hand, it's OK to include testsuite work and even testsuite refactoring
+ in a micro version, since a regression there is not going to annoy or
+ inconvenience Automake users, but only the Automake developers.
+
+* Minor releases can introduce new "safe" features, do non-trivial but
+ mostly safe code clean-ups, and even add new runtime warnings (rigorously
+ non-fatal). But they shouldn't include any backward incompatible change,
+ nor contain any potentially destabilizing refactoring or sweeping change,
+ nor introduce new features whose implementation might be liable to cause
+ bugs or regressions in existing code. However, it might be acceptable to
+ introduce very limited and localized backward-incompatibilities, *only*
+ if that is necessary to fix non-trivial bugs, address serious performance
+ issues, or greatly enhance usability. But please, do this sparsely and
+ rarely!
+
+* Major releases can introduce backward-incompatibilities (albeit such
+ incompatibilities should be announced well in advance, and a smooth
+ transition plan prepared for them), and try more risking and daring
+ refactorings and code cleanups.
+
+* For more information, refer to the extensive discussion associated
+ with automake bug#13578.
+
+============================================================================
+= Working with git
+
+* To regenerate dependent files created by aclocal and automake,
+ use the 'bootstrap' script. It uses the code from the source
+ tree, so the resulting files (aclocal.m4 and Makefile.in) should
+ be the same as you would get if you install this version of
+ automake and use it to generate those files. Be sure to have the
+ latest stable version of Autoconf installed and available early
+ in your PATH.
+
+* The Automake git tree currently carries three basic branches: 'micro',
+ 'maint' and 'master'.
+
+* The 'maint' branch, reserved to changes that should go into the next
+ micro release; so it will just see fixes for regressions, trivial
+ bugs, or documentation issues, and no "active" development whatsoever.
+ Since emergency regression-fixing or security releases could be cut
+ from this branch at any time, it should always be kept in a releasable
+ state.
+
+* The 'master' branch is where the development of the next release
+ takes place. It should be kept in a stable, almost-releasable state,
+ to simplify testing and deploying of new minor version. Note that
+ this is not a hard rule, and such "stability" is not expected to be
+ absolute (emergency releases are cut from the 'maint' branch anyway).
+
+* The 'next' branch is reserved for the development of the next major
+ release. Experimenting a little is OK here, but don't let the branch
+ grow too unstable; if you need to do exploratory programming or
+ over-arching change, you should use a dedicated topic branch, and
+ only merge that back once it is reasonably stable.
+
+* The 'next' branch should be kept regularly merged into the 'master'
+ branch. It is advisable to merge only after a set of related
+ commits have been applied, to avoid introducing too much noise in
+ the history.
+
+* There may be a number of longer-lived feature branches for new
+ developments. They should be based off of a common ancestor of all
+ active branches to which the feature should or might be merged later.
+
+* After a release is done, the release branch is to be merged both
+ into the 'master' branch and the 'maint' branch.
+
+* When fixing a bug (especially a long-standing one), it may be useful
+ to commit the fix to a new temporary branch based off the commit that
+ introduced the bug. Then this "bugfix branch" can be merged into all
+ the active branches descending from the buggy commit. This offers a
+ simple way to fix the bug consistently and effectively.
+
+* When merging, prefer 'git merge --log' over plain 'git merge', so that
+ a later 'git log' gives an indication of which actual patches were
+ merged even when they don't appear early in the list.
+
+* The 'master', 'maint' and 'next' branches should not be rewound,
+ i.e., should always fast-forward, except maybe for privacy issues.
+ For feature branches, the announcement for the branch should
+ document the rewinding policy.
+ If a topic branch is expected to be rewound, it is good practice to put
+ it in the 'experimental/*' namespace; for example, a rewindable branch
+ dealing with Vala support could be named like "experimental/vala-work".
+
+============================================================================
+= Writing a good commit message
+
+* Here is the general format that Automake's commit messages are expected
+ to follow. See the further points below for clarifications and minor
+ corrections.
+
+ topic: brief description (this is the "summary line")
+
+ <reference to relevant bugs, if any>
+
+ Here goes a more detailed explanation of why the commit is needed,
+ and a general overview of what it does, and how. This section
+ should almost always be provided, possibly only with the expection
+ of obvious fixes or very trivial changes.
+
+ And if the detailed explanation is quite long or detailed, you can
+ want to break it in more paragraphs.
+
+ Then you can add references to relevant mailing list discussions
+ (if any), with proper links. But don't take this as an excuse for
+ writing incomplete commit messages! The "distilled" conclusions
+ reached in such discussions should have been placed in the
+ paragraphs above.
+
+ Finally, here you can thank people that motivated or helped the
+ change. So, thanks to John Doe for bringing up the issue, and to
+ J. Random Hacker for providing suggestions and testing the patch.
+
+ <detailed list of touched files>
+
+* The <detailed list of touched files> should usually be provided (but
+ for short or trivial changes), and should follow the GNU guidelines
+ for ChangeLog entries (described explicitly in the GNU Coding
+ Standards); it might be something of this sort:
+
+ * some/file (func1): Improved frobnication.
+ (func2): Adjusted accordingly.
+ * another/file (foo, bar): Likewise.
+ * tests/foo.tap: New test.
+ * tests/Makefile.am (TESTS): Add it.
+
+* If your commit fixes an automake bug registered in the tracker (say
+ numbered 1234), you should put the following line after the summary
+ line:
+
+ This change fixes automake bug#1234.
+
+* If your commit is just related to the given bug report, but does not
+ fix it, you might want to add a line like this instead:
+
+ This change is related to automake bug#1234.
+
+* When referring to older commits, use 'git describe' output as pointer.
+ But also try to identify the given commit by date and/or summary line
+ if possible. Examples:
+
+ Since yesterday's commit, v1.11-2019-g4d2bf42, ...
+
+ ... removed in commit 'v1.11-1674-g02e9072' of 01-01-2012,
+ "dist: ditch support for lzma"...
+
+* If the commit is a tiny change that is exempt from copyright paperwork, the
+ commit message should contain a separate line after the detailed list of
+ touched files like the following:
+
+ Copyright-paperwork-exempt: yes
+
+============================================================================
+= Test suite
+
+* Use "make check" and "make maintainer-check" liberally.
+
+* Export the 'keep_testdirs' environment variable to "yes" to keep
+ test directories for successful tests also.
+
+* Use perl coverage information to ensure your new code is thoroughly
+ tested by your new tests.
+
+* See file 't/README' for more information.
+
+============================================================================
+= Release procedure
+
+* The steps outlined here are meant to be followed for alpha and stable
+ releases as well. Where differences are expected, they will be
+ explicitly described.
+
+* Fetch new versions of the files that are maintained by the FSF by
+ running "make fetch". In case any file in the automake repository
+ has been updated, commit and re-run the testsuite.
+
+* Ensure that the copyright notices of the distributed files is up to
+ date. The maintainer-only target "update-copyright" can help with
+ this.
+
+* Check NEWS; in particular, ensure that all the relevant differences
+ with the last release are actually reported.
+
+* Update the version number in configure.ac.
+ (The idea is that every other alpha number will be a net release.
+ The repository will always have its own "odd" number so we can easily
+ distinguish net and repo versions.)
+
+* Run these commands, in this order:
+
+ make bootstrap
+ make check keep_testdirs=yes
+ make maintainer-check
+ make distcheck
+ make check-no-trailing-backslash-in-recipes
+ make check-cc-no-c-o
+
+ It is also advised to run "git clean -fdx" before invoking the
+ bootstrap, to ensure a really clean rebuild. However, it must
+ be done carefully, because that command will remove *all* the
+ files that are not tracked by git!
+
+* Run "make git-tag-release".
+ This will run the maintainer checks, verify that the local git
+ repository and working tree are clean and up-to-date, and create
+ a proper signed git tag for the release (based on the contents
+ of $(VERSION)).
+
+* Run "make git-upload-release".
+ This will first verify that you are releasing from a tagged version
+ and that the local git repository and working tree are clean and
+ up-to-date, and will then run "make dist" to create the tarballs,
+ and invoke the 'gnupload' script sign and upload them to the correct
+ locations. In case you need to sign with a non-default key, you can
+ use "make GNUPLOADFLAGS='--user KEY' git-upload-release".
+
+* For stable releases you'll have to update the manuals at www.gnu.org.
+
+ - Generate manuals (with the help of the standard gendocs.sh script):
+
+ make web-manual
+
+ The ready-to-be-uploaded manuals (in several formats) will be left
+ in the 'doc/web-manuals' directory.
+
+ - Commit the updated manuals to web CVS:
+
+ make web-manual-update
+
+ If your local username is different from your username at Savannah,
+ you'll have to override the 'CVS_USER' make variable accordingly;
+ for example:
+
+ make web-manual-update CVS_USER=slattarini
+
+ - Check for link errors, fix them, recheck until convergence:
+ <http://validator.w3.org/checklink>
+
+* Create an announcement message with "make announcement". Edit the
+ generated 'announcement' file appropriately, in particularly filling
+ in by hand any "TODO" left in there.
+
+* Update version number in configure.ac to next alpha number.
+ Re-run ./bootstrap and commit.
+
+* Don't forget to "git push" your changes so they appear in the public
+ git tree.
+
+* Send the announcement generated in the earlier steps at least to
+ <autotools-announce@gnu.org> and <automake@gnu.org>. If the release
+ is a stable one, the announcement must also go to <info-gnu@gnu.org>;
+ if it is an alpha or beta release, announcement should be sent also
+ to <platform-testers@gnu.org>, to maximize the possibility of early
+ testing on exotic or proprietary systems. Finally, copy an abridged
+ version of the announcement into the NEWS feed at:
+ <https://savannah.gnu.org/projects/automake>.
+ Be sure to link a version to the complete announcement (from
+ the version you sent to the automake list, as get archived on
+ <https://lists.gnu.org/archive/html/automake/>).
+
+-----
+
+Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+Local Variables:
+mode: text
+End:
diff --git a/INSTALL b/INSTALL
new file mode 100644
index 000000000..4cbd15f99
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,370 @@
+Installation Instructions
+*************************
+
+Copyright (C) 1994-1996, 1999-2002, 2004-2014 Free Software Foundation,
+Inc.
+
+ Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved. This file is offered as-is,
+without warranty of any kind.
+
+Basic Installation
+==================
+
+ Briefly, the shell command `./configure && make && make install'
+should configure, build, and install this package. The following
+more-detailed instructions are generic; see the `README' file for
+instructions specific to this package. Some packages provide this
+`INSTALL' file but do not implement all of the features documented
+below. The lack of an optional feature in a given package is not
+necessarily a bug. More recommendations for GNU packages can be found
+in *note Makefile Conventions: (standards)Makefile Conventions.
+
+ The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation. It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions. Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+ It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring. Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.
+
+ If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release. If you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+ The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'. You need `configure.ac' if
+you want to change it or regenerate `configure' using a newer version
+of `autoconf'.
+
+ The simplest way to compile this package is:
+
+ 1. `cd' to the directory containing the package's source code and type
+ `./configure' to configure the package for your system.
+
+ Running `configure' might take a while. While running, it prints
+ some messages telling which features it is checking for.
+
+ 2. Type `make' to compile the package.
+
+ 3. Optionally, type `make check' to run any self-tests that come with
+ the package, generally using the just-built uninstalled binaries.
+
+ 4. Type `make install' to install the programs and any data files and
+ documentation. When installing into a prefix owned by root, it is
+ recommended that the package be configured and built as a regular
+ user, and only the `make install' phase executed with root
+ privileges.
+
+ 5. Optionally, type `make installcheck' to repeat any self-tests, but
+ this time using the binaries in their final installed location.
+ This target does not install anything. Running this target as a
+ regular user, particularly if the prior `make install' required
+ root privileges, verifies that the installation completed
+ correctly.
+
+ 6. You can remove the program binaries and object files from the
+ source code directory by typing `make clean'. To also remove the
+ files that `configure' created (so you can compile the package for
+ a different kind of computer), type `make distclean'. There is
+ also a `make maintainer-clean' target, but that is intended mainly
+ for the package's developers. If you use it, you may have to get
+ all sorts of other programs in order to regenerate files that came
+ with the distribution.
+
+ 7. Often, you can also type `make uninstall' to remove the installed
+ files again. In practice, not all packages have tested that
+ uninstallation works correctly, even though it is required by the
+ GNU Coding Standards.
+
+ 8. Some packages, particularly those that use Automake, provide `make
+ distcheck', which can by used by developers to test that all other
+ targets like `make install' and `make uninstall' work correctly.
+ This target is generally not run by end users.
+
+Compilers and Options
+=====================
+
+ Some systems require unusual options for compilation or linking that
+the `configure' script does not know about. Run `./configure --help'
+for details on some of the pertinent environment variables.
+
+ You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment. Here
+is an example:
+
+ ./configure CC=c99 CFLAGS=-g LIBS=-lposix
+
+ *Note Defining Variables::, for more details.
+
+Compiling For Multiple Architectures
+====================================
+
+ You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory. To do this, you can use GNU `make'. `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script. `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'. This
+is known as a "VPATH" build.
+
+ With a non-GNU `make', it is safer to compile the package for one
+architecture at a time in the source code directory. After you have
+installed the package for one architecture, use `make distclean' before
+reconfiguring for another architecture.
+
+ On MacOS X 10.5 and later systems, you can create libraries and
+executables that work on multiple system types--known as "fat" or
+"universal" binaries--by specifying multiple `-arch' options to the
+compiler but only a single `-arch' option to the preprocessor. Like
+this:
+
+ ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+ CPP="gcc -E" CXXCPP="g++ -E"
+
+ This is not guaranteed to produce working output in all cases, you
+may have to build one architecture at a time and combine the results
+using the `lipo' tool if you have problems.
+
+Installation Names
+==================
+
+ By default, `make install' installs the package's commands under
+`/usr/local/bin', include files under `/usr/local/include', etc. You
+can specify an installation prefix other than `/usr/local' by giving
+`configure' the option `--prefix=PREFIX', where PREFIX must be an
+absolute file name.
+
+ You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files. If you
+pass the option `--exec-prefix=PREFIX' to `configure', the package uses
+PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files still use the regular prefix.
+
+ In addition, if you use an unusual directory layout you can give
+options like `--bindir=DIR' to specify different values for particular
+kinds of files. Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them. In general, the
+default for these options is expressed in terms of `${prefix}', so that
+specifying just `--prefix' will affect all of the other directory
+specifications that were not explicitly provided.
+
+ The most portable way to affect installation locations is to pass the
+correct locations to `configure'; however, many packages provide one or
+both of the following shortcuts of passing variable assignments to the
+`make install' command line to change installation locations without
+having to reconfigure or recompile.
+
+ The first method involves providing an override variable for each
+affected directory. For example, `make install
+prefix=/alternate/directory' will choose an alternate location for all
+directory configuration variables that were expressed in terms of
+`${prefix}'. Any directories that were specified during `configure',
+but not in terms of `${prefix}', must each be overridden at install
+time for the entire installation to be relocated. The approach of
+makefile variable overrides for each directory variable is required by
+the GNU Coding Standards, and ideally causes no recompilation.
+However, some platforms have known limitations with the semantics of
+shared libraries that end up requiring recompilation when using this
+method, particularly noticeable in packages that use GNU Libtool.
+
+ The second method involves providing the `DESTDIR' variable. For
+example, `make install DESTDIR=/alternate/directory' will prepend
+`/alternate/directory' before all installation names. The approach of
+`DESTDIR' overrides is not required by the GNU Coding Standards, and
+does not work on platforms that have drive letters. On the other hand,
+it does better at avoiding recompilation issues, and works well even
+when some directory options were not specified in terms of `${prefix}'
+at `configure' time.
+
+Optional Features
+=================
+
+ If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+ Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System). The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+ For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+ Some packages offer the ability to configure how verbose the
+execution of `make' will be. For these packages, running `./configure
+--enable-silent-rules' sets the default to minimal output, which can be
+overridden with `make V=1'; while running `./configure
+--disable-silent-rules' sets the default to verbose, which can be
+overridden with `make V=0'.
+
+Particular systems
+==================
+
+ On HP-UX, the default C compiler is not ANSI C compatible. If GNU
+CC is not installed, it is recommended to use the following options in
+order to use an ANSI C compiler:
+
+ ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
+
+and if that doesn't work, install pre-built binaries of GCC for HP-UX.
+
+ HP-UX `make' updates targets which have the same time stamps as
+their prerequisites, which makes it generally unusable when shipped
+generated files such as `configure' are involved. Use GNU `make'
+instead.
+
+ On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
+parse its `<wchar.h>' header file. The option `-nodtk' can be used as
+a workaround. If GNU CC is not installed, it is therefore recommended
+to try
+
+ ./configure CC="cc"
+
+and if that doesn't work, try
+
+ ./configure CC="cc -nodtk"
+
+ On Solaris, don't put `/usr/ucb' early in your `PATH'. This
+directory contains several dysfunctional programs; working variants of
+these programs are available in `/usr/bin'. So, if you need `/usr/ucb'
+in your `PATH', put it _after_ `/usr/bin'.
+
+ On Haiku, software installed for all users goes in `/boot/common',
+not `/usr/local'. It is recommended to use the following options:
+
+ ./configure --prefix=/boot/common
+
+Specifying the System Type
+==========================
+
+ There may be some features `configure' cannot figure out
+automatically, but needs to determine by the type of machine the package
+will run on. Usually, assuming the package is built to be run on the
+_same_ architectures, `configure' can figure that out, but if it prints
+a message saying it cannot guess the machine type, give it the
+`--build=TYPE' option. TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
+ CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+ OS
+ KERNEL-OS
+
+ See the file `config.sub' for the possible values of each field. If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
+
+ If you are _building_ compiler tools for cross-compiling, you should
+use the option `--target=TYPE' to select the type of system they will
+produce code for.
+
+ If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with `--host=TYPE'.
+
+Sharing Defaults
+================
+
+ If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists. Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Defining Variables
+==================
+
+ Variables not defined in a site shell script can be set in the
+environment passed to `configure'. However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost. In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'. For example:
+
+ ./configure CC=/usr/local2/bin/gcc
+
+causes the specified `gcc' to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+Unfortunately, this technique does not work for `CONFIG_SHELL' due to
+an Autoconf limitation. Until the limitation is lifted, you can use
+this workaround:
+
+ CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
+
+`configure' Invocation
+======================
+
+ `configure' recognizes the following options to control how it
+operates.
+
+`--help'
+`-h'
+ Print a summary of all of the options to `configure', and exit.
+
+`--help=short'
+`--help=recursive'
+ Print a summary of the options unique to this package's
+ `configure', and exit. The `short' variant lists options used
+ only in the top level, while the `recursive' variant lists options
+ also present in any nested packages.
+
+`--version'
+`-V'
+ Print the version of Autoconf used to generate the `configure'
+ script, and exit.
+
+`--cache-file=FILE'
+ Enable the cache: use and save the results of the tests in FILE,
+ traditionally `config.cache'. FILE defaults to `/dev/null' to
+ disable caching.
+
+`--config-cache'
+`-C'
+ Alias for `--cache-file=config.cache'.
+
+`--quiet'
+`--silent'
+`-q'
+ Do not print messages saying which checks are being made. To
+ suppress all normal output, redirect it to `/dev/null' (any error
+ messages will still be shown).
+
+`--srcdir=DIR'
+ Look for the package's source code in directory DIR. Usually
+ `configure' can determine that directory automatically.
+
+`--prefix=DIR'
+ Use DIR as the installation prefix. *note Installation Names::
+ for more details, including other options available for fine-tuning
+ the installation locations.
+
+`--no-create'
+`-n'
+ Run the configure checks, but stop before creating any output
+ files.
+
+`configure' also accepts some other, not widely useful, options. Run
+`configure --help' for more details.
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 000000000..b780307f7
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,134 @@
+## Process this file with automake to create Makefile.in
+
+## Makefile for Automake.
+
+# Copyright (C) 1995-2017 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 <https://www.gnu.org/licenses/>.
+
+## Might be updated later.
+CLEANFILES =
+DISTCLEANFILES =
+MAINTAINERCLEANFILES =
+EXTRA_DIST =
+TAGS_FILES =
+dist_noinst_DATA =
+nodist_noinst_DATA =
+dist_noinst_SCRIPTS =
+nodist_noinst_SCRIPTS =
+
+## ------------ ##
+## Top level. ##
+## ------------ ##
+
+EXTRA_DIST += \
+ bootstrap \
+ GNUmakefile \
+ HACKING \
+ PLANS
+
+# We want a handful of substitutions to be fully-expanded by make;
+# then use config.status to substitute the remainder where a single
+# expansion is sufficient. We use a funny notation here to avoid
+# configure substitutions in our text.
+do_subst = ( sed \
+ -e "s,[@]configure_input[@],Generated from $$in; do not edit by hand.,g" \
+ -e 's,[@]datadir[@],$(datadir),g' \
+ -e 's,[@]amdir[@],$(amdir),g' \
+ -e 's,[@]bindir[@],$(bindir),g' \
+ -e 's,[@]docdir[@],$(docdir),g' \
+ -e 's,[@]pkgvdatadir[@],$(pkgvdatadir),g' \
+ -e 's,[@]scriptdir[@],$(scriptdir),g' \
+ -e 's,[@]automake_acdir[@],$(automake_acdir),g' \
+ -e 's,[@]system_acdir[@],$(system_acdir),g' \
+## Hack to avoid a spurious substitution in the Automake script (part 1).
+ -e 's,[@]am__isrc[@],!!@!!am__isrc!!@!!,g' \
+ | $(SHELL) ./config.status --file=- \
+## Hack to avoid a spurious substitution in the Automake script (part 2).
+ | sed -e 's,!!@!!am__isrc!!@!!,@''am__isrc@,g' \
+ )
+
+# Generated files shouldn't contain unexpanded '@substitutions@', and
+# should be made read-only, to prevent them from being edited by mistake
+# instead of the file the are generated from.
+generated_file_finalize = $(AM_V_at) \
+ if LC_ALL=C grep '@[a-zA-Z0-9_][a-zA-Z0-9_]*@' $@-t; then \
+ echo "$@ contains unexpanded substitution (see lines above)"; \
+ exit 1; \
+ fi; \
+ chmod a-w $@-t && mv -f $@-t $@
+
+# Wrapper for the build environment.
+nodist_noinst_SCRIPTS += pre-inst-env
+CLEANFILES += $(noinst_SCRIPTS)
+
+# The master location for INSTALL is lib/INSTALL.
+# This is where "make fetch" will install new versions.
+# Make sure we also update this copy.
+INSTALL: lib/INSTALL
+ $(AM_V_GEN)cp $(srcdir)/lib/INSTALL $@
+
+# We don't use the default name for the autom4te cache directory,
+# so we need this.
+maintainer-clean-local:
+ rm -rf .autom4te.cache
+
+# So that automake won't complain about the missing ChangeLog.
+# The real rule for ChangeLog generation is now in maintainer/maint.mk
+# (as it is maintainer-specific).
+ChangeLog:
+
+# Third-party, obsolescent or experimental stuff.
+EXTRA_DIST += \
+ contrib/tap-driver.pl \
+ contrib/check-html.am \
+ contrib/multilib/README \
+ contrib/multilib/config-ml.in \
+ contrib/multilib/symlink-tree \
+ contrib/multilib/multilib.am \
+ contrib/multilib/multi.m4 \
+ contrib/README
+
+# Older files, kept mostly for historical interest.
+EXTRA_DIST += \
+ old/ChangeLog-tests \
+ old/ChangeLog.96 \
+ old/ChangeLog.98 \
+ old/ChangeLog.00 \
+ old/ChangeLog.01 \
+ old/ChangeLog.02 \
+ old/ChangeLog.03 \
+ old/ChangeLog.04 \
+ old/ChangeLog.09 \
+ old/ChangeLog.11 \
+ old/TODO
+
+# Maintainer-specific files and scripts.
+EXTRA_DIST += \
+ maintainer/am-ft \
+ maintainer/am-xft \
+ maintainer/rename-tests \
+ maintainer/maint.mk \
+ maintainer/syntax-checks.mk
+
+# Most work delegated to sub-dir makefile fragments.
+include $(srcdir)/bin/local.mk
+include $(srcdir)/doc/local.mk
+include $(srcdir)/lib/local.mk
+include $(srcdir)/lib/Automake/local.mk
+include $(srcdir)/lib/am/local.mk
+include $(srcdir)/m4/local.mk
+include $(srcdir)/t/local.mk
+
+# vim: ft=automake noet
diff --git a/NEWS b/NEWS
new file mode 100644
index 000000000..04a285565
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,3013 @@
+* WARNING: Future backward-incompatibilities!
+
+ - Makefile recipes generated by Automake 2.0 will expect to use an
+ 'rm' program that doesn't complain when called without any non-option
+ argument if the '-f' option is given (so that commands like "rm -f"
+ and "rm -rf" will act as a no-op, instead of raising usage errors).
+ This behavior of 'rm' is very widespread in the wild, and it will be
+ required in the next POSIX version:
+
+ <http://austingroupbugs.net/view.php?id=542>
+
+ Accordingly, AM_INIT_AUTOMAKE now expands some shell code that checks
+ that the default 'rm' program in PATH satisfies this requirement,
+ aborting the configure process if this is not the case. For the
+ moment, it's still possible to force the configuration process to
+ succeed even with a broken 'rm', that that will no longer be the case
+ for Automake 2.0.
+
+ - Automake 2.0 will require Autoconf 2.70 or later (which is still
+ unreleased at the moment of writing, but is planned to be released
+ before Automake 2.0 is).
+
+ - Automake 2.0 will drop support for the long-deprecated 'configure.in'
+ name for the Autoconf input file. You are advised to start using the
+ recommended name 'configure.ac' instead, ASAP.
+
+ - The ACLOCAL_AMFLAGS special make variable will be fully deprecated in
+ Automake 2.0: it will raise warnings in the "obsolete" category (but
+ still no hard error of course, for compatibilities with the many, many
+ packages that still relies on that variable). You are advised to
+ start relying on the new Automake support for AC_CONFIG_MACRO_DIRS
+ instead (which was introduced in Automake 1.13).
+
+ - Automake 2.0 will remove support for automatic dependency tracking
+ with the SGI C/C++ compilers on IRIX. The SGI depmode has been
+ reported broken "in the wild" already, and we don't think investing
+ time in debugging and fixing is worthwhile, especially considering
+ that SGI has last updated those compilers in 2006, and retired
+ support for them in December 2013:
+ <http://www.sgi.com/services/support/irix_mips_support.html>
+
+ - Automake 2.0 will remove support for MS-DOS and Windows 95/98/ME
+ (support for them was offered by relying on the DJGPP project).
+ Note however that both Cygwin and MSYS/MinGW on modern Windows
+ versions will continue to be fully supported.
+
+ - Automake-provided scripts and makefile recipes might (finally!)
+ start assuming a POSIX shell in Automake 2.0. There still is no
+ certainty about this though: we'd first like to wait and see
+ whether future Autoconf versions will be enhanced to guarantee
+ that such a shell is always found and provided by the checks in
+ ./configure.
+
+ - Starting from Automake 2.0, third-party m4 files located in the
+ system-wide aclocal directory, as well as in any directory listed
+ in the ACLOCAL_PATH environment variable, will take precedence
+ over "built-in" Automake macros. For example (assuming Automake
+ is installed in the /usr/local hierarchy), a definition of the
+ AM_PROG_VALAC macro found in '/usr/local/share/aclocal/my-vala.m4'
+ should take precedence over the same-named automake-provided macro
+ (defined in '/usr/local/share/aclocal-2.0/vala.m4').
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+New in ?.?.?:
+
+* Miscellaneous changes
+
+ - When subdir-objects is in effect, Automake will now construct
+ shorter object file names when no programs and libraries name
+ clashes are encountered. This should make the discouraged use of
+ 'foo_SHORTNAME' unnecessary in many cases.
+
+* Bugs fixed:
+
+ - Automatic dependency tracking has been fixed to work also when the
+ 'subdir-object' option is used and some 'foo_SOURCES' definition
+ contains unexpanded references to make variables, as in, e.g.:
+
+ a_src = sources/libs/aaa
+ b_src = sources/bbb
+ foo_SOURCES = $(a_src)/bar.c $(b_src)/baz.c
+
+ With such a setup, the created makefile fragment containing dependency
+ tracking information will be correctly placed under the directories
+ named 'sources/libs/aaa/.deps' and 'sources/bbb/.deps', rather than
+ mistakenly under directories named (literally!) '$(src_a)/.deps' and
+ '$(src_b)/.deps' (this was the first part of automake bug#13928).
+
+ Notice that in order to fix this bug we had to slightly change the
+ semantics of how config.status bootstraps the makefile fragments
+ required for the dependency tracking to work: rather than attempting
+ to parse the Makefiles via grep and sed trickeries only, we actually
+ invoke 'make' on a slightly preprocessed version of those Makefiles,
+ using a private target that is only meant to bootstrap the required
+ makefile fragments.
+
+ - The 'subdir-object' option no longer causes object files corresponding
+ to source files specified with an explicit '$(srcdir)' component to be
+ placed in the source tree rather than in the build tree.
+
+ For example, if Makefile.am contains:
+
+ AUTOMAKE_OPTIONS = subdir-objects
+ foo_SOURCES = $(srcdir)/foo.c $(srcdir)/s/bar.c $(top_srcdir)/baz.c
+
+ then "make all" will create 'foo.o' and 's/bar.o' in $(builddir) rather
+ than in $(srcdir), and will create 'baz.o' in $(top_builddir) rather
+ than in $(top_srcdir).
+
+ This was the second part of automake bug#13928.
+
+ - Installed 'aclocal' m4 macros can now accept installation directories
+ containing '@' characters (automake bug#20903)
+
+ - When combining AC_LIBOBJ or AC_FUNC_ALLOCA with the
+ "--disable-dependency-tracking" configure option in an out of source
+ build, the build sub-directory defined by AC_CONFIG_LIBOBJ_DIR is now
+ properly created. (automake bug#27781)
+
+ - The time printed by 'mdate-sh' is now using the UTC time zone to support
+ the reproducible build effort. (automake bug#20314)
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+New in 1.15.1:
+
+* Bugs fixed:
+
+ - The code has been adapted to remove a warning present since Perl
+ 5.22 stating that "Unescaped left brace in regex is deprecated".
+ This warning has become an hard error in Perl 5.26 (bug#22372).
+
+ - The generated Makefiles do not rely on the obsolescent GZIP
+ environment variable which was used for passing arguments to
+ 'gzip'. Compatibility with old versions has been
+ preserved. (bug#20132)
+
+* Miscellaneous changes:
+
+ - Support the Windows version of the Intel C Compiler (icl) in the
+ 'compile' script in the same way the (compatible) Microsoft C
+ Compiler is supported.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+New in 1.15:
+
+* Improvements and refactorings in the install-sh script:
+
+ - It has been modernized, and now makes the following assumptions
+ *unconditionally*:
+ (1) a working 'dirname' program is available;
+ (2) the ${var:-value} shell parameters substitution works;
+ (3) the "set -f" and "set +f" shell commands work, and, respectively,
+ disable and enable shell globbing.
+
+ - The script implements stricter error checking, and now it complains
+ and bails out if any of the following expectations is not met:
+ (1) the options -d and -t are never used together;
+ (2) the argument passed to option -t is a directory;
+ (3) if there are two or more SOURCEFILE arguments, the
+ DESTINATION argument must be a directory.
+
+* Automake-generated testsuites:
+
+ - The default test-driver used by the Automake-generated testsuites
+ now appends the result and exit status of each "plain" test to the
+ associated log file (automake bug#11814).
+
+ - The perl implementation of the TAP testsuite driver is no longer
+ installed in the Automake's scripts directory, and is instead just
+ distributed as a "contrib" addition. There should be no reason to
+ use this implementation anyway in real packages, since the awk+shell
+ implementation of the TAP driver (which is documented in the manual)
+ is more portable and has feature parity with the perl implementation.
+
+ - The rule generating 'test-suite.log' no longer risk incurring in an
+ extra useless "make all" recursive invocation in some corner cases
+ (automake bug#16302).
+
+* Distribution:
+
+ - Automake bug#18286: "make distcheck" could sometimes fail to detect
+ files missing from the distribution tarball, especially in those cases
+ where both the generated files and their dependencies are explicitly
+ in $(srcdir). An important example of this are *generated* makefile
+ fragments included at Automake time in Makefile.am; e.g.:
+
+ ...
+ $(srcdir)/fragment.am: $(srcdir)/data.txt $(srcdir)/preproc.sh
+ cd $(srcdir) && $(SHELL) preproc.sh <data.txt >fragment.am
+ include $(srcdir)/fragment.am
+ ...
+
+ If the use forgot to add data.txt and/or preproc.sh in the distribution
+ tarball, "make distcheck" would have erroneously succeeded! This issue
+ is now fixed.
+
+ - As a consequence of the previous change, "make distcheck" will run
+ using '$(distdir)/_build/sub' as the build directory, rather than
+ simply '$(distdir)/_build' (as it was the case for Automake 1.14 and
+ earlier). Consequently, the './configure' and 'make' invocations
+ issued by the distcheck recipe now have $(srcdir) equal to '../..',
+ rather than to just '..'. Dependent and similar variables (e.g.,
+ '$(top_srcdir)') are also changed accordingly.
+
+ Thus, Makefiles that made assumptions about the exact values of the
+ build and source directories used by "make distcheck" will have to
+ be adjusted. Notice that making such assumptions was a bad and
+ unsupported practice anyway, since the exact locations of those
+ directories should be considered implementation details, and we
+ reserve the right to change them at any time.
+
+* Miscellaneous bugs fixed:
+
+ - The expansion of AM_INIT_AUTOMAKE ends once again with a trailing
+ newline (bug#16841). Regression introduced in Automake 1.14.
+
+ - We no longer risk to use '$ac_aux_dir' before it's defined (see
+ automake bug#15981). Bug introduced in Automake 1.14.
+
+ - The code used to detect whether the currently used make is GNU make
+ or not (relying on the private macro 'am__is_gnu_make') no longer
+ risks causing "Arg list too long" for projects using automatic
+ dependency tracking and having a ton of source files (bug#18744).
+
+ - Automake tries to offer a more deterministic output for generated
+ Makefiles, in the face of the newly-introduced randomization for
+ hash keys order in Perl 5.18.
+
+ - In older Automake versions, if a user defined one single Makefile
+ fragment (say 'foo.am') to be included via Automake includes in
+ his main Makefile.am, and defined a custom make rule to generate that
+ file from other data, Automake used to spuriously complain with some
+ message like "... overrides Automake target '$(srcdir)/foo.am".
+ This bug is now fixed.
+
+ - The user can now extend the special .PRECIOUS target, the same way
+ he could already do with the .MAKE .and .PHONY targets.
+
+ - Some confusing typos have been fixed in the manual and in few warning
+ messages (automake bug#16827 and bug#16997).
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+New in 1.14.1:
+
+* Bugs fixed:
+
+ - The user is no longer allowed to override the --srcdir nor the --prefix
+ configure options used by "make distcheck" (bug#14991).
+
+ - Fixed a gross inefficiency in the recipes for installing byte-compiled
+ python files, that was causing an O(N^2) performance on the number N of
+ files, instead of the expected O(N) performance. Note that this bug
+ was only relevant when the number of python files was high (which is
+ unusual in practice).
+
+ - Automake try to offer a more deterministic output for warning messages,
+ in the face of the newly-introduced randomization for hash keys order
+ in Perl 5.18.
+
+ - The 'test-driver' script now actually error out with a clear error
+ message on the most common invalid usages.
+
+ - Several spurious failures/hangs in the testsuite (bugs #14706, #14707,
+ #14760, #14911, #15181, #15237).
+
+* Documentation fixes:
+
+ - Fixed typos in the 'fix-timestamp.sh' example script that made it
+ nonsensical.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+New in 1.14:
+
+* C compilation, and the AC_PROG_CC and AM_PROG_CC_C_O macros:
+
+ - The 'compile' script is now unconditionally required for all packages
+ that perform C compilation (if you are using the '--add-missing'
+ option, automake will fetch that script for you, so you shouldn't
+ need any explicit adjustment). This new behaviour is needed to avoid
+ obscure errors when the 'subdir-objects' option is used, and the
+ compiler is an inferior one that doesn't grasp the combined use of
+ both the "-c -o" options; see discussion about automake bug#13378 for
+ more details:
+ <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=13378#35>
+ <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=13378#44>
+
+ - The next major Automake version (2.0) will unconditionally activate
+ the 'subdir-objects' option. In order to smooth out the transition,
+ we now give a warning (in the category 'unsupported') whenever a
+ source file is present in a subdirectory but the 'subdir-object' is
+ not enabled. For example, the following usage will trigger such a
+ warning:
+
+ bin_PROGRAMS = sub/foo
+ sub_foo_SOURCES = sub/main.c sub/bar.c
+
+ - Automake will automatically enhance the autoconf-provided macro
+ AC_PROG_CC to force it to check, at configure time, that the
+ C compiler supports the combined use of both the '-c' and '-o'
+ options. The result of this check is saved in the cache variable
+ 'am_cv_prog_cc_c_o', and said result can be overridden by
+ pre-defining that variable.
+
+ - The AM_PROG_CC_C_O macro can still be called, albeit that should no
+ longer be necessary. This macro is now just a thin wrapper around the
+ Automake-enhanced AC_PROG_CC. This means, among the other things,
+ that its behaviour is changed in three ways:
+
+ 1. It no longer invokes the Autoconf-provided AC_PROG_CC_C_O
+ macro behind the scenes.
+
+ 2. It caches the check result in the 'am_cv_prog_cc_c_o' variable,
+ and not in a 'ac_cv_prog_cc_*_c_o' variable whose exact name is
+ dynamically computed only at configure runtime (really!) from
+ the content of the '$CC' variable.
+
+ 3. It no longer automatically AC_DEFINE the C preprocessor
+ symbol 'NO_MINUS_C_MINUS_O'.
+
+* Texinfo support:
+
+ - Automake can now be instructed to place '.info' files generated from
+ Texinfo input in the builddir rather than in the srcdir; this is done
+ specifying the new automake option 'info-in-builddir'. This feature
+ was requested by the developers of GCC, GDB, GNU binutils and the GNU
+ bfd library. See the extensive discussion about automake bug#11034
+ for more details.
+
+ - For quite a long time, Automake has been implementing an undocumented
+ hack which ensured that '.info' files which appeared to be cleaned
+ (by being listed in the CLEANFILES or DISTCLEANFILES variables) were
+ built in the builddir rather than in the srcdir; this hack was
+ introduced to ensure better backward-compatibility with package
+ such as Texinfo, which do things like:
+
+ info_TEXINFOS = texinfo.txi info-stnd.texi info.texi
+ DISTCLEANFILES = texinfo texinfo-* info*.info*
+ # Do not create info files for distribution.
+ dist-info:
+ @:
+
+ in order not to distribute generated '.info' files.
+
+ Now that we have the 'info-in-builddir' option that explicitly causes
+ generated '.info' files to be placed in the builddir, this hack should
+ be longer necessary, so we deprecate it with runtime warnings.
+ It will be removed altogether in Automake 2.0.
+
+* Relative directory in Makefile fragments:
+
+ - The special Automake-time substitutions '%reldir%' and '%canon_reldir%'
+ (and their short versions, '%D%' and '%C%' respectively) can now be used
+ in an included Makefile fragment. The former is substituted with the
+ relative directory of the included fragment (compared to the top-level
+ including Makefile), and the latter with the canonicalized version of
+ the same relative directory.
+
+ # in 'Makefile.am':
+ bin_PROGRAMS = # will be updated by included Makefile fragments
+ include src/Makefile.inc
+
+ # in 'src/Makefile.inc':
+ bin_PROGRAMS += %reldir%/foo
+ %canon_reldir%_foo_SOURCES = %reldir%/bar.c
+
+ This should be especially useful for packages using a non-recursive
+ build system.
+
+* Deprecated distribution formats:
+
+ - The 'shar' and 'compress' distribution formats are deprecated, and
+ scheduled for removal in Automake 2.0. Accordingly, the use of the
+ 'dist-shar' and 'dist-tarZ' will cause warnings at automake runtime
+ (in the 'obsolete' category), and the recipes of the Automake-generated
+ targets 'dist-shar' and 'dist-tarZ' will unconditionally display
+ (non-fatal) warnings at make runtime.
+
+* New configure runtime warnings about "rm -f" support:
+
+ - To simplify transition to Automake 2.0, the shell code expanded by
+ AM_INIT_AUTOMAKE now checks (at configure runtime) that the default
+ 'rm' program in PATH doesn't complain when called without any
+ non-option argument if the '-f' option is given (so that commands like
+ "rm -f" and "rm -rf" act as a no-op, instead of raising usage errors).
+ If this is not the case, the configure script is aborted, to call the
+ attention of the user on the issue, and invite him to fix his PATH.
+ The checked 'rm' behavior is very widespread in the wild, and will be
+ required by future POSIX versions:
+
+ <http://austingroupbugs.net/view.php?id=542>
+
+ The user can still force the configure process to complete even in the
+ presence of a broken 'rm' by defining the ACCEPT_INFERIOR_RM_PROGRAM
+ environment variable to "yes". And the generated Makefiles should
+ still work correctly even when such broken 'rm' is used. But note
+ that this will no longer be the case with Automake 2.0 though, so, if
+ you encounter the warning, please report it to us ASAP (and try to fix
+ your environment as well).
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+New in 1.13.4:
+
+* Bugs fixed:
+
+ - Fix a minor regression introduced in Automake 1.13.3: when two or more
+ user-defined suffix rules were present in a single Makefile.am,
+ automake would needlessly include definition of some make variables
+ related to C compilation in the generated Makefile.in (bug#14560).
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+New in 1.13.3:
+
+* Documentation fixes:
+
+ - The documentation no longer mistakenly reports that the obsolete
+ 'AM_MKDIR_PROG_P' macro and '$(mkdir_p)' make variable are going
+ to be removed in Automake 2.0.
+
+* Bugs fixed:
+
+ - Byte-compilation of Emacs lisp files could fail spuriously on
+ Solaris, when /bin/ksh or /usr/xpg4/bin/sh were used as shell.
+
+ - If the same user-defined suffixes were transformed into different
+ Automake-known suffixes in different Makefile.am files in the same
+ project, automake could get confused and generate inconsistent
+ Makefiles (automake bug#14441).
+ For example, if 'Makefile.am' contained a ".ext.cc:" suffix rule,
+ and 'sub/Makefile.am' contained a ".ext.c:" suffix rule, automake
+ would have mistakenly placed into 'Makefile.in' rules to compile
+ "*.c" files into object files, and into 'sub/Makefile.in' rules to
+ compile "*.cc" files into object files --- rather than the other
+ way around. This is now fixed.
+
+* Testsuite work:
+
+ - The test cases no longer have the executable bit set. This should
+ make it clear that they are not meant to be run directly; as
+ explained in t/README, they can only be run through the custom
+ 'runtest' script, or by a "make check" invocation.
+
+ - The testsuite has seen the introduction of a new helper function
+ 'run_make', and several related changes. These serve a two-fold
+ purpose:
+
+ 1. Remove brittleness due to the use of "make -e" in test cases.
+
+ 2. Seamlessly allow the use of parallel make ("make -j...") in the
+ test cases, even where redirection of make output is involved
+ (see automake bug#11413 for a description of the subtle issues
+ in this area).
+
+ - Several spurious failures have been fixed (they hit especially
+ MinGW/MSYS builds). See automake bugs #14493, #14494, #14495,
+ #14498, #14499, #14500, #14501, #14517 and #14528.
+
+ - Some other minor miscellaneous changes and fixlets.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+New in 1.13.2:
+
+* Documentation fixes:
+
+ - The long-deprecated but still supported two-arguments invocation form
+ of AM_INIT_AUTOMAKE is documented once again. This seems the sanest
+ thing to do, given that support for such usage might need to remain
+ in place for an unspecified amount of time in order to cater to people
+ who want to define the version number for their package dynamically at
+ configure runtime (unfortunately, Autoconf does not yet support this
+ scenario, so we cannot delegate the work to it).
+
+ - The serial testsuite harness is no longer reported as "deprecated",
+ but as "discouraged". We have no plan to remove it, nor to make its
+ use cause runtime warnings.
+
+ - The parallel testsuite is no longer reported as "experimental"; it
+ is well tested, and should be stable now.
+
+ - The 'shar' and 'tarZ' distribution formats and the 'dist-shar' and
+ 'dist-tarZ' options are obsolescent, and their use is deprecated
+ in the documentation.
+
+ - Other minor miscellaneous fixes and improvements; in particular,
+ some improvements in cross-references.
+
+* Obsolescent features:
+
+ - Use of suffix-less info files (that can be specified through the
+ '@setfilename' macro in Texinfo input files) is discouraged, and
+ its use will raise warnings in the 'obsolete' category. Simply
+ use the '.info' extension for all your info files, transforming
+ usages like:
+
+ @setfilename myprogram
+
+ into:
+
+ @setfilename myprogram.info
+
+ - Use of Texinfo input files with '.txi' or '.texinfo' extensions
+ is discouraged, and its use will raise warnings in the 'obsolete'
+ category. You are advised to simply use the '.texi' extension
+ instead.
+
+* Bugs fixed:
+
+ - When the 'ustar' option is used, the generated configure script no
+ longer risks hanging during the tests for the availability of the
+ 'pax' utility, even if the user running configure has a UID or GID
+ that requires more than 21 bits to be represented.
+ See automake bug#8343 and bug#13588.
+
+ - The obsolete macros AM_CONFIG_HEADER or AM_PROG_CC_STDC work once
+ again, as they did in Automake 1.12.x (albeit printing runtime
+ warnings in the 'obsolete' category). Removing them has turned
+ out to be a very bad idea, because it complicated distro packing
+ enormously. Making them issue fatal warnings, as we did in
+ Automake 1.13, has turned out to be a similarly very bad idea,
+ for exactly the same reason.
+
+ - aclocal will no longer error out if the first local m4 directory
+ (as specified by the '-I' option or the 'AC_CONFIG_MACRO_DIRS' or
+ 'AC_CONFIG_MACRO_DIR' macros) doesn't exist; it will merely report
+ a warning in the 'unsupported' category. This is done to support
+ some pre-existing real-world usages. See automake bug#13514.
+
+ - aclocal will no longer consider directories for extra m4 files more
+ than once, even if they are specified multiple times. This ensures
+ packages that specify both
+
+ AC_CONFIG_MACRO_DIR([m4]) in configure.ac
+ ACLOCAL_AMFLAGS = -I m4 in Makefile.am
+
+ will work correctly, even when the 'm4' directory contains no
+ package-specific files, but is used only to install third-party
+ m4 files (as can happen with e.g., "libtoolize --install").
+ See automake bug#13514.
+
+ - Analysis of make flags in Automake-generated rules has been made more
+ robust, and more future-proof. For example, in presence of make that
+ (like '-I') take an argument, the characters in said argument will no
+ longer be spuriously considered as a set of additional make options.
+ In particular, automake-generated rules will no longer spuriously
+ believe to be running in dry mode ("make -n") if run with an invocation
+ like "make -I noob"; nor will they believe to be running in keep-going
+ mode ("make -k") if run with an invocation like "make -I kool"
+ (automake bug#12554).
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+New in 1.13.1:
+
+* Bugs fixed:
+
+ - Use of the obsolete macros AM_CONFIG_HEADER or AM_PROG_CC_STDC now
+ causes a clear and helpful error message, instead of obscure ones
+ (issue introduced in Automake 1.13).
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+New in 1.13:
+
+* Bugs fixed:
+
+ - ylwrap renames properly header guards in generated header files
+ (*.h), instead of leaving Y_TAB_H.
+
+ - ylwrap now also converts header guards in implementation files
+ (*.c). Because ylwrap failed to rename properly #include in the
+ implementation files, current versions of Bison (e.g., 2.7)
+ duplicate the generated header file in the implementation file.
+ The header guard then protects the implementation file from
+ duplicate definitions from the header file.
+
+* Version requirements:
+
+ - Autoconf 2.65 or greater is now required.
+
+ - The rules to build PDF and DVI output from Texinfo input now
+ require Texinfo 4.9 or later.
+
+* Obsolete features:
+
+ - Support for the "Cygnus-style" trees (once enabled by the 'cygnus'
+ option) has been removed. See discussion about automake bug#11034
+ for more background: <https://debbugs.gnu.org/11034>.
+
+ - The deprecated aclocal option '--acdir' has been removed. You
+ should use the options '--automake-acdir' and '--system-acdir'
+ instead (which have been introduced in Automake 1.11.2).
+
+ - The following long-obsolete m4 macros have been removed:
+
+ AM_PROG_CC_STDC: superseded by AC_PROG_CC since October 2002
+ fp_PROG_CC_STDC: broken alias for AM_PROG_CC_STDC
+ fp_WITH_DMALLOC: old alias for AM_WITH_DMALLOC
+ AM_CONFIG_HEADER: superseded by AC_CONFIG_HEADERS since July 2002
+ ud_PATH_LISPDIR: old alias for AM_PATH_LISPDIR
+ jm_MAINTAINER_MODE: old alias for AM_MAINTAINER_MODE
+ ud_GNU_GETTEXT: old alias for AM_GNU_GETTEXT
+ gm_PROG_LIBTOOL: old alias for AC_PROG_LIBTOOL
+ fp_C_PROTOTYPES: old alias for AM_C_PROTOTYPES (which was part
+ of the now-removed automatic de-ANSI-fication
+ support of Automake)
+
+ - All the "old alias" macros in 'm4/obsolete.m4' have been removed.
+
+ - Use of the long-deprecated two- and three-arguments invocation forms
+ of the AM_INIT_AUTOMAKE is no longer documented. It's still supported
+ though (albeit with a warning in the 'obsolete' category), to cater
+ for people who want to define the version number for their package
+ dynamically (e.g., from the current VCS revision). We'll have to
+ continue this support until Autoconf itself is fixed to allow better
+ support for such dynamic version numbers.
+
+* Elisp byte-compilation:
+
+ - The byte compilation of '.el' files into '.elc' files is now done
+ with a suffix rule. This has simplified the compilation process, and
+ more importantly made it less brittle. The downside is that emacs is
+ now invoked once for each '.el' files, which cause some noticeable
+ slowdowns. These should however be mitigated on multicore machines
+ (which are becoming the norm today) if concurrent make ("make -j")
+ is used.
+
+ - Elisp files placed in a subdirectory are now byte-compiled to '.elc'
+ files in the same subdirectory; for example, byte-compiling of file
+ 'sub/foo.el' file will result in 'sub/foo.elc' rather than in
+ 'foo.elc'. This behaviour is backward-incompatible with older
+ Automake versions, but it is more natural and more sane. See also
+ automake bug#7441.
+
+ - The Emacs invocation performing byte-compilation of '.el' files honors
+ the $(AM_ELCFLAGS) and $(ELCFLAGS) variables; as typical, the former
+ one is developer-reserved and the latter one user-reserved.
+
+ - The 'elisp-comp' script, once provided by Automake, has been rendered
+ obsoleted by the just-described changes, and thus removed.
+
+* Changes to Automake-generated testsuite harnesses:
+
+ - The parallel testsuite harness (previously only enabled by the
+ 'parallel-tests' option) is the default one; the older serial
+ testsuite harness will still be available through the use of the
+ 'serial-tests' option (introduced in Automake 1.12).
+
+ - The 'color-tests' option is now unconditionally activated by default.
+ In particular, this means that testsuite output is now colorized by
+ default if the attached terminal seems to support ANSI escapes, and
+ that the user can force output colorization by setting the variable
+ AM_COLOR_TESTS to "always". The 'color-tests' is still recognized
+ for backward-compatibility, although it's a handled as a no-op now.
+
+* Silent rules support:
+
+ - Support for silent rules is now always active in Automake-generated
+ Makefiles. So, although the verbose output is still the default,
+ the user can now always use "./configure --enable-silent-rules" or
+ "make V=0" to enable quieter output in the package he's building.
+
+ - The 'silent-rules' option has now become a no-op, preserved for
+ backward-compatibility only. In particular, its use no longer
+ disables the warnings in the 'portability-recursive' category.
+
+* Texinfo Support:
+
+ - The rules to build PDF and DVI files from Texinfo input now require
+ Texinfo 4.9 or later.
+
+ - The rules to build PDF and DVI files from Texinfo input now use the
+ '--build-dir' option, to keep the auxiliary files used by texi2dvi
+ and texi2pdf around without cluttering the build directory, and to
+ make it possible to run the "dvi" and "pdf" recipes in parallel.
+
+* Automatic remake rules and 'missing' script:
+
+ - The 'missing' script no longer tries to update the timestamp of
+ out-of-date files that require a maintainer-specific tool to be
+ remade, in case the user lacks such a tool (or has a too-old version
+ of it). It just gives a useful warning, and in some cases also a
+ tip about how to obtain such a tool.
+
+ - The missing script has thus become useless as a (poor) way to work
+ around the sketched-timestamps issues that can happen for projects
+ that keep generated files committed in their VCS repository. Such
+ projects are now encouraged to write a custom "fix-timestamps.sh"
+ script to avoid such issues; a simple example is provided in the
+ "CVS and generated files" chapter of the automake manual.
+
+* Recursive targets:
+
+ - The user can now define his own recursive targets that recurse
+ in the directories specified in $(SUBDIRS). This can be done by
+ specifying the name of such targets in invocations of the new
+ 'AM_EXTRA_RECURSIVE_TARGETS' m4 macro.
+
+* Tags:
+
+ - Any failure in the recipe of the "tags", "ctags", "cscope" or
+ "cscopelist" targets in a subdirectory is now propagated to the
+ top-level make invocation.
+
+ - Tags are correctly computed also for files in _SOURCES variables that
+ only list files with non-standard suffixes (see automake bug#12372).
+
+* Improvements to aclocal and related rebuilds rules:
+
+ - Autoconf-provided macros AC_CONFIG_MACRO_DIR and AC_CONFIG_MACRO_DIRS
+ are now traced by aclocal, and can be used to declare the local m4
+ include directories. Formerly, one had to specify it with an explicit
+ '-I' option to the 'aclocal' invocation.
+
+ - The special make variable ACLOCAL_AMFLAGS is deprecated; future
+ Automake versions will warn about its use, and later version will
+ remove support for it altogether.
+
+* The depcomp script:
+
+ - Dropped support for libtool 1.4.
+
+ - Various internal refactorings. They should cause no visible change,
+ but the chance for regression is there anyway, so please report any
+ unexpected or suspicious behaviour.
+
+ - Support for pre-8.0 versions of the Intel C Compiler has been dropped.
+ This should cause no problem, since icc 8.0 has been released in
+ December 2003 -- almost nine years ago.
+
+ - Support for tcc (the Tiny C Compiler) has been improved, and is now
+ handled through a dedicated 'tcc' mode.
+
+* The ylwrap script:
+
+ - ylwrap generates header guards with a single '_' for series of non
+ alphabetic characters, instead of several. This is what Bison >=
+ 2.5.1 does.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Bugs fixed in 1.12.6:
+
+* Python-related bugs:
+
+ - The default installation location for python modules has been improved
+ for Python 3 on Debian and Ubuntu systems, changing from:
+
+ ${prefix}/lib/python3/dist-packages
+
+ to
+
+ ${prefix}/lib/python3.x/site-packages
+
+ This change should ensure modules installed using the default ${prefix}
+ "/usr/local" are found by default by system python 3.x installations.
+ See automake bug#10227.
+
+ - Python byte-compilation supports the new layout mandated by PEP-3147,
+ with its __pycache__ directory (automake bug#8847).
+
+* Build system issues:
+
+ - The maintainer rebuild rules for Makefiles and aclocal.m4 in
+ Automake's own build system works correctly again (bug introduced
+ in Automake 1.12.5).
+
+* Testsuite issues:
+
+ - The Vala-related tests has been changed to adjust to the removal of
+ the 'posix' profile in the valac compiler. See automake bug#12934
+ a.k.a. bug#12522.
+
+ - Some spurious testsuite failures related to older tools and systems
+ have been fixed.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+New in 1.12.5:
+
+* Vala support:
+
+ - The AM_PROG_VALAC macro has been enhanced to takes two further
+ optional arguments; it's signature now being
+
+ AM_PROG_VALAC([MINIMUM-VERSION], [ACTION-IF-FOUND],
+ [ACTION-IF-NOT-FOUND])
+
+ - By default, AM_PROG_VALAC no longer aborts the configure invocation
+ if the Vala compiler found is too old, but simply prints a warning
+ messages (as it did when the Vala compiler was not found). This
+ should avoid unnecessary difficulties for end users that just want
+ to compile the unmodified, distributed Vala-generated C sources,
+ but happens to have an old Vala compiler in their PATH. This fixes
+ automake bug#12688.
+
+ - If no proper Vala compiler is found at configure runtime, AM_PROG_VALAC
+ will set the AC_SUBST'd variable 'VALAC' to 'valac' rather than to ':'.
+ This is a better default, because with it a triggered makefile rule
+ invoking a Vala compilation will clearly fail with an informative error
+ message like "valac: command not found", rather than silently, with
+ the error possibly going unnoticed or triggering harder-to-diagnose
+ fallout failures in later steps.
+
+* Miscellaneous changes:
+
+ - automake and aclocal no longer honours the 'perllibdir' environment
+ variable. That had always been intended only as an hack required in
+ the testsuite, not meant for any use beyond that.
+
+Bugs fixed in 1.12.5:
+
+* Long-standing bugs:
+
+ - Automake no longer generates spurious remake rules invoking autoheader
+ to regenerate the template corresponding to header files specified after
+ the first one in AC_CONFIG_HEADERS (automake bug#12495).
+
+ - When wrapping Microsoft tools, the 'compile' script falls back to
+ finding classic 'libname.a' style libraries when 'name.lib' and
+ 'name.dll.lib' aren't available.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+New in 1.12.4:
+
+* Warnings and deprecations:
+
+ - Warnings in the 'obsolete' category are enabled by default both in
+ automake and aclocal.
+
+* Miscellaneous changes:
+
+ - Some testsuite weaknesses and spurious failures have been fixed.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+New in 1.12.3:
+
+* Miscellaneous changes:
+
+ - The '.m4' files provided by Automake no longer define serial numbers.
+ This should cause no difference in the behaviour of aclocal though.
+
+ - Some testsuite weaknesses and spurious failures have been fixed.
+
+ - There is initial support for automatic dependency tracking with the
+ Portland Group C/C++ compilers, thanks to the new new depmode 'pgcc'.
+
+Bugs fixed in 1.12.3:
+
+* Long-standing bugs:
+
+ - Instead of renaming only self-references of files (typically for
+ #lines), ylwrap now also renames references to the other generated
+ files. This fixes support for GLR and C++ parsers from Bison (PR
+ automake/491 and automake bug#7648): 'parser.c' now properly
+ #includes 'parser.h' instead of 'y.tab.h'.
+
+ - Generated files unknown to ylwrap are now preserved. This fixes
+ C++ support for Bison (automake bug#7648): location.hh and the
+ like are no longer discarded.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+New in 1.12.2:
+
+* Warnings and deprecations:
+
+ - Automake now issues a warning (in the 'portability' category) if
+ 'configure.in' is used instead of 'configure.ac' as the Autoconf
+ input file. Such a warning will also be present in the next
+ Autoconf version (2.70).
+
+* Cleaning rules:
+
+ - Recursive cleaning rules descends into the $(SUBDIRS) in the natural
+ order (as done by the other recursive rules), rather than in the
+ inverse order. They used to do that in order to work a round a
+ limitation in an older implementation of the automatic dependency
+ tracking support, but that limitation had been lifted years ago
+ already, when the automatic dependency tracking based on side-effects
+ of compilation had been introduced.
+
+ - Cleaning rules for compiled objects (both "plain" and libtool) work
+ better when subdir objects are involved, not triggering a distinct
+ 'rm' invocation for each such object. They do so by removing *any*
+ compiled object file that is in the same directory of a subdir
+ object. See automake bug#10697.
+
+* Silent rules support:
+
+ - A new predefined $(AM_V_P) make variable is provided; it expands
+ to a shell conditional that can be used in recipes to know whether
+ make is being run in silent or verbose mode.
+
+Bugs fixed in 1.12.2:
+
+* SECURITY VULNERABILITIES!
+
+ - The 'distcheck' recipe no longer grants temporary world-write
+ permissions on the extracted distdir. Even if such rights were
+ only granted for a vanishingly small time window, the implied
+ race condition proved to be enough to allow a local attacker
+ to run arbitrary code with the privileges of the user running
+ "make distcheck". This is CVE-2012-3386.
+
+* Long-standing bugs:
+
+ - The "recheck" targets behaves better in the face of build failures
+ related to previously failed tests. For example, if a test is a
+ compiled program that must be rerun by "make recheck", and its
+ compilation fails, it will still be rerun by further "make recheck"
+ invocations. See automake bug#11791.
+
+* Bugs introduced by 1.12.1:
+
+ - Automake provides once again the '$(mkdir_p)' make variable and the
+ '@mkdir_p@' substitution (both as simple aliases for '$(MKDIR_P)'),
+ for better backward-compatibility.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+New in 1.12.1:
+
+* New supported languages:
+
+ - Support for Objective C++ has been added; it should work similarly to
+ the support for Objective C.
+
+* Deprecated obsolescent features:
+
+ - Use of the long-deprecated two- and three-arguments invocation forms
+ of the AM_INIT_AUTOMAKE macro now elicits a warning in the 'obsolete'
+ category. Starting from some future major Automake release (likely
+ post-1.13), such usages will no longer be allowed.
+
+ - Support for the "Cygnus-style" trees (enabled by the 'cygnus' option) is
+ now deprecated (its use triggers a warning in the 'obsolete' category).
+ It will be removed in the next major Automake release (1.13).
+
+ - The long-obsolete (since 1.10) automake-provided $(mkdir_p) make
+ variable, @mkdir_p@ configure-time substitution and AM_PROG_MKDIR
+ m4 macro are deprecated, eliciting a warning in the 'obsolete'
+ category.
+
+* Miscellaneous changes:
+
+ - The Automake test cases now require a proper POSIX-conforming shell.
+ Older non-POSIX Bourne shells (like Solaris 10 /bin/sh) will no longer
+ be accepted. In most cases, the user shouldn't have to specify such
+ POSIX shell explicitly, since it will be looked up at configure time.
+ Still, when this lookup fails, or when the user wants to override its
+ conclusion, the variable 'AM_TEST_RUNNER_SHELL' can be used (pointing
+ to the shell that will be used to run the Automake test cases).
+
+Bugs fixed in 1.12.1:
+
+* Bugs introduced by 1.12:
+
+ - Several weaknesses in Automake's own build system and test suite
+ have been fixed.
+
+* Bugs introduced by 1.11.3:
+
+ - When given non-option arguments, aclocal rejects them, instead of
+ silently ignoring them.
+
+* Long-standing bugs:
+
+ - When the 'color-tests' option is in use, forcing of colored testsuite
+ output through "AM_COLOR_TESTS=always" works even if the terminal is
+ a non-ANSI one, i.e., if the TERM environment variable has a value of
+ "dumb".
+
+ - Several inefficiencies and poor performances in the implementation
+ of the parallel-tests 'check' and 'recheck' targets have been fixed.
+
+ - The post-processing of output "#line" directives done the ylwrap
+ script is more faithful w.r.t. files in a subdirectory; for example,
+ if the processed file is "src/grammar.y", ylwrap will correctly
+ produce directives like:
+ #line 7 "src/grammar.y"
+ rather than like
+ #line 7 "grammar.y"
+ as it did before.
+
+* Bugs with new Perl versions:
+
+ - Aclocal works correctly with perl 5.16.0 (automake bug#11543).
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+New in 1.12:
+
+* Obsolete features removed:
+
+ - The never documented nor truly used script 'acinstall' has been
+ removed.
+
+ - Support for automatic de-ANSI-fication has been removed.
+
+ - The support for the "obscure" multilib feature has been removed
+ from Automake core (but remains available in the 'contrib/'
+ directory of the Automake distribution).
+
+ - Support for ".log -> .html" conversion and the check-html and
+ recheck-html targets has been removed from Automake core (but
+ remains available in the 'contrib/' directory of the Automake
+ distribution).
+
+ - The deprecated 'lzma' compression format for distribution archives
+ has been removed, in favor of 'xz' and 'lzip'.
+
+ - The obsolete AM_WITH_REGEX macro has been removed.
+
+ - The long-deprecated options '--output-dir', '--Werror' and
+ '--Wno-error' have been removed.
+
+ - The chapter on the history of Automake has been moved out of the
+ reference manual, into a new dedicated Texinfo file.
+
+* New targets:
+
+ - New 'cscope' target to build a cscope database for the source tree.
+
+* Changes to Automake-generated testsuite harnesses:
+
+ - The new automake option 'serial-tests' has been introduced. It can
+ be used to explicitly instruct automake to use the older serial
+ testsuite harness. This is still the default at the moment, but it
+ might change in future versions.
+
+ - The 'recheck' target (provided by the parallel testsuite harness) now
+ depends on the 'all' target. This allows for a better user-experience
+ in test-driven development. See automake bug#11252.
+
+ - Test scripts that exit with status 99 to signal an "hard error" (e.g.,
+ and unexpected or internal error, or a failure to set up the test case
+ scenario) have their outcome reported as an 'ERROR' now. Previous
+ versions of automake reported such an outcome as a 'FAIL' (the only
+ difference with normal failures being that hard errors were counted
+ as failures even when the test originating them was listed in
+ XFAIL_TESTS).
+
+ - The testsuite summary displayed by the parallel-test harness has a
+ completely new format, that always list the numbers of passed, failed,
+ xfailed, xpassed, skipped and errored tests, even when these numbers
+ are zero (but using smart coloring when the color-tests option is in
+ effect).
+
+ - The default testsuite driver offered by the 'parallel-tests' option is
+ now implemented (partly at least) with the help of automake-provided
+ auxiliary scripts (e.g., 'test-driver'), instead of relying entirely
+ on code in the generated Makefile.in.
+ This has two noteworthy implications. The first one is that projects
+ using the 'parallel-tests' option should now either run automake with
+ the '--add-missing' option, or manually copy the 'test-driver' script
+ into their tree. The second, and more important, implication is that
+ now, when the 'parallel-tests' option is in use, TESTS_ENVIRONMENT can
+ no longer be used to define a test runner, and the command specified
+ in LOG_COMPILER (and <ext>_LOG_COMPILER) must be a *real* executable
+ program or script. For example, this is still a valid usage (albeit
+ a little contorted):
+
+ TESTS_ENVIRONMENT = \
+ if test -n '$(STRICT_TESTS)'; then \
+ maybe_errexit='-e'; \
+ else \
+ maybe_errexit=''; \
+ fi;
+ LOG_COMPILER = $(SHELL) $$maybe_errexit
+
+ OTOH, this is no longer a valid usage:
+
+ TESTS_ENVIRONMENT = \
+ $(SHELL) `test -n '$(STRICT_TESTS_CHECKING)' && echo ' -e'`
+
+ neither is this:
+
+ TESTS_ENVIRONMENT = \
+ run_with_perl_or_shell () \
+ { \
+ if grep -q '^#!.*perl' $$1; then
+ $(PERL) $$1; \
+ else \
+ $(SHELL) $$1; \
+ fi; \
+ }
+ LOG_COMPILER = run_with_perl_or_shell
+
+ - The package authors can now use customary testsuite drivers within
+ the framework provided by the 'parallel-tests' testsuite harness.
+ Consistently with the existing syntax, this can be done by defining
+ special makefile variables 'LOG_DRIVER' and '<ext>_LOG_DRIVER'.
+
+ - A new developer-reserved variable 'AM_TESTS_FD_REDIRECT' can be used
+ to redirect/define file descriptors used by the test scripts.
+
+ - The parallel-tests harness generates now, in addition the '.log' files
+ holding the output produced by the test scripts, a new set of '.trs'
+ files, holding "metadata" derived by the execution of the test scripts;
+ among such metadata are the outcomes of the test cases run by a script.
+
+ - Initial and still experimental support for the TAP test protocol is
+ now provided.
+
+* Changes to Yacc and Lex support:
+
+ - C source and header files derived from non-distributed Yacc and/or
+ Lex sources are now removed by a simple "make clean" (while they were
+ previously removed only by "make maintainer-clean").
+
+ - Slightly backward-incompatible change, relevant only for use of Yacc
+ with C++: the extensions of the header files produced by the Yacc
+ rules are now modelled after the extension of the corresponding
+ sources. For example, yacc files named "foo.y++" and "bar.yy" will
+ produce header files named "foo.h++" and "bar.hh" respectively, where
+ they would have previously produced header files named simply "foo.h"
+ and "bar.h". This change offers better compatibility with 'bison -o'.
+
+* Miscellaneous changes:
+
+ - The AM_PROG_VALAC macro now causes configure to exit with status 77,
+ rather than 1, if the vala compiler found is too old.
+
+ - The build system of Automake itself now avoids the use of make
+ recursion as much as possible.
+
+ - Automake now prefers to quote 'like this' or "like this", rather
+ than `like this', in diagnostic message and generated Makefiles,
+ to accommodate the new GNU Coding Standards recommendations.
+
+ - Automake has a new option '--print-libdir' that prints the path of the
+ directory containing the Automake-provided scripts and data files.
+
+ - The 'dist' and 'dist-all' targets now can run compressors in parallel.
+
+ - The rules to create pdf, dvi and ps output from Texinfo files now
+ works better with modern 'texi2dvi' script, by explicitly passing
+ it the '--clean' option to ensure stray auxiliary files are not
+ left to clutter the build directory.
+
+ - Automake can now generate silenced rules for texinfo outputs.
+
+ - Some auxiliary files that are automatically distributed by Automake
+ (e.g., 'install-sh', or the 'depcomp' script for packages compiling
+ C sources) might now be listed in the DIST_COMMON variable in many
+ Makefile.in files, rather than in the top-level one.
+
+ - Messages of types warning or error from 'automake' and 'aclocal'
+ are now prefixed with the respective type, and presence of -Werror
+ is noted.
+
+ - Automake's early configure-time sanity check now tries to avoid
+ sleeping for a second, which slowed down cached configure runs
+ noticeably. In that case, it will check back at the end of the
+ configure script to ensure that at least one second has passed, to
+ avoid time stamp issues with makefile rules rerunning autotools
+ programs.
+
+ - The warnings in the category 'extra-portability' are now enabled by
+ '-Wall'. In previous versions, one has to use '-Wextra-portability'
+ to enable them.
+
+Bugs fixed in 1.12:
+
+ - Various minor bugfixes for recent or long-standing bugs.
+
+* Bugs introduced by 1.11:
+
+ - The AM_COND_IF macro also works if the shell expression for the
+ conditional is no longer valid for the condition.
+
+ - The automake-provided parallel testsuite harness no longer fails
+ with BSD make used in parallel mode when there are test scripts in
+ a subdirectory, like in:
+
+ TESTS = sub/foo.test sub/bar.test
+
+* Long-standing bugs:
+
+ - Automake's own build system finally have a real "installcheck" target.
+
+ - Vala-related cleanup rules are now more complete, and work better in
+ a VPATH setup.
+
+ - Files listed with the AC_REQUIRE_AUX_FILE macro in configure.ac are
+ now automatically distributed also if the directory of the auxiliary
+ files coincides with the top-level directory.
+
+ - Automake now detects the presence of the '-d' flag in the various
+ '*YFLAGS' variables even when their definitions involve indirections
+ through other variables, such as in:
+ foo_opts = -d
+ AM_YFLAGS = $(foo_opts)
+
+ - Automake now complains if a '*YFLAGS' variable has any conditional
+ content, not only a conditional definition.
+
+ - Explicit enabling and/or disabling of Automake warning categories
+ through the '-W...' options now always takes precedence over the
+ implicit warning level implied by Automake strictness (foreign, gnu
+ or gnits), regardless of the order in which such strictness and
+ warning flags appear. For example, a setting like:
+ AUTOMAKE_OPTIONS = -Wall --foreign
+ will cause the warnings in category 'portability' to be enabled, even
+ if those warnings are by default disabled in 'foreign' strictness.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Bugs fixed in 1.11.5:
+
+* Bugs introduced by 1.11.3:
+
+ - Vala files with '.vapi' extension are now recognized and handled
+ correctly again. See automake bug#11222.
+
+ - Vala support work again for projects that contain some program
+ built from '.vala' (and possibly '.c') sources and some other
+ program built from '.c' sources *only*. See automake bug#11229.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+New in 1.11.4:
+
+* Miscellaneous changes:
+
+ - The 'ar-lib' script now ignores the "s" (symbol index) and "S" (no
+ symbol index) modifiers as well as the "s" action, as the symbol index
+ is created unconditionally by Microsoft lib. Also, the "q" (quick)
+ action is now a synonym for "r" (replace). Also, the script has been
+ ignoring the "v" (verbose) modifier already since Automake 1.11.3.
+
+ - When the 'compile' script is used to wrap MSVC, it now accepts an
+ optional space between the -I, -L and -l options and their respective
+ arguments, for better POSIX compliance.
+
+ - There is an initial, experimental support for automatic dependency
+ tracking with tcc (the Tiny C Compiler). Its associated depmode is
+ currently recognized as "icc" (but this and other details are likely
+ to change in future versions).
+
+ - Automatic dependency tracking now works also with the IBM XL C/C++
+ compilers, thanks to the new new depmode 'xlc'.
+
+Bugs fixed in 1.11.4:
+
+* Bugs introduced by 1.11.2:
+
+ - A definition of 'noinst_PYTHON' before 'python_PYTHON' (or similar)
+ no longer cause spurious failures upon "make install".
+
+ - The user can now instruct the 'uninstall-info' rule not to update
+ the '${infodir}/dir' file by exporting the environment variable
+ 'AM_UPDATE_INFO_DIR' to the value "no". This is done for consistency
+ with how the 'install-info' rule operates since automake 1.11.2.
+
+* Long-standing bugs:
+
+ - It is now possible for a foo_SOURCES variable to hold Vala sources
+ together with C header files, as well as with sources and headers for
+ other supported languages (e.g., C++). Previously, only mixing C and
+ Vala sources was supported.
+
+ - If "aclocal --install" is used, and the first directory specified with
+ '-I' is non-existent, aclocal will now create it before trying to copy
+ files in it.
+
+ - An empty declaration of a "foo_PRIMARY" no longer cause the generated
+ install rules to create an empty $(foodir) directory; for example, if
+ Makefile.am contains something like:
+
+ pkglibexec_SCRIPTS =
+ if FALSE
+ pkglibexec_SCRIPTS += bar.sh
+ endif
+
+ the $(pkglibexec) directory will not be created upon "make install".
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+New in 1.11.3:
+
+* Miscellaneous changes:
+
+ - Automake's own build system is more silent by default, making use of
+ the 'silent-rules' option.
+
+ - The master copy of the 'gnupload' script is now maintained in gnulib,
+ not in automake.
+
+ - The 'missing' script no longer tries to wrap calls to 'tar'.
+
+ - "make dist" no longer wraps 'tar' invocations with the 'missing'
+ script. Similarly, the obsolescent variable '$(AMTAR)' (which you
+ shouldn't be using BTW ;-) no longer invokes the 'missing' script
+ to wrap tar, but simply invokes the 'tar' program itself.
+
+ - "make dist" can now create lzip-compressed tarballs.
+
+ - In the Automake info documentation, the Top node and the nodes about
+ the invocation of the automake and aclocal programs have been renamed;
+ now, calling "info automake" will open the Top node, while calling
+ "info automake-invocation" and "info aclocal-invocation" will access
+ the nodes about the invocation of respectively automake and aclocal.
+
+ - Automake is now distributed as a gzip-compressed and an xz-compressed
+ tarball. Previously, bzip2 was used instead of xz.
+
+ - The last relics of Python 1.5 support have been removed from the
+ AM_PATH_PYTHON macro.
+
+ - For programs and libraries, automake now detects EXTRA_foo_DEPENDENCIES
+ and adds them to the normal list of dependencies, but without
+ overwriting the foo_DEPENDENCIES variable, which is normally computed
+ by automake.
+
+Bugs fixed in 1.11.3:
+
+* Bugs introduced by 1.11.2:
+
+ - Automake now correctly recognizes the prefix/primary combination
+ 'pkglibexec_SCRIPTS' as valid.
+
+ - The parallel-tests harness no longer trips on sed implementations
+ with stricter limits on the length of input lines (problem seen at
+ least on Solaris 8).
+
+* Long-standing bugs:
+
+ - The "deleted header file problem" for *.am files is avoided by stub
+ rules. This allows 'make' to trigger a rerun of 'automake' also if
+ some previously needed '.am' file has been removed.
+
+ - The 'silent-rules' option now generates working makefiles even
+ for the uncommon 'make' implementations that do not support the
+ nested-variables extension to POSIX 2008. For such 'make'
+ implementations, whether a build is silent is determined at
+ configure time, and cannot be overridden at make time with
+ "make V=0" or "make V=1".
+
+ - Vala support now works better in VPATH setups.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+New in 1.11.2:
+
+* Changes to aclocal:
+
+ - The `--acdir' option is deprecated. Now you should use the new options
+ `--automake-acdir' and `--system-acdir' instead.
+
+ - The `ACLOCAL_PATH' environment variable is now interpreted as a
+ colon-separated list of additional directories to search after the
+ automake internal acdir (by default ${prefix}/share/aclocal-APIVERSION)
+ and before the system acdir (by default ${prefix}/share/aclocal).
+
+* Miscellaneous changes:
+
+ - The Automake support for automatic de-ANSI-fication has been
+ deprecated. It will probably be removed in the next major Automake
+ release (1.12).
+
+ - The `lzma' compression scheme and associated automake option `dist-lzma'
+ is obsoleted by `xz' and `dist-xz' due to upstream changes.
+
+ - You may adjust the compression options used in dist-xz and dist-bzip2.
+ The default is now merely -e for xz, but still -9 for bzip; you may
+ specify a different level via the XZ_OPT and BZIP2 envvars respectively.
+ E.g., "make dist-xz XZ_OPT=-7" or "make dist-bzip2 BZIP2=-5"
+
+ - The `compile' script now converts some options for MSVC for a better
+ user experience. Similarly, the new `ar-lib' script wraps Microsoft lib.
+
+ - The py-compile script now accepts empty arguments passed to the options
+ `--destdir' and `--basedir', and complains about unrecognized options.
+ Moreover, a non-option argument or a special `--' argument terminates
+ the list of options.
+
+ - A developer that needs to pass specific flags to configure at "make
+ distcheck" time can now, and indeed is advised to, do so by defining
+ the developer-reserved makefile variable AM_DISTCHECK_CONFIGURE_FLAGS,
+ instead of the old DISTCHECK_CONFIGURE_FLAGS.
+ The DISTCHECK_CONFIGURE_FLAGS variable should now be reserved for the
+ user; still, the old Makefile.am files that used to define it will
+ still continue to work as before.
+
+ - New macro AM_PROG_AR that looks for an archiver and wraps it in the new
+ 'ar-lib' auxiliary script if the selected archiver is Microsoft lib.
+ This new macro is required for LIBRARIES and LTLIBRARIES when automake
+ is run with -Wextra-portability and -Werror.
+
+ - When using DejaGnu-based testsuites, the user can extend the `site.exp'
+ file generated by automake-provided rules by defining the special make
+ variable `$(EXTRA_DEJAGNU_SITE_CONFIG)'.
+
+ - The `install-info' rule can now be instructed not to create/update
+ the `${infodir}/dir' file, by exporting the new environment variable
+ `AM_UPDATE_INFO_DIR' to the value "no".
+
+Bugs fixed in 1.11.2:
+
+* Bugs introduced by 1.11:
+
+ - The parallel-tests driver no longer produces erroneous results with
+ Tru64/OSF 5.1 sh upon unreadable log files.
+
+ - The `parallel-tests' test driver does not report spurious successes
+ when used with concurrent FreeBSD make (e.g., "make check -j3").
+
+ - When the parallel-tests driver is in use, automake now explicitly
+ rejects invalid entries and conditional contents in TEST_EXTENSIONS,
+ instead of issuing confusing and apparently unrelated error messages
+ (e.g., "non-POSIX variable name", "bad characters in variable name",
+ or "redefinition of TEST_EXTENSIONS), or even, in some situations,
+ silently producing broken `Makefile.in' files.
+
+ - The `silent-rules' option now truly silences all compile rules, even
+ when dependency tracking is disabled. Also, when `silent-rules' is
+ not used, `make' output no longer contains spurious backslash-only
+ lines, thus once again matching what Automake did before 1.11.
+
+ - The AM_COND_IF macro also works if the shell expression for the
+ conditional is no longer valid for the condition.
+
+* Long-standing bugs:
+
+ - The order of Yacc and Lex flags is fixed to be consistent with other
+ languages: $(AM_YFLAGS) comes before $(YFLAGS), and $(AM_LFLAGS) before
+ $(LFLAGS), so that the user variables override the developer variables.
+
+ - "make distcheck" now correctly complains also when "make uninstall"
+ leaves one and only one file installed in $(prefix).
+
+ - A "make uninstall" issued before a "make install", or after a mere
+ "make install-data" or a mere "make install-exec" does not spuriously
+ fail anymore.
+
+ - Automake now warns about more primary/directory invalid combinations,
+ such as "doc_LIBRARIES" or "pkglib_PROGRAMS".
+
+ - Rules generated by Automake now try harder to not change any files when
+ `make -n' is invoked. Fixes include compilation of Emacs Lisp, Vala, or
+ Yacc source files and the rule to update config.h.
+
+ - Several scripts and the parallel-tests testsuite driver now exit with
+ the right exit status upon receiving a signal.
+
+ - A per-Makefile.am setting of -Werror does not erroneously carry over
+ to the handling of other Makefile.am files.
+
+ - The code for automatic dependency tracking works around a Solaris
+ make bug triggered by sources containing repeated slashes when the
+ `subdir-objects' option was used.
+
+ - The makedepend and hp depmodes now work better with VPATH builds.
+
+ - Java sources specified with check_JAVA are no longer compiled for
+ "make all", but only for "make check".
+
+ - An usage like "java_JAVA = foo.java" will now cause Automake to warn
+ and error out if `javadir' is undefined, instead of silently producing
+ a broken Makefile.in.
+
+ - aclocal and automake now honour the configure-time definitions of
+ AUTOCONF and AUTOM4TE when they spawn autoconf or autom4te processes.
+
+ - The `install-info' recipe no longer tries to guess whether the
+ `install-info' program is from Debian or from GNU, and adaptively
+ change its behaviour; this has proven to be frail and easy to
+ regress.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Bugs fixed in 1.11.1:
+
+ - Lots of minor bugfixes.
+
+* Bugs introduced by 1.11:
+
+ - The `parallel-tests' test driver works around a GNU make 3.80 bug with
+ trailing white space in the test list (`TESTS = foo $(EMPTY)').
+
+* Long standing bugs:
+
+ - On Darwin 9, `pythondir' and `pyexecdir' pointed below `/Library/Python'
+ even if the `--prefix' argument pointed outside of a system directory.
+ AM_PATH_PYTHON has been fixed to ignore the value returned from python's
+ `get_python_lib' function if it points outside the configured prefix,
+ unless the `--prefix' argument was either `/usr' or below `/System'.
+
+ - The testsuite does not try to change the mode of `ltmain.sh' files from
+ a Libtool installation (symlinked to test directories) any more.
+
+ - AM_PROG_GCJ uses AC_CHECK_TOOLS to look for `gcj' now, so that prefixed
+ tools are preferred in a cross-compile setup.
+
+ - The distribution is tarred up with mode 755 now by the `dist*' targets.
+ This fixes a race condition where untrusted users could modify files
+ in the $(PACKAGE)-$(VERSION) distdir before packing if the toplevel
+ build directory was world-searchable. This is CVE-2009-4029.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+New in 1.11:
+
+* Version requirements:
+
+ - Autoconf 2.62 or greater is required.
+
+* Changes to aclocal:
+
+ - The autoconf version check implemented by aclocal in aclocal.m4
+ (and new in Automake 1.10) is degraded to a warning. This helps
+ in the common case where the Autoconf versions used are compatible.
+
+* Changes to automake:
+
+ - The automake program can run multiple threads for creating most
+ Makefile.in files concurrently, if at least Perl 5.7.2 is available
+ with interpreter-based threads enabled. Set the environment variable
+ AUTOMAKE_JOBS to the maximum number of threads to use, in order to
+ enable this experimental feature.
+
+* Changes to Libtool support:
+
+ - Libtool generic flags are now passed to the install and uninstall
+ modes as well.
+
+ - distcheck works with Libtool 2.x even when LT_OUTPUT is used, as
+ config.lt is removed correctly now.
+
+* Languages changes:
+
+ - subdir-object mode works now with Fortran (F77, FC, preprocessed
+ Fortran, and Ratfor).
+
+ - For files with extension .f90, .f95, .f03, or .f08, the flag
+ $(FCFLAGS_f[09]x) computed by AC_FC_SRCEXT is now used in compile rules.
+
+ - Files with extension .sx are also treated as preprocessed assembler.
+
+ - The default source file extension (.c) can be overridden with
+ AM_DEFAULT_SOURCE_EXT now.
+
+ - Python 3.0 is supported now, Python releases prior to 2.0 are no
+ longer supported.
+
+ - AM_PATH_PYTHON honors python's idea about the site directory.
+
+ - There is initial support for the Vala programming language, when using
+ Vala 0.7.0 or later.
+
+* Miscellaneous changes:
+
+ - Automake development is done in a git repository on Savannah now, see
+
+ https://git.sv.gnu.org/gitweb/?p=automake.git
+
+ A read-only CVS mirror is provided at
+
+ cvs -d :pserver:anonymous@pserver.git.sv.gnu.org:/automake.git \
+ checkout -d automake HEAD
+
+ - "make dist" can now create xz-compressed tarballs,
+ as well as (deprecated?) lzma-compressed tarballs.
+
+ - `automake --add-missing' will by default install the GPLv3 file as
+ COPYING if it is missing. It will also warn that the license file
+ should be added to source control. Note that Automake will never
+ overwrite an existing COPYING file, even when the `--force-missing'
+ option is used.
+
+ - The manual is now distributed under the terms of the GNU FDL 1.3.
+
+ - Automake ships and installs man pages for automake and aclocal now.
+
+ - New shorthand `$(pkglibexecdir)' for `$(libexecdir)/@PACKAGE@'.
+
+ - install-sh supports -C, which does not update the installed file
+ (and its time stamps) if the contents did not change.
+
+ - The `gnupload' script has been revamped.
+
+ - The `depcomp' and `compile' scripts now work with MSVC under MSYS.
+
+ - The targets `install' and `uninstall' are more efficient now, in that
+ for example multiple files from one Automake variable such as
+ `bin_SCRIPTS' are copied in one `install' (or `libtool --mode=install')
+ invocation if they do not have to be renamed.
+
+ Both install and uninstall may sometimes enter (`cd' into) the target
+ installation directory now, when no build-local scripts are used.
+
+ Both install and uninstall do not fail anymore but do nothing if an
+ installation directory variable like `bindir' is set to the empty string.
+
+ For built-in rules, `make install' now fails reliably if installation
+ of a file failed. Conversely, `make uninstall' even succeeds when
+ issued multiple times.
+
+ These changes may need some adjustments from users: For example,
+ some `install' programs refuse to install multiple copies of the
+ same file in one invocation, so you may need to remove duplicate
+ entries from file lists.
+
+ Also, within one set of files, say, nobase_data_DATA, the order of
+ installation may be changed, or even unstable among different hosts,
+ due to the use of associative arrays in awk. The increased use of
+ awk matches a similar move in Autoconf to provide for better scaling.
+
+ Further, most undocumented per-rule install command variables such as
+ binSCRIPT_INSTALL have been removed because they are not needed any
+ more. Packages which use them should be using the appropriate one of
+ INSTALL_{DATA,PROGRAM,SCRIPT} or their install_sh_{DATA,PROGRAM,SCRIPT}
+ counterpart, depending on the type of files and the need for automatic
+ target directory creation.
+
+ - The "deleted header file problem" for *.m4 files is avoided by
+ stub rules. This allows `make' to trigger a rerun of `aclocal'
+ also if some previously needed macro file has been removed.
+
+ - Rebuild rules now also work for a removed `subdir/Makefile.in' in
+ an otherwise up to date tree.
+
+ - The `color-tests' option causes colored test result output on terminals.
+
+ - The `parallel-tests' option enables a new test driver that allows for
+ parallel test execution, inter-test dependencies, lazy test execution
+ for unit-testing, re-testing only failed tests, and formatted result output
+ as RST (reStructuredText) and HTML. Enabling this option may require some
+ changes to your test suite setup; see the manual for details.
+
+ - The `silent-rules' option enables Linux kernel-style silent build output.
+ This option requires the widely supported but non-POSIX `make' feature
+ of recursive variable expansion, so do not use it if your package needs
+ to build with `make' implementations that do not support it.
+
+ To enable less verbose build output, the developer has to use the Automake
+ option `silent-rules' in `AM_INIT_AUTOMAKE', or call the `AM_SILENT_RULES'
+ macro. The user may then set the default verbosity by passing the
+ `--enable-silent-rules' option to `configure'. At `make' run time, this
+ default may be overridden using `make V=0' for less verbose, and `make V=1'
+ for backward-compatible verbose output.
+
+ - New prefix `notrans_' for manpages which should not be transformed
+ by --program-transform.
+
+ - New macro AM_COND_IF for conditional evaluation and conditional
+ config files.
+
+ - For AC_CONFIG_LINKS, if source and destination are equal, do not
+ remove the file in a non-VPATH build. Such setups work with Autoconf
+ 2.62 or newer.
+
+ - AM_MAINTAINER_MODE now allows for an optional argument specifying
+ the default setting.
+
+ - AM_SUBST_NOTMAKE may prevent substitution of AC_SUBSTed variables,
+ useful especially for multi-line values.
+
+ - Automake's early configure-time sanity check now diagnoses an
+ unsafe absolute source directory name and makes configure fail.
+
+ - The Automake macros and rules cope better with whitespace in the
+ current directory name, as long as the relative path to `configure'
+ does not contain whitespace. To this end, the values of `$(MISSING)'
+ and `$(install_sh)' may contain suitable quoting, and their expansion
+ might need `eval'uation if used outside of a makefile. These
+ undocumented variables may be used in several documented macros such
+ as $(AUTOCONF) or $(MAKEINFO).
+
+Bugs fixed in 1.11:
+
+* Long-standing bugs:
+
+ - Fix aix dependency tracking for libtool objects.
+
+ - Work around AIX sh quoting issue in AC_PROG_CC_C_O, leading to
+ unnecessary use of the `compile' script.
+
+ - For nobase_*_LTLIBRARIES with nonempty directory components, the
+ correct `-rpath' argument is used now.
+
+ - `config.status --file=Makefile depfiles' now also works with the
+ extra quoting used internally by Autoconf 2.62 and newer
+ (it used to work only without the `--file=' bit).
+
+ - The `missing' script works better with versioned tool names.
+
+ - Semantics for `missing help2man' have been revamped:
+
+ Previously, if `help2man' was not present, `missing help2man' would have
+ the following semantics: if some man page was out of date but present, then
+ a warning would be printed, but the exit status was 0. If the man page was
+ not present at all, then `missing' would create a replacement man page
+ containing an error message, and exit with a status of 2. This does not play
+ well with `make': the next run will see this particular man page as being up
+ to date, and will only error out on the next generated man page, if any;
+ repeat until all pages are done. This was not desirable.
+
+ These are the new semantics: if some man page is not present, and help2man
+ is not either, then `missing' will warn and generate the replacement page
+ containing the error message, but exit successfully. However, `make dist'
+ will ensure that no such bogus man pages are packaged into a tarball.
+
+ - Targets provided by automake behave better with `make -n', in that they
+ take care not to create files.
+
+ - `config.status Makefile... depfiles' works fine again in the presence of
+ disabled dependency tracking.
+
+ - The default no-op recursive rules for these targets also work with BSD make
+ now: html, install-html, install-dvi, install-pdf, install-pdf, install-info.
+
+ - `make distcheck' works also when both a directory and some file below it
+ have been added to a distribution variable, such as EXTRA_DIST or *_SOURCES.
+
+ - Texinfo dvi, ps, pdf, and html output files are not removed upon
+ `make mostlyclean' any more; only the LaTeX by-products are.
+
+ - Renamed objects also work with the `subdir-objects' option and
+ source file languages which Automake does not know itself.
+
+ - `automake' now correctly complains about variable assignments which are
+ preceded by a comment, extend over multiple lines with backslash-escaped
+ newlines, and end in a comment sign. Previous versions would silently
+ and wrongly ignore such assignments completely.
+
+* Bugs introduced by 1.10:
+
+ - Fix output of dummy dependency files in presence of post-processed
+ Makefile.in's again, but also cope with long lines.
+
+ - $(EXEEXT) is automatically appended to filenames of XFAIL_TESTS
+ that have been declared as programs in the same Makefile.
+ This is for consistency with the analogous change to TESTS in 1.10.
+
+ - Fix order of standard includes to again be `-I. -I$(srcdir)',
+ followed by directories containing config headers.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+New in 1.10:
+
+* Version requirements:
+
+ - Autoconf 2.60 or greater is required.
+
+ - Perl 5.6 or greater is required.
+
+* Changes to aclocal:
+
+ - aclocal now also supports -Wmumble and -Wno-mumble options.
+
+ - `dirlist' entries (for the aclocal search path) may use shell
+ wildcards such as `*', `?', or `[...]'.
+
+ - aclocal supports an --install option that will cause system-wide
+ third-party macros to be installed in the local directory
+ specified with the first -I flag. This option also uses #serial
+ lines in M4 files to upgrade local macros.
+
+ The new aclocal options --dry-run and --diff help to review changes
+ before they are installed.
+
+ - aclocal now outputs an autoconf version check in aclocal.m4 in
+ projects using automake.
+
+ For a few years, automake and aclocal have been calling autoconf
+ (or its underlying engine autom4te) to accurately retrieve the
+ data they need from configure.ac and its siblings. Doing so can
+ only work if all autotools use the same version of autoconf. For
+ instance a Makefile.in generated by automake for one version of
+ autoconf may stop working if configure is regenerated with another
+ version of autoconf, and vice versa.
+
+ This new version check ensures that the whole build system has
+ been generated using the same autoconf version.
+
+* Support for new Autoconf macros:
+
+ - The new AC_REQUIRE_AUX_FILE Autoconf macro is supported.
+
+ - If `subdir-objects' is set, and AC_CONFIG_LIBOBJ_DIR is specified,
+ $(LIBOBJS), $(LTLIBOBJS), $(ALLOCA), and $(LTALLOCA) can be used
+ in different directories. However, only one instance of such a
+ library objects directory is supported.
+
+* Change to Libtool support:
+
+ - Libtool generic flags (those that go before the --mode=MODE option)
+ can be specified using AM_LIBTOOLFLAGS and target_LIBTOOLFLAGS.
+
+* Yacc and Lex changes:
+
+ - The rebuild rules for distributed Yacc and Lex output will avoid
+ overwriting existing files if AM_MAINTAINER_MODE and maintainer-mode
+ is not enabled.
+
+ - ylwrap is now always used for lex and yacc source files,
+ regardless of whether there is more than one source per directory.
+
+* Languages changes:
+
+ - Preprocessed assembler (*.S) compilation now honors CPPFLAGS,
+ AM_CPPFLAGS and per-target _CPPFLAGS, and supports dependency
+ tracking, unlike non-preprocessed assembler (*.s).
+
+ - subdir-object mode works now with Assembler. Automake assumes
+ that the compiler understands `-c -o'.
+
+ - Preprocessed assembler (*.S) compilation now also honors
+ $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES).
+
+ - Improved support for Objective C:
+ - Autoconf's new AC_PROG_OBJC will enable automatic dependency tracking.
+ - A new section of the manual documents the support.
+
+ - New support for Unified Parallel C:
+ - AM_PROG_UPC looks for a UPC compiler.
+ - A new section of the manual documents the support.
+
+ - Per-target flags are now correctly handled in link rules.
+
+ For instance maude_CFLAGS correctly overrides AM_CFLAGS; likewise
+ for maude_LDFLAGS and AM_LDFLAGS. Previous versions bogusly
+ preferred AM_CFLAGS over maude_CFLAGS while linking, and they
+ used both AM_LDFLAGS and maude_LDFLAGS on the same link command.
+
+ The fix for compiler flags (i.e., using maude_CFLAGS instead of
+ AM_CFLAGS) should not hurt any package since that is how _CFLAGS
+ is expected to work (and actually works during compilation).
+
+ However using maude_LDFLAGS "instead of" AM_LDFLAGS rather than
+ "in addition to" breaks backward compatibility with older versions.
+ If your package used both variables, as in
+
+ AM_LDFLAGS = common flags
+ bin_PROGRAMS = a b c
+ a_LDFLAGS = more flags
+ ...
+
+ and assumed *_LDFLAGS would sum up, you should rewrite it as
+
+ AM_LDFLAGS = common flags
+ bin_PROGRAMS = a b c
+ a_LDFLAGS = $(AM_LDFLAGS) more flags
+ ...
+
+ This new behavior of *_LDFLAGS is more coherent with other
+ per-target variables, and the way *_LDFLAGS variables were
+ considered internally.
+
+* New installation targets:
+
+ - New targets mandated by GNU Coding Standards:
+ install-dvi
+ install-html
+ install-ps
+ install-pdf
+ By default they will only install Texinfo manuals.
+ You can customize them with *-local variants:
+ install-dvi-local
+ install-html-local
+ install-ps-local
+ install-pdf-local
+
+ - The undocumented recursive target `uninstall-info' no longer exists.
+ (`uninstall' is in charge of removing all possible documentation
+ flavors, including optional formats such as dvi, ps, or info even
+ when `no-installinfo' is used.)
+
+* Miscellaneous changes:
+
+ - Automake no longer complains if input files for AC_CONFIG_FILES
+ are specified using shell variables.
+
+ - clean, distribution, or rebuild rules are normally disabled for
+ inputs and outputs of AC_CONFIG_FILES, AC_CONFIG_HEADERS, and
+ AC_CONFIG_LINK specified using shell variables. However, if these
+ variables are used as ${VAR}, and AC_SUBSTed, then Automake will
+ be able to output rules anyway.
+ (See the Automake documentation for AC_CONFIG_FILES.)
+
+ - $(EXEEXT) is automatically appended to filenames of TESTS
+ that have been declared as programs in the same Makefile.
+ This is mostly useful when some check_PROGRAMS are listed in TESTS.
+
+ - `-Wportability' has finally been turned on by default for `gnu' and
+ `gnits' strictness. This means, automake will complain about %-rules
+ or $(GNU Make functions) unless you switch to `foreign' strictness or
+ use `-Wno-portability'.
+
+ - Automake now uses AC_PROG_MKDIR_P (new in Autoconf 2.60), and uses
+ $(MKDIR_P) instead of $(mkdir_p) to create directories. The
+ $(mkdir_p) variable is still defined (to the same value as
+ $(MKDIR_P)) but should be considered obsolete. If you are using
+ $(mkdir_p) in some of your rules, please plan to update them to
+ $(MKDIR_P) at some point.
+
+ - AM_C_PROTOTYPES and ansi2knr are now documented as being obsolete.
+ They still work in this release, but may be withdrawn in a future one.
+
+ - Inline compilation rules for gcc3-style dependency tracking are
+ more readable.
+
+ - Automake installs a "Hello World!" example package in $(docdir).
+ This example is used throughout the new "Autotools Introduction"
+ chapter of the manual.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+New in 1.9:
+
+* Makefile.in bloat reduction:
+
+ - Inference rules are used to compile sources in subdirectories when
+ the `subdir-objects' option is used and no per-target flags are
+ used. This should reduce the size of some projects a lot, because
+ Automake used to output an explicit rule for each such object in
+ the past.
+
+ - Automake no longer outputs three rules (.o, .obj, .lo) for each
+ object that must be built with explicit rules. It just outputs
+ the rules required to build the kind of object considered: either
+ the two .o and .obj rules for usual objects, or the .lo rule for
+ libtool objects.
+
+* Change to Libtool support:
+
+ - Libtool tags are used with libtool versions that support them.
+ (I.e., with Libtool 1.5 or greater.)
+
+ - Automake is now able to handle setups where a libtool library is
+ conditionally installed in different directories, as in
+
+ if COND
+ lib_LTLIBRARIES = liba.la
+ else
+ pkglib_LTLIBRARIES = liba.la
+ endif
+ liba_la_SOURCES = ...
+
+* Changes to aclocal:
+
+ - aclocal now ensures that AC_DEFUNs and AU_DEFUNs it discovers are
+ really evaluated, before it decides to include them in aclocal.m4.
+ This solves nasty problems with conditional redefinitions of
+ Autoconf macros in /usr/share/aclocal/*.m4 files causing extraneous
+ *.m4 files to be included in any project using these macros.
+ (Calls to AC_PROG_EGREP causing libtool.m4 to be included is the
+ most famous instance of this bug.)
+
+ - Do not complain about missing conditionally AC_REQUIREd macros
+ that are not actually used. In 1.8.x aclocal would correctly
+ determine which of these macros were really needed (and include
+ only these in the package); unfortunately it would also require
+ all of them to be present in order to run. This created
+ situations were aclocal would not work on a tarball distributing
+ all the macros it uses. For instance running aclocal on a project
+ containing only the subset of the Gettext macros in use by the
+ project did not work, because gettext conditionally requires other
+ macros.
+
+* Portability improvements:
+
+ - Tar format can be chosen with the new options tar-v7, tar-ustar, and
+ tar-pax. The new option filename-length-max=99 helps diagnosing
+ filenames that are too long for tar-v7. (PR/414)
+
+ - Variables augmented with `+=' are now automatically flattened (i.e.,
+ trailing backslashes removed) and then wrapped around 80 columns
+ (adding trailing backslashes). In previous versions, a long series
+ of
+ VAR += value1
+ VAR += value2
+ VAR += value3
+ ...
+ would result in a single-line definition of VAR that could possibly
+ exceed the maximum line length of some make implementations.
+
+ Non-augmented variables are still output as they are defined in
+ the Makefile.am.
+
+* Miscellaneous:
+
+ - Support Fortran 90/95 with the new "fc" and "ppfc" languages.
+ Works the same as the old Fortran 77 implementation; just replace
+ F77 with FC everywhere (exception: FFLAGS becomes FCFLAGS).
+ Requires a version of autoconf which provides AC_PROG_FC (>=2.59).
+
+ - Support for conditional _LISP.
+
+ - Support for conditional -hook and -local rules (PR/428).
+
+ - Diagnose AC_CONFIG_AUX_DIR calls following AM_INIT_AUTOMAKE. (PR/49)
+
+ - Automake will not write any Makefile.ins after the first error it
+ encounters. The previous Makefile.ins (if any) will be left in
+ place. (Warnings will not prevent output, but remember they can
+ be turned into errors with -Werror.)
+
+ - The restriction that SUBDIRS must contain direct children is gone.
+ Do not abuse.
+
+ - The manual tells more about SUBDIRS vs. DIST_SUBDIRS.
+ It also gives an example of nested packages using AC_CONFIG_SUBDIRS.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Bugs fixed in 1.8.5:
+
+* Long-standing bugs:
+
+ - Define DIST_SUBDIRS even when the `no-dist' or `cygnus' options are used
+ so that `make distclean' and `make maintainer-clean' can work.
+
+ - Define AR and ARFLAGS even when only EXTRA_LIBRARIES are defined.
+
+ - Fix many rules to please FreeBSD make, which runs commands with `sh -e'.
+
+ - Polish diagnostic when no input file is found.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Bugs fixed in 1.8.4:
+
+* Long-standing bugs:
+
+ - Fix AM_PATH_PYTHON to correctly display $PYTHON when it has been
+ overridden by the user.
+
+ - Honor PATH_SEPARATOR in various places of the Automake package, for
+ the sake of OS/2.
+
+ - Adjust dependency tracking mode detection to ICC 8.0's new output.
+ (PR/416)
+
+ - Fix install-sh so it can install the `mv' binary... using `mv'.
+
+ - Fix tru64 dependency tracking for libtool objects.
+
+ - Work around Exuberant Ctags when creating a TAGS files in a directory
+ without files to scan but with subdirectories to include.
+
+* Bugs introduced by 1.8:
+
+ - Fix an "internal error" when @LIBOBJS@ is used in a variable that is
+ not defined in the same conditions as the _LDADD that uses it.
+
+ - Do not warn when JAVAROOT is overridden, this is legitimate.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Bugs fixed in 1.8.3:
+
+* Long-standing bugs:
+
+ - Quote filenames in installation rules, in case $DESTDIR, $prefix,
+ or any of the other *dir variables contain a space.
+
+ Please note that Automake does not and cannot support spaces in
+ filenames that are involved during the build. This change affects
+ only installation paths, so that `make install' does not bomb out
+ in packages configured with
+ ./configure --prefix '/c/Program Files'
+
+ - Fix the depfiles output so it works with GNU sed (<4.1) even when
+ POSIXLY_CORRECT is set.
+
+ - Do not AC_SUBST(LIBOBJS) in AM_WITH_REGEX. This macro was unusable
+ since Autoconf 2.54, which defines LIBOBJS itself.
+
+ - Fix a potential (but unlikely) race condition in parallel elisp
+ builds. (Introduced in 1.7.3.)
+
+ - Do not assume that users override _DEPENDENCIES in all conditions
+ where Automake will try to define them.
+
+ - Do not use `mkdir -p' in mkinstalldirs, unless this is GNU mkdir.
+ Solaris 8's `mkdir -p' is not thread-safe and can break parallel
+ builds.
+
+ This fix also affects the $(mkdir_p) variable defined since
+ Automake 1.8. It will be set to `mkdir -p' only if mkdir is GNU
+ mkdir, and to `mkinstalldirs' or `install-sh -d' otherwise.
+
+ - Secure temporary directory creation in `make distcheck'. (PR/413)
+
+ - Do not generate two build rules for `parser.h' when the
+ parser appears in two different conditionals.
+
+ - Work around a Solaris 8 /bin/sh bug in the test for dependency
+ checking. Usually ./configure will not pick this shell; so this
+ fix only helps cases where the shell is forced to /bin/sh.
+
+* Bugs introduced by 1.8:
+
+ - In some situations (hand-written `m4_include's), aclocal would
+ call the `File::Spec->rel2abs' method, which was only introduced
+ in Perl 5.6. This new version reestablish support Perl 5.005.
+
+ It is likely that the next major Automake releases will require at
+ least Perl 5.6. Consider upgrading your development environment
+ if you are still using the five-year-old Perl 5.005.
+
+ - Automake would sometimes fail to define rules for targets listed
+ in variables defined in multiple conditions. For instance on
+ if C1
+ bin_PROGRAMS = a
+ else
+ bin_PROGRAMS = b
+ endif
+ it would define only the `a.$(OBJEXT): a.c' rule and omit the
+ `b.$(OBJEXT): b.c' rule.
+
+* New sections in manual:
+
+ - Third-Party Makefiles: how to interface third party Makefiles.
+ - Upgrading: upgrading packages to newer Automake versions.
+ - Multiple Outputs: handling tools that produce many outputs.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Bug fixed in 1.8.2:
+
+* A (well known) portability bug slipped in the changes made to
+ install-sh in Automake 1.8.1. The broken install-sh would refuse to
+ install anything on Tru64.
+
+* Fix install rules for conditionally built python files. (This never
+ really worked.)
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Bug fixed in 1.8.1:
+
+* Bugs introduced by 1.8:
+
+ - Fix Config.pm import error with old Perl versions (at least
+ 5.005_03). One symptom is that aclocal could not find its macro
+ directory.
+
+ - Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories
+ created by `make install' are always world readable, even if the
+ installer happens to have an overly restrictive umask (e.g. 077).
+ This was a mistake and has been reverted. There are at least two
+ reasons why we must not use `-m 0755':
+ - it causes special bits like SGID to be ignored,
+ - it may be too restrictive (some setups expect 775 directories).
+
+ - Fix aclocal to honor definitions located in files which have been
+ m4_included manually. aclocal 1.8 had been updated to check
+ m4_included files for new requirements, but forgot that these
+ m4_included files can also provide new definitions.
+
+ Note that if you have such a setup, we recommend you get rid of
+ it. In the past, there was a reason to m4_include files manually:
+ aclocal used to duplicate entire M4 files into aclocal.m4, even
+ files that were distributed. Some packages were therefore
+ m4_including the distributed file directly, and playing some
+ tricks to ensure aclocal would not copy that file to aclocal.m4,
+ in order to limit the amount of duplication. Since aclocal 1.8.x
+ will precisely output m4_includes for local M4 files, we recommend
+ that you clean up your setup, removing all manual m4_includes and
+ letting aclocal output them.
+
+ - Output detailed menus in the Info version if the Automake manual,
+ so that Emacs can locate the indexes.
+
+ - configure.ac and configure were listed twice in DIST_COMMON (an
+ internal variable where Automake lists configury files to
+ distribute). This was harmless, but unaesthetic.
+
+ - Use `chmod a-w' instead of `chmod -w' as the latter honors umask.
+ This was an issue only in the Automake package itself, not in
+ its output.
+
+ - Automake assumed that all AC_CONFIG_LINKS arguments had the form
+ DEST:SRC. This was wrong, as some packages do
+ AC_CONFIG_LINKS($computedlinks). This version no longer abort in
+ that situation.
+
+ - Contrary to mkinstalldirs, $(mkdir_p) was expecting exactly one
+ argument. This caused two kinds of failures:
+ - Rules installing data in a conditionally defined directory
+ failed when that directory was undefined. In this case no
+ argument was supplied.
+ - `make installdirs' failed, because several directories were
+ passed to $(mkdir_p). This was an issue only on platform
+ were $(mkdir_p) is implemented with `install-sh -d'.
+ $(mkdir_p) as been changed to accept 0 or more arguments, as
+ mkinstalldirs did.
+
+* Long-standing bugs:
+
+ - Fix an unexpected diagnostic occurring when users attempt
+ to override some internal variables that Automake appends to.
+
+ - aclocal now scans configure.ac for macro definitions (PR/319).
+
+ - Fix a portability issue with OSF1/Tru64 Make. If a directory
+ distributes files which are outside itself (this usually occurs
+ when using AC_CONFIG_AUX_DIR([../dir]) to use auxiliary files
+ from a parent package), then `make distcheck' fails due to an
+ optimization performed by OSF1/Tru64 Make in its VPATH handling.
+ (tests/subpkg2.test failure)
+
+ - Fix another portability issue with Sun and OSF1/Tru64 Make.
+ In a VPATH-build configuration, `make install' would install
+ nobase_ files to wrong locations.
+
+ - Fix a Perl `uninitialized value' diagnostic occurring when
+ automake complains that a Texinfo file does not have a
+ @setfilename statement.
+
+ - Erase config.status.lineno during `make distclean'. This file
+ can be created by config.status. Automake already knew about
+ configure.lineno, but forgot config.status.lineno.
+
+ - Distribute all files, even those which are built and installed
+ conditionally. This change affects files listed in conditionally
+ defined *_HEADERS and *_PYTHON variable (unless they are nodist_*)
+ as well as those listed in conditionally defined dist_*_DATA,
+ dist_*_JAVA, dist_*_LISP, and dist_*_SCRIPTS variables.
+
+ - Fix AM_PATH_LISPDIR to avoid \? in sed regular expressions; it
+ doesn't conform to POSIX.
+
+ - Normalize help strings for configure variables and options added
+ by Automake macros.
+
+* Anticipation:
+
+ - Check for python2.4 in AM_PATH_PYTHON.
+
+* Spurious failures in test suite:
+
+ - tests/libtool5.test, tests/ltcond.test, tests/ltcond2.test,
+ tests/ltconv.test: fix failures with CVS Libtool.
+ - tests/aclocal6.test: fix failure if autom4te.cache is disabled.
+ - tests/txinfo24.test, tests/txinfo25.test, tests/txinfo28.test:
+ fix failures with old Texinfo versions.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+New in 1.8:
+
+* Meta-News
+
+ - The NEWS file is more verbose.
+
+* Requirements
+
+ - Autoconf 2.58 or greater is required.
+
+* New features
+
+ - Default source file names in the absence of a _SOURCES declaration
+ are made by removing any target extension before appending `.c', so
+ to make the libtool module `foo.la' from `foo.c', you only need to
+ do this:
+
+ lib_LTLIBRARIES = foo.la
+ foo_la_LDFLAGS = -module
+
+ For backward compatibility, foo_la.c will be used instead of
+ foo.c if this file exists or is the explicit target of a rule.
+ However -Wobsolete will warn about this deprecated naming.
+
+ - AR's `cru' flags are now set in a global ARFLAGS variable instead
+ of being hard-coded in each $(AR) invocation, so they can be
+ substituted from configure.ac. This has been requested by people
+ dealing with non-POSIX ar implementations.
+
+ - New warning option: -Woverride. This will warn about any user
+ target or variable definitions which override Automake
+ definitions.
+
+ - Texinfo rules back up and restore info files when makeinfo fails.
+
+ - Texinfo rules now support the `html' target.
+ Running this requires Texinfo 4.0 or greater.
+
+ `html' is a new recursive target, so if your package mixes
+ hand-crafted `Makefile.in's with Automake-generated
+ `Makefile.in's, you should adjust the former to support (or
+ ignore) this target so that `make html' recurses successfully. If
+ you had a custom `html' rule in your `Makefile.am', it's better to
+ rename it as `html-local', otherwise your rule will override
+ Automake's new rule (you can check that by running `automake
+ -Woverride') and that will stop the recursion to subdirectories.
+
+ Last but not least, this `html' rule is declared PHONY, even when
+ overridden. Fortunately, it appears that few packages use a
+ non-PHONY `html' rule.
+
+ - Any file which is m4_included from configure.ac will appear as a
+ configure and Makefile.in dependency, and will be automatically
+ distributed.
+
+ - The rules for rebuilding Makefiles and Makefile.ins will now
+ rebuild all Makefiles and all Makefile.ins at once when one of
+ configure's dependencies has changed. This is considerably faster
+ than previous implementations, where config.status and automake
+ were run separately in each directory (this still happens when you
+ change a Makefile.am locally, without touching configure.ac or
+ friends). Doing this also solves a longstanding issue: these
+ rebuild rules failed to work when adding new directories to the
+ tree, forcing you to run automake manually.
+
+ - For similar reasons, the rules to rebuild configure,
+ config.status, and aclocal.m4 are now defined in all directories.
+ Note that if you were using the CONFIG_STATUS_DEPENDENCIES and
+ CONFIGURE_DEPENDENCIES (formerly undocumented) variables, you
+ should better define them in all directories. This is easily done
+ using an AC_SUBST (make sure you prefix these dependencies with
+ $(top_srcdir) since this variable will appear at different
+ levels of the build tree).
+
+ - aclocal will now use `m4_include' instead of copying local m4
+ files into aclocal.m4. (Local m4 files are those you ship with
+ your project, other files will be copied as usual.)
+
+ Because m4_included files are automatically distributed, it means
+ for most projects there is no point in EXTRA_DISTing the list of
+ m4 files which are used. (You can probably get rid of
+ m4/Makefile.am if you had one.)
+
+ - aclocal will avoid touching aclocal.m4 when possible, so that
+ Autom4te's cache isn't needlessly invalidated. This behavior can
+ be switched off with the new `--force' option.
+
+ - aclocal now uses Autoconf's --trace to detect macros which are
+ actually used and will no longer include unused macros simply
+ because they where mentioned. This was often the case for macros
+ called conditionally.
+
+ - New options no-dist and no-dist-gzip.
+
+ - compile, depcomp, elisp-comp, install-sh, mdate-sh, mkinstalldirs,
+ py-compile, and ylwrap, now all understand --version and --help.
+
+ - Automake will now recognize AC_CONFIG_LINKS so far as removing created
+ links as part of the distclean target and including source files in
+ distributions.
+
+ - AM_PATH_PYTHON now supports ACTION-IF-FOUND and ACTION-IF-NOT-FOUND
+ argument. The latter can be used to override the default behavior
+ (which is to abort).
+
+ - Automake will exit with $? = 63 on version mismatch. (So does
+ Autoconf 2.58) missing knows this, and in this case it will
+ emulate the tools as if they were absent. Because older versions
+ of Automake and Autoconf did not use this exit code, this change
+ will only be useful in projects generated with future versions of
+ these tools.
+
+ - When using AC_CONFIG_FILES with multiple input files, Automake
+ generates the first ".in" input file for which a ".am" exists.
+ (Former versions would try to use only the first input file.)
+
+ - lisp_DATA is now allowed. If you are using the empty ELCFILES
+ idiom to disable byte-compilation of lisp_LISP files, it is
+ recommended that you switch to using lisp_DATA. Note that
+ this is not strictly equivalent: lisp_DATA will install elisp
+ files even if emacs is not installed, while *_LISP do not
+ install anything unless emacs is found.
+
+ - Makefiles will prefer `mkdir -p' over mkinstalldirs if it is
+ available. This selection is achieved through the Makefile
+ variable $(mkdir_p) that is set by AM_INIT_AUTOMAKE to either
+ `mkdir -m 0755 -p --', `$(mkinstalldirs) -m 0755', or
+ `$(install_sh) -m 0755 -d'.
+
+* Obsolete features
+
+ - Because `mkdir -p' is available on most platforms, and we can use
+ `install-sh -d' when it is not, the use of the mkinstalldirs
+ script is being phased out. `automake --add-missing' no longer
+ installs it, and if you remove mkinstalldirs from your package,
+ automake will define $(mkinstalldirs) as an alias for $(mkdir_p).
+
+ Gettext 0.12.1 still requires mkinstalldirs. Fortunately
+ gettextize and autopoint will install it when needed. Automake
+ will continue to define the $(mkinstalldirs) and to distribute
+ mkinstalldirs when this script is in the source tree.
+
+ - AM_PROG_CC_STDC is now empty. The content of this macro was
+ merged in AC_PROG_CC. If your code uses $am_cv_prog_cc_stdc, you
+ should adjust it to use $ac_cv_prog_cc_stdc instead. (This
+ renaming should be safe, even if you have to support several,
+ versions of Automake, because AC_PROG_CC defines this variable
+ since Autoconf 2.54.)
+
+ - Some users where using the undocumented ACLOCAL_M4_SOURCES
+ variable to override the aclocal.m4 dependencies computed
+ (inaccurately) by older versions of Automake. Because Automake
+ now tracks configure's m4 dependencies accurately (see m4_include
+ above), the use of ACLOCAL_M4_SOURCES should be considered
+ obsolete and will be flagged as such when running `automake
+ -Wobsolete'.
+
+* Bug fixes
+
+ - Defining programs conditionally using Automake conditionals no
+ longer leads to a combinatorial explosion. The following
+ construct used to be troublesome when used with dozens of
+ conditions.
+
+ bin_PROGRAMS = a
+ if COND1
+ bin_PROGRAMS += a1
+ endif
+ if COND2
+ bin_PROGRAMS += a2
+ endif
+ if COND3
+ bin_PROGRAMS += a3
+ endif
+ ...
+
+ Likewise for _SOURCES, _LDADD, and _LIBADD variables.
+
+ - Due to implementation constraints, previous versions of Automake
+ proscribed multiple conditional definitions of some variables
+ like bin_PROGRAMS:
+
+ if COND1
+ bin_PROGRAMS = a1
+ endif
+ if COND2
+ bin_PROGRAMS = a2
+ endif
+
+ All _PROGRAMS, _LDADD, and _LIBADD variables were affected.
+ This restriction has been lifted, and these variables now
+ support multiple conditional definitions as do other variables.
+
+ - Cleanup the definitions of $(distdir) and $(top_distdir).
+ $(top_distdir) now points to the root of the distribution
+ directory created during `make dist', as it did in Automake 1.4,
+ not to the root of the build tree as it did in intervening
+ versions. Furthermore these two variables are now only defined in
+ the top level Makefile, and passed to sub-directories when running
+ `make dist'.
+
+ - The --no-force option now correctly checks the Makefile.in's
+ dependencies before deciding not to update it.
+
+ - Do not assume that make files are called Makefile in cleaning rules.
+
+ - Update .info files in the source tree, not in the build tree. This
+ is what the GNU Coding Standard recommend. Only Automake 1.7.x
+ used to update these files in the build tree (previous versions did
+ it in the source tree too), and it caused several problems, varying
+ from mere annoyance to portability issues.
+
+ - COPYING, COPYING.LIB, and COPYING.LESSER are no longer overwritten
+ when --add-missing and --force-missing are used. For backward
+ compatibility --add-missing will continue to install COPYING (in
+ `gnu' strictness) when none of these three files exist, but this
+ use is deprecated: you should better choose a license yourself and
+ install it once for all in your source tree (and in your code
+ management system).
+
+ - Fix ylwrap so that it does not overwrite header files that haven't
+ changed, as the inline rule already does.
+
+ - User-defined rules override automake-defined rules for the same
+ targets, even when rules do not have commands. This is not new
+ (and was documented), however some of the automake-generated
+ rules have escaped this principle in former Automake versions.
+ Rules for the following targets are affected by this fix:
+
+ clean, clean-am, dist-all, distclean, distclean-am, dvi, dvi-am,
+ info, info-am, install-data-am, install-exec-am, install-info,
+ install-info-am, install-man, installcheck-am, maintainer-clean,
+ maintainer-clean-am, mostlyclean, mostlyclean-am, pdf, pdf-am,
+ ps, ps-am, uninstall-am, uninstall-info, uninstall-man
+
+ Practically it means that an attempt to supplement the dependencies
+ of some target, as in
+
+ clean: my-clean-rule
+
+ will now *silently override* the automake definition of the
+ rule for this target. Running `automake -Woverride' will diagnose
+ all such overriding definitions.
+
+ It should be noted that almost all of these targets support a *-local
+ variant that is meant to supplement the automake-defined rule
+ (See node `Extending' in the manual). The above rule should
+ be rewritten as
+
+ clean-local: my-clean-rule
+
+ These *-local targets have been documented since at least
+ Automake 1.2, so you should not fear the change if you have
+ to support multiple automake versions.
+
+* Miscellaneous
+
+ - The Automake manual is now distributed under the terms of the GNU FDL.
+
+ - Targets dist-gzip, dist-bzip2, dist-tarZ, dist-zip are always defined.
+
+ - core dumps are no longer removed by the cleaning rules. There are
+ at least three reasons for this:
+ 1. These files should not be created by any build step,
+ so their removal do not fit any of the cleaning rules.
+ Actually, they may be precious to the developer.
+ 2. If such file is created during a build, then it's clearly a
+ bug Automake should not hide. Not removing the file will
+ cause `make distcheck' to complain about its presence.
+ 3. Operating systems have different naming conventions for
+ core dump files. A core file on one system might be a
+ completely legitimate data file on another system.
+
+ - RUNTESTFLAGS, CTAGSFLAGS, ETAGSFLAGS, JAVACFLAGS are no longer
+ defined by Automake. This means that any definition in the
+ environment will be used, unless overridden in the Makefile.am or
+ on the command line. The old behavior, where these variables were
+ defined empty in each Makefile, can be obtained by AC_SUBSTing or
+ AC_ARG_VARing each variable from configure.ac.
+
+ - CONFIGURE_DEPENDENCIES and CONFIG_STATUS_DEPENDENCIES are now
+ documented. (The is not a new feature, these variables have
+ been there since at least Automake 1.4.)
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Bugs fixed in 1.7.9:
+* Fix install-strip to work with nobase_ binaries.
+* Fix renaming of #line directives in ylwrap.
+* Rebuild with Autoconf 2.59. (1.7.8 was not installable with pdksh.)
+
+Bugs fixed in 1.7.8:
+* Remove spurious blank lines in cleaning rules introduced in 1.7.7.
+* Fix detection of Debian's install-info, broken since version 1.5.
+ (Debian bug #213524).
+* Honor -module if it appears in AM_LDFLAGS (i.e., relax name checking)
+ This was only done for libfoo_LDFLAGS and LDFLAGS in previous versions.
+
+Bugs fixed in 1.7.7:
+* The implementation of automake's --no-force option is unreliable,
+ so this option is ignored in this version. A real fix will appear in
+ Automake 1.8. (Debian Bug #206299)
+* AM_PATH_PYTHON: really check the whole list of interpreters if no
+ argument is given. (PR/399)
+* Do not warn about leading `_' in variable names, even with -Wportability.
+* Support user redefinitions of TEXINFO_TEX.
+* depcomp: support AIX Compiler version 6.
+* Fix missing rebuilds during `make dist' with BSD make.
+ (Could produce tarballs containing out-of-date files.)
+* Resurrect multilib support.
+* Noteworthy manual updates:
+ - Extending aclocal: how to write m4 macros that won't trigger warnings
+ with Automake 1.8.
+ - A Shared Library: Rewrite and split into subsections.
+
+Bugs fixed in 1.7.6:
+* Fix depcomp's icc mode for ICC 7.1.
+* Diagnose calls to AC_CONFIG_FILES and friends with not enough arguments.
+* Fix maintainer-clean's removal of autom4te.cache in VPATH builds.
+* Fix AM_PATH_LISPDIR to work with POSIXLY_CORRECT=1.
+* Fix the location reported in some diagnostics related to AUTOMAKE_OPTIONS.
+* Remove Latin-1 characters from elisp-comp.
+* Update the manual's @dircategory to match the Free Software Directory.
+
+Bugs fixed in 1.7.5:
+* Update install-sh's license to remove an advertising clause.
+ (Debian bug #191717)
+* Fix a bug introduced in 1.7.4, related to BUILT_SOURCE handling,
+ that caused invalid Makefile.ins to be generated.
+* Make sure AM_MAKE_INCLUDE doesn't fail when a `doit' file exists.
+* New FAQ entry: renamed objects.
+
+Bugs fixed in 1.7.4:
+* Tweak the TAGS rule to support Exuberant Ctags (in addition to
+ the Emacs implementation)
+* Fix output of aclocal.m4 dependencies in subdirectories.
+* Use `mv -f' instead of `mv' in fastdep rules.
+* Upgrade mdate-sh to work on OS/2.
+* Don't byte-compile elisp files when ELCFILES is set empty.
+ (this documented feature was broken by 1.7.3)
+* Diagnose trailing backslashes on last line of Makefile.am.
+* Diagnose whitespace following trailing backslashes.
+* Multiple tests are now correctly supported in DEJATOOL. (PR/388)
+* Fix rebuilt rules for AC_CONFIG_FILES([Makefile:Makefile.in:Makefile.bot])
+ Makefiles. (PR/389)
+* `make install' will build `BUILT_SOURCES' first.
+* Minor documentation fixes.
+
+Bugs fixed in 1.7.3:
+* Fix stamp files numbering (when using multiple AC_CONFIG_HEADERS).
+* Query distutils for `pythondir' and `pythonexecdir', instead of
+ using an hardcoded path. This should allow builds on 64-bit
+ distributions that usually use lib64/ instead of lib/.
+* AM_PATH_PYTHON will also search for python2.3.
+* elisp files are now built all at once instead of one by one. Besides
+ incurring a speed-up, this is required to support interdependent elisp files.
+* Support for DJGPP:
+ - `make distcheck' will now work in `_inst/' and `_build' instead
+ of `=inst/' and `=build/'
+ - use `_dirstamp' when the file-system doesn't support `.dirstamp'
+ - install/uninstall `*.i[0-9][0-9]'-style info files
+ - more changes that affect only the Automake package (not its output)
+* Fix some incompatibilities with upcoming perl-5.10.
+* Properly quote AC_PACKAGE_TARNAME and AC_PACKAGE_VERSION when defining
+ PACKAGE and VERSION.
+* depcomp fixes:
+ - dashmstdout and dashXmstdout modes: don't use `-o /dev/null', this
+ is troublesome with gcc and Solaris compilers. (PR/385)
+ - makedepend mode: work with Libtool. (PR/385 too)
+ - support for ICC.
+* better support for unusual gettext setups, such as multiple po/ directories
+ (PR/381):
+ - Flag missing po/ and intl/ directories as warnings, not errors.
+ - Disable these warnings if po/ does not exist.
+* Noteworthy manual updates:
+ - New FAQ chapter.
+ - Document how AC_CONFIG_AUX_DIR interacts with missing files.
+ (Debian Bug #39542)
+ - Document `AM_YFLAGS = -d'. (PR/382)
+
+Bugs fixed in 1.7.2:
+* Fix installation and uninstallation of Info files built in subdirectories.
+* Do not run `./configure --with-included-gettext' during `make distcheck'
+ if AM_GNU_GETTEXT([external]) is used.
+* Correctly uninstall renamed man pages.
+* Do not strip escaped newline in variables defined in one condition
+ and augmented in another condition.
+* Fix ansi2knr rules for LIBOBJS sources.
+* Clean all known Texinfo index files, not only those which appear to
+ be used, because we cannot know which indexes are used in included files.
+ (PR/375, Debian Bug #168671)
+* Honor only the first @setfilename seen in a Texinfo file.
+* Treat "required file X not found" diagnostics as errors (exit status 1).
+* Don't complain that a required file is not found when it is a Makefile
+ target. (PR/357)
+* Don't use single suffix inference rules when building `.info'-less
+ Info files, for the sake of Solaris make.
+* The `check' target now depends on `$(BUILT_SOURCES)'. (PR/359)
+* Recognize multiple inference rules such as `.a.b .c.d:'. (PR/371)
+* Warn about multiple inference rules when -Wportability is used. (PR/372)
+* Fix building of deansified files from subdirectories. (PR/370)
+* Add missing `fi' in the .c->.obj rules.
+* Improve install-sh to work even when names contain spaces or certain
+ (but not all) shell metachars.
+* Fix the following spurious failures in the test suite:
+ depcomp2.test, gnits2.test, gnits3.test, python3.test, texinfo13.test
+* Noteworthy manual updates:
+ - Augment the section about BUILT_SOURCES.
+ - Mention that AM_PROG_CC_STDC is a relic that is better avoided today.
+
+Bugs fixed in 1.7.1:
+* Honor `ansi2knr' for files built in subdirectories, or using per-targets
+ flags.
+* Aclocal should now recognize macro names containing parentheses, e.g.
+ AC_DEFUN([AC_LANG_PREPROC(Fortran 90)], [...]).
+* Erase *.sum and *.log files created by DejaGnu, during `make distclean'.
+ (Debian Bug#153697)
+* Install Python files even if they were built. (PR/369)
+* Have stamp-vti dependent upon configure instead of configure.ac, as the
+ version might not be defined in the latter. (PR/358)
+* Reorder arguments passed to a couple of commands, so things works
+ when POSIXLY_CORRECT=1.
+* Fix a regex that can cause Perl to segfault on large input.
+ (Debian Bug#162583)
+* Fix distribution of packages that have some sources defined conditionally,
+ as in the `Conditional compilation using Automake conditionals' example
+ of the manual.
+* Fix spurious test suite failures on IRIX.
+* Don't report a required variable as undefined if it has been
+ defined conditionally for the "right" conditions.
+* Fix cleaning of the /tmp subdirectory used by `make distcheck', in case
+ `make distcheck' fails.
+* Fix distribution of included Makefile fragment, so we don't create
+ spurious directories in the distribution. (PR/366)
+* Don't complain that a target lacks `.$(EXEEXT)' when it has it.
+
+New in 1.7:
+* Autoconf 2.54 is required.
+* `aclocal' and `automake' will no longer warn about obsolete
+ configure macros. This is done by `autoconf -Wobsolete'.
+* AM_CONFIG_HEADER, AM_SYS_POSIX_TERMIOS and
+ AM_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL are obsolete (although still
+ supported). You should use AC_CONFIG_HEADERS, AC_SYS_POSIX_TERMIOS,
+ and AC_HEADER_TIOCGWINSZ instead. `autoupdate' can upgrade
+ `configure.ac' for you.
+* Support for per-program and per-library `_CPPFLAGS'.
+* New `ctags' target (builds CTAGS files).
+* Support for -Wmumble and -Wno-mumble, where mumble is a warning category
+ (see `automake --help' or the manual for a list of them).
+* Honor the WARNINGS environment variable.
+* Omit the call to depcomp when using gcc3: call the compiler directly.
+* A new option, std-options, tests that programs support --help and --version
+ when `make installcheck' is run. This is enabled by --gnits.
+* Texinfo rules now support the `ps' and `pdf' targets.
+* Info files are now created in the build directory, not the source directory.
+* info_TEXINFOS supports files in subdirectories (this requires Texinfo 4.1
+ or greater).
+* `make distcheck' will enforce DESTDIR support by attempting
+ a DESTDIR install.
+* `+=' can be used in conditionals, even if the augmented variable
+ was defined for another condition.
+* Makefile fragments (inserted with `include') are always distributed.
+* Use Autoconf's --trace interface to inspect configure.ac and get
+ a more accurate view of it.
+* Add support for extending aclocal's default macro search path
+ using a `dirlist' file within the aclocal directory.
+* automake --output-dir is deprecated.
+* The part of the distcheck target that checks whether uninstall actually
+ removes all installed files has been moved in a separate target,
+ distuninstallcheck, so it can be overridden easily.
+* Many bug fixes.
+
+New in 1.6.3:
+* Support for AM_INIT_GETTEXT([external])
+* Bug fixes, including:
+ - Fix Automake's own `make install' so it works even if `ln' doesn't.
+ - nobase_ programs and scripts honor --program-transform correctly.
+ - Erase configure.lineno during `make distclean'.
+ - Erase YACC and LEX outputs during `make maintainer-clean'.
+
+New in 1.6.2:
+* Many bug fixes, including:
+ - Requiring the current version works.
+ - Fix "$@" portability issues (for Zsh).
+ - Fix output of dummy dependency files in presence of post-processed
+ Makefile.in's.
+ - Don't compute dependencies in background to avoid races with libtool.
+ - Fix handling of _OBJECTS variables for targets sharing source variables.
+ - Check dependency mode for Java when AM_PROG_GCJ is used.
+
+New in 1.6.1:
+* automake --output-dir is deprecated
+* Many bug fixes, including:
+ - Don't choke on AM_LDFLAGS definitions.
+ - Clean libtool objects from subdirectories.
+ - Allow configure variables with reserved suffix and unknown prefix
+ (e.g. AC_SUBST(mumble_LDFLAGS) when 'mumble' is not a target).
+ - Fix the definition of AUTOMAKE and ACLOCAL in configure.
+
+New in 1.6:
+* Autoconf 2.52 is required.
+* automake no longer run libtoolize.
+ This is the job of autoreconf (from GNU Autoconf).
+* `dist' generates all the archive flavors, as did `dist-all'.
+* `dist-gzip' generates the Gzip tar file only.
+* Combining Automake Makefile conditionals no longer lead to a combinatorial
+ explosion. Makefile.in's keep a reasonable size.
+* AM_FUNC_ERROR_AT_LINE, AM_FUNC_STRTOD, AM_FUNC_OBSTACK, AM_PTRDIFF_T
+ are no longer shipped, since Autoconf 2.52 provides them (both as AM_
+ and AC_).
+* `#line' of Lex and Yacc files are properly set.
+* EXTRA_DIST can contain generated directories.
+* Support for dot-less extensions in suffix rules.
+* The part of the distcheck target that checks whether distclean actually
+ cleans all built files has been moved in a separate target, distcleancheck,
+ so it can be overridden easily.
+* `make distcheck' will pass additional options defined in
+ $(DISTCHECK_CONFIGURE_FLAGS) to configure.
+* Fixed CDPATH portability problems, in particular for MacOS X.
+* Fixed handling of nobase_ targets.
+* Fixed support of implicit rules leading to .lo objects.
+* Fixed late inclusion of --add-missing files (e.g. depcomp) in DIST_COMMON
+* Added uninstall-hook target
+* `AC_INIT AM_INIT_AUTOMAKE(tarname,version)' is an obsolete construct.
+ You can now use `AC_INIT(pkgname,version) AM_INIT_AUTOMAKE' instead.
+ (Note that "pkgname" is not "tarname", see the manual for details.)
+ It is also possible to pass a list of global Automake options as
+ first argument to this new form of AM_INIT_AUTOMAKE.
+* Compiler-based assembler is now called `CCAS'; people expected `AS'
+ to be a real assembler.
+* AM_INIT_AUTOMAKE will set STRIP itself when it needs it. Adding
+ AC_CHECK_TOOL([STRIP], [strip]) manually is no longer required.
+* aclocal and automake are also installed with the version number
+ appended, and some of the install directory names have changed.
+ This lets you have multiple versions installed simultaneously.
+* Support for parsers and lexers in subdirectories.
+
+New in 1.5:
+* Support for `configure.ac'.
+* Support for `else COND', `endif COND' and negated conditions `!COND'.
+* `make dist-all' is much faster.
+* Allows '@' AC_SUBSTs in macro names.
+* Faster AM_INIT_AUTOMAKE (requires update of `missing' script)
+* User-side dependency tracking. Developers no longer need GNU make
+* Python support
+* Uses DIST_SUBDIRS in some situations when SUBDIRS is conditional
+* Most files are correctly handled if they appear in subdirs
+ For instance, a _DATA file can appear in a subdir
+* GNU tar is no longer required for `make dist'
+* Added support for `dist_' and `nodist_' prefixes
+* Added support for `nobase_' prefix
+* Compiled Java support
+* Support for per-executable and per-library compilation flags
+* Many bug fixes
+
+New in 1.4:
+* Added support for the Fortran 77 programming language.
+* Re-indexed the Automake Texinfo manual.
+* Added `AM_FOOFLAGS' variable for each compiler invocation;
+ e.g. AM_CFLAGS can be used in Makefile.am to set C compiler flags
+* Support for latest autoconf, including support for objext
+* Can now put `.' in SUBDIRS to control build order
+* `include' command and `+=' support for macro assignment
+* Dependency tracking no long susceptible to deleted header file problem
+* Maintainer mode now a conditional. @MAINT@ is now an anachronism.
+* Bug fixes
+
+New in 1.3:
+* Bug fixes
+* Better Cygwin32 support
+* Support for suffix rules with _SOURCES variables
+* New options `readme-alpha' and `check-news'; Gnits mode sets these
+* @LEXLIB@ no longer required when lex source seen
+ Lex support in `missing', and new lex macro. Update your missing script.
+* Built-in support for assembly
+* aclocal gives error if `AM_' macro not found
+* Passed YFLAGS, not YACCFLAGS, to yacc
+* AM_PROG_CC_STDC does not have to come before AC_PROG_CPP
+* Dependencies computed as a side effect of compilation
+* Preliminary support for Java
+* DESTDIR support at "make install" time
+* Improved ansi2knr support; you must use the latest ansi2knr.c (included)
+
+New in 1.2:
+* Bug fixes
+* Better DejaGnu support
+* Added no-installinfo option
+* Added Emacs Lisp support
+* Added --no-force option
+* Included `aclocal' program
+* Automake will now generate rules to regenerate aclocal.m4, if appropriate
+* Now uses `AM_' macro names everywhere
+* ansi2knr option can have directory prefix (eg `../lib/ansi2knr')
+ ansi2knr now works correctly on K&R sources
+* Better C++, yacc, lex support
+* Will compute _DEPENDENCIES variables automatically if not supplied
+* Will interpolate $(...) and ${...} when examining contents of a variable
+* .deps files now in build directory, not source directory; dependency
+ handling generally rewritten
+* DATA, MANS and BUILT_SOURCES no longer included in distribution
+* can now put config.h into a subdir
+* Added dist-all target
+* Support for install-info program (see texinfo 3.9)
+* Support for "yacc -d"
+* configure substitutions are automatically discovered and included
+ in generated Makefile.in
+* Special --cygnus mode
+* OMIT_DEPENDENCIES can now hold list of dependencies to be omitted
+ when making distribution. Some dependencies are auto-ignored.
+* Changed how libraries are specified in _LIBRARIES variable
+* Full libtool support, from Gord Matzigkeit
+* No longer have to explicitly touch stamp-h when using AC_CONFIG_HEADER;
+ AM_CONFIG_HEADER handles it automatically
+* Texinfo output files no longer need .info extension
+* Added `missing' support
+* Cygwin32 support
+* Conditionals in Makefile.am, from Ian Taylor
+
+New in 1.0:
+* Bug fixes
+* distcheck target runs install and installcheck targets
+* Added preliminary support for DejaGnu.
+
+New in 0.33:
+* More bug fixes
+* More checking
+* More libtool fixes from Gord Matzigkeit; libtool support is still
+ preliminary however
+* Added support for jm_MAINTAINER_MODE
+* dist-zip support
+* New "distcheck" target
+
+New in 0.32:
+* Many bug fixes
+* mkinstalldirs and mdate-sh now appear in directory specified by
+ AC_CONFIG_AUX_DIR.
+* Removed DIST_SUBDIRS, DIST_OTHER
+* AC_ARG_PROGRAM only required when an actual program exists
+* dist-hook target now run before distribution packaged up; idea from
+ Dieter Baron. Other hooks exist, too.
+* Preliminary (unfinished) support for libtool
+* Added short option names.
+* Better "dist" support when gluing together multiple packages
+
+New in 0.31:
+* Bug fixes
+* Documentation updates (many from François Pinard)
+* strictness `normal' now renamed to `foreign'
+* Renamed --install-missing to --add-missing
+* Now handles AC_CONFIG_AUX_DIR
+* Now handles TESTS macro
+* DIST_OTHER renamed to EXTRA_DIST
+* DIST_SUBDIRS is deprecated
+* @ALLOCA@ and @LIBOBJS@ now work in _LDADD variables
+* Better error messages in many cases
+* Program names are canonicalized
+* Added "check" prefix; from Gord Matzigkeit
+
+New in 0.30:
+* Bug fixes
+* configure.in scanner knows about AC_PATH_XTRA, AC_OUTPUT ":" syntax
+* Beginnings of a test suite
+* Automatically adds -I options for $(srcdir), ".", and path to config.h
+* Doesn't print anything when running
+* Beginnings of MAINT_CHARSET support
+* Can specify version in AUTOMAKE_OPTIONS
+* Most errors recognizable by Emacs' M-x next-error
+* Added --verbose option
+* All "primary" variables now obsolete; use EXTRA_PRIMARY to supply
+ configure-generated names
+* Required macros now distributed in aclocal.m4
+* New documentation
+* --strictness=gnu is default
+
+New in 0.29:
+* Many bug fixes
+* More sophisticated configure.in scanning; now understands ALLOCA and
+ LIBOBJS directly, handles AC_CONFIG_HEADER more precisely, etc.
+* TEXINFOS and MANS now obsolete; use info_TEXINFOS and man_MANS instead.
+* CONFIG_HEADER variable now obsolete
+* Can handle multiple Texinfo sources
+* Allow hierarchies deeper than 2. From Gord Matzigkeit.
+* HEADERS variable no longer needed; now can put .h files directly into
+ foo_SOURCES variable.
+* Automake automatically rebuilds files listed in AC_OUTPUT. The
+ corresponding ".in" files are included in the distribution.
+
+New in 0.28:
+* Added --gnu and --gnits options
+* More standards checking
+* Bug fixes
+* Cleaned up 'dist' targets
+* Added AUTOMAKE_OPTIONS variable and several options
+* Now scans configure.in to get some information (preliminary)
+
+New in 0.27:
+* Works with Perl 4 again
+
+New in 0.26:
+* Added --install-missing option.
+* Pretty-prints generated macros and rules
+* Comments in Makefile.am are placed more intelligently in Makefile.in
+* Generates .PHONY target
+* Rule or macro in Makefile.am now overrides contents of Automake file
+* Substantial cleanups from François Pinard
+
+New in 0.25:
+* Bug fixes.
+* Works with Perl 4 again.
+
+New in 0.24:
+* New uniform naming scheme.
+* --strictness option
+* Works with Perl 5
+* '.c' files corresponding to '.y' or '.l' files are automatically
+ distributed.
+* Many bug fixes and cleanups
+
+New in 0.23:
+* Allow objects to be conditionally included in libraries via lib_LIBADD.
+
+New in 0.22:
+* Bug fixes in 'clean' code.
+* Now generates 'installdirs' target.
+* man page installation reworked.
+* 'make dist' no longer re-creates all Makefile.in's.
+
+New in 0.21:
+* Reimplemented in Perl
+* Added --amdir option (for debugging)
+* Texinfo support cleaned up.
+* Automatic de-ANSI-fication cleaned up.
+* Cleaned up 'clean' targets.
+
+New in 0.20:
+* Automatic dependency tracking
+* More documentation
+* New variables DATA and PACKAGEDATA
+* SCRIPTS installed using $(INSTALL_SCRIPT)
+* No longer uses double-colon rules
+* Bug fixes
+* Changes in advance of internationalization
+
+-----
+
+Copyright (C) 1995-2017 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 <https://www.gnu.org/licenses/>.
diff --git a/PLANS/README b/PLANS/README
new file mode 100644
index 000000000..87cb8dc36
--- /dev/null
+++ b/PLANS/README
@@ -0,0 +1,25 @@
+"Plans" for future or on-going Automake development.
+
+The contents is meant to help ensure a more controlled and smooth
+development and evolution for Automake, in several ways.
+
+ - Having the plans clearly spelled out should will avoid messy
+ roadmaps with no clear way forward or with muddy or ill-defined
+ aims or purposes; a trap this is too easy to fall into.
+
+ - Keeping planned changes cooking and re-hashed for a while should
+ ensure rough edges are smoothed up, transitions are planned in a
+ proper way (hopefully avoiding debacles like the AM_MKDIR_PROG_P
+ deprecation and the AM_CONFIG_HEADER too-abrupt removal), and
+ "power users" have more chances of getting informed in due time,
+ thus having all the time to prepare for the changes or raise
+ objections against them.
+
+ - Having the plans clearly stated and registered in a "centralized"
+ location should make it more difficult to them to slip through
+ the cracks, getting forgotten or (worse) only half-implemented.
+
+ - Even for discussions and plans registered on the Bug Tracker
+ as well, a corresponding entry in the PLANS directory can help
+ in keeping main ideas summarized, and consensus and/or objections
+ registered and easily compared.
diff --git a/PLANS/obsolete-removed/am-prog-mkdir-p.txt b/PLANS/obsolete-removed/am-prog-mkdir-p.txt
new file mode 100644
index 000000000..c18f94571
--- /dev/null
+++ b/PLANS/obsolete-removed/am-prog-mkdir-p.txt
@@ -0,0 +1,62 @@
+The macro AM_PROG_MKDIR_P is no longer going to be removed from Automake.
+Let's see a bit of history to understand why.
+
+I had already scheduled the removal of the long-deprecated AM_PROG_MKDR_P
+macro (superseded by the Autoconf-provided one AC_PROG_MKDIR_P) for
+Automake 1.13 -- see commit 'v1.12-20-g8a1c64f'.
+
+Alas, it turned out the latest Gettext version at the time (0.18.1.1) was
+still using that macro:
+
+ <https://lists.gnu.org/archive/html/automake/2012-09/msg00010.html>
+
+And since the maintenance of Gettext was stalled, I couldn't get a fix
+committed and released in time for the appearance of Automake 1.13:
+
+ <https://lists.gnu.org/archive/html/bug-gettext/2012-04/msg00018.html>
+ <https://lists.gnu.org/archive/html/bug-gettext/2012-06/msg00012.html>
+ <https://lists.gnu.org/archive/html/bug-gettext/2012-10/msg00001.html>
+
+So, on strong advice by Jim Meyering, in commit 'v1.12.4-158-gdf23daf'
+I re-introduced AM_PROG_MKDIR_P in Automake (thanks to Jim for having
+convinced me to do so in time!)
+
+But then, Gettext (as said, the greatest "offender" in the use of
+AM_PROG_MKDIR_P), in its latest release 0.18.2, finally removed all the
+uses of that macro still present in its code base. Yay. So I thought
+we could finally and quite safely remove AM_PROG_MKDIR_P in Automake 1.14;
+and I proceeded to do so, see commit 'v1.13-30-gd01834b' and the merge
+commit 'v1.13-5-gb373ad9'. Well, it turned out I was wrong, again, and
+in a trickier and sublter way this time. Let's see the details.
+
+If a package's 'configure.ac' contains a call like:
+
+ AM_GNU_GETTEXT_VERSION([0.18])
+
+then the 'autopoint' script will bring the data files from the Gettext
+release *1.18* into the package's tree -- yes, even even if the developer
+has installed *and is using* Gettext 1.18.2! Now, these data files
+comprise m4 files (that will be seen by subsequent aclocal and autoconf
+calls), and of course, the pre-0.18.2 version of some of these files
+still contains occurrences of AM_PROG_MKDIR_P -- so Automake 1.13 errors
+out, and we lose. That already happened in practice:
+
+ <https://lists.gnu.org/archive/html/bug-grep/2013-01/msg00003.html>
+
+Moreover, while I might see it as not unreasonable to ask a developer
+using Automake 2.0 to also update Gettext to 1.18.2, that would not
+be enough; in order for gettext to use the correct data files, that
+developer would have to update his configure.ac to read:
+
+ AM_GNU_GETTEXT_VERSION([0.18.2])
+
+thus requiring *all* of his co-developers to install Gettext 1.18.2,
+even if they are still using, say, Automake 1.13 or 1.14. Bad.
+
+So I decided to re-instate this macro as a simple alias for AC_PROG_MKDIR_P
+(plus a non-fatal runtime warning in the 'obsolete' category), and drop
+any plan to remove it (see how much good those plans have done us so far).
+See commit v1.13.1-109-g030ecb4.
+
+Similarly, the obsolete '@mkdir_p@' substitution and '$(mkdir_p)' make
+variable are still supported, as simple aliases to '$(MKDIR_P)'.
diff --git a/PLANS/obsolete-removed/configure.in.txt b/PLANS/obsolete-removed/configure.in.txt
new file mode 100644
index 000000000..d3f6da795
--- /dev/null
+++ b/PLANS/obsolete-removed/configure.in.txt
@@ -0,0 +1,28 @@
+In Automake 1.13.x (once planned, then dropped)
+-----------------------------------------------
+
+We are already warning about 'configure.in' used as the name for the
+Autoconf input file ('configure.ac' should be used instead); we've
+been doing that since Automake 1.12.4.
+
+We had scheduled to remove support for it altogether in Automake 1.13
+(and announced that in our NEWS file), because we thought that Autoconf
+too would have started deprecating it by the time our 1.13 release was
+done. Alas, this hasn't been the case: the deprecation code is only
+present in the development version of autoconf so far (scheduled to
+become Autoconf 2.70). So ...
+
+
+For Automake 2.0
+----------------
+
+... we have decided to wait until 2.70 is out before really removing
+'configure.in' support. Since we plan to require Autoconf 2.70 in
+Automake 2.0 (so that we can remove the hacky code emulating
+AC_CONFIG_MACRO_DIRS for older autoconf versions), we are quite sure
+that Autoconf will actually have started deprecating 'configure.in'
+by the time Automake 2.0 is released.
+
+Note that the removal of 'configure.in' has already been implemented
+in our 'master' branch (from where the 2.0 release will be finally
+cut); see commits 'v1.13-17-gbff57c8' and 'v1.13-21-g7626e63'.
diff --git a/PLANS/rm-f-without-args.txt b/PLANS/rm-f-without-args.txt
new file mode 100644
index 000000000..b940fc3e9
--- /dev/null
+++ b/PLANS/rm-f-without-args.txt
@@ -0,0 +1,40 @@
+Summary
+-------
+
+POSIX will say in a future version that calling "rm -f" with no argument
+is OK; and this sensible behaviour seem to be already very widespread in
+"the wild" (and possibly lacking only on those systems that are well on
+their way to obsolescence).
+
+Se we'd like to simplify several automake-generated "cleaning" rules
+accordingly, to get rid of the awful idiom:
+
+ test -z "$(VAR)" || rm -f $(VAR)
+
+See automake bug#10828.
+
+For Automake 1.14 (DONE)
+------------------------
+
+Add a temporary "probe check" in AM_INIT_AUTOMAKE that verifies that
+the no-args "rm -f" usage is supported on the system configure is
+being run on; complain loudly if this is not the case, and tell the
+user to report the situation to us.
+
+For Automake 2.0
+----------------
+
+Make any failure in the configure-time probe check introduced by the
+previous point fatal; and in case of failure, also suggest to the user
+to install an older version of GNU coreutils to work around the
+limitation of his system (this version should be old enough not to
+be bootstrapped with Automake 2.0, otherwise the user will face a
+bootstrapping catch-22).
+
+In all our recipes, start assuming "rm -f" with no argument is OK;
+simplify and de-uglify the recipes accordingly.
+
+For Automake 3.0
+----------------
+
+Remove the runtime probe altogether.
diff --git a/PLANS/subdir-objects.txt b/PLANS/subdir-objects.txt
new file mode 100644
index 000000000..c6a046f52
--- /dev/null
+++ b/PLANS/subdir-objects.txt
@@ -0,0 +1,67 @@
+Summary
+-------
+
+We want to make the behaviour currently enabled by the 'subdir-objects'
+the default one, and in fact the *only* one, in Automake 2.0.
+See automake bug#13378: <https://debbugs.gnu.org/13378>.
+
+Details
+-------
+
+The fact that Automake-generated Makefiles place compiled object files in
+the current directory by default, also when the corresponding source file
+is in a subdirectory, is basically an historical accident, due to the fact
+that the 'subdir-objects' option had only been introduced in April 1999,
+starting with commit 'user-dep-gen-branchpoint-56-g88b5959', and never
+made the default (likely to avoid backwards-compatibility issues).
+
+Since I believe the behaviour enabled by the 'subdir-objects' is the most
+useful one, and in fact the *only* natural one, I'd like to make it the
+only one available, simplifying the Automake implementation and APIs a
+little in the process.
+
+Alas, since this also means changing the default behaviour of Automake
+('subdir-objects' is not enabled by default, sadly), this means the
+transition path will be less smooth than I'd like.
+
+DONE for automake 1.13.2
+------------------------
+
+The bug spotted by Nick Bowler:
+
+ <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=13378#35>
+ <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=13378#44>
+
+and exposed in test case 't/ccnoco4.sh' has been fixed (see commit
+v1.13.1-56-g34001a9). The bug was due to the fact that Automake-generated
+C compilation rules mistakenly passed the "-c -o" options combination
+unconditionally (even to losing compiler) when the 'subdir-objects' was
+used but sources were only present in the top-level directory.
+
+DONE for automake 1.14
+----------------------
+
+We give a warning in the category 'unsupported' if the 'subdir-objects'
+option is not specified. This should give the users enough forewarning
+about the planned change, and give them time to update their packages
+to the new semantic.
+
+We also make sure to avoid the warning when it would be irrelevant, i.e.,
+if all source files sit in "current" directory (thanks to Peter Johansson
+for suggesting this).
+
+For automake 1.16 (*before* 2.0 can be released)
+------------------------------------------------
+
+Submit the pending patch series that fixes https://debbugs.gnu.org/13928
+
+For automake 2.0
+----------------
+
+Make the behaviour once activated by the 'subdir-object' option mandatory.
+With that change, we'll drop support for the "old" behaviour of having
+object files derived from sources in a subdirectory being placed in the
+current directory rather than in that same subdirectory.
+
+Still keep the 'subdir-objects' option supported (as a simple no-op
+now), to save useless churn in our user's build systems.
diff --git a/PLANS/texi/drop-split-info-files.txt b/PLANS/texi/drop-split-info-files.txt
new file mode 100644
index 000000000..f13a32419
--- /dev/null
+++ b/PLANS/texi/drop-split-info-files.txt
@@ -0,0 +1,27 @@
+For in Automake 2.0 (DONE)
+--------------------------
+
+We will drop split info files in Automake 2.0.
+See automake bug#13351: <https://debbugs.gnu.org/13351>.
+
+Basically, it has been confirmed that the original reason behind
+the existence of split info files was indeed "efficiency,
+especially memory size":
+<https://lists.gnu.org/archive/html/texinfo-devel/2012-08/msg00024.html>
+
+So split info files have lost their reason d'etre on modern systems
+(where even Emacs has become a lightweight program ;-). And you are
+not using an embedded system to read Info documentation, right?
+
+In addition, it appears that the use of split info files (at least
+the way Automake-generated rules have been handling them for a long
+time) can cause real problems in some (admittedly quite corner-case)
+situations; see automake bug#12320: <https://debbugs.gnu.org/12320>.
+
+This change should be completely transparent to the developer (no
+adjustments needed to be made to Makefile.am or other parts of the
+build system). In case some CI system or overly picky build script
+used to rely on that feature, they'll have to be adjusted; but that
+is expected to be a rare occurrence, and thus a price worth pay for
+the nice simplifications and the fixlets this planned change will
+offer us.
diff --git a/PLANS/texi/warnings-for-automake-ng-compatibility.txt b/PLANS/texi/warnings-for-automake-ng-compatibility.txt
new file mode 100644
index 000000000..aca46b4a2
--- /dev/null
+++ b/PLANS/texi/warnings-for-automake-ng-compatibility.txt
@@ -0,0 +1,21 @@
+Done in automake 1.13.2:
+------------------------
+
+I have discouraged the use of '.txi' and '.texinfo' suffixes for
+Texinfo inputs (see commit 'v1.13.1-6-ge1ed314') and the generation
+of suffix-less info files (commit 'v1.13.1-4-g2af418d').
+
+This is done to ease transition to Automake-NG (see commits
+'v1.12.1-416-gd5459b9' and 'v1.12.1-392-ga0c7b6a' there), and
+(to a lesser degree) to discourage use of seldom-tested setups.
+
+
+The Future:
+-----------
+
+I have no plans to do the further step of removing support for those
+usages in future Automake versions. That would be a gratuitous
+incompatibility (in Automake-NG, they have been useful because have
+allowed further refactorings and improvements, but those were
+based on GNU make features, and as such have no place in mainline
+Automake).
diff --git a/README b/README
new file mode 100644
index 000000000..b71266907
--- /dev/null
+++ b/README
@@ -0,0 +1,68 @@
+This is Automake, a Makefile generator. It aims to be portable and
+to conform to the GNU Coding Standards for Makefile variables and
+targets.
+
+See the INSTALL file for detailed information about how to configure
+and install Automake.
+
+Automake is a Perl script. The input files are called Makefile.am.
+The output files are called Makefile.in; they are intended for use
+with Autoconf. Automake requires certain things to be done in your
+configure.ac.
+
+Automake comes with extensive documentation; please refer to it for
+more details about its purpose, features, and usage patterns.
+
+This package also includes the "aclocal" program, whose purpose is
+to generate an 'aclocal.m4' based on the contents of 'configure.ac'.
+It is useful as an extensible, maintainable mechanism for augmenting
+autoconf. It is intended that other package authors will write m4
+macros which can be automatically used by aclocal. The documentation
+for aclocal is currently found in the Automake manual.
+
+Automake has a test suite. Use "make check" to run it. For more
+information, see the file t/README.
+
+Automake has a page on the web. See:
+
+ https://www.gnu.org/software/automake/
+
+Automake also has three mailing lists:
+
+ * automake@gnu.org
+ For general discussions of Automake and its interactions with other
+ configuration/portability tools like Autoconf or Libtool.
+
+ * bug-automake@gnu.org
+ Where to send bug reports and feature requests.
+
+ * automake-patches@gnu.org
+ Where to send patches, and discuss the automake development process
+ and the design of new features.
+
+To obtain more information about these list, or to subscribe to them,
+refer to <https://www.gnu.org/software/automake/#mailinglists>
+
+New releases are announced to autotools-announce@gnu.org. If you want to
+be informed, subscribe to that list by following the instructions at
+<https://lists.gnu.org/mailman/listinfo/autotools-announce>.
+
+For any copyright year range specified as YYYY-ZZZZ in this package,
+that the range specifies every single year in that closed interval.
+
+-----
+
+Copyright (C) 1994-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
+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 <https://www.gnu.org/licenses/>.
diff --git a/THANKS b/THANKS
new file mode 100644
index 000000000..a2b8c29ec
--- /dev/null
+++ b/THANKS
@@ -0,0 +1,446 @@
+Automake was originally written by David J. MacKenzie <djm@uunet.uu.net>.
+It would not be what it is today without the invaluable help of these
+people:
+
+Adam J. Richter adam@yggdrasil.com
+Adam Mercer ramercer@gmail.com
+Adam Sampson ats@offog.org
+Adrian Bunk bunk@fs.tum.de
+Aharon Robbins arnold@skeeve.com
+Akim Demaille akim@gnu.org
+Alan Modra amodra@bigpond.net.au
+Alex Hornby alex@anvil.co.uk
+Alex Unleashed unledev@gmail.com
+Alexander Mai st002279@hrzpub.tu-darmstadt.de
+Alexander Martens alexander.martens@gtd.es
+Alexander V. Lukyanov lav@yars.free.net
+Alexander Turbov zaufi@sendmail.ru
+Alexandre Duret-Lutz duret_g@epita.fr
+Alexey Mahotkin alexm@hsys.msk.ru
+Alfred M. Szmidt ams@gnu.org
+Andrea Urbani matfanjol@mail.com
+Andreas Bergmeier lcid-fire@gmx.net
+Andreas Buening andreas.buening@nexgo.de
+Andreas Köhler andi5.py@gmx.net
+Andreas Schwab schwab@suse.de
+Andrew Cagney cagney@tpgi.com.au
+Andrew Eikum aeikum@codeweavers.com
+Andrew Suffield asuffield@debian.org
+Andris Pavenis pavenis@lanet.lv
+Andy Wingo wingo@pobox.com
+Angus Leeming a.leeming@ic.ac.uk
+Anthony Green green@cygnus.com
+Antonio Diaz Diaz ant_diaz@teleline.es
+Arkadiusz Miskiewicz misiek@pld.ORG.PL
+Art Haas ahaas@neosoft.com
+Arto C. Nirkko anirkko@insel.ch
+Assar Westerlund assar@sics.se
+Axel Belinfante Axel.Belinfante@cs.utwente.nl
+Bas Wijnen shevek@fmf.nl
+Ben Pfaff blp@cs.standford.edu
+Benoit Sigoure tsuna@lrde.epita.fr
+Bernard Giroud bernard.giroud@creditlyonnais.ch
+Bernard Urban Bernard.Urban@meteo.fr
+Bernd Jendrissek berndfoobar@users.sourceforge.net
+Bert Wesarg bert.wesarg@googlemail.com
+Bill Currie bcurrie@tssc.co.nz
+Bill Davidson bill@kayhay.com
+Bill Fenner fenner@parc.xerox.com
+Bob Friesenhahn bfriesen@simple.dallas.tx.us
+Bob Proulx rwp@hprwp.fc.hp.com
+Bob Rossi bob@brasko.net
+Bobby Jack bobbykjack@yahoo.co.uk
+Boris Kolpackov boris@codesynthesis.com
+Braden N. McDaniel braden@endoframe.com
+Brandon Black blblack@gmail.com
+Brendan O'Dea bod@debian.org
+Brian Cameron Brian.Cameron@Sun.COM
+Brian Ford ford@vss.fsi.com
+Brian Gough bjg@network-theory.co.uk
+Brian Jones cbj@nortel.net
+Bruce Korb bkorb@gnu.org
+Bruno Haible haible@ilog.fr
+Carnë Draug carandraug+dev@gmail.com
+Carsten Lohrke carlo@gentoo.org
+Charles Wilson cwilson@ece.gatech.edu
+Chris Hoogendyk hoogendyk@bio.umass.edu
+Chris Pickett chris.pickett@mail.mcgill.ca
+Chris Provenzano proven@io.proven.org
+Christian Cornelssen ccorn@cs.tu-berlin.de
+Christina Gratorp christina.gratorp@gmail.com
+Claudio Fontana sick_soul@yahoo.it
+Clifford Wolf clifford@clifford.at
+Colin Watson cjwatson@ubuntu.com
+Dagobert Michelsen dam@opencsw.org
+Daiki Ueno ueno@unixuser.org
+Dalibor Topic robilad@kaffe.org
+danbp danpb@nospam.postmaster.co.uk
+Daniel Jacobowitz drow@false.org
+Daniel Kahn Gillmor dkg@fifthhorseman.net
+Daniel Richard G. skunk@iskunk.org
+Debarshi Ray rishi@gnu.org
+Dave Brolley brolley@redhat.com
+Dave Goodell goodell@mcs.anl.gov
+Dave Hart davehart@gmail.com
+Dave Korn dave.korn.cygwin@googlemail.com
+Dave Morrison dave@bnl.gov
+David A. Swierczek swiercze@mr.med.ge.com
+David A. Wheeler dwheeler@dwheeler.com
+David Byron dbyron@dbyron.com
+David Fang fang@csl.cornell.edu
+Davyd Madeley davyd@fugro-fsi.com.au
+David Pashley david@davidpashley.com
+David Wohlferd dw@limegreensocks.com
+David Zaroski cz253@cleveland.Freenet.Edu
+Dean Povey dpovey@wedgetail.com
+Dennis J. Linse Dennis.J.Linse@SAIC.com
+Dennis Schridde devurandom@gmx.net
+Derek R. Price derek.price@openavenue.com
+Diab Jerius djerius@cfa.harvard.edu
+Didier Cassirame faded@free.fr
+Diego Elio Pettenò flameeyes@flameeyes.eu
+Dieter Baron dillo@stieltjes.smc.univie.ac.at
+Dieter Jurzitza DJurzitza@harmanbecker.com
+ДилÑн Палаузов dilyan.palauzov@aegee.org
+Dmitry Mikhin dmitrym@acres.com.au
+Dmitry V. Levin ldv@altlinux.org
+Doug Evans devans@cygnus.com
+Duncan Gibson duncan@thermal.esa.int
+Dilyan Palauzov dilyan.palauzov@aegee.org
+Ed Hartnett ed@unidata.ucar.edu
+Eleftherios Gkioulekas lf@amath.washington.edu
+Elena A. Vengerova helen@oktetlabs.ru
+Elmar Hoffmann elho@elho.net
+Elrond Elrond@Wunder-Nett.org
+Enrico Scholz enrico.scholz@informatik.tu-chemnitz.de
+Erez Zadok ezk@cs.columbia.edu
+Eric Bavier bavier@cray.com
+Eric Blake eblake@redhat.com
+Eric Dorland eric@debian.org
+Eric Magnien emagnien@club-internet.fr
+Eric Siegerman erics_97@pobox.com
+Eric Sunshine sunshine@sunshineco.com
+Erick Branderhorst branderh@iaehv.nl
+Erik Lindahl E.Lindahl@chem.rug.nl
+Esben Haabendal Soerensen bart@kom.aau.dk
+Ezra Peisach epeisach@MED-XTAL.BU.EDU
+Fabian Alenius fabian.alenius@gmail.com
+Federico Simoncelli fsimonce@redhat.com
+Felix Salfelder felix@salfelder.org
+Flavien Astraud flav42@yahoo.fr
+Florian Briegel briegel@zone42.de
+Francesco Salvestrini salvestrini@gmail.com
+François Pinard pinard@iro.umontreal.ca
+Fred Fish fnf@ninemoons.com
+Ganesan Rajagopal rganesan@novell.com
+Garrett D'Amore garrett@qualcomm.com
+Garth Corral garthc@inktomi.com
+Gary V Vaughan gvaughan@oranda.demon.co.uk
+Gavin Smith gavinsmith0123@gmail.com
+Geoffrey Keating geoffk@apple.com
+Glenn Amerine glenn@pie.mhsc.org
+Gord Matzigkeit gord@gnu.ai.mit.edu
+Gordon Sadler gbsadler1@lcisp.com
+Graham Reitz grahamreitz@me.com
+Greg A. Woods woods@most.weird.com
+Greg Schafer gschafer@zip.com.au
+Guido Draheim guidod@gmx.de
+Guillermo Ontañón gontanonext@pandasoftware.es
+Gustavo Carneiro gjc@inescporto.pt
+Gwenole Beauchesne gbeauchesne@mandrakesoft.com
+H.J. Lu hjl@lucon.org
+H.Merijn Brand h.m.brand@hccnet.nl
+Hans Ulrich Niedermann hun@n-dimensional.de
+Hanspeter Niederstrasser fink@snaggledworks.com
+Harald Dunkel harald@CoWare.com
+Harlan Stenn Harlan.Stenn@pfcs.com
+He Li tippa000@yahoo.com
+Henrik Frystyk Nielsen frystyk@w3.org
+Hib Eris hib@hiberis.nl
+Hilko Bengen bengen@debian.org
+Holger Hans Peter Freyther holger@freyther.de
+Ian Lance Taylor ian@cygnus.com
+Ignacy Gawedzki i@lri.fr
+Ð˜Ð»ÑŒÑ Ð. Голубев gin@mo.msk.ru
+Imacat imacat@mail.imacat.idv.tw
+Infirit infirit@gmail.com
+Inoue inoue@ainet.or.jp
+Jack Kelly jack@jackkelly.name
+James Amundson amundson@users.sourceforge.net
+James Bostock james.bostock@gmail.com
+James Henstridge james@daa.com.au
+James R. Van Zandt jrv@vanzandt.mv.com
+James Youngman jay@gnu.org
+Jan Engelhardt jengelh@medozas.de
+Janos Farkas chexum@shadow.banki.hu
+Jared Davis abiword@aiksaurus.com
+Jason DeVinney jasondevinney@gmail.com
+Jason Duell jcduell@lbl.gov
+Jason Molenda crash@cygnus.co.jp
+Javier Jardón jjardon@gnome.org
+Jeff Bailey Jbailey@phn.ca
+Jeff A. Daily jeff.daily@pnl.gov
+Jeff Garzik jgarzik@pobox.com
+Jeff Squyres jsquyres@lam-mpi.org
+Jens Elkner elkner@imsgroup.de
+Jens Krüger jens_krueger@physik.tu-muenchen.de
+Jens Petersen petersen@redhat.com
+Jeremy Nimmer jwnimmer@alum.mit.edu
+Jerome Lovy jlovy@multimania.com
+Jerome Santini santini@chambord.univ-orleans.fr
+Jesse Chisholm jesse@ctc.volant.org
+Jim Meyering meyering@na-net.ornl.gov
+Joakim Tjernlund Joakim.Tjernlund@transmode.se
+Jochen Kuepper jochen@uni-duesseldorf.de
+Joel N. Weber II nemo@koa.iolani.honolulu.hi.us
+Joerg-Martin Schwarz jms@jms.prima.ruhr.de
+Johan Dahlin jdahlin@async.com.br
+Johan Danielsson joda@pdc.kth.se
+Johan Kristensen johankristensen@gmail.com
+Johannes Nicolai johannes.nicolai@student.hpi.uni-potsdam.de
+John Calcote john.calcote@gmail.com
+John F Trudeau JohnTrudeau@firsthealth.com
+John Pierce hawkfan@pyrotechnics.com
+John Ratliff autoconf@technoplaza.net
+John R. Cary cary@txcorp.com
+John W. Coomes jcoomes@eng.Sun.COM
+Jonathan L Peyton jonathan.l.peyton@intel.com
+Jonathan Nieder jrnieder@gmail.com
+Joseph S. Myers joseph@codesourcery.com
+Josh MacDonald jmacd@cs.berkeley.edu
+Joshua Cowan jcowan@jcowan.reslife.okstate.edu
+js pendry js.pendry@msdw.com
+Juergen A. Erhard jae@laden.ilk.de
+Juergen Keil jk@tools.de
+Juergen Leising juergen.leising@gmx.de
+Julien Sopena julien.sopena@lip6.fr
+Jürg Billeter j@bitron.ch
+Karl Berry kb@cs.umb.edu
+Karl Heuer kwzh@gnu.org
+Kelley Cook kcook@gcc.gnu.org
+Kent Boortz kent@mysql.com
+Kevin Dalley kevin@aimnet.com
+Kevin P. Fleming. kpfleming@cox.net
+Kevin Ryde user42@zip.com.au
+Kevin Street street@iname.com
+Klaus Reichl Klaus.Reichl@alcatel.at
+Krzysztof Żelechowski giecrilj@stegny.2a.pl
+L. Peter Deutsch ghost@aladdin.com
+Ladislav Strojil Ladislav.Strojil@seznam.cz
+Larry Daniel larry@larrybrucedaniel.com
+Larry Jones larry.jones@sdrc.com
+Lars Hecking lhecking@nmrc.ucc.ie
+Lars J. Aas larsa@sim.no
+Laurent Morichetti laurentm@cup.hp.com
+Leo Davis ldavis@fonix.com
+Leonardo Boiko leoboiko@conectiva.com.br
+Loulou Pouchet loulou@lrde.epita.fr
+Ludovic Courtès ludo@gnu.org
+Luo Yi luoyi.ly@gmail.com
+Maciej Stachowiak mstachow@mit.edu
+Maciej W. Rozycki macro@ds2.pg.gda.pl
+Manu Rouat emmanuel.rouat@wanadoo.fr
+Marc Herbert marc.herbert@intel.com
+Marcus Brinkmann Marcus.Brinkmann@ruhr-uni-bochum.de
+Marcus G. Daniels mgd@ute.santafe.edu
+Marius Vollmer mvo@zagadka.ping.de
+Marc-Antoine Perennou Marc-Antoine@Perennou.com
+Mark D. Baushke mdb@cvshome.org
+Mark Eichin eichin@cygnus.com
+Mark Elbrecht snowball3@bigfoot.com
+Mark Galassi rosalia@nis.lanl.gov
+Mark Mitchell mark@codesourcery.com
+Mark Phillips msp@nortelnetworks.com
+Markku Rossi mtr@ngs.fi
+Markus Duft Markus.Duft@salomon.at
+Markus F.X.J. Oberhumer k3040e4@wildsau.idv-edu.uni-linz.ac.at
+Martin Bravenboer martin@cs.uu.nl
+Martin Frydl martin@idoox.com
+Martin Waitz tali@admingilde.org
+Mathias Doreille doreille@smr.ch
+Mathias Froehlich M.Froehlich@science-computing.de
+Mathias Hasselmann mathias.hasselmann@gmx.de
+Matt Burgess matthew@linuxfromscratch.org
+Matt Leach mleach@cygnus.com
+Matthew D. Langston langston@SLAC.Stanford.EDU
+Matthias Andree matthias.andree@gmx.de
+Matthias Clasen clasen@mathematik.uni-freiburg.de
+Matthias Klose doko@ubuntu.com
+Matthieu Baerts matttbe@glx-dock.org
+Max Horn max@quendi.de
+Maxim Sinev good@goods.ru
+Maynard Johnson maynardj@us.ibm.com
+Merijn de Jonge M.de.Jonge@cwi.nl
+Michael Brantley Michael-Brantley@deshaw.com
+Michael Daniels mdaniels@rim.com
+Michael Hofmann mhofma@googlemail.com
+Michael Ploujnikov ploujj@gmail.com
+Michael Zucchi notzed@gmail.com
+Michel de Ruiter mdruiter@cs.vu.nl
+Mike Castle dalgoda@ix.netcom.com
+Mike Frysinger vapier@gentoo.org
+Mike Nolta mrnolta@princeton.edu
+Miles Bader miles@ccs.mt.nec.co.jp
+Miloslav Trmac trmac@popelka.ms.mff.cuni.cz
+Miodrag Vallat miodrag@ifrance.com
+Mirko Streckenbach strecken@infosun.fmi.uni-passau.de
+Miroslaw Dobrzanski-Neumann mne@mosaic-ag.com
+Morten Eriksen mortene@sim.no
+Motoyuki Kasahara m-kasahr@sra.co.jp
+Nathanael Nerode neroden@twcny.rr.com
+Nelson H. F. Beebe beebe@math.utah.edu
+Nicholas Wourms nwourms@netscape.net
+Nick Bowler nbowler@elliptictech.com
+Nick Brown brownn@brocade.com
+Nicola Fontana ntd@entidi.it
+Nicolas Joly njoly@pasteur.fr
+Nicolas Thiery nthiery@Icare.mines.edu
+NightStrike nightstrike@gmail.com
+Nik A. Melchior nam1@cse.wustl.edu
+Nikolai Weibull now@bitwi.se
+NISHIDA Keisuke knishida@nn.iij4u.or.jp
+Noah Friedman friedman@gnu.ai.mit.edu
+Norman Gray norman@astro.gla.ac.uk
+Nyul Laszlo nyul@sol.cc.u-szeged.hu
+OKUJI Yoshinori okuji@kuicr.kyoto-u.ac.jp
+Olivier Fourdan fourdan@cena.fr
+Olivier Louchart-Fletcher olivier@zipworld.com.au
+Olly Betts olly@muscat.co.uk
+Oren Ben-Kiki oren@ben-kiki.org
+Owen Taylor otaylor@redhat.com
+Panther Martin mrsmiley98@lycos.com
+Patrick Welche prlw1@newn.cam.ac.uk
+Patrik Weiskircher me@justp.at
+Paul Berrevoets paul@swi.com
+Paul D. Smith psmith@BayNetworks.COM
+Paul Eggert eggert@twinsun.com
+Paul Jarc prj@po.cwru.edu
+Paul Lunau temp@lunau.me.uk
+Paul Martinolich martinol@datasync.com
+Paul Thomas PTHOMAS@novell.com
+Pavel Raiskup praiskup@redhat.com
+Pavel Roskin pavel_roskin@geocities.com
+Pavel Sanda ps@twin.jikos.cz
+Per Bothner bothner@cygnus.com
+Per Cederqvist ceder@lysator.liu.se
+Per Oyvind Hvidsten poeh@enter.vg
+Peter Breitenlohner peb@mppmu.mpg.de
+Peter Eisentraut peter_e@gmx.net
+Peter Gavin pgavin@debaser.kicks-ass.org
+Peter Hutterer peter.hutterer@who-t.net
+Peter Johansson trojkan@gmail.com
+Peter Mattis petm@scam.XCF.Berkeley.EDU
+Peter Muir iyhi@yahoo.com
+Peter O'Gorman peter@pogma.com
+Peter Rosin peda@lysator.liu.se
+Peter Seiderer seiderer123@ciselant.de
+Petr Hracek phracek@redhat.com
+Petter Reinholdtsen pere@hungry.com
+Petteri Räty betelgeuse@gentoo.org
+Phil Edwards phil@jaj.com
+Phil Nelson phil@cs.wwu.edu
+Philip Fong pwlfong@users.sourceforge.net
+Philip S Tellis philip@ncst.ernet.in
+Philipp A. Hartmann philipp.hartmann@offis.de
+ПухальÑкий Юрий Ðндреевич pooh@cryptopro.ru
+Quentin Glidic sardemff7+gnu@sardemff7.net
+Rainer Orth ro@techfak.uni-bielefeld.de
+Rafael Laboissiere laboissiere@psy.mpg.de
+Rainer Tammer tammer@tammer.net
+Raja R Harinath harinath@cs.umn.edu
+Ralf Corsepius ralf.corsepius@gmail.com
+Ralf Menzel menzel@ls6.cs.uni-dortmund.de
+Ralf Wildenhues Ralf.Wildenhues@gmx.de
+Ralph Schleicher rs@purple.UL.BaWue.DE
+Ramón García Fernández ramon@jl1.quim.ucm.es
+Reuben Thomas rrt@sc3d.org
+Rich Wales richw@webcom.com
+Richard Boulton richard@tartarus.org
+Richard Dawe rich@phekda.freeserve.co.uk
+Richard W.M. Jones rjones@redhat.com
+Rob Savoye rob@cygnus.com
+Robert Bihlmeyer robbe@orcus.priv.at
+Robert Boehne rboehne@ricardo-us.com
+Robert Collins robert.collins@itdomain.com.au
+Robert Swafford robert.swafford@l-3com.com
+Roberto Bagnara bagnara@cs.unipr.it
+Roman Fietze roman.fietze@telemotive.de
+Ronald Copley ronald.copley@gmail.com
+Ronald Landheer ronald@landheer.com
+Roumen Petrov bugtrack@roumenpetrov.info
+Russ Allbery rra@stanford.edu
+Rusty Ballinger rusty@rlyeh.engr.sgi.com
+Ryan Lortie desrt@desrt.ca
+Ryan T. Sammartino ryants@shaw.ca
+Sam Hocevar sam@zoy.org
+Sam Sirlin sam@kalessin.jpl.nasa.gov
+Sam Steingold sds@gnu.org
+Sander Niemeijer niemeijer@science-and-technology.nl
+Santiago Vila sanvila@unex.es
+Scott James Remnant scott@netsplit.com
+Sébastien Wilmet swilmet@gnome.org
+Sergey Poznyakoff gray@gnu.org.ua
+Sergey Vlasov vsu@mivlgu.murom.ru
+Seth Alves alves@hungry.com
+Shannon L. Brown slbrow@sandia.gov
+Shuhei Amakawa sa264@cam.ac.uk
+Shigio Yamaguchi shigio@tamacom.com
+Simon Josefsson jas@extundo.com
+Simon Richter sjr@debian.org
+Stefan Nordhausen nordhaus@informatik.hu-berlin.de
+Stefano Lattarini stefano.lattarini@gmail.com
+Stepan Kasal kasal@math.cas.cz
+Steve M. Robbins steve@nyongwa.montreal.qc.ca
+Steve Goetze goetze@dovetail.com
+Steven Drake sbd@NetBSD.org
+Steven G. Johnson stevenj@alum.mit.edu
+Sven Verdoolaege skimo@kotnet.org
+Tamara L. Dahlgren dahlgren1@llnl.gov
+Tatu Ylonen ylo@ssh.fi
+Teun Burgers burgers@ecn.nl
+The Crimson Binome steve@nyongwa.montreal.qc.ca
+Theodoros V. Kalamatianos thkala@gmail.com
+Thien-Thi Nguyen ttn@glug.org
+Thomas Fitzsimmons fitzsim@redhat.com
+Thomas Gagne tgagne@ix.netcom.com
+Thomas Jahns jahns@dkrz.de
+Thomas Klausner tk@giga.or.at
+Thomas Morgan tmorgan@pobox.com
+Thomas Schwinge tschwinge@gnu.org
+Thomas Tanner tanner@ffii.org
+Toralf Förster toralf.foerster@gmx.de
+Tim Goodwin tjg@star.le.ac.uk
+Tim Landscheidt tim@tim-landscheidt.de
+Tim Mooney mooney@dogbert.cc.ndsu.NoDak.edu
+Tim Retout diocles@debian.org
+Tim Rice tim@multitalents.net
+Tim Van Holder tim.van.holder@pandora.be
+Tobias Hansen thansen@debian.org
+Toshio Kuratomi toshio@tiki-lounge.com
+Tom Epperly tepperly@llnl.gov
+Tom Rini tom_rini@mentor.com
+Ulrich Drepper drepper@gnu.ai.mit.edu
+Ulrich Eckhardt eckhardt@satorlaser.com
+Václav Haisman V.Haisman@sh.cvut.cz
+Václav Zeman vhaisman@gmail.com
+Vadim Zeitlin Vadim.zeitlin@dptmaths.ens-cachan.fr
+Vasyl Khalak basiliomail@gmail.com
+Vincent Lefevre vincent@vinc17.org
+Vladimir Serbinenko phcoder@gmail.com
+Volker Boerchers vboerchers@tecon.de
+Weiller Ronfini weillerronfini@yahoo.com.br
+Werner John john@oswf.de
+Werner Koch wk@isil.d.shuttle.de
+Werner Lemberg wl@gnu.org
+William Pursell bill.pursell@gmail.com
+William S Fulton wsf@fultondesigns.co.uk
+Yann Droneaud ydroneaud@meuh.eu.org
+Younes Younes younes@cs.tu-berlin.de
+Zack Weinberg zackw@panix.com
+Zbigniew Jędrzejewski-Szmek zbyszek@in.waw.pl
+Zoltan Rado z.rado@chello.hu
+
+;; Local Variables:
+;; mode: text
+;; coding: utf-8
+;; End:
diff --git a/bin/aclocal.in b/bin/aclocal.in
new file mode 100644
index 000000000..aad0cfb4e
--- /dev/null
+++ b/bin/aclocal.in
@@ -0,0 +1,1242 @@
+#!@PERL@ -w
+# -*- perl -*-
+# @configure_input@
+
+eval 'case $# in 0) exec @PERL@ -S "$0";; *) exec @PERL@ -S "$0" "$@";; esac'
+ if 0;
+
+# aclocal - create aclocal.m4 by scanning configure.ac
+
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Written by Tom Tromey <tromey@redhat.com>, and
+# Alexandre Duret-Lutz <adl@gnu.org>.
+
+BEGIN
+{
+ unshift (@INC, '@datadir@/@PACKAGE@-@APIVERSION@')
+ unless $ENV{AUTOMAKE_UNINSTALLED};
+}
+
+use strict;
+
+use Automake::Config;
+use Automake::General;
+use Automake::Configure_ac;
+use Automake::Channels;
+use Automake::ChannelDefs;
+use Automake::XFile;
+use Automake::FileUtils;
+use File::Basename;
+use File::Path ();
+
+# Some globals.
+
+# Support AC_CONFIG_MACRO_DIRS also with older autoconf.
+# FIXME: To be removed in Automake 2.0, once we can assume autoconf
+# 2.70 or later.
+# FIXME: keep in sync with 'internal/ac-config-macro-dirs.m4'.
+my $ac_config_macro_dirs_fallback =
+ 'm4_ifndef([AC_CONFIG_MACRO_DIRS], [' .
+ 'm4_defun([_AM_CONFIG_MACRO_DIRS], [])' .
+ 'm4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])' .
+ '])';
+
+# We do not operate in threaded mode.
+$perl_threads = 0;
+
+# Include paths for searching macros. We search macros in this order:
+# user-supplied directories first, then the directory containing the
+# automake macros, and finally the system-wide directories for
+# third-party macros.
+# @user_includes can be augmented with -I or AC_CONFIG_MACRO_DIRS.
+# @automake_includes can be reset with the '--automake-acdir' option.
+# @system_includes can be augmented with the 'dirlist' file or the
+# ACLOCAL_PATH environment variable, and reset with the '--system-acdir'
+# option.
+my @user_includes = ();
+my @automake_includes = ('@datadir@/aclocal-' . $APIVERSION);
+my @system_includes = ('@datadir@/aclocal');
+
+# Whether we should copy M4 file in $user_includes[0].
+my $install = 0;
+
+# --diff
+my @diff_command;
+
+# --dry-run
+my $dry_run = 0;
+
+# configure.ac or configure.in.
+my $configure_ac;
+
+# Output file name.
+my $output_file = 'aclocal.m4';
+
+# Option --force.
+my $force_output = 0;
+
+# Modification time of the youngest dependency.
+my $greatest_mtime = 0;
+
+# Which macros have been seen.
+my %macro_seen = ();
+
+# Remember the order into which we scanned the files.
+# It's important to output the contents of aclocal.m4 in the opposite order.
+# (Definitions in first files we have scanned should override those from
+# later files. So they must appear last in the output.)
+my @file_order = ();
+
+# Map macro names to file names.
+my %map = ();
+
+# Ditto, but records the last definition of each macro as returned by --trace.
+my %map_traced_defs = ();
+
+# Map basenames to macro names.
+my %invmap = ();
+
+# Map file names to file contents.
+my %file_contents = ();
+
+# Map file names to file types.
+my %file_type = ();
+use constant FT_USER => 1;
+use constant FT_AUTOMAKE => 2;
+use constant FT_SYSTEM => 3;
+
+# Map file names to included files (transitively closed).
+my %file_includes = ();
+
+# Files which have already been added.
+my %file_added = ();
+
+# Files that have already been scanned.
+my %scanned_configure_dep = ();
+
+# Serial numbers, for files that have one.
+# The key is the basename of the file,
+# the value is the serial number represented as a list.
+my %serial = ();
+
+# Matches a macro definition.
+# AC_DEFUN([macroname], ...)
+# or
+# AC_DEFUN(macroname, ...)
+# When macroname is '['-quoted , we accept any character in the name,
+# except ']'. Otherwise macroname stops on the first ']', ',', ')',
+# or '\n' encountered.
+my $ac_defun_rx =
+ "(?:AU_ALIAS|A[CU]_DEFUN|AC_DEFUN_ONCE)\\((?:\\[([^]]+)\\]|([^],)\n]+))";
+
+# Matches an AC_REQUIRE line.
+my $ac_require_rx = "AC_REQUIRE\\((?:\\[([^]]+)\\]|([^],)\n]+))\\)";
+
+# Matches an m4_include line.
+my $m4_include_rx = "(m4_|m4_s|s)include\\((?:\\[([^]]+)\\]|([^],)\n]+))\\)";
+
+# Match a serial number.
+my $serial_line_rx = '^#\s*serial\s+(\S*)';
+my $serial_number_rx = '^\d+(?:\.\d+)*$';
+
+# Autoconf version. This variable is set by 'trace_used_macros'.
+my $ac_version;
+
+# User directory containing extra m4 files for macros definition,
+# as extracted from calls to the macro AC_CONFIG_MACRO_DIRS.
+# This variable is updated by 'trace_used_macros'.
+my @ac_config_macro_dirs;
+
+# If set, names a temporary file that must be erased on abnormal exit.
+my $erase_me;
+
+# Constants for the $ERR_LEVEL parameter of the 'scan_m4_dirs' function.
+use constant SCAN_M4_DIRS_SILENT => 0;
+use constant SCAN_M4_DIRS_WARN => 1;
+use constant SCAN_M4_DIRS_ERROR => 2;
+
+################################################################
+
+# Prototypes for all subroutines.
+
+sub add_file ($);
+sub add_macro ($);
+sub check_acinclude ();
+sub install_file ($$);
+sub list_compare (\@\@);
+sub parse_ACLOCAL_PATH ();
+sub parse_arguments ();
+sub reset_maps ();
+sub scan_configure ();
+sub scan_configure_dep ($);
+sub scan_file ($$$);
+sub scan_m4_dirs ($$@);
+sub scan_m4_files ();
+sub strip_redundant_includes (%);
+sub trace_used_macros ();
+sub unlink_tmp (;$);
+sub usage ($);
+sub version ();
+sub write_aclocal ($@);
+sub xmkdir_p ($);
+
+################################################################
+
+# Erase temporary file ERASE_ME. Handle signals.
+sub unlink_tmp (;$)
+{
+ my ($sig) = @_;
+
+ if ($sig)
+ {
+ verb "caught SIG$sig, bailing out";
+ }
+ if (defined $erase_me && -e $erase_me && !unlink ($erase_me))
+ {
+ fatal "could not remove '$erase_me': $!";
+ }
+ undef $erase_me;
+
+ # reraise default handler.
+ if ($sig)
+ {
+ $SIG{$sig} = 'DEFAULT';
+ kill $sig => $$;
+ }
+}
+
+$SIG{'INT'} = $SIG{'TERM'} = $SIG{'QUIT'} = $SIG{'HUP'} = 'unlink_tmp';
+END { unlink_tmp }
+
+sub xmkdir_p ($)
+{
+ my $dir = shift;
+ local $@ = undef;
+ return
+ if -d $dir or eval { File::Path::mkpath $dir };
+ chomp $@;
+ $@ =~ s/\s+at\s.*\bline\s\d+.*$//;
+ fatal "could not create directory '$dir': $@";
+}
+
+# Check macros in acinclude.m4. If one is not used, warn.
+sub check_acinclude ()
+{
+ foreach my $key (keys %map)
+ {
+ # FIXME: should print line number of acinclude.m4.
+ msg ('syntax', "macro '$key' defined in acinclude.m4 but never used")
+ if $map{$key} eq 'acinclude.m4' && ! exists $macro_seen{$key};
+ }
+}
+
+sub reset_maps ()
+{
+ $greatest_mtime = 0;
+ %macro_seen = ();
+ @file_order = ();
+ %map = ();
+ %map_traced_defs = ();
+ %file_contents = ();
+ %file_type = ();
+ %file_includes = ();
+ %file_added = ();
+ %scanned_configure_dep = ();
+ %invmap = ();
+ %serial = ();
+ undef &search;
+}
+
+# install_file ($SRC, $DESTDIR)
+sub install_file ($$)
+{
+ my ($src, $destdir) = @_;
+ my $dest = $destdir . "/" . basename ($src);
+ my $diff_dest;
+
+ verb "installing $src to $dest";
+
+ if ($force_output
+ || !exists $file_contents{$dest}
+ || $file_contents{$src} ne $file_contents{$dest})
+ {
+ if (-e $dest)
+ {
+ msg 'note', "overwriting '$dest' with '$src'";
+ $diff_dest = $dest;
+ }
+ else
+ {
+ msg 'note', "installing '$dest' from '$src'";
+ }
+
+ if (@diff_command)
+ {
+ if (! defined $diff_dest)
+ {
+ # $dest does not exist. We create an empty one just to
+ # run diff, and we erase it afterward. Using the real
+ # the destination file (rather than a temporary file) is
+ # good when diff is run with options that display the
+ # file name.
+ #
+ # If creating $dest fails, fall back to /dev/null. At
+ # least one diff implementation (Tru64's) cannot deal
+ # with /dev/null. However working around this is not
+ # worth the trouble since nobody run aclocal on a
+ # read-only tree anyway.
+ $erase_me = $dest;
+ my $f = new IO::File "> $dest";
+ if (! defined $f)
+ {
+ undef $erase_me;
+ $diff_dest = '/dev/null';
+ }
+ else
+ {
+ $diff_dest = $dest;
+ $f->close;
+ }
+ }
+ my @cmd = (@diff_command, $diff_dest, $src);
+ $! = 0;
+ verb "running: @cmd";
+ my $res = system (@cmd);
+ Automake::FileUtils::handle_exec_errors "@cmd", 1
+ if $res;
+ unlink_tmp;
+ }
+ elsif (!$dry_run)
+ {
+ xmkdir_p ($destdir);
+ xsystem ('cp', $src, $dest);
+ }
+ }
+}
+
+# Compare two lists of numbers.
+sub list_compare (\@\@)
+{
+ my @l = @{$_[0]};
+ my @r = @{$_[1]};
+ while (1)
+ {
+ if (0 == @l)
+ {
+ return (0 == @r) ? 0 : -1;
+ }
+ elsif (0 == @r)
+ {
+ return 1;
+ }
+ elsif ($l[0] < $r[0])
+ {
+ return -1;
+ }
+ elsif ($l[0] > $r[0])
+ {
+ return 1;
+ }
+ shift @l;
+ shift @r;
+ }
+}
+
+################################################################
+
+# scan_m4_dirs($TYPE, $ERR_LEVEL, @DIRS)
+# -----------------------------------------------
+# Scan all M4 files installed in @DIRS for new macro definitions.
+# Register each file as of type $TYPE (one of the FT_* constants).
+# If a directory in @DIRS cannot be read:
+# - fail hard if $ERR_LEVEL == SCAN_M4_DIRS_ERROR
+# - just print a warning if $ERR_LEVEL == SCAN_M4_DIRS_WA
+# - continue silently if $ERR_LEVEL == SCAN_M4_DIRS_SILENT
+sub scan_m4_dirs ($$@)
+{
+ my ($type, $err_level, @dirlist) = @_;
+
+ foreach my $m4dir (@dirlist)
+ {
+ if (! opendir (DIR, $m4dir))
+ {
+ # TODO: maybe avoid complaining only if errno == ENONENT?
+ my $message = "couldn't open directory '$m4dir': $!";
+
+ if ($err_level == SCAN_M4_DIRS_ERROR)
+ {
+ fatal $message;
+ }
+ elsif ($err_level == SCAN_M4_DIRS_WARN)
+ {
+ msg ('unsupported', $message);
+ next;
+ }
+ elsif ($err_level == SCAN_M4_DIRS_SILENT)
+ {
+ next; # Silently ignore.
+ }
+ else
+ {
+ prog_error "invalid \$err_level value '$err_level'";
+ }
+ }
+
+ # We reverse the directory contents so that foo2.m4 gets
+ # used in preference to foo1.m4.
+ foreach my $file (reverse sort grep (! /^\./, readdir (DIR)))
+ {
+ # Only examine .m4 files.
+ next unless $file =~ /\.m4$/;
+
+ # Skip some files when running out of srcdir.
+ next if $file eq 'aclocal.m4';
+
+ my $fullfile = File::Spec->canonpath ("$m4dir/$file");
+ scan_file ($type, $fullfile, 'aclocal');
+ }
+ closedir (DIR);
+ }
+}
+
+# Scan all the installed m4 files and construct a map.
+sub scan_m4_files ()
+{
+ # First, scan configure.ac. It may contain macro definitions,
+ # or may include other files that define macros.
+ scan_file (FT_USER, $configure_ac, 'aclocal');
+
+ # Then, scan acinclude.m4 if it exists.
+ if (-f 'acinclude.m4')
+ {
+ scan_file (FT_USER, 'acinclude.m4', 'aclocal');
+ }
+
+ # Finally, scan all files in our search paths.
+
+ if (@user_includes)
+ {
+ # Don't explore the same directory multiple times. This is here not
+ # only for speedup purposes. We need this when the user has e.g.
+ # specified 'ACLOCAL_AMFLAGS = -I m4' and has also set
+ # AC_CONFIG_MACRO_DIR[S]([m4]) in configure.ac. This makes the 'm4'
+ # directory to occur twice here and fail on the second call to
+ # scan_m4_dirs([m4]) when the 'm4' directory doesn't exist.
+ # TODO: Shouldn't there be rather a check in scan_m4_dirs for
+ # @user_includes[0]?
+ @user_includes = uniq @user_includes;
+
+ # Don't complain if the first user directory doesn't exist, in case
+ # we need to create it later (can happen if '--install' was given).
+ scan_m4_dirs (FT_USER,
+ $install ? SCAN_M4_DIRS_SILENT : SCAN_M4_DIRS_WARN,
+ $user_includes[0]);
+ scan_m4_dirs (FT_USER,
+ SCAN_M4_DIRS_ERROR,
+ @user_includes[1..$#user_includes]);
+ }
+ scan_m4_dirs (FT_AUTOMAKE, SCAN_M4_DIRS_ERROR, @automake_includes);
+ scan_m4_dirs (FT_SYSTEM, SCAN_M4_DIRS_ERROR, @system_includes);
+
+ # Construct a new function that does the searching. We use a
+ # function (instead of just evaluating $search in the loop) so that
+ # "die" is correctly and easily propagated if run.
+ my $search = "sub search {\nmy \$found = 0;\n";
+ foreach my $key (reverse sort keys %map)
+ {
+ $search .= ('if (/\b\Q' . $key . '\E(?!\w)/) { add_macro ("' . $key
+ . '"); $found = 1; }' . "\n");
+ }
+ $search .= "return \$found;\n};\n";
+ eval $search;
+ prog_error "$@\n search is $search" if $@;
+}
+
+################################################################
+
+# Add a macro to the output.
+sub add_macro ($)
+{
+ my ($macro) = @_;
+
+ # Ignore unknown required macros. Either they are not really
+ # needed (e.g., a conditional AC_REQUIRE), in which case aclocal
+ # should be quiet, or they are needed and Autoconf itself will
+ # complain when we trace for macro usage later.
+ return unless defined $map{$macro};
+
+ verb "saw macro $macro";
+ $macro_seen{$macro} = 1;
+ add_file ($map{$macro});
+}
+
+# scan_configure_dep ($file)
+# --------------------------
+# Scan a configure dependency (configure.ac, or separate m4 files)
+# for uses of known macros and AC_REQUIREs of possibly unknown macros.
+# Recursively scan m4_included files.
+sub scan_configure_dep ($)
+{
+ my ($file) = @_;
+ # Do not scan a file twice.
+ return ()
+ if exists $scanned_configure_dep{$file};
+ $scanned_configure_dep{$file} = 1;
+
+ my $mtime = mtime $file;
+ $greatest_mtime = $mtime if $greatest_mtime < $mtime;
+
+ my $contents = exists $file_contents{$file} ?
+ $file_contents{$file} : contents $file;
+
+ my $line = 0;
+ my @rlist = ();
+ my @ilist = ();
+ foreach (split ("\n", $contents))
+ {
+ ++$line;
+ # Remove comments from current line.
+ s/\bdnl\b.*$//;
+ s/\#.*$//;
+ # Avoid running all the following regexes on white lines.
+ next if /^\s*$/;
+
+ while (/$m4_include_rx/go)
+ {
+ my $ifile = $2 || $3;
+ # Skip missing 'sinclude'd files.
+ next if $1 ne 'm4_' && ! -f $ifile;
+ push @ilist, $ifile;
+ }
+
+ while (/$ac_require_rx/go)
+ {
+ push (@rlist, $1 || $2);
+ }
+
+ # The search function is constructed dynamically by
+ # scan_m4_files. The last parenthetical match makes sure we
+ # don't match things that look like macro assignments or
+ # AC_SUBSTs.
+ if (! &search && /(^|\s+)(AM_[A-Z0-9_]+)($|[^\]\)=A-Z0-9_])/)
+ {
+ # Macro not found, but AM_ prefix found.
+ # Make this just a warning, because we do not know whether
+ # the macro is actually used (it could be called conditionally).
+ msg ('unsupported', "$file:$line",
+ "macro '$2' not found in library");
+ }
+ }
+
+ add_macro ($_) foreach (@rlist);
+ scan_configure_dep ($_) foreach @ilist;
+}
+
+# add_file ($FILE)
+# ----------------
+# Add $FILE to output.
+sub add_file ($)
+{
+ my ($file) = @_;
+
+ # Only add a file once.
+ return if ($file_added{$file});
+ $file_added{$file} = 1;
+
+ scan_configure_dep $file;
+}
+
+# Point to the documentation for underquoted AC_DEFUN only once.
+my $underquoted_manual_once = 0;
+
+# scan_file ($TYPE, $FILE, $WHERE)
+# --------------------------------
+# Scan a single M4 file ($FILE), and all files it includes.
+# Return the list of included files.
+# $TYPE is one of FT_USER, FT_AUTOMAKE, or FT_SYSTEM, depending
+# on where the file comes from.
+# $WHERE is the location to use in the diagnostic if the file
+# does not exist.
+sub scan_file ($$$)
+{
+ my ($type, $file, $where) = @_;
+ my $basename = basename $file;
+
+ # Do not scan the same file twice.
+ return @{$file_includes{$file}} if exists $file_includes{$file};
+ # Prevent potential infinite recursion (if two files include each other).
+ return () if exists $file_contents{$file};
+
+ unshift @file_order, $file;
+
+ $file_type{$file} = $type;
+
+ fatal "$where: file '$file' does not exist" if ! -e $file;
+
+ my $fh = new Automake::XFile $file;
+ my $contents = '';
+ my @inc_files = ();
+ my %inc_lines = ();
+
+ my $defun_seen = 0;
+ my $serial_seen = 0;
+ my $serial_older = 0;
+
+ while ($_ = $fh->getline)
+ {
+ # Ignore '##' lines.
+ next if /^##/;
+
+ $contents .= $_;
+ my $line = $_;
+
+ if ($line =~ /$serial_line_rx/go)
+ {
+ my $number = $1;
+ if ($number !~ /$serial_number_rx/go)
+ {
+ msg ('syntax', "$file:$.",
+ "ill-formed serial number '$number', "
+ . "expecting a version string with only digits and dots");
+ }
+ elsif ($defun_seen)
+ {
+ # aclocal removes all definitions from M4 file with the
+ # same basename if a greater serial number is found.
+ # Encountering a serial after some macros will undefine
+ # these macros...
+ msg ('syntax', "$file:$.",
+ 'the serial number must appear before any macro definition');
+ }
+ # We really care about serials only for non-automake macros
+ # and when --install is used. But the above diagnostics are
+ # made regardless of this, because not using --install is
+ # not a reason not the fix macro files.
+ elsif ($install && $type != FT_AUTOMAKE)
+ {
+ $serial_seen = 1;
+ my @new = split (/\./, $number);
+
+ verb "$file:$.: serial $number";
+
+ if (!exists $serial{$basename}
+ || list_compare (@new, @{$serial{$basename}}) > 0)
+ {
+ # Delete any definition we knew from the old macro.
+ foreach my $def (@{$invmap{$basename}})
+ {
+ verb "$file:$.: ignoring previous definition of $def";
+ delete $map{$def};
+ }
+ $invmap{$basename} = [];
+ $serial{$basename} = \@new;
+ }
+ else
+ {
+ $serial_older = 1;
+ }
+ }
+ }
+
+ # Remove comments from current line.
+ # Do not do it earlier, because the serial line is a comment.
+ $line =~ s/\bdnl\b.*$//;
+ $line =~ s/\#.*$//;
+
+ while ($line =~ /$ac_defun_rx/go)
+ {
+ $defun_seen = 1;
+ if (! defined $1)
+ {
+ msg ('syntax', "$file:$.", "underquoted definition of $2"
+ . "\n run info Automake 'Extending aclocal'\n"
+ . " or see https://www.gnu.org/software/automake/manual/"
+ . "automake.html#Extending-aclocal")
+ unless $underquoted_manual_once;
+ $underquoted_manual_once = 1;
+ }
+
+ # If this macro does not have a serial and we have already
+ # seen a macro with the same basename earlier, we should
+ # ignore the macro (don't exit immediately so we can still
+ # diagnose later #serial numbers and underquoted macros).
+ $serial_older ||= ($type != FT_AUTOMAKE
+ && !$serial_seen && exists $serial{$basename});
+
+ my $macro = $1 || $2;
+ if (!$serial_older && !defined $map{$macro})
+ {
+ verb "found macro $macro in $file: $.";
+ $map{$macro} = $file;
+ push @{$invmap{$basename}}, $macro;
+ }
+ else
+ {
+ # Note: we used to give an error here if we saw a
+ # duplicated macro. However, this turns out to be
+ # extremely unpopular. It causes actual problems which
+ # are hard to work around, especially when you must
+ # mix-and-match tool versions.
+ verb "ignoring macro $macro in $file: $.";
+ }
+ }
+
+ while ($line =~ /$m4_include_rx/go)
+ {
+ my $ifile = $2 || $3;
+ # Skip missing 'sinclude'd files.
+ next if $1 ne 'm4_' && ! -f $ifile;
+ push (@inc_files, $ifile);
+ $inc_lines{$ifile} = $.;
+ }
+ }
+
+ # Ignore any file that has an old serial (or no serial if we know
+ # another one with a serial).
+ return ()
+ if ($serial_older ||
+ ($type != FT_AUTOMAKE && !$serial_seen && exists $serial{$basename}));
+
+ $file_contents{$file} = $contents;
+
+ # For some reason I don't understand, it does not work
+ # to do "map { scan_file ($_, ...) } @inc_files" below.
+ # With Perl 5.8.2 it undefines @inc_files.
+ my @copy = @inc_files;
+ my @all_inc_files = (@inc_files,
+ map { scan_file ($type, $_,
+ "$file:$inc_lines{$_}") } @copy);
+ $file_includes{$file} = \@all_inc_files;
+ return @all_inc_files;
+}
+
+# strip_redundant_includes (%FILES)
+# ---------------------------------
+# Each key in %FILES is a file that must be present in the output.
+# However some of these files might already include other files in %FILES,
+# so there is no point in including them another time.
+# This removes items of %FILES which are already included by another file.
+sub strip_redundant_includes (%)
+{
+ my %files = @_;
+
+ # Always include acinclude.m4, even if it does not appear to be used.
+ $files{'acinclude.m4'} = 1 if -f 'acinclude.m4';
+ # File included by $configure_ac are redundant.
+ $files{$configure_ac} = 1;
+
+ # Files at the end of @file_order should override those at the beginning,
+ # so it is important to preserve these trailing files. We can remove
+ # a file A if it is going to be output before a file B that includes
+ # file A, not the converse.
+ foreach my $file (reverse @file_order)
+ {
+ next unless exists $files{$file};
+ foreach my $ifile (@{$file_includes{$file}})
+ {
+ next unless exists $files{$ifile};
+ delete $files{$ifile};
+ verb "$ifile is already included by $file";
+ }
+ }
+
+ # configure.ac is implicitly included.
+ delete $files{$configure_ac};
+
+ return %files;
+}
+
+sub trace_used_macros ()
+{
+ my %files = map { $map{$_} => 1 } keys %macro_seen;
+ %files = strip_redundant_includes %files;
+
+ # When AC_CONFIG_MACRO_DIRS is used, avoid possible spurious warnings
+ # from autom4te about macros being "m4_require'd but not m4_defun'd";
+ # for more background, see:
+ # https://lists.gnu.org/archive/html/autoconf-patches/2012-11/msg00004.html
+ # as well as autoconf commit 'v2.69-44-g1ed0548', "warn: allow aclocal
+ # to silence m4_require warnings".
+ my $early_m4_code .= "m4_define([m4_require_silent_probe], [-])";
+
+ my $traces = ($ENV{AUTOM4TE} || '@am_AUTOM4TE@');
+ $traces .= " --language Autoconf-without-aclocal-m4 ";
+ $traces = "echo '$early_m4_code' | $traces - ";
+
+ # Support AC_CONFIG_MACRO_DIRS also with older autoconf.
+ # Note that we can't use '$ac_config_macro_dirs_fallback' here, because
+ # a bug in option parsing code of autom4te 2.68 and earlier will cause
+ # it to read standard input last, even if the "-" argument is specified
+ # early.
+ # FIXME: To be removed in Automake 2.0, once we can assume autoconf
+ # 2.70 or later.
+ $traces .= "$automake_includes[0]/internal/ac-config-macro-dirs.m4 ";
+
+ # All candidate files.
+ $traces .= join (' ',
+ (map { "'$_'" }
+ (grep { exists $files{$_} } @file_order))) . " ";
+
+ # All candidate macros.
+ $traces .= join (' ',
+ (map { "--trace='$_:\$f::\$n::\${::}%'" }
+ ('AC_DEFUN',
+ 'AC_DEFUN_ONCE',
+ 'AU_DEFUN',
+ '_AM_AUTOCONF_VERSION',
+ 'AC_CONFIG_MACRO_DIR_TRACE',
+ # FIXME: Tracing the next two macros is a hack for
+ # compatibility with older autoconf. Remove this in
+ # Automake 2.0, when we can assume Autoconf 2.70 or
+ # later.
+ 'AC_CONFIG_MACRO_DIR',
+ '_AM_CONFIG_MACRO_DIRS')),
+ # Do not trace $1 for all other macros as we do
+ # not need it and it might contains harmful
+ # characters (like newlines).
+ (map { "--trace='$_:\$f::\$n'" } (keys %macro_seen)));
+
+ verb "running $traces $configure_ac";
+
+ my $tracefh = new Automake::XFile ("$traces $configure_ac |");
+
+ @ac_config_macro_dirs = ();
+
+ my %traced = ();
+
+ while ($_ = $tracefh->getline)
+ {
+ chomp;
+ my ($file, $macro, $arg1) = split (/::/);
+
+ $traced{$macro} = 1 if exists $macro_seen{$macro};
+
+ if ($macro eq 'AC_DEFUN' || $macro eq 'AC_DEFUN_ONCE'
+ || $macro eq 'AU_DEFUN')
+ {
+ $map_traced_defs{$arg1} = $file;
+ }
+ elsif ($macro eq '_AM_AUTOCONF_VERSION')
+ {
+ $ac_version = $arg1;
+ }
+ elsif ($macro eq 'AC_CONFIG_MACRO_DIR_TRACE')
+ {
+ push @ac_config_macro_dirs, $arg1;
+ }
+ # FIXME: We still need to trace AC_CONFIG_MACRO_DIR
+ # for compatibility with older autoconf. Remove this
+ # once we can assume Autoconf 2.70 or later.
+ elsif ($macro eq 'AC_CONFIG_MACRO_DIR')
+ {
+ @ac_config_macro_dirs = ($arg1);
+ }
+ # FIXME:This is an hack for compatibility with older autoconf.
+ # Remove this once we can assume Autoconf 2.70 or later.
+ elsif ($macro eq '_AM_CONFIG_MACRO_DIRS')
+ {
+ # Empty leading/trailing fields might be produced by split,
+ # hence the grep is really needed.
+ push @ac_config_macro_dirs, grep (/./, (split /\s+/, $arg1));
+ }
+ }
+
+ # FIXME: in Autoconf >= 2.70, AC_CONFIG_MACRO_DIR calls
+ # AC_CONFIG_MACRO_DIR_TRACE behind the scenes, which could
+ # leave unwanted duplicates in @ac_config_macro_dirs.
+ # Remove this in Automake 2.0, when we'll stop tracing
+ # AC_CONFIG_MACRO_DIR explicitly.
+ @ac_config_macro_dirs = uniq @ac_config_macro_dirs;
+
+ $tracefh->close;
+
+ return %traced;
+}
+
+sub scan_configure ()
+{
+ # Make sure we include acinclude.m4 if it exists.
+ if (-f 'acinclude.m4')
+ {
+ add_file ('acinclude.m4');
+ }
+ scan_configure_dep ($configure_ac);
+}
+
+################################################################
+
+# Write output.
+# Return 0 iff some files were installed locally.
+sub write_aclocal ($@)
+{
+ my ($output_file, @macros) = @_;
+ my $output = '';
+
+ my %files = ();
+ # Get the list of files containing definitions for the macros used.
+ # (Filter out unused macro definitions with $map_traced_defs. This
+ # can happen when an Autoconf macro is conditionally defined:
+ # aclocal sees the potential definition, but this definition is
+ # actually never processed and the Autoconf implementation is used
+ # instead.)
+ for my $m (@macros)
+ {
+ $files{$map{$m}} = 1
+ if (exists $map_traced_defs{$m}
+ && $map{$m} eq $map_traced_defs{$m});
+ }
+ # Do not explicitly include a file that is already indirectly included.
+ %files = strip_redundant_includes %files;
+
+ my $installed = 0;
+
+ for my $file (grep { exists $files{$_} } @file_order)
+ {
+ # Check the time stamp of this file, and of all files it includes.
+ for my $ifile ($file, @{$file_includes{$file}})
+ {
+ my $mtime = mtime $ifile;
+ $greatest_mtime = $mtime if $greatest_mtime < $mtime;
+ }
+
+ # If the file to add looks like outside the project, copy it
+ # to the output. The regex catches filenames starting with
+ # things like '/', '\', or 'c:\'.
+ if ($file_type{$file} != FT_USER
+ || $file =~ m,^(?:\w:)?[\\/],)
+ {
+ if (!$install || $file_type{$file} != FT_SYSTEM)
+ {
+ # Copy the file into aclocal.m4.
+ $output .= $file_contents{$file} . "\n";
+ }
+ else
+ {
+ # Install the file (and any file it includes).
+ my $dest;
+ for my $ifile (@{$file_includes{$file}}, $file)
+ {
+ install_file ($ifile, $user_includes[0]);
+ }
+ $installed = 1;
+ }
+ }
+ else
+ {
+ # Otherwise, simply include the file.
+ $output .= "m4_include([$file])\n";
+ }
+ }
+
+ if ($installed)
+ {
+ verb "running aclocal anew, because some files were installed locally";
+ return 0;
+ }
+
+ # Nothing to output?!
+ # FIXME: Shouldn't we diagnose this?
+ return 1 if ! length ($output);
+
+ if ($ac_version)
+ {
+ # Do not use "$output_file" here for the same reason we do not
+ # use it in the header below. autom4te will output the name of
+ # the file in the diagnostic anyway.
+ $output = "m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [$ac_version],,
+[m4_warning([this file was generated for autoconf $ac_version.
+You have another version of autoconf. It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically 'autoreconf'.])])
+
+$output";
+ }
+
+ # We used to print "# $output_file generated automatically etc." But
+ # this creates spurious differences when using autoreconf. Autoreconf
+ # creates aclocal.m4t and then rename it to aclocal.m4, but the
+ # rebuild rules generated by Automake create aclocal.m4 directly --
+ # this would gives two ways to get the same file, with a different
+ # name in the header.
+ $output = "# generated automatically by aclocal $VERSION -*- Autoconf -*-
+
+# Copyright (C) 1996-$RELEASE_YEAR Free Software Foundation, Inc.
+
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+$ac_config_macro_dirs_fallback
+$output";
+
+ # We try not to update $output_file unless necessary, because
+ # doing so invalidate Autom4te's cache and therefore slows down
+ # tools called after aclocal.
+ #
+ # We need to overwrite $output_file in the following situations.
+ # * The --force option is in use.
+ # * One of the dependencies is younger.
+ # (Not updating $output_file in this situation would cause
+ # make to call aclocal in loop.)
+ # * The contents of the current file are different from what
+ # we have computed.
+ if (!$force_output
+ && $greatest_mtime < mtime ($output_file)
+ && $output eq contents ($output_file))
+ {
+ verb "$output_file unchanged";
+ return 1;
+ }
+
+ verb "writing $output_file";
+
+ if (!$dry_run)
+ {
+ if (-e $output_file && !unlink $output_file)
+ {
+ fatal "could not remove '$output_file': $!";
+ }
+ my $out = new Automake::XFile "> $output_file";
+ print $out $output;
+ }
+ return 1;
+}
+
+################################################################
+
+# Print usage and exit.
+sub usage ($)
+{
+ my ($status) = @_;
+
+ print <<'EOF';
+Usage: aclocal [OPTION]...
+
+Generate 'aclocal.m4' by scanning 'configure.ac' or 'configure.in'
+
+Options:
+ --automake-acdir=DIR directory holding automake-provided m4 files
+ --system-acdir=DIR directory holding third-party system-wide files
+ --diff[=COMMAND] run COMMAND [diff -u] on M4 files that would be
+ changed (implies --install and --dry-run)
+ --dry-run pretend to, but do not actually update any file
+ --force always update output file
+ --help print this help, then exit
+ -I DIR add directory to search list for .m4 files
+ --install copy third-party files to the first -I directory
+ --output=FILE put output in FILE (default aclocal.m4)
+ --print-ac-dir print name of directory holding system-wide
+ third-party m4 files, then exit
+ --verbose don't be silent
+ --version print version number, then exit
+ -W, --warnings=CATEGORY report the warnings falling in CATEGORY
+
+Warning categories include:
+ syntax dubious syntactic constructs (default)
+ unsupported unknown macros (default)
+ all all the warnings (default)
+ no-CATEGORY turn off warnings in CATEGORY
+ none turn off all the warnings
+ error treat warnings as errors
+
+Report bugs to <@PACKAGE_BUGREPORT@>.
+GNU Automake home page: <@PACKAGE_URL@>.
+General help using GNU software: <https://www.gnu.org/gethelp/>.
+EOF
+ exit $status;
+}
+
+# Print version and exit.
+sub version ()
+{
+ print <<EOF;
+aclocal (GNU $PACKAGE) $VERSION
+Copyright (C) $RELEASE_YEAR Free Software Foundation, Inc.
+License GPLv2+: GNU GPL version 2 or later <https://gnu.org/licenses/gpl-2.0.html>
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+
+Written by Tom Tromey <tromey\@redhat.com>
+ and Alexandre Duret-Lutz <adl\@gnu.org>.
+EOF
+ exit 0;
+}
+
+# Parse command line.
+sub parse_arguments ()
+{
+ my $print_and_exit = 0;
+ my $diff_command;
+
+ my %cli_options =
+ (
+ 'help' => sub { usage(0); },
+ 'version' => \&version,
+ 'system-acdir=s' => sub { shift; @system_includes = @_; },
+ 'automake-acdir=s' => sub { shift; @automake_includes = @_; },
+ 'diff:s' => \$diff_command,
+ 'dry-run' => \$dry_run,
+ 'force' => \$force_output,
+ 'I=s' => \@user_includes,
+ 'install' => \$install,
+ 'output=s' => \$output_file,
+ 'print-ac-dir' => \$print_and_exit,
+ 'verbose' => sub { setup_channel 'verb', silent => 0; },
+ 'W|warnings=s' => \&parse_warnings,
+ );
+
+ use Automake::Getopt ();
+ Automake::Getopt::parse_options %cli_options;
+
+ if (@ARGV > 0)
+ {
+ fatal ("non-option arguments are not accepted: '$ARGV[0]'.\n"
+ . "Try '$0 --help' for more information.");
+ }
+
+ if ($print_and_exit)
+ {
+ print "@system_includes\n";
+ exit 0;
+ }
+
+ if (defined $diff_command)
+ {
+ $diff_command = 'diff -u' if $diff_command eq '';
+ @diff_command = split (' ', $diff_command);
+ $install = 1;
+ $dry_run = 1;
+ }
+
+ # Finally, adds any directory listed in the 'dirlist' file.
+ if (@system_includes && open (DIRLIST, "$system_includes[0]/dirlist"))
+ {
+ while (<DIRLIST>)
+ {
+ # Ignore '#' lines.
+ next if /^#/;
+ # strip off newlines and end-of-line comments
+ s/\s*\#.*$//;
+ chomp;
+ foreach my $dir (glob)
+ {
+ push (@system_includes, $dir) if -d $dir;
+ }
+ }
+ close (DIRLIST);
+ }
+}
+
+# Add any directory listed in the 'ACLOCAL_PATH' environment variable
+# to the list of system include directories.
+sub parse_ACLOCAL_PATH ()
+{
+ return if not defined $ENV{"ACLOCAL_PATH"};
+ # Directories in ACLOCAL_PATH should take precedence over system
+ # directories, so we use unshift. However, directories that
+ # come first in ACLOCAL_PATH take precedence over directories
+ # coming later, which is why the result of split is reversed.
+ foreach my $dir (reverse split /:/, $ENV{"ACLOCAL_PATH"})
+ {
+ unshift (@system_includes, $dir) if $dir ne '' && -d $dir;
+ }
+}
+
+################################################################
+
+# Don't refer to installation directories from the build environment
+if (exists $ENV{"AUTOMAKE_UNINSTALLED"})
+ {
+ @automake_includes = ();
+ @system_includes = ();
+ }
+
+@automake_includes = ($ENV{"ACLOCAL_AUTOMAKE_DIR"})
+ if (exists $ENV{"ACLOCAL_AUTOMAKE_DIR"});
+
+parse_WARNINGS; # Parse the WARNINGS environment variable.
+parse_arguments;
+parse_ACLOCAL_PATH;
+$configure_ac = require_configure_ac;
+
+# We may have to rerun aclocal if some file have been installed, but
+# it should not happen more than once. The reason we must run again
+# is that once the file has been moved from /usr/share/aclocal/ to the
+# local m4/ directory it appears at a new place in the search path,
+# hence it should be output at a different position in aclocal.m4. If
+# we did not rerun aclocal, the next run of aclocal would produce a
+# different aclocal.m4.
+my $loop = 0;
+my $rerun_due_to_macrodir = 0;
+while (1)
+ {
+ ++$loop;
+ prog_error "too many loops" if $loop > 2 + $rerun_due_to_macrodir;
+
+ reset_maps;
+ scan_m4_files;
+ scan_configure;
+ last if $exit_code;
+ my %macro_traced = trace_used_macros;
+
+ if (!$rerun_due_to_macrodir && @ac_config_macro_dirs)
+ {
+ # The directory specified in calls to the AC_CONFIG_MACRO_DIRS
+ # m4 macro (if any) must go after the user includes specified
+ # explicitly with the '-I' option.
+ push @user_includes, @ac_config_macro_dirs;
+ # We might have to scan some new directory of .m4 files.
+ $rerun_due_to_macrodir++;
+ next;
+ }
+
+ if ($install && !@user_includes)
+ {
+ fatal "installation of third-party macros impossible without " .
+ "-I options nor AC_CONFIG_MACRO_DIR{,S} m4 macro(s)";
+ }
+
+ last if write_aclocal ($output_file, keys %macro_traced);
+ last if $dry_run;
+ }
+check_acinclude;
+
+exit $exit_code;
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/bin/automake.in b/bin/automake.in
new file mode 100644
index 000000000..653340563
--- /dev/null
+++ b/bin/automake.in
@@ -0,0 +1,8396 @@
+#!@PERL@ -w
+# -*- perl -*-
+# @configure_input@
+
+eval 'case $# in 0) exec @PERL@ -S "$0";; *) exec @PERL@ -S "$0" "$@";; esac'
+ if 0;
+
+# automake - create Makefile.in from Makefile.am
+# Copyright (C) 1994-2017 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 <https://www.gnu.org/licenses/>.
+
+# Originally written by David Mackenzie <djm@gnu.ai.mit.edu>.
+# Perl reimplementation by Tom Tromey <tromey@redhat.com>, and
+# Alexandre Duret-Lutz <adl@gnu.org>.
+
+package Automake;
+
+use strict;
+
+BEGIN
+{
+ unshift (@INC, '@datadir@/@PACKAGE@-@APIVERSION@')
+ unless $ENV{AUTOMAKE_UNINSTALLED};
+
+ # Override SHELL. This is required on DJGPP so that system() uses
+ # bash, not COMMAND.COM which doesn't quote arguments properly.
+ # Other systems aren't expected to use $SHELL when Automake
+ # runs, but it should be safe to drop the "if DJGPP" guard if
+ # it turns up other systems need the same thing. After all,
+ # if SHELL is used, ./configure's SHELL is always better than
+ # the user's SHELL (which may be something like tcsh).
+ $ENV{'SHELL'} = '@SHELL@' if exists $ENV{'DJDIR'};
+}
+
+use Automake::Config;
+BEGIN
+{
+ if ($perl_threads)
+ {
+ require threads;
+ import threads;
+ require Thread::Queue;
+ import Thread::Queue;
+ }
+}
+use Automake::General;
+use Automake::XFile;
+use Automake::Channels;
+use Automake::ChannelDefs;
+use Automake::Configure_ac;
+use Automake::FileUtils;
+use Automake::Location;
+use Automake::Condition qw/TRUE FALSE/;
+use Automake::DisjConditions;
+use Automake::Options;
+use Automake::Variable;
+use Automake::VarDef;
+use Automake::Rule;
+use Automake::RuleDef;
+use Automake::Wrap 'makefile_wrap';
+use Automake::Language;
+use File::Basename;
+use File::Spec;
+use List::Util 'none';
+use Carp;
+
+## ----------------------- ##
+## Subroutine prototypes. ##
+## ----------------------- ##
+
+sub append_exeext (&$);
+sub check_gnits_standards ();
+sub check_gnu_standards ();
+sub check_trailing_slash ($\$);
+sub check_typos ();
+sub define_files_variable ($\@$$);
+sub define_standard_variables ();
+sub define_verbose_libtool ();
+sub define_verbose_texinfo ();
+sub do_check_merge_target ();
+sub get_number_of_threads ();
+sub handle_compile ();
+sub handle_data ();
+sub handle_dist ();
+sub handle_emacs_lisp ();
+sub handle_factored_dependencies ();
+sub handle_footer ();
+sub handle_gettext ();
+sub handle_headers ();
+sub handle_install ();
+sub handle_java ();
+sub handle_languages ();
+sub handle_libraries ();
+sub handle_libtool ();
+sub handle_ltlibraries ();
+sub handle_makefiles_serial ();
+sub handle_man_pages ();
+sub handle_minor_options ();
+sub handle_options ();
+sub handle_programs ();
+sub handle_python ();
+sub handle_scripts ();
+sub handle_silent ();
+sub handle_subdirs ();
+sub handle_tags ();
+sub handle_targets ();
+sub handle_tests ();
+sub handle_tests_dejagnu ();
+sub handle_texinfo ();
+sub handle_user_recursion ();
+sub initialize_per_input ();
+sub lang_lex_finish ();
+sub lang_sub_obj ();
+sub lang_vala_finish ();
+sub lang_yacc_finish ();
+sub locate_aux_dir ();
+sub parse_arguments ();
+sub scan_aclocal_m4 ();
+sub scan_autoconf_files ();
+sub silent_flag ();
+sub transform ($\%);
+sub transform_token ($\%$);
+sub usage ();
+sub version ();
+sub yacc_lex_finish_helper ();
+
+## ----------- ##
+## Constants. ##
+## ----------- ##
+
+# Some regular expressions. One reason to put them here is that it
+# makes indentation work better in Emacs.
+
+# Writing singled-quoted-$-terminated regexes is a pain because
+# perl-mode thinks of $' as the ${'} variable (instead of a $ followed
+# by a closing quote. Letting perl-mode think the quote is not closed
+# leads to all sort of misindentations. On the other hand, defining
+# regexes as double-quoted strings is far less readable. So usually
+# we will write:
+#
+# $REGEX = '^regex_value' . "\$";
+
+my $IGNORE_PATTERN = '^\s*##([^#\n].*)?\n';
+my $WHITE_PATTERN = '^\s*' . "\$";
+my $COMMENT_PATTERN = '^#';
+my $TARGET_PATTERN='[$a-zA-Z0-9_.@%][-.a-zA-Z0-9_(){}/$+@%]*';
+# A rule has three parts: a list of targets, a list of dependencies,
+# and optionally actions.
+my $RULE_PATTERN =
+ "^($TARGET_PATTERN(?:(?:\\\\\n|\\s)+$TARGET_PATTERN)*) *:([^=].*|)\$";
+
+# Only recognize leading spaces, not leading tabs. If we recognize
+# leading tabs here then we need to make the reader smarter, because
+# otherwise it will think rules like 'foo=bar; \' are errors.
+my $ASSIGNMENT_PATTERN = '^ *([^ \t=:+]*)\s*([:+]?)=\s*(.*)' . "\$";
+# This pattern recognizes a Gnits version id and sets $1 if the
+# release is an alpha release. We also allow a suffix which can be
+# used to extend the version number with a "fork" identifier.
+my $GNITS_VERSION_PATTERN = '\d+\.\d+([a-z]|\.\d+)?(-[A-Za-z0-9]+)?';
+
+my $IF_PATTERN = '^if\s+(!?)\s*([A-Za-z][A-Za-z0-9_]*)\s*(?:#.*)?' . "\$";
+my $ELSE_PATTERN =
+ '^else(?:\s+(!?)\s*([A-Za-z][A-Za-z0-9_]*))?\s*(?:#.*)?' . "\$";
+my $ENDIF_PATTERN =
+ '^endif(?:\s+(!?)\s*([A-Za-z][A-Za-z0-9_]*))?\s*(?:#.*)?' . "\$";
+my $PATH_PATTERN = '(\w|[+/.-])+';
+# This will pass through anything not of the prescribed form.
+my $INCLUDE_PATTERN = ('^include\s+'
+ . '((\$\(top_srcdir\)/' . $PATH_PATTERN . ')'
+ . '|(\$\(srcdir\)/' . $PATH_PATTERN . ')'
+ . '|([^/\$]' . $PATH_PATTERN . '))\s*(#.*)?' . "\$");
+
+# Directories installed during 'install-exec' phase.
+my $EXEC_DIR_PATTERN =
+ '^(?:bin|sbin|libexec|sysconf|localstate|lib|pkglib|.*exec.*)' . "\$";
+
+# Values for AC_CANONICAL_*
+use constant AC_CANONICAL_BUILD => 1;
+use constant AC_CANONICAL_HOST => 2;
+use constant AC_CANONICAL_TARGET => 3;
+
+# Values indicating when something should be cleaned.
+use constant MOSTLY_CLEAN => 0;
+use constant CLEAN => 1;
+use constant DIST_CLEAN => 2;
+use constant MAINTAINER_CLEAN => 3;
+
+# Libtool files.
+my @libtool_files = qw(ltmain.sh config.guess config.sub);
+# ltconfig appears here for compatibility with old versions of libtool.
+my @libtool_sometimes = qw(ltconfig ltcf-c.sh ltcf-cxx.sh ltcf-gcj.sh);
+
+# Commonly found files we look for and automatically include in
+# DISTFILES.
+my @common_files =
+ (qw(ABOUT-GNU ABOUT-NLS AUTHORS BACKLOG COPYING COPYING.DOC COPYING.LIB
+ COPYING.LESSER ChangeLog INSTALL NEWS README THANKS TODO
+ ar-lib compile config.guess config.rpath
+ config.sub depcomp install-sh libversion.in mdate-sh
+ missing mkinstalldirs py-compile texinfo.tex ylwrap),
+ @libtool_files, @libtool_sometimes);
+
+# Commonly used files we auto-include, but only sometimes. This list
+# is used for the --help output only.
+my @common_sometimes =
+ qw(aclocal.m4 acconfig.h config.h.top config.h.bot configure
+ configure.ac configure.in stamp-vti);
+
+# Standard directories from the GNU Coding Standards, and additional
+# pkg* directories from Automake. Stored in a hash for fast member check.
+my %standard_prefix =
+ map { $_ => 1 } (qw(bin data dataroot doc dvi exec html include info
+ lib libexec lisp locale localstate man man1 man2
+ man3 man4 man5 man6 man7 man8 man9 oldinclude pdf
+ pkgdata pkginclude pkglib pkglibexec ps sbin
+ sharedstate sysconf));
+
+# Copyright on generated Makefile.ins.
+my $gen_copyright = "\
+# Copyright (C) 1994-$RELEASE_YEAR Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+";
+
+# These constants are returned by the lang_*_rewrite functions.
+# LANG_SUBDIR means that the resulting object file should be in a
+# subdir if the source file is. In this case the file name cannot
+# have '..' components.
+use constant LANG_IGNORE => 0;
+use constant LANG_PROCESS => 1;
+use constant LANG_SUBDIR => 2;
+
+# These are used when keeping track of whether an object can be built
+# by two different paths.
+use constant COMPILE_LIBTOOL => 1;
+use constant COMPILE_ORDINARY => 2;
+
+# We can't always associate a location to a variable or a rule,
+# when it's defined by Automake. We use INTERNAL in this case.
+use constant INTERNAL => new Automake::Location;
+
+# Serialization keys for message queues.
+use constant QUEUE_MESSAGE => "msg";
+use constant QUEUE_CONF_FILE => "conf file";
+use constant QUEUE_LOCATION => "location";
+use constant QUEUE_STRING => "string";
+
+## ---------------------------------- ##
+## Variables related to the options. ##
+## ---------------------------------- ##
+
+# TRUE if we should always generate Makefile.in.
+my $force_generation = 1;
+
+# From the Perl manual.
+my $symlink_exists = (eval 'symlink ("", "");', $@ eq '');
+
+# TRUE if missing standard files should be installed.
+my $add_missing = 0;
+
+# TRUE if we should copy missing files; otherwise symlink if possible.
+my $copy_missing = 0;
+
+# TRUE if we should always update files that we know about.
+my $force_missing = 0;
+
+
+## ---------------------------------------- ##
+## Variables filled during files scanning. ##
+## ---------------------------------------- ##
+
+# Name of the configure.ac file.
+my $configure_ac;
+
+# Files found by scanning configure.ac for LIBOBJS.
+my %libsources = ();
+
+# Names used in AC_CONFIG_HEADERS call.
+my @config_headers = ();
+
+# Names used in AC_CONFIG_LINKS call.
+my @config_links = ();
+
+# List of Makefile.am's to process, and their corresponding outputs.
+my @input_files = ();
+my %output_files = ();
+
+# Complete list of Makefile.am's that exist.
+my @configure_input_files = ();
+
+# List of files in AC_CONFIG_FILES/AC_OUTPUT without Makefile.am's,
+# and their outputs.
+my @other_input_files = ();
+# Where each AC_CONFIG_FILES/AC_OUTPUT/AC_CONFIG_LINK/AC_CONFIG_HEADERS
+# appears. The keys are the files created by these macros.
+my %ac_config_files_location = ();
+# The condition under which AC_CONFIG_FOOS appears.
+my %ac_config_files_condition = ();
+
+# Directory to search for configure-required files. This
+# will be computed by locate_aux_dir() and can be set using
+# AC_CONFIG_AUX_DIR in configure.ac.
+# $CONFIG_AUX_DIR is the 'raw' directory, valid only in the source-tree.
+my $config_aux_dir = '';
+my $config_aux_dir_set_in_configure_ac = 0;
+# $AM_CONFIG_AUX_DIR is prefixed with $(top_srcdir), so it can be used
+# in Makefiles.
+my $am_config_aux_dir = '';
+
+# Directory to search for AC_LIBSOURCE files, as set by AC_CONFIG_LIBOBJ_DIR
+# in configure.ac.
+my $config_libobj_dir = '';
+
+# Whether AM_GNU_GETTEXT has been seen in configure.ac.
+my $seen_gettext = 0;
+# Whether AM_GNU_GETTEXT([external]) is used.
+my $seen_gettext_external = 0;
+# Where AM_GNU_GETTEXT appears.
+my $ac_gettext_location;
+# Whether AM_GNU_GETTEXT_INTL_SUBDIR has been seen.
+my $seen_gettext_intl = 0;
+
+# The arguments of the AM_EXTRA_RECURSIVE_TARGETS call (if any).
+my @extra_recursive_targets = ();
+
+# Lists of tags supported by Libtool.
+my %libtool_tags = ();
+# 1 if Libtool uses LT_SUPPORTED_TAG. If it does, then it also
+# uses AC_REQUIRE_AUX_FILE.
+my $libtool_new_api = 0;
+
+# Most important AC_CANONICAL_* macro seen so far.
+my $seen_canonical = 0;
+
+# Where AM_MAINTAINER_MODE appears.
+my $seen_maint_mode;
+
+# Actual version we've seen.
+my $package_version = '';
+
+# Where version is defined.
+my $package_version_location;
+
+# TRUE if we've seen AM_PROG_AR
+my $seen_ar = 0;
+
+# Location of AC_REQUIRE_AUX_FILE calls, indexed by their argument.
+my %required_aux_file = ();
+
+# Where AM_INIT_AUTOMAKE is called.
+my $seen_init_automake = 0;
+
+# TRUE if we've seen AM_AUTOMAKE_VERSION.
+my $seen_automake_version = 0;
+
+# Hash table of discovered configure substitutions. Keys are names,
+# values are 'FILE:LINE' strings which are used by error message
+# generation.
+my %configure_vars = ();
+
+# Ignored configure substitutions (i.e., variables not to be output in
+# Makefile.in)
+my %ignored_configure_vars = ();
+
+# Files included by $configure_ac.
+my @configure_deps = ();
+
+# Greatest timestamp of configure's dependencies.
+my $configure_deps_greatest_timestamp = 0;
+
+# Hash table of AM_CONDITIONAL variables seen in configure.
+my %configure_cond = ();
+
+# This maps extensions onto language names.
+my %extension_map = ();
+
+# List of the DIST_COMMON files we discovered while reading
+# configure.ac.
+my @configure_dist_common = ();
+
+# This maps languages names onto objects.
+my %languages = ();
+# Maps each linker variable onto a language object.
+my %link_languages = ();
+
+# maps extensions to needed source flags.
+my %sourceflags = ();
+
+# List of targets we must always output.
+# FIXME: Complete, and remove falsely required targets.
+my %required_targets =
+ (
+ 'all' => 1,
+ 'dvi' => 1,
+ 'pdf' => 1,
+ 'ps' => 1,
+ 'info' => 1,
+ 'install-info' => 1,
+ 'install' => 1,
+ 'install-data' => 1,
+ 'install-exec' => 1,
+ 'uninstall' => 1,
+
+ # FIXME: Not required, temporary hacks.
+ # Well, actually they are sort of required: the -recursive
+ # targets will run them anyway...
+ 'html-am' => 1,
+ 'dvi-am' => 1,
+ 'pdf-am' => 1,
+ 'ps-am' => 1,
+ 'info-am' => 1,
+ 'install-data-am' => 1,
+ 'install-exec-am' => 1,
+ 'install-html-am' => 1,
+ 'install-dvi-am' => 1,
+ 'install-pdf-am' => 1,
+ 'install-ps-am' => 1,
+ 'install-info-am' => 1,
+ 'installcheck-am' => 1,
+ 'uninstall-am' => 1,
+ 'tags-am' => 1,
+ 'ctags-am' => 1,
+ 'cscopelist-am' => 1,
+ 'install-man' => 1,
+ );
+
+# Queue to push require_conf_file requirements to.
+my $required_conf_file_queue;
+
+# The name of the Makefile currently being processed.
+my $am_file = 'BUG';
+
+################################################################
+
+## ------------------------------------------ ##
+## Variables reset by &initialize_per_input. ##
+## ------------------------------------------ ##
+
+# Relative dir of the output makefile.
+my $relative_dir;
+
+# Greatest timestamp of the output's dependencies (excluding
+# configure's dependencies).
+my $output_deps_greatest_timestamp;
+
+# These variables are used when generating each Makefile.in.
+# They hold the Makefile.in until it is ready to be printed.
+my $output_vars;
+my $output_all;
+my $output_header;
+my $output_rules;
+my $output_trailer;
+
+# This is the conditional stack, updated on if/else/endif, and
+# used to build Condition objects.
+my @cond_stack;
+
+# This holds the set of included files.
+my @include_stack;
+
+# List of dependencies for the obvious targets.
+my @all;
+my @check;
+my @check_tests;
+
+# Keys in this hash table are files to delete. The associated
+# value tells when this should happen (MOSTLY_CLEAN, DIST_CLEAN, etc.)
+my %clean_files;
+
+# Keys in this hash table are object files or other files in
+# subdirectories which need to be removed. This only holds files
+# which are created by compilations. The value in the hash indicates
+# when the file should be removed.
+my %compile_clean_files;
+
+# Keys in this hash table are directories where we expect to build a
+# libtool object. We use this information to decide what directories
+# to delete.
+my %libtool_clean_directories;
+
+# Value of $(SOURCES), used by tags.am.
+my @sources;
+# Sources which go in the distribution.
+my @dist_sources;
+
+# This hash maps object file names onto their corresponding source
+# file names. This is used to ensure that each object is created
+# by a single source file.
+my %object_map;
+
+# This hash maps object file names onto an integer value representing
+# whether this object has been built via ordinary compilation or
+# libtool compilation (the COMPILE_* constants).
+my %object_compilation_map;
+
+
+# This keeps track of the directories for which we've already
+# created dirstamp code. Keys are directories, values are stamp files.
+# Several keys can share the same stamp files if they are equivalent
+# (as are './/foo' and 'foo').
+my %directory_map;
+
+# All .P files.
+my %dep_files;
+
+# This is a list of all targets to run during "make dist".
+my @dist_targets;
+
+# List of all programs, libraries and ltlibraries as returned
+# by am_install_var
+my @proglist;
+my @liblist;
+my @ltliblist;
+# Blacklist of targets (as canonical base name) for which object file names
+# may not be automatically shortened
+my @dup_shortnames;
+
+# Keep track of all programs declared in this Makefile, without
+# $(EXEEXT). @substitutions@ are not listed.
+my %known_programs;
+my %known_libraries;
+
+# This keeps track of which extensions we've seen (that we care
+# about).
+my %extension_seen;
+
+# This is random scratch space for the language finish functions.
+# Don't randomly overwrite it; examine other uses of keys first.
+my %language_scratch;
+
+# We keep track of which objects need special (per-executable)
+# handling on a per-language basis.
+my %lang_specific_files;
+
+# List of distributed files to be put in DIST_COMMON.
+my @dist_common;
+
+# This is set when 'handle_dist' has finished. Once this happens,
+# we should no longer push on dist_common.
+my $handle_dist_run;
+
+# Used to store a set of linkers needed to generate the sources currently
+# under consideration.
+my %linkers_used;
+
+# True if we need 'LINK' defined. This is a hack.
+my $need_link;
+
+# Does the generated Makefile have to build some compiled object
+# (for binary programs, or plain or libtool libraries)?
+my $must_handle_compiled_objects;
+
+# Record each file processed by make_paragraphs.
+my %transformed_files;
+
+################################################################
+
+## ---------------------------------------------- ##
+## Variables not reset by &initialize_per_input. ##
+## ---------------------------------------------- ##
+
+# Cache each file processed by make_paragraphs.
+# (This is different from %transformed_files because
+# %transformed_files is reset for each file while %am_file_cache
+# it global to the run.)
+my %am_file_cache;
+
+################################################################
+
+# var_SUFFIXES_trigger ($TYPE, $VALUE)
+# ------------------------------------
+# This is called by Automake::Variable::define() when SUFFIXES
+# is defined ($TYPE eq '') or appended ($TYPE eq '+').
+# The work here needs to be performed as a side-effect of the
+# macro_define() call because SUFFIXES definitions impact
+# on $KNOWN_EXTENSIONS_PATTERN which is used used when parsing
+# the input am file.
+sub var_SUFFIXES_trigger
+{
+ my ($type, $value) = @_;
+ accept_extensions (split (' ', $value));
+}
+Automake::Variable::hook ('SUFFIXES', \&var_SUFFIXES_trigger);
+
+################################################################
+
+
+# initialize_per_input ()
+# -----------------------
+# (Re)-Initialize per-Makefile.am variables.
+sub initialize_per_input ()
+{
+ reset_local_duplicates ();
+
+ $relative_dir = undef;
+
+ $output_deps_greatest_timestamp = 0;
+
+ $output_vars = '';
+ $output_all = '';
+ $output_header = '';
+ $output_rules = '';
+ $output_trailer = '';
+
+ Automake::Options::reset;
+ Automake::Variable::reset;
+ Automake::Rule::reset;
+
+ @cond_stack = ();
+
+ @include_stack = ();
+
+ @all = ();
+ @check = ();
+ @check_tests = ();
+
+ %clean_files = ();
+ %compile_clean_files = ();
+
+ # We always include '.'. This isn't strictly correct.
+ %libtool_clean_directories = ('.' => 1);
+
+ @sources = ();
+ @dist_sources = ();
+
+ %object_map = ();
+ %object_compilation_map = ();
+
+ %directory_map = ();
+
+ %dep_files = ();
+
+ @dist_targets = ();
+
+ @dist_common = ();
+ $handle_dist_run = 0;
+
+ @proglist = ();
+ @liblist = ();
+ @ltliblist = ();
+ @dup_shortnames = ();
+
+ %known_programs = ();
+ %known_libraries = ();
+
+ %extension_seen = ();
+
+ %language_scratch = ();
+
+ %lang_specific_files = ();
+
+ $need_link = 0;
+
+ $must_handle_compiled_objects = 0;
+
+ %transformed_files = ();
+}
+
+
+################################################################
+
+# Initialize our list of languages that are internally supported.
+
+my @cpplike_flags =
+ qw{
+ $(DEFS)
+ $(DEFAULT_INCLUDES)
+ $(INCLUDES)
+ $(AM_CPPFLAGS)
+ $(CPPFLAGS)
+ };
+
+# C.
+register_language ('name' => 'c',
+ 'Name' => 'C',
+ 'config_vars' => ['CC'],
+ 'autodep' => '',
+ 'flags' => ['CFLAGS', 'CPPFLAGS'],
+ 'ccer' => 'CC',
+ 'compiler' => 'COMPILE',
+ 'compile' => "\$(CC) @cpplike_flags \$(AM_CFLAGS) \$(CFLAGS)",
+ 'lder' => 'CCLD',
+ 'ld' => '$(CC)',
+ 'linker' => 'LINK',
+ 'link' => '$(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@',
+ 'compile_flag' => '-c',
+ 'output_flag' => '-o',
+ 'libtool_tag' => 'CC',
+ 'extensions' => ['.c']);
+
+# C++.
+register_language ('name' => 'cxx',
+ 'Name' => 'C++',
+ 'config_vars' => ['CXX'],
+ 'linker' => 'CXXLINK',
+ 'link' => '$(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@',
+ 'autodep' => 'CXX',
+ 'flags' => ['CXXFLAGS', 'CPPFLAGS'],
+ 'compile' => "\$(CXX) @cpplike_flags \$(AM_CXXFLAGS) \$(CXXFLAGS)",
+ 'ccer' => 'CXX',
+ 'compiler' => 'CXXCOMPILE',
+ 'compile_flag' => '-c',
+ 'output_flag' => '-o',
+ 'libtool_tag' => 'CXX',
+ 'lder' => 'CXXLD',
+ 'ld' => '$(CXX)',
+ 'pure' => 1,
+ 'extensions' => ['.c++', '.cc', '.cpp', '.cxx', '.C']);
+
+# Objective C.
+register_language ('name' => 'objc',
+ 'Name' => 'Objective C',
+ 'config_vars' => ['OBJC'],
+ 'linker' => 'OBJCLINK',
+ 'link' => '$(OBJCLD) $(AM_OBJCFLAGS) $(OBJCFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@',
+ 'autodep' => 'OBJC',
+ 'flags' => ['OBJCFLAGS', 'CPPFLAGS'],
+ 'compile' => "\$(OBJC) @cpplike_flags \$(AM_OBJCFLAGS) \$(OBJCFLAGS)",
+ 'ccer' => 'OBJC',
+ 'compiler' => 'OBJCCOMPILE',
+ 'compile_flag' => '-c',
+ 'output_flag' => '-o',
+ 'lder' => 'OBJCLD',
+ 'ld' => '$(OBJC)',
+ 'pure' => 1,
+ 'extensions' => ['.m']);
+
+# Objective C++.
+register_language ('name' => 'objcxx',
+ 'Name' => 'Objective C++',
+ 'config_vars' => ['OBJCXX'],
+ 'linker' => 'OBJCXXLINK',
+ 'link' => '$(OBJCXXLD) $(AM_OBJCXXFLAGS) $(OBJCXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@',
+ 'autodep' => 'OBJCXX',
+ 'flags' => ['OBJCXXFLAGS', 'CPPFLAGS'],
+ 'compile' => "\$(OBJCXX) @cpplike_flags \$(AM_OBJCXXFLAGS) \$(OBJCXXFLAGS)",
+ 'ccer' => 'OBJCXX',
+ 'compiler' => 'OBJCXXCOMPILE',
+ 'compile_flag' => '-c',
+ 'output_flag' => '-o',
+ 'lder' => 'OBJCXXLD',
+ 'ld' => '$(OBJCXX)',
+ 'pure' => 1,
+ 'extensions' => ['.mm']);
+
+# Unified Parallel C.
+register_language ('name' => 'upc',
+ 'Name' => 'Unified Parallel C',
+ 'config_vars' => ['UPC'],
+ 'linker' => 'UPCLINK',
+ 'link' => '$(UPCLD) $(AM_UPCFLAGS) $(UPCFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@',
+ 'autodep' => 'UPC',
+ 'flags' => ['UPCFLAGS', 'CPPFLAGS'],
+ 'compile' => "\$(UPC) @cpplike_flags \$(AM_UPCFLAGS) \$(UPCFLAGS)",
+ 'ccer' => 'UPC',
+ 'compiler' => 'UPCCOMPILE',
+ 'compile_flag' => '-c',
+ 'output_flag' => '-o',
+ 'lder' => 'UPCLD',
+ 'ld' => '$(UPC)',
+ 'pure' => 1,
+ 'extensions' => ['.upc']);
+
+# Headers.
+register_language ('name' => 'header',
+ 'Name' => 'Header',
+ 'extensions' => ['.h', '.H', '.hxx', '.h++', '.hh',
+ '.hpp', '.inc'],
+ # No output.
+ 'output_extensions' => sub { return () },
+ # Nothing to do.
+ '_finish' => sub { });
+
+# Vala
+register_language ('name' => 'vala',
+ 'Name' => 'Vala',
+ 'config_vars' => ['VALAC'],
+ 'flags' => [],
+ 'compile' => '$(VALAC) $(AM_VALAFLAGS) $(VALAFLAGS)',
+ 'ccer' => 'VALAC',
+ 'compiler' => 'VALACOMPILE',
+ 'extensions' => ['.vala'],
+ 'output_extensions' => sub { (my $ext = $_[0]) =~ s/vala$/c/;
+ return ($ext,) },
+ 'rule_file' => 'vala',
+ '_finish' => \&lang_vala_finish,
+ '_target_hook' => \&lang_vala_target_hook,
+ 'nodist_specific' => 1);
+
+# Yacc (C & C++).
+register_language ('name' => 'yacc',
+ 'Name' => 'Yacc',
+ 'config_vars' => ['YACC'],
+ 'flags' => ['YFLAGS'],
+ 'compile' => '$(YACC) $(AM_YFLAGS) $(YFLAGS)',
+ 'ccer' => 'YACC',
+ 'compiler' => 'YACCCOMPILE',
+ 'extensions' => ['.y'],
+ 'output_extensions' => sub { (my $ext = $_[0]) =~ tr/y/c/;
+ return ($ext,) },
+ 'rule_file' => 'yacc',
+ '_finish' => \&lang_yacc_finish,
+ '_target_hook' => \&lang_yacc_target_hook,
+ 'nodist_specific' => 1);
+register_language ('name' => 'yaccxx',
+ 'Name' => 'Yacc (C++)',
+ 'config_vars' => ['YACC'],
+ 'rule_file' => 'yacc',
+ 'flags' => ['YFLAGS'],
+ 'ccer' => 'YACC',
+ 'compiler' => 'YACCCOMPILE',
+ 'compile' => '$(YACC) $(AM_YFLAGS) $(YFLAGS)',
+ 'extensions' => ['.y++', '.yy', '.yxx', '.ypp'],
+ 'output_extensions' => sub { (my $ext = $_[0]) =~ tr/y/c/;
+ return ($ext,) },
+ '_finish' => \&lang_yacc_finish,
+ '_target_hook' => \&lang_yacc_target_hook,
+ 'nodist_specific' => 1);
+
+# Lex (C & C++).
+register_language ('name' => 'lex',
+ 'Name' => 'Lex',
+ 'config_vars' => ['LEX'],
+ 'rule_file' => 'lex',
+ 'flags' => ['LFLAGS'],
+ 'compile' => '$(LEX) $(AM_LFLAGS) $(LFLAGS)',
+ 'ccer' => 'LEX',
+ 'compiler' => 'LEXCOMPILE',
+ 'extensions' => ['.l'],
+ 'output_extensions' => sub { (my $ext = $_[0]) =~ tr/l/c/;
+ return ($ext,) },
+ '_finish' => \&lang_lex_finish,
+ '_target_hook' => \&lang_lex_target_hook,
+ 'nodist_specific' => 1);
+register_language ('name' => 'lexxx',
+ 'Name' => 'Lex (C++)',
+ 'config_vars' => ['LEX'],
+ 'rule_file' => 'lex',
+ 'flags' => ['LFLAGS'],
+ 'compile' => '$(LEX) $(AM_LFLAGS) $(LFLAGS)',
+ 'ccer' => 'LEX',
+ 'compiler' => 'LEXCOMPILE',
+ 'extensions' => ['.l++', '.ll', '.lxx', '.lpp'],
+ 'output_extensions' => sub { (my $ext = $_[0]) =~ tr/l/c/;
+ return ($ext,) },
+ '_finish' => \&lang_lex_finish,
+ '_target_hook' => \&lang_lex_target_hook,
+ 'nodist_specific' => 1);
+
+# Assembler.
+register_language ('name' => 'asm',
+ 'Name' => 'Assembler',
+ 'config_vars' => ['CCAS', 'CCASFLAGS'],
+
+ 'flags' => ['CCASFLAGS'],
+ # Users can set AM_CCASFLAGS to include DEFS, INCLUDES,
+ # or anything else required. They can also set CCAS.
+ # Or simply use Preprocessed Assembler.
+ 'compile' => '$(CCAS) $(AM_CCASFLAGS) $(CCASFLAGS)',
+ 'ccer' => 'CCAS',
+ 'compiler' => 'CCASCOMPILE',
+ 'compile_flag' => '-c',
+ 'output_flag' => '-o',
+ 'extensions' => ['.s']);
+
+# Preprocessed Assembler.
+register_language ('name' => 'cppasm',
+ 'Name' => 'Preprocessed Assembler',
+ 'config_vars' => ['CCAS', 'CCASFLAGS'],
+
+ 'autodep' => 'CCAS',
+ 'flags' => ['CCASFLAGS', 'CPPFLAGS'],
+ 'compile' => "\$(CCAS) @cpplike_flags \$(AM_CCASFLAGS) \$(CCASFLAGS)",
+ 'ccer' => 'CPPAS',
+ 'compiler' => 'CPPASCOMPILE',
+ 'compile_flag' => '-c',
+ 'output_flag' => '-o',
+ 'extensions' => ['.S', '.sx']);
+
+# Fortran 77
+register_language ('name' => 'f77',
+ 'Name' => 'Fortran 77',
+ 'config_vars' => ['F77'],
+ 'linker' => 'F77LINK',
+ 'link' => '$(F77LD) $(AM_FFLAGS) $(FFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@',
+ 'flags' => ['FFLAGS'],
+ 'compile' => '$(F77) $(AM_FFLAGS) $(FFLAGS)',
+ 'ccer' => 'F77',
+ 'compiler' => 'F77COMPILE',
+ 'compile_flag' => '-c',
+ 'output_flag' => '-o',
+ 'libtool_tag' => 'F77',
+ 'lder' => 'F77LD',
+ 'ld' => '$(F77)',
+ 'pure' => 1,
+ 'extensions' => ['.f', '.for']);
+
+# Fortran
+register_language ('name' => 'fc',
+ 'Name' => 'Fortran',
+ 'config_vars' => ['FC'],
+ 'linker' => 'FCLINK',
+ 'link' => '$(FCLD) $(AM_FCFLAGS) $(FCFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@',
+ 'flags' => ['FCFLAGS'],
+ 'compile' => '$(FC) $(AM_FCFLAGS) $(FCFLAGS)',
+ 'ccer' => 'FC',
+ 'compiler' => 'FCCOMPILE',
+ 'compile_flag' => '-c',
+ 'output_flag' => '-o',
+ 'libtool_tag' => 'FC',
+ 'lder' => 'FCLD',
+ 'ld' => '$(FC)',
+ 'pure' => 1,
+ 'extensions' => ['.f90', '.f95', '.f03', '.f08']);
+
+# Preprocessed Fortran
+register_language ('name' => 'ppfc',
+ 'Name' => 'Preprocessed Fortran',
+ 'config_vars' => ['FC'],
+ 'linker' => 'FCLINK',
+ 'link' => '$(FCLD) $(AM_FCFLAGS) $(FCFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@',
+ 'lder' => 'FCLD',
+ 'ld' => '$(FC)',
+ 'flags' => ['FCFLAGS', 'CPPFLAGS'],
+ 'ccer' => 'PPFC',
+ 'compiler' => 'PPFCCOMPILE',
+ 'compile' => "\$(FC) @cpplike_flags \$(AM_FCFLAGS) \$(FCFLAGS)",
+ 'compile_flag' => '-c',
+ 'output_flag' => '-o',
+ 'libtool_tag' => 'FC',
+ 'pure' => 1,
+ 'extensions' => ['.F90','.F95', '.F03', '.F08']);
+
+# Preprocessed Fortran 77
+#
+# The current support for preprocessing Fortran 77 just involves
+# passing "$(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS)
+# $(CPPFLAGS)" as additional flags to the Fortran 77 compiler, since
+# this is how GNU Make does it; see the "GNU Make Manual, Edition 0.51
+# for 'make' Version 3.76 Beta" (specifically, from info file
+# '(make)Catalogue of Rules').
+#
+# A better approach would be to write an Autoconf test
+# (i.e. AC_PROG_FPP) for a Fortran 77 preprocessor, because not all
+# Fortran 77 compilers know how to do preprocessing. The Autoconf
+# macro AC_PROG_FPP should test the Fortran 77 compiler first for
+# preprocessing capabilities, and then fall back on cpp (if cpp were
+# available).
+register_language ('name' => 'ppf77',
+ 'Name' => 'Preprocessed Fortran 77',
+ 'config_vars' => ['F77'],
+ 'linker' => 'F77LINK',
+ 'link' => '$(F77LD) $(AM_FFLAGS) $(FFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@',
+ 'lder' => 'F77LD',
+ 'ld' => '$(F77)',
+ 'flags' => ['FFLAGS', 'CPPFLAGS'],
+ 'ccer' => 'PPF77',
+ 'compiler' => 'PPF77COMPILE',
+ 'compile' => "\$(F77) @cpplike_flags \$(AM_FFLAGS) \$(FFLAGS)",
+ 'compile_flag' => '-c',
+ 'output_flag' => '-o',
+ 'libtool_tag' => 'F77',
+ 'pure' => 1,
+ 'extensions' => ['.F']);
+
+# Ratfor.
+register_language ('name' => 'ratfor',
+ 'Name' => 'Ratfor',
+ 'config_vars' => ['F77'],
+ 'linker' => 'F77LINK',
+ 'link' => '$(F77LD) $(AM_FFLAGS) $(FFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@',
+ 'lder' => 'F77LD',
+ 'ld' => '$(F77)',
+ 'flags' => ['RFLAGS', 'FFLAGS'],
+ # FIXME also FFLAGS.
+ 'compile' => '$(F77) $(AM_FFLAGS) $(FFLAGS) $(AM_RFLAGS) $(RFLAGS)',
+ 'ccer' => 'F77',
+ 'compiler' => 'RCOMPILE',
+ 'compile_flag' => '-c',
+ 'output_flag' => '-o',
+ 'libtool_tag' => 'F77',
+ 'pure' => 1,
+ 'extensions' => ['.r']);
+
+# Java via gcj.
+register_language ('name' => 'java',
+ 'Name' => 'Java',
+ 'config_vars' => ['GCJ'],
+ 'linker' => 'GCJLINK',
+ 'link' => '$(GCJLD) $(AM_GCJFLAGS) $(GCJFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@',
+ 'autodep' => 'GCJ',
+ 'flags' => ['GCJFLAGS'],
+ 'compile' => '$(GCJ) $(AM_GCJFLAGS) $(GCJFLAGS)',
+ 'ccer' => 'GCJ',
+ 'compiler' => 'GCJCOMPILE',
+ 'compile_flag' => '-c',
+ 'output_flag' => '-o',
+ 'libtool_tag' => 'GCJ',
+ 'lder' => 'GCJLD',
+ 'ld' => '$(GCJ)',
+ 'pure' => 1,
+ 'extensions' => ['.java', '.class', '.zip', '.jar']);
+
+################################################################
+
+# Error reporting functions.
+
+# err_am ($MESSAGE, [%OPTIONS])
+# -----------------------------
+# Uncategorized errors about the current Makefile.am.
+sub err_am
+{
+ msg_am ('error', @_);
+}
+
+# err_ac ($MESSAGE, [%OPTIONS])
+# -----------------------------
+# Uncategorized errors about configure.ac.
+sub err_ac
+{
+ msg_ac ('error', @_);
+}
+
+# msg_am ($CHANNEL, $MESSAGE, [%OPTIONS])
+# ---------------------------------------
+# Messages about about the current Makefile.am.
+sub msg_am
+{
+ my ($channel, $msg, %opts) = @_;
+ msg $channel, "${am_file}.am", $msg, %opts;
+}
+
+# msg_ac ($CHANNEL, $MESSAGE, [%OPTIONS])
+# ---------------------------------------
+# Messages about about configure.ac.
+sub msg_ac
+{
+ my ($channel, $msg, %opts) = @_;
+ msg $channel, $configure_ac, $msg, %opts;
+}
+
+################################################################
+
+# subst ($TEXT)
+# -------------
+# Return a configure-style substitution using the indicated text.
+# We do this to avoid having the substitutions directly in automake.in;
+# when we do that they are sometimes removed and this causes confusion
+# and bugs.
+sub subst
+{
+ my ($text) = @_;
+ return '@' . $text . '@';
+}
+
+################################################################
+
+
+# $BACKPATH
+# backname ($RELDIR)
+# -------------------
+# If I "cd $RELDIR", then to come back, I should "cd $BACKPATH".
+# For instance 'src/foo' => '../..'.
+# Works with non strictly increasing paths, i.e., 'src/../lib' => '..'.
+sub backname
+{
+ my ($file) = @_;
+ my @res;
+ foreach (split (/\//, $file))
+ {
+ next if $_ eq '.' || $_ eq '';
+ if ($_ eq '..')
+ {
+ pop @res
+ or prog_error ("trying to reverse path '$file' pointing outside tree");
+ }
+ else
+ {
+ push (@res, '..');
+ }
+ }
+ return join ('/', @res) || '.';
+}
+
+################################################################
+
+# Silent rules handling functions.
+
+# verbose_var (NAME)
+# ------------------
+# The public variable stem used to implement silent rules.
+sub verbose_var
+{
+ my ($name) = @_;
+ return 'AM_V_' . $name;
+}
+
+# verbose_private_var (NAME)
+# --------------------------
+# The naming policy for the private variables for silent rules.
+sub verbose_private_var
+{
+ my ($name) = @_;
+ return 'am__v_' . $name;
+}
+
+# define_verbose_var (NAME, VAL-IF-SILENT, [VAL-IF-VERBOSE])
+# ----------------------------------------------------------
+# For silent rules, setup VAR and dispatcher, to expand to
+# VAL-IF-SILENT if silent, to VAL-IF-VERBOSE (defaulting to
+# empty) if not.
+sub define_verbose_var
+{
+ my ($name, $silent_val, $verbose_val) = @_;
+ $verbose_val = '' unless defined $verbose_val;
+ my $var = verbose_var ($name);
+ my $pvar = verbose_private_var ($name);
+ my $silent_var = $pvar . '_0';
+ my $verbose_var = $pvar . '_1';
+ # For typical 'make's, 'configure' replaces AM_V (inside @@) with $(V)
+ # and AM_DEFAULT_V (inside @@) with $(AM_DEFAULT_VERBOSITY).
+ # For strict POSIX 2008 'make's, it replaces them with 0 or 1 instead.
+ # See AM_SILENT_RULES in m4/silent.m4.
+ define_variable ($var, '$(' . $pvar . '_@'.'AM_V'.'@)', INTERNAL);
+ define_variable ($pvar . '_', '$(' . $pvar . '_@'.'AM_DEFAULT_V'.'@)',
+ INTERNAL);
+ Automake::Variable::define ($silent_var, VAR_AUTOMAKE, '', TRUE,
+ $silent_val, '', INTERNAL, VAR_ASIS)
+ if (! vardef ($silent_var, TRUE));
+ Automake::Variable::define ($verbose_var, VAR_AUTOMAKE, '', TRUE,
+ $verbose_val, '', INTERNAL, VAR_ASIS)
+ if (! vardef ($verbose_var, TRUE));
+}
+
+# verbose_flag (NAME)
+# -------------------
+# Contents of '%VERBOSE%' variable to expand before rule command.
+sub verbose_flag
+{
+ my ($name) = @_;
+ return '$(' . verbose_var ($name) . ')';
+}
+
+sub verbose_nodep_flag
+{
+ my ($name) = @_;
+ return '$(' . verbose_var ($name) . subst ('am__nodep') . ')';
+}
+
+# silent_flag
+# -----------
+# Contents of %SILENT%: variable to expand to '@' when silent.
+sub silent_flag ()
+{
+ return verbose_flag ('at');
+}
+
+# define_verbose_tagvar (NAME)
+# ----------------------------
+# Engage the needed silent rules machinery for tag NAME.
+sub define_verbose_tagvar
+{
+ my ($name) = @_;
+ define_verbose_var ($name, '@echo " '. $name . ' ' x (8 - length ($name)) . '" $@;');
+}
+
+# Engage the needed silent rules machinery for assorted texinfo commands.
+sub define_verbose_texinfo ()
+{
+ my @tagvars = ('DVIPS', 'MAKEINFO', 'INFOHTML', 'TEXI2DVI', 'TEXI2PDF');
+ foreach my $tag (@tagvars)
+ {
+ define_verbose_tagvar($tag);
+ }
+ define_verbose_var('texinfo', '-q');
+ define_verbose_var('texidevnull', '> /dev/null');
+}
+
+# Engage the needed silent rules machinery for 'libtool --silent'.
+sub define_verbose_libtool ()
+{
+ define_verbose_var ('lt', '--silent');
+ return verbose_flag ('lt');
+}
+
+sub handle_silent ()
+{
+ # Define "$(AM_V_P)", expanding to a shell conditional that can be
+ # used in make recipes to determine whether we are being run in
+ # silent mode or not. The choice of the name derives from the LISP
+ # convention of appending the letter 'P' to denote a predicate (see
+ # also "the '-P' convention" in the Jargon File); we do so for lack
+ # of a better convention.
+ define_verbose_var ('P', 'false', ':');
+ # *Always* provide the user with '$(AM_V_GEN)', unconditionally.
+ define_verbose_tagvar ('GEN');
+ define_verbose_var ('at', '@');
+}
+
+
+################################################################
+
+
+# Handle AUTOMAKE_OPTIONS variable. Return 0 on error, 1 otherwise.
+sub handle_options ()
+{
+ my $var = var ('AUTOMAKE_OPTIONS');
+ if ($var)
+ {
+ if ($var->has_conditional_contents)
+ {
+ msg_var ('unsupported', $var,
+ "'AUTOMAKE_OPTIONS' cannot have conditional contents");
+ }
+ my @options = map { { option => $_->[1], where => $_->[0] } }
+ $var->value_as_list_recursive (cond_filter => TRUE,
+ location => 1);
+ return 0 unless process_option_list (@options);
+ }
+
+ if ($strictness == GNITS)
+ {
+ set_option ('readme-alpha', INTERNAL);
+ set_option ('std-options', INTERNAL);
+ set_option ('check-news', INTERNAL);
+ }
+
+ return 1;
+}
+
+# shadow_unconditionally ($varname, $where)
+# -----------------------------------------
+# Return a $(variable) that contains all possible values
+# $varname can take.
+# If the VAR wasn't defined conditionally, return $(VAR).
+# Otherwise we create an am__VAR_DIST variable which contains
+# all possible values, and return $(am__VAR_DIST).
+sub shadow_unconditionally
+{
+ my ($varname, $where) = @_;
+ my $var = var $varname;
+ if ($var->has_conditional_contents)
+ {
+ $varname = "am__${varname}_DIST";
+ my @files = uniq ($var->value_as_list_recursive);
+ define_pretty_variable ($varname, TRUE, $where, @files);
+ }
+ return "\$($varname)"
+}
+
+# check_user_variables (@LIST)
+# ----------------------------
+# Make sure each variable VAR in @LIST does not exist, suggest using AM_VAR
+# otherwise.
+sub check_user_variables
+{
+ my @dont_override = @_;
+ foreach my $flag (@dont_override)
+ {
+ my $var = var $flag;
+ if ($var)
+ {
+ for my $cond ($var->conditions->conds)
+ {
+ if ($var->rdef ($cond)->owner == VAR_MAKEFILE)
+ {
+ msg_cond_var ('gnu', $cond, $flag,
+ "'$flag' is a user variable, "
+ . "you should not override it;\n"
+ . "use 'AM_$flag' instead");
+ }
+ }
+ }
+ }
+}
+
+# Call finish function for each language that was used.
+sub handle_languages ()
+{
+ if (! option 'no-dependencies')
+ {
+ # Include auto-dep code. Don't include it if DEP_FILES would
+ # be empty.
+ if (keys %extension_seen && keys %dep_files)
+ {
+ my @dep_files = sort keys %dep_files;
+ # Set location of depcomp.
+ define_variable ('depcomp',
+ "\$(SHELL) $am_config_aux_dir/depcomp",
+ INTERNAL);
+ define_variable ('am__maybe_remake_depfiles', 'depfiles', INTERNAL);
+ define_variable ('am__depfiles_remade', "@dep_files", INTERNAL);
+ $output_rules .= "\n";
+ my @dist_rms;
+ foreach my $depfile (@dep_files)
+ {
+ push @dist_rms, "\t-rm -f $depfile";
+ # Generate each 'include' directive individually. Several
+ # make implementations (IRIX 6, Solaris 10, FreeBSD 8) will
+ # fail to properly include several files resulting from a
+ # variable expansion. Just Generating many separate includes
+ # seems thus safest.
+ $output_rules .= subst ('AMDEP_TRUE') .
+ subst ('am__include') .
+ " " .
+ subst('am__quote') .
+ $depfile .
+ subst('am__quote') .
+ " " .
+ "# am--include-marker\n";
+ }
+
+ require_conf_file ("$am_file.am", FOREIGN, 'depcomp');
+
+ $output_rules .= file_contents (
+ 'depend', new Automake::Location,
+ 'DISTRMS' => join ("\n", @dist_rms));
+ }
+ }
+ else
+ {
+ define_variable ('depcomp', '', INTERNAL);
+ define_variable ('am__maybe_remake_depfiles', '', INTERNAL);
+ }
+
+ my %done;
+
+ # Is the C linker needed?
+ my $needs_c = 0;
+ foreach my $ext (sort keys %extension_seen)
+ {
+ next unless $extension_map{$ext};
+
+ my $lang = $languages{$extension_map{$ext}};
+
+ my $rule_file = $lang->rule_file || 'depend2';
+
+ # Get information on $LANG.
+ my $pfx = $lang->autodep;
+ my $fpfx = ($pfx eq '') ? 'CC' : $pfx;
+
+ my ($AMDEP, $FASTDEP) =
+ (option 'no-dependencies' || $lang->autodep eq 'no')
+ ? ('FALSE', 'FALSE') : ('AMDEP', "am__fastdep$fpfx");
+
+ my $verbose = verbose_flag ($lang->ccer || 'GEN');
+ my $verbose_nodep = ($AMDEP eq 'FALSE')
+ ? $verbose : verbose_nodep_flag ($lang->ccer || 'GEN');
+ my $silent = silent_flag ();
+
+ my %transform = ('EXT' => $ext,
+ 'PFX' => $pfx,
+ 'FPFX' => $fpfx,
+ 'AMDEP' => $AMDEP,
+ 'FASTDEP' => $FASTDEP,
+ '-c' => $lang->compile_flag || '',
+ # These are not used, but they need to be defined
+ # so transform() do not complain.
+ SUBDIROBJ => 0,
+ 'DERIVED-EXT' => 'BUG',
+ DIST_SOURCE => 1,
+ VERBOSE => $verbose,
+ 'VERBOSE-NODEP' => $verbose_nodep,
+ SILENT => $silent,
+ );
+
+ # Generate the appropriate rules for this extension.
+ if (((! option 'no-dependencies') && $lang->autodep ne 'no')
+ || defined $lang->compile)
+ {
+ # Compute a possible derived extension.
+ # This is not used by depend2.am.
+ my $der_ext = ($lang->output_extensions->($ext))[0];
+
+ # When we output an inference rule like '.c.o:' we
+ # have two cases to consider: either subdir-objects
+ # is used, or it is not.
+ #
+ # In the latter case the rule is used to build objects
+ # in the current directory, and dependencies always
+ # go into './$(DEPDIR)/'. We can hard-code this value.
+ #
+ # In the former case the rule can be used to build
+ # objects in sub-directories too. Dependencies should
+ # go into the appropriate sub-directories, e.g.,
+ # 'sub/$(DEPDIR)/'. The value of this directory
+ # needs to be computed on-the-fly.
+ #
+ # DEPBASE holds the name of this directory, plus the
+ # basename part of the object file (extensions Po, TPo,
+ # Plo, TPlo will be added later as appropriate). It is
+ # either hardcoded, or a shell variable ('$depbase') that
+ # will be computed by the rule.
+ my $depbase =
+ option ('subdir-objects') ? '$$depbase' : '$(DEPDIR)/$*';
+ $output_rules .=
+ file_contents ($rule_file,
+ new Automake::Location,
+ %transform,
+ GENERIC => 1,
+
+ 'DERIVED-EXT' => $der_ext,
+
+ DEPBASE => $depbase,
+ BASE => '$*',
+ SOURCE => '$<',
+ SOURCEFLAG => $sourceflags{$ext} || '',
+ OBJ => '$@',
+ OBJOBJ => '$@',
+ LTOBJ => '$@',
+
+ COMPILE => '$(' . $lang->compiler . ')',
+ LTCOMPILE => '$(LT' . $lang->compiler . ')',
+ -o => $lang->output_flag,
+ SUBDIROBJ => !! option 'subdir-objects');
+ }
+
+ # Now include code for each specially handled object with this
+ # language.
+ my %seen_files = ();
+ foreach my $file (@{$lang_specific_files{$lang->name}})
+ {
+ my ($derived, $source, $obj, $myext, $srcext, %file_transform) = @$file;
+
+ # We might see a given object twice, for instance if it is
+ # used under different conditions.
+ next if defined $seen_files{$obj};
+ $seen_files{$obj} = 1;
+
+ prog_error ("found " . $lang->name .
+ " in handle_languages, but compiler not defined")
+ unless defined $lang->compile;
+
+ my $obj_compile = $lang->compile;
+
+ # Rewrite each occurrence of 'AM_$flag' in the compile
+ # rule into '${derived}_$flag' if it exists.
+ for my $flag (@{$lang->flags})
+ {
+ my $val = "${derived}_$flag";
+ $obj_compile =~ s/\(AM_$flag\)/\($val\)/
+ if set_seen ($val);
+ }
+
+ my $libtool_tag = '';
+ if ($lang->libtool_tag && exists $libtool_tags{$lang->libtool_tag})
+ {
+ $libtool_tag = '--tag=' . $lang->libtool_tag . ' '
+ }
+
+ my $ptltflags = "${derived}_LIBTOOLFLAGS";
+ $ptltflags = 'AM_LIBTOOLFLAGS' unless set_seen $ptltflags;
+
+ my $ltverbose = define_verbose_libtool ();
+ my $obj_ltcompile =
+ "\$(LIBTOOL) $ltverbose $libtool_tag\$($ptltflags) \$(LIBTOOLFLAGS) "
+ . "--mode=compile $obj_compile";
+
+ # We _need_ '-o' for per object rules.
+ my $output_flag = $lang->output_flag || '-o';
+
+ my $depbase = dirname ($obj);
+ $depbase = ''
+ if $depbase eq '.';
+ $depbase .= '/'
+ unless $depbase eq '';
+ $depbase .= '$(DEPDIR)/' . basename ($obj);
+
+ $output_rules .=
+ file_contents ($rule_file,
+ new Automake::Location,
+ %transform,
+ GENERIC => 0,
+
+ DEPBASE => $depbase,
+ BASE => $obj,
+ SOURCE => $source,
+ SOURCEFLAG => $sourceflags{$srcext} || '',
+ # Use $myext and not '.o' here, in case
+ # we are actually building a new source
+ # file -- e.g. via yacc.
+ OBJ => "$obj$myext",
+ OBJOBJ => "$obj.obj",
+ LTOBJ => "$obj.lo",
+
+ VERBOSE => $verbose,
+ 'VERBOSE-NODEP' => $verbose_nodep,
+ SILENT => $silent,
+ COMPILE => $obj_compile,
+ LTCOMPILE => $obj_ltcompile,
+ -o => $output_flag,
+ %file_transform);
+ }
+
+ # The rest of the loop is done once per language.
+ next if defined $done{$lang};
+ $done{$lang} = 1;
+
+ # Load the language dependent Makefile chunks.
+ my %lang = map { uc ($_) => 0 } keys %languages;
+ $lang{uc ($lang->name)} = 1;
+ $output_rules .= file_contents ('lang-compile',
+ new Automake::Location,
+ %transform, %lang);
+
+ # If the source to a program consists entirely of code from a
+ # 'pure' language, for instance C++ or Fortran 77, then we
+ # don't need the C compiler code. However if we run into
+ # something unusual then we do generate the C code. There are
+ # probably corner cases here that do not work properly.
+ # People linking Java code to Fortran code deserve pain.
+ $needs_c ||= ! $lang->pure;
+
+ define_compiler_variable ($lang)
+ if ($lang->compile);
+
+ define_linker_variable ($lang)
+ if ($lang->link);
+
+ require_variables ("$am_file.am", $lang->Name . " source seen",
+ TRUE, @{$lang->config_vars});
+
+ # Call the finisher.
+ $lang->finish;
+
+ # Flags listed in '->flags' are user variables (per GNU Standards),
+ # they should not be overridden in the Makefile...
+ my @dont_override = @{$lang->flags};
+ # ... and so is LDFLAGS.
+ push @dont_override, 'LDFLAGS' if $lang->link;
+
+ check_user_variables @dont_override;
+ }
+
+ # If the project is entirely C++ or entirely Fortran 77 (i.e., 1
+ # suffix rule was learned), don't bother with the C stuff. But if
+ # anything else creeps in, then use it.
+ my @languages_seen = map { $languages{$extension_map{$_}}->name }
+ (keys %extension_seen);
+ @languages_seen = uniq (@languages_seen);
+ $needs_c = 1 if @languages_seen > 1;
+ if ($need_link || $needs_c)
+ {
+ define_compiler_variable ($languages{'c'})
+ unless defined $done{$languages{'c'}};
+ define_linker_variable ($languages{'c'});
+ }
+}
+
+
+# append_exeext { PREDICATE } $MACRO
+# ----------------------------------
+# Append $(EXEEXT) to each filename in $F appearing in the Makefile
+# variable $MACRO if &PREDICATE($F) is true. @substitutions@ are
+# ignored.
+#
+# This is typically used on all filenames of *_PROGRAMS, and filenames
+# of TESTS that are programs.
+sub append_exeext (&$)
+{
+ my ($pred, $macro) = @_;
+
+ transform_variable_recursively
+ ($macro, $macro, 'am__EXEEXT', 0, INTERNAL,
+ sub {
+ my ($subvar, $val, $cond, $full_cond) = @_;
+ # Append $(EXEEXT) unless the user did it already, or it's a
+ # @substitution@.
+ $val .= '$(EXEEXT)'
+ if $val !~ /(?:\$\(EXEEXT\)$|^[@]\w+[@]$)/ && &$pred ($val);
+ return $val;
+ });
+}
+
+
+# Check to make sure a source defined in LIBOBJS is not explicitly
+# mentioned. This is a separate function (as opposed to being inlined
+# in handle_source_transform) because it isn't always appropriate to
+# do this check.
+sub check_libobjs_sources
+{
+ my ($one_file, $unxformed) = @_;
+
+ foreach my $prefix ('', 'EXTRA_', 'dist_', 'nodist_',
+ 'dist_EXTRA_', 'nodist_EXTRA_')
+ {
+ my @files;
+ my $varname = $prefix . $one_file . '_SOURCES';
+ my $var = var ($varname);
+ if ($var)
+ {
+ @files = $var->value_as_list_recursive;
+ }
+ elsif ($prefix eq '')
+ {
+ @files = ($unxformed . '.c');
+ }
+ else
+ {
+ next;
+ }
+
+ foreach my $file (@files)
+ {
+ err_var ($prefix . $one_file . '_SOURCES',
+ "automatically discovered file '$file' should not" .
+ " be explicitly mentioned")
+ if defined $libsources{$file};
+ }
+ }
+}
+
+
+# @OBJECTS
+# handle_single_transform ($VAR, $TOPPARENT, $DERIVED, $OBJ, $FILE, %TRANSFORM)
+# -----------------------------------------------------------------------------
+# Does much of the actual work for handle_source_transform.
+# Arguments are:
+# $VAR is the name of the variable that the source filenames come from
+# $TOPPARENT is the name of the _SOURCES variable which is being processed
+# $DERIVED is the name of resulting executable or library
+# $OBJ is the object extension (e.g., '.lo')
+# $FILE the source file to transform
+# %TRANSFORM contains extras arguments to pass to file_contents
+# when producing explicit rules
+# Result is a list of the names of objects
+# %linkers_used will be updated with any linkers needed
+sub handle_single_transform
+{
+ my ($var, $topparent, $derived, $obj, $_file, %transform) = @_;
+ my @files = ($_file);
+ my @result = ();
+
+ # Turn sources into objects. We use a while loop like this
+ # because we might add to @files in the loop.
+ while (scalar @files > 0)
+ {
+ $_ = shift @files;
+
+ # Configure substitutions in _SOURCES variables are errors.
+ if (/^\@.*\@$/)
+ {
+ my $parent_msg = '';
+ $parent_msg = "\nand is referred to from '$topparent'"
+ if $topparent ne $var->name;
+ err_var ($var,
+ "'" . $var->name . "' includes configure substitution '$_'"
+ . $parent_msg . ";\nconfigure " .
+ "substitutions are not allowed in _SOURCES variables");
+ next;
+ }
+
+ # If the source file is in a subdirectory then the '.o' is put
+ # into the current directory, unless the subdir-objects option
+ # is in effect.
+
+ # Split file name into base and extension.
+ next if ! /^(?:(.*)\/)?([^\/]*)($KNOWN_EXTENSIONS_PATTERN)$/;
+ my $full = $_;
+ my $directory = $1 || '';
+ my $base = $2;
+ my $extension = $3;
+
+ # We must generate a rule for the object if it requires its own flags.
+ my $renamed = 0;
+ my ($linker, $object);
+
+ # This records whether we've seen a derived source file (e.g., yacc
+ # or lex output).
+ my $derived_source;
+
+ # This holds the 'aggregate context' of the file we are
+ # currently examining. If the file is compiled with
+ # per-object flags, then it will be the name of the object.
+ # Otherwise it will be 'AM'. This is used by the target hook
+ # language function.
+ my $aggregate = 'AM';
+
+ $extension = derive_suffix ($extension, $obj);
+ my $lang;
+ if ($extension_map{$extension} &&
+ ($lang = $languages{$extension_map{$extension}}))
+ {
+ # Found the language, so see what it says.
+ saw_extension ($extension);
+
+ # Do we have per-executable flags for this executable?
+ my $have_per_exec_flags = 0;
+ my @peflags = @{$lang->flags};
+ push @peflags, 'LIBTOOLFLAGS' if $obj eq '.lo';
+ foreach my $flag (@peflags)
+ {
+ if (set_seen ("${derived}_$flag"))
+ {
+ $have_per_exec_flags = 1;
+ last;
+ }
+ }
+
+ # Note: computed subr call. The language rewrite function
+ # should return one of the LANG_* constants. It could
+ # also return a list whose first value is such a constant
+ # and whose second value is a new source extension which
+ # should be applied. This means this particular language
+ # generates another source file which we must then process
+ # further.
+ my $subr = \&{'lang_' . $lang->name . '_rewrite'};
+ defined &$subr or $subr = \&lang_sub_obj;
+ my ($r, $source_extension)
+ = &$subr ($directory, $base, $extension,
+ $obj, $have_per_exec_flags, $var);
+ # Skip this entry if we were asked not to process it.
+ next if $r == LANG_IGNORE;
+
+ # Now extract linker and other info.
+ $linker = $lang->linker;
+
+ my $this_obj_ext;
+ if (defined $source_extension)
+ {
+ $this_obj_ext = $source_extension;
+ $derived_source = 1;
+ }
+ else
+ {
+ $this_obj_ext = $obj;
+ $derived_source = 0;
+ # Don't ever place built object files in $(srcdir),
+ # even when sources are specified explicitly as (say)
+ # '$(srcdir)/foo.c' or '$(top_srcdir)/foo.c'.
+ # See automake bug#13928.
+ my @d = split '/', $directory;
+ if (@d > 0 && option 'subdir-objects')
+ {
+ my $d = $d[0];
+ if ($d eq '$(srcdir)' or $d eq '${srcdir}')
+ {
+ shift @d;
+ }
+ elsif ($d eq '$(top_srcdir)' or $d eq '${top_srcdir}')
+ {
+ $d[0] = '$(top_builddir)';
+ }
+ $directory = join '/', @d;
+ }
+ }
+ $object = $base . $this_obj_ext;
+
+ if ($have_per_exec_flags)
+ {
+ # We have a per-executable flag in effect for this
+ # object. In this case we rewrite the object's
+ # name to ensure it is unique.
+
+ # We choose the name 'DERIVED_OBJECT' to ensure (1) uniqueness,
+ # and (2) continuity between invocations. However, this will
+ # result in a name that is too long for losing systems, in some
+ # situations. So we attempt to shorten automatically under
+ # subdir-objects, and provide _SHORTNAME to override as a last
+ # resort. If subdir-object is in effect, it's usually
+ # unnecessary to use the complete 'DERIVED_OBJECT' (that is
+ # often the result from %canon_reldir%/%C% usage) since objects
+ # are placed next to their source file. Generally, this means
+ # it is already unique within that directory (see below for an
+ # exception). Thus, we try to avoid unnecessarily long file
+ # names by stripping the directory components of
+ # 'DERIVED_OBJECT'. This allows avoiding explicit _SHORTNAME
+ # usage in many cases. EXCEPTION: If two (or more) targets in
+ # different directories but with the same base name (after
+ # canonicalization), using target-specific FLAGS, link the same
+ # object, then this logic clashes. Thus, we don't strip if
+ # this is detected.
+ my $dname = $derived;
+ if ($directory ne ''
+ && option 'subdir-objects'
+ && none { $dname =~ /$_$/ } @dup_shortnames)
+ {
+ # At this point, we don't clear information about what
+ # parts of $derived are truly file name components. We can
+ # determine that by comparing against the canonicalization
+ # of $directory.
+ my $dir = $directory . "/";
+ my $cdir = canonicalize ($dir);
+ my $dir_len = length ($dir);
+ # Make sure we only strip full file name components. This
+ # is done by repeatedly trying to find cdir at the
+ # beginning. Each iteration removes one file name
+ # component from the end of cdir.
+ while ($dir_len > 0 && index ($derived, $cdir) != 0)
+ {
+ # Eventually $dir_len becomes 0.
+ $dir_len = rindex ($dir, "/", $dir_len - 2) + 1;
+ $cdir = substr ($cdir, 0, $dir_len);
+ }
+ $dname = substr ($derived, $dir_len);
+ }
+ my $var = var ($derived . '_SHORTNAME');
+ if ($var)
+ {
+ # FIXME: should use the same Condition as
+ # the _SOURCES variable. But this is really
+ # silly overkill -- nobody should have
+ # conditional shortnames.
+ $dname = $var->variable_value;
+ }
+ $object = $dname . '-' . $object;
+
+ prog_error ($lang->name . " flags defined without compiler")
+ if ! defined $lang->compile;
+
+ $renamed = 1;
+ }
+
+ # If rewrite said it was ok, put the object into a subdir.
+ if ($directory ne '')
+ {
+ if ($r == LANG_SUBDIR)
+ {
+ $object = $directory . '/' . $object;
+ }
+ else
+ {
+ # Since the next major version of automake (2.0) will
+ # make the behaviour so far only activated with the
+ # 'subdir-object' option mandatory, it's better if we
+ # start warning users not using that option.
+ # As suggested by Peter Johansson, we strive to avoid
+ # the warning when it would be irrelevant, i.e., if
+ # all source files sit in "current" directory.
+ msg_var 'unsupported', $var,
+ "source file '$full' is in a subdirectory,"
+ . "\nbut option 'subdir-objects' is disabled";
+ msg 'unsupported', INTERNAL, <<'EOF', uniq_scope => US_GLOBAL;
+possible forward-incompatibility.
+At least a source file is in a subdirectory, but the 'subdir-objects'
+automake option hasn't been enabled. For now, the corresponding output
+object file(s) will be placed in the top-level directory. However,
+this behaviour will change in future Automake versions: they will
+unconditionally cause object files to be placed in the same subdirectory
+of the corresponding sources.
+You are advised to start using 'subdir-objects' option throughout your
+project, to avoid future incompatibilities.
+EOF
+ }
+ }
+
+ # If the object file has been renamed (because per-target
+ # flags are used) we cannot compile the file with an
+ # inference rule: we need an explicit rule.
+ #
+ # If the source is in a subdirectory and the object is in
+ # the current directory, we also need an explicit rule.
+ #
+ # If both source and object files are in a subdirectory
+ # (this happens when the subdir-objects option is used),
+ # then the inference will work.
+ #
+ # The latter case deserves a historical note. When the
+ # subdir-objects option was added on 1999-04-11 it was
+ # thought that inferences rules would work for
+ # subdirectory objects too. Later, on 1999-11-22,
+ # automake was changed to output explicit rules even for
+ # subdir-objects. Nobody remembers why, but this occurred
+ # soon after the merge of the user-dep-gen-branch so it
+ # might be related. In late 2003 people complained about
+ # the size of the generated Makefile.ins (libgcj, with
+ # 2200+ subdir objects was reported to have a 9MB
+ # Makefile), so we now rely on inference rules again.
+ # Maybe we'll run across the same issue as in the past,
+ # but at least this time we can document it. However since
+ # dependency tracking has evolved it is possible that
+ # our old problem no longer exists.
+ # Using inference rules for subdir-objects has been tested
+ # with GNU make, Solaris make, Ultrix make, BSD make,
+ # HP-UX make, and OSF1 make successfully.
+ if ($renamed
+ || ($directory ne '' && ! option 'subdir-objects')
+ # We must also use specific rules for a nodist_ source
+ # if its language requests it.
+ || ($lang->nodist_specific && ! $transform{'DIST_SOURCE'}))
+ {
+ my $obj_sans_ext = substr ($object, 0,
+ - length ($this_obj_ext));
+ my $full_ansi;
+ if ($directory ne '')
+ {
+ $full_ansi = $directory . '/' . $base . $extension;
+ }
+ else
+ {
+ $full_ansi = $base . $extension;
+ }
+
+ my @specifics = ($full_ansi, $obj_sans_ext,
+ # Only use $this_obj_ext in the derived
+ # source case because in the other case we
+ # *don't* want $(OBJEXT) to appear here.
+ ($derived_source ? $this_obj_ext : '.o'),
+ $extension);
+
+ # If we renamed the object then we want to use the
+ # per-executable flag name. But if this is simply a
+ # subdir build then we still want to use the AM_ flag
+ # name.
+ if ($renamed)
+ {
+ unshift @specifics, $derived;
+ $aggregate = $derived;
+ }
+ else
+ {
+ unshift @specifics, 'AM';
+ }
+
+ # Each item on this list is a reference to a list consisting
+ # of four values followed by additional transform flags for
+ # file_contents. The four values are the derived flag prefix
+ # (e.g. for 'foo_CFLAGS', it is 'foo'), the name of the
+ # source file, the base name of the output file, and
+ # the extension for the object file.
+ push (@{$lang_specific_files{$lang->name}},
+ [@specifics, %transform]);
+ }
+ }
+ elsif ($extension eq $obj)
+ {
+ # This is probably the result of a direct suffix rule.
+ # In this case we just accept the rewrite.
+ $object = "$base$extension";
+ $object = "$directory/$object" if $directory ne '';
+ $linker = '';
+ }
+ else
+ {
+ # No error message here. Used to have one, but it was
+ # very unpopular.
+ # FIXME: we could potentially do more processing here,
+ # perhaps treating the new extension as though it were a
+ # new source extension (as above). This would require
+ # more restructuring than is appropriate right now.
+ next;
+ }
+
+ err_am "object '$object' created by '$full' and '$object_map{$object}'"
+ if (defined $object_map{$object}
+ && $object_map{$object} ne $full);
+
+ my $comp_val = (($object =~ /\.lo$/)
+ ? COMPILE_LIBTOOL : COMPILE_ORDINARY);
+ (my $comp_obj = $object) =~ s/\.lo$/.\$(OBJEXT)/;
+ if (defined $object_compilation_map{$comp_obj}
+ && $object_compilation_map{$comp_obj} != 0
+ # Only see the error once.
+ && ($object_compilation_map{$comp_obj}
+ != (COMPILE_LIBTOOL | COMPILE_ORDINARY))
+ && $object_compilation_map{$comp_obj} != $comp_val)
+ {
+ err_am "object '$comp_obj' created both with libtool and without";
+ }
+ $object_compilation_map{$comp_obj} |= $comp_val;
+
+ if (defined $lang)
+ {
+ # Let the language do some special magic if required.
+ $lang->target_hook ($aggregate, $object, $full, %transform);
+ }
+
+ if ($derived_source)
+ {
+ prog_error ($lang->name . " has automatic dependency tracking")
+ if $lang->autodep ne 'no';
+ # Make sure this new source file is handled next. That will
+ # make it appear to be at the right place in the list.
+ unshift (@files, $object);
+ # Distribute derived sources unless the source they are
+ # derived from is not.
+ push_dist_common ($object)
+ unless ($topparent =~ /^(?:nobase_)?nodist_/);
+ next;
+ }
+
+ $linkers_used{$linker} = 1;
+
+ push (@result, $object);
+
+ if (! defined $object_map{$object})
+ {
+ my @dep_list = ();
+ $object_map{$object} = $full;
+
+ # If resulting object is in subdir, we need to make
+ # sure the subdir exists at build time.
+ if ($object =~ /\//)
+ {
+ # FIXME: check that $DIRECTORY is somewhere in the
+ # project
+
+ # For Java, the way we're handling it right now, a
+ # '..' component doesn't make sense.
+ if ($lang && $lang->name eq 'java' && $object =~ /(\/|^)\.\.\//)
+ {
+ err_am "'$full' should not contain a '..' component";
+ }
+
+ # Make sure *all* objects files in the subdirectory are
+ # removed by "make mostlyclean". Not only this is more
+ # efficient than listing the object files to be removed
+ # individually (which would cause an 'rm' invocation for
+ # each of them -- very inefficient, see bug#10697), it
+ # would also leave stale object files in the subdirectory
+ # whenever a source file there is removed or renamed.
+ $compile_clean_files{"$directory/*.\$(OBJEXT)"} = MOSTLY_CLEAN;
+ if ($object =~ /\.lo$/)
+ {
+ # If we have a libtool object, then we also must remove
+ # any '.lo' objects in its same subdirectory.
+ $compile_clean_files{"$directory/*.lo"} = MOSTLY_CLEAN;
+ # Remember to cleanup .libs/ in this directory.
+ $libtool_clean_directories{$directory} = 1;
+ }
+
+ push (@dep_list, require_build_directory ($directory));
+
+ # If we're generating dependencies, we also want
+ # to make sure that the appropriate subdir of the
+ # .deps directory is created.
+ push (@dep_list,
+ require_build_directory ($directory . '/$(DEPDIR)'))
+ unless option 'no-dependencies';
+ }
+
+ pretty_print_rule ($object . ':', "\t", @dep_list)
+ if scalar @dep_list > 0;
+ }
+
+ # Transform .o or $o file into .P file (for automatic
+ # dependency code).
+ # Properly flatten multiple adjacent slashes, as Solaris 10 make
+ # might fail over them in an include statement.
+ # Leading double slashes may be special, as per Posix, so deal
+ # with them carefully.
+ if ($lang && $lang->autodep ne 'no')
+ {
+ my $depfile = $object;
+ $depfile =~ s/\.([^.]*)$/.P$1/;
+ $depfile =~ s/\$\(OBJEXT\)$/o/;
+ my $maybe_extra_leading_slash = '';
+ $maybe_extra_leading_slash = '/' if $depfile =~ m,^//[^/],;
+ $depfile =~ s,/+,/,g;
+ my $basename = basename ($depfile);
+ # This might make $dirname empty, but we account for that below.
+ (my $dirname = dirname ($depfile)) =~ s/\/*$//;
+ $dirname = $maybe_extra_leading_slash . $dirname;
+ $dep_files{$dirname . '/$(DEPDIR)/' . $basename} = 1;
+ }
+ }
+
+ return @result;
+}
+
+
+# $LINKER
+# define_objects_from_sources ($VAR, $OBJVAR, $NODEFINE, $ONE_FILE,
+# $OBJ, $PARENT, $TOPPARENT, $WHERE, %TRANSFORM)
+# ---------------------------------------------------------------------------
+# Define an _OBJECTS variable for a _SOURCES variable (or subvariable)
+#
+# Arguments are:
+# $VAR is the name of the _SOURCES variable
+# $OBJVAR is the name of the _OBJECTS variable if known (otherwise
+# it will be generated and returned).
+# $NODEFINE is a boolean: if true, $OBJVAR will not be defined (but
+# work done to determine the linker will be).
+# $ONE_FILE is the canonical (transformed) name of object to build
+# $OBJ is the object extension (i.e. either '.o' or '.lo').
+# $TOPPARENT is the _SOURCES variable being processed.
+# $WHERE context into which this definition is done
+# %TRANSFORM extra arguments to pass to file_contents when producing
+# rules
+#
+# Result is a pair ($LINKER, $OBJVAR):
+# $LINKER is a boolean, true if a linker is needed to deal with the objects
+sub define_objects_from_sources
+{
+ my ($var, $objvar, $nodefine, $one_file,
+ $obj, $topparent, $where, %transform) = @_;
+
+ my $needlinker = "";
+
+ transform_variable_recursively
+ ($var, $objvar, 'am__objects', $nodefine, $where,
+ # The transform code to run on each filename.
+ sub {
+ my ($subvar, $val, $cond, $full_cond) = @_;
+ my @trans = handle_single_transform ($subvar, $topparent,
+ $one_file, $obj, $val,
+ %transform);
+ $needlinker = "true" if @trans;
+ return @trans;
+ });
+
+ return $needlinker;
+}
+
+
+# handle_source_transform ($CANON_TARGET, $TARGET, $OBJEXT, $WHERE, %TRANSFORM)
+# -----------------------------------------------------------------------------
+# Handle SOURCE->OBJECT transform for one program or library.
+# Arguments are:
+# canonical (transformed) name of target to build
+# actual target of object to build
+# object extension (i.e., either '.o' or '$o')
+# location of the source variable
+# extra arguments to pass to file_contents when producing rules
+# Return the name of the linker variable that must be used.
+# Empty return means just use 'LINK'.
+sub handle_source_transform
+{
+ # one_file is canonical name. unxformed is given name. obj is
+ # object extension.
+ my ($one_file, $unxformed, $obj, $where, %transform) = @_;
+
+ my $linker = '';
+
+ # No point in continuing if _OBJECTS is defined.
+ return if reject_var ($one_file . '_OBJECTS',
+ $one_file . '_OBJECTS should not be defined');
+
+ my %used_pfx = ();
+ my $needlinker;
+ %linkers_used = ();
+ foreach my $prefix ('', 'EXTRA_', 'dist_', 'nodist_',
+ 'dist_EXTRA_', 'nodist_EXTRA_')
+ {
+ my $varname = $prefix . $one_file . "_SOURCES";
+ my $var = var $varname;
+ next unless $var;
+
+ # We are going to define _OBJECTS variables using the prefix.
+ # Then we glom them all together. So we can't use the null
+ # prefix here as we need it later.
+ my $xpfx = ($prefix eq '') ? 'am_' : $prefix;
+
+ # Keep track of which prefixes we saw.
+ $used_pfx{$xpfx} = 1
+ unless $prefix =~ /EXTRA_/;
+
+ push @sources, "\$($varname)";
+ push @dist_sources, shadow_unconditionally ($varname, $where)
+ unless (option ('no-dist') || $prefix =~ /^nodist_/);
+
+ $needlinker |=
+ define_objects_from_sources ($varname,
+ $xpfx . $one_file . '_OBJECTS',
+ !!($prefix =~ /EXTRA_/),
+ $one_file, $obj, $varname, $where,
+ DIST_SOURCE => ($prefix !~ /^nodist_/),
+ %transform);
+ }
+ if ($needlinker)
+ {
+ $linker ||= resolve_linker (%linkers_used);
+ }
+
+ my @keys = sort keys %used_pfx;
+ if (scalar @keys == 0)
+ {
+ # The default source for libfoo.la is libfoo.c, but for
+ # backward compatibility we first look at libfoo_la.c,
+ # if no default source suffix is given.
+ my $old_default_source = "$one_file.c";
+ my $ext_var = var ('AM_DEFAULT_SOURCE_EXT');
+ my $default_source_ext = $ext_var ? variable_value ($ext_var) : '.c';
+ msg_var ('unsupported', $ext_var, $ext_var->name . " can assume at most one value")
+ if $default_source_ext =~ /[\t ]/;
+ (my $default_source = $unxformed) =~ s,(\.[^./\\]*)?$,$default_source_ext,;
+ # TODO: Remove this backward-compatibility hack in Automake 2.0.
+ if ($old_default_source ne $default_source
+ && !$ext_var
+ && (rule $old_default_source
+ || rule '$(srcdir)/' . $old_default_source
+ || rule '${srcdir}/' . $old_default_source
+ || -f $old_default_source))
+ {
+ my $loc = $where->clone;
+ $loc->pop_context;
+ msg ('obsolete', $loc,
+ "the default source for '$unxformed' has been changed "
+ . "to '$default_source'.\n(Using '$old_default_source' for "
+ . "backward compatibility.)");
+ $default_source = $old_default_source;
+ }
+ # If a rule exists to build this source with a $(srcdir)
+ # prefix, use that prefix in our variables too. This is for
+ # the sake of BSD Make.
+ if (rule '$(srcdir)/' . $default_source
+ || rule '${srcdir}/' . $default_source)
+ {
+ $default_source = '$(srcdir)/' . $default_source;
+ }
+
+ define_variable ($one_file . "_SOURCES", $default_source, $where);
+ push (@sources, $default_source);
+ push (@dist_sources, $default_source);
+
+ %linkers_used = ();
+ my (@result) =
+ handle_single_transform ($one_file . '_SOURCES',
+ $one_file . '_SOURCES',
+ $one_file, $obj,
+ $default_source, %transform);
+ $linker ||= resolve_linker (%linkers_used);
+ define_pretty_variable ($one_file . '_OBJECTS', TRUE, $where, @result);
+ }
+ else
+ {
+ @keys = map { '$(' . $_ . $one_file . '_OBJECTS)' } @keys;
+ define_pretty_variable ($one_file . '_OBJECTS', TRUE, $where, @keys);
+ }
+
+ # If we want to use 'LINK' we must make sure it is defined.
+ if ($linker eq '')
+ {
+ $need_link = 1;
+ }
+
+ return $linker;
+}
+
+
+# handle_lib_objects ($XNAME, $VAR)
+# ---------------------------------
+# Special-case ALLOCA and LIBOBJS substitutions in _LDADD or _LIBADD variables.
+# Also, generate _DEPENDENCIES variable if appropriate.
+# Arguments are:
+# transformed name of object being built, or empty string if no object
+# name of _LDADD/_LIBADD-type variable to examine
+# Returns 1 if LIBOBJS seen, 0 otherwise.
+sub handle_lib_objects
+{
+ my ($xname, $varname) = @_;
+
+ my $var = var ($varname);
+ prog_error "'$varname' undefined"
+ unless $var;
+ prog_error "unexpected variable name '$varname'"
+ unless $varname =~ /^(.*)(?:LIB|LD)ADD$/;
+ my $prefix = $1 || 'AM_';
+
+ my $seen_libobjs = 0;
+ my $flagvar = 0;
+
+ transform_variable_recursively
+ ($varname, $xname . '_DEPENDENCIES', 'am__DEPENDENCIES',
+ ! $xname, INTERNAL,
+ # Transformation function, run on each filename.
+ sub {
+ my ($subvar, $val, $cond, $full_cond) = @_;
+
+ if ($val =~ /^-/)
+ {
+ # Skip -lfoo and -Ldir silently; these are explicitly allowed.
+ if ($val !~ /^-[lL]/ &&
+ # Skip -dlopen and -dlpreopen; these are explicitly allowed
+ # for Libtool libraries or programs. (Actually we are a bit
+ # lax here since this code also applies to non-libtool
+ # libraries or programs, for which -dlopen and -dlopreopen
+ # are pure nonsense. Diagnosing this doesn't seem very
+ # important: the developer will quickly get complaints from
+ # the linker.)
+ $val !~ /^-dl(?:pre)?open$/ &&
+ # Only get this error once.
+ ! $flagvar)
+ {
+ $flagvar = 1;
+ # FIXME: should display a stack of nested variables
+ # as context when $var != $subvar.
+ err_var ($var, "linker flags such as '$val' belong in "
+ . "'${prefix}LDFLAGS'");
+ }
+ return ();
+ }
+ elsif ($val !~ /^\@.*\@$/)
+ {
+ # Assume we have a file of some sort, and output it into the
+ # dependency variable. Autoconf substitutions are not output;
+ # rarely is a new dependency substituted into e.g. foo_LDADD
+ # -- but bad things (e.g. -lX11) are routinely substituted.
+ # Note that LIBOBJS and ALLOCA are exceptions to this rule,
+ # and handled specially below.
+ return $val;
+ }
+ elsif ($val =~ /^\@(LT)?LIBOBJS\@$/)
+ {
+ handle_LIBOBJS ($subvar, $cond, $1);
+ $seen_libobjs = 1;
+ return $val;
+ }
+ elsif ($val =~ /^\@(LT)?ALLOCA\@$/)
+ {
+ handle_ALLOCA ($subvar, $cond, $1);
+ return $val;
+ }
+ else
+ {
+ return ();
+ }
+ });
+
+ return $seen_libobjs;
+}
+
+# handle_LIBOBJS_or_ALLOCA ($VAR, $BASE)
+# --------------------------------------
+# Definitions common to LIBOBJS and ALLOCA.
+# VAR should be one of LIBOBJS, LTLIBOBJS, ALLOCA, or LTALLOCA.
+# BASE should be one base file name from AC_LIBSOURCE, or alloca.
+sub handle_LIBOBJS_or_ALLOCA
+{
+ my ($var, $base) = @_;
+
+ my $dir = '';
+
+ # If LIBOBJS files must be built in another directory we have
+ # to define LIBOBJDIR and ensure the files get cleaned.
+ # Otherwise LIBOBJDIR can be left undefined, and the cleaning
+ # is achieved by 'rm -f *.$(OBJEXT)' in compile.am.
+ if ($config_libobj_dir
+ && $relative_dir ne $config_libobj_dir)
+ {
+ if (option 'subdir-objects')
+ {
+ # In the top-level Makefile we do not use $(top_builddir), because
+ # we are already there, and since the targets are built without
+ # a $(top_builddir), it helps BSD Make to match them with
+ # dependencies.
+ $dir = "$config_libobj_dir/"
+ if $config_libobj_dir ne '.';
+ $dir = backname ($relative_dir) . "/$dir"
+ if $relative_dir ne '.';
+ define_variable ('LIBOBJDIR', "$dir", INTERNAL);
+ if ($dir && !defined $clean_files{"$dir$base.\$(OBJEXT)"})
+ {
+ my $dirstamp = require_build_directory ($dir);
+ $output_rules .= "$dir$base.\$(OBJEXT): $dirstamp\n";
+ $output_rules .= "$dir$base.lo: $dirstamp\n"
+ if ($var =~ /^LT/);
+ }
+ # libtool might create .$(OBJEXT) as a side-effect of using
+ # LTLIBOBJS or LTALLOCA.
+ $clean_files{"$dir$base.\$(OBJEXT)"} = MOSTLY_CLEAN;
+ $clean_files{"$dir$base.lo"} = MOSTLY_CLEAN
+ if ($var =~ /^LT/);
+ }
+ else
+ {
+ error ("'\$($var)' cannot be used outside '$config_libobj_dir' if"
+ . " 'subdir-objects' is not set");
+ }
+ }
+
+ return $dir;
+}
+
+sub handle_LIBOBJS
+{
+ my ($var, $cond, $lt) = @_;
+ my $myobjext = $lt ? 'lo' : 'o';
+ $lt ||= '';
+
+ $var->requires_variables ("\@${lt}LIBOBJS\@ used", $lt . 'LIBOBJS')
+ if ! keys %libsources;
+
+ foreach my $iter (keys %libsources)
+ {
+ my $dir = '';
+ if ($iter =~ /^(.*)(\.[cly])$/)
+ {
+ saw_extension ($2);
+ saw_extension ('.c');
+ $dir = handle_LIBOBJS_or_ALLOCA ("${lt}LIBOBJS", $1);
+ }
+
+ if ($iter =~ /\.h$/)
+ {
+ require_libsource_with_macro ($cond, $var, FOREIGN, $iter);
+ }
+ elsif ($iter ne 'alloca.c')
+ {
+ my $rewrite = $iter;
+ $rewrite =~ s/\.c$/.P$myobjext/;
+ $dep_files{$dir . '$(DEPDIR)/' . $rewrite} = 1;
+ $rewrite = "^" . quotemeta ($iter) . "\$";
+ # Only require the file if it is not a built source.
+ my $bs = var ('BUILT_SOURCES');
+ if (! $bs || ! grep (/$rewrite/, $bs->value_as_list_recursive))
+ {
+ require_libsource_with_macro ($cond, $var, FOREIGN, $iter);
+ }
+ }
+ }
+}
+
+sub handle_ALLOCA
+{
+ my ($var, $cond, $lt) = @_;
+ my $myobjext = $lt ? 'lo' : 'o';
+ $lt ||= '';
+ my $dir = handle_LIBOBJS_or_ALLOCA ("${lt}ALLOCA", "alloca");
+
+ $dir eq '' and $dir = './';
+ $var->requires_variables ("\@${lt}ALLOCA\@ used", $lt . 'ALLOCA');
+ $dep_files{$dir . '$(DEPDIR)/alloca.P' . $myobjext} = 1;
+ require_libsource_with_macro ($cond, $var, FOREIGN, 'alloca.c');
+ saw_extension ('.c');
+}
+
+# Canonicalize the input parameter.
+sub canonicalize
+{
+ my ($string) = @_;
+ $string =~ tr/A-Za-z0-9_\@/_/c;
+ return $string;
+}
+
+# Canonicalize a name, and check to make sure the non-canonical name
+# is never used. Returns canonical name. Arguments are name and a
+# list of suffixes to check for.
+sub check_canonical_spelling
+{
+ my ($name, @suffixes) = @_;
+
+ my $xname = canonicalize ($name);
+ if ($xname ne $name)
+ {
+ foreach my $xt (@suffixes)
+ {
+ reject_var ("$name$xt", "use '$xname$xt', not '$name$xt'");
+ }
+ }
+
+ return $xname;
+}
+
+# Set up the compile suite.
+sub handle_compile ()
+{
+ return if ! $must_handle_compiled_objects;
+
+ # Boilerplate.
+ my $default_includes = '';
+ if (! option 'nostdinc')
+ {
+ my @incs = ('-I.', subst ('am__isrc'));
+
+ my $var = var 'CONFIG_HEADER';
+ if ($var)
+ {
+ foreach my $hdr (split (' ', $var->variable_value))
+ {
+ push @incs, '-I' . dirname ($hdr);
+ }
+ }
+ # We want '-I. -I$(srcdir)', but the latter -I is redundant
+ # and unaesthetic in non-VPATH builds. We use `-I.@am__isrc@`
+ # instead. It will be replaced by '-I.' or '-I. -I$(srcdir)'.
+ # Items in CONFIG_HEADER are never in $(srcdir) so it is safe
+ # to just put @am__isrc@ right after '-I.', without a space.
+ ($default_includes = ' ' . uniq (@incs)) =~ s/ @/@/;
+ }
+
+ my (@mostly_rms, @dist_rms);
+ foreach my $item (sort keys %compile_clean_files)
+ {
+ if ($compile_clean_files{$item} == MOSTLY_CLEAN)
+ {
+ push (@mostly_rms, "\t-rm -f $item");
+ }
+ elsif ($compile_clean_files{$item} == DIST_CLEAN)
+ {
+ push (@dist_rms, "\t-rm -f $item");
+ }
+ else
+ {
+ prog_error 'invalid entry in %compile_clean_files';
+ }
+ }
+
+ my ($coms, $vars, $rules) =
+ file_contents_internal (1, "$libdir/am/compile.am",
+ new Automake::Location,
+ 'DEFAULT_INCLUDES' => $default_includes,
+ 'MOSTLYRMS' => join ("\n", @mostly_rms),
+ 'DISTRMS' => join ("\n", @dist_rms));
+ $output_vars .= $vars;
+ $output_rules .= "$coms$rules";
+}
+
+# Handle libtool rules.
+sub handle_libtool ()
+{
+ return unless var ('LIBTOOL');
+
+ # Libtool requires some files, but only at top level.
+ # (Starting with Libtool 2.0 we do not have to bother. These
+ # requirements are done with AC_REQUIRE_AUX_FILE.)
+ require_conf_file_with_macro (TRUE, 'LIBTOOL', FOREIGN, @libtool_files)
+ if $relative_dir eq '.' && ! $libtool_new_api;
+
+ my @libtool_rms;
+ foreach my $item (sort keys %libtool_clean_directories)
+ {
+ my $dir = ($item eq '.') ? '' : "$item/";
+ # .libs is for Unix, _libs for DOS.
+ push (@libtool_rms, "\t-rm -rf ${dir}.libs ${dir}_libs");
+ }
+
+ check_user_variables 'LIBTOOLFLAGS';
+
+ # Output the libtool compilation rules.
+ $output_rules .= file_contents ('libtool',
+ new Automake::Location,
+ LTRMS => join ("\n", @libtool_rms));
+}
+
+# Check for duplicate targets
+sub handle_targets ()
+{
+ my %seen = ();
+ my @dups = ();
+ @proglist = am_install_var ('progs', 'PROGRAMS',
+ 'bin', 'sbin', 'libexec', 'pkglibexec',
+ 'noinst', 'check');
+ @liblist = am_install_var ('libs', 'LIBRARIES',
+ 'lib', 'pkglib', 'noinst', 'check');
+ @ltliblist = am_install_var ('ltlib', 'LTLIBRARIES',
+ 'noinst', 'lib', 'pkglib', 'check');
+
+ # Record duplications that may arise after canonicalization of the
+ # base names, in order to prevent object file clashes in the presence
+ # of target-specific *FLAGS
+ my @targetlist = (@proglist, @liblist, @ltliblist);
+ foreach my $pair (@targetlist)
+ {
+ my $base = canonicalize (basename (@$pair[1]));
+ push (@dup_shortnames, $base) if ($seen{$base});
+ $seen{$base} = $base;
+ }
+}
+
+sub handle_programs ()
+{
+ return if ! @proglist;
+ $must_handle_compiled_objects = 1;
+
+ my $seen_global_libobjs =
+ var ('LDADD') && handle_lib_objects ('', 'LDADD');
+
+ foreach my $pair (@proglist)
+ {
+ my ($where, $one_file) = @$pair;
+
+ my $seen_libobjs = 0;
+ my $obj = '.$(OBJEXT)';
+
+ $known_programs{$one_file} = $where;
+
+ # Canonicalize names and check for misspellings.
+ my $xname = check_canonical_spelling ($one_file, '_LDADD', '_LDFLAGS',
+ '_SOURCES', '_OBJECTS',
+ '_DEPENDENCIES');
+
+ $where->push_context ("while processing program '$one_file'");
+ $where->set (INTERNAL->get);
+
+ my $linker = handle_source_transform ($xname, $one_file, $obj, $where,
+ NONLIBTOOL => 1, LIBTOOL => 0);
+
+ if (var ($xname . "_LDADD"))
+ {
+ $seen_libobjs = handle_lib_objects ($xname, $xname . '_LDADD');
+ }
+ else
+ {
+ # User didn't define prog_LDADD override. So do it.
+ define_variable ($xname . '_LDADD', '$(LDADD)', $where);
+
+ # This does a bit too much work. But we need it to
+ # generate _DEPENDENCIES when appropriate.
+ if (var ('LDADD'))
+ {
+ $seen_libobjs = handle_lib_objects ($xname, 'LDADD');
+ }
+ }
+
+ reject_var ($xname . '_LIBADD',
+ "use '${xname}_LDADD', not '${xname}_LIBADD'");
+
+ set_seen ($xname . '_DEPENDENCIES');
+ set_seen ('EXTRA_' . $xname . '_DEPENDENCIES');
+ set_seen ($xname . '_LDFLAGS');
+
+ # Determine program to use for link.
+ my($xlink, $vlink) = define_per_target_linker_variable ($linker, $xname);
+ $vlink = verbose_flag ($vlink || 'GEN');
+
+ # If the resulting program lies in a subdirectory,
+ # ensure that the directory exists before we need it.
+ my $dirstamp = require_build_directory_maybe ($one_file);
+
+ $libtool_clean_directories{dirname ($one_file)} = 1;
+
+ $output_rules .= file_contents ('program',
+ $where,
+ PROGRAM => $one_file,
+ XPROGRAM => $xname,
+ XLINK => $xlink,
+ VERBOSE => $vlink,
+ DIRSTAMP => $dirstamp,
+ EXEEXT => '$(EXEEXT)');
+
+ if ($seen_libobjs || $seen_global_libobjs)
+ {
+ if (var ($xname . '_LDADD'))
+ {
+ check_libobjs_sources ($xname, $xname . '_LDADD');
+ }
+ elsif (var ('LDADD'))
+ {
+ check_libobjs_sources ($xname, 'LDADD');
+ }
+ }
+ }
+}
+
+
+sub handle_libraries ()
+{
+ return if ! @liblist;
+ $must_handle_compiled_objects = 1;
+
+ my @prefix = am_primary_prefixes ('LIBRARIES', 0, 'lib', 'pkglib',
+ 'noinst', 'check');
+
+ if (@prefix)
+ {
+ my $var = rvar ($prefix[0] . '_LIBRARIES');
+ $var->requires_variables ('library used', 'RANLIB');
+ }
+
+ define_variable ('AR', 'ar', INTERNAL);
+ define_variable ('ARFLAGS', 'cru', INTERNAL);
+ define_verbose_tagvar ('AR');
+
+ foreach my $pair (@liblist)
+ {
+ my ($where, $onelib) = @$pair;
+
+ my $seen_libobjs = 0;
+ # Check that the library fits the standard naming convention.
+ my $bn = basename ($onelib);
+ if ($bn !~ /^lib.*\.a$/)
+ {
+ $bn =~ s/^(?:lib)?(.*?)(?:\.[^.]*)?$/lib$1.a/;
+ my $suggestion = dirname ($onelib) . "/$bn";
+ $suggestion =~ s|^\./||g;
+ msg ('error-gnu/warn', $where,
+ "'$onelib' is not a standard library name\n"
+ . "did you mean '$suggestion'?")
+ }
+
+ ($known_libraries{$onelib} = $bn) =~ s/\.a$//;
+
+ $where->push_context ("while processing library '$onelib'");
+ $where->set (INTERNAL->get);
+
+ my $obj = '.$(OBJEXT)';
+
+ # Canonicalize names and check for misspellings.
+ my $xlib = check_canonical_spelling ($onelib, '_LIBADD', '_SOURCES',
+ '_OBJECTS', '_DEPENDENCIES',
+ '_AR');
+
+ if (! var ($xlib . '_AR'))
+ {
+ define_variable ($xlib . '_AR', '$(AR) $(ARFLAGS)', $where);
+ }
+
+ # Generate support for conditional object inclusion in
+ # libraries.
+ if (var ($xlib . '_LIBADD'))
+ {
+ if (handle_lib_objects ($xlib, $xlib . '_LIBADD'))
+ {
+ $seen_libobjs = 1;
+ }
+ }
+ else
+ {
+ define_variable ($xlib . "_LIBADD", '', $where);
+ }
+
+ reject_var ($xlib . '_LDADD',
+ "use '${xlib}_LIBADD', not '${xlib}_LDADD'");
+
+ # Make sure we at look at this.
+ set_seen ($xlib . '_DEPENDENCIES');
+ set_seen ('EXTRA_' . $xlib . '_DEPENDENCIES');
+
+ handle_source_transform ($xlib, $onelib, $obj, $where,
+ NONLIBTOOL => 1, LIBTOOL => 0);
+
+ # If the resulting library lies in a subdirectory,
+ # make sure this directory will exist.
+ my $dirstamp = require_build_directory_maybe ($onelib);
+ my $verbose = verbose_flag ('AR');
+ my $silent = silent_flag ();
+
+ $output_rules .= file_contents ('library',
+ $where,
+ VERBOSE => $verbose,
+ SILENT => $silent,
+ LIBRARY => $onelib,
+ XLIBRARY => $xlib,
+ DIRSTAMP => $dirstamp);
+
+ if ($seen_libobjs)
+ {
+ if (var ($xlib . '_LIBADD'))
+ {
+ check_libobjs_sources ($xlib, $xlib . '_LIBADD');
+ }
+ }
+
+ if (! $seen_ar)
+ {
+ msg ('extra-portability', $where,
+ "'$onelib': linking libraries using a non-POSIX\n"
+ . "archiver requires 'AM_PROG_AR' in '$configure_ac'")
+ }
+ }
+}
+
+
+sub handle_ltlibraries ()
+{
+ return if ! @ltliblist;
+ $must_handle_compiled_objects = 1;
+
+ my @prefix = am_primary_prefixes ('LTLIBRARIES', 0, 'lib', 'pkglib',
+ 'noinst', 'check');
+
+ if (@prefix)
+ {
+ my $var = rvar ($prefix[0] . '_LTLIBRARIES');
+ $var->requires_variables ('Libtool library used', 'LIBTOOL');
+ }
+
+ my %instdirs = ();
+ my %instsubdirs = ();
+ my %instconds = ();
+ my %liblocations = (); # Location (in Makefile.am) of each library.
+
+ foreach my $key (@prefix)
+ {
+ # Get the installation directory of each library.
+ my $dir = $key;
+ my $strip_subdir = 1;
+ if ($dir =~ /^nobase_/)
+ {
+ $dir =~ s/^nobase_//;
+ $strip_subdir = 0;
+ }
+ my $var = rvar ($key . '_LTLIBRARIES');
+
+ # We reject libraries which are installed in several places
+ # in the same condition, because we can only specify one
+ # '-rpath' option.
+ $var->traverse_recursively
+ (sub
+ {
+ my ($var, $val, $cond, $full_cond) = @_;
+ my $hcond = $full_cond->human;
+ my $where = $var->rdef ($cond)->location;
+ my $ldir = '';
+ $ldir = '/' . dirname ($val)
+ if (!$strip_subdir);
+ # A library cannot be installed in different directories
+ # in overlapping conditions.
+ if (exists $instconds{$val})
+ {
+ my ($msg, $acond) =
+ $instconds{$val}->ambiguous_p ($val, $full_cond);
+
+ if ($msg)
+ {
+ error ($where, $msg, partial => 1);
+ my $dirtxt = "installed " . ($strip_subdir ? "in" : "below") . " '$dir'";
+ $dirtxt = "built for '$dir'"
+ if $dir eq 'EXTRA' || $dir eq 'noinst' || $dir eq 'check';
+ my $dircond =
+ $full_cond->true ? "" : " in condition $hcond";
+
+ error ($where, "'$val' should be $dirtxt$dircond ...",
+ partial => 1);
+
+ my $hacond = $acond->human;
+ my $adir = $instdirs{$val}{$acond};
+ my $adirtxt = "installed in '$adir'";
+ $adirtxt = "built for '$adir'"
+ if ($adir eq 'EXTRA' || $adir eq 'noinst'
+ || $adir eq 'check');
+ my $adircond = $acond->true ? "" : " in condition $hacond";
+
+ my $onlyone = ($dir ne $adir) ?
+ ("\nLibtool libraries can be built for only one "
+ . "destination") : "";
+
+ error ($liblocations{$val}{$acond},
+ "... and should also be $adirtxt$adircond.$onlyone");
+ return;
+ }
+ }
+ else
+ {
+ $instconds{$val} = new Automake::DisjConditions;
+ }
+ $instdirs{$val}{$full_cond} = $dir;
+ $instsubdirs{$val}{$full_cond} = $ldir;
+ $liblocations{$val}{$full_cond} = $where;
+ $instconds{$val} = $instconds{$val}->merge ($full_cond);
+ },
+ sub
+ {
+ return ();
+ },
+ skip_ac_subst => 1);
+ }
+
+ foreach my $pair (@ltliblist)
+ {
+ my ($where, $onelib) = @$pair;
+
+ my $seen_libobjs = 0;
+ my $obj = '.lo';
+
+ # Canonicalize names and check for misspellings.
+ my $xlib = check_canonical_spelling ($onelib, '_LIBADD', '_LDFLAGS',
+ '_SOURCES', '_OBJECTS',
+ '_DEPENDENCIES');
+
+ # Check that the library fits the standard naming convention.
+ my $libname_rx = '^lib.*\.la';
+ my $ldvar = var ("${xlib}_LDFLAGS") || var ('AM_LDFLAGS');
+ my $ldvar2 = var ('LDFLAGS');
+ if (($ldvar && grep (/-module/, $ldvar->value_as_list_recursive))
+ || ($ldvar2 && grep (/-module/, $ldvar2->value_as_list_recursive)))
+ {
+ # Relax name checking for libtool modules.
+ $libname_rx = '\.la';
+ }
+
+ my $bn = basename ($onelib);
+ if ($bn !~ /$libname_rx$/)
+ {
+ my $type = 'library';
+ if ($libname_rx eq '\.la')
+ {
+ $bn =~ s/^(lib|)(.*?)(?:\.[^.]*)?$/$1$2.la/;
+ $type = 'module';
+ }
+ else
+ {
+ $bn =~ s/^(?:lib)?(.*?)(?:\.[^.]*)?$/lib$1.la/;
+ }
+ my $suggestion = dirname ($onelib) . "/$bn";
+ $suggestion =~ s|^\./||g;
+ msg ('error-gnu/warn', $where,
+ "'$onelib' is not a standard libtool $type name\n"
+ . "did you mean '$suggestion'?")
+ }
+
+ ($known_libraries{$onelib} = $bn) =~ s/\.la$//;
+
+ $where->push_context ("while processing Libtool library '$onelib'");
+ $where->set (INTERNAL->get);
+
+ # Make sure we look at these.
+ set_seen ($xlib . '_LDFLAGS');
+ set_seen ($xlib . '_DEPENDENCIES');
+ set_seen ('EXTRA_' . $xlib . '_DEPENDENCIES');
+
+ # Generate support for conditional object inclusion in
+ # libraries.
+ if (var ($xlib . '_LIBADD'))
+ {
+ if (handle_lib_objects ($xlib, $xlib . '_LIBADD'))
+ {
+ $seen_libobjs = 1;
+ }
+ }
+ else
+ {
+ define_variable ($xlib . "_LIBADD", '', $where);
+ }
+
+ reject_var ("${xlib}_LDADD",
+ "use '${xlib}_LIBADD', not '${xlib}_LDADD'");
+
+
+ my $linker = handle_source_transform ($xlib, $onelib, $obj, $where,
+ NONLIBTOOL => 0, LIBTOOL => 1);
+
+ # Determine program to use for link.
+ my($xlink, $vlink) = define_per_target_linker_variable ($linker, $xlib);
+ $vlink = verbose_flag ($vlink || 'GEN');
+
+ my $rpathvar = "am_${xlib}_rpath";
+ my $rpath = "\$($rpathvar)";
+ foreach my $rcond ($instconds{$onelib}->conds)
+ {
+ my $val;
+ if ($instdirs{$onelib}{$rcond} eq 'EXTRA'
+ || $instdirs{$onelib}{$rcond} eq 'noinst'
+ || $instdirs{$onelib}{$rcond} eq 'check')
+ {
+ # It's an EXTRA_ library, so we can't specify -rpath,
+ # because we don't know where the library will end up.
+ # The user probably knows, but generally speaking automake
+ # doesn't -- and in fact configure could decide
+ # dynamically between two different locations.
+ $val = '';
+ }
+ else
+ {
+ $val = ('-rpath $(' . $instdirs{$onelib}{$rcond} . 'dir)');
+ $val .= $instsubdirs{$onelib}{$rcond}
+ if defined $instsubdirs{$onelib}{$rcond};
+ }
+ if ($rcond->true)
+ {
+ # If $rcond is true there is only one condition and
+ # there is no point defining an helper variable.
+ $rpath = $val;
+ }
+ else
+ {
+ define_pretty_variable ($rpathvar, $rcond, INTERNAL, $val);
+ }
+ }
+
+ # If the resulting library lies in a subdirectory,
+ # make sure this directory will exist.
+ my $dirstamp = require_build_directory_maybe ($onelib);
+
+ # Remember to cleanup .libs/ in this directory.
+ my $dirname = dirname $onelib;
+ $libtool_clean_directories{$dirname} = 1;
+
+ $output_rules .= file_contents ('ltlibrary',
+ $where,
+ LTLIBRARY => $onelib,
+ XLTLIBRARY => $xlib,
+ RPATH => $rpath,
+ XLINK => $xlink,
+ VERBOSE => $vlink,
+ DIRSTAMP => $dirstamp);
+ if ($seen_libobjs)
+ {
+ if (var ($xlib . '_LIBADD'))
+ {
+ check_libobjs_sources ($xlib, $xlib . '_LIBADD');
+ }
+ }
+
+ if (! $seen_ar)
+ {
+ msg ('extra-portability', $where,
+ "'$onelib': linking libtool libraries using a non-POSIX\n"
+ . "archiver requires 'AM_PROG_AR' in '$configure_ac'")
+ }
+ }
+}
+
+# See if any _SOURCES variable were misspelled.
+sub check_typos ()
+{
+ # It is ok if the user sets this particular variable.
+ set_seen 'AM_LDFLAGS';
+
+ foreach my $primary ('SOURCES', 'LIBADD', 'LDADD', 'LDFLAGS', 'DEPENDENCIES')
+ {
+ foreach my $var (variables $primary)
+ {
+ my $varname = $var->name;
+ # A configure variable is always legitimate.
+ next if exists $configure_vars{$varname};
+
+ for my $cond ($var->conditions->conds)
+ {
+ $varname =~ /^(?:EXTRA_)?(?:nobase_)?(?:dist_|nodist_)?(.*)_[[:alnum:]]+$/;
+ msg_var ('syntax', $var, "variable '$varname' is defined but no"
+ . " program or\nlibrary has '$1' as canonical name"
+ . " (possible typo)")
+ unless $var->rdef ($cond)->seen;
+ }
+ }
+ }
+}
+
+
+sub handle_scripts ()
+{
+ # NOTE we no longer automatically clean SCRIPTS, because it is
+ # useful to sometimes distribute scripts verbatim. This happens
+ # e.g. in Automake itself.
+ am_install_var ('-candist', 'scripts', 'SCRIPTS',
+ 'bin', 'sbin', 'libexec', 'pkglibexec', 'pkgdata',
+ 'noinst', 'check');
+}
+
+
+## ------------------------ ##
+## Handling Texinfo files. ##
+## ------------------------ ##
+
+# ($OUTFILE, $VFILE)
+# scan_texinfo_file ($FILENAME)
+# -----------------------------
+# $OUTFILE - name of the info file produced by $FILENAME.
+# $VFILE - name of the version.texi file used (undef if none).
+sub scan_texinfo_file
+{
+ my ($filename) = @_;
+
+ my $texi = new Automake::XFile "< $filename";
+ verb "reading $filename";
+
+ my ($outfile, $vfile);
+ while ($_ = $texi->getline)
+ {
+ if (/^\@setfilename +(\S+)/)
+ {
+ # Honor only the first @setfilename. (It's possible to have
+ # more occurrences later if the manual shows examples of how
+ # to use @setfilename...)
+ next if $outfile;
+
+ $outfile = $1;
+ if (index ($outfile, '.') < 0)
+ {
+ msg 'obsolete', "$filename:$.",
+ "use of suffix-less info files is discouraged"
+ }
+ elsif ($outfile !~ /\.info$/)
+ {
+ error ("$filename:$.",
+ "output '$outfile' has unrecognized extension");
+ return;
+ }
+ }
+ # A "version.texi" file is actually any file whose name matches
+ # "vers*.texi".
+ elsif (/^\@include\s+(vers[^.]*\.texi)\s*$/)
+ {
+ $vfile = $1;
+ }
+ }
+
+ if (! $outfile)
+ {
+ err_am "'$filename' missing \@setfilename";
+ return;
+ }
+
+ return ($outfile, $vfile);
+}
+
+
+# ($DIRSTAMP, @CLEAN_FILES)
+# output_texinfo_build_rules ($SOURCE, $DEST, $INSRC, @DEPENDENCIES)
+# ------------------------------------------------------------------
+# SOURCE - the source Texinfo file
+# DEST - the destination Info file
+# INSRC - whether DEST should be built in the source tree
+# DEPENDENCIES - known dependencies
+sub output_texinfo_build_rules
+{
+ my ($source, $dest, $insrc, @deps) = @_;
+
+ # Split 'a.texi' into 'a' and '.texi'.
+ my ($spfx, $ssfx) = ($source =~ /^(.*?)(\.[^.]*)?$/);
+ my ($dpfx, $dsfx) = ($dest =~ /^(.*?)(\.[^.]*)?$/);
+
+ $ssfx ||= "";
+ $dsfx ||= "";
+
+ # We can output two kinds of rules: the "generic" rules use Make
+ # suffix rules and are appropriate when $source and $dest do not lie
+ # in a sub-directory; the "specific" rules are needed in the other
+ # case.
+ #
+ # The former are output only once (this is not really apparent here,
+ # but just remember that some logic deeper in Automake will not
+ # output the same rule twice); while the later need to be output for
+ # each Texinfo source.
+ my $generic;
+ my $makeinfoflags;
+ my $sdir = dirname $source;
+ if ($sdir eq '.' && dirname ($dest) eq '.')
+ {
+ $generic = 1;
+ $makeinfoflags = '-I $(srcdir)';
+ }
+ else
+ {
+ $generic = 0;
+ $makeinfoflags = "-I $sdir -I \$(srcdir)/$sdir";
+ }
+
+ # A directory can contain two kinds of info files: some built in the
+ # source tree, and some built in the build tree. The rules are
+ # different in each case. However we cannot output two different
+ # set of generic rules. Because in-source builds are more usual, we
+ # use generic rules in this case and fall back to "specific" rules
+ # for build-dir builds. (It should not be a problem to invert this
+ # if needed.)
+ $generic = 0 unless $insrc;
+
+ # We cannot use a suffix rule to build info files with an empty
+ # extension. Otherwise we would output a single suffix inference
+ # rule, with separate dependencies, as in
+ #
+ # .texi:
+ # $(MAKEINFO) ...
+ # foo.info: foo.texi
+ #
+ # which confuse Solaris make. (See the Autoconf manual for
+ # details.) Therefore we use a specific rule in this case. This
+ # applies to info files only (dvi and pdf files always have an
+ # extension).
+ my $generic_info = ($generic && $dsfx) ? 1 : 0;
+
+ # If the resulting file lies in a subdirectory,
+ # make sure this directory will exist.
+ my $dirstamp = require_build_directory_maybe ($dest);
+
+ my $dipfx = ($insrc ? '$(srcdir)/' : '') . $dpfx;
+
+ $output_rules .= file_contents ('texibuild',
+ new Automake::Location,
+ AM_V_MAKEINFO => verbose_flag('MAKEINFO'),
+ AM_V_TEXI2DVI => verbose_flag('TEXI2DVI'),
+ AM_V_TEXI2PDF => verbose_flag('TEXI2PDF'),
+ DEPS => "@deps",
+ DEST_PREFIX => $dpfx,
+ DEST_INFO_PREFIX => $dipfx,
+ DEST_SUFFIX => $dsfx,
+ DIRSTAMP => $dirstamp,
+ GENERIC => $generic,
+ GENERIC_INFO => $generic_info,
+ INSRC => $insrc,
+ MAKEINFOFLAGS => $makeinfoflags,
+ SILENT => silent_flag(),
+ SOURCE => ($generic
+ ? '$<' : $source),
+ SOURCE_INFO => ($generic_info
+ ? '$<' : $source),
+ SOURCE_REAL => $source,
+ SOURCE_SUFFIX => $ssfx,
+ TEXIQUIET => verbose_flag('texinfo'),
+ TEXIDEVNULL => verbose_flag('texidevnull'),
+ );
+ return ($dirstamp, "$dpfx.dvi", "$dpfx.pdf", "$dpfx.ps", "$dpfx.html");
+}
+
+
+# ($MOSTLYCLEAN, $TEXICLEAN, $MAINTCLEAN)
+# handle_texinfo_helper ($info_texinfos)
+# --------------------------------------
+# Handle all Texinfo source; helper for 'handle_texinfo'.
+sub handle_texinfo_helper
+{
+ my ($info_texinfos) = @_;
+ my (@infobase, @info_deps_list, @texi_deps);
+ my %versions;
+ my $done = 0;
+ my (@mostly_cleans, @texi_cleans, @maint_cleans) = ('', '', '');
+
+ # Build a regex matching user-cleaned files.
+ my $d = var 'DISTCLEANFILES';
+ my $c = var 'CLEANFILES';
+ my @f = ();
+ push @f, $d->value_as_list_recursive (inner_expand => 1) if $d;
+ push @f, $c->value_as_list_recursive (inner_expand => 1) if $c;
+ @f = map { s|[^A-Za-z_0-9*\[\]\-]|\\$&|g; s|\*|[^/]*|g; $_; } @f;
+ my $user_cleaned_files = '^(?:' . join ('|', @f) . ')$';
+
+ foreach my $texi
+ ($info_texinfos->value_as_list_recursive (inner_expand => 1))
+ {
+ my $infobase = $texi;
+ if ($infobase =~ s/\.texi$//)
+ {
+ 1; # Nothing more to do.
+ }
+ elsif ($infobase =~ s/\.(txi|texinfo)$//)
+ {
+ msg_var 'obsolete', $info_texinfos,
+ "suffix '.$1' for Texinfo files is discouraged;" .
+ " use '.texi' instead";
+ }
+ else
+ {
+ # FIXME: report line number.
+ err_am "texinfo file '$texi' has unrecognized extension";
+ next;
+ }
+
+ push @infobase, $infobase;
+
+ # If 'version.texi' is referenced by input file, then include
+ # automatic versioning capability.
+ my ($out_file, $vtexi) =
+ scan_texinfo_file ("$relative_dir/$texi")
+ or next;
+ # Directory of auxiliary files and build by-products used by texi2dvi
+ # and texi2pdf.
+ push @mostly_cleans, "$infobase.t2d";
+ push @mostly_cleans, "$infobase.t2p";
+
+ # If the Texinfo source is in a subdirectory, create the
+ # resulting info in this subdirectory. If it is in the current
+ # directory, try hard to not prefix "./" because it breaks the
+ # generic rules.
+ my $outdir = dirname ($texi) . '/';
+ $outdir = "" if $outdir eq './';
+ $out_file = $outdir . $out_file;
+
+ # Until Automake 1.6.3, .info files were built in the
+ # source tree. This was an obstacle to the support of
+ # non-distributed .info files, and non-distributed .texi
+ # files.
+ #
+ # * Non-distributed .texi files is important in some packages
+ # where .texi files are built at make time, probably using
+ # other binaries built in the package itself, maybe using
+ # tools or information found on the build host. Because
+ # these files are not distributed they are always rebuilt
+ # at make time; they should therefore not lie in the source
+ # directory. One plan was to support this using
+ # nodist_info_TEXINFOS or something similar. (Doing this
+ # requires some sanity checks. For instance Automake should
+ # not allow:
+ # dist_info_TEXINFOS = foo.texi
+ # nodist_foo_TEXINFOS = included.texi
+ # because a distributed file should never depend on a
+ # non-distributed file.)
+ #
+ # * If .texi files are not distributed, then .info files should
+ # not be distributed either. There are also cases where one
+ # wants to distribute .texi files, but does not want to
+ # distribute the .info files. For instance the Texinfo package
+ # distributes the tool used to build these files; it would
+ # be a waste of space to distribute them. It's not clear
+ # which syntax we should use to indicate that .info files should
+ # not be distributed. Akim Demaille suggested that eventually
+ # we switch to a new syntax:
+ # | Maybe we should take some inspiration from what's already
+ # | done in the rest of Automake. Maybe there is too much
+ # | syntactic sugar here, and you want
+ # | nodist_INFO = bar.info
+ # | dist_bar_info_SOURCES = bar.texi
+ # | bar_texi_DEPENDENCIES = foo.texi
+ # | with a bit of magic to have bar.info represent the whole
+ # | bar*info set. That's a lot more verbose that the current
+ # | situation, but it is # not new, hence the user has less
+ # | to learn.
+ # |
+ # | But there is still too much room for meaningless specs:
+ # | nodist_INFO = bar.info
+ # | dist_bar_info_SOURCES = bar.texi
+ # | dist_PS = bar.ps something-written-by-hand.ps
+ # | nodist_bar_ps_SOURCES = bar.texi
+ # | bar_texi_DEPENDENCIES = foo.texi
+ # | here bar.texi is dist_ in line 2, and nodist_ in 4.
+ #
+ # Back to the point, it should be clear that in order to support
+ # non-distributed .info files, we need to build them in the
+ # build tree, not in the source tree (non-distributed .texi
+ # files are less of a problem, because we do not output build
+ # rules for them). In Automake 1.7 .info build rules have been
+ # largely cleaned up so that .info files get always build in the
+ # build tree, even when distributed. The idea was that
+ # (1) if during a VPATH build the .info file was found to be
+ # absent or out-of-date (in the source tree or in the
+ # build tree), Make would rebuild it in the build tree.
+ # If an up-to-date source-tree of the .info file existed,
+ # make would not rebuild it in the build tree.
+ # (2) having two copies of .info files, one in the source tree
+ # and one (newer) in the build tree is not a problem
+ # because 'make dist' always pick files in the build tree
+ # first.
+ # However it turned out the be a bad idea for several reasons:
+ # * Tru64, OpenBSD, and FreeBSD (not NetBSD) Make do not behave
+ # like GNU Make on point (1) above. These implementations
+ # of Make would always rebuild .info files in the build
+ # tree, even if such files were up to date in the source
+ # tree. Consequently, it was impossible to perform a VPATH
+ # build of a package containing Texinfo files using these
+ # Make implementations.
+ # (Refer to the Autoconf Manual, section "Limitation of
+ # Make", paragraph "VPATH", item "target lookup", for
+ # an account of the differences between these
+ # implementations.)
+ # * The GNU Coding Standards require these files to be built
+ # in the source-tree (when they are distributed, that is).
+ # * Keeping a fresher copy of distributed files in the
+ # build tree can be annoying during development because
+ # - if the files is kept under CVS, you really want it
+ # to be updated in the source tree
+ # - it is confusing that 'make distclean' does not erase
+ # all files in the build tree.
+ #
+ # Consequently, starting with Automake 1.8, .info files are
+ # built in the source tree again. Because we still plan to
+ # support non-distributed .info files at some point, we
+ # have a single variable ($INSRC) that controls whether
+ # the current .info file must be built in the source tree
+ # or in the build tree. Actually this variable is switched
+ # off in two cases:
+ # (1) For '.info' files that appear to be cleaned; this is for
+ # backward compatibility with package such as Texinfo,
+ # which do things like
+ # info_TEXINFOS = texinfo.txi info-stnd.texi info.texi
+ # DISTCLEANFILES = texinfo texinfo-* info*.info*
+ # # Do not create info files for distribution.
+ # dist-info:
+ # in order not to distribute .info files.
+ # (2) When the undocumented option 'info-in-builddir' is given.
+ # This is done to allow the developers of GCC, GDB, GNU
+ # binutils and the GNU bfd library to force the '.info' files
+ # to be generated in the builddir rather than the srcdir, as
+ # was once done when the (now removed) 'cygnus' option was
+ # given. See automake bug#11034 for more discussion.
+ my $insrc = 1;
+ my $soutdir = '$(srcdir)/' . $outdir;
+
+ if (option 'info-in-builddir')
+ {
+ $insrc = 0;
+ }
+ elsif ($out_file =~ $user_cleaned_files)
+ {
+ $insrc = 0;
+ msg 'obsolete', "$am_file.am", <<EOF;
+Oops!
+ It appears this file (or files included by it) are triggering
+ an undocumented, soon-to-be-removed automake hack.
+ Future automake versions will no longer place in the builddir
+ (rather than in the srcdir) the generated '.info' files that
+ appear to be cleaned, by e.g. being listed in CLEANFILES or
+ DISTCLEANFILES.
+ If you want your '.info' files to be placed in the builddir
+ rather than in the srcdir, you have to use the shiny new
+ 'info-in-builddir' automake option.
+EOF
+ }
+
+ $outdir = $soutdir if $insrc;
+
+ # If user specified file_TEXINFOS, then use that as explicit
+ # dependency list.
+ @texi_deps = ();
+ push (@texi_deps, "${soutdir}${vtexi}") if $vtexi;
+
+ my $canonical = canonicalize ($infobase);
+ if (var ($canonical . "_TEXINFOS"))
+ {
+ push (@texi_deps, '$(' . $canonical . '_TEXINFOS)');
+ push_dist_common ('$(' . $canonical . '_TEXINFOS)');
+ }
+
+ my ($dirstamp, @cfiles) =
+ output_texinfo_build_rules ($texi, $out_file, $insrc, @texi_deps);
+ push (@texi_cleans, @cfiles);
+
+ push (@info_deps_list, $out_file);
+
+ # If a vers*.texi file is needed, emit the rule.
+ if ($vtexi)
+ {
+ err_am ("'$vtexi', included in '$texi', "
+ . "also included in '$versions{$vtexi}'")
+ if defined $versions{$vtexi};
+ $versions{$vtexi} = $texi;
+
+ # We number the stamp-vti files. This is doable since the
+ # actual names don't matter much. We only number starting
+ # with the second one, so that the common case looks nice.
+ my $vti = ($done ? $done : 'vti');
+ ++$done;
+
+ # This is ugly, but it is our historical practice.
+ if ($config_aux_dir_set_in_configure_ac)
+ {
+ require_conf_file_with_macro (TRUE, 'info_TEXINFOS', FOREIGN,
+ 'mdate-sh');
+ }
+ else
+ {
+ require_file_with_macro (TRUE, 'info_TEXINFOS',
+ FOREIGN, 'mdate-sh');
+ }
+
+ my $conf_dir;
+ if ($config_aux_dir_set_in_configure_ac)
+ {
+ $conf_dir = "$am_config_aux_dir/";
+ }
+ else
+ {
+ $conf_dir = '$(srcdir)/';
+ }
+ $output_rules .= file_contents ('texi-vers',
+ new Automake::Location,
+ TEXI => $texi,
+ VTI => $vti,
+ STAMPVTI => "${soutdir}stamp-$vti",
+ VTEXI => "$soutdir$vtexi",
+ MDDIR => $conf_dir,
+ DIRSTAMP => $dirstamp);
+ }
+ }
+
+ # Handle location of texinfo.tex.
+ my $need_texi_file = 0;
+ my $texinfodir;
+ if (var ('TEXINFO_TEX'))
+ {
+ # The user defined TEXINFO_TEX so assume he knows what he is
+ # doing.
+ $texinfodir = ('$(srcdir)/'
+ . dirname (variable_value ('TEXINFO_TEX')));
+ }
+ elsif ($config_aux_dir_set_in_configure_ac)
+ {
+ $texinfodir = $am_config_aux_dir;
+ define_variable ('TEXINFO_TEX', "$texinfodir/texinfo.tex", INTERNAL);
+ $need_texi_file = 2; # so that we require_conf_file later
+ }
+ else
+ {
+ $texinfodir = '$(srcdir)';
+ $need_texi_file = 1;
+ }
+ define_variable ('am__TEXINFO_TEX_DIR', $texinfodir, INTERNAL);
+
+ push (@dist_targets, 'dist-info');
+
+ if (! option 'no-installinfo')
+ {
+ # Make sure documentation is made and installed first. Use
+ # $(INFO_DEPS), not 'info', because otherwise recursive makes
+ # get run twice during "make all".
+ unshift (@all, '$(INFO_DEPS)');
+ }
+
+ define_files_variable ("DVIS", @infobase, 'dvi', INTERNAL);
+ define_files_variable ("PDFS", @infobase, 'pdf', INTERNAL);
+ define_files_variable ("PSS", @infobase, 'ps', INTERNAL);
+ define_files_variable ("HTMLS", @infobase, 'html', INTERNAL);
+
+ # This next isn't strictly needed now -- the places that look here
+ # could easily be changed to look in info_TEXINFOS. But this is
+ # probably better, in case noinst_TEXINFOS is ever supported.
+ define_variable ("TEXINFOS", variable_value ('info_TEXINFOS'), INTERNAL);
+
+ # Do some error checking. Note that this file is not required
+ # when in Cygnus mode; instead we defined TEXINFO_TEX explicitly
+ # up above.
+ if ($need_texi_file && ! option 'no-texinfo.tex')
+ {
+ if ($need_texi_file > 1)
+ {
+ require_conf_file_with_macro (TRUE, 'info_TEXINFOS', FOREIGN,
+ 'texinfo.tex');
+ }
+ else
+ {
+ require_file_with_macro (TRUE, 'info_TEXINFOS', FOREIGN,
+ 'texinfo.tex');
+ }
+ }
+
+ return (makefile_wrap ("", "\t ", @mostly_cleans),
+ makefile_wrap ("", "\t ", @texi_cleans),
+ makefile_wrap ("", "\t ", @maint_cleans));
+}
+
+
+sub handle_texinfo ()
+{
+ reject_var 'TEXINFOS', "'TEXINFOS' is an anachronism; use 'info_TEXINFOS'";
+ # FIXME: I think this is an obsolete future feature name.
+ reject_var 'html_TEXINFOS', "HTML generation not yet supported";
+
+ my $info_texinfos = var ('info_TEXINFOS');
+ my ($mostlyclean, $clean, $maintclean) = ('', '', '');
+ if ($info_texinfos)
+ {
+ define_verbose_texinfo;
+ ($mostlyclean, $clean, $maintclean) = handle_texinfo_helper ($info_texinfos);
+ chomp $mostlyclean;
+ chomp $clean;
+ chomp $maintclean;
+ }
+
+ $output_rules .= file_contents ('texinfos',
+ new Automake::Location,
+ AM_V_DVIPS => verbose_flag('DVIPS'),
+ MOSTLYCLEAN => $mostlyclean,
+ TEXICLEAN => $clean,
+ MAINTCLEAN => $maintclean,
+ 'LOCAL-TEXIS' => !!$info_texinfos,
+ TEXIQUIET => verbose_flag('texinfo'));
+}
+
+
+sub handle_man_pages ()
+{
+ reject_var 'MANS', "'MANS' is an anachronism; use 'man_MANS'";
+
+ # Find all the sections in use. We do this by first looking for
+ # "standard" sections, and then looking for any additional
+ # sections used in man_MANS.
+ my (%sections, %notrans_sections, %trans_sections,
+ %notrans_vars, %trans_vars, %notrans_sect_vars, %trans_sect_vars);
+ # We handle nodist_ for uniformity. man pages aren't distributed
+ # by default so it isn't actually very important.
+ foreach my $npfx ('', 'notrans_')
+ {
+ foreach my $pfx ('', 'dist_', 'nodist_')
+ {
+ # Add more sections as needed.
+ foreach my $section ('0'..'9', 'n', 'l')
+ {
+ my $varname = $npfx . $pfx . 'man' . $section . '_MANS';
+ if (var ($varname))
+ {
+ $sections{$section} = 1;
+ $varname = '$(' . $varname . ')';
+ if ($npfx eq 'notrans_')
+ {
+ $notrans_sections{$section} = 1;
+ $notrans_sect_vars{$varname} = 1;
+ }
+ else
+ {
+ $trans_sections{$section} = 1;
+ $trans_sect_vars{$varname} = 1;
+ }
+
+ push_dist_common ($varname)
+ if $pfx eq 'dist_';
+ }
+ }
+
+ my $varname = $npfx . $pfx . 'man_MANS';
+ my $var = var ($varname);
+ if ($var)
+ {
+ foreach ($var->value_as_list_recursive)
+ {
+ # A page like 'foo.1c' goes into man1dir.
+ if (/\.([0-9a-z])([a-z]*)$/)
+ {
+ $sections{$1} = 1;
+ if ($npfx eq 'notrans_')
+ {
+ $notrans_sections{$1} = 1;
+ }
+ else
+ {
+ $trans_sections{$1} = 1;
+ }
+ }
+ }
+
+ $varname = '$(' . $varname . ')';
+ if ($npfx eq 'notrans_')
+ {
+ $notrans_vars{$varname} = 1;
+ }
+ else
+ {
+ $trans_vars{$varname} = 1;
+ }
+ push_dist_common ($varname)
+ if $pfx eq 'dist_';
+ }
+ }
+ }
+
+ return unless %sections;
+
+ my @unsorted_deps;
+
+ # Build section independent variables.
+ my $have_notrans = %notrans_vars;
+ my @notrans_list = sort keys %notrans_vars;
+ my $have_trans = %trans_vars;
+ my @trans_list = sort keys %trans_vars;
+
+ # Now for each section, generate an install and uninstall rule.
+ # Sort sections so output is deterministic.
+ foreach my $section (sort keys %sections)
+ {
+ # Build section dependent variables.
+ my $notrans_mans = $have_notrans || exists $notrans_sections{$section};
+ my $trans_mans = $have_trans || exists $trans_sections{$section};
+ my (%notrans_this_sect, %trans_this_sect);
+ my $expr = 'man' . $section . '_MANS';
+ foreach my $varname (keys %notrans_sect_vars)
+ {
+ if ($varname =~ /$expr/)
+ {
+ $notrans_this_sect{$varname} = 1;
+ }
+ }
+ foreach my $varname (keys %trans_sect_vars)
+ {
+ if ($varname =~ /$expr/)
+ {
+ $trans_this_sect{$varname} = 1;
+ }
+ }
+ my @notrans_sect_list = sort keys %notrans_this_sect;
+ my @trans_sect_list = sort keys %trans_this_sect;
+ @unsorted_deps = (keys %notrans_vars, keys %trans_vars,
+ keys %notrans_this_sect, keys %trans_this_sect);
+ my @deps = sort @unsorted_deps;
+ $output_rules .= file_contents ('mans',
+ new Automake::Location,
+ SECTION => $section,
+ DEPS => "@deps",
+ NOTRANS_MANS => $notrans_mans,
+ NOTRANS_SECT_LIST => "@notrans_sect_list",
+ HAVE_NOTRANS => $have_notrans,
+ NOTRANS_LIST => "@notrans_list",
+ TRANS_MANS => $trans_mans,
+ TRANS_SECT_LIST => "@trans_sect_list",
+ HAVE_TRANS => $have_trans,
+ TRANS_LIST => "@trans_list");
+ }
+
+ @unsorted_deps = (keys %notrans_vars, keys %trans_vars,
+ keys %notrans_sect_vars, keys %trans_sect_vars);
+ my @mans = sort @unsorted_deps;
+ $output_vars .= file_contents ('mans-vars',
+ new Automake::Location,
+ MANS => "@mans");
+
+ push (@all, '$(MANS)')
+ unless option 'no-installman';
+}
+
+
+sub handle_data ()
+{
+ am_install_var ('-noextra', '-candist', 'data', 'DATA',
+ 'data', 'dataroot', 'doc', 'dvi', 'html', 'pdf',
+ 'ps', 'sysconf', 'sharedstate', 'localstate',
+ 'pkgdata', 'lisp', 'noinst', 'check');
+}
+
+
+sub handle_tags ()
+{
+ my @config;
+ foreach my $spec (@config_headers)
+ {
+ my ($out, @ins) = split_config_file_spec ($spec);
+ foreach my $in (@ins)
+ {
+ # If the config header source is in this directory,
+ # require it.
+ push @config, basename ($in)
+ if $relative_dir eq dirname ($in);
+ }
+ }
+
+ define_variable ('am__tagged_files',
+ '$(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)'
+ . "@config", INTERNAL);
+
+ if (rvar('am__tagged_files')->value_as_list_recursive
+ || var ('ETAGS_ARGS') || var ('SUBDIRS'))
+ {
+ $output_rules .= file_contents ('tags', new Automake::Location);
+ set_seen 'TAGS_DEPENDENCIES';
+ }
+ else
+ {
+ reject_var ('TAGS_DEPENDENCIES',
+ "it doesn't make sense to define 'TAGS_DEPENDENCIES'"
+ . " without\nsources or 'ETAGS_ARGS'");
+ # Every Makefile must define some sort of TAGS rule.
+ # Otherwise, it would be possible for a top-level "make TAGS"
+ # to fail because some subdirectory failed. Ditto ctags and
+ # cscope.
+ $output_rules .=
+ "tags TAGS:\n\n" .
+ "ctags CTAGS:\n\n" .
+ "cscope cscopelist:\n\n";
+ }
+}
+
+
+# user_phony_rule ($NAME)
+# -----------------------
+# Return false if rule $NAME does not exist. Otherwise,
+# declare it as phony, complete its definition (in case it is
+# conditional), and return its Automake::Rule instance.
+sub user_phony_rule
+{
+ my ($name) = @_;
+ my $rule = rule $name;
+ if ($rule)
+ {
+ depend ('.PHONY', $name);
+ # Define $NAME in all condition where it is not already defined,
+ # so that it is always OK to depend on $NAME.
+ for my $c ($rule->not_always_defined_in_cond (TRUE)->conds)
+ {
+ Automake::Rule::define ($name, 'internal', RULE_AUTOMAKE,
+ $c, INTERNAL);
+ $output_rules .= $c->subst_string . "$name:\n";
+ }
+ }
+ return $rule;
+}
+
+
+# Handle 'dist' target.
+sub handle_dist ()
+{
+ # Substitutions for distdir.am
+ my %transform;
+
+ # Define DIST_SUBDIRS. This must always be done, regardless of the
+ # no-dist setting: target like 'distclean' or 'maintainer-clean' use it.
+ my $subdirs = var ('SUBDIRS');
+ if ($subdirs)
+ {
+ # If SUBDIRS is conditionally defined, then set DIST_SUBDIRS
+ # to all possible directories, and use it. If DIST_SUBDIRS is
+ # defined, just use it.
+
+ # Note that we check DIST_SUBDIRS first on purpose, so that
+ # we don't call has_conditional_contents for now reason.
+ # (In the past one project used so many conditional subdirectories
+ # that calling has_conditional_contents on SUBDIRS caused
+ # automake to grow to 150Mb -- this should not happen with
+ # the current implementation of has_conditional_contents,
+ # but it's more efficient to avoid the call anyway.)
+ if (var ('DIST_SUBDIRS'))
+ {
+ }
+ elsif ($subdirs->has_conditional_contents)
+ {
+ define_pretty_variable
+ ('DIST_SUBDIRS', TRUE, INTERNAL,
+ uniq ($subdirs->value_as_list_recursive));
+ }
+ else
+ {
+ # We always define this because that is what 'distclean'
+ # wants.
+ define_pretty_variable ('DIST_SUBDIRS', TRUE, INTERNAL,
+ '$(SUBDIRS)');
+ }
+ }
+
+ # The remaining definitions are only required when a dist target is used.
+ return if option 'no-dist';
+
+ # At least one of the archive formats must be enabled.
+ if ($relative_dir eq '.')
+ {
+ my $archive_defined = option 'no-dist-gzip' ? 0 : 1;
+ $archive_defined ||=
+ grep { option "dist-$_" } qw(shar zip tarZ bzip2 lzip xz);
+ error (option 'no-dist-gzip',
+ "no-dist-gzip specified but no dist-* specified,\n"
+ . "at least one archive format must be enabled")
+ unless $archive_defined;
+ }
+
+ # Look for common files that should be included in distribution.
+ # If the aux dir is set, and it does not have a Makefile.am, then
+ # we check for these files there as well.
+ my $check_aux = 0;
+ if ($relative_dir eq '.'
+ && $config_aux_dir_set_in_configure_ac)
+ {
+ if (! is_make_dir ($config_aux_dir))
+ {
+ $check_aux = 1;
+ }
+ }
+ foreach my $cfile (@common_files)
+ {
+ if (dir_has_case_matching_file ($relative_dir, $cfile)
+ # The file might be absent, but if it can be built it's ok.
+ || rule $cfile)
+ {
+ push_dist_common ($cfile);
+ }
+
+ # Don't use 'elsif' here because a file might meaningfully
+ # appear in both directories.
+ if ($check_aux && dir_has_case_matching_file ($config_aux_dir, $cfile))
+ {
+ push_dist_common ("$config_aux_dir/$cfile")
+ }
+ }
+
+ # We might copy elements from @configure_dist_common to
+ # @dist_common if we think we need to. If the file appears in our
+ # directory, we would have discovered it already, so we don't
+ # check that. But if the file is in a subdir without a Makefile,
+ # we want to distribute it here if we are doing '.'. Ugly!
+ # Also, in some corner cases, it's possible that the following code
+ # will cause the same file to appear in the $(DIST_COMMON) variables
+ # of two distinct Makefiles; but this is not a problem, since the
+ # 'distdir' target in 'lib/am/distdir.am' can deal with the same
+ # file being distributed multiple times.
+ # See also automake bug#9651.
+ if ($relative_dir eq '.')
+ {
+ foreach my $file (@configure_dist_common)
+ {
+ my $dir = dirname ($file);
+ push_dist_common ($file)
+ if ($dir eq '.' || ! is_make_dir ($dir));
+ }
+ @configure_dist_common = ();
+ }
+
+ # $(am__DIST_COMMON): files to be distributed automatically. Will be
+ # appended to $(DIST_COMMON) in the generated Makefile.
+ # Use 'sort' so that the expansion of $(DIST_COMMON) in the generated
+ # Makefile is deterministic, in face of m4 and/or perl randomizations
+ # (see automake bug#17908).
+ define_pretty_variable ('am__DIST_COMMON', TRUE, INTERNAL,
+ uniq (sort @dist_common));
+
+ # Now that we've processed @dist_common, disallow further attempts
+ # to modify it.
+ $handle_dist_run = 1;
+
+ $transform{'DISTCHECK-HOOK'} = !! rule 'distcheck-hook';
+ $transform{'GETTEXT'} = $seen_gettext && !$seen_gettext_external;
+
+ # If the target 'dist-hook' exists, make sure it is run. This
+ # allows users to do random weird things to the distribution
+ # before it is packaged up.
+ push (@dist_targets, 'dist-hook')
+ if user_phony_rule 'dist-hook';
+ $transform{'DIST-TARGETS'} = join (' ', @dist_targets);
+
+ my $flm = option ('filename-length-max');
+ my $filename_filter = $flm ? '.' x $flm->[1] : '';
+
+ $output_rules .= file_contents ('distdir',
+ new Automake::Location,
+ %transform,
+ FILENAME_FILTER => $filename_filter);
+}
+
+
+# check_directory ($NAME, $WHERE [, $RELATIVE_DIR = "."])
+# -------------------------------------------------------
+# Ensure $NAME is a directory (in $RELATIVE_DIR), and that it uses a sane
+# name. Use $WHERE as a location in the diagnostic, if any.
+sub check_directory
+{
+ my ($dir, $where, $reldir) = @_;
+ $reldir = '.' unless defined $reldir;
+
+ error $where, "required directory $reldir/$dir does not exist"
+ unless -d "$reldir/$dir";
+
+ # If an 'obj/' directory exists, BSD make will enter it before
+ # reading 'Makefile'. Hence the 'Makefile' in the current directory
+ # will not be read.
+ #
+ # % cat Makefile
+ # all:
+ # echo Hello
+ # % cat obj/Makefile
+ # all:
+ # echo World
+ # % make # GNU make
+ # echo Hello
+ # Hello
+ # % pmake # BSD make
+ # echo World
+ # World
+ msg ('portability', $where,
+ "naming a subdirectory 'obj' causes troubles with BSD make")
+ if $dir eq 'obj';
+
+ # 'aux' is probably the most important of the following forbidden name,
+ # since it's tempting to use it as an AC_CONFIG_AUX_DIR.
+ msg ('portability', $where,
+ "name '$dir' is reserved on W32 and DOS platforms")
+ if grep (/^\Q$dir\E$/i, qw/aux lpt1 lpt2 lpt3 com1 com2 com3 com4 con prn/);
+}
+
+# check_directories_in_var ($VARIABLE)
+# ------------------------------------
+# Recursively check all items in variables $VARIABLE as directories
+sub check_directories_in_var
+{
+ my ($var) = @_;
+ $var->traverse_recursively
+ (sub
+ {
+ my ($var, $val, $cond, $full_cond) = @_;
+ check_directory ($val, $var->rdef ($cond)->location, $relative_dir);
+ return ();
+ },
+ undef,
+ skip_ac_subst => 1);
+}
+
+
+sub handle_subdirs ()
+{
+ my $subdirs = var ('SUBDIRS');
+ return
+ unless $subdirs;
+
+ check_directories_in_var $subdirs;
+
+ my $dsubdirs = var ('DIST_SUBDIRS');
+ check_directories_in_var $dsubdirs
+ if $dsubdirs;
+
+ $output_rules .= file_contents ('subdirs', new Automake::Location);
+ rvar ('RECURSIVE_TARGETS')->rdef (TRUE)->{'pretty'} = VAR_SORTED; # Gross!
+}
+
+
+# ($REGEN, @DEPENDENCIES)
+# scan_aclocal_m4
+# ---------------
+# If aclocal.m4 creation is automated, return the list of its dependencies.
+sub scan_aclocal_m4 ()
+{
+ my $regen_aclocal = 0;
+
+ set_seen 'CONFIG_STATUS_DEPENDENCIES';
+ set_seen 'CONFIGURE_DEPENDENCIES';
+
+ if (-f 'aclocal.m4')
+ {
+ define_variable ("ACLOCAL_M4", '$(top_srcdir)/aclocal.m4', INTERNAL);
+
+ my $aclocal = new Automake::XFile "< aclocal.m4";
+ my $line = $aclocal->getline;
+ $regen_aclocal = $line =~ 'generated automatically by aclocal';
+ }
+
+ my @ac_deps = ();
+
+ if (set_seen ('ACLOCAL_M4_SOURCES'))
+ {
+ push (@ac_deps, '$(ACLOCAL_M4_SOURCES)');
+ msg_var ('obsolete', 'ACLOCAL_M4_SOURCES',
+ "'ACLOCAL_M4_SOURCES' is obsolete.\n"
+ . "It should be safe to simply remove it");
+ }
+
+ # Note that it might be possible that aclocal.m4 doesn't exist but
+ # should be auto-generated. This case probably isn't very
+ # important.
+
+ return ($regen_aclocal, @ac_deps);
+}
+
+
+# Helper function for 'substitute_ac_subst_variables'.
+sub substitute_ac_subst_variables_worker
+{
+ my ($token) = @_;
+ return "\@$token\@" if var $token;
+ return "\${$token\}";
+}
+
+# substitute_ac_subst_variables ($TEXT)
+# -------------------------------------
+# Replace any occurrence of ${FOO} in $TEXT by @FOO@ if FOO is an AC_SUBST
+# variable.
+sub substitute_ac_subst_variables
+{
+ my ($text) = @_;
+ $text =~ s/\$[{]([^ \t=:+{}]+)}/substitute_ac_subst_variables_worker ($1)/ge;
+ return $text;
+}
+
+# @DEPENDENCIES
+# prepend_srcdir (@INPUTS)
+# ------------------------
+# Prepend $(srcdir) or $(top_srcdir) to all @INPUTS. The idea is that
+# if an input file has a directory part the same as the current
+# directory, then the directory part is simply replaced by $(srcdir).
+# But if the directory part is different, then $(top_srcdir) is
+# prepended.
+sub prepend_srcdir
+{
+ my (@inputs) = @_;
+ my @newinputs;
+
+ foreach my $single (@inputs)
+ {
+ if (dirname ($single) eq $relative_dir)
+ {
+ push (@newinputs, '$(srcdir)/' . basename ($single));
+ }
+ else
+ {
+ push (@newinputs, '$(top_srcdir)/' . $single);
+ }
+ }
+ return @newinputs;
+}
+
+# @DEPENDENCIES
+# rewrite_inputs_into_dependencies ($OUTPUT, @INPUTS)
+# ---------------------------------------------------
+# Compute a list of dependencies appropriate for the rebuild
+# rule of
+# AC_CONFIG_FILES($OUTPUT:$INPUT[0]:$INPUTS[1]:...)
+# Also distribute $INPUTs which are not built by another AC_CONFIG_FOOs.
+sub rewrite_inputs_into_dependencies
+{
+ my ($file, @inputs) = @_;
+ my @res = ();
+
+ for my $i (@inputs)
+ {
+ # We cannot create dependencies on shell variables.
+ next if (substitute_ac_subst_variables $i) =~ /\$/;
+
+ if (exists $ac_config_files_location{$i} && $i ne $file)
+ {
+ my $di = dirname $i;
+ if ($di eq $relative_dir)
+ {
+ $i = basename $i;
+ }
+ # In the top-level Makefile we do not use $(top_builddir), because
+ # we are already there, and since the targets are built without
+ # a $(top_builddir), it helps BSD Make to match them with
+ # dependencies.
+ elsif ($relative_dir ne '.')
+ {
+ $i = '$(top_builddir)/' . $i;
+ }
+ }
+ else
+ {
+ msg ('error', $ac_config_files_location{$file},
+ "required file '$i' not found")
+ unless $i =~ /\$/ || exists $output_files{$i} || -f $i;
+ ($i) = prepend_srcdir ($i);
+ push_dist_common ($i);
+ }
+ push @res, $i;
+ }
+ return @res;
+}
+
+
+
+# handle_configure ($MAKEFILE_AM, $MAKEFILE_IN, $MAKEFILE, @INPUTS)
+# -----------------------------------------------------------------
+# Handle remaking and configure stuff.
+# We need the name of the input file, to do proper remaking rules.
+sub handle_configure
+{
+ my ($makefile_am, $makefile_in, $makefile, @inputs) = @_;
+
+ prog_error 'empty @inputs'
+ unless @inputs;
+
+ my ($rel_makefile_am, $rel_makefile_in) = prepend_srcdir ($makefile_am,
+ $makefile_in);
+ my $rel_makefile = basename $makefile;
+
+ my $colon_infile = ':' . join (':', @inputs);
+ $colon_infile = '' if $colon_infile eq ":$makefile.in";
+ my @rewritten = rewrite_inputs_into_dependencies ($makefile, @inputs);
+ my ($regen_aclocal_m4, @aclocal_m4_deps) = scan_aclocal_m4;
+ define_pretty_variable ('am__aclocal_m4_deps', TRUE, INTERNAL,
+ @configure_deps, @aclocal_m4_deps,
+ '$(top_srcdir)/' . $configure_ac);
+ my @configuredeps = ('$(am__aclocal_m4_deps)', '$(CONFIGURE_DEPENDENCIES)');
+ push @configuredeps, '$(ACLOCAL_M4)' if -f 'aclocal.m4';
+ define_pretty_variable ('am__configure_deps', TRUE, INTERNAL,
+ @configuredeps);
+
+ my $automake_options = '--' . $strictness_name .
+ (global_option 'no-dependencies' ? ' --ignore-deps' : '');
+
+ $output_rules .= file_contents
+ ('configure',
+ new Automake::Location,
+ MAKEFILE => $rel_makefile,
+ 'MAKEFILE-DEPS' => "@rewritten",
+ 'CONFIG-MAKEFILE' => ($relative_dir eq '.') ? '$@' : '$(subdir)/$@',
+ 'MAKEFILE-IN' => $rel_makefile_in,
+ 'HAVE-MAKEFILE-IN-DEPS' => (@include_stack > 0),
+ 'MAKEFILE-IN-DEPS' => "@include_stack",
+ 'MAKEFILE-AM' => $rel_makefile_am,
+ 'AUTOMAKE-OPTIONS' => $automake_options,
+ 'MAKEFILE-AM-SOURCES' => "$makefile$colon_infile",
+ 'REGEN-ACLOCAL-M4' => $regen_aclocal_m4,
+ VERBOSE => verbose_flag ('GEN'));
+
+ if ($relative_dir eq '.')
+ {
+ push_dist_common ('acconfig.h')
+ if -f 'acconfig.h';
+ }
+
+ # If we have a configure header, require it.
+ my $hdr_index = 0;
+ my @distclean_config;
+ foreach my $spec (@config_headers)
+ {
+ $hdr_index += 1;
+ # $CONFIG_H_PATH: config.h from top level.
+ my ($config_h_path, @ins) = split_config_file_spec ($spec);
+ my $config_h_dir = dirname ($config_h_path);
+
+ # If the header is in the current directory we want to build
+ # the header here. Otherwise, if we're at the topmost
+ # directory and the header's directory doesn't have a
+ # Makefile, then we also want to build the header.
+ if ($relative_dir eq $config_h_dir
+ || ($relative_dir eq '.' && ! is_make_dir ($config_h_dir)))
+ {
+ my ($cn_sans_dir, $stamp_dir);
+ if ($relative_dir eq $config_h_dir)
+ {
+ $cn_sans_dir = basename ($config_h_path);
+ $stamp_dir = '';
+ }
+ else
+ {
+ $cn_sans_dir = $config_h_path;
+ if ($config_h_dir eq '.')
+ {
+ $stamp_dir = '';
+ }
+ else
+ {
+ $stamp_dir = $config_h_dir . '/';
+ }
+ }
+
+ # This will also distribute all inputs.
+ @ins = rewrite_inputs_into_dependencies ($config_h_path, @ins);
+
+ # Cannot define rebuild rules for filenames with shell variables.
+ next if (substitute_ac_subst_variables $config_h_path) =~ /\$/;
+
+ # Header defined in this directory.
+ my @files;
+ if (-f $config_h_path . '.top')
+ {
+ push (@files, "$cn_sans_dir.top");
+ }
+ if (-f $config_h_path . '.bot')
+ {
+ push (@files, "$cn_sans_dir.bot");
+ }
+
+ push_dist_common (@files);
+
+ # For now, acconfig.h can only appear in the top srcdir.
+ if (-f 'acconfig.h')
+ {
+ push (@files, '$(top_srcdir)/acconfig.h');
+ }
+
+ my $stamp = "${stamp_dir}stamp-h${hdr_index}";
+ $output_rules .=
+ file_contents ('remake-hdr',
+ new Automake::Location,
+ FILES => "@files",
+ 'FIRST-HDR' => ($hdr_index == 1),
+ CONFIG_H => $cn_sans_dir,
+ CONFIG_HIN => $ins[0],
+ CONFIG_H_DEPS => "@ins",
+ CONFIG_H_PATH => $config_h_path,
+ STAMP => "$stamp");
+
+ push @distclean_config, $cn_sans_dir, $stamp;
+ }
+ }
+
+ $output_rules .= file_contents ('clean-hdr',
+ new Automake::Location,
+ FILES => "@distclean_config")
+ if @distclean_config;
+
+ # Distribute and define mkinstalldirs only if it is already present
+ # in the package, for backward compatibility (some people may still
+ # use $(mkinstalldirs)).
+ # TODO: start warning about this in Automake 1.14, and have
+ # TODO: Automake 2.0 drop it (and the mkinstalldirs script
+ # TODO: as well).
+ my $mkidpath = "$config_aux_dir/mkinstalldirs";
+ if (-f $mkidpath)
+ {
+ # Use require_file so that any existing script gets updated
+ # by --force-missing.
+ require_conf_file ($mkidpath, FOREIGN, 'mkinstalldirs');
+ define_variable ('mkinstalldirs',
+ "\$(SHELL) $am_config_aux_dir/mkinstalldirs", INTERNAL);
+ }
+ else
+ {
+ # Use $(install_sh), not $(MKDIR_P) because the latter requires
+ # at least one argument, and $(mkinstalldirs) used to work
+ # even without arguments (e.g. $(mkinstalldirs) $(conditional_dir)).
+ define_variable ('mkinstalldirs', '$(install_sh) -d', INTERNAL);
+ }
+
+ reject_var ('CONFIG_HEADER',
+ "'CONFIG_HEADER' is an anachronism; now determined "
+ . "automatically\nfrom '$configure_ac'");
+
+ my @config_h;
+ foreach my $spec (@config_headers)
+ {
+ my ($out, @ins) = split_config_file_spec ($spec);
+ # Generate CONFIG_HEADER define.
+ if ($relative_dir eq dirname ($out))
+ {
+ push @config_h, basename ($out);
+ }
+ else
+ {
+ push @config_h, "\$(top_builddir)/$out";
+ }
+ }
+ define_variable ("CONFIG_HEADER", "@config_h", INTERNAL)
+ if @config_h;
+
+ # Now look for other files in this directory which must be remade
+ # by config.status, and generate rules for them.
+ my @actual_other_files = ();
+ # These get cleaned only in a VPATH build.
+ my @actual_other_vpath_files = ();
+ foreach my $lfile (@other_input_files)
+ {
+ my $file;
+ my @inputs;
+ if ($lfile =~ /^([^:]*):(.*)$/)
+ {
+ # This is the ":" syntax of AC_OUTPUT.
+ $file = $1;
+ @inputs = split (':', $2);
+ }
+ else
+ {
+ # Normal usage.
+ $file = $lfile;
+ @inputs = $file . '.in';
+ }
+
+ # Automake files should not be stored in here, but in %MAKE_LIST.
+ prog_error ("$lfile in \@other_input_files\n"
+ . "\@other_input_files = (@other_input_files)")
+ if -f $file . '.am';
+
+ my $local = basename ($file);
+
+ # We skip files that aren't in this directory. However, if
+ # the file's directory does not have a Makefile, and we are
+ # currently doing '.', then we create a rule to rebuild the
+ # file in the subdir.
+ my $fd = dirname ($file);
+ if ($fd ne $relative_dir)
+ {
+ if ($relative_dir eq '.' && ! is_make_dir ($fd))
+ {
+ $local = $file;
+ }
+ else
+ {
+ next;
+ }
+ }
+
+ my @rewritten_inputs = rewrite_inputs_into_dependencies ($file, @inputs);
+
+ # Cannot output rules for shell variables.
+ next if (substitute_ac_subst_variables $local) =~ /\$/;
+
+ my $condstr = '';
+ my $cond = $ac_config_files_condition{$lfile};
+ if (defined $cond)
+ {
+ $condstr = $cond->subst_string;
+ Automake::Rule::define ($local, $configure_ac, RULE_AUTOMAKE, $cond,
+ $ac_config_files_location{$file});
+ }
+ $output_rules .= ($condstr . $local . ': '
+ . '$(top_builddir)/config.status '
+ . "@rewritten_inputs\n"
+ . $condstr . "\t"
+ . 'cd $(top_builddir) && '
+ . '$(SHELL) ./config.status '
+ . ($relative_dir eq '.' ? '' : '$(subdir)/')
+ . '$@'
+ . "\n");
+ push (@actual_other_files, $local);
+ }
+
+ # For links we should clean destinations and distribute sources.
+ foreach my $spec (@config_links)
+ {
+ my ($link, $file) = split /:/, $spec;
+ # Some people do AC_CONFIG_LINKS($computed). We only handle
+ # the DEST:SRC form.
+ next unless $file;
+ my $where = $ac_config_files_location{$link};
+
+ # Skip destinations that contain shell variables.
+ if ((substitute_ac_subst_variables $link) !~ /\$/)
+ {
+ # We skip links that aren't in this directory. However, if
+ # the link's directory does not have a Makefile, and we are
+ # currently doing '.', then we add the link to CONFIG_CLEAN_FILES
+ # in '.'s Makefile.in.
+ my $local = basename ($link);
+ my $fd = dirname ($link);
+ if ($fd ne $relative_dir)
+ {
+ if ($relative_dir eq '.' && ! is_make_dir ($fd))
+ {
+ $local = $link;
+ }
+ else
+ {
+ $local = undef;
+ }
+ }
+ if ($file ne $link)
+ {
+ push @actual_other_files, $local if $local;
+ }
+ else
+ {
+ push @actual_other_vpath_files, $local if $local;
+ }
+ }
+
+ # Do not process sources that contain shell variables.
+ if ((substitute_ac_subst_variables $file) !~ /\$/)
+ {
+ my $fd = dirname ($file);
+
+ # We distribute files that are in this directory.
+ # At the top-level ('.') we also distribute files whose
+ # directory does not have a Makefile.
+ if (($fd eq $relative_dir)
+ || ($relative_dir eq '.' && ! is_make_dir ($fd)))
+ {
+ # The following will distribute $file as a side-effect when
+ # it is appropriate (i.e., when $file is not already an output).
+ # We do not need the result, just the side-effect.
+ rewrite_inputs_into_dependencies ($link, $file);
+ }
+ }
+ }
+
+ # These files get removed by "make distclean".
+ define_pretty_variable ('CONFIG_CLEAN_FILES', TRUE, INTERNAL,
+ @actual_other_files);
+ define_pretty_variable ('CONFIG_CLEAN_VPATH_FILES', TRUE, INTERNAL,
+ @actual_other_vpath_files);
+}
+
+sub handle_headers ()
+{
+ my @r = am_install_var ('-defaultdist', 'header', 'HEADERS', 'include',
+ 'oldinclude', 'pkginclude',
+ 'noinst', 'check');
+ foreach (@r)
+ {
+ next unless $_->[1] =~ /\..*$/;
+ saw_extension ($&);
+ }
+}
+
+sub handle_gettext ()
+{
+ return if ! $seen_gettext || $relative_dir ne '.';
+
+ my $subdirs = var 'SUBDIRS';
+
+ if (! $subdirs)
+ {
+ err_ac "AM_GNU_GETTEXT used but SUBDIRS not defined";
+ return;
+ }
+
+ # Perform some sanity checks to help users get the right setup.
+ # We disable these tests when po/ doesn't exist in order not to disallow
+ # unusual gettext setups.
+ #
+ # Bruno Haible:
+ # | The idea is:
+ # |
+ # | 1) If a package doesn't have a directory po/ at top level, it
+ # | will likely have multiple po/ directories in subpackages.
+ # |
+ # | 2) It is useful to warn for the absence of intl/ if AM_GNU_GETTEXT
+ # | is used without 'external'. It is also useful to warn for the
+ # | presence of intl/ if AM_GNU_GETTEXT([external]) is used. Both
+ # | warnings apply only to the usual layout of packages, therefore
+ # | they should both be disabled if no po/ directory is found at
+ # | top level.
+
+ if (-d 'po')
+ {
+ my @subdirs = $subdirs->value_as_list_recursive;
+
+ msg_var ('syntax', $subdirs,
+ "AM_GNU_GETTEXT used but 'po' not in SUBDIRS")
+ if ! grep ($_ eq 'po', @subdirs);
+
+ # intl/ is not required when AM_GNU_GETTEXT is called with the
+ # 'external' option and AM_GNU_GETTEXT_INTL_SUBDIR is not called.
+ msg_var ('syntax', $subdirs,
+ "AM_GNU_GETTEXT used but 'intl' not in SUBDIRS")
+ if (! ($seen_gettext_external && ! $seen_gettext_intl)
+ && ! grep ($_ eq 'intl', @subdirs));
+
+ # intl/ should not be used with AM_GNU_GETTEXT([external]), except
+ # if AM_GNU_GETTEXT_INTL_SUBDIR is called.
+ msg_var ('syntax', $subdirs,
+ "'intl' should not be in SUBDIRS when "
+ . "AM_GNU_GETTEXT([external]) is used")
+ if ($seen_gettext_external && ! $seen_gettext_intl
+ && grep ($_ eq 'intl', @subdirs));
+ }
+
+ require_file ($ac_gettext_location, GNU, 'ABOUT-NLS');
+}
+
+# Emit makefile footer.
+sub handle_footer ()
+{
+ reject_rule ('.SUFFIXES',
+ "use variable 'SUFFIXES', not target '.SUFFIXES'");
+
+ # Note: AIX 4.1 /bin/make will fail if any suffix rule appears
+ # before .SUFFIXES. So we make sure that .SUFFIXES appears before
+ # anything else, by sticking it right after the default: target.
+ $output_header .= ".SUFFIXES:\n";
+ my $suffixes = var 'SUFFIXES';
+ my @suffixes = Automake::Rule::suffixes;
+ if (@suffixes || $suffixes)
+ {
+ # Make sure SUFFIXES has unique elements. Sort them to ensure
+ # the output remains consistent. However, $(SUFFIXES) is
+ # always at the start of the list, unsorted. This is done
+ # because make will choose rules depending on the ordering of
+ # suffixes, and this lets the user have some control. Push
+ # actual suffixes, and not $(SUFFIXES). Some versions of make
+ # do not like variable substitutions on the .SUFFIXES line.
+ my @user_suffixes = ($suffixes
+ ? $suffixes->value_as_list_recursive : ());
+
+ my %suffixes = map { $_ => 1 } @suffixes;
+ delete @suffixes{@user_suffixes};
+
+ $output_header .= (".SUFFIXES: "
+ . join (' ', @user_suffixes, sort keys %suffixes)
+ . "\n");
+ }
+
+ $output_trailer .= file_contents ('footer', new Automake::Location);
+}
+
+
+# Generate 'make install' rules.
+sub handle_install ()
+{
+ $output_rules .= file_contents
+ ('install',
+ new Automake::Location,
+ maybe_BUILT_SOURCES => (set_seen ('BUILT_SOURCES')
+ ? (" \$(BUILT_SOURCES)\n"
+ . "\t\$(MAKE) \$(AM_MAKEFLAGS)")
+ : ''),
+ 'installdirs-local' => (user_phony_rule ('installdirs-local')
+ ? ' installdirs-local' : ''),
+ am__installdirs => variable_value ('am__installdirs') || '');
+}
+
+
+# handle_all ($MAKEFILE)
+#-----------------------
+# Deal with 'all' and 'all-am'.
+sub handle_all
+{
+ my ($makefile) = @_;
+
+ # Output 'all-am'.
+
+ # Put this at the beginning for the sake of non-GNU makes. This
+ # is still wrong if these makes can run parallel jobs. But it is
+ # right enough.
+ unshift (@all, basename ($makefile));
+
+ foreach my $spec (@config_headers)
+ {
+ my ($out, @ins) = split_config_file_spec ($spec);
+ push (@all, basename ($out))
+ if dirname ($out) eq $relative_dir;
+ }
+
+ # Install 'all' hooks.
+ push (@all, "all-local")
+ if user_phony_rule "all-local";
+
+ pretty_print_rule ("all-am:", "\t\t", @all);
+ depend ('.PHONY', 'all-am', 'all');
+
+
+ # Output 'all'.
+
+ my @local_headers = ();
+ push @local_headers, '$(BUILT_SOURCES)'
+ if var ('BUILT_SOURCES');
+ foreach my $spec (@config_headers)
+ {
+ my ($out, @ins) = split_config_file_spec ($spec);
+ push @local_headers, basename ($out)
+ if dirname ($out) eq $relative_dir;
+ }
+
+ if (@local_headers)
+ {
+ # We need to make sure config.h is built before we recurse.
+ # We also want to make sure that built sources are built
+ # before any ordinary 'all' targets are run. We can't do this
+ # by changing the order of dependencies to the "all" because
+ # that breaks when using parallel makes. Instead we handle
+ # things explicitly.
+ $output_all .= ("all: @local_headers"
+ . "\n\t"
+ . '$(MAKE) $(AM_MAKEFLAGS) '
+ . (var ('SUBDIRS') ? 'all-recursive' : 'all-am')
+ . "\n\n");
+ depend ('.MAKE', 'all');
+ }
+ else
+ {
+ $output_all .= "all: " . (var ('SUBDIRS')
+ ? 'all-recursive' : 'all-am') . "\n\n";
+ }
+}
+
+# Generate helper targets for user-defined recursive targets, where needed.
+sub handle_user_recursion ()
+{
+ return unless @extra_recursive_targets;
+
+ define_pretty_variable ('am__extra_recursive_targets', TRUE, INTERNAL,
+ map { "$_-recursive" } @extra_recursive_targets);
+ my $aux = var ('SUBDIRS') ? 'recursive' : 'am';
+ foreach my $target (@extra_recursive_targets)
+ {
+ # This allows the default target's rules to be overridden in
+ # Makefile.am.
+ user_phony_rule ($target);
+ depend ("$target", "$target-$aux");
+ depend ("$target-am", "$target-local");
+ # Every user-defined recursive target 'foo' *must* have a valid
+ # associated 'foo-local' rule; we define it as an empty rule by
+ # default, so that the user can transparently extend it in his
+ # own Makefile.am.
+ pretty_print_rule ("$target-local:", '', '');
+ # $target-recursive might as well be undefined, so do not add
+ # it here; it's taken care of in subdirs.am anyway.
+ depend (".PHONY", "$target-am", "$target-local");
+ }
+}
+
+
+# Handle check merge target specially.
+sub do_check_merge_target ()
+{
+ # Include user-defined local form of target.
+ push @check_tests, 'check-local'
+ if user_phony_rule 'check-local';
+
+ # The check target must depend on the local equivalent of
+ # 'all', to ensure all the primary targets are built. Then it
+ # must build the local check rules.
+ $output_rules .= "check-am: all-am\n";
+ if (@check)
+ {
+ pretty_print_rule ("\t\$(MAKE) \$(AM_MAKEFLAGS)", "\t ", @check);
+ depend ('.MAKE', 'check-am');
+ }
+
+ if (@check_tests)
+ {
+ pretty_print_rule ("\t\$(MAKE) \$(AM_MAKEFLAGS)", "\t ",
+ @check_tests);
+ depend ('.MAKE', 'check-am');
+ }
+
+ depend '.PHONY', 'check', 'check-am';
+ # Handle recursion. We have to honor BUILT_SOURCES like for 'all:'.
+ $output_rules .= ("check: "
+ . (var ('BUILT_SOURCES')
+ ? "\$(BUILT_SOURCES)\n\t\$(MAKE) \$(AM_MAKEFLAGS) "
+ : '')
+ . (var ('SUBDIRS') ? 'check-recursive' : 'check-am')
+ . "\n");
+ depend ('.MAKE', 'check')
+ if var ('BUILT_SOURCES');
+}
+
+# Handle all 'clean' targets.
+sub handle_clean
+{
+ my ($makefile) = @_;
+
+ # Clean the files listed in user variables if they exist.
+ $clean_files{'$(MOSTLYCLEANFILES)'} = MOSTLY_CLEAN
+ if var ('MOSTLYCLEANFILES');
+ $clean_files{'$(CLEANFILES)'} = CLEAN
+ if var ('CLEANFILES');
+ $clean_files{'$(DISTCLEANFILES)'} = DIST_CLEAN
+ if var ('DISTCLEANFILES');
+ $clean_files{'$(MAINTAINERCLEANFILES)'} = MAINTAINER_CLEAN
+ if var ('MAINTAINERCLEANFILES');
+
+ # Built sources are automatically removed by maintainer-clean.
+ $clean_files{'$(BUILT_SOURCES)'} = MAINTAINER_CLEAN
+ if var ('BUILT_SOURCES');
+
+ # Compute a list of "rm"s to run for each target.
+ my %rms = (MOSTLY_CLEAN, [],
+ CLEAN, [],
+ DIST_CLEAN, [],
+ MAINTAINER_CLEAN, []);
+
+ foreach my $file (keys %clean_files)
+ {
+ my $when = $clean_files{$file};
+ prog_error 'invalid entry in %clean_files'
+ unless exists $rms{$when};
+
+ my $rm = "rm -f $file";
+ # If file is a variable, make sure when don't call 'rm -f' without args.
+ $rm ="test -z \"$file\" || $rm"
+ if ($file =~ /^\s*\$(\(.*\)|\{.*\})\s*$/);
+
+ push @{$rms{$when}}, "\t-$rm\n";
+ }
+
+ $output_rules .= file_contents
+ ('clean',
+ new Automake::Location,
+ MOSTLYCLEAN_RMS => join ('', sort @{$rms{&MOSTLY_CLEAN}}),
+ CLEAN_RMS => join ('', sort @{$rms{&CLEAN}}),
+ DISTCLEAN_RMS => join ('', sort @{$rms{&DIST_CLEAN}}),
+ MAINTAINER_CLEAN_RMS => join ('', sort @{$rms{&MAINTAINER_CLEAN}}),
+ MAKEFILE => basename $makefile,
+ );
+}
+
+
+# Subroutine for handle_factored_dependencies() to let '.PHONY' and
+# other '.TARGETS' be last. This is meant to be used as a comparison
+# subroutine passed to the sort built-int.
+sub target_cmp
+{
+ return 0 if $a eq $b;
+
+ my $a1 = substr ($a, 0, 1);
+ my $b1 = substr ($b, 0, 1);
+ if ($a1 ne $b1)
+ {
+ return -1 if $b1 eq '.';
+ return 1 if $a1 eq '.';
+ }
+ return $a cmp $b;
+}
+
+
+# Handle everything related to gathered targets.
+sub handle_factored_dependencies ()
+{
+ # Reject bad hooks.
+ foreach my $utarg ('uninstall-data-local', 'uninstall-data-hook',
+ 'uninstall-exec-local', 'uninstall-exec-hook',
+ 'uninstall-dvi-local',
+ 'uninstall-html-local',
+ 'uninstall-info-local',
+ 'uninstall-pdf-local',
+ 'uninstall-ps-local')
+ {
+ my $x = $utarg;
+ $x =~ s/-.*-/-/;
+ reject_rule ($utarg, "use '$x', not '$utarg'");
+ }
+
+ reject_rule ('install-local',
+ "use 'install-data-local' or 'install-exec-local', "
+ . "not 'install-local'");
+
+ reject_rule ('install-hook',
+ "use 'install-data-hook' or 'install-exec-hook', "
+ . "not 'install-hook'");
+
+ # Install the -local hooks.
+ foreach (keys %dependencies)
+ {
+ # Hooks are installed on the -am targets.
+ s/-am$// or next;
+ depend ("$_-am", "$_-local")
+ if user_phony_rule "$_-local";
+ }
+
+ # Install the -hook hooks.
+ # FIXME: Why not be as liberal as we are with -local hooks?
+ foreach ('install-exec', 'install-data', 'uninstall')
+ {
+ if (user_phony_rule "$_-hook")
+ {
+ depend ('.MAKE', "$_-am");
+ register_action("$_-am",
+ ("\t\@\$(NORMAL_INSTALL)\n"
+ . "\t\$(MAKE) \$(AM_MAKEFLAGS) $_-hook"));
+ }
+ }
+
+ # All the required targets are phony.
+ depend ('.PHONY', keys %required_targets);
+
+ # Actually output gathered targets.
+ foreach (sort target_cmp keys %dependencies)
+ {
+ # If there is nothing about this guy, skip it.
+ next
+ unless (@{$dependencies{$_}}
+ || $actions{$_}
+ || $required_targets{$_});
+
+ # Define gathered targets in undefined conditions.
+ # FIXME: Right now we must handle .PHONY as an exception,
+ # because people write things like
+ # .PHONY: myphonytarget
+ # to append dependencies. This would not work if Automake
+ # refrained from defining its own .PHONY target as it does
+ # with other overridden targets.
+ # Likewise for '.MAKE' and '.PRECIOUS'.
+ my @undefined_conds = (TRUE,);
+ if ($_ ne '.PHONY' && $_ ne '.MAKE' && $_ ne '.PRECIOUS')
+ {
+ @undefined_conds =
+ Automake::Rule::define ($_, 'internal',
+ RULE_AUTOMAKE, TRUE, INTERNAL);
+ }
+ my @uniq_deps = uniq (sort @{$dependencies{$_}});
+ foreach my $cond (@undefined_conds)
+ {
+ my $condstr = $cond->subst_string;
+ pretty_print_rule ("$condstr$_:", "$condstr\t", @uniq_deps);
+ $output_rules .= $actions{$_} if defined $actions{$_};
+ $output_rules .= "\n";
+ }
+ }
+}
+
+
+sub handle_tests_dejagnu ()
+{
+ push (@check_tests, 'check-DEJAGNU');
+ $output_rules .= file_contents ('dejagnu', new Automake::Location);
+}
+
+# handle_per_suffix_test ($TEST_SUFFIX, [%TRANSFORM])
+#----------------------------------------------------
+sub handle_per_suffix_test
+{
+ my ($test_suffix, %transform) = @_;
+ my ($pfx, $generic, $am_exeext);
+ if ($test_suffix eq '')
+ {
+ $pfx = '';
+ $generic = 0;
+ $am_exeext = 'FALSE';
+ }
+ else
+ {
+ prog_error ("test suffix '$test_suffix' lacks leading dot")
+ unless $test_suffix =~ m/^\.(.*)/;
+ $pfx = uc ($1) . '_';
+ $generic = 1;
+ $am_exeext = exists $configure_vars{'EXEEXT'} ? 'am__EXEEXT'
+ : 'FALSE';
+ }
+ # The "test driver" program, deputed to handle tests protocol used by
+ # test scripts. By default, it's assumed that no protocol is used, so
+ # we fall back to the old behaviour, implemented by the 'test-driver'
+ # auxiliary script.
+ if (! var "${pfx}LOG_DRIVER")
+ {
+ require_conf_file ("parallel-tests", FOREIGN, 'test-driver');
+ define_variable ("${pfx}LOG_DRIVER",
+ "\$(SHELL) $am_config_aux_dir/test-driver",
+ INTERNAL);
+ }
+ my $driver = '$(' . $pfx . 'LOG_DRIVER)';
+ my $driver_flags = '$(AM_' . $pfx . 'LOG_DRIVER_FLAGS)'
+ . ' $(' . $pfx . 'LOG_DRIVER_FLAGS)';
+ my $compile = "${pfx}LOG_COMPILE";
+ define_variable ($compile,
+ '$(' . $pfx . 'LOG_COMPILER)'
+ . ' $(AM_' . $pfx . 'LOG_FLAGS)'
+ . ' $(' . $pfx . 'LOG_FLAGS)',
+ INTERNAL);
+ $output_rules .= file_contents ('check2', new Automake::Location,
+ GENERIC => $generic,
+ DRIVER => $driver,
+ DRIVER_FLAGS => $driver_flags,
+ COMPILE => '$(' . $compile . ')',
+ EXT => $test_suffix,
+ am__EXEEXT => $am_exeext,
+ %transform);
+}
+
+# is_valid_test_extension ($EXT)
+# ------------------------------
+# Return true if $EXT can appear in $(TEST_EXTENSIONS), return false
+# otherwise.
+sub is_valid_test_extension
+{
+ my $ext = shift;
+ return 1
+ if ($ext =~ /^\.[a-zA-Z_][a-zA-Z0-9_]*$/);
+ return 1
+ if (exists $configure_vars{'EXEEXT'} && $ext eq subst ('EXEEXT'));
+ return 0;
+}
+
+
+sub handle_tests ()
+{
+ if (option 'dejagnu')
+ {
+ handle_tests_dejagnu;
+ }
+ else
+ {
+ foreach my $c ('DEJATOOL', 'RUNTEST', 'RUNTESTFLAGS')
+ {
+ reject_var ($c, "'$c' defined but 'dejagnu' not in "
+ . "'AUTOMAKE_OPTIONS'");
+ }
+ }
+
+ if (var ('TESTS'))
+ {
+ push (@check_tests, 'check-TESTS');
+ my $check_deps = "@check";
+ $output_rules .= file_contents ('check', new Automake::Location,
+ SERIAL_TESTS => !! option 'serial-tests',
+ CHECK_DEPS => $check_deps);
+
+ # Tests that are known programs should have $(EXEEXT) appended.
+ # For matching purposes, we need to adjust XFAIL_TESTS as well.
+ append_exeext { exists $known_programs{$_[0]} } 'TESTS';
+ append_exeext { exists $known_programs{$_[0]} } 'XFAIL_TESTS'
+ if (var ('XFAIL_TESTS'));
+
+ if (! option 'serial-tests')
+ {
+ define_variable ('TEST_SUITE_LOG', 'test-suite.log', INTERNAL);
+ my $suff = '.test';
+ my $at_exeext = '';
+ my $handle_exeext = exists $configure_vars{'EXEEXT'};
+ if ($handle_exeext)
+ {
+ $at_exeext = subst ('EXEEXT');
+ $suff = $at_exeext . ' ' . $suff;
+ }
+ if (! var 'TEST_EXTENSIONS')
+ {
+ define_variable ('TEST_EXTENSIONS', $suff, INTERNAL);
+ }
+ my $var = var 'TEST_EXTENSIONS';
+ # Currently, we are not able to deal with conditional contents
+ # in TEST_EXTENSIONS.
+ if ($var->has_conditional_contents)
+ {
+ msg_var 'unsupported', $var,
+ "'TEST_EXTENSIONS' cannot have conditional contents";
+ }
+ my @test_suffixes = $var->value_as_list_recursive;
+ if ((my @invalid_test_suffixes =
+ grep { !is_valid_test_extension $_ } @test_suffixes) > 0)
+ {
+ error $var->rdef (TRUE)->location,
+ "invalid test extensions: @invalid_test_suffixes";
+ }
+ @test_suffixes = grep { is_valid_test_extension $_ } @test_suffixes;
+ if ($handle_exeext)
+ {
+ unshift (@test_suffixes, $at_exeext)
+ unless $test_suffixes[0] eq $at_exeext;
+ }
+ unshift (@test_suffixes, '');
+
+ transform_variable_recursively
+ ('TESTS', 'TEST_LOGS', 'am__testlogs', 1, INTERNAL,
+ sub {
+ my ($subvar, $val, $cond, $full_cond) = @_;
+ my $obj = $val;
+ return $obj
+ if $val =~ /^\@.*\@$/;
+ $obj =~ s/\$\(EXEEXT\)$//o;
+
+ if ($val =~ /(\$\((top_)?srcdir\))\//o)
+ {
+ msg ('error', $subvar->rdef ($cond)->location,
+ "using '$1' in TESTS is currently broken: '$val'");
+ }
+
+ foreach my $test_suffix (@test_suffixes)
+ {
+ next
+ if $test_suffix eq $at_exeext || $test_suffix eq '';
+ return substr ($obj, 0, length ($obj) - length ($test_suffix)) . '.log'
+ if substr ($obj, - length ($test_suffix)) eq $test_suffix;
+ }
+ my $base = $obj;
+ $obj .= '.log';
+ handle_per_suffix_test ('',
+ OBJ => $obj,
+ BASE => $base,
+ SOURCE => $val);
+ return $obj;
+ });
+
+ my $nhelper=1;
+ my $prev = 'TESTS';
+ my $post = '';
+ my $last_suffix = $test_suffixes[$#test_suffixes];
+ my $cur = '';
+ foreach my $test_suffix (@test_suffixes)
+ {
+ if ($test_suffix eq $last_suffix)
+ {
+ $cur = 'TEST_LOGS';
+ }
+ else
+ {
+ $cur = 'am__test_logs' . $nhelper;
+ }
+ define_variable ($cur,
+ '$(' . $prev . ':' . $test_suffix . $post . '=.log)', INTERNAL);
+ $post = '.log';
+ $prev = $cur;
+ $nhelper++;
+ if ($test_suffix ne $at_exeext && $test_suffix ne '')
+ {
+ handle_per_suffix_test ($test_suffix,
+ OBJ => '',
+ BASE => '$*',
+ SOURCE => '$<');
+ }
+ }
+ $clean_files{'$(TEST_LOGS)'} = MOSTLY_CLEAN;
+ $clean_files{'$(TEST_LOGS:.log=.trs)'} = MOSTLY_CLEAN;
+ $clean_files{'$(TEST_SUITE_LOG)'} = MOSTLY_CLEAN;
+ }
+ }
+}
+
+sub handle_emacs_lisp ()
+{
+ my @elfiles = am_install_var ('-candist', 'lisp', 'LISP',
+ 'lisp', 'noinst');
+
+ return if ! @elfiles;
+
+ define_pretty_variable ('am__ELFILES', TRUE, INTERNAL,
+ map { $_->[1] } @elfiles);
+ define_pretty_variable ('am__ELCFILES', TRUE, INTERNAL,
+ '$(am__ELFILES:.el=.elc)');
+ # This one can be overridden by users.
+ define_pretty_variable ('ELCFILES', TRUE, INTERNAL, '$(LISP:.el=.elc)');
+
+ push @all, '$(ELCFILES)';
+
+ require_variables ($elfiles[0][0], "Emacs Lisp sources seen", TRUE,
+ 'EMACS', 'lispdir');
+}
+
+sub handle_python ()
+{
+ my @pyfiles = am_install_var ('-defaultdist', 'python', 'PYTHON',
+ 'noinst');
+ return if ! @pyfiles;
+
+ require_variables ($pyfiles[0][0], "Python sources seen", TRUE, 'PYTHON');
+ require_conf_file ($pyfiles[0][0], FOREIGN, 'py-compile');
+ define_variable ('py_compile', "$am_config_aux_dir/py-compile", INTERNAL);
+}
+
+sub handle_java ()
+{
+ my @sourcelist = am_install_var ('-candist',
+ 'java', 'JAVA',
+ 'noinst', 'check');
+ return if ! @sourcelist;
+
+ my @prefixes = am_primary_prefixes ('JAVA', 1,
+ 'noinst', 'check');
+
+ my $dir;
+ my @java_sources = ();
+ foreach my $prefix (@prefixes)
+ {
+ (my $curs = $prefix) =~ s/^(?:nobase_)?(?:dist_|nodist_)?//;
+
+ next
+ if $curs eq 'EXTRA';
+
+ push @java_sources, '$(' . $prefix . '_JAVA' . ')';
+
+ if (defined $dir)
+ {
+ err_var "${curs}_JAVA", "multiple _JAVA primaries in use"
+ unless $curs eq $dir;
+ }
+
+ $dir = $curs;
+ }
+
+ define_pretty_variable ('am__java_sources', TRUE, INTERNAL,
+ "@java_sources");
+
+ if ($dir eq 'check')
+ {
+ push (@check, "class$dir.stamp");
+ }
+ else
+ {
+ push (@all, "class$dir.stamp");
+ }
+}
+
+
+sub handle_minor_options ()
+{
+ if (option 'readme-alpha')
+ {
+ if ($relative_dir eq '.')
+ {
+ if ($package_version !~ /^$GNITS_VERSION_PATTERN$/)
+ {
+ msg ('error-gnits', $package_version_location,
+ "version '$package_version' doesn't follow " .
+ "Gnits standards");
+ }
+ if (defined $1 && -f 'README-alpha')
+ {
+ # This means we have an alpha release. See
+ # GNITS_VERSION_PATTERN for details.
+ push_dist_common ('README-alpha');
+ }
+ }
+ }
+}
+
+################################################################
+
+# ($OUTPUT, @INPUTS)
+# split_config_file_spec ($SPEC)
+# ------------------------------
+# Decode the Autoconf syntax for config files (files, headers, links
+# etc.).
+sub split_config_file_spec
+{
+ my ($spec) = @_;
+ my ($output, @inputs) = split (/:/, $spec);
+
+ push @inputs, "$output.in"
+ unless @inputs;
+
+ return ($output, @inputs);
+}
+
+# $input
+# locate_am (@POSSIBLE_SOURCES)
+# -----------------------------
+# AC_CONFIG_FILES allow specifications such as Makefile:top.in:mid.in:bot.in
+# This functions returns the first *.in file for which a *.am exists.
+# It returns undef otherwise.
+sub locate_am
+{
+ my (@rest) = @_;
+ my $input;
+ foreach my $file (@rest)
+ {
+ if (($file =~ /^(.*)\.in$/) && -f "$1.am")
+ {
+ $input = $file;
+ last;
+ }
+ }
+ return $input;
+}
+
+my %make_list;
+
+# scan_autoconf_config_files ($WHERE, $CONFIG-FILES)
+# --------------------------------------------------
+# Study $CONFIG-FILES which is the first argument to AC_CONFIG_FILES
+# (or AC_OUTPUT).
+sub scan_autoconf_config_files
+{
+ my ($where, $config_files) = @_;
+
+ # Look at potential Makefile.am's.
+ foreach (split ' ', $config_files)
+ {
+ # Must skip empty string for Perl 4.
+ next if $_ eq "\\" || $_ eq '';
+
+ # Handle $local:$input syntax.
+ my ($local, @rest) = split (/:/);
+ @rest = ("$local.in",) unless @rest;
+ # Keep in sync with test 'conffile-leading-dot.sh'.
+ msg ('unsupported', $where,
+ "omit leading './' from config file names such as '$local';"
+ . "\nremake rules might be subtly broken otherwise")
+ if ($local =~ /^\.\//);
+ my $input = locate_am @rest;
+ if ($input)
+ {
+ # We have a file that automake should generate.
+ $make_list{$input} = join (':', ($local, @rest));
+ }
+ else
+ {
+ # We have a file that automake should cause to be
+ # rebuilt, but shouldn't generate itself.
+ push (@other_input_files, $_);
+ }
+ $ac_config_files_location{$local} = $where;
+ $ac_config_files_condition{$local} =
+ new Automake::Condition (@cond_stack)
+ if (@cond_stack);
+ }
+}
+
+
+sub scan_autoconf_traces
+{
+ my ($filename) = @_;
+
+ # Macros to trace, with their minimal number of arguments.
+ #
+ # IMPORTANT: If you add a macro here, you should also add this macro
+ # ========= to Automake-preselection in autoconf/lib/autom4te.in.
+ my %traced = (
+ AC_CANONICAL_BUILD => 0,
+ AC_CANONICAL_HOST => 0,
+ AC_CANONICAL_TARGET => 0,
+ AC_CONFIG_AUX_DIR => 1,
+ AC_CONFIG_FILES => 1,
+ AC_CONFIG_HEADERS => 1,
+ AC_CONFIG_LIBOBJ_DIR => 1,
+ AC_CONFIG_LINKS => 1,
+ AC_FC_SRCEXT => 1,
+ AC_INIT => 0,
+ AC_LIBSOURCE => 1,
+ AC_REQUIRE_AUX_FILE => 1,
+ AC_SUBST_TRACE => 1,
+ AM_AUTOMAKE_VERSION => 1,
+ AM_PROG_MKDIR_P => 0,
+ AM_CONDITIONAL => 2,
+ AM_EXTRA_RECURSIVE_TARGETS => 1,
+ AM_GNU_GETTEXT => 0,
+ AM_GNU_GETTEXT_INTL_SUBDIR => 0,
+ AM_INIT_AUTOMAKE => 0,
+ AM_MAINTAINER_MODE => 0,
+ AM_PROG_AR => 0,
+ _AM_SUBST_NOTMAKE => 1,
+ _AM_COND_IF => 1,
+ _AM_COND_ELSE => 1,
+ _AM_COND_ENDIF => 1,
+ LT_SUPPORTED_TAG => 1,
+ _LT_AC_TAGCONFIG => 0,
+ m4_include => 1,
+ m4_sinclude => 1,
+ sinclude => 1,
+ );
+
+ my $traces = ($ENV{AUTOCONF} || '@am_AUTOCONF@') . " ";
+
+ # Use a separator unlikely to be used, not ':', the default, which
+ # has a precise meaning for AC_CONFIG_FILES and so on.
+ $traces .= join (' ',
+ map { "--trace=$_" . ':\$f:\$l::\$d::\$n::\${::}%' }
+ (keys %traced));
+
+ my $tracefh = new Automake::XFile ("$traces $filename |");
+ verb "reading $traces";
+
+ @cond_stack = ();
+ my $where;
+
+ while ($_ = $tracefh->getline)
+ {
+ chomp;
+ my ($here, $depth, @args) = split (/::/);
+ $where = new Automake::Location $here;
+ my $macro = $args[0];
+
+ prog_error ("unrequested trace '$macro'")
+ unless exists $traced{$macro};
+
+ # Skip and diagnose malformed calls.
+ if ($#args < $traced{$macro})
+ {
+ msg ('syntax', $where, "not enough arguments for $macro");
+ next;
+ }
+
+ # Alphabetical ordering please.
+ if ($macro eq 'AC_CANONICAL_BUILD')
+ {
+ if ($seen_canonical <= AC_CANONICAL_BUILD)
+ {
+ $seen_canonical = AC_CANONICAL_BUILD;
+ }
+ }
+ elsif ($macro eq 'AC_CANONICAL_HOST')
+ {
+ if ($seen_canonical <= AC_CANONICAL_HOST)
+ {
+ $seen_canonical = AC_CANONICAL_HOST;
+ }
+ }
+ elsif ($macro eq 'AC_CANONICAL_TARGET')
+ {
+ $seen_canonical = AC_CANONICAL_TARGET;
+ }
+ elsif ($macro eq 'AC_CONFIG_AUX_DIR')
+ {
+ if ($seen_init_automake)
+ {
+ error ($where, "AC_CONFIG_AUX_DIR must be called before "
+ . "AM_INIT_AUTOMAKE ...", partial => 1);
+ error ($seen_init_automake, "... AM_INIT_AUTOMAKE called here");
+ }
+ $config_aux_dir = $args[1];
+ $config_aux_dir_set_in_configure_ac = 1;
+ check_directory ($config_aux_dir, $where);
+ }
+ elsif ($macro eq 'AC_CONFIG_FILES')
+ {
+ # Look at potential Makefile.am's.
+ scan_autoconf_config_files ($where, $args[1]);
+ }
+ elsif ($macro eq 'AC_CONFIG_HEADERS')
+ {
+ foreach my $spec (split (' ', $args[1]))
+ {
+ my ($dest, @src) = split (':', $spec);
+ $ac_config_files_location{$dest} = $where;
+ push @config_headers, $spec;
+ }
+ }
+ elsif ($macro eq 'AC_CONFIG_LIBOBJ_DIR')
+ {
+ $config_libobj_dir = $args[1];
+ check_directory ($config_libobj_dir, $where);
+ }
+ elsif ($macro eq 'AC_CONFIG_LINKS')
+ {
+ foreach my $spec (split (' ', $args[1]))
+ {
+ my ($dest, $src) = split (':', $spec);
+ $ac_config_files_location{$dest} = $where;
+ push @config_links, $spec;
+ }
+ }
+ elsif ($macro eq 'AC_FC_SRCEXT')
+ {
+ my $suffix = $args[1];
+ # These flags are used as %SOURCEFLAG% in depend2.am,
+ # where the trailing space is important.
+ $sourceflags{'.' . $suffix} = '$(FCFLAGS_' . $suffix . ') '
+ if ($suffix eq 'f90' || $suffix eq 'f95' || $suffix eq 'f03' || $suffix eq 'f08');
+ }
+ elsif ($macro eq 'AC_INIT')
+ {
+ if (defined $args[2])
+ {
+ $package_version = $args[2];
+ $package_version_location = $where;
+ }
+ }
+ elsif ($macro eq 'AC_LIBSOURCE')
+ {
+ $libsources{$args[1]} = $here;
+ }
+ elsif ($macro eq 'AC_REQUIRE_AUX_FILE')
+ {
+ # Only remember the first time a file is required.
+ $required_aux_file{$args[1]} = $where
+ unless exists $required_aux_file{$args[1]};
+ }
+ elsif ($macro eq 'AC_SUBST_TRACE')
+ {
+ # Just check for alphanumeric in AC_SUBST_TRACE. If you do
+ # AC_SUBST(5), then too bad.
+ $configure_vars{$args[1]} = $where
+ if $args[1] =~ /^\w+$/;
+ }
+ elsif ($macro eq 'AM_AUTOMAKE_VERSION')
+ {
+ error ($where,
+ "version mismatch. This is Automake $VERSION,\n" .
+ "but the definition used by this AM_INIT_AUTOMAKE\n" .
+ "comes from Automake $args[1]. You should recreate\n" .
+ "aclocal.m4 with aclocal and run automake again.\n",
+ # $? = 63 is used to indicate version mismatch to missing.
+ exit_code => 63)
+ if $VERSION ne $args[1];
+
+ $seen_automake_version = 1;
+ }
+ elsif ($macro eq 'AM_PROG_MKDIR_P')
+ {
+ msg 'obsolete', $where, <<'EOF';
+The 'AM_PROG_MKDIR_P' macro is deprecated, and its use is discouraged.
+You should use the Autoconf-provided 'AC_PROG_MKDIR_P' macro instead,
+and use '$(MKDIR_P)' instead of '$(mkdir_p)'in your Makefile.am files.
+EOF
+ }
+ elsif ($macro eq 'AM_CONDITIONAL')
+ {
+ $configure_cond{$args[1]} = $where;
+ }
+ elsif ($macro eq 'AM_EXTRA_RECURSIVE_TARGETS')
+ {
+ # Empty leading/trailing fields might be produced by split,
+ # hence the grep is really needed.
+ push @extra_recursive_targets,
+ grep (/./, (split /\s+/, $args[1]));
+ }
+ elsif ($macro eq 'AM_GNU_GETTEXT')
+ {
+ $seen_gettext = $where;
+ $ac_gettext_location = $where;
+ $seen_gettext_external = grep ($_ eq 'external', @args);
+ }
+ elsif ($macro eq 'AM_GNU_GETTEXT_INTL_SUBDIR')
+ {
+ $seen_gettext_intl = $where;
+ }
+ elsif ($macro eq 'AM_INIT_AUTOMAKE')
+ {
+ $seen_init_automake = $where;
+ if (defined $args[2])
+ {
+ msg 'obsolete', $where, <<'EOF';
+AM_INIT_AUTOMAKE: two- and three-arguments forms are deprecated. For more info, see:
+https://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_005fINIT_005fAUTOMAKE-invocation
+EOF
+ $package_version = $args[2];
+ $package_version_location = $where;
+ }
+ elsif (defined $args[1])
+ {
+ my @opts = split (' ', $args[1]);
+ @opts = map { { option => $_, where => $where } } @opts;
+ exit $exit_code unless process_global_option_list (@opts);
+ }
+ }
+ elsif ($macro eq 'AM_MAINTAINER_MODE')
+ {
+ $seen_maint_mode = $where;
+ }
+ elsif ($macro eq 'AM_PROG_AR')
+ {
+ $seen_ar = $where;
+ }
+ elsif ($macro eq '_AM_COND_IF')
+ {
+ cond_stack_if ('', $args[1], $where);
+ error ($where, "missing m4 quoting, macro depth $depth")
+ if ($depth != 1);
+ }
+ elsif ($macro eq '_AM_COND_ELSE')
+ {
+ cond_stack_else ('!', $args[1], $where);
+ error ($where, "missing m4 quoting, macro depth $depth")
+ if ($depth != 1);
+ }
+ elsif ($macro eq '_AM_COND_ENDIF')
+ {
+ cond_stack_endif (undef, undef, $where);
+ error ($where, "missing m4 quoting, macro depth $depth")
+ if ($depth != 1);
+ }
+ elsif ($macro eq '_AM_SUBST_NOTMAKE')
+ {
+ $ignored_configure_vars{$args[1]} = $where;
+ }
+ elsif ($macro eq 'm4_include'
+ || $macro eq 'm4_sinclude'
+ || $macro eq 'sinclude')
+ {
+ # Skip missing 'sinclude'd files.
+ next if $macro ne 'm4_include' && ! -f $args[1];
+
+ # Some modified versions of Autoconf don't use
+ # frozen files. Consequently it's possible that we see all
+ # m4_include's performed during Autoconf's startup.
+ # Obviously we don't want to distribute Autoconf's files
+ # so we skip absolute filenames here.
+ push @configure_deps, '$(top_srcdir)/' . $args[1]
+ unless $here =~ m,^(?:\w:)?[\\/],;
+ # Keep track of the greatest timestamp.
+ if (-e $args[1])
+ {
+ my $mtime = mtime $args[1];
+ $configure_deps_greatest_timestamp = $mtime
+ if $mtime > $configure_deps_greatest_timestamp;
+ }
+ }
+ elsif ($macro eq 'LT_SUPPORTED_TAG')
+ {
+ $libtool_tags{$args[1]} = 1;
+ $libtool_new_api = 1;
+ }
+ elsif ($macro eq '_LT_AC_TAGCONFIG')
+ {
+ # _LT_AC_TAGCONFIG is an old macro present in Libtool 1.5.
+ # We use it to detect whether tags are supported. Our
+ # preferred interface is LT_SUPPORTED_TAG, but it was
+ # introduced in Libtool 1.6.
+ if (0 == keys %libtool_tags)
+ {
+ # Hardcode the tags supported by Libtool 1.5.
+ %libtool_tags = (CC => 1, CXX => 1, GCJ => 1, F77 => 1);
+ }
+ }
+ }
+
+ error ($where, "condition stack not properly closed")
+ if (@cond_stack);
+
+ $tracefh->close;
+}
+
+
+# Check whether we use 'configure.ac' or 'configure.in'.
+# Scan it (and possibly 'aclocal.m4') for interesting things.
+# We must scan aclocal.m4 because there might be AC_SUBSTs and such there.
+sub scan_autoconf_files ()
+{
+ # Reinitialize libsources here. This isn't really necessary,
+ # since we currently assume there is only one configure.ac. But
+ # that won't always be the case.
+ %libsources = ();
+
+ # Keep track of the youngest configure dependency.
+ $configure_deps_greatest_timestamp = mtime $configure_ac;
+ if (-e 'aclocal.m4')
+ {
+ my $mtime = mtime 'aclocal.m4';
+ $configure_deps_greatest_timestamp = $mtime
+ if $mtime > $configure_deps_greatest_timestamp;
+ }
+
+ scan_autoconf_traces ($configure_ac);
+
+ @configure_input_files = sort keys %make_list;
+ # Set input and output files if not specified by user.
+ if (! @input_files)
+ {
+ @input_files = @configure_input_files;
+ %output_files = %make_list;
+ }
+
+
+ if (! $seen_init_automake)
+ {
+ err_ac ("no proper invocation of AM_INIT_AUTOMAKE was found.\nYou "
+ . "should verify that $configure_ac invokes AM_INIT_AUTOMAKE,"
+ . "\nthat aclocal.m4 is present in the top-level directory,\n"
+ . "and that aclocal.m4 was recently regenerated "
+ . "(using aclocal)");
+ }
+ else
+ {
+ if (! $seen_automake_version)
+ {
+ if (-f 'aclocal.m4')
+ {
+ error ($seen_init_automake,
+ "your implementation of AM_INIT_AUTOMAKE comes from " .
+ "an\nold Automake version. You should recreate " .
+ "aclocal.m4\nwith aclocal and run automake again",
+ # $? = 63 is used to indicate version mismatch to missing.
+ exit_code => 63);
+ }
+ else
+ {
+ error ($seen_init_automake,
+ "no proper implementation of AM_INIT_AUTOMAKE was " .
+ "found,\nprobably because aclocal.m4 is missing.\n" .
+ "You should run aclocal to create this file, then\n" .
+ "run automake again");
+ }
+ }
+ }
+
+ locate_aux_dir ();
+
+ # Look for some files we need. Always check for these. This
+ # check must be done for every run, even those where we are only
+ # looking at a subdir Makefile. We must set relative_dir for
+ # push_required_file to work.
+ # Sort the files for stable verbose output.
+ $relative_dir = '.';
+ foreach my $file (sort keys %required_aux_file)
+ {
+ require_conf_file ($required_aux_file{$file}->get, FOREIGN, $file)
+ }
+ err_am "'install.sh' is an anachronism; use 'install-sh' instead"
+ if -f $config_aux_dir . '/install.sh';
+
+ # Preserve dist_common for later.
+ @configure_dist_common = @dist_common;
+}
+
+################################################################
+
+# Do any extra checking for GNU standards.
+sub check_gnu_standards ()
+{
+ if ($relative_dir eq '.')
+ {
+ # In top level (or only) directory.
+ require_file ("$am_file.am", GNU,
+ qw/INSTALL NEWS README AUTHORS ChangeLog/);
+
+ # Accept one of these three licenses; default to COPYING.
+ # Make sure we do not overwrite an existing license.
+ my $license;
+ foreach (qw /COPYING COPYING.LIB COPYING.LESSER/)
+ {
+ if (-f $_)
+ {
+ $license = $_;
+ last;
+ }
+ }
+ require_file ("$am_file.am", GNU, 'COPYING')
+ unless $license;
+ }
+
+ for my $opt ('no-installman', 'no-installinfo')
+ {
+ msg ('error-gnu', option $opt,
+ "option '$opt' disallowed by GNU standards")
+ if option $opt;
+ }
+}
+
+# Do any extra checking for GNITS standards.
+sub check_gnits_standards ()
+{
+ if ($relative_dir eq '.')
+ {
+ # In top level (or only) directory.
+ require_file ("$am_file.am", GNITS, 'THANKS');
+ }
+}
+
+################################################################
+#
+# Functions to handle files of each language.
+
+# Each 'lang_X_rewrite($DIRECTORY, $BASE, $EXT)' function follows a
+# simple formula: Return value is LANG_SUBDIR if the resulting object
+# file should be in a subdir if the source file is, LANG_PROCESS if
+# file is to be dealt with, LANG_IGNORE otherwise.
+
+# Much of the actual processing is handled in
+# handle_single_transform. These functions exist so that
+# auxiliary information can be recorded for a later cleanup pass.
+# Note that the calls to these functions are computed, so don't bother
+# searching for their precise names in the source.
+
+# This is just a convenience function that can be used to determine
+# when a subdir object should be used.
+sub lang_sub_obj ()
+{
+ return option 'subdir-objects' ? LANG_SUBDIR : LANG_PROCESS;
+}
+
+# Rewrite a single header file.
+sub lang_header_rewrite
+{
+ # Header files are simply ignored.
+ return LANG_IGNORE;
+}
+
+# Rewrite a single Vala source file.
+sub lang_vala_rewrite
+{
+ my ($directory, $base, $ext) = @_;
+
+ (my $newext = $ext) =~ s/vala$/c/;
+ return (LANG_SUBDIR, $newext);
+}
+
+# Rewrite a single yacc/yacc++ file.
+sub lang_yacc_rewrite
+{
+ my ($directory, $base, $ext) = @_;
+
+ my $r = lang_sub_obj;
+ (my $newext = $ext) =~ tr/y/c/;
+ return ($r, $newext);
+}
+sub lang_yaccxx_rewrite { lang_yacc_rewrite (@_); };
+
+# Rewrite a single lex/lex++ file.
+sub lang_lex_rewrite
+{
+ my ($directory, $base, $ext) = @_;
+
+ my $r = lang_sub_obj;
+ (my $newext = $ext) =~ tr/l/c/;
+ return ($r, $newext);
+}
+sub lang_lexxx_rewrite { lang_lex_rewrite (@_); };
+
+# Rewrite a single Java file.
+sub lang_java_rewrite
+{
+ return LANG_SUBDIR;
+}
+
+# The lang_X_finish functions are called after all source file
+# processing is done. Each should handle defining rules for the
+# language, etc. A finish function is only called if a source file of
+# the appropriate type has been seen.
+
+sub lang_vala_finish_target
+{
+ my ($self, $name) = @_;
+
+ my $derived = canonicalize ($name);
+ my $var = var "${derived}_SOURCES";
+ return unless $var;
+
+ my @vala_sources = grep { /\.(vala|vapi)$/ } ($var->value_as_list_recursive);
+
+ # For automake bug#11229.
+ return unless @vala_sources;
+
+ foreach my $vala_file (@vala_sources)
+ {
+ my $c_file = $vala_file;
+ if ($c_file =~ s/(.*)\.vala$/$1.c/)
+ {
+ $c_file = "\$(srcdir)/$c_file";
+ $output_rules .= "$c_file: \$(srcdir)/${derived}_vala.stamp\n"
+ . "\t\@if test -f \$@; then :; else rm -f \$(srcdir)/${derived}_vala.stamp; fi\n"
+ . "\t\@if test -f \$@; then :; else \\\n"
+ . "\t \$(MAKE) \$(AM_MAKEFLAGS) \$(srcdir)/${derived}_vala.stamp; \\\n"
+ . "\tfi\n";
+ $clean_files{$c_file} = MAINTAINER_CLEAN;
+ }
+ }
+
+ # Add rebuild rules for generated header and vapi files
+ my $flags = var ($derived . '_VALAFLAGS');
+ if ($flags)
+ {
+ my $lastflag = '';
+ foreach my $flag ($flags->value_as_list_recursive)
+ {
+ if (grep (/$lastflag/, ('-H', '-h', '--header', '--internal-header',
+ '--vapi', '--internal-vapi', '--gir')))
+ {
+ my $headerfile = "\$(srcdir)/$flag";
+ $output_rules .= "$headerfile: \$(srcdir)/${derived}_vala.stamp\n"
+ . "\t\@if test -f \$@; then :; else rm -f \$(srcdir)/${derived}_vala.stamp; fi\n"
+ . "\t\@if test -f \$@; then :; else \\\n"
+ . "\t \$(MAKE) \$(AM_MAKEFLAGS) \$(srcdir)/${derived}_vala.stamp; \\\n"
+ . "\tfi\n";
+
+ # valac is not used when building from dist tarballs
+ # distribute the generated files
+ push_dist_common ($headerfile);
+ $clean_files{$headerfile} = MAINTAINER_CLEAN;
+ }
+ $lastflag = $flag;
+ }
+ }
+
+ my $compile = $self->compile;
+
+ # Rewrite each occurrence of 'AM_VALAFLAGS' in the compile
+ # rule into '${derived}_VALAFLAGS' if it exists.
+ my $val = "${derived}_VALAFLAGS";
+ $compile =~ s/\(AM_VALAFLAGS\)/\($val\)/
+ if set_seen ($val);
+
+ # VALAFLAGS is a user variable (per GNU Standards),
+ # it should not be overridden in the Makefile...
+ check_user_variables 'VALAFLAGS';
+
+ my $dirname = dirname ($name);
+
+ # Only generate C code, do not run C compiler
+ $compile .= " -C";
+
+ my $verbose = verbose_flag ('VALAC');
+ my $silent = silent_flag ();
+ my $stampfile = "\$(srcdir)/${derived}_vala.stamp";
+
+ $output_rules .=
+ "\$(srcdir)/${derived}_vala.stamp: @vala_sources\n".
+# Since the C files generated from the vala sources depend on the
+# ${derived}_vala.stamp file, we must ensure its timestamp is older than
+# those of the C files generated by the valac invocation below (this is
+# especially important on systems with sub-second timestamp resolution).
+# Thus we need to create the stamp file *before* invoking valac, and to
+# move it to its final location only after valac has been invoked.
+ "\t${silent}rm -f \$\@ && echo stamp > \$\@-t\n".
+ "\t${verbose}\$(am__cd) \$(srcdir) && $compile @vala_sources\n".
+ "\t${silent}mv -f \$\@-t \$\@\n";
+
+ push_dist_common ($stampfile);
+
+ $clean_files{$stampfile} = MAINTAINER_CLEAN;
+}
+
+# Add output rules to invoke valac and create stamp file as a witness
+# to handle multiple outputs. This function is called after all source
+# file processing is done.
+sub lang_vala_finish ()
+{
+ my ($self) = @_;
+
+ foreach my $prog (keys %known_programs)
+ {
+ lang_vala_finish_target ($self, $prog);
+ }
+
+ while (my ($name) = each %known_libraries)
+ {
+ lang_vala_finish_target ($self, $name);
+ }
+}
+
+# The built .c files should be cleaned only on maintainer-clean
+# as the .c files are distributed. This function is called for each
+# .vala source file.
+sub lang_vala_target_hook
+{
+ my ($self, $aggregate, $output, $input, %transform) = @_;
+
+ $clean_files{$output} = MAINTAINER_CLEAN;
+}
+
+# This is a yacc helper which is called whenever we have decided to
+# compile a yacc file.
+sub lang_yacc_target_hook
+{
+ my ($self, $aggregate, $output, $input, %transform) = @_;
+
+ # If some relevant *YFLAGS variable contains the '-d' flag, we'll
+ # have to to generate special code.
+ my $yflags_contains_minus_d = 0;
+
+ foreach my $pfx ("", "${aggregate}_")
+ {
+ my $yflagsvar = var ("${pfx}YFLAGS");
+ next unless $yflagsvar;
+ # We cannot work reliably with conditionally-defined YFLAGS.
+ if ($yflagsvar->has_conditional_contents)
+ {
+ msg_var ('unsupported', $yflagsvar,
+ "'${pfx}YFLAGS' cannot have conditional contents");
+ }
+ else
+ {
+ $yflags_contains_minus_d = 1
+ if grep (/^-d$/, $yflagsvar->value_as_list_recursive);
+ }
+ }
+
+ if ($yflags_contains_minus_d)
+ {
+ # Found a '-d' that applies to the compilation of this file.
+ # Add a dependency for the generated header file, and arrange
+ # for that file to be included in the distribution.
+
+ # The extension of the output file (e.g., '.c' or '.cxx').
+ # We'll need it to compute the name of the generated header file.
+ (my $output_ext = basename ($output)) =~ s/.*(\.[^.]+)$/$1/;
+
+ # We know that a yacc input should be turned into either a C or
+ # C++ output file. We depend on this fact (here and in yacc.am),
+ # so check that it really holds.
+ my $lang = $languages{$extension_map{$output_ext}};
+ prog_error "invalid output name '$output' for yacc file '$input'"
+ if (!$lang || ($lang->name ne 'c' && $lang->name ne 'cxx'));
+
+ (my $header_ext = $output_ext) =~ s/c/h/g;
+ # Quote $output_ext in the regexp, so that dots in it are taken
+ # as literal dots, not as metacharacters.
+ (my $header = $output) =~ s/\Q$output_ext\E$/$header_ext/;
+
+ foreach my $cond (Automake::Rule::define (${header}, 'internal',
+ RULE_AUTOMAKE, TRUE,
+ INTERNAL))
+ {
+ my $condstr = $cond->subst_string;
+ $output_rules .=
+ "$condstr${header}: $output\n"
+ # Recover from removal of $header
+ . "$condstr\t\@if test ! -f \$@; then rm -f $output; else :; fi\n"
+ . "$condstr\t\@if test ! -f \$@; then \$(MAKE) \$(AM_MAKEFLAGS) $output; else :; fi\n";
+ }
+ # Distribute the generated file, unless its .y source was
+ # listed in a nodist_ variable. (handle_source_transform()
+ # will set DIST_SOURCE.)
+ push_dist_common ($header)
+ if $transform{'DIST_SOURCE'};
+
+ # The GNU rules say that yacc/lex output files should be removed
+ # by maintainer-clean. However, if the files are not distributed,
+ # then we want to remove them with "make clean"; otherwise,
+ # "make distcheck" will fail.
+ $clean_files{$header} = $transform{'DIST_SOURCE'} ? MAINTAINER_CLEAN : CLEAN;
+ }
+ # See the comment above for $HEADER.
+ $clean_files{$output} = $transform{'DIST_SOURCE'} ? MAINTAINER_CLEAN : CLEAN;
+}
+
+# This is a lex helper which is called whenever we have decided to
+# compile a lex file.
+sub lang_lex_target_hook
+{
+ my ($self, $aggregate, $output, $input, %transform) = @_;
+ # The GNU rules say that yacc/lex output files should be removed
+ # by maintainer-clean. However, if the files are not distributed,
+ # then we want to remove them with "make clean"; otherwise,
+ # "make distcheck" will fail.
+ $clean_files{$output} = $transform{'DIST_SOURCE'} ? MAINTAINER_CLEAN : CLEAN;
+}
+
+# This is a helper for both lex and yacc.
+sub yacc_lex_finish_helper ()
+{
+ return if defined $language_scratch{'lex-yacc-done'};
+ $language_scratch{'lex-yacc-done'} = 1;
+
+ # FIXME: for now, no line number.
+ require_conf_file ($configure_ac, FOREIGN, 'ylwrap');
+ define_variable ('YLWRAP', "$am_config_aux_dir/ylwrap", INTERNAL);
+}
+
+sub lang_yacc_finish ()
+{
+ return if defined $language_scratch{'yacc-done'};
+ $language_scratch{'yacc-done'} = 1;
+
+ reject_var 'YACCFLAGS', "'YACCFLAGS' obsolete; use 'YFLAGS' instead";
+
+ yacc_lex_finish_helper;
+}
+
+
+sub lang_lex_finish ()
+{
+ return if defined $language_scratch{'lex-done'};
+ $language_scratch{'lex-done'} = 1;
+
+ yacc_lex_finish_helper;
+}
+
+
+# Given a hash table of linker names, pick the name that has the most
+# precedence. This is lame, but something has to have global
+# knowledge in order to eliminate the conflict. Add more linkers as
+# required.
+sub resolve_linker
+{
+ my (%linkers) = @_;
+
+ foreach my $l (qw(GCJLINK OBJCXXLINK CXXLINK F77LINK FCLINK OBJCLINK UPCLINK))
+ {
+ return $l if defined $linkers{$l};
+ }
+ return 'LINK';
+}
+
+# Called to indicate that an extension was used.
+sub saw_extension
+{
+ my ($ext) = @_;
+ $extension_seen{$ext} = 1;
+}
+
+# register_language (%ATTRIBUTE)
+# ------------------------------
+# Register a single language.
+# Each %ATTRIBUTE is of the form ATTRIBUTE => VALUE.
+sub register_language
+{
+ my (%option) = @_;
+
+ # Set the defaults.
+ $option{'autodep'} = 'no'
+ unless defined $option{'autodep'};
+ $option{'linker'} = ''
+ unless defined $option{'linker'};
+ $option{'flags'} = []
+ unless defined $option{'flags'};
+ $option{'output_extensions'} = sub { return ( '.$(OBJEXT)', '.lo' ) }
+ unless defined $option{'output_extensions'};
+ $option{'nodist_specific'} = 0
+ unless defined $option{'nodist_specific'};
+
+ my $lang = new Automake::Language (%option);
+
+ # Fill indexes.
+ $extension_map{$_} = $lang->name foreach @{$lang->extensions};
+ $languages{$lang->name} = $lang;
+ my $link = $lang->linker;
+ if ($link)
+ {
+ if (exists $link_languages{$link})
+ {
+ prog_error ("'$link' has different definitions in "
+ . $lang->name . " and " . $link_languages{$link}->name)
+ if $lang->link ne $link_languages{$link}->link;
+ }
+ else
+ {
+ $link_languages{$link} = $lang;
+ }
+ }
+
+ # Update the pattern of known extensions.
+ accept_extensions (@{$lang->extensions});
+
+ # Update the suffix rules map.
+ foreach my $suffix (@{$lang->extensions})
+ {
+ foreach my $dest ($lang->output_extensions->($suffix))
+ {
+ register_suffix_rule (INTERNAL, $suffix, $dest);
+ }
+ }
+}
+
+# derive_suffix ($EXT, $OBJ)
+# --------------------------
+# This function is used to find a path from a user-specified suffix $EXT
+# to $OBJ or to some other suffix we recognize internally, e.g. 'cc'.
+sub derive_suffix
+{
+ my ($source_ext, $obj) = @_;
+
+ while (!$extension_map{$source_ext} && $source_ext ne $obj)
+ {
+ my $new_source_ext = next_in_suffix_chain ($source_ext, $obj);
+ last if not defined $new_source_ext;
+ $source_ext = $new_source_ext;
+ }
+
+ return $source_ext;
+}
+
+
+# Pretty-print something and append to '$output_rules'.
+sub pretty_print_rule
+{
+ $output_rules .= makefile_wrap (shift, shift, @_);
+}
+
+
+################################################################
+
+
+## -------------------------------- ##
+## Handling the conditional stack. ##
+## -------------------------------- ##
+
+
+# $STRING
+# make_conditional_string ($NEGATE, $COND)
+# ----------------------------------------
+sub make_conditional_string
+{
+ my ($negate, $cond) = @_;
+ $cond = "${cond}_TRUE"
+ unless $cond =~ /^TRUE|FALSE$/;
+ $cond = Automake::Condition::conditional_negate ($cond)
+ if $negate;
+ return $cond;
+}
+
+
+my %_am_macro_for_cond =
+ (
+ AMDEP => "one of the compiler tests\n"
+ . " AC_PROG_CC, AC_PROG_CXX, AC_PROG_OBJC, AC_PROG_OBJCXX,\n"
+ . " AM_PROG_AS, AM_PROG_GCJ, AM_PROG_UPC",
+ am__fastdepCC => 'AC_PROG_CC',
+ am__fastdepCCAS => 'AM_PROG_AS',
+ am__fastdepCXX => 'AC_PROG_CXX',
+ am__fastdepGCJ => 'AM_PROG_GCJ',
+ am__fastdepOBJC => 'AC_PROG_OBJC',
+ am__fastdepOBJCXX => 'AC_PROG_OBJCXX',
+ am__fastdepUPC => 'AM_PROG_UPC'
+ );
+
+# $COND
+# cond_stack_if ($NEGATE, $COND, $WHERE)
+# --------------------------------------
+sub cond_stack_if
+{
+ my ($negate, $cond, $where) = @_;
+
+ if (! $configure_cond{$cond} && $cond !~ /^TRUE|FALSE$/)
+ {
+ my $text = "$cond does not appear in AM_CONDITIONAL";
+ my $scope = US_LOCAL;
+ if (exists $_am_macro_for_cond{$cond})
+ {
+ my $mac = $_am_macro_for_cond{$cond};
+ $text .= "\n The usual way to define '$cond' is to add ";
+ $text .= ($mac =~ / /) ? $mac : "'$mac'";
+ $text .= "\n to '$configure_ac' and run 'aclocal' and 'autoconf' again";
+ # These warnings appear in Automake files (depend2.am),
+ # so there is no need to display them more than once:
+ $scope = US_GLOBAL;
+ }
+ error $where, $text, uniq_scope => $scope;
+ }
+
+ push (@cond_stack, make_conditional_string ($negate, $cond));
+
+ return new Automake::Condition (@cond_stack);
+}
+
+
+# $COND
+# cond_stack_else ($NEGATE, $COND, $WHERE)
+# ----------------------------------------
+sub cond_stack_else
+{
+ my ($negate, $cond, $where) = @_;
+
+ if (! @cond_stack)
+ {
+ error $where, "else without if";
+ return FALSE;
+ }
+
+ $cond_stack[$#cond_stack] =
+ Automake::Condition::conditional_negate ($cond_stack[$#cond_stack]);
+
+ # If $COND is given, check against it.
+ if (defined $cond)
+ {
+ $cond = make_conditional_string ($negate, $cond);
+
+ error ($where, "else reminder ($negate$cond) incompatible with "
+ . "current conditional: $cond_stack[$#cond_stack]")
+ if $cond_stack[$#cond_stack] ne $cond;
+ }
+
+ return new Automake::Condition (@cond_stack);
+}
+
+
+# $COND
+# cond_stack_endif ($NEGATE, $COND, $WHERE)
+# -----------------------------------------
+sub cond_stack_endif
+{
+ my ($negate, $cond, $where) = @_;
+ my $old_cond;
+
+ if (! @cond_stack)
+ {
+ error $where, "endif without if";
+ return TRUE;
+ }
+
+ # If $COND is given, check against it.
+ if (defined $cond)
+ {
+ $cond = make_conditional_string ($negate, $cond);
+
+ error ($where, "endif reminder ($negate$cond) incompatible with "
+ . "current conditional: $cond_stack[$#cond_stack]")
+ if $cond_stack[$#cond_stack] ne $cond;
+ }
+
+ pop @cond_stack;
+
+ return new Automake::Condition (@cond_stack);
+}
+
+
+
+
+
+## ------------------------ ##
+## Handling the variables. ##
+## ------------------------ ##
+
+
+# define_pretty_variable ($VAR, $COND, $WHERE, @VALUE)
+# ----------------------------------------------------
+# Like define_variable, but the value is a list, and the variable may
+# be defined conditionally. The second argument is the condition
+# under which the value should be defined; this should be the empty
+# string to define the variable unconditionally. The third argument
+# is a list holding the values to use for the variable. The value is
+# pretty printed in the output file.
+sub define_pretty_variable
+{
+ my ($var, $cond, $where, @value) = @_;
+
+ if (! vardef ($var, $cond))
+ {
+ Automake::Variable::define ($var, VAR_AUTOMAKE, '', $cond, "@value",
+ '', $where, VAR_PRETTY);
+ rvar ($var)->rdef ($cond)->set_seen;
+ }
+}
+
+
+# define_variable ($VAR, $VALUE, $WHERE)
+# --------------------------------------
+# Define a new Automake Makefile variable VAR to VALUE, but only if
+# not already defined.
+sub define_variable
+{
+ my ($var, $value, $where) = @_;
+ define_pretty_variable ($var, TRUE, $where, $value);
+}
+
+
+# define_files_variable ($VAR, \@BASENAME, $EXTENSION, $WHERE)
+# ------------------------------------------------------------
+# Define the $VAR which content is the list of file names composed of
+# a @BASENAME and the $EXTENSION.
+sub define_files_variable ($\@$$)
+{
+ my ($var, $basename, $extension, $where) = @_;
+ define_variable ($var,
+ join (' ', map { "$_.$extension" } @$basename),
+ $where);
+}
+
+
+# Like define_variable, but define a variable to be the configure
+# substitution by the same name.
+sub define_configure_variable
+{
+ my ($var) = @_;
+ # Some variables we do not want to output. For instance it
+ # would be a bad idea to output `U = @U@` when `@U@` can be
+ # substituted as `\`.
+ my $pretty = exists $ignored_configure_vars{$var} ? VAR_SILENT : VAR_ASIS;
+ Automake::Variable::define ($var, VAR_CONFIGURE, '', TRUE, subst ($var),
+ '', $configure_vars{$var}, $pretty);
+}
+
+
+# define_compiler_variable ($LANG)
+# --------------------------------
+# Define a compiler variable. We also handle defining the 'LT'
+# version of the command when using libtool.
+sub define_compiler_variable
+{
+ my ($lang) = @_;
+
+ my ($var, $value) = ($lang->compiler, $lang->compile);
+ my $libtool_tag = '';
+ $libtool_tag = '--tag=' . $lang->libtool_tag . ' '
+ if $lang->libtool_tag && exists $libtool_tags{$lang->libtool_tag};
+ define_variable ($var, $value, INTERNAL);
+ if (var ('LIBTOOL'))
+ {
+ my $verbose = define_verbose_libtool ();
+ define_variable ("LT$var",
+ "\$(LIBTOOL) $verbose $libtool_tag\$(AM_LIBTOOLFLAGS)"
+ . " \$(LIBTOOLFLAGS) --mode=compile $value",
+ INTERNAL);
+ }
+ define_verbose_tagvar ($lang->ccer || 'GEN');
+}
+
+
+sub define_linker_variable
+{
+ my ($lang) = @_;
+
+ my $libtool_tag = '';
+ $libtool_tag = '--tag=' . $lang->libtool_tag . ' '
+ if $lang->libtool_tag && exists $libtool_tags{$lang->libtool_tag};
+ # CCLD = $(CC).
+ define_variable ($lang->lder, $lang->ld, INTERNAL);
+ # CCLINK = $(CCLD) blah blah...
+ my $link = '';
+ if (var ('LIBTOOL'))
+ {
+ my $verbose = define_verbose_libtool ();
+ $link = "\$(LIBTOOL) $verbose $libtool_tag\$(AM_LIBTOOLFLAGS) "
+ . "\$(LIBTOOLFLAGS) --mode=link ";
+ }
+ define_variable ($lang->linker, $link . $lang->link, INTERNAL);
+ define_variable ($lang->compiler, $lang, INTERNAL);
+ define_verbose_tagvar ($lang->lder || 'GEN');
+}
+
+sub define_per_target_linker_variable
+{
+ my ($linker, $target) = @_;
+
+ # If the user wrote a custom link command, we don't define ours.
+ return "${target}_LINK"
+ if set_seen "${target}_LINK";
+
+ my $xlink = $linker ? $linker : 'LINK';
+
+ my $lang = $link_languages{$xlink};
+ prog_error "Unknown language for linker variable '$xlink'"
+ unless $lang;
+
+ my $link_command = $lang->link;
+ if (var 'LIBTOOL')
+ {
+ my $libtool_tag = '';
+ $libtool_tag = '--tag=' . $lang->libtool_tag . ' '
+ if $lang->libtool_tag && exists $libtool_tags{$lang->libtool_tag};
+
+ my $verbose = define_verbose_libtool ();
+ $link_command =
+ "\$(LIBTOOL) $verbose $libtool_tag\$(AM_LIBTOOLFLAGS) \$(LIBTOOLFLAGS) "
+ . "--mode=link " . $link_command;
+ }
+
+ # Rewrite each occurrence of 'AM_$flag' in the link
+ # command into '${derived}_$flag' if it exists.
+ my $orig_command = $link_command;
+ my @flags = (@{$lang->flags}, 'LDFLAGS');
+ push @flags, 'LIBTOOLFLAGS' if var 'LIBTOOL';
+ for my $flag (@flags)
+ {
+ my $val = "${target}_$flag";
+ $link_command =~ s/\(AM_$flag\)/\($val\)/
+ if set_seen ($val);
+ }
+
+ # If the computed command is the same as the generic command, use
+ # the command linker variable.
+ return ($lang->linker, $lang->lder)
+ if $link_command eq $orig_command;
+
+ define_variable ("${target}_LINK", $link_command, INTERNAL);
+ return ("${target}_LINK", $lang->lder);
+}
+
+################################################################
+
+# check_trailing_slash ($WHERE, $LINE)
+# ------------------------------------
+# Return 1 iff $LINE ends with a slash.
+# Might modify $LINE.
+sub check_trailing_slash ($\$)
+{
+ my ($where, $line) = @_;
+
+ # Ignore '##' lines.
+ return 0 if $$line =~ /$IGNORE_PATTERN/o;
+
+ # Catch and fix a common error.
+ msg "syntax", $where, "whitespace following trailing backslash"
+ if $$line =~ s/\\\s+\n$/\\\n/;
+
+ return $$line =~ /\\$/;
+}
+
+
+# read_am_file ($AMFILE, $WHERE, $RELDIR)
+# ---------------------------------------
+# Read $AMFILE file name which is located in $RELDIR, and set up
+# global variables resetted by '&generate_makefile'. Simultaneously
+# copy lines from $AMFILE into '$output_trailer', or define variables
+# as appropriate.
+#
+# NOTE: We put rules in the trailer section. We want user rules to
+# come after our generated stuff.
+sub read_am_file
+{
+ my ($amfile, $where, $reldir) = @_;
+ my $canon_reldir = &canonicalize ($reldir);
+
+ my $am_file = new Automake::XFile ("< $amfile");
+ verb "reading $amfile";
+
+ # Keep track of the youngest output dependency.
+ my $mtime = mtime $amfile;
+ $output_deps_greatest_timestamp = $mtime
+ if $mtime > $output_deps_greatest_timestamp;
+
+ my $spacing = '';
+ my $comment = '';
+ my $blank = 0;
+ my $saw_bk = 0;
+ my $var_look = VAR_ASIS;
+
+ use constant IN_VAR_DEF => 0;
+ use constant IN_RULE_DEF => 1;
+ use constant IN_COMMENT => 2;
+ my $prev_state = IN_RULE_DEF;
+
+ while ($_ = $am_file->getline)
+ {
+ $where->set ("$amfile:$.");
+ if (/$IGNORE_PATTERN/o)
+ {
+ # Merely delete comments beginning with two hashes.
+ }
+ elsif (/$WHITE_PATTERN/o)
+ {
+ error $where, "blank line following trailing backslash"
+ if $saw_bk;
+ # Stick a single white line before the incoming macro or rule.
+ $spacing = "\n";
+ $blank = 1;
+ # Flush all comments seen so far.
+ if ($comment ne '')
+ {
+ $output_vars .= $comment;
+ $comment = '';
+ }
+ }
+ elsif (/$COMMENT_PATTERN/o)
+ {
+ # Stick comments before the incoming macro or rule. Make
+ # sure a blank line precedes the first block of comments.
+ $spacing = "\n" unless $blank;
+ $blank = 1;
+ $comment .= $spacing . $_;
+ $spacing = '';
+ $prev_state = IN_COMMENT;
+ }
+ else
+ {
+ last;
+ }
+ $saw_bk = check_trailing_slash ($where, $_);
+ }
+
+ # We save the conditional stack on entry, and then check to make
+ # sure it is the same on exit. This lets us conditionally include
+ # other files.
+ my @saved_cond_stack = @cond_stack;
+ my $cond = new Automake::Condition (@cond_stack);
+
+ my $last_var_name = '';
+ my $last_var_type = '';
+ my $last_var_value = '';
+ my $last_where;
+ # FIXME: shouldn't use $_ in this loop; it is too big.
+ while ($_)
+ {
+ $where->set ("$amfile:$.");
+
+ # Make sure the line is \n-terminated.
+ chomp;
+ $_ .= "\n";
+
+ # Don't look at MAINTAINER_MODE_TRUE here. That shouldn't be
+ # used by users. @MAINT@ is an anachronism now.
+ $_ =~ s/\@MAINT\@//g
+ unless $seen_maint_mode;
+
+ my $new_saw_bk = check_trailing_slash ($where, $_);
+
+ if ($reldir eq '.')
+ {
+ # If present, eat the following '_' or '/', converting
+ # "%reldir%/foo" and "%canon_reldir%_foo" into plain "foo"
+ # when $reldir is '.'.
+ $_ =~ s,%(D|reldir)%/,,g;
+ $_ =~ s,%(C|canon_reldir)%_,,g;
+ }
+ $_ =~ s/%(D|reldir)%/${reldir}/g;
+ $_ =~ s/%(C|canon_reldir)%/${canon_reldir}/g;
+
+ if (/$IGNORE_PATTERN/o)
+ {
+ # Merely delete comments beginning with two hashes.
+
+ # Keep any backslash from the previous line.
+ $new_saw_bk = $saw_bk;
+ }
+ elsif (/$WHITE_PATTERN/o)
+ {
+ # Stick a single white line before the incoming macro or rule.
+ $spacing = "\n";
+ error $where, "blank line following trailing backslash"
+ if $saw_bk;
+ }
+ elsif (/$COMMENT_PATTERN/o)
+ {
+ error $where, "comment following trailing backslash"
+ if $saw_bk && $prev_state != IN_COMMENT;
+
+ # Stick comments before the incoming macro or rule.
+ $comment .= $spacing . $_;
+ $spacing = '';
+ $prev_state = IN_COMMENT;
+ }
+ elsif ($saw_bk)
+ {
+ if ($prev_state == IN_RULE_DEF)
+ {
+ my $cond = new Automake::Condition @cond_stack;
+ $output_trailer .= $cond->subst_string;
+ $output_trailer .= $_;
+ }
+ elsif ($prev_state == IN_COMMENT)
+ {
+ # If the line doesn't start with a '#', add it.
+ # We do this because a continued comment like
+ # # A = foo \
+ # bar \
+ # baz
+ # is not portable. BSD make doesn't honor
+ # escaped newlines in comments.
+ s/^#?/#/;
+ $comment .= $spacing . $_;
+ }
+ else # $prev_state == IN_VAR_DEF
+ {
+ $last_var_value .= ' '
+ unless $last_var_value =~ /\s$/;
+ $last_var_value .= $_;
+
+ if (!/\\$/)
+ {
+ Automake::Variable::define ($last_var_name, VAR_MAKEFILE,
+ $last_var_type, $cond,
+ $last_var_value, $comment,
+ $last_where, VAR_ASIS)
+ if $cond != FALSE;
+ $comment = $spacing = '';
+ }
+ }
+ }
+
+ elsif (/$IF_PATTERN/o)
+ {
+ $cond = cond_stack_if ($1, $2, $where);
+ }
+ elsif (/$ELSE_PATTERN/o)
+ {
+ $cond = cond_stack_else ($1, $2, $where);
+ }
+ elsif (/$ENDIF_PATTERN/o)
+ {
+ $cond = cond_stack_endif ($1, $2, $where);
+ }
+
+ elsif (/$RULE_PATTERN/o)
+ {
+ # Found a rule.
+ $prev_state = IN_RULE_DEF;
+
+ # For now we have to output all definitions of user rules
+ # and can't diagnose duplicates (see the comment in
+ # Automake::Rule::define). So we go on and ignore the return value.
+ Automake::Rule::define ($1, $amfile, RULE_USER, $cond, $where);
+
+ check_variable_expansions ($_, $where);
+
+ $output_trailer .= $comment . $spacing;
+ my $cond = new Automake::Condition @cond_stack;
+ $output_trailer .= $cond->subst_string;
+ $output_trailer .= $_;
+ $comment = $spacing = '';
+ }
+ elsif (/$ASSIGNMENT_PATTERN/o)
+ {
+ # Found a macro definition.
+ $prev_state = IN_VAR_DEF;
+ $last_var_name = $1;
+ $last_var_type = $2;
+ $last_var_value = $3;
+ $last_where = $where->clone;
+ if ($3 ne '' && substr ($3, -1) eq "\\")
+ {
+ # We preserve the '\' because otherwise the long lines
+ # that are generated will be truncated by broken
+ # 'sed's.
+ $last_var_value = $3 . "\n";
+ }
+ # Normally we try to output variable definitions in the
+ # same format they were input. However, POSIX compliant
+ # systems are not required to support lines longer than
+ # 2048 bytes (most notably, some sed implementation are
+ # limited to 4000 bytes, and sed is used by config.status
+ # to rewrite Makefile.in into Makefile). Moreover nobody
+ # would really write such long lines by hand since it is
+ # hardly maintainable. So if a line is longer that 1000
+ # bytes (an arbitrary limit), assume it has been
+ # automatically generated by some tools, and flatten the
+ # variable definition. Otherwise, keep the variable as it
+ # as been input.
+ $var_look = VAR_PRETTY if length ($last_var_value) >= 1000;
+
+ if (!/\\$/)
+ {
+ Automake::Variable::define ($last_var_name, VAR_MAKEFILE,
+ $last_var_type, $cond,
+ $last_var_value, $comment,
+ $last_where, $var_look)
+ if $cond != FALSE;
+ $comment = $spacing = '';
+ $var_look = VAR_ASIS;
+ }
+ }
+ elsif (/$INCLUDE_PATTERN/o)
+ {
+ my $path = $1;
+
+ if ($path =~ s/^\$\(top_srcdir\)\///)
+ {
+ push (@include_stack, "\$\(top_srcdir\)/$path");
+ # Distribute any included file.
+
+ # Always use the $(top_srcdir) prefix in DIST_COMMON,
+ # otherwise OSF make will implicitly copy the included
+ # file in the build tree during "make distdir" to satisfy
+ # the dependency.
+ # (subdir-am-cond.sh and subdir-ac-cond.sh will fail)
+ push_dist_common ("\$\(top_srcdir\)/$path");
+ }
+ else
+ {
+ $path =~ s/\$\(srcdir\)\///;
+ push (@include_stack, "\$\(srcdir\)/$path");
+ # Always use the $(srcdir) prefix in DIST_COMMON,
+ # otherwise OSF make will implicitly copy the included
+ # file in the build tree during "make distdir" to satisfy
+ # the dependency.
+ # (subdir-am-cond.sh and subdir-ac-cond.sh will fail)
+ push_dist_common ("\$\(srcdir\)/$path");
+ $path = $relative_dir . "/" . $path if $relative_dir ne '.';
+ }
+ my $new_reldir = File::Spec->abs2rel ($path, $relative_dir);
+ $new_reldir = '.' if $new_reldir !~ s,/[^/]*$,,;
+ $where->push_context ("'$path' included from here");
+ read_am_file ($path, $where, $new_reldir);
+ $where->pop_context;
+ }
+ else
+ {
+ # This isn't an error; it is probably a continued rule.
+ # In fact, this is what we assume.
+ $prev_state = IN_RULE_DEF;
+ check_variable_expansions ($_, $where);
+ $output_trailer .= $comment . $spacing;
+ my $cond = new Automake::Condition @cond_stack;
+ $output_trailer .= $cond->subst_string;
+ $output_trailer .= $_;
+ $comment = $spacing = '';
+ error $where, "'#' comment at start of rule is unportable"
+ if $_ =~ /^\t\s*\#/;
+ }
+
+ $saw_bk = $new_saw_bk;
+ $_ = $am_file->getline;
+ }
+
+ $output_trailer .= $comment;
+
+ error ($where, "trailing backslash on last line")
+ if $saw_bk;
+
+ error ($where, (@cond_stack ? "unterminated conditionals: @cond_stack"
+ : "too many conditionals closed in include file"))
+ if "@saved_cond_stack" ne "@cond_stack";
+}
+
+
+# A helper for read_main_am_file which initializes configure variables
+# and variables from header-vars.am.
+sub define_standard_variables ()
+{
+ my $saved_output_vars = $output_vars;
+ my ($comments, undef, $rules) =
+ file_contents_internal (1, "$libdir/am/header-vars.am",
+ new Automake::Location);
+
+ foreach my $var (sort keys %configure_vars)
+ {
+ define_configure_variable ($var);
+ }
+
+ $output_vars .= $comments . $rules;
+}
+
+
+# read_main_am_file ($MAKEFILE_AM, $MAKEFILE_IN)
+# ----------------------------------------------
+sub read_main_am_file
+{
+ my ($amfile, $infile) = @_;
+
+ # This supports the strange variable tricks we are about to play.
+ prog_error ("variable defined before read_main_am_file\n" . variables_dump ())
+ if (scalar (variables) > 0);
+
+ # Generate copyright header for generated Makefile.in.
+ # We do discard the output of predefined variables, handled below.
+ $output_vars = ("# " . basename ($infile) . " generated by automake "
+ . $VERSION . " from " . basename ($amfile) . ".\n");
+ $output_vars .= '# ' . subst ('configure_input') . "\n";
+ $output_vars .= $gen_copyright;
+
+ # We want to predefine as many variables as possible. This lets
+ # the user set them with '+=' in Makefile.am.
+ define_standard_variables;
+
+ # Read user file, which might override some of our values.
+ read_am_file ($amfile, new Automake::Location, '.');
+}
+
+
+
+################################################################
+
+# $STRING
+# flatten ($ORIGINAL_STRING)
+# --------------------------
+sub flatten
+{
+ $_ = shift;
+
+ s/\\\n//somg;
+ s/\s+/ /g;
+ s/^ //;
+ s/ $//;
+
+ return $_;
+}
+
+
+# transform_token ($TOKEN, \%PAIRS, $KEY)
+# ---------------------------------------
+# Return the value associated to $KEY in %PAIRS, as used on $TOKEN
+# (which should be ?KEY? or any of the special %% requests)..
+sub transform_token ($\%$)
+{
+ my ($token, $transform, $key) = @_;
+ my $res = $transform->{$key};
+ prog_error "Unknown key '$key' in '$token'" unless defined $res;
+ return $res;
+}
+
+
+# transform ($TOKEN, \%PAIRS)
+# ---------------------------
+# If ($TOKEN, $VAL) is in %PAIRS:
+# - replaces %KEY% with $VAL,
+# - enables/disables ?KEY? and ?!KEY?,
+# - replaces %?KEY% with TRUE or FALSE.
+sub transform ($\%)
+{
+ my ($token, $transform) = @_;
+
+ # %KEY%.
+ # Must be before the following pattern to exclude the case
+ # when there is neither IFTRUE nor IFFALSE.
+ if ($token =~ /^%([\w\-]+)%$/)
+ {
+ return transform_token ($token, %$transform, $1);
+ }
+ # %?KEY%.
+ elsif ($token =~ /^%\?([\w\-]+)%$/)
+ {
+ return transform_token ($token, %$transform, $1) ? 'TRUE' : 'FALSE';
+ }
+ # ?KEY? and ?!KEY?.
+ elsif ($token =~ /^ \? (!?) ([\w\-]+) \? $/x)
+ {
+ my $neg = ($1 eq '!') ? 1 : 0;
+ my $val = transform_token ($token, %$transform, $2);
+ return (!!$val == $neg) ? '##%' : '';
+ }
+ else
+ {
+ prog_error "Unknown request format: $token";
+ }
+}
+
+# $TEXT
+# preprocess_file ($MAKEFILE, [%TRANSFORM])
+# -----------------------------------------
+# Load a $MAKEFILE, apply the %TRANSFORM, and return the result.
+# No extra parsing or post-processing is done (i.e., recognition of
+# rules declaration or of make variables definitions).
+sub preprocess_file
+{
+ my ($file, %transform) = @_;
+
+ # Complete %transform with global options.
+ # Note that %transform goes last, so it overrides global options.
+ %transform = ( 'MAINTAINER-MODE'
+ => $seen_maint_mode ? subst ('MAINTAINER_MODE_TRUE') : '',
+
+ 'XZ' => !! option 'dist-xz',
+ 'LZIP' => !! option 'dist-lzip',
+ 'BZIP2' => !! option 'dist-bzip2',
+ 'COMPRESS' => !! option 'dist-tarZ',
+ 'GZIP' => ! option 'no-dist-gzip',
+ 'SHAR' => !! option 'dist-shar',
+ 'ZIP' => !! option 'dist-zip',
+
+ 'INSTALL-INFO' => ! option 'no-installinfo',
+ 'INSTALL-MAN' => ! option 'no-installman',
+ 'CK-NEWS' => !! option 'check-news',
+
+ 'SUBDIRS' => !! var ('SUBDIRS'),
+ 'TOPDIR_P' => $relative_dir eq '.',
+
+ 'BUILD' => ($seen_canonical >= AC_CANONICAL_BUILD),
+ 'HOST' => ($seen_canonical >= AC_CANONICAL_HOST),
+ 'TARGET' => ($seen_canonical >= AC_CANONICAL_TARGET),
+
+ 'LIBTOOL' => !! var ('LIBTOOL'),
+ 'NONLIBTOOL' => 1,
+ %transform);
+
+ if (! defined ($_ = $am_file_cache{$file}))
+ {
+ verb "reading $file";
+ # Swallow the whole file.
+ my $fc_file = new Automake::XFile "< $file";
+ my $saved_dollar_slash = $/;
+ undef $/;
+ $_ = $fc_file->getline;
+ $/ = $saved_dollar_slash;
+ $fc_file->close;
+ # Remove ##-comments.
+ # Besides we don't need more than two consecutive new-lines.
+ s/(?:$IGNORE_PATTERN|(?<=\n\n)\n+)//gom;
+ # Remember the contents of the just-read file.
+ $am_file_cache{$file} = $_;
+ }
+
+ # Substitute Automake template tokens.
+ s/(?: % \?? [\w\-]+ %
+ | \? !? [\w\-]+ \?
+ )/transform($&, %transform)/gex;
+ # transform() may have added some ##%-comments to strip.
+ # (we use '##%' instead of '##' so we can distinguish ##%##%##% from
+ # ####### and do not remove the latter.)
+ s/^[ \t]*(?:##%)+.*\n//gm;
+
+ return $_;
+}
+
+
+# @PARAGRAPHS
+# make_paragraphs ($MAKEFILE, [%TRANSFORM])
+# -----------------------------------------
+# Load a $MAKEFILE, apply the %TRANSFORM, and return it as a list of
+# paragraphs.
+sub make_paragraphs
+{
+ my ($file, %transform) = @_;
+ $transform{FIRST} = !$transformed_files{$file};
+ $transformed_files{$file} = 1;
+
+ my @lines = split /(?<!\\)\n/, preprocess_file ($file, %transform);
+ my @res;
+
+ while (defined ($_ = shift @lines))
+ {
+ my $paragraph = $_;
+ # If we are a rule, eat as long as we start with a tab.
+ if (/$RULE_PATTERN/smo)
+ {
+ while (defined ($_ = shift @lines) && $_ =~ /^\t/)
+ {
+ $paragraph .= "\n$_";
+ }
+ unshift (@lines, $_);
+ }
+
+ # If we are a comments, eat as much comments as you can.
+ elsif (/$COMMENT_PATTERN/smo)
+ {
+ while (defined ($_ = shift @lines)
+ && $_ =~ /$COMMENT_PATTERN/smo)
+ {
+ $paragraph .= "\n$_";
+ }
+ unshift (@lines, $_);
+ }
+
+ push @res, $paragraph;
+ }
+
+ return @res;
+}
+
+
+
+# ($COMMENT, $VARIABLES, $RULES)
+# file_contents_internal ($IS_AM, $FILE, $WHERE, [%TRANSFORM])
+# ------------------------------------------------------------
+# Return contents of a file from $libdir/am, automatically skipping
+# macros or rules which are already known. $IS_AM iff the caller is
+# reading an Automake file (as opposed to the user's Makefile.am).
+sub file_contents_internal
+{
+ my ($is_am, $file, $where, %transform) = @_;
+
+ $where->set ($file);
+
+ my $result_vars = '';
+ my $result_rules = '';
+ my $comment = '';
+ my $spacing = '';
+
+ # The following flags are used to track rules spanning across
+ # multiple paragraphs.
+ my $is_rule = 0; # 1 if we are processing a rule.
+ my $discard_rule = 0; # 1 if the current rule should not be output.
+
+ # We save the conditional stack on entry, and then check to make
+ # sure it is the same on exit. This lets us conditionally include
+ # other files.
+ my @saved_cond_stack = @cond_stack;
+ my $cond = new Automake::Condition (@cond_stack);
+
+ foreach (make_paragraphs ($file, %transform))
+ {
+ # FIXME: no line number available.
+ $where->set ($file);
+
+ # Sanity checks.
+ error $where, "blank line following trailing backslash:\n$_"
+ if /\\$/;
+ error $where, "comment following trailing backslash:\n$_"
+ if /\\#/;
+
+ if (/^$/)
+ {
+ $is_rule = 0;
+ # Stick empty line before the incoming macro or rule.
+ $spacing = "\n";
+ }
+ elsif (/$COMMENT_PATTERN/mso)
+ {
+ $is_rule = 0;
+ # Stick comments before the incoming macro or rule.
+ $comment = "$_\n";
+ }
+
+ # Handle inclusion of other files.
+ elsif (/$INCLUDE_PATTERN/o)
+ {
+ if ($cond != FALSE)
+ {
+ my $file = ($is_am ? "$libdir/am/" : '') . $1;
+ $where->push_context ("'$file' included from here");
+ # N-ary '.=' fails.
+ my ($com, $vars, $rules)
+ = file_contents_internal ($is_am, $file, $where, %transform);
+ $where->pop_context;
+ $comment .= $com;
+ $result_vars .= $vars;
+ $result_rules .= $rules;
+ }
+ }
+
+ # Handling the conditionals.
+ elsif (/$IF_PATTERN/o)
+ {
+ $cond = cond_stack_if ($1, $2, $file);
+ }
+ elsif (/$ELSE_PATTERN/o)
+ {
+ $cond = cond_stack_else ($1, $2, $file);
+ }
+ elsif (/$ENDIF_PATTERN/o)
+ {
+ $cond = cond_stack_endif ($1, $2, $file);
+ }
+
+ # Handling rules.
+ elsif (/$RULE_PATTERN/mso)
+ {
+ $is_rule = 1;
+ $discard_rule = 0;
+ # Separate relationship from optional actions: the first
+ # `new-line tab" not preceded by backslash (continuation
+ # line).
+ my $paragraph = $_;
+ /^(.*?)(?:(?<!\\)\n(\t.*))?$/s;
+ my ($relationship, $actions) = ($1, $2 || '');
+
+ # Separate targets from dependencies: the first colon.
+ $relationship =~ /^([^:]+\S+) *: *(.*)$/som;
+ my ($targets, $dependencies) = ($1, $2);
+ # Remove the escaped new lines.
+ # I don't know why, but I have to use a tmp $flat_deps.
+ my $flat_deps = flatten ($dependencies);
+ my @deps = split (' ', $flat_deps);
+
+ foreach (split (' ', $targets))
+ {
+ # FIXME: 1. We are not robust to people defining several targets
+ # at once, only some of them being in %dependencies. The
+ # actions from the targets in %dependencies are usually generated
+ # from the content of %actions, but if some targets in $targets
+ # are not in %dependencies the ELSE branch will output
+ # a rule for all $targets (i.e. the targets which are both
+ # in %dependencies and $targets will have two rules).
+
+ # FIXME: 2. The logic here is not able to output a
+ # multi-paragraph rule several time (e.g. for each condition
+ # it is defined for) because it only knows the first paragraph.
+
+ # FIXME: 3. We are not robust to people defining a subset
+ # of a previously defined "multiple-target" rule. E.g.
+ # 'foo:' after 'foo bar:'.
+
+ # Output only if not in FALSE.
+ if (defined $dependencies{$_} && $cond != FALSE)
+ {
+ depend ($_, @deps);
+ register_action ($_, $actions);
+ }
+ else
+ {
+ # Free-lance dependency. Output the rule for all the
+ # targets instead of one by one.
+ my @undefined_conds =
+ Automake::Rule::define ($targets, $file,
+ $is_am ? RULE_AUTOMAKE : RULE_USER,
+ $cond, $where);
+ for my $undefined_cond (@undefined_conds)
+ {
+ my $condparagraph = $paragraph;
+ $condparagraph =~ s/^/$undefined_cond->subst_string/gme;
+ $result_rules .= "$spacing$comment$condparagraph\n";
+ }
+ if (scalar @undefined_conds == 0)
+ {
+ # Remember to discard next paragraphs
+ # if they belong to this rule.
+ # (but see also FIXME: #2 above.)
+ $discard_rule = 1;
+ }
+ $comment = $spacing = '';
+ last;
+ }
+ }
+ }
+
+ elsif (/$ASSIGNMENT_PATTERN/mso)
+ {
+ my ($var, $type, $val) = ($1, $2, $3);
+ error $where, "variable '$var' with trailing backslash"
+ if /\\$/;
+
+ $is_rule = 0;
+
+ Automake::Variable::define ($var,
+ $is_am ? VAR_AUTOMAKE : VAR_MAKEFILE,
+ $type, $cond, $val, $comment, $where,
+ VAR_ASIS)
+ if $cond != FALSE;
+
+ $comment = $spacing = '';
+ }
+ else
+ {
+ # This isn't an error; it is probably some tokens which
+ # configure is supposed to replace, such as '@SET-MAKE@',
+ # or some part of a rule cut by an if/endif.
+ if (! $cond->false && ! ($is_rule && $discard_rule))
+ {
+ s/^/$cond->subst_string/gme;
+ $result_rules .= "$spacing$comment$_\n";
+ }
+ $comment = $spacing = '';
+ }
+ }
+
+ error ($where, @cond_stack ?
+ "unterminated conditionals: @cond_stack" :
+ "too many conditionals closed in include file")
+ if "@saved_cond_stack" ne "@cond_stack";
+
+ return ($comment, $result_vars, $result_rules);
+}
+
+
+# $CONTENTS
+# file_contents ($BASENAME, $WHERE, [%TRANSFORM])
+# -----------------------------------------------
+# Return contents of a file from $libdir/am, automatically skipping
+# macros or rules which are already known.
+sub file_contents
+{
+ my ($basename, $where, %transform) = @_;
+ my ($comments, $variables, $rules) =
+ file_contents_internal (1, "$libdir/am/$basename.am", $where,
+ %transform);
+ return "$comments$variables$rules";
+}
+
+
+# @PREFIX
+# am_primary_prefixes ($PRIMARY, $CAN_DIST, @PREFIXES)
+# ----------------------------------------------------
+# Find all variable prefixes that are used for install directories. A
+# prefix 'zar' qualifies iff:
+#
+# * 'zardir' is a variable.
+# * 'zar_PRIMARY' is a variable.
+#
+# As a side effect, it looks for misspellings. It is an error to have
+# a variable ending in a "reserved" suffix whose prefix is unknown, e.g.
+# "bni_PROGRAMS". However, unusual prefixes are allowed if a variable
+# of the same name (with "dir" appended) exists. For instance, if the
+# variable "zardir" is defined, then "zar_PROGRAMS" becomes valid.
+# This is to provide a little extra flexibility in those cases which
+# need it.
+sub am_primary_prefixes
+{
+ my ($primary, $can_dist, @prefixes) = @_;
+
+ local $_;
+ my %valid = map { $_ => 0 } @prefixes;
+ $valid{'EXTRA'} = 0;
+ foreach my $var (variables $primary)
+ {
+ # Automake is allowed to define variables that look like primaries
+ # but which aren't. E.g. INSTALL_sh_DATA.
+ # Autoconf can also define variables like INSTALL_DATA, so
+ # ignore all configure variables (at least those which are not
+ # redefined in Makefile.am).
+ # FIXME: We should make sure that these variables are not
+ # conditionally defined (or else adjust the condition below).
+ my $def = $var->def (TRUE);
+ next if $def && $def->owner != VAR_MAKEFILE;
+
+ my $varname = $var->name;
+
+ if ($varname =~ /^(nobase_)?(dist_|nodist_)?(.*)_[[:alnum:]]+$/)
+ {
+ my ($base, $dist, $X) = ($1 || '', $2 || '', $3 || '');
+ if ($dist ne '' && ! $can_dist)
+ {
+ err_var ($var,
+ "invalid variable '$varname': 'dist' is forbidden");
+ }
+ # Standard directories must be explicitly allowed.
+ elsif (! defined $valid{$X} && exists $standard_prefix{$X})
+ {
+ err_var ($var,
+ "'${X}dir' is not a legitimate directory " .
+ "for '$primary'");
+ }
+ # A not explicitly valid directory is allowed if Xdir is defined.
+ elsif (! defined $valid{$X} &&
+ $var->requires_variables ("'$varname' is used", "${X}dir"))
+ {
+ # Nothing to do. Any error message has been output
+ # by $var->requires_variables.
+ }
+ else
+ {
+ # Ensure all extended prefixes are actually used.
+ $valid{"$base$dist$X"} = 1;
+ }
+ }
+ else
+ {
+ prog_error "unexpected variable name: $varname";
+ }
+ }
+
+ # Return only those which are actually defined.
+ return sort grep { var ($_ . '_' . $primary) } keys %valid;
+}
+
+
+# am_install_var (-OPTION..., file, HOW, where...)
+# ------------------------------------------------
+#
+# Handle 'where_HOW' variable magic. Does all lookups, generates
+# install code, and possibly generates code to define the primary
+# variable. The first argument is the name of the .am file to munge,
+# the second argument is the primary variable (e.g. HEADERS), and all
+# subsequent arguments are possible installation locations.
+#
+# Returns list of [$location, $value] pairs, where
+# $value's are the values in all where_HOW variable, and $location
+# there associated location (the place here their parent variables were
+# defined).
+#
+# FIXME: this should be rewritten to be cleaner. It should be broken
+# up into multiple functions.
+#
+sub am_install_var
+{
+ my (@args) = @_;
+
+ my $do_require = 1;
+ my $can_dist = 0;
+ my $default_dist = 0;
+ while (@args)
+ {
+ if ($args[0] eq '-noextra')
+ {
+ $do_require = 0;
+ }
+ elsif ($args[0] eq '-candist')
+ {
+ $can_dist = 1;
+ }
+ elsif ($args[0] eq '-defaultdist')
+ {
+ $default_dist = 1;
+ $can_dist = 1;
+ }
+ elsif ($args[0] !~ /^-/)
+ {
+ last;
+ }
+ shift (@args);
+ }
+
+ my ($file, $primary, @prefix) = @args;
+
+ # Now that configure substitutions are allowed in where_HOW
+ # variables, it is an error to actually define the primary. We
+ # allow 'JAVA', as it is customarily used to mean the Java
+ # interpreter. This is but one of several Java hacks. Similarly,
+ # 'PYTHON' is customarily used to mean the Python interpreter.
+ reject_var $primary, "'$primary' is an anachronism"
+ unless $primary eq 'JAVA' || $primary eq 'PYTHON';
+
+ # Get the prefixes which are valid and actually used.
+ @prefix = am_primary_prefixes ($primary, $can_dist, @prefix);
+
+ # If a primary includes a configure substitution, then the EXTRA_
+ # form is required. Otherwise we can't properly do our job.
+ my $require_extra;
+
+ my @used = ();
+ my @result = ();
+
+ foreach my $X (@prefix)
+ {
+ my $nodir_name = $X;
+ my $one_name = $X . '_' . $primary;
+ my $one_var = var $one_name;
+
+ my $strip_subdir = 1;
+ # If subdir prefix should be preserved, do so.
+ if ($nodir_name =~ /^nobase_/)
+ {
+ $strip_subdir = 0;
+ $nodir_name =~ s/^nobase_//;
+ }
+
+ # If files should be distributed, do so.
+ my $dist_p = 0;
+ if ($can_dist)
+ {
+ $dist_p = (($default_dist && $nodir_name !~ /^nodist_/)
+ || (! $default_dist && $nodir_name =~ /^dist_/));
+ $nodir_name =~ s/^(dist|nodist)_//;
+ }
+
+
+ # Use the location of the currently processed variable.
+ # We are not processing a particular condition, so pick the first
+ # available.
+ my $tmpcond = $one_var->conditions->one_cond;
+ my $where = $one_var->rdef ($tmpcond)->location->clone;
+
+ # Append actual contents of where_PRIMARY variable to
+ # @result, skipping @substitutions@.
+ foreach my $locvals ($one_var->value_as_list_recursive (location => 1))
+ {
+ my ($loc, $value) = @$locvals;
+ # Skip configure substitutions.
+ if ($value =~ /^\@.*\@$/)
+ {
+ if ($nodir_name eq 'EXTRA')
+ {
+ error ($where,
+ "'$one_name' contains configure substitution, "
+ . "but shouldn't");
+ }
+ # Check here to make sure variables defined in
+ # configure.ac do not imply that EXTRA_PRIMARY
+ # must be defined.
+ elsif (! defined $configure_vars{$one_name})
+ {
+ $require_extra = $one_name
+ if $do_require;
+ }
+ }
+ else
+ {
+ # Strip any $(EXEEXT) suffix the user might have added,
+ # or this will confuse handle_source_transform() and
+ # check_canonical_spelling().
+ # We'll add $(EXEEXT) back later anyway.
+ # Do it here rather than in handle_programs so the
+ # uniquifying at the end of this function works.
+ ${$locvals}[1] =~ s/\$\(EXEEXT\)$//
+ if $primary eq 'PROGRAMS';
+
+ push (@result, $locvals);
+ }
+ }
+ # A blatant hack: we rewrite each _PROGRAMS primary to include
+ # EXEEXT.
+ append_exeext { 1 } $one_name
+ if $primary eq 'PROGRAMS';
+ # "EXTRA" shouldn't be used when generating clean targets,
+ # all, or install targets. We used to warn if EXTRA_FOO was
+ # defined uselessly, but this was annoying.
+ next
+ if $nodir_name eq 'EXTRA';
+
+ if ($nodir_name eq 'check')
+ {
+ push (@check, '$(' . $one_name . ')');
+ }
+ else
+ {
+ push (@used, '$(' . $one_name . ')');
+ }
+
+ # Is this to be installed?
+ my $install_p = $nodir_name ne 'noinst' && $nodir_name ne 'check';
+
+ # If so, with install-exec? (or install-data?).
+ my $exec_p = ($nodir_name =~ /$EXEC_DIR_PATTERN/o);
+
+ my $check_options_p = $install_p && !! option 'std-options';
+
+ # Use the location of the currently processed variable as context.
+ $where->push_context ("while processing '$one_name'");
+
+ # The variable containing all files to distribute.
+ my $distvar = "\$($one_name)";
+ $distvar = shadow_unconditionally ($one_name, $where)
+ if ($dist_p && $one_var->has_conditional_contents);
+
+ # Singular form of $PRIMARY.
+ (my $one_primary = $primary) =~ s/S$//;
+ $output_rules .= file_contents ($file, $where,
+ PRIMARY => $primary,
+ ONE_PRIMARY => $one_primary,
+ DIR => $X,
+ NDIR => $nodir_name,
+ BASE => $strip_subdir,
+ EXEC => $exec_p,
+ INSTALL => $install_p,
+ DIST => $dist_p,
+ DISTVAR => $distvar,
+ 'CK-OPTS' => $check_options_p);
+ }
+
+ # The JAVA variable is used as the name of the Java interpreter.
+ # The PYTHON variable is used as the name of the Python interpreter.
+ if (@used && $primary ne 'JAVA' && $primary ne 'PYTHON')
+ {
+ # Define it.
+ define_pretty_variable ($primary, TRUE, INTERNAL, @used);
+ $output_vars .= "\n";
+ }
+
+ err_var ($require_extra,
+ "'$require_extra' contains configure substitution,\n"
+ . "but 'EXTRA_$primary' not defined")
+ if ($require_extra && ! var ('EXTRA_' . $primary));
+
+ # Push here because PRIMARY might be configure time determined.
+ push (@all, '$(' . $primary . ')')
+ if @used && $primary ne 'JAVA' && $primary ne 'PYTHON';
+
+ # Make the result unique. This lets the user use conditionals in
+ # a natural way, but still lets us program lazily -- we don't have
+ # to worry about handling a particular object more than once.
+ # We will keep only one location per object.
+ my %result = ();
+ for my $pair (@result)
+ {
+ my ($loc, $val) = @$pair;
+ $result{$val} = $loc;
+ }
+ my @l = sort keys %result;
+ return map { [$result{$_}->clone, $_] } @l;
+}
+
+
+################################################################
+
+# Each key in this hash is the name of a directory holding a
+# Makefile.in. These variables are local to 'is_make_dir'.
+my %make_dirs = ();
+my $make_dirs_set = 0;
+
+# is_make_dir ($DIRECTORY)
+# ------------------------
+sub is_make_dir
+{
+ my ($dir) = @_;
+ if (! $make_dirs_set)
+ {
+ foreach my $iter (@configure_input_files)
+ {
+ $make_dirs{dirname ($iter)} = 1;
+ }
+ # We also want to notice Makefile.in's.
+ foreach my $iter (@other_input_files)
+ {
+ if ($iter =~ /Makefile\.in$/)
+ {
+ $make_dirs{dirname ($iter)} = 1;
+ }
+ }
+ $make_dirs_set = 1;
+ }
+ return defined $make_dirs{$dir};
+}
+
+################################################################
+
+# Find the aux dir. This should match the algorithm used by
+# ./configure. (See the Autoconf documentation for for
+# AC_CONFIG_AUX_DIR.)
+sub locate_aux_dir ()
+{
+ if (! $config_aux_dir_set_in_configure_ac)
+ {
+ # The default auxiliary directory is the first
+ # of ., .., or ../.. that contains install-sh.
+ # Assume . if install-sh doesn't exist yet.
+ for my $dir (qw (. .. ../..))
+ {
+ if (-f "$dir/install-sh")
+ {
+ $config_aux_dir = $dir;
+ last;
+ }
+ }
+ $config_aux_dir = '.' unless $config_aux_dir;
+ }
+ # Avoid unsightly '/.'s.
+ $am_config_aux_dir =
+ '$(top_srcdir)' . ($config_aux_dir eq '.' ? "" : "/$config_aux_dir");
+ $am_config_aux_dir =~ s,/*$,,;
+}
+
+
+# push_required_file ($DIR, $FILE, $FULLFILE)
+# -------------------------------------------
+# Push the given file onto DIST_COMMON.
+sub push_required_file
+{
+ my ($dir, $file, $fullfile) = @_;
+
+ # If the file to be distributed is in the same directory of the
+ # currently processed Makefile.am, then we want to distribute it
+ # from this same Makefile.am.
+ if ($dir eq $relative_dir)
+ {
+ push_dist_common ($file);
+ }
+ # This is needed to allow a construct in a non-top-level Makefile.am
+ # to require a file in the build-aux directory (see at least the test
+ # script 'test-driver-is-distributed.sh'). This is related to the
+ # automake bug#9546. Note that the use of $config_aux_dir instead
+ # of $am_config_aux_dir here is deliberate and necessary.
+ elsif ($dir eq $config_aux_dir)
+ {
+ push_dist_common ("$am_config_aux_dir/$file");
+ }
+ # FIXME: another spacial case, for AC_LIBOBJ/AC_LIBSOURCE support.
+ # We probably need some refactoring of this function and its callers,
+ # to have a more explicit and systematic handling of all the special
+ # cases; but, since there are only two of them, this is low-priority
+ # ATM.
+ elsif ($config_libobj_dir && $dir eq $config_libobj_dir)
+ {
+ # Avoid unsightly '/.'s.
+ my $am_config_libobj_dir =
+ '$(top_srcdir)' .
+ ($config_libobj_dir eq '.' ? "" : "/$config_libobj_dir");
+ $am_config_libobj_dir =~ s|/*$||;
+ push_dist_common ("$am_config_libobj_dir/$file");
+ }
+ elsif ($relative_dir eq '.' && ! is_make_dir ($dir))
+ {
+ # If we are doing the topmost directory, and the file is in a
+ # subdir which does not have a Makefile, then we distribute it
+ # here.
+
+ # If a required file is above the source tree, it is important
+ # to prefix it with '$(srcdir)' so that no VPATH search is
+ # performed. Otherwise problems occur with Make implementations
+ # that rewrite and simplify rules whose dependencies are found in a
+ # VPATH location. Here is an example with OSF1/Tru64 Make.
+ #
+ # % cat Makefile
+ # VPATH = sub
+ # distdir: ../a
+ # echo ../a
+ # % ls
+ # Makefile a
+ # % make
+ # echo a
+ # a
+ #
+ # Dependency '../a' was found in 'sub/../a', but this make
+ # implementation simplified it as 'a'. (Note that the sub/
+ # directory does not even exist.)
+ #
+ # This kind of VPATH rewriting seems hard to cancel. The
+ # distdir.am hack against VPATH rewriting works only when no
+ # simplification is done, i.e., for dependencies which are in
+ # subdirectories, not in enclosing directories. Hence, in
+ # the latter case we use a full path to make sure no VPATH
+ # search occurs.
+ $fullfile = '$(srcdir)/' . $fullfile
+ if $dir =~ m,^\.\.(?:$|/),;
+
+ push_dist_common ($fullfile);
+ }
+ else
+ {
+ prog_error "a Makefile in relative directory $relative_dir " .
+ "can't add files in directory $dir to DIST_COMMON";
+ }
+}
+
+
+# If a file name appears as a key in this hash, then it has already
+# been checked for. This allows us not to report the same error more
+# than once.
+my %required_file_not_found = ();
+
+# required_file_check_or_copy ($WHERE, $DIRECTORY, $FILE)
+# -------------------------------------------------------
+# Verify that the file must exist in $DIRECTORY, or install it.
+sub required_file_check_or_copy
+{
+ my ($where, $dir, $file) = @_;
+
+ my $fullfile = "$dir/$file";
+ my $found_it = 0;
+ my $dangling_sym = 0;
+
+ if (-l $fullfile && ! -f $fullfile)
+ {
+ $dangling_sym = 1;
+ }
+ elsif (dir_has_case_matching_file ($dir, $file))
+ {
+ $found_it = 1;
+ }
+
+ # '--force-missing' only has an effect if '--add-missing' is
+ # specified.
+ return
+ if $found_it && (! $add_missing || ! $force_missing);
+
+ # If we've already looked for it, we're done. You might wonder why we
+ # don't do this before searching for the file. If we do that, then
+ # something like AC_OUTPUT([subdir/foo foo]) will fail to put 'foo.in'
+ # into $(DIST_COMMON).
+ if (! $found_it)
+ {
+ return if defined $required_file_not_found{$fullfile};
+ $required_file_not_found{$fullfile} = 1;
+ }
+ if ($dangling_sym && $add_missing)
+ {
+ unlink ($fullfile);
+ }
+
+ my $trailer = '';
+ my $trailer2 = '';
+ my $suppress = 0;
+
+ # Only install missing files according to our desired
+ # strictness level.
+ my $message = "required file '$fullfile' not found";
+ if ($add_missing)
+ {
+ if (-f "$libdir/$file")
+ {
+ $suppress = 1;
+
+ # Install the missing file. Symlink if we
+ # can, copy if we must. Note: delete the file
+ # first, in case it is a dangling symlink.
+ $message = "installing '$fullfile'";
+
+ # The license file should not be volatile.
+ if ($file eq "COPYING")
+ {
+ $message .= " using GNU General Public License v3 file";
+ $trailer2 = "\n Consider adding the COPYING file"
+ . " to the version control system"
+ . "\n for your code, to avoid questions"
+ . " about which license your project uses";
+ }
+
+ # Windows Perl will hang if we try to delete a
+ # file that doesn't exist.
+ unlink ($fullfile) if -f $fullfile;
+ if ($symlink_exists && ! $copy_missing)
+ {
+ if (! symlink ("$libdir/$file", $fullfile)
+ || ! -e $fullfile)
+ {
+ $suppress = 0;
+ $trailer = "; error while making link: $!";
+ }
+ }
+ elsif (system ('cp', "$libdir/$file", $fullfile))
+ {
+ $suppress = 0;
+ $trailer = "\n error while copying";
+ }
+ set_dir_cache_file ($dir, $file);
+ }
+ }
+ else
+ {
+ $trailer = "\n 'automake --add-missing' can install '$file'"
+ if -f "$libdir/$file";
+ }
+
+ # If --force-missing was specified, and we have
+ # actually found the file, then do nothing.
+ return
+ if $found_it && $force_missing;
+
+ # If we couldn't install the file, but it is a target in
+ # the Makefile, don't print anything. This allows files
+ # like README, AUTHORS, or THANKS to be generated.
+ return
+ if !$suppress && rule $file;
+
+ msg ($suppress ? 'note' : 'error', $where, "$message$trailer$trailer2");
+}
+
+
+# require_file_internal ($WHERE, $MYSTRICT, $DIRECTORY, $QUEUE, @FILES)
+# ---------------------------------------------------------------------
+# Verify that the file must exist in $DIRECTORY, or install it.
+# $MYSTRICT is the strictness level at which this file becomes required.
+# Worker threads may queue up the action to be serialized by the master,
+# if $QUEUE is true
+sub require_file_internal
+{
+ my ($where, $mystrict, $dir, $queue, @files) = @_;
+
+ return
+ unless $strictness >= $mystrict;
+
+ foreach my $file (@files)
+ {
+ push_required_file ($dir, $file, "$dir/$file");
+ if ($queue)
+ {
+ queue_required_file_check_or_copy ($required_conf_file_queue,
+ QUEUE_CONF_FILE, $relative_dir,
+ $where, $mystrict, @files);
+ }
+ else
+ {
+ required_file_check_or_copy ($where, $dir, $file);
+ }
+ }
+}
+
+# require_file ($WHERE, $MYSTRICT, @FILES)
+# ----------------------------------------
+sub require_file
+{
+ my ($where, $mystrict, @files) = @_;
+ require_file_internal ($where, $mystrict, $relative_dir, 0, @files);
+}
+
+# require_file_with_macro ($COND, $MACRO, $MYSTRICT, @FILES)
+# ----------------------------------------------------------
+sub require_file_with_macro
+{
+ my ($cond, $macro, $mystrict, @files) = @_;
+ $macro = rvar ($macro) unless ref $macro;
+ require_file ($macro->rdef ($cond)->location, $mystrict, @files);
+}
+
+# require_libsource_with_macro ($COND, $MACRO, $MYSTRICT, @FILES)
+# ---------------------------------------------------------------
+# Require an AC_LIBSOURCEd file. If AC_CONFIG_LIBOBJ_DIR was called, it
+# must be in that directory. Otherwise expect it in the current directory.
+sub require_libsource_with_macro
+{
+ my ($cond, $macro, $mystrict, @files) = @_;
+ $macro = rvar ($macro) unless ref $macro;
+ if ($config_libobj_dir)
+ {
+ require_file_internal ($macro->rdef ($cond)->location, $mystrict,
+ $config_libobj_dir, 0, @files);
+ }
+ else
+ {
+ require_file ($macro->rdef ($cond)->location, $mystrict, @files);
+ }
+}
+
+# queue_required_file_check_or_copy ($QUEUE, $KEY, $DIR, $WHERE,
+# $MYSTRICT, @FILES)
+# --------------------------------------------------------------
+sub queue_required_file_check_or_copy
+{
+ my ($queue, $key, $dir, $where, $mystrict, @files) = @_;
+ my @serial_loc;
+ if (ref $where)
+ {
+ @serial_loc = (QUEUE_LOCATION, $where->serialize ());
+ }
+ else
+ {
+ @serial_loc = (QUEUE_STRING, $where);
+ }
+ $queue->enqueue ($key, $dir, @serial_loc, $mystrict, 0 + @files, @files);
+}
+
+# require_queued_file_check_or_copy ($QUEUE)
+# ------------------------------------------
+sub require_queued_file_check_or_copy
+{
+ my ($queue) = @_;
+ my $where;
+ my $dir = $queue->dequeue ();
+ my $loc_key = $queue->dequeue ();
+ if ($loc_key eq QUEUE_LOCATION)
+ {
+ $where = Automake::Location::deserialize ($queue);
+ }
+ elsif ($loc_key eq QUEUE_STRING)
+ {
+ $where = $queue->dequeue ();
+ }
+ else
+ {
+ prog_error "unexpected key $loc_key";
+ }
+ my $mystrict = $queue->dequeue ();
+ my $nfiles = $queue->dequeue ();
+ my @files;
+ push @files, $queue->dequeue ()
+ foreach (1 .. $nfiles);
+ return
+ unless $strictness >= $mystrict;
+ foreach my $file (@files)
+ {
+ required_file_check_or_copy ($where, $config_aux_dir, $file);
+ }
+}
+
+# require_conf_file ($WHERE, $MYSTRICT, @FILES)
+# ---------------------------------------------
+# Looks in configuration path, as specified by AC_CONFIG_AUX_DIR.
+sub require_conf_file
+{
+ my ($where, $mystrict, @files) = @_;
+ my $queue = defined $required_conf_file_queue ? 1 : 0;
+ require_file_internal ($where, $mystrict, $config_aux_dir,
+ $queue, @files);
+}
+
+
+# require_conf_file_with_macro ($COND, $MACRO, $MYSTRICT, @FILES)
+# ---------------------------------------------------------------
+sub require_conf_file_with_macro
+{
+ my ($cond, $macro, $mystrict, @files) = @_;
+ require_conf_file (rvar ($macro)->rdef ($cond)->location,
+ $mystrict, @files);
+}
+
+################################################################
+
+# require_build_directory ($DIRECTORY)
+# ------------------------------------
+# Emit rules to create $DIRECTORY if needed, and return
+# the file that any target requiring this directory should be made
+# dependent upon.
+# We don't want to emit the rule twice, and want to reuse it
+# for directories with equivalent names (e.g., 'foo/bar' and './foo//bar').
+sub require_build_directory
+{
+ my $directory = shift;
+
+ return $directory_map{$directory} if exists $directory_map{$directory};
+
+ my $cdir = File::Spec->canonpath ($directory);
+
+ if (exists $directory_map{$cdir})
+ {
+ my $stamp = $directory_map{$cdir};
+ $directory_map{$directory} = $stamp;
+ return $stamp;
+ }
+
+ my $dirstamp = "$cdir/\$(am__dirstamp)";
+
+ $directory_map{$directory} = $dirstamp;
+ $directory_map{$cdir} = $dirstamp;
+
+ # Set a variable for the dirstamp basename.
+ define_pretty_variable ('am__dirstamp', TRUE, INTERNAL,
+ '$(am__leading_dot)dirstamp');
+
+ # Directory must be removed by 'make distclean'.
+ $clean_files{$dirstamp} = DIST_CLEAN;
+
+ $output_rules .= ("$dirstamp:\n"
+ . "\t\@\$(MKDIR_P) $directory\n"
+ . "\t\@: > $dirstamp\n");
+
+ return $dirstamp;
+}
+
+# require_build_directory_maybe ($FILE)
+# -------------------------------------
+# If $FILE lies in a subdirectory, emit a rule to create this
+# directory and return the file that $FILE should be made
+# dependent upon. Otherwise, just return the empty string.
+sub require_build_directory_maybe
+{
+ my $file = shift;
+ my $directory = dirname ($file);
+
+ if ($directory ne '.')
+ {
+ return require_build_directory ($directory);
+ }
+ else
+ {
+ return '';
+ }
+}
+
+################################################################
+
+# Push a list of files onto '@dist_common'.
+sub push_dist_common
+{
+ prog_error "push_dist_common run after handle_dist"
+ if $handle_dist_run;
+ push @dist_common, @_;
+}
+
+
+################################################################
+
+# generate_makefile ($MAKEFILE_AM, $MAKEFILE_IN)
+# ----------------------------------------------
+# Generate a Makefile.in given the name of the corresponding Makefile and
+# the name of the file output by config.status.
+sub generate_makefile
+{
+ my ($makefile_am, $makefile_in) = @_;
+
+ # Reset all the Makefile.am related variables.
+ initialize_per_input;
+
+ # AUTOMAKE_OPTIONS can contains -W flags to disable or enable
+ # warnings for this file. So hold any warning issued before
+ # we have processed AUTOMAKE_OPTIONS.
+ buffer_messages ('warning');
+
+ # $OUTPUT is encoded. If it contains a ":" then the first element
+ # is the real output file, and all remaining elements are input
+ # files. We don't scan or otherwise deal with these input files,
+ # other than to mark them as dependencies. See the subroutine
+ # 'scan_autoconf_files' for details.
+ my ($makefile, @inputs) = split (/:/, $output_files{$makefile_in});
+
+ $relative_dir = dirname ($makefile);
+
+ read_main_am_file ($makefile_am, $makefile_in);
+ if (not handle_options)
+ {
+ # Process buffered warnings.
+ flush_messages;
+ # Fatal error. Just return, so we can continue with next file.
+ return;
+ }
+ # Process buffered warnings.
+ flush_messages;
+
+ # There are a few install-related variables that you should not define.
+ foreach my $var ('PRE_INSTALL', 'POST_INSTALL', 'NORMAL_INSTALL')
+ {
+ my $v = var $var;
+ if ($v)
+ {
+ my $def = $v->def (TRUE);
+ prog_error "$var not defined in condition TRUE"
+ unless $def;
+ reject_var $var, "'$var' should not be defined"
+ if $def->owner != VAR_AUTOMAKE;
+ }
+ }
+
+ # Catch some obsolete variables.
+ msg_var ('obsolete', 'INCLUDES',
+ "'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')")
+ if var ('INCLUDES');
+
+ # Must do this after reading .am file.
+ define_variable ('subdir', $relative_dir, INTERNAL);
+
+ # If DIST_SUBDIRS is defined, make sure SUBDIRS is, so that
+ # recursive rules are enabled.
+ define_pretty_variable ('SUBDIRS', TRUE, INTERNAL, '')
+ if var 'DIST_SUBDIRS' && ! var 'SUBDIRS';
+
+ # Check first, because we might modify some state.
+ check_gnu_standards;
+ check_gnits_standards;
+
+ handle_configure ($makefile_am, $makefile_in, $makefile, @inputs);
+ handle_gettext;
+
+ handle_targets;
+ handle_libraries;
+ handle_ltlibraries;
+ handle_programs;
+ handle_scripts;
+
+ handle_silent;
+
+ # These must be run after all the sources are scanned. They use
+ # variables defined by handle_libraries(), handle_ltlibraries(),
+ # or handle_programs().
+ handle_compile;
+ handle_languages;
+ handle_libtool;
+
+ # Variables used by distdir.am and tags.am.
+ define_pretty_variable ('SOURCES', TRUE, INTERNAL, @sources);
+ if (! option 'no-dist')
+ {
+ define_pretty_variable ('DIST_SOURCES', TRUE, INTERNAL, @dist_sources);
+ }
+
+ handle_texinfo;
+ handle_emacs_lisp;
+ handle_python;
+ handle_java;
+ handle_man_pages;
+ handle_data;
+ handle_headers;
+ handle_subdirs;
+ handle_user_recursion;
+ handle_tags;
+ handle_minor_options;
+ # Must come after handle_programs so that %known_programs is up-to-date.
+ handle_tests;
+
+ # This must come after most other rules.
+ handle_dist;
+
+ handle_footer;
+ do_check_merge_target;
+ handle_all ($makefile);
+
+ # FIXME: Gross!
+ if (var ('lib_LTLIBRARIES') && var ('bin_PROGRAMS'))
+ {
+ $output_rules .= "install-binPROGRAMS: install-libLTLIBRARIES\n\n";
+ }
+ if (var ('nobase_lib_LTLIBRARIES') && var ('bin_PROGRAMS'))
+ {
+ $output_rules .= "install-binPROGRAMS: install-nobase_libLTLIBRARIES\n\n";
+ }
+
+ handle_install;
+ handle_clean ($makefile);
+ handle_factored_dependencies;
+
+ # Comes last, because all the above procedures may have
+ # defined or overridden variables.
+ $output_vars .= output_variables;
+
+ check_typos;
+
+ if ($exit_code != 0)
+ {
+ verb "not writing $makefile_in because of earlier errors";
+ return;
+ }
+
+ my $am_relative_dir = dirname ($makefile_am);
+ mkdir ($am_relative_dir, 0755) if ! -d $am_relative_dir;
+
+ # We make sure that 'all:' is the first target.
+ my $output =
+ "$output_vars$output_all$output_header$output_rules$output_trailer";
+
+ # Decide whether we must update the output file or not.
+ # We have to update in the following situations.
+ # * $force_generation is set.
+ # * any of the output dependencies is younger than the output
+ # * the contents of the output is different (this can happen
+ # if the project has been populated with a file listed in
+ # @common_files since the last run).
+ # Output's dependencies are split in two sets:
+ # * dependencies which are also configure dependencies
+ # These do not change between each Makefile.am
+ # * other dependencies, specific to the Makefile.am being processed
+ # (such as the Makefile.am itself, or any Makefile fragment
+ # it includes).
+ my $timestamp = mtime $makefile_in;
+ if (! $force_generation
+ && $configure_deps_greatest_timestamp < $timestamp
+ && $output_deps_greatest_timestamp < $timestamp
+ && $output eq contents ($makefile_in))
+ {
+ verb "$makefile_in unchanged";
+ # No need to update.
+ return;
+ }
+
+ if (-e $makefile_in)
+ {
+ unlink ($makefile_in)
+ or fatal "cannot remove $makefile_in: $!";
+ }
+
+ my $gm_file = new Automake::XFile "> $makefile_in";
+ verb "creating $makefile_in";
+ print $gm_file $output;
+}
+
+
+################################################################
+
+
+# Helper function for usage().
+sub print_autodist_files
+{
+ my @lcomm = uniq (sort @_);
+
+ my @four;
+ format USAGE_FORMAT =
+ @<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<
+ $four[0], $four[1], $four[2], $four[3]
+.
+ local $~ = "USAGE_FORMAT";
+
+ my $cols = 4;
+ my $rows = int(@lcomm / $cols);
+ my $rest = @lcomm % $cols;
+
+ if ($rest)
+ {
+ $rows++;
+ }
+ else
+ {
+ $rest = $cols;
+ }
+
+ for (my $y = 0; $y < $rows; $y++)
+ {
+ @four = ("", "", "", "");
+ for (my $x = 0; $x < $cols; $x++)
+ {
+ last if $y + 1 == $rows && $x == $rest;
+
+ my $idx = (($x > $rest)
+ ? ($rows * $rest + ($rows - 1) * ($x - $rest))
+ : ($rows * $x));
+
+ $idx += $y;
+ $four[$x] = $lcomm[$idx];
+ }
+ write;
+ }
+}
+
+
+sub usage ()
+{
+ print "Usage: $0 [OPTION]... [Makefile]...
+
+Generate Makefile.in for configure from Makefile.am.
+
+Operation modes:
+ --help print this help, then exit
+ --version print version number, then exit
+ -v, --verbose verbosely list files processed
+ --no-force only update Makefile.in's that are out of date
+ -W, --warnings=CATEGORY report the warnings falling in CATEGORY
+
+Dependency tracking:
+ -i, --ignore-deps disable dependency tracking code
+ --include-deps enable dependency tracking code
+
+Flavors:
+ --foreign set strictness to foreign
+ --gnits set strictness to gnits
+ --gnu set strictness to gnu
+
+Library files:
+ -a, --add-missing add missing standard files to package
+ --libdir=DIR set directory storing library files
+ --print-libdir print directory storing library files
+ -c, --copy with -a, copy missing files (default is symlink)
+ -f, --force-missing force update of standard files
+
+";
+ Automake::ChannelDefs::usage;
+
+ print "\nFiles automatically distributed if found " .
+ "(always):\n";
+ print_autodist_files @common_files;
+ print "\nFiles automatically distributed if found " .
+ "(under certain conditions):\n";
+ print_autodist_files @common_sometimes;
+
+ print '
+Report bugs to <@PACKAGE_BUGREPORT@>.
+GNU Automake home page: <@PACKAGE_URL@>.
+General help using GNU software: <https://www.gnu.org/gethelp/>.
+';
+
+ # --help always returns 0 per GNU standards.
+ exit 0;
+}
+
+
+sub version ()
+{
+ print <<EOF;
+automake (GNU $PACKAGE) $VERSION
+Copyright (C) $RELEASE_YEAR Free Software Foundation, Inc.
+License GPLv2+: GNU GPL version 2 or later <https://gnu.org/licenses/gpl-2.0.html>
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+
+Written by Tom Tromey <tromey\@redhat.com>
+ and Alexandre Duret-Lutz <adl\@gnu.org>.
+EOF
+ # --version always returns 0 per GNU standards.
+ exit 0;
+}
+
+################################################################
+
+# Parse command line.
+sub parse_arguments ()
+{
+ my $strict = 'gnu';
+ my $ignore_deps = 0;
+ my @warnings = ();
+
+ my %cli_options =
+ (
+ 'version' => \&version,
+ 'help' => \&usage,
+ 'libdir=s' => \$libdir,
+ 'print-libdir' => sub { print "$libdir\n"; exit 0; },
+ 'gnu' => sub { $strict = 'gnu'; },
+ 'gnits' => sub { $strict = 'gnits'; },
+ 'foreign' => sub { $strict = 'foreign'; },
+ 'include-deps' => sub { $ignore_deps = 0; },
+ 'i|ignore-deps' => sub { $ignore_deps = 1; },
+ 'no-force' => sub { $force_generation = 0; },
+ 'f|force-missing' => \$force_missing,
+ 'a|add-missing' => \$add_missing,
+ 'c|copy' => \$copy_missing,
+ 'v|verbose' => sub { setup_channel 'verb', silent => 0; },
+ 'W|warnings=s' => \@warnings,
+ );
+
+ use Automake::Getopt ();
+ Automake::Getopt::parse_options %cli_options;
+
+ set_strictness ($strict);
+ my $cli_where = new Automake::Location;
+ set_global_option ('no-dependencies', $cli_where) if $ignore_deps;
+ for my $warning (@warnings)
+ {
+ parse_warnings ('-W', $warning);
+ }
+
+ return unless @ARGV;
+
+ my $errspec = 0;
+ foreach my $arg (@ARGV)
+ {
+ fatal ("empty argument\nTry '$0 --help' for more information")
+ if ($arg eq '');
+
+ # Handle $local:$input syntax.
+ my ($local, @rest) = split (/:/, $arg);
+ @rest = ("$local.in",) unless @rest;
+ my $input = locate_am @rest;
+ if ($input)
+ {
+ push @input_files, $input;
+ $output_files{$input} = join (':', ($local, @rest));
+ }
+ else
+ {
+ error "no Automake input file found for '$arg'";
+ $errspec = 1;
+ }
+ }
+ fatal "no input file found among supplied arguments"
+ if $errspec && ! @input_files;
+}
+
+
+# handle_makefile ($MAKEFILE)
+# ---------------------------
+sub handle_makefile
+{
+ my ($file) = @_;
+ ($am_file = $file) =~ s/\.in$//;
+ if (! -f ($am_file . '.am'))
+ {
+ error "'$am_file.am' does not exist";
+ }
+ else
+ {
+ # Any warning setting now local to this Makefile.am.
+ dup_channel_setup;
+
+ generate_makefile ($am_file . '.am', $file);
+
+ # Back out any warning setting.
+ drop_channel_setup;
+ }
+}
+
+# Deal with all makefiles, without threads.
+sub handle_makefiles_serial ()
+{
+ foreach my $file (@input_files)
+ {
+ handle_makefile ($file);
+ }
+}
+
+# Logic for deciding how many worker threads to use.
+sub get_number_of_threads ()
+{
+ my $nthreads = $ENV{'AUTOMAKE_JOBS'} || 0;
+
+ $nthreads = 0
+ unless $nthreads =~ /^[0-9]+$/;
+
+ # It doesn't make sense to use more threads than makefiles,
+ my $max_threads = @input_files;
+
+ if ($nthreads > $max_threads)
+ {
+ $nthreads = $max_threads;
+ }
+ return $nthreads;
+}
+
+# handle_makefiles_threaded ($NTHREADS)
+# -------------------------------------
+# Deal with all makefiles, using threads. The general strategy is to
+# spawn NTHREADS worker threads, dispatch makefiles to them, and let the
+# worker threads push back everything that needs serialization:
+# * warning and (normal) error messages, for stable stderr output
+# order and content (avoiding duplicates, for example),
+# * races when installing aux files (and respective messages),
+# * races when collecting aux files for distribution.
+#
+# The latter requires that the makefile that deals with the aux dir
+# files be handled last, done by the master thread.
+sub handle_makefiles_threaded
+{
+ my ($nthreads) = @_;
+
+ # The file queue distributes all makefiles, the message queues
+ # collect all serializations needed for respective files.
+ my $file_queue = Thread::Queue->new;
+ my %msg_queues;
+ foreach my $file (@input_files)
+ {
+ $msg_queues{$file} = Thread::Queue->new;
+ }
+
+ verb "spawning $nthreads worker threads";
+ my @threads = (1 .. $nthreads);
+ foreach my $t (@threads)
+ {
+ $t = threads->new (sub
+ {
+ while (my $file = $file_queue->dequeue)
+ {
+ verb "handling $file";
+ my $queue = $msg_queues{$file};
+ setup_channel_queue ($queue, QUEUE_MESSAGE);
+ $required_conf_file_queue = $queue;
+ handle_makefile ($file);
+ $queue->enqueue (undef);
+ setup_channel_queue (undef, undef);
+ $required_conf_file_queue = undef;
+ }
+ return $exit_code;
+ });
+ }
+
+ # Queue all makefiles.
+ verb "queuing " . @input_files . " input files";
+ $file_queue->enqueue (@input_files, (undef) x @threads);
+
+ # Collect and process serializations.
+ foreach my $file (@input_files)
+ {
+ verb "dequeuing messages for " . $file;
+ reset_local_duplicates ();
+ my $queue = $msg_queues{$file};
+ while (my $key = $queue->dequeue)
+ {
+ if ($key eq QUEUE_MESSAGE)
+ {
+ pop_channel_queue ($queue);
+ }
+ elsif ($key eq QUEUE_CONF_FILE)
+ {
+ require_queued_file_check_or_copy ($queue);
+ }
+ else
+ {
+ prog_error "unexpected key $key";
+ }
+ }
+ }
+
+ foreach my $t (@threads)
+ {
+ my @exit_thread = $t->join;
+ $exit_code = $exit_thread[0]
+ if ($exit_thread[0] > $exit_code);
+ }
+}
+
+################################################################
+
+# Parse the WARNINGS environment variable.
+parse_WARNINGS;
+
+# Parse command line.
+parse_arguments;
+
+$configure_ac = require_configure_ac;
+
+# Do configure.ac scan only once.
+scan_autoconf_files;
+
+if (! @input_files)
+ {
+ my $msg = '';
+ $msg = "\nDid you forget AC_CONFIG_FILES([Makefile]) in $configure_ac?"
+ if -f 'Makefile.am';
+ fatal ("no 'Makefile.am' found for any configure output$msg");
+ }
+
+my $nthreads = get_number_of_threads ();
+
+if ($perl_threads && $nthreads >= 1)
+ {
+ handle_makefiles_threaded ($nthreads);
+ }
+else
+ {
+ handle_makefiles_serial ();
+ }
+
+exit $exit_code;
+
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/bin/local.mk b/bin/local.mk
new file mode 100644
index 000000000..b5617f50a
--- /dev/null
+++ b/bin/local.mk
@@ -0,0 +1,82 @@
+## Copyright (C) 1995-2017 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 <https://www.gnu.org/licenses/>.
+
+## ----------------------------------- ##
+## The automake and aclocal scripts. ##
+## ----------------------------------- ##
+
+bin_SCRIPTS = %D%/automake %D%/aclocal
+nodist_noinst_SCRIPTS += \
+ %D%/aclocal-$(APIVERSION) \
+ %D%/automake-$(APIVERSION)
+
+CLEANFILES += \
+ $(bin_SCRIPTS) \
+ %D%/aclocal-$(APIVERSION) \
+ %D%/automake-$(APIVERSION)
+
+# Used by maintainer checks and such.
+automake_in = $(srcdir)/%D%/automake.in
+aclocal_in = $(srcdir)/%D%/aclocal.in
+automake_script = %D%/automake
+aclocal_script = %D%/aclocal
+
+AUTOMAKESOURCES = $(automake_in) $(aclocal_in)
+TAGS_FILES += $(AUTOMAKESOURCES)
+EXTRA_DIST += $(AUTOMAKESOURCES)
+
+# Make versioned links. We only run the transform on the root name;
+# then we make a versioned link with the transformed base name. This
+# seemed like the most reasonable approach.
+install-exec-hook:
+ @$(POST_INSTALL)
+ @for p in $(bin_SCRIPTS); do \
+ f=`echo $$p | sed -e 's,.*/,,' -e '$(transform)'`; \
+ fv="$$f-$(APIVERSION)"; \
+ rm -f "$(DESTDIR)$(bindir)/$$fv"; \
+ echo " $(LN) '$(DESTDIR)$(bindir)/$$f' '$(DESTDIR)$(bindir)/$$fv'"; \
+ $(LN) "$(DESTDIR)$(bindir)/$$f" "$(DESTDIR)$(bindir)/$$fv"; \
+ done
+
+uninstall-hook:
+ @for p in $(bin_SCRIPTS); do \
+ f=`echo $$p | sed -e 's,.*/,,' -e '$(transform)'`; \
+ fv="$$f-$(APIVERSION)"; \
+ rm -f "$(DESTDIR)$(bindir)/$$fv"; \
+ done
+
+# These files depend on Makefile so they are rebuilt if $(VERSION),
+# $(datadir) or other do_subst'ituted variables change.
+%D%/automake: %D%/automake.in
+%D%/aclocal: %D%/aclocal.in
+%D%/automake %D%/aclocal: Makefile
+ $(AM_V_GEN)rm -f $@ $@-t $@-t2 \
+ && $(MKDIR_P) $(@D) \
+## Common substitutions.
+ && in=$@.in && $(do_subst) <$(srcdir)/$$in >$@-t \
+## We can't use '$(generated_file_finalize)' here, because currently
+## Automake contains occurrences of unexpanded @substitutions@ in
+## comments, and that is perfectly legit.
+ && chmod a+x,a-w $@-t && mv -f $@-t $@
+
+%D%/aclocal-$(APIVERSION): %D%/aclocal
+ $(AM_V_GEN) rm -f $@; \
+ $(LN) %D%/aclocal $@
+
+%D%/automake-$(APIVERSION): %D%/automake
+ $(AM_V_GEN) rm -f $@; \
+ $(LN) %D%/automake $@
+
+# vim: ft=automake noet
diff --git a/bootstrap b/bootstrap
new file mode 100755
index 000000000..b57623798
--- /dev/null
+++ b/bootstrap
@@ -0,0 +1,121 @@
+#! /bin/sh
+
+# This script helps bootstrap automake, when checked out from git.
+#
+# Copyright (C) 2002-2017 Free Software Foundation, Inc.
+# Originally written by Pavel Roskin <proski@gnu.org> September 2002.
+#
+# 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 <https://www.gnu.org/licenses/>.
+
+# Since Automake uses itself in its build process, we can't simply run
+# 'autoreconf -i' which would require Automake to already be
+# installed.
+
+# Don't ignore failures.
+set -e
+
+# Set program basename.
+me=`echo "$0" | sed 's,^.*/,,'`
+
+# Let user choose which version of autoconf, autom4te and perl to use.
+: ${AUTOCONF=autoconf}
+export AUTOCONF # might be used by aclocal and/or automake
+: ${AUTOM4TE=autom4te}
+export AUTOM4TE # ditto
+: ${PERL=perl}
+
+# Variables to substitute.
+VERSION=`sed -ne '/AC_INIT/s/^[^[]*\[[^[]*\[\([^]]*\)\].*$/\1/p' configure.ac`
+APIVERSION=`sed -n 's/^APIVERSION=//p' configure.ac`
+PACKAGE=automake
+datadir=.
+# This should be automatically updated by the 'update-copyright'
+# rule of our Makefile.
+RELEASE_YEAR=2017
+
+# Override SHELL. This is required on DJGPP so that Perl's system()
+# uses bash, not COMMAND.COM which doesn't quote arguments properly.
+# It's not used otherwise.
+if test -n "$DJDIR"; then
+ BOOTSTRAP_SHELL=/dev/env/DJDIR/bin/bash.exe
+else
+ BOOTSTRAP_SHELL=/bin/sh
+fi
+
+# Sanity checks.
+if test -z "$VERSION"; then
+ echo "$me: cannot find VERSION" >&2
+ exit 1
+fi
+
+if test -z "$APIVERSION"; then
+ echo "$me: cannot find APIVERSION" >&2
+ exit 1
+fi
+
+# Make a dummy versioned directory for aclocal.
+rm -rf aclocal-$APIVERSION
+mkdir aclocal-$APIVERSION
+if test -d automake-$APIVERSION; then
+ find automake-$APIVERSION -exec chmod u+wx '{}' ';'
+fi
+rm -rf automake-$APIVERSION
+# Can't use "ln -s lib automake-$APIVERSION", that would create a
+# lib.exe stub under DJGPP 2.03.
+mkdir automake-$APIVERSION
+cp -rf lib/* automake-$APIVERSION
+
+dosubst ()
+{
+ rm -f $2
+ in=`echo $1 | sed 's,^.*/,,'`
+ sed -e "s%@APIVERSION@%$APIVERSION%g" \
+ -e "s%@PACKAGE@%$PACKAGE%g" \
+ -e "s%@PERL@%$PERL%g" \
+ -e "s%@SHELL@%$BOOTSTRAP_SHELL%g" \
+ -e "s%@VERSION@%$VERSION%g" \
+ -e "s%@datadir@%$datadir%g" \
+ -e "s%@RELEASE_YEAR@%$RELEASE_YEAR%g" \
+ -e "s%@configure_input@%Generated from $in; do not edit by hand.%g" \
+ $1 > $2
+ chmod a-w $2
+}
+
+# Create temporary replacement for lib/Automake/Config.pm.
+dosubst automake-$APIVERSION/Automake/Config.in \
+ automake-$APIVERSION/Automake/Config.pm
+
+# Overwrite amversion.m4.
+dosubst m4/amversion.in m4/amversion.m4
+
+# Create temporary replacement for aclocal and automake.
+dosubst bin/aclocal.in bin/aclocal.tmp
+dosubst bin/automake.in bin/automake.tmp
+
+# Create required makefile snippets.
+$PERL ./gen-testsuite-part > t/testsuite-part.tmp
+chmod a-w t/testsuite-part.tmp
+mv -f t/testsuite-part.tmp t/testsuite-part.am
+
+# Run the autotools. Bail out if any warning is triggered.
+# Use '-I' here so that our own *.m4 files in m4/ gets included,
+# not copied, in aclocal.m4.
+$PERL ./bin/aclocal.tmp -Wall -Werror -I m4 \
+ --automake-acdir=m4 --system-acdir=m4/acdir
+$AUTOCONF -Wall -Werror
+$PERL ./bin/automake.tmp -Wall -Werror
+
+# Remove temporary files and directories.
+rm -rf aclocal-$APIVERSION automake-$APIVERSION
+rm -f bin/aclocal.tmp bin/automake.tmp
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 000000000..9a5cafd47
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,604 @@
+# Process this file with autoconf to produce a configure script.
+
+# Copyright (C) 1995-2017 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 <https://www.gnu.org/licenses/>.
+
+AC_PREREQ([2.69])
+AC_INIT([GNU Automake], [1.15a], [bug-automake@gnu.org])
+
+AC_CONFIG_SRCDIR([bin/automake.in])
+AC_CONFIG_AUX_DIR([lib])
+
+AM_SILENT_RULES([yes])
+
+AC_CANONICAL_HOST
+AC_CANONICAL_BUILD
+
+# Save the AUTOCONF setting before AM_INIT_AUTOMAKE overrides it; this
+# way we can run Autoconf tests from configure (or from the test
+# suite) without being bothered by 'missing'. Likewise for autom4te,
+# autoreconf, autoheader, and autoupdate.
+AC_SUBST([am_AUTOCONF], ["${AUTOCONF-autoconf}"])
+AC_SUBST([am_AUTOM4TE], ["${AUTOM4TE-autom4te}"])
+AC_SUBST([am_AUTORECONF], ["${AUTORECONF-autoreconf}"])
+AC_SUBST([am_AUTOHEADER], ["${AUTOHEADER-autoheader}"])
+AC_SUBST([am_AUTOUPDATE], ["${AUTOUPDATE-autoupdate}"])
+
+dnl We call AC_PROG_CC in an unusual way, and only for use in our
+dnl testsuite, so also use 'no-dependencies' and 'no-define' among
+dnl the automake options to avoid bloating and potential problems.
+AM_INIT_AUTOMAKE([-Wall -Werror dist-xz filename-length-max=99
+ no-define no-dependencies])
+
+# Keep this on a line of its own, since it must be found and processed
+# by the 'update-copyright' rule in our Makefile.
+RELEASE_YEAR=2017
+AC_SUBST([RELEASE_YEAR])
+
+# The API version is the base version. We must guarantee
+# compatibility for all releases with the same API version.
+APIVERSION=1.15a
+AC_SUBST([APIVERSION])
+
+AC_SUBST([pkgvdatadir], ["\${datadir}/$PACKAGE-$APIVERSION"])
+AC_SUBST([scriptdir], ["\${pkgvdatadir}"])
+AC_SUBST([amdir], ["\${pkgvdatadir}/am"])
+AC_SUBST([automake_acdir], ["\${datadir}/aclocal-$APIVERSION"])
+AC_SUBST([system_acdir], ["\${datadir}/aclocal"])
+
+# Our build system is bootstrapped with the bleeding-edge versions of
+# aclocal and automake, hence the remake rules must use those versions
+# as well. The extra quoting is to cater to cases when the build
+# directory contains whitespace or shell metacharacters.
+ACLOCAL="\"`pwd`/pre-inst-env\" aclocal-$APIVERSION"
+AUTOMAKE="\"`pwd`/pre-inst-env\" automake-$APIVERSION"
+
+AC_PROG_LN_S
+
+AC_PATH_PROG([PERL], [perl])
+if test -z "$PERL"; then
+ AC_MSG_ERROR([perl not found])
+fi
+# Save details about the selected perl interpreter in config.log.
+AM_RUN_LOG([$PERL --version])
+$PERL -e 'require 5.006;' || {
+ AC_MSG_ERROR(
+[perl 5.6 or better is required; perl 5.8.2 or better
+is recommended. If you have several perl versions
+installed, select the one Automake should use using
+ ./configure PERL=/path/to/perl])
+}
+
+# The test suite will skip some tests if tex is absent.
+AC_CHECK_PROG([TEX], [tex], [tex])
+# Save details about the selected TeX program in config.log.
+# Redirect input from /dev/null, as TeX might otherwise hang waiting
+# for input from the terminal.
+AM_RUN_LOG([$TEX --version </dev/null])
+
+# The test suite will skip some tests if no lex or yacc program is
+# available.
+# We don't use AC_PROG_LEX nor AC_PROG_YACC here because:
+# 1. we don't want flex (resp. bison) to be preferred to system lex
+# (resp. system yacc);
+# 2. we don't want $LEX (resp. $YACC) to be defined to ':' (resp. 'yacc')
+# by default;
+# 3. we prefer not to have the variables YFLAGS, LEX_OUTPUT_ROOT and
+# LEXLIB to be calculated and/or AC_SUBST'd;
+# 4. we prefer that the YACC and LEX variables are not reported in the
+# configure help screen.
+AC_CHECK_PROGS([YACC], [yacc byacc 'bison -y'], [false])
+AC_CHECK_PROGS([LEX], [lex flex], [false])
+
+# Test for Autoconf. We run Autoconf in a subdirectory to ease
+# deletion of any files created (such as those added to
+# autom4te.cache). We used to perform only the last of the three
+# following tests, but some users were unable to figure out that their
+# installation was broken since --version appeared to work.
+
+AC_SUBST([required_autoconf_version], [2.65])
+AC_CACHE_CHECK([whether autoconf is installed], [am_cv_autoconf_installed],
+[if AM_RUN_LOG([$am_AUTOCONF --version]);
+then
+ am_cv_autoconf_installed=yes
+else
+ am_cv_autoconf_installed=no
+fi])
+if test "$am_cv_autoconf_installed" = no; then
+ AC_MSG_ERROR([Autoconf $required_autoconf_version or better is required.
+ Please make sure it is installed and in your PATH.])
+fi
+
+AC_CACHE_CHECK([whether autoconf works], [am_cv_autoconf_works],
+[mkdir conftest
+echo 'AC''_INIT' > conftest/conftest.ac
+if AM_RUN_LOG([cd conftest && $am_AUTOCONF -o /dev/null conftest.ac]);
+then
+ am_cv_autoconf_works=yes
+else
+ am_cv_autoconf_works=no
+fi
+rm -rf conftest])
+if test "$am_cv_autoconf_works" = no; then
+ AC_MSG_ERROR([The installed version of autoconf does not work.
+ Please check config.log for error messages before this one.])
+fi
+
+AC_CACHE_CHECK([whether autoconf is recent enough], [am_cv_autoconf_version],
+[mkdir conftest
+dnl Creative quoting required to avoid spurious expansion of AC_PREREQ macro
+echo 'AC'"_PREREQ([[$required_autoconf_version]])" > conftest/conftest.ac
+if AM_RUN_LOG([cd conftest && $am_AUTOCONF -o /dev/null conftest.ac]);
+then
+ am_cv_autoconf_version=yes
+else
+ am_cv_autoconf_version=no
+fi
+rm -rf conftest])
+if test "$am_cv_autoconf_version" = no; then
+ AC_MSG_ERROR([Autoconf $required_autoconf_version or better is required.])
+fi
+
+# Test for ln. We need use it to install the versioned binaries.
+AC_MSG_CHECKING([whether ln works])
+AC_CACHE_VAL([am_cv_prog_ln], [
+rm -f conftest conftest.file
+: >conftest.file
+if ln conftest.file conftest 2>/dev/null; then
+ am_cv_prog_ln=ln
+else
+ am_cv_prog_ln='cp -p'
+fi
+rm -f conftest conftest.file])
+AC_SUBST([LN], [$am_cv_prog_ln])
+result=no
+test "x$am_cv_prog_ln" = xln && result=yes
+AC_MSG_RESULT([$result])
+
+# The amount we should wait after modifying files depends on the platform.
+# On Windows '95, '98 and ME, files modifications have 2-seconds
+# granularity and can be up to 3 seconds in the future w.r.t. the
+# system clock. When it is important to ensure one file is older
+# than another we wait at least 5 seconds between creations.
+case $build in
+ *-pc-msdosdjgpp) MODIFICATION_DELAY=5;;
+ *) MODIFICATION_DELAY=2;;
+esac
+AC_SUBST([MODIFICATION_DELAY])
+
+## ------------------------------------------- ##
+## Test for things needed by the test suite. ##
+## ------------------------------------------- ##
+
+AC_PROG_EGREP
+AC_PROG_FGREP
+
+dnl FIXME: could we extract this in a simpler way through autoconf
+dnl FIXME: idioms or internals?
+AC_DEFUN(
+ [_AM_INIT_BOURNE_COMPATIBLE_VAR],
+ [am_bourne_compatible="AS_ESCAPE(_m4_expand([AS_BOURNE_COMPATIBLE]))"])
+
+dnl
+dnl Arguments to this macro:
+dnl
+dnl $1 - shell to test
+dnl $2 - description of the tested feature
+dnl $3 - shell code used to check the feature; to indicate success,
+dnl it can either exit with status 77, or have the last command
+dnl returning with exit status of zero
+dnl $4 - shell code to execute if the check on the shell is successful
+dnl (defaults to nothing)
+dnl $5 - shell code to execute if the check on the shell is not
+dnl successful (defaults to nothing)
+dnl
+AC_DEFUN([_AM_CHECK_SHELL_FEATURE],
+ [AC_REQUIRE([_AM_INIT_BOURNE_COMPATIBLE_VAR])
+ AC_MSG_CHECKING([whether $1 $2])
+ if { $1 -c "$am_bourne_compatible
+AS_ESCAPE([$3])
+test \$? -eq 0 || exit 1
+# Use 77 to indicate success (rather than 0), in case some shell
+# acts like Solaris 10's /bin/sh, exiting successfully on some
+# syntax errors.
+exit 77" >&AS_MESSAGE_LOG_FD 2>&1; test $? -eq 77; }
+ then
+ AC_MSG_RESULT([yes])
+ $4
+ else
+ AC_MSG_RESULT([no])
+ $5
+ fi])
+
+# AM_CHECK_CANDIDATE_TEST_SHELL(SHELL-PATH)
+# -----------------------------------------
+#
+# Check if the given shell is good enough to run our test scripts.
+# Inspired to gnulib's 'tests/init.sh'.
+#
+# We require POSIX and XSI features (e.g., '$(...)' for command
+# substitutions, '$((...))' for shell arithmetic, and support for
+# '${var#...}' and '${var%...}' parameter expansions).
+#
+# We require that the shell can correctly trap EXIT when 'set -e' is in
+# effect (OSF1/Tru64 sh failed to do so, see commit v1.10b-52-g9fe8259).
+#
+# We want to able to define shell aliases with the same name of shell
+# builtins.
+#
+# We also prefer shells that, when 'set -x' is in effect, do not also
+# redirect traces upon stderr redirections. For example,
+# $ set -x; echo x 2>file
+# would emit "+ echo x" into file with older zsh versions. Similarly,
+# $ set -x; P=1 true 2>file
+# would emit "P=1" into file with /usr/xpg4/bin/sh from Solaris 10 and
+# /bin/sh from SunOS 5.11 and OpenBSD 4.7.
+#
+# Use '$am_score' to indicate the degree of acceptability of the shell.
+# A score of "10" means that the shell is good enough for our needs;
+# a score of "9" means that the shell has some minor bugs or limitation,
+# but is still (barely) acceptable for our uses. Any other score means
+# that the shell is broken or unfit.
+#
+AC_DEFUN([_AM_CHECK_CANDIDATE_SHELL],
+ [am_score=10
+ while :; do
+
+ _AM_CHECK_SHELL_FEATURE([$1],
+ [supports \$(cmd)],
+ [test "$(echo x)" = x],
+ [], [am_score=1; break])
+
+ _AM_CHECK_SHELL_FEATURE([$1],
+ [supports \$((expr))],
+ [test $((1 + 2 * 3)) = 7],
+ [], [am_score=1; break])
+
+ _AM_CHECK_SHELL_FEATURE([$1],
+ [supports \${@%:@var}],
+ [zero='' one='x' twelve=' foobar baz!' \
+ && test ${@%:@zero} -eq 0 \
+ && test ${@%:@one} -eq 1 \
+ && test ${@%:@twelve} -eq 12],
+ [], [am_score=1; break])
+
+ _AM_CHECK_SHELL_FEATURE([$1],
+ [supports \${var@%:@glob} and \${var%glob}],
+ [v=a/b/c \
+ && test ${v@%:@*/} = b/c \
+ && test ${v@%:@@%:@*/} = c \
+ && test ${v%/*} = a/b \
+ && test ${v%%/*} = a],
+ [], [am_score=1; break])
+
+ _AM_CHECK_SHELL_FEATURE([$1],
+ [preserves exit traps with "set -e"],
+ [set -e; trap 'exit $?' 0; (exit 77); exit 77],
+ [], [am_score=1; break])
+
+ _AM_CHECK_SHELL_FEATURE([$1],
+ [can define exit traps in a shell function],
+ [fail=0 && foo() { trap 'fail=1' 0; } && foo && test $fail = 0],
+ [], [am_score=1; break])
+
+ _AM_CHECK_SHELL_FEATURE([$1],
+ [corrupts stderr with "set -x"],
+ [(set -x; P=1 true 2>&3) 3>&1 2>/dev/null | grep P=1],
+ [am_score=9], [])
+
+ echo 'return 34' > conftest-return.sh
+ echo 'ok=no' >> conftest-return.sh
+ _AM_CHECK_SHELL_FEATURE([$1],
+ [can return early from "dot-sourced" files],
+ [ok=yes; . ./conftest-return.sh; test $? -eq 34 && test $ok = yes],
+ [rm -f conftest-return.sh],
+ [rm -f conftest-return.sh; am_score=1; break])
+
+ echo 'alias false=echo' > conftest-alias.sh
+ echo 'false && test "$(false 97)" = 97' >> conftest-alias.sh
+ _AM_CHECK_SHELL_FEATURE([$1],
+ [supports alias named like shell builtins],
+ [. ./conftest-alias.sh],
+ [rm -f conftest-alias.sh],
+ [rm -f conftest-alias.sh; am_score=1; break])
+
+ _AM_CHECK_SHELL_FEATURE([$1],
+ [supports "test -e"],
+ [test -e config.log && test -e . && test ! -e nonesuch],
+ [], [am_score=1; break])
+
+ break
+ done])
+
+# These messages only goes to the config.log file.
+AC_MSG_NOTICE([will now look for a sturdy POSIX shell, for our testsuite])
+
+AC_CACHE_VAL(
+ [ac_cv_AM_TEST_RUNNER_SHELL],
+ [if test "$AM_TEST_RUNNER_SHELL"; then
+ # Let the user override it.
+ ac_cv_AM_TEST_RUNNER_SHELL=$AM_TEST_RUNNER_SHELL
+ else
+ ac_cv_AM_TEST_RUNNER_SHELL=no
+ am_candidate_shells=${CONFIG_SHELL-}
+ # For the benefit of Solaris.
+ am_PATH=$PATH$PATH_SEPARATOR/usr/xpg6/bin$PATH_SEPARATOR/usr/xpg4/bin
+ for am_sh in sh sh5 dash ash bash zsh ksh pdksh; do
+ AC_PATH_PROG([am_candidate_sh], [$am_sh], [], [$am_PATH])
+ if test -n "$am_candidate_sh"; then
+ am_candidate_shells="$am_candidate_shells $am_candidate_sh"
+ fi
+ AM_SUBST_NOTMAKE([am_candidate_sh])
+ # Must nullify these in order not to interfere with the checks in
+ # the next loop.
+ AS_UNSET([am_candidate_sh])
+ AS_UNSET([ac_cv_path_am_candidate_sh])
+ done
+ AS_UNSET([am_PATH]) # Not required anymore
+ for am_sh in $am_candidate_shells; do
+ am_score=0
+ _AM_CHECK_CANDIDATE_SHELL([$am_sh])
+ if test $am_score -eq 9; then
+ # The shell is barely acceptable for our needs. We might
+ # still find one that is even better, so continue looking.
+ AC_MSG_NOTICE([shell $am_sh is acceptable, but we might do better])
+ ac_cv_AM_TEST_RUNNER_SHELL=$am_sh
+ elif test $am_score -eq 10; then
+ AC_MSG_NOTICE([shell $am_sh is good enough, stop looking])
+ ac_cv_AM_TEST_RUNNER_SHELL=$am_sh
+ break
+ fi
+ done
+ fi
+ AM_TEST_RUNNER_SHELL=$ac_cv_AM_TEST_RUNNER_SHELL])
+
+if test $AM_TEST_RUNNER_SHELL = no; then
+ AC_MSG_FAILURE([m4_normalize([no POSIX shell found that is good
+ enough to be used in our testsuite])])
+else
+ AC_MSG_NOTICE([will use $AM_TEST_RUNNER_SHELL as the testsuite shell])
+fi
+
+AC_ARG_VAR([AM_TEST_RUNNER_SHELL],
+ [a sturdy POSIX shell for our testsuite])
+
+
+###########################################################################
+
+# Look for C, C++ and fortran compilers to be used in the testsuite.
+
+dnl We don't want to abort our configuration script if no C compiler is
+dnl available, as such a compiler is only required to run part of the
+dnl testsuite, not to build or install Automake. Ditto for C++, Fortran
+dnl and Fortran 77 compilers. Unfortunately, autoconf does not offer an
+dnl easy way to obtain this behaviour, so we'll need a few hacks.
+
+dnl We want the body of this macro to expand as a single shell statement,
+dnl thus we wrap it into { ... } brackets.
+AC_DEFUN([_AM_WRAP_MSG_ERROR], [ {
+ AC_MSG_WARN([$1])
+ am__failed=yes
+ break
+} ])
+
+AC_DEFUN([_AM_COMPILER_CAN_FAIL], [
+ m4_pushdef([AC_MSG_FAILURE], m4_defn([_AM_WRAP_MSG_ERROR]))
+ m4_pushdef([AC_MSG_ERROR], m4_defn([_AM_WRAP_MSG_ERROR]))
+ am__failed=no
+ while :; do
+ $1
+ break
+ done
+ AS_IF([test $am__failed = yes], [$2])
+ # We have to clear these cache variables, so that future checks on
+ # compilers for different languages won't be confused.
+ unset ac_cv_objext ac_cv_exeext
+ # We also need to meddle with the autoconf internals to ensure that
+ # checks to find object and executable extensions will be run anew.
+ # FIXME: In the long run, the better thing to do would be to fix
+ # FIXME: autoconf instead ...
+ m4_undefine([m4_provide(_AC_COMPILER_OBJEXT)])
+ m4_undefine([m4_provide(_AC_COMPILER_EXEEXT)])
+ m4_popdef([AC_MSG_FAILURE])
+ m4_popdef([AC_MSG_ERROR])
+])
+
+AC_DEFUN([_AM_SKIP_COMP_TESTS],
+ [AC_MSG_NOTICE([tests requiring the $1 compiler will be skipped])])
+
+# Prefer generic compilers to GNU ones when possible. This will ensure
+# more testsuite coverage "in the wild".
+# Note that we don't look for the MSVC C/C++ compiler here. This is
+# deliberate; for more discussion and rationale, see:
+# <https://lists.gnu.org/archive/html/automake-patches/2012-01/msg00130.html>
+
+AC_MSG_NOTICE([will now look for generic compilers])
+
+# C compiler.
+_AM_COMPILER_CAN_FAIL(dnl
+ [AC_PROG_CC([cc gcc])],
+ [CC=false; _AM_SKIP_COMP_TESTS([C])])
+
+AS_IF([test x"$GCC" = x"yes"], [am_CC_is_GNU=yes], [am_CC_is_GNU=no])
+
+# On case-insensitive file systems (seen e.g. on Cygwin and Mac OS X)
+# we must avoid looking for 'CC', because that would be the same as
+# 'cc', and could cause $CXX to point to the C compiler, instead of
+# to a C++ compiler as expected (see automake bugs #11893 and #10766).
+# Similarly, we must avoid looking for 'RCC', as that can point to the
+# Qt4 "Resource Compiler": <http://doc.qt.digia.com/4.2/rcc.html>
+if test -f /bIn/rMdIr || test -f /uSr/bIn/rMdIr; then
+ # Case-insensitive file system, don't look for CC.
+ am_CC= am_RCC=
+else
+ am_CC=CC am_RCC=RCC
+fi
+
+# The list of C++ compilers here has been copied, pasted and edited
+# from 'lib/autoconf/c.m4:AC_PROG_CXX' in the Autoconf distribution.
+# Keep it in sync, or better again, find out a way to avoid this code
+# duplication.
+_AM_COMPILER_CAN_FAIL([AC_PROG_CXX(dnl
+ [aCC $am_CC FCC KCC $am_RCC xlC_r xlC c++ cxx cc++ gpp g++])],
+ [CXX=false; _AM_SKIP_COMP_TESTS([C++])])
+
+AS_IF([test x"$GXX" = x"yes"], [am_CXX_is_GNU=yes], [am_CXX_is_GNU=no])
+
+# The lists of Fortran compilers here has been copied, pasted and edited
+# from file 'lib/autoconf/fortran.m4' in the Autoconf distribution.
+# Keep it in sync, or better again, find out a way to avoid this code
+# duplication.
+
+_AM_COMPILER_CAN_FAIL([AC_PROG_FC(dnl
+ [xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor] dnl
+ [xlf90 f90 pgf90 pghpf epcf90 g95 gfortran])],
+ [FC=false; _AM_SKIP_COMP_TESTS([Fortran])])
+
+AS_IF([test x"$GFC" = x"yes"], [am_FC_is_GNU=yes], [am_FC_is_GNU=no])
+
+_AM_COMPILER_CAN_FAIL([AC_PROG_F77(dnl
+ [xlf f77 frt pgf77 cf77 fort77 fl32 af77 g77 gfortran])],
+ [F77=false; _AM_SKIP_COMP_TESTS([Fortran 77])])
+
+AS_IF([test x"$G77" = x"yes"], [am_F77_is_GNU=yes], [am_F77_is_GNU=no])
+
+# Some tests will need the GNU compilers. Searching for them here would
+# be overkill, since our testsuite already handles their search and setup
+# pretty well. But in case the compilers already found are the GNU ones,
+# we want to use them in the testsuite where GNU compilers are required.
+# Also, in case the compilers detected above (at configure time) are not
+# the GNU ones, we cannot use the values of CFLAGS, CXXFLAGS, FCFLAGS and
+# FFLAGS detected for them with the GNU compilers too, since it's likely
+# they won't be compatible. So we allow the user to define variants of
+# these variables for the GNU compilers separately.
+
+AC_MSG_NOTICE([will now look for GNU compilers])
+
+# GNU C compiler.
+AC_ARG_VAR([GNU_CC], [GNU C compiler])
+AC_ARG_VAR([GNU_CFLAGS], [GNU C compiler flags])
+if test $am_CC_is_GNU = yes; then
+ AC_MSG_NOTICE([$CC is already a GNU C compiler])
+ GNU_CC=$CC GNU_CFLAGS=${GNU_CFLAGS-$CFLAGS}
+else
+ AC_CHECK_TOOLS([GNU_CC], [gcc], [false])
+fi
+if test "$GNU_CC" != false; then
+ AS_IF([AM_RUN_LOG([$GNU_CC --version && $GNU_CC -v])], [],
+ [AC_MSG_WARN([botched installation for GNU C compiler])
+ _AM_SKIP_COMP_TESTS([GNU C])])
+fi
+
+# GNU C++ compiler.
+AC_ARG_VAR([GNU_CXX], [GNU C++ compiler])
+AC_ARG_VAR([GNU_CXXFLAGS], [GNU C++ compiler flags])
+if test $am_CXX_is_GNU = yes; then
+ AC_MSG_NOTICE([$CXX is already a GNU C++ compiler])
+ GNU_CXX=$CXX
+ GNU_CXXFLAGS=${GNU_CXXFLAGS-$CXXFLAGS}
+else
+ AC_CHECK_TOOLS([GNU_CXX], [g++ gpp], [false])
+fi
+if test "$GNU_CXX" != false; then
+ AS_IF([AM_RUN_LOG([$GNU_CXX --version && $GNU_CXX -v])], [],
+ [AC_MSG_WARN([botched installation for GNU C++ compiler])
+ _AM_SKIP_COMP_TESTS([GNU C++])])
+fi
+
+# GNU Fortran compiler.
+AC_ARG_VAR([GNU_FC], [GNU Fortran compiler])
+AC_ARG_VAR([GNU_FCFLAGS], [GNU Fortran compiler flags])
+if test $am_FC_is_GNU = yes; then
+ AC_MSG_NOTICE([$FC is already a GNU Fortran compiler])
+ GNU_FC=$FC
+ GNU_FCFLAGS=${GNU_FCFLAGS-$FCFLAGS}
+else
+ AC_CHECK_TOOLS([GNU_FC], [gfortran], [false])
+fi
+if test "$GNU_FC" != false; then
+ AS_IF([AM_RUN_LOG([$GNU_FC --version && $GNU_FC -v])], [],
+ [AC_MSG_WARN([botched installation for GNU Fortran compiler])
+ _AM_SKIP_COMP_TESTS([GNU Fortran])])
+fi
+
+# GNU Fortran 77 compiler.
+AC_ARG_VAR([GNU_F77], [GNU Fortran 77 compiler])
+AC_ARG_VAR([GNU_FFLAGS], [GNU Fortran 77 compiler flags])
+if test $am_F77_is_GNU = yes; then
+ AC_MSG_NOTICE([$F77 is already a GNU Fortran 77 compiler])
+ GNU_F77=$F77
+ GNU_FFLAGS=${GNU_FFLAGS-$FFLAGS}
+else
+ AC_CHECK_TOOLS([GNU_F77], [g77 gfortran], [false])
+fi
+if test "$GNU_F77" != false; then
+ AS_IF([AM_RUN_LOG([$GNU_F77 --version && $GNU_F77 -v])], [],
+ [AC_MSG_WARN([botched installation for GNU Fortran 77 compiler])
+ _AM_SKIP_COMP_TESTS([GNU Fortran 77])])
+fi
+
+# GNU Java compiler.
+AC_ARG_VAR([GNU_GCJ], [GNU Java compiler])
+AC_ARG_VAR([GNU_GCJFLAGS], [GNU Java compiler flags])
+AC_CHECK_TOOLS([GNU_GCJ], [gcj], [false])
+if test "$GNU_GCJ" != false; then
+ AS_IF([AM_RUN_LOG([$GNU_GCJ --version && $GNU_GCJ -v])], [],
+ [AC_MSG_WARN([botched installation for GNU Java compiler])
+ _AM_SKIP_COMP_TESTS([GNU Java])])
+fi
+
+# If we have been able to find at least a working compiler above, we
+# know what the object and executable extensions for this platform are.
+OBJEXT=${ac_cv_objext-UNKNOWN}
+EXEEXT=${ac_cv_exeext-UNKNOWN}
+AC_SUBST([OBJEXT])
+AC_SUBST([EXEEXT])
+
+###########################################################################
+
+## ---------------------- ##
+## Create output files. ##
+## ---------------------- ##
+
+AC_CONFIG_FILES([Makefile])
+AC_CONFIG_LINKS([GNUmakefile:GNUmakefile])
+AC_CONFIG_FILES([pre-inst-env], [chmod +x pre-inst-env])
+AC_OUTPUT
+
+# Inform the user if this version of automake is a beta release or
+# a development snapshot.
+# According to HACKING, the version of a development snapshot should
+# end with an "odd" letter (a, c, ...), the version of a test release
+# should end wit an "even" letter (b, d, ...).
+
+am_stable_version_rx='[[1-9]\.[0-9]+(\.[0-9]+)?]'
+am_beta_version_rx="[$am_stable_version_rx[bdfhjlnprtvxz]]"
+
+am_release_type=`AS_ECHO(["$PACKAGE_VERSION"]) | LC_ALL=C awk ["
+ /^$am_stable_version_rx$/ { print \"stable\"; exit(0); }
+ /^$am_beta_version_rx$/ { print \"beta version\"; exit(0); }
+ { print \"development snapshot\"; }"]`
+
+# '$silent' is set to yes if configure is passed the '--quiet' option.
+test "$am_release_type" = stable || test "$silent" = yes || cat <<EOF
+
+WARNING: You are about to use a $am_release_type of automake.
+WARNING: It might easily suffer from new bugs or regressions.
+WARNING: You are strongly advised not to use it in production code.
+
+Please report bugs, problems and feedback to <AC_PACKAGE_BUGREPORT>.
+EOF
+
+AS_EXIT([0])
diff --git a/contrib/README b/contrib/README
new file mode 100644
index 000000000..a4d7eeb8d
--- /dev/null
+++ b/contrib/README
@@ -0,0 +1,26 @@
+This is the 'contrib' directory of the GNU Automake distribution.
+
+Here you'll find additions to the Automake base distribution, in form of
+makefile fragments, m4 macros, scripts, documentation, et cetera. Such
+addition that might be useful for a significant percentage of its general
+audience, but (for one reason or another) are not deemed appropriate for
+inclusion into the Automake core.
+
+There are several reasons for which a feature can be kept in contrib:
+
+ 1. The long-term usefulness of the feature is debatable and uncertain;
+ on-field and real-word testing are necessary to prove or disprove
+ its usefulness, before the feature can be committed into the Automake
+ core (as doing so too early would later force us to continue the
+ support for backward-compatibility, even if the features proves
+ flawed or fails to attract widespread use).
+
+ 2. The APIs or overall design of the feature are still unstable, and
+ need on-field testing to iron warts and usability bugs, or uncover
+ potential flaws.
+
+ 3. The feature was an historical one, mostly obsoleted but still used
+ "here and there" in the wild; so we want to to deprecate it and
+ remove it from the Automake core, but cannot remove it altogether,
+ for the sake of those still-existing usage. So it gets moved in
+ contrib.
diff --git a/contrib/check-html.am b/contrib/check-html.am
new file mode 100644
index 000000000..a12075e1b
--- /dev/null
+++ b/contrib/check-html.am
@@ -0,0 +1,57 @@
+## automake - create Makefile.in from Makefile.am
+## Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+## Makefile.am fragment to produce HTML output from RST-formatted
+## log files produced by the parallel-tests output.
+## This fragment was part of the automake core in the 1.11.x release
+## series, but has been then moved to contrib.
+
+TEST_SUITE_HTML = $(TEST_SUITE_LOG:.log=.html)
+
+mostlyclean-local: mostlyclean-check-html
+.PHONY: mostlyclean-check-html
+mostlyclean-check-html:
+## Expand $(TEST_LOGS) only once, to avoid exceeding line length limits.
+ list='$(TEST_LOGS:.log=.html)'; test -z "$$list" || rm -f $$list
+ rm -f $(TEST_SUITE_HTML)
+
+.log.html:
+ @list='$(RST2HTML) rst2html rst2html.py'; \
+ while :; do \
+ for r2h in $$list; do \
+ if ($$r2h --version) >/dev/null 2>&1; then break 2; \
+ else :; fi; \
+ done; \
+ echo "cannot find rst2html, cannot create $@" >&2; \
+ exit 2; \
+ done; \
+ $$r2h $(AM_RST2HTMLFLAGS) $(RST2HTMLFLAGS) $< >$@-t \
+ && mv -f $@-t $@
+
+# Be sure to run check first, and then to convert the result.
+# Beware of concurrent executions. Run "check" not "check-TESTS", as
+# check-SCRIPTS and other dependencies are rebuilt by the former only.
+# And expect check to fail.
+check-html recheck-html:
+ @target=`echo $@ | sed 's/-html$$//'`; \
+ rv=0; $(MAKE) $(AM_MAKEFLAGS) $$target || rv=$$?; \
+## The nullification of $(TEST_LOGS) is required to ensure that
+## "make recheck-html" do not try to uselessly re-run tests.
+ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_HTML) TEST_LOGS= || exit 4; \
+ exit $$rv
+
+.PHONY: check-html recheck-html
+.MAKE: check-html recheck-html
diff --git a/contrib/multilib/README b/contrib/multilib/README
new file mode 100644
index 000000000..c15d2b539
--- /dev/null
+++ b/contrib/multilib/README
@@ -0,0 +1,9 @@
+Minimal support for multilib builds.
+
+For a little more information, see:
+<http://airs.com/ian/configure/configure_8.html>
+
+The master (and probably more up-to-date) copies of the 'config-ml.in'
+and 'symlink-tree' files are maintained in the GCC development tree
+at <https://gcc.gnu.org/svn.html>. The same is probably true also for
+the 'multi.m4' file.
diff --git a/contrib/multilib/config-ml.in b/contrib/multilib/config-ml.in
new file mode 100644
index 000000000..cc7f79756
--- /dev/null
+++ b/contrib/multilib/config-ml.in
@@ -0,0 +1,876 @@
+# Configure fragment invoked in the post-target section for subdirs
+# wanting multilib support.
+#
+# Copyright (C) 1995-2017 Free Software Foundation, Inc.
+#
+# This file 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 of the License, 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., 51 Franklin Street, Fifth Floor,
+# Boston, MA 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+#
+# Please report bugs to <gcc-bugs@gnu.org>
+# and send patches to <gcc-patches@gnu.org>.
+
+# It is advisable to support a few --enable/--disable options to let the
+# user select which libraries s/he really wants.
+#
+# Subdirectories wishing to use multilib should put the following lines
+# in the "post-target" section of configure.in.
+#
+# if [ "${srcdir}" = "." ] ; then
+# if [ "${with_target_subdir}" != "." ] ; then
+# . ${with_multisrctop}../../config-ml.in
+# else
+# . ${with_multisrctop}../config-ml.in
+# fi
+# else
+# . ${srcdir}/../config-ml.in
+# fi
+#
+#
+# Things are complicated because 6 separate cases must be handled:
+# 2 (native, cross) x 3 (absolute-path, relative-not-dot, dot) = 6.
+#
+# srcdir=. is special. It must handle make programs that don't handle VPATH.
+# To implement this, a symlink tree is built for each library and for each
+# multilib subdir.
+#
+# The build tree is laid out as
+#
+# ./
+# newlib
+# m68020/
+# newlib
+# m68881/
+# newlib
+#
+# The nice feature about this arrangement is that inter-library references
+# in the build tree work without having to care where you are. Note that
+# inter-library references also work in the source tree because symlink trees
+# are built when srcdir=.
+#
+# Unfortunately, trying to access the libraries in the build tree requires
+# the user to manually choose which library to use as GCC won't be able to
+# find the right one. This is viewed as the lesser of two evils.
+#
+# Configure variables:
+# ${with_target_subdir} = "." for native, or ${target_alias} for cross.
+# Set by top level Makefile.
+# ${with_multisrctop} = how many levels of multilibs there are in the source
+# tree. It exists to handle the case of configuring in the source tree:
+# ${srcdir} is not constant.
+# ${with_multisubdir} = name of multilib subdirectory (eg: m68020/m68881).
+#
+# Makefile variables:
+# MULTISRCTOP = number of multilib levels in source tree (+1 if cross)
+# (FIXME: note that this is different than ${with_multisrctop}. Check out.).
+# MULTIBUILDTOP = number of multilib levels in build tree
+# MULTIDIRS = list of multilib subdirs (eg: m68000 m68020 ...)
+# (only defined in each library's main Makefile).
+# MULTISUBDIR = installed subdirectory name with leading '/' (eg: /m68000)
+# (only defined in each multilib subdir).
+
+# FIXME: Multilib is currently disabled by default for everything other than
+# newlib. It is up to each target to turn on multilib support for the other
+# libraries as desired.
+
+# Autoconf incoming variables:
+# srcdir, host, ac_configure_args
+#
+# We *could* figure srcdir and host out, but we'd have to do work that
+# our caller has already done to figure them out and requiring these two
+# seems reasonable.
+# Note that `host' in this case is GCC's `target'. Target libraries are
+# configured for a particular host.
+
+Makefile=${ac_file-Makefile}
+ml_config_shell=${CONFIG_SHELL-/bin/sh}
+ml_realsrcdir=${srcdir}
+
+# Scan all the arguments and set all the ones we need.
+
+ml_verbose=--verbose
+for option in ${ac_configure_args}
+do
+ # strip single quotes surrounding individual options
+ case $option in
+ \'*\') eval option=$option ;;
+ esac
+
+ case $option in
+ --*) ;;
+ -*) option=-$option ;;
+ esac
+
+ case $option in
+ --*=*)
+ optarg=`echo $option | sed -e 's/^[^=]*=//'`
+ ;;
+ esac
+
+ case $option in
+ --disable-*)
+ enableopt=`echo ${option} | sed 's:^--disable-:enable_:;s:-:_:g'`
+ eval $enableopt=no
+ ;;
+ --enable-*)
+ case "$option" in
+ *=*) ;;
+ *) optarg=yes ;;
+ esac
+ enableopt=`echo ${option} | sed 's:^--::;s:=.*$::;s:-:_:g'`
+ # enable_shared and enable_static are handled by configure.
+ # Don't undo its work.
+ case $enableopt in
+ enable_shared | enable_static) ;;
+ *) eval $enableopt="$optarg" ;;
+ esac
+ ;;
+ --norecursion | --no-recursion)
+ ml_norecursion=yes
+ ;;
+ --silent | --sil* | --quiet | --q*)
+ ml_verbose=--silent
+ ;;
+ --verbose | --v | --verb*)
+ ml_verbose=--verbose
+ ;;
+ --with-*)
+ case "$option" in
+ *=*) ;;
+ *) optarg=yes ;;
+ esac
+ withopt=`echo ${option} | sed 's:^--::;s:=.*$::;s:-:_:g'`
+ eval $withopt="$optarg"
+ ;;
+ --without-*)
+ withopt=`echo ${option} | sed 's:^--::;s:out::;s:-:_:g'`
+ eval $withopt=no
+ ;;
+ esac
+done
+
+# Only do this if --enable-multilib.
+if [ "${enable_multilib}" = yes ]; then
+
+# Compute whether this is the library's top level directory
+# (ie: not a multilib subdirectory, and not a subdirectory like newlib/src).
+# ${with_multisubdir} tells us we're in the right branch, but we could be
+# in a subdir of that.
+# ??? The previous version could void this test by separating the process into
+# two files: one that only the library's toplevel configure.in ran (to
+# configure the multilib subdirs), and another that all configure.in's ran to
+# update the Makefile. It seemed reasonable to collapse all multilib support
+# into one file, but it does leave us with having to perform this test.
+ml_toplevel_p=no
+if [ -z "${with_multisubdir}" ]; then
+ if [ "${srcdir}" = "." ]; then
+ # Use ${ml_realsrcdir} instead of ${srcdir} here to account for ${subdir}.
+ # ${with_target_subdir} = "." for native, otherwise target alias.
+ if [ "${with_target_subdir}" = "." ]; then
+ if [ -f ${ml_realsrcdir}/../config-ml.in ]; then
+ ml_toplevel_p=yes
+ fi
+ else
+ if [ -f ${ml_realsrcdir}/../../config-ml.in ]; then
+ ml_toplevel_p=yes
+ fi
+ fi
+ else
+ # Use ${ml_realsrcdir} instead of ${srcdir} here to account for ${subdir}.
+ if [ -f ${ml_realsrcdir}/../config-ml.in ]; then
+ ml_toplevel_p=yes
+ fi
+ fi
+fi
+
+# If this is the library's top level directory, set multidirs to the
+# multilib subdirs to support. This lives at the top because we need
+# `multidirs' set right away.
+
+if [ "${ml_toplevel_p}" = yes ]; then
+
+multidirs=
+for i in `${CC-gcc} --print-multi-lib 2>/dev/null`; do
+ dir=`echo $i | sed -e 's/;.*$//'`
+ if [ "${dir}" = "." ]; then
+ true
+ else
+ if [ -z "${multidirs}" ]; then
+ multidirs="${dir}"
+ else
+ multidirs="${multidirs} ${dir}"
+ fi
+ fi
+done
+
+# Target libraries are configured for the host they run on, so we check
+# $host here, not $target.
+
+case "${host}" in
+arm-*-*)
+ if [ x"$enable_fpu" = xno ]
+ then
+ old_multidirs=${multidirs}
+ multidirs=""
+ for x in ${old_multidirs}; do
+ case "${x}" in
+ *fpu*) : ;;
+ *) multidirs="${multidirs} ${x}" ;;
+ esac
+ done
+ fi
+ if [ x"$enable_26bit" = xno ]
+ then
+ old_multidirs=${multidirs}
+ multidirs=""
+ for x in ${old_multidirs}; do
+ case "${x}" in
+ *26bit*) : ;;
+ *) multidirs="${multidirs} ${x}" ;;
+ esac
+ done
+ fi
+ if [ x"$enable_underscore" = xno ]
+ then
+ old_multidirs=${multidirs}
+ multidirs=""
+ for x in ${old_multidirs}; do
+ case "${x}" in
+ *under*) : ;;
+ *) multidirs="${multidirs} ${x}" ;;
+ esac
+ done
+ fi
+ if [ x"$enable_interwork" = xno ]
+ then
+ old_multidirs=${multidirs}
+ multidirs=""
+ for x in ${old_multidirs}; do
+ case "${x}" in
+ *interwork*) : ;;
+ *) multidirs="${multidirs} ${x}" ;;
+ esac
+ done
+ fi
+ if [ x$enable_biendian = xno ]
+ then
+ old_multidirs="${multidirs}"
+ multidirs=""
+ for x in ${old_multidirs}; do
+ case "$x" in
+ *le* ) : ;;
+ *be* ) : ;;
+ *) multidirs="${multidirs} ${x}" ;;
+ esac
+ done
+ fi
+ if [ x"$enable_nofmult" = xno ]
+ then
+ old_multidirs="${multidirs}"
+ multidirs=""
+ for x in ${old_multidirs}; do
+ case "$x" in
+ *nofmult* ) : ;;
+ *) multidirs="${multidirs} ${x}" ;;
+ esac
+ done
+ fi
+ ;;
+m68*-*-*)
+ if [ x$enable_softfloat = xno ]
+ then
+ old_multidirs="${multidirs}"
+ multidirs=""
+ for x in ${old_multidirs}; do
+ case "$x" in
+ *soft-float* ) : ;;
+ *) multidirs="${multidirs} ${x}" ;;
+ esac
+ done
+ fi
+ if [ x$enable_m68881 = xno ]
+ then
+ old_multidirs="${multidirs}"
+ multidirs=""
+ for x in ${old_multidirs}; do
+ case "$x" in
+ *m68881* ) : ;;
+ *) multidirs="${multidirs} ${x}" ;;
+ esac
+ done
+ fi
+ if [ x$enable_m68000 = xno ]
+ then
+ old_multidirs="${multidirs}"
+ multidirs=""
+ for x in ${old_multidirs}; do
+ case "$x" in
+ *m68000* ) : ;;
+ *) multidirs="${multidirs} ${x}" ;;
+ esac
+ done
+ fi
+ if [ x$enable_m68020 = xno ]
+ then
+ old_multidirs="${multidirs}"
+ multidirs=""
+ for x in ${old_multidirs}; do
+ case "$x" in
+ *m68020* ) : ;;
+ *) multidirs="${multidirs} ${x}" ;;
+ esac
+ done
+ fi
+ ;;
+mips*-*-*)
+ if [ x$enable_single_float = xno ]
+ then
+ old_multidirs="${multidirs}"
+ multidirs=""
+ for x in ${old_multidirs}; do
+ case "$x" in
+ *single* ) : ;;
+ *) multidirs="${multidirs} ${x}" ;;
+ esac
+ done
+ fi
+ if [ x$enable_biendian = xno ]
+ then
+ old_multidirs="${multidirs}"
+ multidirs=""
+ for x in ${old_multidirs}; do
+ case "$x" in
+ *el* ) : ;;
+ *eb* ) : ;;
+ *) multidirs="${multidirs} ${x}" ;;
+ esac
+ done
+ fi
+ if [ x$enable_softfloat = xno ]
+ then
+ old_multidirs="${multidirs}"
+ multidirs=""
+ for x in ${old_multidirs}; do
+ case "$x" in
+ *soft-float* ) : ;;
+ *) multidirs="${multidirs} ${x}" ;;
+ esac
+ done
+ fi
+ ;;
+powerpc*-*-* | rs6000*-*-*)
+ if [ x$enable_aix64 = xno ]
+ then
+ old_multidirs="${multidirs}"
+ multidirs=""
+ for x in ${old_multidirs}; do
+ case "$x" in
+ *ppc64* ) : ;;
+ *) multidirs="${multidirs} ${x}" ;;
+ esac
+ done
+ fi
+ if [ x$enable_pthread = xno ]
+ then
+ old_multidirs="${multidirs}"
+ multidirs=""
+ for x in ${old_multidirs}; do
+ case "$x" in
+ *pthread* ) : ;;
+ *) multidirs="${multidirs} ${x}" ;;
+ esac
+ done
+ fi
+ if [ x$enable_softfloat = xno ]
+ then
+ old_multidirs="${multidirs}"
+ multidirs=""
+ for x in ${old_multidirs}; do
+ case "$x" in
+ *soft-float* ) : ;;
+ *) multidirs="${multidirs} ${x}" ;;
+ esac
+ done
+ fi
+ if [ x$enable_powercpu = xno ]
+ then
+ old_multidirs="${multidirs}"
+ multidirs=""
+ for x in ${old_multidirs}; do
+ case "$x" in
+ power | */power | */power/* ) : ;;
+ *) multidirs="${multidirs} ${x}" ;;
+ esac
+ done
+ fi
+ if [ x$enable_powerpccpu = xno ]
+ then
+ old_multidirs="${multidirs}"
+ multidirs=""
+ for x in ${old_multidirs}; do
+ case "$x" in
+ *powerpc* ) : ;;
+ *) multidirs="${multidirs} ${x}" ;;
+ esac
+ done
+ fi
+ if [ x$enable_powerpcos = xno ]
+ then
+ old_multidirs="${multidirs}"
+ multidirs=""
+ for x in ${old_multidirs}; do
+ case "$x" in
+ *mcall-linux* | *mcall-solaris* ) : ;;
+ *) multidirs="${multidirs} ${x}" ;;
+ esac
+ done
+ fi
+ if [ x$enable_biendian = xno ]
+ then
+ old_multidirs="${multidirs}"
+ multidirs=""
+ for x in ${old_multidirs}; do
+ case "$x" in
+ *mlittle* | *mbig* ) : ;;
+ *) multidirs="${multidirs} ${x}" ;;
+ esac
+ done
+ fi
+ if [ x$enable_sysv = xno ]
+ then
+ old_multidirs="${multidirs}"
+ multidirs=""
+ for x in ${old_multidirs}; do
+ case "$x" in
+ *mcall-sysv* ) : ;;
+ *) multidirs="${multidirs} ${x}" ;;
+ esac
+ done
+ fi
+ ;;
+esac
+
+# Remove extraneous blanks from multidirs.
+# Tests like `if [ -n "$multidirs" ]' require it.
+multidirs=`echo "$multidirs" | sed -e 's/^[ ][ ]*//' -e 's/[ ][ ]*$//' -e 's/[ ][ ]*/ /g'`
+
+# Add code to library's top level makefile to handle building the multilib
+# subdirs.
+
+cat > Multi.tem <<\EOF
+
+PWD_COMMAND=$${PWDCMD-pwd}
+
+# FIXME: There should be an @-sign in front of the `if'.
+# Leave out until this is tested a bit more.
+multi-do:
+ if [ -z "$(MULTIDIRS)" ]; then \
+ true; \
+ else \
+ rootpre=`${PWD_COMMAND}`/; export rootpre; \
+ srcrootpre=`cd $(srcdir); ${PWD_COMMAND}`/; export srcrootpre; \
+ lib=`echo "$${rootpre}" | sed -e 's,^.*/\([^/][^/]*\)/$$,\1,'`; \
+ compiler="$(CC)"; \
+ for i in `$${compiler} --print-multi-lib 2>/dev/null`; do \
+ dir=`echo $$i | sed -e 's/;.*$$//'`; \
+ if [ "$${dir}" = "." ]; then \
+ true; \
+ else \
+ if [ -d ../$${dir}/$${lib} ]; then \
+ flags=`echo $$i | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; \
+ if (cd ../$${dir}/$${lib}; $(MAKE) $(FLAGS_TO_PASS) \
+ CFLAGS="$(CFLAGS) $${flags}" \
+ CCASFLAGS="$(CCASFLAGS) $${flags}" \
+ FCFLAGS="$(FCFLAGS) $${flags}" \
+ FFLAGS="$(FFLAGS) $${flags}" \
+ ADAFLAGS="$(ADAFLAGS) $${flags}" \
+ prefix="$(prefix)" \
+ exec_prefix="$(exec_prefix)" \
+ GCJFLAGS="$(GCJFLAGS) $${flags}" \
+ GOCFLAGS="$(GOCFLAGS) $${flags}" \
+ CXXFLAGS="$(CXXFLAGS) $${flags}" \
+ LIBCFLAGS="$(LIBCFLAGS) $${flags}" \
+ LIBCXXFLAGS="$(LIBCXXFLAGS) $${flags}" \
+ LDFLAGS="$(LDFLAGS) $${flags}" \
+ MULTIFLAGS="$${flags}" \
+ DESTDIR="$(DESTDIR)" \
+ INSTALL="$(INSTALL)" \
+ INSTALL_DATA="$(INSTALL_DATA)" \
+ INSTALL_PROGRAM="$(INSTALL_PROGRAM)" \
+ INSTALL_SCRIPT="$(INSTALL_SCRIPT)" \
+ $(DO)); then \
+ true; \
+ else \
+ exit 1; \
+ fi; \
+ else true; \
+ fi; \
+ fi; \
+ done; \
+ fi
+
+# FIXME: There should be an @-sign in front of the `if'.
+# Leave out until this is tested a bit more.
+multi-clean:
+ if [ -z "$(MULTIDIRS)" ]; then \
+ true; \
+ else \
+ lib=`${PWD_COMMAND} | sed -e 's,^.*/\([^/][^/]*\)$$,\1,'`; \
+ for dir in : $(MULTIDIRS); do \
+ test $$dir != : || continue; \
+EOF
+cat >>Multi.tem <<EOF
+ if [ -f ../\$\${dir}/\$\${lib}/${Makefile} ]; then \\
+EOF
+cat >>Multi.tem <<\EOF
+ if (cd ../$${dir}/$${lib}; $(MAKE) $(FLAGS_TO_PASS) $(DO)); \
+ then true; \
+ else exit 1; \
+ fi; \
+ else true; \
+ fi; \
+ done; \
+ fi
+EOF
+
+cat ${Makefile} Multi.tem > Makefile.tem
+rm -f ${Makefile} Multi.tem
+mv Makefile.tem ${Makefile}
+
+fi # ${ml_toplevel_p} = yes
+
+if [ "${ml_verbose}" = --verbose ]; then
+ echo "Adding multilib support to ${Makefile} in ${ml_realsrcdir}"
+ if [ "${ml_toplevel_p}" = yes ]; then
+ echo "multidirs=${multidirs}"
+ fi
+ echo "with_multisubdir=${with_multisubdir}"
+fi
+
+if [ "${srcdir}" = "." ]; then
+ if [ "${with_target_subdir}" != "." ]; then
+ ml_srcdotdot="../"
+ else
+ ml_srcdotdot=""
+ fi
+else
+ ml_srcdotdot=""
+fi
+
+if [ -z "${with_multisubdir}" ]; then
+ ml_subdir=
+ ml_builddotdot=
+ : # ml_srcdotdot= # already set
+else
+ ml_subdir="/${with_multisubdir}"
+ # The '[^/][^/]*' appears that way to work around a SunOS sed bug.
+ ml_builddotdot=`echo ${with_multisubdir} | sed -e 's:[^/][^/]*:..:g'`/
+ if [ "$srcdir" = "." ]; then
+ ml_srcdotdot=${ml_srcdotdot}${ml_builddotdot}
+ else
+ : # ml_srcdotdot= # already set
+ fi
+fi
+
+if [ "${ml_toplevel_p}" = yes ]; then
+ ml_do='$(MAKE)'
+ ml_clean='$(MAKE)'
+else
+ ml_do=true
+ ml_clean=true
+fi
+
+# TOP is used by newlib and should not be used elsewhere for this purpose.
+# MULTI{SRC,BUILD}TOP are the proper ones to use. MULTISRCTOP is empty
+# when srcdir != builddir. MULTIBUILDTOP is always some number of ../'s.
+# FIXME: newlib needs to be updated to use MULTI{SRC,BUILD}TOP so we can
+# delete TOP. Newlib may wish to continue to use TOP for its own purposes
+# of course.
+# MULTIDIRS is non-empty for the cpu top level Makefile (eg: newlib/Makefile)
+# and lists the subdirectories to recurse into.
+# MULTISUBDIR is non-empty in each cpu subdirectory's Makefile
+# (eg: newlib/h8300h/Makefile) and is the installed subdirectory name with
+# a leading '/'.
+# MULTIDO is used for targets like all, install, and check where
+# $(FLAGS_TO_PASS) augmented with the subdir's compiler option is needed.
+# MULTICLEAN is used for the *clean targets.
+#
+# ??? It is possible to merge MULTIDO and MULTICLEAN into one. They are
+# currently kept separate because we don't want the *clean targets to require
+# the existence of the compiler (which MULTIDO currently requires) and
+# therefore we'd have to record the directory options as well as names
+# (currently we just record the names and use --print-multi-lib to get the
+# options).
+
+sed -e "s:^TOP[ ]*=[ ]*\([./]*\)[ ]*$:TOP = ${ml_builddotdot}\1:" \
+ -e "s:^MULTISRCTOP[ ]*=.*$:MULTISRCTOP = ${ml_srcdotdot}:" \
+ -e "s:^MULTIBUILDTOP[ ]*=.*$:MULTIBUILDTOP = ${ml_builddotdot}:" \
+ -e "s:^MULTIDIRS[ ]*=.*$:MULTIDIRS = ${multidirs}:" \
+ -e "s:^MULTISUBDIR[ ]*=.*$:MULTISUBDIR = ${ml_subdir}:" \
+ -e "s:^MULTIDO[ ]*=.*$:MULTIDO = $ml_do:" \
+ -e "s:^MULTICLEAN[ ]*=.*$:MULTICLEAN = $ml_clean:" \
+ ${Makefile} > Makefile.tem
+rm -f ${Makefile}
+mv Makefile.tem ${Makefile}
+
+# If this is the library's top level, configure each multilib subdir.
+# This is done at the end because this is the loop that runs configure
+# in each multilib subdir and it seemed reasonable to finish updating the
+# Makefile before going on to configure the subdirs.
+
+if [ "${ml_toplevel_p}" = yes ]; then
+
+# We must freshly configure each subdirectory. This bit of code is
+# actually partially stolen from the main configure script. FIXME.
+
+if [ -n "${multidirs}" ] && [ -z "${ml_norecursion}" ]; then
+
+ if [ "${ml_verbose}" = --verbose ]; then
+ echo "Running configure in multilib subdirs ${multidirs}"
+ echo "pwd: `${PWDCMD-pwd}`"
+ fi
+
+ ml_origdir=`${PWDCMD-pwd}`
+ ml_libdir=`echo "$ml_origdir" | sed -e 's,^.*/,,'`
+ # cd to top-level-build-dir/${with_target_subdir}
+ cd ..
+
+ for ml_dir in ${multidirs}; do
+
+ if [ "${ml_verbose}" = --verbose ]; then
+ echo "Running configure in multilib subdir ${ml_dir}"
+ echo "pwd: `${PWDCMD-pwd}`"
+ fi
+
+ if [ -d ${ml_dir} ]; then true; else
+ # ``mkdir -p ${ml_dir}'' See also mkinstalldirs.
+ pathcomp=""
+ for d in `echo ":${ml_dir}" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`; do
+ pathcomp="$pathcomp$d"
+ case "$pathcomp" in
+ -* ) pathcomp=./$pathcomp ;;
+ esac
+ if test ! -d "$pathcomp"; then
+ echo "mkdir $pathcomp" 1>&2
+ mkdir "$pathcomp" > /dev/null 2>&1 || lasterr=$?
+ fi
+ if test ! -d "$pathcomp"; then
+ exit $lasterr
+ fi
+ pathcomp="$pathcomp/"
+ done
+ fi
+ if [ -d ${ml_dir}/${ml_libdir} ]; then true; else mkdir ${ml_dir}/${ml_libdir}; fi
+
+ # Eg: if ${ml_dir} = m68000/m68881, dotdot = ../../
+ dotdot=../`echo ${ml_dir} | sed -e 's|[^/]||g' -e 's|/|../|g'`
+
+ case ${srcdir} in
+ ".")
+ echo "Building symlink tree in `${PWDCMD-pwd}`/${ml_dir}/${ml_libdir}"
+ if [ "${with_target_subdir}" != "." ]; then
+ ml_unsubdir="../"
+ else
+ ml_unsubdir=""
+ fi
+ (cd ${ml_dir}/${ml_libdir};
+ ../${dotdot}${ml_unsubdir}symlink-tree ../${dotdot}${ml_unsubdir}${ml_libdir} "")
+ if [ -f ${ml_dir}/${ml_libdir}/${Makefile} ]; then
+ if [ x"${MAKE}" = x ]; then
+ (cd ${ml_dir}/${ml_libdir}; make distclean)
+ else
+ (cd ${ml_dir}/${ml_libdir}; ${MAKE} distclean)
+ fi
+ fi
+ ml_newsrcdir="."
+ ml_srcdiroption=
+ multisrctop=${dotdot}
+ ;;
+ *)
+ case "${srcdir}" in
+ /* | [A-Za-z]:[\\/]* ) # absolute path
+ ml_newsrcdir=${srcdir}
+ ;;
+ *) # otherwise relative
+ ml_newsrcdir=${dotdot}${srcdir}
+ ;;
+ esac
+ ml_srcdiroption="-srcdir=${ml_newsrcdir}"
+ multisrctop=
+ ;;
+ esac
+
+ case "${progname}" in
+ /* | [A-Za-z]:[\\/]* ) ml_recprog=${progname} ;;
+ *) ml_recprog=${dotdot}${progname} ;;
+ esac
+
+ # FIXME: POPDIR=${PWD=`pwd`} doesn't work here.
+ ML_POPDIR=`${PWDCMD-pwd}`
+ cd ${ml_dir}/${ml_libdir}
+
+ if [ -f ${ml_newsrcdir}/configure ]; then
+ ml_recprog="${ml_newsrcdir}/configure"
+ fi
+
+ # find compiler flag corresponding to ${ml_dir}
+ for i in `${CC-gcc} --print-multi-lib 2>/dev/null`; do
+ dir=`echo $i | sed -e 's/;.*$//'`
+ if [ "${dir}" = "${ml_dir}" ]; then
+ flags=`echo $i | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`
+ break
+ fi
+ done
+ ml_config_env='CC="${CC_}$flags" CXX="${CXX_}$flags" F77="${F77_}$flags" GCJ="${GCJ_}$flags" GFORTRAN="${GFORTRAN_}$flags" GOC="${GOC_}$flags"'
+
+ if [ "${with_target_subdir}" = "." ]; then
+ CC_=$CC' '
+ CXX_=$CXX' '
+ F77_=$F77' '
+ GCJ_=$GCJ' '
+ GFORTRAN_=$GFORTRAN' '
+ GOC_=$GOC' '
+ else
+ # Create a regular expression that matches any string as long
+ # as ML_POPDIR.
+ popdir_rx=`echo "${ML_POPDIR}" | sed 's,.,.,g'`
+ CC_=
+ for arg in ${CC}; do
+ case $arg in
+ -[BIL]"${ML_POPDIR}"/*)
+ CC_="${CC_}"`echo "X${arg}" | sed -n "s/X\\(-[BIL]${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X-[BIL]${popdir_rx}\\(.*\\)/\1/p"`' ' ;;
+ "${ML_POPDIR}"/*)
+ CC_="${CC_}"`echo "X${arg}" | sed -n "s/X\\(${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
+ *)
+ CC_="${CC_}${arg} " ;;
+ esac
+ done
+
+ CXX_=
+ for arg in ${CXX}; do
+ case $arg in
+ -[BIL]"${ML_POPDIR}"/*)
+ CXX_="${CXX_}"`echo "X${arg}" | sed -n "s/X\\(-[BIL]${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X-[BIL]${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
+ "${ML_POPDIR}"/*)
+ CXX_="${CXX_}"`echo "X${arg}" | sed -n "s/X\\(${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
+ *)
+ CXX_="${CXX_}${arg} " ;;
+ esac
+ done
+
+ F77_=
+ for arg in ${F77}; do
+ case $arg in
+ -[BIL]"${ML_POPDIR}"/*)
+ F77_="${F77_}"`echo "X${arg}" | sed -n "s/X\\(-[BIL]${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X-[BIL]${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
+ "${ML_POPDIR}"/*)
+ F77_="${F77_}"`echo "X${arg}" | sed -n "s/X\\(${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
+ *)
+ F77_="${F77_}${arg} " ;;
+ esac
+ done
+
+ GCJ_=
+ for arg in ${GCJ}; do
+ case $arg in
+ -[BIL]"${ML_POPDIR}"/*)
+ GCJ_="${GCJ_}"`echo "X${arg}" | sed -n "s/X\\(-[BIL]${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X-[BIL]${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
+ "${ML_POPDIR}"/*)
+ GCJ_="${GCJ_}"`echo "X${arg}" | sed -n "s/X\\(${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
+ *)
+ GCJ_="${GCJ_}${arg} " ;;
+ esac
+ done
+
+ GFORTRAN_=
+ for arg in ${GFORTRAN}; do
+ case $arg in
+ -[BIL]"${ML_POPDIR}"/*)
+ GFORTRAN_="${GFORTRAN_}"`echo "X${arg}" | sed -n "s/X\\(-[BIL]${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X-[BIL]${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
+ "${ML_POPDIR}"/*)
+ GFORTRAN_="${GFORTRAN_}"`echo "X${arg}" | sed -n "s/X\\(${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
+ *)
+ GFORTRAN_="${GFORTRAN_}${arg} " ;;
+ esac
+ done
+
+ GOC_=
+ for arg in ${GOC}; do
+ case $arg in
+ -[BIL]"${ML_POPDIR}"/*)
+ GOC_="${GOC_}"`echo "X${arg}" | sed -n "s/X\\(-[BIL]${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X-[BIL]${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
+ "${ML_POPDIR}"/*)
+ GOC_="${GOC_}"`echo "X${arg}" | sed -n "s/X\\(${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X${popdir_rx}\\(.*\\)/\\1/p"`' ' ;;
+ *)
+ GOC_="${GOC_}${arg} " ;;
+ esac
+ done
+
+ if test "x${LD_LIBRARY_PATH+set}" = xset; then
+ LD_LIBRARY_PATH_=
+ for arg in `echo "$LD_LIBRARY_PATH" | tr ':' ' '`; do
+ case "$arg" in
+ "${ML_POPDIR}"/*)
+ arg=`echo "X${arg}" | sed -n "s/X\\(${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X${popdir_rx}\\(.*\\)/\\1/p"`
+ ;;
+ esac
+ if test "x$LD_LIBRARY_PATH_" != x; then
+ LD_LIBRARY_PATH_=$LD_LIBRARY_PATH_:$arg
+ else
+ LD_LIBRARY_PATH_=$arg
+ fi
+ done
+ ml_config_env="$ml_config_env LD_LIBRARY_PATH=$LD_LIBRARY_PATH_"
+ fi
+
+ if test "x${SHLIB_PATH+set}" = xset; then
+ SHLIB_PATH_=
+ for arg in `echo "$SHLIB_PATH" | tr ':' ' '`; do
+ case "$arg" in
+ "${ML_POPDIR}"/*)
+ arg=`echo "X${arg}" | sed -n "s/X\\(${popdir_rx}\\).*/\\1/p"`/${ml_dir}`echo "X${arg}" | sed -n "s/X${popdir_rx}\\(.*\\)/\\1/p"`
+ ;;
+ esac
+ if test "x$SHLIB_PATH_" != x; then
+ SHLIB_PATH_=$SHLIB_PATH_:$arg
+ else
+ SHLIB_PATH_=$arg
+ fi
+ done
+ ml_config_env="$ml_config_env SHLIB_PATH=$SHLIB_PATH_"
+ fi
+ fi
+
+ if eval ${ml_config_env} ${ml_config_shell} ${ml_recprog} \
+ --with-multisubdir=${ml_dir} --with-multisrctop=${multisrctop} \
+ ${ac_configure_args} ${ml_config_env} ${ml_srcdiroption} ; then
+ true
+ else
+ exit 1
+ fi
+
+ cd "${ML_POPDIR}"
+
+ done
+
+ cd "${ml_origdir}"
+fi
+
+fi # ${ml_toplevel_p} = yes
+fi # ${enable_multilib} = yes
diff --git a/contrib/multilib/multi.m4 b/contrib/multilib/multi.m4
new file mode 100644
index 000000000..2156e6691
--- /dev/null
+++ b/contrib/multilib/multi.m4
@@ -0,0 +1,64 @@
+## -*- Autoconf -*-
+# Copyright (C) 1998-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 6
+
+# AM_ENABLE_MULTILIB([MAKEFILE], [REL-TO-TOP-SRCDIR])
+# ---------------------------------------------------
+# Add --enable-multilib to configure.
+AC_DEFUN([AM_ENABLE_MULTILIB],
+[# Default to --enable-multilib
+AC_ARG_ENABLE(multilib,
+[ --enable-multilib build many library versions (default)],
+[case "$enableval" in
+ yes) multilib=yes ;;
+ no) multilib=no ;;
+ *) AC_MSG_ERROR([bad value $enableval for multilib option]) ;;
+ esac],
+ [multilib=yes])
+
+# We may get other options which we leave undocumented:
+# --with-target-subdir, --with-multisrctop, --with-multisubdir
+# See config-ml.in if you want the gory details.
+
+if test "$srcdir" = "."; then
+ if test "$with_target_subdir" != "."; then
+ multi_basedir="$srcdir/$with_multisrctop../$2"
+ else
+ multi_basedir="$srcdir/$with_multisrctop$2"
+ fi
+else
+ multi_basedir="$srcdir/$2"
+fi
+AC_SUBST(multi_basedir)
+
+# Even if the default multilib is not a cross compilation,
+# it may be that some of the other multilibs are.
+if test $cross_compiling = no && test $multilib = yes \
+ && test "x${with_multisubdir}" != x ; then
+ cross_compiling=maybe
+fi
+
+AC_OUTPUT_COMMANDS([
+# Only add multilib support code if we just rebuilt the top-level
+# Makefile.
+case " $CONFIG_FILES " in
+ *" ]m4_default([$1],Makefile)[ "*)
+ ac_file=]m4_default([$1],Makefile)[ . ${multi_basedir}/config-ml.in
+ ;;
+esac],
+ [
+srcdir="$srcdir"
+host="$host"
+target="$target"
+with_multisubdir="$with_multisubdir"
+with_multisrctop="$with_multisrctop"
+with_target_subdir="$with_target_subdir"
+ac_configure_args="${multilib_arg} ${ac_configure_args}"
+multi_basedir="$multi_basedir"
+CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+CC="$CC"])])dnl
diff --git a/contrib/multilib/multilib.am b/contrib/multilib/multilib.am
new file mode 100644
index 000000000..5c98b69bd
--- /dev/null
+++ b/contrib/multilib/multilib.am
@@ -0,0 +1,45 @@
+## automake - create Makefile.in from Makefile.am
+
+## Copyright (C) 1994-2017 Free Software Foundation, Inc.
+## This Makefile.in is free software; the Free Software Foundation
+## gives unlimited permission to copy and/or distribute it,
+## with or without modifications, as long as this notice is preserved.
+
+## 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.
+
+MULTISRCTOP =
+MULTIBUILDTOP =
+MULTIDIRS =
+MULTISUBDIR =
+MULTIDO = true
+MULTICLEAN = true
+
+# GNU Make needs to see an explicit $(MAKE) variable in the command it
+# runs to enable its job server during parallel builds. Hence the
+# comments below.
+all-multi:
+ $(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do # $(MAKE)
+install-multi:
+ $(MULTIDO) $(AM_MAKEFLAGS) DO=install multi-do # $(MAKE)
+mostlyclean-multi:
+ $(MULTICLEAN) $(AM_MAKEFLAGS) DO=mostlyclean multi-clean # $(MAKE)
+clean-multi:
+ $(MULTICLEAN) $(AM_MAKEFLAGS) DO=clean multi-clean # $(MAKE)
+distclean-multi:
+ $(MULTICLEAN) $(AM_MAKEFLAGS) DO=distclean multi-clean # $(MAKE)
+maintainer-clean-multi:
+ $(MULTICLEAN) $(AM_MAKEFLAGS) DO=maintainer-clean multi-clean # $(MAKE)
+
+.MAKE .PHONY: all-multi clean-multi distclean-multi install-am \
+ install-multi maintainer-clean-multi mostlyclean-multi
+
+install-exec-local: install-multi
+
+all-local: all-multi
+mostlyclean-local: mostlyclean-multi
+clean-local: clean-multi
+distclean-local: distclean-multi
+maintainer-clean-local: maintainer-clean-multi
diff --git a/contrib/multilib/symlink-tree b/contrib/multilib/symlink-tree
new file mode 100755
index 000000000..49de9fc54
--- /dev/null
+++ b/contrib/multilib/symlink-tree
@@ -0,0 +1,78 @@
+#!/bin/sh
+# Create a symlink tree.
+#
+# Copyright (C) 1995-2017 Free Software Foundation, Inc.
+#
+# This file 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 of the License, 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., 51 Franklin Street, Fifth Floor,
+# Boston, MA 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+#
+# Please report bugs to <gcc-bugs@gnu.org>
+# and send patches to <gcc-patches@gnu.org>.
+
+# Syntax: symlink-tree srcdir "ignore1 ignore2 ..."
+#
+# where srcdir is the directory to create a symlink tree to,
+# and "ignoreN" is a list of files/directories to ignore.
+
+prog=$0
+srcdir=$1
+ignore="$2"
+
+if test $# -lt 1; then
+ echo "symlink-tree error: Usage: symlink-tree srcdir \"ignore1 ignore2 ...\""
+ exit 1
+fi
+
+ignore_additional=". .. CVS"
+
+# If we were invoked with a relative path name, adjust ${prog} to work
+# in subdirs.
+case ${prog} in
+/* | [A-Za-z]:[\\/]*) ;;
+*) prog=../${prog} ;;
+esac
+
+# Set newsrcdir to something subdirectories can use.
+case ${srcdir} in
+/* | [A-Za-z]:[\\/]*) newsrcdir=${srcdir} ;;
+*) newsrcdir=../${srcdir} ;;
+esac
+
+for f in `ls -a ${srcdir}`; do
+ if [ -d ${srcdir}/$f ]; then
+ found=
+ for i in ${ignore} ${ignore_additional}; do
+ if [ "$f" = "$i" ]; then
+ found=yes
+ fi
+ done
+ if [ -z "${found}" ]; then
+ echo "$f ..working in"
+ if [ -d $f ]; then true; else mkdir $f; fi
+ (cd $f; ${prog} ${newsrcdir}/$f "${ignore}")
+ fi
+ else
+ echo "$f ..linked"
+ rm -f $f
+ ln -s ${srcdir}/$f .
+ fi
+done
+
+exit 0
diff --git a/contrib/t/help-multilib.sh b/contrib/t/help-multilib.sh
new file mode 100755
index 000000000..ead697381
--- /dev/null
+++ b/contrib/t/help-multilib.sh
@@ -0,0 +1,32 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that our macro 'AM_ENABLE_MULTILIB' adds proper text to
+# the configure help screen.
+
+. test-init.sh
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AM_ENABLE_MULTILIB
+END
+
+cat "$am_top_srcdir"/contrib/multilib/multi.m4 > aclocal.m4
+$AUTOCONF
+
+grep_configure_help --enable-multilib ' many library versions \(default\)'
+
+:
diff --git a/contrib/t/local.mk b/contrib/t/local.mk
new file mode 100644
index 000000000..b5e1b699b
--- /dev/null
+++ b/contrib/t/local.mk
@@ -0,0 +1,26 @@
+## Included by top-level Makefile for Automake.
+
+## Copyright (C) 1995-2017 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 <https://www.gnu.org/licenses/>.
+
+## -------------------------------- ##
+## Tests for stuff in 'contrib/'. ##
+## -------------------------------- ##
+
+contrib_TESTS = \
+ %D%/parallel-tests-html.sh \
+ %D%/parallel-tests-html-recursive.sh \
+ %D%/help-multilib.sh \
+ %D%/multilib.sh
diff --git a/contrib/t/multilib.sh b/contrib/t/multilib.sh
new file mode 100755
index 000000000..117aa93ff
--- /dev/null
+++ b/contrib/t/multilib.sh
@@ -0,0 +1,160 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check multilib support.
+# Based on a test case from Ralf Corsepius.
+
+required='gcc GNUmake'
+. test-init.sh
+
+mldir=$am_top_srcdir/contrib/multilib
+mkdir m4
+cp "$mldir"/config-ml.in "$mldir"/symlink-tree .
+cp "$mldir"/multi.m4 m4
+
+ACLOCAL_PATH=${ACLOCAL_PATH+"$ACLOCAL_PATH:"}$(pwd)/m4
+export ACLOCAL_PATH
+
+cat >configure.ac <<'END'
+AC_INIT([multlib], [1.0])
+AC_CONFIG_SRCDIR(libfoo/foo.c)
+AC_CONFIG_AUX_DIR(.)
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile])
+AC_CONFIG_SUBDIRS(libfoo)
+AC_CONFIG_SUBDIRS(libbar)
+AC_OUTPUT
+END
+
+cat >mycc <<'END'
+#! /bin/sh
+case ${1+"$@"} in
+ *-print-multi-lib*)
+ echo ".;"
+ echo "debug;@g"
+ exit 0 ;;
+esac
+gcc ${1+"$@"}
+END
+
+chmod +x mycc
+PATH=$(pwd)$PATH_SEPARATOR$PATH; export PATH
+
+cat >Makefile.am <<'EOF'
+SUBDIRS = @subdirs@
+EXTRA_DIST = config-ml.in symlink-tree
+check-all:
+ test -f debug/libfoo/libfoo.a
+ test -f debug/libbar/libbar.a
+ test -f libfoo/libfoo.a
+ test -f libbar/libbar.a
+EOF
+
+# libfoo tests multilib supports when there are no subdirectories
+# libbar tests multilib supports when there are subdirectories
+
+mkdir libfoo
+cp "$mldir"/multilib.am libfoo/
+
+cat >libfoo/configure.ac <<'END'
+AC_PREREQ(2.57)
+AC_INIT(libfoo, 0.1, nobody@localhost)
+AC_CONFIG_SRCDIR(foo.c)
+# Apparently it doesn't work to have auxdir=.. when
+# multilib uses symlinked trees.
+AC_CONFIG_AUX_DIR(.)
+AM_INIT_AUTOMAKE
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+AM_ENABLE_MULTILIB(Makefile,[..])
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+END
+
+cat >libfoo/Makefile.am <<'END'
+noinst_LIBRARIES = libfoo.a
+libfoo_a_SOURCES = foo.c
+include $(top_srcdir)/multilib.am
+END
+
+: > libfoo/foo.c
+
+mkdir libbar
+cp "$mldir"/multilib.am libbar/
+
+cat >libbar/configure.ac <<'END'
+AC_PREREQ(2.57)
+AC_INIT(libbar, 0.1, nobody@localhost)
+# Apparently it doesn't work to have auxdir=.. when
+# multilib uses symlinked trees.
+AC_CONFIG_AUX_DIR(.)
+AM_INIT_AUTOMAKE
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+AM_ENABLE_MULTILIB(Makefile,[..])
+AC_CONFIG_FILES([Makefile sub/Makefile])
+AC_OUTPUT
+END
+
+cat >libbar/Makefile.am <<'END'
+SUBDIRS = sub
+noinst_LIBRARIES = libbar.a
+libbar_a_SOURCES = bar.c
+include $(top_srcdir)/multilib.am
+END
+
+mkdir libbar/sub
+echo 'include $(top_srcdir)/multilib.am' >libbar/sub/Makefile.am
+: > libbar/bar.c
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+cd libfoo
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+cd ..
+
+cd libbar
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+cd ..
+
+# Check VPATH builds
+mkdir build
+cd build
+../configure --enable-multilib CC=mycc
+$MAKE
+test -f debug/libfoo/libfoo.a
+test -f debug/libbar/libbar.a
+test -f libfoo/libfoo.a
+test -f libbar/libbar.a
+$MAKE install
+$MAKE distcleancheck
+
+# Check standard builds.
+cd ..
+# Why to I have to specify --with-target-subdir?
+./configure --enable-multilib --with-target-subdir=. CC=mycc
+$MAKE check
+DISTCHECK_CONFIGURE_FLAGS='--enable-multilib CC=mycc' $MAKE distcheck
+
+:
diff --git a/contrib/t/parallel-tests-html-recursive.sh b/contrib/t/parallel-tests-html-recursive.sh
new file mode 100755
index 000000000..d664b8d62
--- /dev/null
+++ b/contrib/t/parallel-tests-html-recursive.sh
@@ -0,0 +1,163 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Recursive use of 'check-html'. See Automake bug#11287.
+
+. test-init.sh
+
+# Try the variants that are tried in check-html.am.
+while :; do
+ for r2h in $RST2HTML rst2html rst2html.py; do
+ echo "$me: running $r2h --version"
+ $r2h --version && break 2
+ : For shells with busted 'set -e'.
+ done
+ skip_all_ "no proper rst2html program found"
+done
+unset r2h
+
+cp "$am_top_srcdir"/contrib/check-html.am . \
+ || fatal_ "cannot fetch 'check-html.am' from contrib"
+
+cat >> configure.ac << 'END'
+AM_EXTRA_RECURSIVE_TARGETS([check-html])
+AC_CONFIG_FILES([sub/Makefile sub/more/Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+SUBDIRS = sub
+EXTRA_DIST = $(TESTS)
+TEST_SUITE_LOG = mylog.log
+TESTS = foo.test bar.sh mu
+XFAIL_TESTS = bar.sh
+check_SCRIPTS = bla
+bla:
+ echo '#!/bin/sh' > $@-t
+ echo 'echo Blah Blah Blah' >> $@-t
+ chmod a+x,a-w $@-t
+ mv -f $@-t $@
+CLEANFILES = bla
+include $(srcdir)/check-html.am
+END
+
+mkdir sub
+echo SUBDIRS = more > sub/Makefile.am
+
+mkdir sub/more
+cat > sub/more/Makefile.am << 'END'
+include $(top_srcdir)/check-html.am
+TEST_EXTENSIONS = .test .sh
+TESTS = sh.sh test.test
+LOG_COMPILER = true
+test.log: sh.log
+nodist_check_DATA = x.txt
+$(nodist_check_DATA):
+ echo $@ > $@
+CLEANFILES = $(nodist_check_DATA)
+EXTRA_DIST = $(TESTS)
+END
+
+cat > foo.test <<'END'
+#! /bin/sh
+./bla
+exit 77
+END
+
+cat > bar.sh <<'END'
+#! /bin/sh
+echo "this is $0"
+exit 1
+END
+
+cat > mu <<'END'
+#! /bin/sh
+set -x
+test -f sub/more/test.log
+test -f sub/more/sh.log
+END
+
+cat > sub/more/test.test << 'END'
+#!/bin/sh
+echo "this is $0"
+set -x
+test -f sh.log
+test -f x.txt
+exit 77
+END
+
+cat > sub/more/sh.sh << 'END'
+#!/bin/sh
+set -x
+test ! -f test.log
+test -f x.txt
+END
+
+
+cat > sub/more/mu << 'END'
+#!/bin/sh
+exit 99
+END
+
+chmod a+x foo.test bar.sh mu sub/more/test.test sub/more/sh.sh
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+$MAKE check-html
+grep 'Blah Blah Blah' mylog.html
+grep 'this is .*bar\.sh' mylog.html
+grep 'this is .*test\.test' sub/more/test-suite.html
+# check-html should cause check_SCRIPTS and check_DATA to be created.
+test -f bla
+test -f sub/more/x.txt
+
+# "make clean" should remove HTML files.
+$MAKE clean
+test ! -e mylog.html
+test ! -e sub/more/test-suite.html
+test ! -e bla
+test ! -e sub/more/x.txt
+
+# Create HTML output for individual tests.
+
+$MAKE bla
+$MAKE foo.html bar.sh.html
+grep 'Blah Blah Blah' foo.html
+grep 'this is .*bar\.sh' bar.sh.html
+test ! -e mu.hml
+
+ocwd=$(pwd) || fatal_ "getting current workind directory"
+( cd sub/more \
+ && $MAKE sh.html \
+ && test -f sh.html \
+ && test ! -e test.html \
+ && $MAKE test.html \
+ && grep 'this is .*test\.test' test.html) || exit 1
+
+# HTML output removed by mostlyclean.
+$MAKE check-html
+test -f mylog.html
+test -f sub/more/test-suite.html
+$MAKE mostlyclean
+find . -name '*.html' | grep . && exit 1
+
+$MAKE distcheck
+
+:
diff --git a/contrib/t/parallel-tests-html.sh b/contrib/t/parallel-tests-html.sh
new file mode 100755
index 000000000..9576b6232
--- /dev/null
+++ b/contrib/t/parallel-tests-html.sh
@@ -0,0 +1,144 @@
+#! /bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check parallel-tests features:
+# - check-html
+# - recheck-html
+
+. test-init.sh
+
+# Try the variants that are tried in check-html.am.
+while :; do
+ for r2h in $RST2HTML rst2html rst2html.py; do
+ echo "$me: running $r2h --version"
+ $r2h --version && break 2
+ : For shells with busted 'set -e'.
+ done
+ skip_all_ "no proper rst2html program found"
+done
+unset r2h
+
+cp "$am_top_srcdir"/contrib/check-html.am . \
+ || fatal_ "cannot fetch 'check-html.am' from contrib"
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TEST_SUITE_LOG = mylog.log
+TESTS = foo.test bar.test baz.test
+check_SCRIPTS = bla
+bla:
+ echo bla > $@
+CLEANFILES = bla
+include $(srcdir)/check-html.am
+END
+
+cat > foo.test <<'END'
+#! /bin/sh
+echo "this is $0"
+test -f bla || exit 1
+exit 0
+END
+
+cat > bar.test <<'END'
+#! /bin/sh
+echo "this is $0"
+exit 99
+END
+
+cat > baz.test <<'END'
+#! /bin/sh
+echo "this is $0"
+exit 1
+END
+
+chmod a+x foo.test bar.test baz.test
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+$MAKE check-html && exit 1
+test -f mylog.html
+# check-html should cause check_SCRIPTS to be created.
+test -f bla
+
+# "make clean" should remove HTML files.
+$MAKE clean
+test ! -e mylog.html
+test ! -e bla
+
+# Always create the HTML output, even if there were no failures.
+rm -f mylog.html
+run_make TESTS=foo.test check-html
+test -f mylog.html
+
+# Create summarizing HTML output also with recheck-html.
+rm -f mylog.html
+run_make TESTS=foo.test recheck-html
+test -f mylog.html
+
+# Create HTML output for an individual test.
+$MAKE foo.html
+grep 'this is .*foo\.test' foo.html
+test ! -e bar.html
+test ! -e baz.html
+
+# Create HTML output for individual tests. Since the pre-existing log
+# files are expected to be used for the HTML conversion, this should
+# go smoothly even for failed tests.
+$MAKE bar.html baz.html
+grep 'this is .*bar\.test' bar.html
+grep 'this is .*baz\.test' baz.html
+
+# HTML output removed by mostlyclean.
+$MAKE mostlyclean
+test ! -e foo.html
+test ! -e bar.html
+test ! -e baz.html
+test ! -e mylog.html
+
+# check-html and recheck-html should cause check_SCRIPTS to be created,
+# and recheck-html should rerun no tests if check has not been run.
+
+$MAKE clean
+test ! -e mylog.html
+run_make TEST_LOGS=foo.log check-html
+test -f bla
+test -f foo.log
+test ! -e bar.log
+test ! -e baz.log
+test -f mylog.html
+
+$MAKE clean
+run_make TESTS=foo.test recheck-html
+test -f bla
+test ! -e foo.log
+test -f mylog.html
+
+$MAKE clean
+$MAKE recheck-html
+test -f bla
+test ! -e foo.log
+test ! -e bar.log
+test ! -e baz.log
+test -f mylog.html
+
+:
diff --git a/contrib/tap-driver.pl b/contrib/tap-driver.pl
new file mode 100755
index 000000000..d631aba91
--- /dev/null
+++ b/contrib/tap-driver.pl
@@ -0,0 +1,563 @@
+#! /usr/bin/env perl
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+# ---------------------------------- #
+# Imports, static data, and setup. #
+# ---------------------------------- #
+
+use warnings FATAL => 'all';
+use strict;
+use Getopt::Long ();
+use TAP::Parser;
+
+my $VERSION = '2013-12-24.15'; # UTC
+
+my $ME = "tap-driver.pl";
+
+my $USAGE = <<'END';
+Usage:
+ tap-driver --test-name=NAME --log-file=PATH --trs-file=PATH
+ [--expect-failure={yes|no}] [--color-tests={yes|no}]
+ [--enable-hard-errors={yes|no}] [--ignore-exit]
+ [--diagnostic-string=STRING] [--merge|--no-merge]
+ [--comments|--no-comments] [--] TEST-COMMAND
+The '--test-name', '--log-file' and '--trs-file' options are mandatory.
+END
+
+my $HELP = "$ME: TAP-aware test driver for Automake testsuite harness." .
+ "\n" . $USAGE;
+
+# Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'.
+my %COLOR = (
+ red => "\e[0;31m",
+ grn => "\e[0;32m",
+ lgn => "\e[1;32m",
+ blu => "\e[1;34m",
+ mgn => "\e[0;35m",
+ brg => "\e[1m",
+ std => "\e[m",
+);
+
+# It's important that NO_PLAN evaluates "false" as a boolean.
+use constant NO_PLAN => 0;
+use constant EARLY_PLAN => 1;
+use constant LATE_PLAN => 2;
+
+# ------------------- #
+# Global variables. #
+# ------------------- #
+
+my $testno = 0; # Number of test results seen so far.
+my $bailed_out = 0; # Whether a "Bail out!" directive has been seen.
+my $parser; # TAP parser object (will be initialized later).
+
+# Whether the TAP plan has been seen or not, and if yes, which kind
+# it is ("early" is seen before any test result, "late" otherwise).
+my $plan_seen = NO_PLAN;
+
+# ----------------- #
+# Option parsing. #
+# ----------------- #
+
+my %cfg = (
+ "color-tests" => 0,
+ "expect-failure" => 0,
+ "merge" => 0,
+ "comments" => 0,
+ "ignore-exit" => 0,
+);
+
+my $test_script_name = undef;
+my $log_file = undef;
+my $trs_file = undef;
+my $diag_string = "#";
+
+Getopt::Long::GetOptions
+ (
+ 'help' => sub { print $HELP; exit 0; },
+ 'version' => sub { print "$ME $VERSION\n"; exit 0; },
+ 'test-name=s' => \$test_script_name,
+ 'log-file=s' => \$log_file,
+ 'trs-file=s' => \$trs_file,
+ 'color-tests=s' => \&bool_opt,
+ 'expect-failure=s' => \&bool_opt,
+ 'enable-hard-errors=s' => sub {}, # No-op.
+ 'diagnostic-string=s' => \$diag_string,
+ 'comments' => sub { $cfg{"comments"} = 1; },
+ 'no-comments' => sub { $cfg{"comments"} = 0; },
+ 'merge' => sub { $cfg{"merge"} = 1; },
+ 'no-merge' => sub { $cfg{"merge"} = 0; },
+ 'ignore-exit' => sub { $cfg{"ignore-exit"} = 1; },
+ ) or exit 1;
+
+# ------------- #
+# Prototypes. #
+# ------------- #
+
+sub add_test_result ($);
+sub bool_opt ($$);
+sub colored ($$);
+sub copy_in_global_log ();
+sub decorate_result ($);
+sub extract_tap_comment ($);
+sub finish ();
+sub get_global_test_result ();
+sub get_test_exit_message ();
+sub get_test_results ();
+sub handle_tap_bailout ($);
+sub handle_tap_plan ($);
+sub handle_tap_result ($);
+sub is_null_string ($);
+sub main (@);
+sub must_recheck ();
+sub report ($;$);
+sub setup_io ();
+sub setup_parser (@);
+sub stringify_result_obj ($);
+sub testsuite_error ($);
+sub trap_perl_warnings_and_errors ();
+sub write_test_results ();
+sub yn ($);
+
+# -------------- #
+# Subroutines. #
+# -------------- #
+
+sub bool_opt ($$)
+{
+ my ($opt, $val) = @_;
+ if ($val =~ /^(?:y|yes)\z/i)
+ {
+ $cfg{$opt} = 1;
+ }
+ elsif ($val =~ /^(?:n|no)\z/i)
+ {
+ $cfg{$opt} = 0;
+ }
+ else
+ {
+ die "$ME: invalid argument '$val' for option '$opt'\n";
+ }
+}
+
+# If the given string is undefined or empty, return true, otherwise
+# return false. This function is useful to avoid pitfalls like:
+# if ($message) { print "$message\n"; }
+# which wouldn't print anything if $message is the literal "0".
+sub is_null_string ($)
+{
+ my $str = shift;
+ return ! (defined $str and length $str);
+}
+
+# Convert a boolean to a "yes"/"no" string.
+sub yn ($)
+{
+ my $bool = shift;
+ return $bool ? "yes" : "no";
+}
+
+TEST_RESULTS :
+{
+ my (@test_results_list, %test_results_seen);
+
+ sub add_test_result ($)
+ {
+ my $res = shift;
+ push @test_results_list, $res;
+ $test_results_seen{$res} = 1;
+ }
+
+ sub get_test_results ()
+ {
+ return @test_results_list;
+ }
+
+ # Whether the test script should be re-run by "make recheck".
+ sub must_recheck ()
+ {
+ return grep { !/^(?:XFAIL|PASS|SKIP)$/ } (keys %test_results_seen);
+ }
+
+ # Whether the content of the log file associated to this test should
+ # be copied into the "global" test-suite.log.
+ sub copy_in_global_log ()
+ {
+ return grep { not $_ eq "PASS" } (keys %test_results_seen);
+ }
+
+ sub get_global_test_result ()
+ {
+ return "ERROR"
+ if $test_results_seen{"ERROR"};
+ return "FAIL"
+ if $test_results_seen{"FAIL"} || $test_results_seen{"XPASS"};
+ return "SKIP"
+ if scalar keys %test_results_seen == 1 && $test_results_seen{"SKIP"};
+ return "PASS";
+ }
+
+}
+
+sub write_test_results ()
+{
+ open RES, ">", $trs_file or die "$ME: opening $trs_file: $!\n";
+ print RES ":global-test-result: " . get_global_test_result . "\n";
+ print RES ":recheck: " . yn (must_recheck) . "\n";
+ print RES ":copy-in-global-log: " . yn (copy_in_global_log) . "\n";
+ foreach my $result (get_test_results)
+ {
+ print RES ":test-result: $result\n";
+ }
+ close RES or die "$ME: closing $trs_file: $!\n";
+}
+
+sub trap_perl_warnings_and_errors ()
+{
+ $SIG{__WARN__} = $SIG{__DIE__} = sub
+ {
+ # Be sure to send the warning/error message to the original stderr
+ # (presumably the console), not into the log file.
+ open STDERR, ">&OLDERR";
+ die @_;
+ }
+}
+
+sub setup_io ()
+{
+ # Redirect stderr and stdout to a temporary log file. Save the
+ # original stdout stream, since we need it to print testsuite
+ # progress output. Save original stderr stream, so that we can
+ # redirect warning and error messages from perl there.
+ open LOG, ">", $log_file or die "$ME: opening $log_file: $!\n";
+ open OLDOUT, ">&STDOUT" or die "$ME: duplicating stdout: $!\n";
+ open OLDERR, ">&STDERR" or die "$ME: duplicating stdout: $!\n";
+ *OLDERR = *OLDERR; # To pacify a "used only once" warning.
+ trap_perl_warnings_and_errors;
+ open STDOUT, ">&LOG" or die "$ME: redirecting stdout: $!\n";
+ open STDERR, ">&LOG" or die "$ME: redirecting stderr: $!\n";
+}
+
+sub setup_parser (@)
+{
+ local $@ = '';
+ eval { $parser = TAP::Parser->new ({exec => \@_, merge => $cfg{merge}}) };
+ if ($@ ne '')
+ {
+ # Don't use the error message in $@ as set by TAP::Parser, since
+ # currently it's both too generic (at the point of being basically
+ # useless) and quite long.
+ report "ERROR", "- couldn't execute test script";
+ finish;
+ }
+}
+
+sub get_test_exit_message ()
+{
+ my $wstatus = $parser->wait;
+ # Watch out for possible internal errors.
+ die "$ME: couldn't get the exit status of the TAP producer"
+ unless defined $wstatus;
+ # Return an undefined value if the producer exited with success.
+ return unless $wstatus;
+ # Otherwise, determine whether it exited with error or was terminated
+ # by a signal.
+ use POSIX qw (WIFEXITED WEXITSTATUS WIFSIGNALED WTERMSIG);
+ if (WIFEXITED ($wstatus))
+ {
+ return sprintf "exited with status %d", WEXITSTATUS ($wstatus);
+ }
+ elsif (WIFSIGNALED ($wstatus))
+ {
+ return sprintf "terminated by signal %d", WTERMSIG ($wstatus);
+ }
+ else
+ {
+ return "terminated abnormally";
+ }
+}
+
+sub stringify_result_obj ($)
+{
+ my $result_obj = shift;
+ my $COOKED_PASS = $cfg{"expect-failure"} ? "XPASS": "PASS";
+ my $COOKED_FAIL = $cfg{"expect-failure"} ? "XFAIL": "FAIL";
+ if ($result_obj->is_unplanned || $result_obj->number != $testno)
+ {
+ return "ERROR";
+ }
+ elsif ($plan_seen == LATE_PLAN)
+ {
+ return "ERROR";
+ }
+ elsif (!$result_obj->directive)
+ {
+ return $result_obj->is_ok ? $COOKED_PASS: $COOKED_FAIL;
+ }
+ elsif ($result_obj->has_todo)
+ {
+ return $result_obj->is_actual_ok ? "XPASS" : "XFAIL";
+ }
+ elsif ($result_obj->has_skip)
+ {
+ return $result_obj->is_ok ? "SKIP" : $COOKED_FAIL;
+ }
+ die "$ME: INTERNAL ERROR"; # NOTREACHED
+}
+
+sub colored ($$)
+{
+ my ($color_name, $text) = @_;
+ return $COLOR{$color_name} . $text . $COLOR{'std'};
+}
+
+sub decorate_result ($)
+{
+ my $result = shift;
+ return $result unless $cfg{"color-tests"};
+ my %color_for_result =
+ (
+ "ERROR" => 'mgn',
+ "PASS" => 'grn',
+ "XPASS" => 'red',
+ "FAIL" => 'red',
+ "XFAIL" => 'lgn',
+ "SKIP" => 'blu',
+ );
+ if (my $color = $color_for_result{$result})
+ {
+ return colored ($color, $result);
+ }
+ else
+ {
+ return $result; # Don't colorize unknown stuff.
+ }
+}
+
+sub report ($;$)
+{
+ my ($msg, $result, $explanation) = (undef, @_);
+ if ($result =~ /^(?:X?(?:PASS|FAIL)|SKIP|ERROR)/)
+ {
+ $msg = ": $test_script_name";
+ add_test_result $result;
+ }
+ elsif ($result eq "#")
+ {
+ $msg = " $test_script_name:";
+ }
+ else
+ {
+ die "$ME: INTERNAL ERROR"; # NOTREACHED
+ }
+ $msg .= " $explanation" if defined $explanation;
+ $msg .= "\n";
+ # Output on console might be colorized.
+ print OLDOUT decorate_result ($result) . $msg;
+ # Log the result in the log file too, to help debugging (this is
+ # especially true when said result is a TAP error or "Bail out!").
+ print $result . $msg;
+}
+
+sub testsuite_error ($)
+{
+ report "ERROR", "- $_[0]";
+}
+
+sub handle_tap_result ($)
+{
+ $testno++;
+ my $result_obj = shift;
+
+ my $test_result = stringify_result_obj $result_obj;
+ my $string = $result_obj->number;
+
+ my $description = $result_obj->description;
+ $string .= " $description"
+ unless is_null_string $description;
+
+ if ($plan_seen == LATE_PLAN)
+ {
+ $string .= " # AFTER LATE PLAN";
+ }
+ elsif ($result_obj->is_unplanned)
+ {
+ $string .= " # UNPLANNED";
+ }
+ elsif ($result_obj->number != $testno)
+ {
+ $string .= " # OUT-OF-ORDER (expecting $testno)";
+ }
+ elsif (my $directive = $result_obj->directive)
+ {
+ $string .= " # $directive";
+ my $explanation = $result_obj->explanation;
+ $string .= " $explanation"
+ unless is_null_string $explanation;
+ }
+
+ report $test_result, $string;
+}
+
+sub handle_tap_plan ($)
+{
+ my $plan = shift;
+ if ($plan_seen)
+ {
+ # Error, only one plan per stream is acceptable.
+ testsuite_error "multiple test plans";
+ return;
+ }
+ # The TAP plan can come before or after *all* the TAP results; we speak
+ # respectively of an "early" or a "late" plan. If we see the plan line
+ # after at least one TAP result has been seen, assume we have a late
+ # plan; in this case, any further test result seen after the plan will
+ # be flagged as an error.
+ $plan_seen = ($testno >= 1 ? LATE_PLAN : EARLY_PLAN);
+ # If $testno > 0, we have an error ("too many tests run") that will be
+ # automatically dealt with later, so don't worry about it here. If
+ # $plan_seen is true, we have an error due to a repeated plan, and that
+ # has already been dealt with above. Otherwise, we have a valid "plan
+ # with SKIP" specification, and should report it as a particular kind
+ # of SKIP result.
+ if ($plan->directive && $testno == 0)
+ {
+ my $explanation = is_null_string ($plan->explanation) ?
+ undef : "- " . $plan->explanation;
+ report "SKIP", $explanation;
+ }
+}
+
+sub handle_tap_bailout ($)
+{
+ my ($bailout, $msg) = ($_[0], "Bail out!");
+ $bailed_out = 1;
+ $msg .= " " . $bailout->explanation
+ unless is_null_string $bailout->explanation;
+ testsuite_error $msg;
+}
+
+sub extract_tap_comment ($)
+{
+ my $line = shift;
+ if (index ($line, $diag_string) == 0)
+ {
+ # Strip leading '$diag_string' from '$line'.
+ $line = substr ($line, length ($diag_string));
+ # And strip any leading and trailing whitespace left.
+ $line =~ s/(?:^\s*|\s*$)//g;
+ # Return what is left (if any).
+ return $line;
+ }
+ return "";
+}
+
+sub finish ()
+{
+ write_test_results;
+ close LOG or die "$ME: closing $log_file: $!\n";
+ exit 0;
+}
+
+sub main (@)
+{
+ setup_io;
+ setup_parser @_;
+
+ while (defined (my $cur = $parser->next))
+ {
+ # Verbatim copy any input line into the log file.
+ print $cur->raw . "\n";
+ # Parsing of TAP input should stop after a "Bail out!" directive.
+ next if $bailed_out;
+
+ if ($cur->is_plan)
+ {
+ handle_tap_plan ($cur);
+ }
+ elsif ($cur->is_test)
+ {
+ handle_tap_result ($cur);
+ }
+ elsif ($cur->is_bailout)
+ {
+ handle_tap_bailout ($cur);
+ }
+ elsif ($cfg{comments})
+ {
+ my $comment = extract_tap_comment ($cur->raw);
+ report "#", "$comment" if length $comment;
+ }
+ }
+ # A "Bail out!" directive should cause us to ignore any following TAP
+ # error, as well as a non-zero exit status from the TAP producer.
+ if (!$bailed_out)
+ {
+ if (!$plan_seen)
+ {
+ testsuite_error "missing test plan";
+ }
+ elsif ($parser->tests_planned != $parser->tests_run)
+ {
+ my ($planned, $run) = ($parser->tests_planned, $parser->tests_run);
+ my $bad_amount = $run > $planned ? "many" : "few";
+ testsuite_error (sprintf "too %s tests run (expected %d, got %d)",
+ $bad_amount, $planned, $run);
+ }
+ if (!$cfg{"ignore-exit"})
+ {
+ my $msg = get_test_exit_message ();
+ testsuite_error $msg if $msg;
+ }
+ }
+ finish;
+}
+
+# ----------- #
+# Main code. #
+# ----------- #
+
+main @ARGV;
+
+# Local Variables:
+# perl-indent-level: 2
+# perl-continued-statement-offset: 2
+# perl-continued-brace-offset: 0
+# perl-brace-offset: 0
+# perl-brace-imaginary-offset: 0
+# perl-label-offset: -2
+# cperl-indent-level: 2
+# cperl-brace-offset: 0
+# cperl-continued-brace-offset: 0
+# cperl-label-offset: -2
+# cperl-extra-newline-before-brace: t
+# cperl-merge-trailing-else: nil
+# cperl-continued-statement-offset: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "my $VERSION = "
+# time-stamp-format: "'%:y-%02m-%02d.%02H'"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/doc/amhello/Makefile.am b/doc/amhello/Makefile.am
new file mode 100644
index 000000000..706c2f298
--- /dev/null
+++ b/doc/amhello/Makefile.am
@@ -0,0 +1,6 @@
+# Copyright (C) 2006-2017 Free Software Foundation, Inc.
+# This Makefile.am is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+
+SUBDIRS = src
+dist_doc_DATA = README
diff --git a/doc/amhello/README b/doc/amhello/README
new file mode 100644
index 000000000..d24723a81
--- /dev/null
+++ b/doc/amhello/README
@@ -0,0 +1,2 @@
+This is a demonstration package for GNU Automake.
+Type `info Automake' to read the Automake manual.
diff --git a/doc/amhello/configure.ac b/doc/amhello/configure.ac
new file mode 100644
index 000000000..381344d7a
--- /dev/null
+++ b/doc/amhello/configure.ac
@@ -0,0 +1,13 @@
+# Copyright (C) 2006-2017 Free Software Foundation, Inc.
+# This configure.ac script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+
+AC_INIT([amhello], [1.0], [bug-automake@gnu.org])
+AM_INIT_AUTOMAKE([-Wall -Werror foreign])
+AC_PROG_CC
+AC_CONFIG_HEADERS([config.h])
+AC_CONFIG_FILES([
+ Makefile
+ src/Makefile
+])
+AC_OUTPUT
diff --git a/doc/amhello/src/Makefile.am b/doc/amhello/src/Makefile.am
new file mode 100644
index 000000000..e52ff3c3b
--- /dev/null
+++ b/doc/amhello/src/Makefile.am
@@ -0,0 +1,6 @@
+# Copyright (C) 2006-2017 Free Software Foundation, Inc.
+# This Makefile.am is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+
+bin_PROGRAMS = hello
+hello_SOURCES = main.c
diff --git a/doc/amhello/src/main.c b/doc/amhello/src/main.c
new file mode 100644
index 000000000..7a7ebec77
--- /dev/null
+++ b/doc/amhello/src/main.c
@@ -0,0 +1,14 @@
+/* Copyright (C) 2006-2017 Free Software Foundation, Inc.
+ This program is free software; the Free Software Foundation
+ gives unlimited permission to copy, distribute and modify it. */
+
+#include <config.h>
+#include <stdio.h>
+
+int
+main (void)
+{
+ puts ("Hello World!");
+ puts ("This is " PACKAGE_STRING ".");
+ return 0;
+}
diff --git a/doc/automake-history.texi b/doc/automake-history.texi
new file mode 100644
index 000000000..75141f97a
--- /dev/null
+++ b/doc/automake-history.texi
@@ -0,0 +1,1214 @@
+\input texinfo @c -*-texinfo-*-
+@c %**start of header
+@setfilename automake-history.info
+@settitle automake-history
+@setchapternewpage on
+@c %**end of header
+
+@copying
+
+This manual describes (part of) the history of GNU Automake, a program
+that creates GNU standards-compliant Makefiles from template files.
+
+Copyright @copyright{} 1995-2017 Free Software Foundation, Inc.
+
+@quotation
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License,
+Version 1.3 or any later version published by the Free Software
+Foundation; with no Invariant Sections, with no Front-Cover texts,
+and with no Back-Cover Texts. A copy of the license is included in the
+section entitled ``GNU Free Documentation License.''
+
+@end quotation
+@end copying
+
+@titlepage
+@title Brief History of Automake
+@author David MacKenzie
+@author Tom Tromey
+@author Alexandre Duret-Lutz
+@page
+@vskip 0pt plus 1filll
+@insertcopying
+@end titlepage
+
+@contents
+
+@ifnottex
+@node Top
+@comment node-name, next, previous, up
+@top Brief History of Automake
+
+@insertcopying
+
+@menu
+* Timeline:: The Automake story.
+* Dependency Tracking Evolution:: Evolution of Automatic Dependency Tracking
+* Releases:: Release statistics
+* Copying This Manual:: How to make copies of this manual
+
+@detailmenu
+ --- The Detailed Node Listing ---
+
+Evolution of Automatic Dependency Tracking
+
+* First Take on Dependencies:: Precomputed dependency tracking
+* Dependencies As Side Effects:: Update at developer compile time
+* Dependencies for the User:: Update at user compile time
+* Techniques for Dependencies:: Alternative approaches
+
+Techniques for Computing Dependencies
+
+* Recommendations for Tool Writers::
+* Future Directions for Dependencies::
+
+Copying This Manual
+
+* GNU Free Documentation License:: License for copying this manual
+
+@end detailmenu
+@end menu
+
+@end ifnottex
+
+@node Timeline
+@chapter Timeline
+
+@table @asis
+@item 1994-09-19 First CVS commit.
+
+If we can trust the CVS repository, David J.@tie{}MacKenzie (djm) started
+working on Automake (or AutoMake, as it was spelt then) this Monday.
+
+The first version of the @command{automake} script looks as follows.
+
+@example
+#!/bin/sh
+
+status=0
+
+for makefile
+do
+ if test ! -f $@{makefile@}.am; then
+ echo "automake: $@{makefile@}.am: No such honkin' file"
+ status=1
+ continue
+ fi
+
+ exec 4> $@{makefile@}.in
+
+done
+@end example
+
+From this you can already see that Automake will be about reading
+@file{*.am} file and producing @file{*.in} files. You cannot see
+anything else, but if you also know that David is the one who created
+Autoconf two years before you can guess the rest.
+
+Several commits follow, and by the end of the day Automake is
+reported to work for GNU fileutils and GNU m4.
+
+The modus operandi is the one that is still used today: variable
+assignments in @file{Makefile.am} files trigger injections of
+precanned @file{Makefile} fragments into the generated
+@file{Makefile.in}. The use of @file{Makefile} fragments was inspired
+by the 4.4BSD @command{make} and include files, however Automake aims
+to be portable and to conform to the GNU standards for @file{Makefile}
+variables and targets.
+
+At this point, the most recent release of Autoconf is version 1.11,
+and David is preparing to release Autoconf 2.0 in late October. As a
+matter of fact, he will barely touch Automake after September.
+
+@item 1994-11-05 David MacKenzie's last commit.
+
+At this point Automake is a 200 line portable shell script, plus 332
+lines of @file{Makefile} fragments. In the @file{README}, David
+states his ambivalence between ``portable shell'' and ``more
+appropriate language'':
+
+@quotation
+I wrote it keeping in mind the possibility of it becoming an Autoconf
+macro, so it would run at configure-time. That would slow
+configuration down a bit, but allow users to modify the Makefile.am
+without needing to fetch the AutoMake package. And, the Makefile.in
+files wouldn't need to be distributed. But all of AutoMake would. So
+I might reimplement AutoMake in Perl, m4, or some other more
+appropriate language.
+@end quotation
+
+Automake is described as ``an experimental Makefile generator''.
+There is no documentation. Adventurous users are referred to the
+examples and patches needed to use Automake with GNU m4 1.3, fileutils
+3.9, time 1.6, and development versions of find and indent.
+
+These examples seem to have been lost. However at the time of writing
+(10 years later in September, 2004) the FSF still distributes a
+package that uses this version of Automake: check out GNU termutils
+2.0.
+
+@item 1995-11-12 Tom Tromey's first commit.
+
+After one year of inactivity, Tom Tromey takes over the package.
+Tom was working on GNU cpio back then, and doing this just for fun,
+having trouble finding a project to contribute to. So while hacking
+he wanted to bring the @file{Makefile.in} up to GNU standards. This
+was hard, and one day he saw Automake on @url{ftp://alpha.gnu.org/},
+grabbed it and tried it out.
+
+Tom didn't talk to djm about it until later, just to make sure he
+didn't mind if he made a release. He did a bunch of early releases to
+the Gnits folks.
+
+Gnits was (and still is) totally informal, just a few GNU friends who
+Fran@,cois Pinard knew, who were all interested in making a common
+infrastructure for GNU projects, and shared a similar outlook on how
+to do it. So they were able to make some progress. It came along
+with Autoconf and extensions thereof, and then Automake from David and
+Tom (who were both gnitsians). One of their ideas was to write a
+document paralleling the GNU standards, that was more strict in some
+ways and more detailed. They never finished the GNITS standards, but
+the ideas mostly made their way into Automake.
+
+@item 1995-11-23 Automake 0.20
+
+Besides introducing automatic dependency tracking (@pxref{Dependency
+Tracking Evolution}), this version also supplies a 9-page manual.
+
+At this time @command{aclocal} and @code{AM_INIT_AUTOMAKE} did not
+exist, so many things had to be done by hand. For instance, here is
+what a configure.in (this is the former name of the
+@file{configure.ac} we use today) must contain in order to use
+Automake 0.20:
+
+@example
+PACKAGE=cpio
+VERSION=2.3.911
+AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE")
+AC_DEFINE_UNQUOTED(VERSION, "$VERSION")
+AC_SUBST(PACKAGE)
+AC_SUBST(VERSION)
+AC_ARG_PROGRAM
+AC_PROG_INSTALL
+@end example
+
+(Today all of the above is achieved by @code{AC_INIT} and
+@code{AM_INIT_AUTOMAKE}.)
+
+Here is how programs are specified in @file{Makefile.am}:
+
+@example
+PROGRAMS = hello
+hello_SOURCES = hello.c
+@end example
+
+This looks pretty much like what we do today, except the
+@code{PROGRAMS} variable has no directory prefix specifying where
+@file{hello} should be installed: all programs are installed in
+@samp{$(bindir)}. @code{LIBPROGRAMS} can be used to specify programs
+that must be built but not installed (it is called
+@code{noinst_PROGRAMS} nowadays).
+
+Programs can be built conditionally using @code{AC_SUBST}itutions:
+
+@example
+PROGRAMS = @@progs@@
+AM_PROGRAMS = foo bar baz
+@end example
+
+(@code{AM_PROGRAMS} has since then been renamed to
+@code{EXTRA_PROGRAMS}.)
+
+Similarly scripts, static libraries, and data can be built and installed
+using the @code{LIBRARIES}, @code{SCRIPTS}, and @code{DATA} variables.
+However @code{LIBRARIES} were treated a bit specially in that Automake
+did automatically supply the @file{lib} and @file{.a} prefixes.
+Therefore to build @file{libcpio.a}, one had to write
+
+@example
+LIBRARIES = cpio
+cpio_SOURCES = ...
+@end example
+
+Extra files to distribute must be listed in @code{DIST_OTHER} (the
+ancestor of @code{EXTRA_DIST}). Also extra directories that are to be
+distributed should appear in @code{DIST_SUBDIRS}, but the manual
+describes this as a temporary ugly hack (today extra directories should
+also be listed in @code{EXTRA_DIST}, and @code{DIST_SUBDIRS} is used
+for another purpose, @pxref{Conditional Subdirectories, , Conditional
+Subdirectories, automake, GNU Automake}).
+
+@item 1995-11-26 Automake 0.21
+
+In less time than it takes to cook a frozen pizza, Tom rewrites
+Automake using Perl. At this time Perl 5 is only one year old, and
+Perl 4.036 is in use at many sites. Supporting several Perl versions
+has been a source of problems through the whole history of Automake.
+
+If you never used Perl 4, imagine Perl 5 without objects, without
+@samp{my} variables (only dynamically scoped @samp{local} variables),
+without function prototypes, with function calls that needs to be
+prefixed with @samp{&}, etc. Traces of this old style can still be
+found in today's @command{automake}.
+
+@item 1995-11-28 Automake 0.22
+@itemx 1995-11-29 Automake 0.23
+
+Bug fixes.
+
+@item 1995-12-08 Automake 0.24
+@itemx 1995-12-10 Automake 0.25
+
+Releases are raining. 0.24 introduces the uniform naming scheme we
+use today, i.e., @code{bin_PROGRAMS} instead of @code{PROGRAMS},
+@code{noinst_LIBRARIES} instead of @code{LIBLIBRARIES}, etc. (However
+@code{EXTRA_PROGRAMS} does not exist yet, @code{AM_PROGRAMS} is still
+in use; and @code{TEXINFOS} and @code{MANS} still have no directory
+prefixes.) Adding support for prefixes like that was one of the major
+ideas in @command{automake}; it has lasted pretty well.
+
+AutoMake is renamed to Automake (Tom seems to recall it was Fran@,cois
+Pinard's doing).
+
+0.25 fixes a Perl 4 portability bug.
+
+@item 1995-12-18 Jim Meyering starts using Automake in GNU Textutils.
+@item 1995-12-31 Fran@,cois Pinard starts using Automake in GNU tar.
+
+@item 1996-01-03 Automake 0.26
+@itemx 1996-01-03 Automake 0.27
+
+Of the many changes and suggestions sent by Fran@,cois Pinard and
+included in 0.26, perhaps the most important is the advice that to
+ease customization a user rule or variable definition should always
+override an Automake rule or definition.
+
+Gordon Matzigkeit and Jim Meyering are two other early contributors
+that have been sending fixes.
+
+0.27 fixes yet another Perl 4 portability bug.
+
+@item 1996-01-13 Automake 0.28
+
+Automake starts scanning @file{configure.in} for @code{LIBOBJS}
+support. This is an important step because until this version
+Automake only knew about the @file{Makefile.am}s it processed.
+@file{configure.in} was Autoconf's world and the link between Autoconf
+and Automake had to be done by the @file{Makefile.am} author. For
+instance, if @file{config.h} was generated by @file{configure}, it was the
+package maintainer's responsibility to define the @code{CONFIG_HEADER}
+variable in each @file{Makefile.am}.
+
+Succeeding releases will rely more and more on scanning
+@file{configure.in} to better automate the Autoconf integration.
+
+0.28 also introduces the @code{AUTOMAKE_OPTIONS} variable and the
+@option{--gnu} and @option{--gnits} options, the latter being stricter.
+
+@item 1996-02-07 Automake 0.29
+
+Thanks to @file{configure.in} scanning, @code{CONFIG_HEADER} is gone,
+and rebuild rules for @file{configure}-generated file are
+automatically output.
+
+@code{TEXINFOS} and @code{MANS} converted to the uniform naming
+scheme.
+
+@item 1996-02-24 Automake 0.30
+
+The test suite is born. It contains 9 tests. From now on test cases
+will be added pretty regularly (@pxref{Releases}), and this proved to
+be really helpful later on.
+
+@code{EXTRA_PROGRAMS} finally replaces @code{AM_PROGRAMS}.
+
+All the third-party Autoconf macros, written mostly by Fran@,cois
+Pinard (and later Jim Meyering), are distributed in Automake's
+hand-written @file{aclocal.m4} file. Package maintainers are expected
+to extract the necessary macros from this file. (In previous versions
+you had to copy and paste them from the manual...)
+
+@item 1996-03-11 Automake 0.31
+
+The test suite in 0.30 was run via a long @code{check-local} rule. Upon
+Ulrich Drepper's suggestion, 0.31 makes it an Automake rule output
+whenever the @code{TESTS} variable is defined.
+
+@code{DIST_OTHER} is renamed to @code{EXTRA_DIST}, and the @code{check_}
+prefix is introduced. The syntax is now the same as today.
+
+@item 1996-03-15 Gordon Matzigkeit starts writing libtool.
+
+@item 1996-04-27 Automake 0.32
+
+@code{-hook} targets are introduced; an idea from Dieter Baron.
+
+@file{*.info} files, which were output in the build directory are
+now built in the source directory, because they are distributed. It
+seems these files like to move back and forth as that will happen
+again in future versions.
+
+@item 1996-05-18 Automake 0.33
+
+Gord Matzigkeit's main two contributions:
+
+@itemize
+@item very preliminary libtool support
+@item the distcheck rule
+@end itemize
+
+Although they were very basic at this point, these are probably
+among the top features for Automake today.
+
+Jim Meyering also provides the infamous @code{jm_MAINTAINER_MODE}, since
+then renamed to @code{AM_MAINTAINER_MODE} and abandoned by its author
+(@pxref{maintainer-mode, , maintainer-mode, automake, GNU Automake}).
+
+@item 1996-05-28 Automake 1.0
+
+After only six months of heavy development, the @command{automake} script is
+3134 lines long, plus 973 lines of @file{Makefile} fragments. The
+package has 30 pages of documentation, and 38 test cases.
+@file{aclocal.m4} contains 4 macros.
+
+From now on and until version 1.4, new releases will occur at a rate
+of about one a year. 1.1 did not exist, actually 1.1b to 1.1p have
+been the name of beta releases for 1.2. This is the first time
+Automake uses suffix letters to designate beta releases, a habit that
+lasts.
+
+@item 1996-10-10 Kevin Dalley packages Automake 1.0 for Debian GNU/Linux.
+
+@item 1996-11-26 David J.@tie{}MacKenzie releases Autoconf 2.12.
+
+Between June and October, the Autoconf development is almost stalled.
+Roland McGrath has been working at the beginning of the year. David
+comes back in November to release 2.12, but he won't touch Autoconf
+anymore after this year, and Autoconf then really stagnates. The
+desolate Autoconf @file{ChangeLog} for 1997 lists only 7 commits.
+
+@item 1997-02-28 @email{automake@@gnu.ai.mit.edu} list alive
+
+The mailing list is announced as follows:
+@smallexample
+I've created the "automake" mailing list. It is
+"automake@@gnu.ai.mit.edu". Administrivia, as always, to
+automake-request@@gnu.ai.mit.edu.
+
+The charter of this list is discussion of automake, autoconf, and
+other configuration/portability tools (e.g., libtool). It is expected
+that discussion will range from pleas for help all the way up to
+patches.
+
+This list is archived on the FSF machines. Offhand I don't know if
+you can get the archive without an account there.
+
+This list is open to anybody who wants to join. Tell all your
+friends!
+-- Tom Tromey
+@end smallexample
+
+Before that people were discussing Automake privately, on the Gnits
+mailing list (which is not public either), and less frequently on
+@code{gnu.misc.discuss}.
+
+@code{gnu.ai.mit.edu} is now @code{gnu.org}, in case you never
+noticed. The archives of the early years of the
+@code{automake@@gnu.org} list have been lost, so today it is almost
+impossible to find traces of discussions that occurred before 1999.
+This has been annoying more than once, as such discussions can be
+useful to understand the rationale behind a piece of uncommented code
+that was introduced back then.
+
+@item 1997-06-22 Automake 1.2
+
+Automake developments continues, and more and more new Autoconf macros
+are required. Distributing them in @file{aclocal.m4} and requiring
+people to browse this file to extract the relevant macros becomes
+uncomfortable. Ideally, some of them should be contributed to
+Autoconf so that they can be used directly, however Autoconf is
+currently inactive. Automake 1.2 consequently introduces
+@command{aclocal} (@command{aclocal} was actually started on
+1996-07-28), a tool that automatically constructs an @file{aclocal.m4}
+file from a repository of third-party macros. Because Autoconf has
+stalled, Automake also becomes a kind of repository for such
+third-party macros, even macros completely unrelated to Automake (for
+instance macros that fix broken Autoconf macros).
+
+The 1.2 release contains 20 macros, including the
+@code{AM_INIT_AUTOMAKE} macro that simplifies the creation of
+@file{configure.in}.
+
+Libtool is fully supported using @code{*_LTLIBRARIES}.
+
+The missing script is introduced by Fran@,cois Pinard; it is meant
+to be a better solution than @code{AM_MAINTAINER_MODE}
+(@pxref{maintainer-mode, , maintainer-mode, automake, GNU Automake}).
+
+Conditionals support was implemented by Ian Lance Taylor. At the
+time, Tom and Ian were working on an internal project at Cygnus. They
+were using ILU, which is pretty similar to CORBA@. They wanted to
+integrate ILU into their build, which was all @file{configure}-based,
+and Ian thought that adding conditionals to @command{automake} was
+simpler than doing all the work in @file{configure} (which was the
+standard at the time). So this was actually funded by Cygnus.
+
+This very useful but tricky feature will take a lot of time to
+stabilize. (At the time this text is written, there are still
+primaries that have not been updated to support conditional
+definitions in Automake 1.9.)
+
+The @command{automake} script has almost doubled: 6089 lines of Perl,
+plus 1294 lines of @file{Makefile} fragments.
+
+@item 1997-07-08 Gordon Matzigkeit releases Libtool 1.0.
+
+@item 1998-04-05 Automake 1.3
+
+This is a small advance compared to 1.2.
+It adds support for assembly, and preliminary support for Java.
+
+Perl 5.004_04 is out, but fixes to support Perl 4 are still
+regularly submitted whenever Automake breaks it.
+
+@item 1998-09-06 @code{sourceware.cygnus.com} is on-line.
+
+Sourceware was setup by Jason Molenda to host open source projects.
+
+@item 1998-09-19 Automake CVS repository moved to @code{sourceware.cygnus.com}
+@itemx 1998-10-26 @code{sourceware.cygnus.com} announces it hosts Automake:
+Automake is now hosted on @code{sourceware.cygnus.com}. It has a
+publicly accessible CVS repository. This CVS repository is a copy of
+the one Tom was using on his machine, which in turn is based on
+a copy of the CVS repository of David MacKenzie. This is why we still
+have to full source history. (Automake was on Sourceware until 2007-10-29,
+when it moved to a git repository on @code{savannah.gnu.org},
+but the Sourceware host had been renamed to @code{sources.redhat.com}.)
+
+The oldest file in the administrative directory of the CVS repository
+that was created on Sourceware is dated 1998-09-19, while the
+announcement that @command{automake} and @command{autoconf} had joined
+@command{sourceware} was made on 1998-10-26. They were among the
+first projects to be hosted there.
+
+The heedful reader will have noticed Automake was exactly 4 years old
+on 1998-09-19.
+
+@item 1999-01-05 Ben Elliston releases Autoconf 2.13.
+
+@item 1999-01-14 Automake 1.4
+
+This release adds support for Fortran 77 and for the @code{include}
+statement. Also, @samp{+=} assignments are introduced, but it is
+still quite easy to fool Automake when mixing this with conditionals.
+
+These two releases, Automake 1.4 and Autoconf 2.13 make a duo that
+will be used together for years.
+
+@command{automake} is 7228 lines, plus 1591 lines of Makefile
+fragment, 20 macros (some 1.3 macros were finally contributed back to
+Autoconf), 197 test cases, and 51 pages of documentation.
+
+@item 1999-03-27 The @code{user-dep-branch} is created on the CVS repository.
+
+This implements a new dependency tracking schemed that should be
+able to handle automatic dependency tracking using any compiler (not
+just gcc) and any make (not just GNU @command{make}). In addition,
+the new scheme should be more reliable than the old one, as
+dependencies are generated on the end user's machine. Alexandre Oliva
+creates depcomp for this purpose.
+
+@xref{Dependency Tracking Evolution}, for more details about the
+evolution of automatic dependency tracking in Automake.
+
+@item 1999-11-21 The @code{user-dep-branch} is merged into the main trunk.
+
+This was a huge problem since we also had patches going in on the
+trunk. The merge took a long time and was very painful.
+
+@item 2000-05-10
+
+Since September 1999 and until 2003, Akim Demaille will be zealously
+revamping Autoconf.
+
+@quotation
+I think the next release should be called "3.0".@*
+Let's face it: you've basically rewritten autoconf.@*
+Every weekend there are 30 new patches.@*
+I don't see how we could call this "2.15" with a straight face.@*
+-- Tom Tromey on @email{autoconf@@gnu.org}
+@end quotation
+
+Actually Akim works like a submarine: he will pile up patches while he
+works off-line during the weekend, and flush them in batch when he
+resurfaces on Monday.
+
+@item 2001-01-24
+
+On this Wednesday, Autoconf 2.49c, the last beta before Autoconf 2.50
+is out, and Akim has to find something to do during his week-end :)
+
+@item 2001-01-28
+
+Akim sends a batch of 14 patches to @email{automake@@gnu.org}.
+
+@quotation
+Aiieeee! I was dreading the day that the Demaillator turned his
+sights on automake@dots{} and now it has arrived! -- Tom Tromey
+@end quotation
+
+It's only the beginning: in two months he will send 192 patches. Then
+he would slow down so Tom can catch up and review all this. Initially
+Tom actually read all of these patches, then he probably trustingly
+answered OK to most of them, and finally gave up and let Akim apply
+whatever he wanted. There was no way to keep up with that patch rate.
+
+@quotation
+Anyway the patch below won't apply since it predates Akim's
+sourcequake; I have yet to figure where the relevant passage has
+been moved :) -- Alexandre Duret-Lutz
+@end quotation
+
+All of these patches were sent to and discussed on
+@email{automake@@gnu.org}, so subscribed users were literally drowning in
+technical mails. Eventually, the @email{automake-patches@@gnu.org}
+mailing list was created in May.
+
+Year after year, Automake had drifted away from its initial design:
+construct @file{Makefile.in} by assembling various @file{Makefile}
+fragments. In 1.4, lots of @file{Makefile} rules are being emitted at
+various places in the @command{automake} script itself; this does not
+help ensuring a consistent treatment of these rules (for instance
+making sure that user-defined rules override Automake's own rules).
+One of Akim's goal was moving all of these hard-coded rules to separate
+@file{Makefile} fragments, so the logic could be centralized in a
+@file{Makefile} fragment processor.
+
+Another significant contribution of Akim is the interface with the
+``trace'' feature of Autoconf. The way to scan @file{configure.in} at
+this time was to read the file and grep the various macro of interest
+to Automake. Doing so could break in many unexpected ways; @command{automake}
+could miss some definition (for instance @samp{AC_SUBST([$1], [$2])}
+where the arguments are known only when M4 is run), or conversely it
+could detect some macro that was not expanded (because it is called
+conditionally). In the CVS version of Autoconf, Akim had implemented
+the @option{--trace} option, which provides accurate information about
+where macros are actually called and with what arguments. Akim will
+equip Automake with a second @file{configure.in} scanner that uses
+this @option{--trace} interface. Since it was not sensible to drop the
+Autoconf 2.13 compatibility yet, this experimental scanner was only
+used when an environment variable was set, the traditional
+grep-scanner being still the default.
+
+@item 2001-04-25 Gary V.@tie{}Vaughan releases Libtool 1.4
+
+It has been more than two years since Automake 1.4, CVS Automake has
+suffered lot's of heavy changes and still is not ready for release.
+Libtool 1.4 had to be distributed with a patch against Automake 1.4.
+
+@item 2001-05-08 Automake 1.4-p1
+@itemx 2001-05-24 Automake 1.4-p2
+
+Gary V.@tie{}Vaughan, the principal Libtool maintainer, makes a ``patch
+release'' of Automake:
+
+@quotation
+The main purpose of this release is to have a stable automake
+which is compatible with the latest stable libtool.
+@end quotation
+
+The release also contains obvious fixes for bugs in Automake 1.4,
+some of which were reported almost monthly.
+
+@item 2001-05-21 Akim Demaille releases Autoconf 2.50
+
+@item 2001-06-07 Automake 1.4-p3
+@itemx 2001-06-10 Automake 1.4-p4
+@itemx 2001-07-15 Automake 1.4-p5
+
+Gary continues his patch-release series. These also add support for
+some new Autoconf 2.50 idioms. Essentially, Autoconf now advocates
+@file{configure.ac} over @file{configure.in}, and it introduces a new
+syntax for @code{AC_OUTPUT}ing files.
+
+@item 2001-08-23 Automake 1.5
+
+A major and long-awaited release, that comes more than two years after
+1.4. It brings many changes, among which:
+@itemize
+@item The new dependency tracking scheme that uses @command{depcomp}.
+Aside from the improvement on the dependency tracking itself
+(@pxref{Dependency Tracking Evolution}), this also streamlines the use
+of @command{automake}-generated @file{Makefile.in}s as the @file{Makefile.in}s
+used during development are now the same as those used in
+distributions. Before that the @file{Makefile.in}s generated for
+maintainers required GNU @command{make} and GCC, they were different
+from the portable @file{Makefile} generated for distribution; this was
+causing some confusion.
+
+@item Support for per-target compilation flags.
+
+@item Support for reference to files in subdirectories in most
+@file{Makefile.am} variables.
+
+@item Introduction of the @code{dist_}, @code{nodist_}, and @code{nobase_}
+prefixes.
+@item Perl 4 support is finally dropped.
+@end itemize
+
+1.5 did break several packages that worked with 1.4. Enough so that
+Linux distributions could not easily install the new Automake version
+without breaking many of the packages for which they had to run
+@command{automake}.
+
+Some of these breakages were effectively bugs that would eventually be
+fixed in the next release. However, a lot of damage was caused by
+some changes made deliberately to render Automake stricter on some
+setup we did consider bogus. For instance, @samp{make distcheck} was
+improved to check that @samp{make uninstall} did remove all the files
+@samp{make install} installed, that @samp{make distclean} did not omit
+some file, and that a VPATH build would work even if the source
+directory was read-only. Similarly, Automake now rejects multiple
+definitions of the same variable (because that would mix very badly
+with conditionals), and @samp{+=} assignments with no previous
+definition. Because these changes all occurred suddenly after 1.4 had
+been established for more than two years, it hurt users.
+
+To make matter worse, meanwhile Autoconf (now at version 2.52) was
+facing similar troubles, for similar reasons.
+
+@item 2002-03-05 Automake 1.6
+
+This release introduced versioned installation (@pxref{API Versioning, ,
+API Versioning, automake, GNU Automake}). This was mainly pushed by
+Havoc Pennington, taking the GNOME source tree as motive: due to
+incompatibilities between the autotools it's impossible for the GNOME
+packages to switch to Autoconf 2.53 and Automake 1.5 all at once, so
+they are currently stuck with Autoconf 2.13 and Automake 1.4.
+
+The idea was to call this version @file{automake-1.6}, call all its
+bug-fix versions identically, and switch to @file{automake-1.7} for
+the next release that adds new features or changes some rules. This
+scheme implies maintaining a bug-fix branch in addition to the
+development trunk, which means more work from the maintainer, but
+providing regular bug-fix releases proved to be really worthwhile.
+
+Like 1.5, 1.6 also introduced a bunch of incompatibilities, intentional or
+not. Perhaps the more annoying was the dependence on the newly
+released Autoconf 2.53. Autoconf seemed to have stabilized enough
+since its explosive 2.50 release and included changes required to fix
+some bugs in Automake. In order to upgrade to Automake 1.6, people
+now had to upgrade Autoconf too; for some packages it was no picnic.
+
+While versioned installation helped people to upgrade, it also
+unfortunately allowed people not to upgrade. At the time of writing,
+some Linux distributions are shipping packages for Automake 1.4, 1.5,
+1.6, 1.7, 1.8, and 1.9. Most of these still install 1.4 by default.
+Some distribution also call 1.4 the ``stable'' version, and present
+``1.9'' as the development version; this does not really makes sense
+since 1.9 is way more solid than 1.4. All this does not help the
+newcomer.
+
+@item 2002-04-11 Automake 1.6.1
+
+1.6, and the upcoming 1.4-p6 release were the last release by Tom.
+This one and those following will be handled by Alexandre
+Duret-Lutz. Tom is still around, and will be there until about 1.7,
+but his interest into Automake is drifting away towards projects like
+@command{gcj}.
+
+Alexandre has been using Automake since 2000, and started to
+contribute mostly on Akim's incitement (Akim and Alexandre have been
+working in the same room from 1999 to 2002). In 2001 and 2002 he had
+a lot of free time to enjoy hacking Automake.
+
+@item 2002-06-14 Automake 1.6.2
+
+@item 2002-07-28 Automake 1.6.3
+@itemx 2002-07-28 Automake 1.4-p6
+
+Two releases on the same day. 1.6.3 is a bug-fix release.
+
+Tom Tromey backported the versioned installation mechanism on the 1.4
+branch, so that Automake 1.6.x and Automake 1.4-p6 could be installed
+side by side. Another request from the GNOME folks.
+
+@item 2002-09-25 Automake 1.7
+
+This release switches to the new @file{configure.ac} scanner Akim
+was experimenting in 1.5.
+
+@item 2002-10-16 Automake 1.7.1
+@itemx 2002-12-06 Automake 1.7.2
+@itemx 2003-02-20 Automake 1.7.3
+@itemx 2003-04-23 Automake 1.7.4
+@itemx 2003-05-18 Automake 1.7.5
+@itemx 2003-07-10 Automake 1.7.6
+@itemx 2003-09-07 Automake 1.7.7
+@itemx 2003-10-07 Automake 1.7.8
+
+Many bug-fix releases. 1.7 lasted because the development version
+(upcoming 1.8) was suffering some major internal revamping.
+
+@item 2003-10-26 Automake on screen
+
+Episode 49, `Repercussions', in the third season of the `Alias' TV
+show is first aired.
+
+Marshall, one of the characters, is working on a computer virus that he
+has to modify before it gets into the wrong hands or something like
+that. The screenshots you see do not show any program code, they show
+a @file{Makefile.in} generated by automake...
+
+@item 2003-11-09 Automake 1.7.9
+
+@item 2003-12-10 Automake 1.8
+
+The most striking update is probably that of @command{aclocal}.
+
+@command{aclocal} now uses @code{m4_include} in the produced
+@file{aclocal.m4} when the included macros are already distributed
+with the package (an idiom used in many packages), which reduces code
+duplication. Many people liked that, but in fact this change was
+really introduced to fix a bug in rebuild rules: @file{Makefile.in}
+must be rebuilt whenever a dependency of @file{configure} changes, but
+all the @file{m4} files included in @file{aclocal.m4} where unknown
+from @command{automake}. Now @command{automake} can just trace the
+@code{m4_include}s to discover the dependencies.
+
+@command{aclocal} also starts using the @option{--trace} Autoconf option
+in order to discover used macros more accurately. This will turn out
+to be very tricky (later releases will improve this) as people had
+devised many ways to cope with the limitation of previous
+@command{aclocal} versions, notably using handwritten
+@code{m4_include}s: @command{aclocal} must make sure not to redefine a
+rule that is already included by such statement.
+
+Automake also has seen its guts rewritten. Although this rewriting
+took a lot of efforts, it is only apparent to the users in that some
+constructions previously disallowed by the implementation now work
+nicely. Conditionals, Locations, Variable and Rule definitions,
+Options: these items on which Automake works have been rewritten as
+separate Perl modules, and documented.
+
+@item 2004-01-11 Automake 1.8.1
+@itemx 2004-01-12 Automake 1.8.2
+@itemx 2004-03-07 Automake 1.8.3
+@itemx 2004-04-25 Automake 1.8.4
+@itemx 2004-05-16 Automake 1.8.5
+
+@item 2004-07-28 Automake 1.9
+
+This release tries to simplify the compilation rules it outputs to
+reduce the size of the Makefile. The complaint initially come from
+the libgcj developers. Their @file{Makefile.in} generated with
+Automake 1.4 and custom build rules (1.4 did not support compiled
+Java) is 250KB@. The one generated by 1.8 was over 9MB@! 1.9 gets it
+down to 1.2MB@.
+
+Aside from this it contains mainly minor changes and bug-fixes.
+
+@item 2004-08-11 Automake 1.9.1
+@itemx 2004-09-19 Automake 1.9.2
+
+Automake has ten years. This chapter of the manual was initially
+written for this occasion.
+
+@item 2007-10-29 Automake repository moves to @code{savannah.gnu.org}
+and uses git as primary repository.
+
+@end table
+
+@node Dependency Tracking Evolution
+@chapter Evolution of Automatic Dependency Tracking
+
+Over the years Automake has deployed three different dependency
+tracking methods. Each method, including the current one, has had
+flaws of various sorts. Here we lay out the different dependency
+tracking methods, their flaws, and their fixes. We conclude with
+recommendations for tool writers, and by indicating future directions
+for dependency tracking work in Automake.
+
+@menu
+* First Take on Dependencies:: Precomputed dependency tracking
+* Dependencies As Side Effects:: Update at developer compile time
+* Dependencies for the User:: Update at user compile time
+* Techniques for Dependencies:: Alternative approaches
+@end menu
+
+@node First Take on Dependencies
+@section First Take on Dependency Tracking
+@unnumberedsubsec Description
+
+Our first attempt at automatic dependency tracking was based on the
+method recommended by GNU @command{make}. (@pxref{Automatic
+Prerequisites, , Generating Prerequisites Automatically, make, The GNU
+make Manual})
+
+This version worked by precomputing dependencies ahead of time. For
+each source file, it had a special @file{.P} file that held the
+dependencies. There was a rule to generate a @file{.P} file by
+invoking the compiler appropriately. All such @file{.P} files were
+included by the @file{Makefile}, thus implicitly becoming dependencies
+of @file{Makefile}.
+
+@unnumberedsubsec Bugs
+
+This approach had several critical bugs.
+
+@itemize
+@item
+The code to generate the @file{.P} file relied on @command{gcc}.
+(A limitation, not technically a bug.)
+@item
+The dependency tracking mechanism itself relied on GNU @command{make}.
+(A limitation, not technically a bug.)
+@item
+Because each @file{.P} file was a dependency of @file{Makefile}, this
+meant that dependency tracking was done eagerly by @command{make}.
+For instance, @samp{make clean} would cause all the dependency files
+to be updated, and then immediately removed. This eagerness also
+caused problems with some configurations; if a certain source file
+could not be compiled on a given architecture for some reason,
+dependency tracking would fail, aborting the entire build.
+@item
+As dependency tracking was done as a pre-pass, compile times were
+doubled--the compiler had to be run twice per source file.
+@item
+@samp{make dist} re-ran @command{automake} to generate a
+@file{Makefile} that did not have automatic dependency tracking (and
+that was thus portable to any version of @command{make}). In order to
+do this portably, Automake had to scan the dependency files and remove
+any reference that was to a source file not in the distribution.
+This process was error-prone. Also, if @samp{make dist} was run in an
+environment where some object file had a dependency on a source file
+that was only conditionally created, Automake would generate a
+@file{Makefile} that referred to a file that might not appear in the
+end user's build. A special, hacky mechanism was required to work
+around this.
+@end itemize
+
+@unnumberedsubsec Historical Note
+
+The code generated by Automake is often inspired by the
+@file{Makefile} style of a particular author. In the case of the first
+implementation of dependency tracking, I believe the impetus and
+inspiration was Jim Meyering. (I could be mistaken. If you know
+otherwise feel free to correct me.)
+
+@node Dependencies As Side Effects
+@section Dependencies As Side Effects
+@unnumberedsubsec Description
+
+The next refinement of Automake's automatic dependency tracking scheme
+was to implement dependencies as side effects of the compilation.
+This was aimed at solving the most commonly reported problems with the
+first approach. In particular we were most concerned with eliminating
+the weird rebuilding effect associated with make clean.
+
+In this approach, the @file{.P} files were included using the
+@code{-include} command, which let us create these files lazily. This
+avoided the @samp{make clean} problem.
+
+We only computed dependencies when a file was actually compiled. This
+avoided the performance penalty associated with scanning each file
+twice. It also let us avoid the other problems associated with the
+first, eager, implementation. For instance, dependencies would never
+be generated for a source file that was not compilable on a given
+architecture (because it in fact would never be compiled).
+
+@unnumberedsubsec Bugs
+
+@itemize
+@item
+This approach also relied on the existence of @command{gcc} and GNU
+@command{make}. (A limitation, not technically a bug.)
+@item
+Dependency tracking was still done by the developer, so the problems
+from the first implementation relating to massaging of dependencies by
+@samp{make dist} were still in effect.
+@item
+This implementation suffered from the ``deleted header file'' problem.
+Suppose a lazily-created @file{.P} file includes a dependency on a
+given header file, like this:
+
+@example
+maude.o: maude.c something.h
+@end example
+
+Now suppose that you remove @file{something.h} and update @file{maude.c}
+so that this include is no longer needed. If you run @command{make},
+you will get an error because there is no way to create
+@file{something.h}.
+
+We fixed this problem in a later release by further massaging the
+output of @command{gcc} to include a dummy dependency for each header
+file.
+@end itemize
+
+@node Dependencies for the User
+@section Dependencies for the User
+@unnumberedsubsec Description
+
+The bugs associated with @samp{make dist}, over time, became a real
+problem. Packages using Automake were being built on a large number
+of platforms, and were becoming increasingly complex. Broken
+dependencies were distributed in ``portable'' @file{Makefile.in}s,
+leading to user complaints. Also, the requirement for @command{gcc}
+and GNU @command{make} was a constant source of bug reports. The next
+implementation of dependency tracking aimed to remove these problems.
+
+We realized that the only truly reliable way to automatically track
+dependencies was to do it when the package itself was built. This
+meant discovering a method portable to any version of make and any
+compiler. Also, we wanted to preserve what we saw as the best point
+of the second implementation: dependency computation as a side effect
+of compilation.
+
+In the end we found that most modern make implementations support some
+form of include directive. Also, we wrote a wrapper script that let
+us abstract away differences between dependency tracking methods for
+compilers. For instance, some compilers cannot generate dependencies
+as a side effect of compilation. In this case we simply have the
+script run the compiler twice. Currently our wrapper script
+(@command{depcomp}) knows about twelve different compilers (including
+a "compiler" that simply invokes @command{makedepend} and then the
+real compiler, which is assumed to be a standard Unix-like C compiler
+with no way to do dependency tracking).
+
+@unnumberedsubsec Bugs
+
+@itemize
+@item
+Running a wrapper script for each compilation slows down the build.
+@item
+Many users don't really care about precise dependencies.
+@item
+This implementation, like every other automatic dependency tracking
+scheme in common use today (indeed, every one we've ever heard of),
+suffers from the ``duplicated new header'' bug.
+
+This bug occurs because dependency tracking tools, such as the
+compiler, only generate dependencies on the successful opening of a
+file, and not on every probe.
+
+Suppose for instance that the compiler searches three directories for
+a given header, and that the header is found in the third directory.
+If the programmer erroneously adds a header file with the same name to
+the first directory, then a clean rebuild from scratch could fail
+(suppose the new header file is buggy), whereas an incremental rebuild
+will succeed.
+
+What has happened here is that people have a misunderstanding of what
+a dependency is. Tool writers think a dependency encodes information
+about which files were read by the compiler. However, a dependency
+must actually encode information about what the compiler tried to do.
+
+This problem is not serious in practice. Programmers typically do not
+use the same name for a header file twice in a given project. (At
+least, not in C or C++. This problem may be more troublesome in
+Java.) This problem is easy to fix, by modifying dependency
+generators to record every probe, instead of every successful open.
+
+@item
+Since Automake generates dependencies as a side effect of compilation,
+there is a bootstrapping problem when header files are generated by
+running a program. The problem is that, the first time the build is
+done, there is no way by default to know that the headers are
+required, so make might try to run a compilation for which the headers
+have not yet been built.
+
+This was also a problem in the previous dependency tracking implementation.
+
+The current fix is to use @code{BUILT_SOURCES} to list built headers
+(@pxref{Sources, , Sources, automake, GNU Automake}). This causes them
+to be built before any other build rules are run. This is unsatisfactory
+as a general solution, however in practice it seems sufficient for most
+actual programs.
+@end itemize
+
+This code is used since Automake 1.5.
+
+In GCC 3.0, we managed to convince the maintainers to add special
+command-line options to help Automake more efficiently do its job. We
+hoped this would let us avoid the use of a wrapper script when
+Automake's automatic dependency tracking was used with @command{gcc}.
+
+Unfortunately, this code doesn't quite do what we want. In
+particular, it removes the dependency file if the compilation fails;
+we'd prefer that it instead only touch the file in any way if the
+compilation succeeds.
+
+Nevertheless, since Automake 1.7, when a recent @command{gcc} is
+detected at @command{configure} time, we inline the
+dependency-generation code and do not use the @command{depcomp}
+wrapper script. This makes compilations faster for those using this
+compiler (probably our primary user base). The counterpart is that
+because we have to encode two compilation rules in @file{Makefile}
+(with or without @command{depcomp}), the produced @file{Makefile}s are
+larger.
+
+@node Techniques for Dependencies
+@section Techniques for Computing Dependencies
+
+There are actually several ways for a build tool like Automake to
+cause tools to generate dependencies.
+
+@table @asis
+@item @command{makedepend}
+This was a commonly-used method in the past. The idea is to run a
+special program over the source and have it generate dependency
+information. Traditional implementations of @command{makedepend} are
+not completely precise; ordinarily they were conservative and
+discovered too many dependencies.
+@item The tool
+An obvious way to generate dependencies is to simply write the tool so
+that it can generate the information needed by the build tool. This is
+also the most portable method. Many compilers have an option to
+generate dependencies. Unfortunately, not all tools provide such an
+option.
+@item The file system
+It is possible to write a special file system that tracks opens,
+reads, writes, etc, and then feed this information back to the build
+tool. @command{clearmake} does this. This is a very powerful
+technique, as it doesn't require cooperation from the
+tool. Unfortunately it is also very difficult to implement and also
+not practical in the general case.
+@item @code{LD_PRELOAD}
+Rather than use the file system, one could write a special library to
+intercept @code{open} and other syscalls. This technique is also quite
+powerful, but unfortunately it is not portable enough for use in
+@command{automake}.
+@end table
+
+@menu
+* Recommendations for Tool Writers::
+* Future Directions for Dependencies::
+@end menu
+
+@node Recommendations for Tool Writers
+@subsection Recommendations for Tool Writers
+
+We think that every compilation tool ought to be able to generate
+dependencies as a side effect of compilation. Furthermore, at least
+while @command{make}-based tools are nearly universally in use (at
+least in the free software community), the tool itself should generate
+dummy dependencies for header files, to avoid the deleted header file
+bug. Finally, the tool should generate a dependency for each probe,
+instead of each successful file open, in order to avoid the duplicated
+new header bug.
+
+@node Future Directions for Dependencies
+@subsection Future Directions for Dependencies
+
+Currently, only languages and compilers understood by Automake can
+have dependency tracking enabled. We would like to see if it is
+practical (and worthwhile) to let this support be extended by the user
+to languages unknown to Automake.
+
+@node Releases
+@chapter Release Statistics
+
+The following table (inspired by @samp{perlhist(1)}) quantifies the
+evolution of Automake using these metrics:
+
+@table @asis
+@item Date, Rel
+The date and version of the release.
+@item am
+The number of lines of the @command{automake} script.
+@item acl
+The number of lines of the @command{aclocal} script.
+@item pm
+The number of lines of the @command{Perl} supporting modules.
+@item @file{*.am}
+The number of lines of the @file{Makefile} fragments. The number in
+parentheses is the number of files.
+@item m4
+The number of lines (and files) of Autoconf macros.
+@item doc
+The number of pages of the documentation (the Postscript version).
+@item t
+The number of test cases in the test suite. Of those, the number in
+parentheses is the number of generated test cases.
+@end table
+
+@multitable {8888-88-88} {8.8-p8} {8888} {8888} {8888} {8888 (88)} {8888 (88)} {888} {888 (88)}
+@headitem Date @tab Rel @tab am @tab acl @tab pm @tab @file{*.am} @tab m4 @tab doc @tab t
+@item 1994-09-19 @tab CVS @tab 141 @tab @tab @tab 299 (24) @tab @tab @tab
+@item 1994-11-05 @tab CVS @tab 208 @tab @tab @tab 332 (28) @tab @tab @tab
+@item 1995-11-23 @tab 0.20 @tab 533 @tab @tab @tab 458 (35) @tab @tab 9 @tab
+@item 1995-11-26 @tab 0.21 @tab 613 @tab @tab @tab 480 (36) @tab @tab 11 @tab
+@item 1995-11-28 @tab 0.22 @tab 1116 @tab @tab @tab 539 (38) @tab @tab 12 @tab
+@item 1995-11-29 @tab 0.23 @tab 1240 @tab @tab @tab 541 (38) @tab @tab 12 @tab
+@item 1995-12-08 @tab 0.24 @tab 1462 @tab @tab @tab 504 (33) @tab @tab 14 @tab
+@item 1995-12-10 @tab 0.25 @tab 1513 @tab @tab @tab 511 (37) @tab @tab 15 @tab
+@item 1996-01-03 @tab 0.26 @tab 1706 @tab @tab @tab 438 (36) @tab @tab 16 @tab
+@item 1996-01-03 @tab 0.27 @tab 1706 @tab @tab @tab 438 (36) @tab @tab 16 @tab
+@item 1996-01-13 @tab 0.28 @tab 1964 @tab @tab @tab 934 (33) @tab @tab 16 @tab
+@item 1996-02-07 @tab 0.29 @tab 2299 @tab @tab @tab 936 (33) @tab @tab 17 @tab
+@item 1996-02-24 @tab 0.30 @tab 2544 @tab @tab @tab 919 (32) @tab 85 (1) @tab 20 @tab 9
+@item 1996-03-11 @tab 0.31 @tab 2877 @tab @tab @tab 919 (32) @tab 85 (1) @tab 29 @tab 17
+@item 1996-04-27 @tab 0.32 @tab 3058 @tab @tab @tab 921 (31) @tab 85 (1) @tab 30 @tab 26
+@item 1996-05-18 @tab 0.33 @tab 3110 @tab @tab @tab 926 (31) @tab 105 (1) @tab 30 @tab 35
+@item 1996-05-28 @tab 1.0 @tab 3134 @tab @tab @tab 973 (32) @tab 105 (1) @tab 30 @tab 38
+@item 1997-06-22 @tab 1.2 @tab 6089 @tab 385 @tab @tab 1294 (36) @tab 592 (20) @tab 37 @tab 126
+@item 1998-04-05 @tab 1.3 @tab 6415 @tab 422 @tab @tab 1470 (39) @tab 741 (23) @tab 39 @tab 156
+@item 1999-01-14 @tab 1.4 @tab 7240 @tab 426 @tab @tab 1591 (40) @tab 734 (20) @tab 51 @tab 197
+@item 2001-05-08 @tab 1.4-p1 @tab 7251 @tab 426 @tab @tab 1591 (40) @tab 734 (20) @tab 51 @tab 197
+@item 2001-05-24 @tab 1.4-p2 @tab 7268 @tab 439 @tab @tab 1591 (40) @tab 734 (20) @tab 49 @tab 197
+@item 2001-06-07 @tab 1.4-p3 @tab 7312 @tab 439 @tab @tab 1591 (40) @tab 734 (20) @tab 49 @tab 197
+@item 2001-06-10 @tab 1.4-p4 @tab 7321 @tab 439 @tab @tab 1591 (40) @tab 734 (20) @tab 49 @tab 198
+@item 2001-07-15 @tab 1.4-p5 @tab 7228 @tab 426 @tab @tab 1596 (40) @tab 734 (20) @tab 51 @tab 198
+@item 2001-08-23 @tab 1.5 @tab 8016 @tab 475 @tab 600 @tab 2654 (39) @tab 1166 (29) @tab 63 @tab 327
+@item 2002-03-05 @tab 1.6 @tab 8465 @tab 475 @tab 1136 @tab 2732 (39) @tab 1603 (27) @tab 66 @tab 365
+@item 2002-04-11 @tab 1.6.1 @tab 8544 @tab 475 @tab 1136 @tab 2741 (39) @tab 1603 (27) @tab 66 @tab 372
+@item 2002-06-14 @tab 1.6.2 @tab 8575 @tab 475 @tab 1136 @tab 2800 (39) @tab 1609 (27) @tab 67 @tab 386
+@item 2002-07-28 @tab 1.6.3 @tab 8600 @tab 475 @tab 1153 @tab 2809 (39) @tab 1609 (27) @tab 67 @tab 391
+@item 2002-07-28 @tab 1.4-p6 @tab 7332 @tab 455 @tab @tab 1596 (40) @tab 735 (20) @tab 49 @tab 197
+@item 2002-09-25 @tab 1.7 @tab 9189 @tab 471 @tab 1790 @tab 2965 (39) @tab 1606 (28) @tab 73 @tab 430
+@item 2002-10-16 @tab 1.7.1 @tab 9229 @tab 475 @tab 1790 @tab 2977 (39) @tab 1606 (28) @tab 73 @tab 437
+@item 2002-12-06 @tab 1.7.2 @tab 9334 @tab 475 @tab 1790 @tab 2988 (39) @tab 1606 (28) @tab 77 @tab 445
+@item 2003-02-20 @tab 1.7.3 @tab 9389 @tab 475 @tab 1790 @tab 3023 (39) @tab 1651 (29) @tab 84 @tab 448
+@item 2003-04-23 @tab 1.7.4 @tab 9429 @tab 475 @tab 1790 @tab 3031 (39) @tab 1644 (29) @tab 85 @tab 458
+@item 2003-05-18 @tab 1.7.5 @tab 9429 @tab 475 @tab 1790 @tab 3033 (39) @tab 1645 (29) @tab 85 @tab 459
+@item 2003-07-10 @tab 1.7.6 @tab 9442 @tab 475 @tab 1790 @tab 3033 (39) @tab 1660 (29) @tab 85 @tab 461
+@item 2003-09-07 @tab 1.7.7 @tab 9443 @tab 475 @tab 1790 @tab 3041 (39) @tab 1660 (29) @tab 90 @tab 467
+@item 2003-10-07 @tab 1.7.8 @tab 9444 @tab 475 @tab 1790 @tab 3041 (39) @tab 1660 (29) @tab 90 @tab 468
+@item 2003-11-09 @tab 1.7.9 @tab 9444 @tab 475 @tab 1790 @tab 3048 (39) @tab 1660 (29) @tab 90 @tab 468
+@item 2003-12-10 @tab 1.8 @tab 7171 @tab 585 @tab 7730 @tab 3236 (39) @tab 1666 (31) @tab 104 @tab 521
+@item 2004-01-11 @tab 1.8.1 @tab 7217 @tab 663 @tab 7726 @tab 3287 (39) @tab 1686 (31) @tab 104 @tab 525
+@item 2004-01-12 @tab 1.8.2 @tab 7217 @tab 663 @tab 7726 @tab 3288 (39) @tab 1686 (31) @tab 104 @tab 526
+@item 2004-03-07 @tab 1.8.3 @tab 7214 @tab 686 @tab 7735 @tab 3303 (39) @tab 1695 (31) @tab 111 @tab 530
+@item 2004-04-25 @tab 1.8.4 @tab 7214 @tab 686 @tab 7736 @tab 3310 (39) @tab 1701 (31) @tab 112 @tab 531
+@item 2004-05-16 @tab 1.8.5 @tab 7240 @tab 686 @tab 7736 @tab 3299 (39) @tab 1701 (31) @tab 112 @tab 533
+@item 2004-07-28 @tab 1.9 @tab 7508 @tab 715 @tab 7794 @tab 3352 (40) @tab 1812 (32) @tab 115 @tab 551
+@item 2004-08-11 @tab 1.9.1 @tab 7512 @tab 715 @tab 7794 @tab 3354 (40) @tab 1812 (32) @tab 115 @tab 552
+@item 2004-09-19 @tab 1.9.2 @tab 7512 @tab 715 @tab 7794 @tab 3354 (40) @tab 1812 (32) @tab 132 @tab 554
+@item 2004-11-01 @tab 1.9.3 @tab 7507 @tab 718 @tab 7804 @tab 3354 (40) @tab 1812 (32) @tab 134 @tab 556
+@item 2004-12-18 @tab 1.9.4 @tab 7508 @tab 718 @tab 7856 @tab 3361 (40) @tab 1811 (32) @tab 140 @tab 560
+@item 2005-02-13 @tab 1.9.5 @tab 7523 @tab 719 @tab 7859 @tab 3373 (40) @tab 1453 (32) @tab 142 @tab 562
+@item 2005-07-10 @tab 1.9.6 @tab 7539 @tab 699 @tab 7867 @tab 3400 (40) @tab 1453 (32) @tab 144 @tab 570
+@item 2006-10-15 @tab 1.10 @tab 7859 @tab 1072 @tab 8024 @tab 3512 (40) @tab 1496 (34) @tab 172 @tab 604
+@item 2008-01-19 @tab 1.10.1 @tab 7870 @tab 1089 @tab 8025 @tab 3520 (40) @tab 1499 (34) @tab 173 @tab 617
+@item 2008-11-23 @tab 1.10.2 @tab 7882 @tab 1089 @tab 8027 @tab 3540 (40) @tab 1509 (34) @tab 176 @tab 628
+@item 2009-05-17 @tab 1.11 @tab 8721 @tab 1092 @tab 8289 @tab 4164 (42) @tab 1714 (37) @tab 181 @tab 732 (20)
+@end multitable
+
+
+@c ========================================================== Appendices
+
+@page
+@node Copying This Manual
+@appendix Copying This Manual
+
+@menu
+* GNU Free Documentation License:: License for copying this manual
+@end menu
+
+@node GNU Free Documentation License
+@appendixsec GNU Free Documentation License
+@include fdl.texi
+
+@bye
diff --git a/doc/automake.texi b/doc/automake.texi
new file mode 100644
index 000000000..050c9811d
--- /dev/null
+++ b/doc/automake.texi
@@ -0,0 +1,13225 @@
+\input texinfo @c -*-texinfo-*-
+@c %**start of header
+@setfilename automake.info
+@settitle automake
+@documentencoding UTF-8
+@documentlanguage en
+@setchapternewpage off
+@c %**end of header
+
+@include version.texi
+
+@c @ovar(ARG, DEFAULT)
+@c -------------------
+@c The ARG is an optional argument. To be used for macro arguments in
+@c their documentation (@defmac).
+@macro ovar{varname}
+@r{[}@var{\varname\}@r{]}
+@end macro
+
+@set PACKAGE_BUGREPORT bug-automake@@gnu.org
+
+@copying
+
+This manual is for GNU Automake (version @value{VERSION},
+@value{UPDATED}), a program that creates GNU standards-compliant
+Makefiles from template files.
+
+Copyright @copyright{} 1995-2017 Free Software Foundation, Inc.
+
+@quotation
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License,
+Version 1.3 or any later version published by the Free Software
+Foundation; with no Invariant Sections, with no Front-Cover texts,
+and with no Back-Cover Texts. A copy of the license is included in the
+section entitled ``GNU Free Documentation License.''
+
+@end quotation
+@end copying
+
+@dircategory Software development
+@direntry
+* Automake: (automake). Making GNU standards-compliant Makefiles.
+@end direntry
+
+@dircategory Individual utilities
+@direntry
+* aclocal-invocation: (automake)aclocal Invocation. Generating aclocal.m4.
+* automake-invocation: (automake)automake Invocation. Generating Makefile.in.
+@end direntry
+
+@titlepage
+@title GNU Automake
+@subtitle For version @value{VERSION}, @value{UPDATED}
+@author David MacKenzie
+@author Tom Tromey
+@author Alexandre Duret-Lutz
+@author Ralf Wildenhues
+@author Stefano Lattarini
+@page
+@vskip 0pt plus 1filll
+@insertcopying
+@end titlepage
+
+@contents
+
+@c We use the following macros to define indices:
+@c @cindex concepts, and anything that does not fit elsewhere
+@c @vindex Makefile variables
+@c @trindex targets
+@c @acindex Autoconf/Automake/Libtool/M4/... macros
+@c @opindex tool options
+
+@c Define an index of configure macros.
+@defcodeindex ac
+@c Define an index of options.
+@defcodeindex op
+@c Define an index of targets.
+@defcodeindex tr
+@c Define an index of commands.
+@defcodeindex cm
+
+@c Put the macros in the function index.
+@syncodeindex ac fn
+
+@c Put everything else into one index (arbitrarily chosen to be the
+@c concept index).
+@syncodeindex op cp
+@syncodeindex tr cp
+@syncodeindex cm cp
+
+@ifnottex
+@node Top
+@comment node-name, next, previous, up
+@top GNU Automake
+
+@insertcopying
+
+@menu
+* Introduction:: Automake's purpose
+* Autotools Introduction:: An Introduction to the Autotools
+* Generalities:: General ideas
+* Examples:: Some example packages
+* automake Invocation:: Creating a Makefile.in
+* configure:: Scanning configure.ac, using aclocal
+* Directories:: Declaring subdirectories
+* Programs:: Building programs and libraries
+* Other Objects:: Other derived objects
+* Other GNU Tools:: Other GNU Tools
+* Documentation:: Building documentation
+* Install:: What gets installed
+* Clean:: What gets cleaned
+* Dist:: What goes in a distribution
+* Tests:: Support for test suites
+* Rebuilding:: Automatic rebuilding of Makefile
+* Options:: Changing Automake's behavior
+* Miscellaneous:: Miscellaneous rules
+* Include:: Including extra files in an Automake template
+* Conditionals:: Conditionals
+* Silencing Make:: Obtain less verbose output from @command{make}
+* Gnits:: The effect of @option{--gnu} and @option{--gnits}
+* Not Enough:: When Automake is not Enough
+* Distributing:: Distributing the Makefile.in
+* API Versioning:: About compatibility between Automake versions
+* Upgrading:: Upgrading to a Newer Automake Version
+* FAQ:: Frequently Asked Questions
+* Copying This Manual:: How to make copies of this manual
+* Indices:: Indices of variables, macros, and concepts
+
+@detailmenu
+ --- The Detailed Node Listing ---
+
+An Introduction to the Autotools
+
+* GNU Build System:: Introducing the GNU Build System
+* Use Cases:: Use Cases for the GNU Build System
+* Why Autotools:: How Autotools Help
+* Hello World:: A Small Hello World Package
+
+Use Cases for the GNU Build System
+
+* Basic Installation:: Common installation procedure
+* Standard Targets:: A list of standard Makefile targets
+* Standard Directory Variables:: A list of standard directory variables
+* Standard Configuration Variables:: Using configuration variables
+* config.site:: Using a config.site file
+* VPATH Builds:: Parallel build trees
+* Two-Part Install:: Installing data and programs separately
+* Cross-Compilation:: Building for other architectures
+* Renaming:: Renaming programs at install time
+* DESTDIR:: Building binary packages with DESTDIR
+* Preparing Distributions:: Rolling out tarballs
+* Dependency Tracking:: Automatic dependency tracking
+* Nested Packages:: The GNU Build Systems can be nested
+
+A Small Hello World
+
+* Creating amhello:: Create @file{amhello-1.0.tar.gz} from scratch
+* amhello's configure.ac Setup Explained::
+* amhello's Makefile.am Setup Explained::
+
+General ideas
+
+* General Operation:: General operation of Automake
+* Strictness:: Standards conformance checking
+* Uniform:: The Uniform Naming Scheme
+* Length Limitations:: Staying below the command line length limit
+* Canonicalization:: How derived variables are named
+* User Variables:: Variables reserved for the user
+* Auxiliary Programs:: Programs automake might require
+
+Some example packages
+
+* Complete:: A simple example, start to finish
+* true:: Building true and false
+
+Scanning @file{configure.ac}, using @command{aclocal}
+
+* Requirements:: Configuration requirements
+* Optional:: Other things Automake recognizes
+* aclocal Invocation:: Auto-generating aclocal.m4
+* Macros:: Autoconf macros supplied with Automake
+
+Auto-generating aclocal.m4
+
+* aclocal Options:: Options supported by aclocal
+* Macro Search Path:: How aclocal finds .m4 files
+* Extending aclocal:: Writing your own aclocal macros
+* Local Macros:: Organizing local macros
+* Serials:: Serial lines in Autoconf macros
+* Future of aclocal:: aclocal's scheduled death
+
+Autoconf macros supplied with Automake
+
+* Public Macros:: Macros that you can use.
+* Private Macros:: Macros that you should not use.
+
+Directories
+
+* Subdirectories:: Building subdirectories recursively
+* Conditional Subdirectories:: Conditionally not building directories
+* Alternative:: Subdirectories without recursion
+* Subpackages:: Nesting packages
+
+Conditional Subdirectories
+
+* SUBDIRS vs DIST_SUBDIRS:: Two sets of directories
+* Subdirectories with AM_CONDITIONAL:: Specifying conditional subdirectories
+* Subdirectories with AC_SUBST:: Another way for conditional recursion
+* Unconfigured Subdirectories:: Not even creating a @samp{Makefile}
+
+Building Programs and Libraries
+
+* A Program:: Building a program
+* A Library:: Building a library
+* A Shared Library:: Building a Libtool library
+* Program and Library Variables:: Variables controlling program and
+ library builds
+* Default _SOURCES:: Default source files
+* LIBOBJS:: Special handling for LIBOBJS and ALLOCA
+* Program Variables:: Variables used when building a program
+* Yacc and Lex:: Yacc and Lex support
+* C++ Support:: Compiling C++ sources
+* Objective C Support:: Compiling Objective C sources
+* Objective C++ Support:: Compiling Objective C++ sources
+* Unified Parallel C Support:: Compiling Unified Parallel C sources
+* Assembly Support:: Compiling assembly sources
+* Fortran 77 Support:: Compiling Fortran 77 sources
+* Fortran 9x Support:: Compiling Fortran 9x sources
+* Java Support with gcj:: Compiling Java sources using gcj
+* Vala Support:: Compiling Vala sources
+* Support for Other Languages:: Compiling other languages
+* Dependencies:: Automatic dependency tracking
+* EXEEXT:: Support for executable extensions
+
+Building a program
+
+* Program Sources:: Defining program sources
+* Linking:: Linking with libraries or extra objects
+* Conditional Sources:: Handling conditional sources
+* Conditional Programs:: Building a program conditionally
+
+Building a Shared Library
+
+* Libtool Concept:: Introducing Libtool
+* Libtool Libraries:: Declaring Libtool Libraries
+* Conditional Libtool Libraries:: Building Libtool Libraries Conditionally
+* Conditional Libtool Sources:: Choosing Library Sources Conditionally
+* Libtool Convenience Libraries:: Building Convenience Libtool Libraries
+* Libtool Modules:: Building Libtool Modules
+* Libtool Flags:: Using _LIBADD, _LDFLAGS, and _LIBTOOLFLAGS
+* LTLIBOBJS:: Using $(LTLIBOBJS) and $(LTALLOCA)
+* Libtool Issues:: Common Issues Related to Libtool's Use
+
+Common Issues Related to Libtool's Use
+
+* Error required file ltmain.sh not found:: The need to run libtoolize
+* Objects created both with libtool and without:: Avoid a specific build race
+
+Fortran 77 Support
+
+* Preprocessing Fortran 77:: Preprocessing Fortran 77 sources
+* Compiling Fortran 77 Files:: Compiling Fortran 77 sources
+* Mixing Fortran 77 With C and C++:: Mixing Fortran 77 With C and C++
+
+Mixing Fortran 77 With C and C++
+
+* How the Linker is Chosen:: Automatic linker selection
+
+Fortran 9x Support
+
+* Compiling Fortran 9x Files:: Compiling Fortran 9x sources
+
+Other Derived Objects
+
+* Scripts:: Executable scripts
+* Headers:: Header files
+* Data:: Architecture-independent data files
+* Sources:: Derived sources
+
+Built Sources
+
+* Built Sources Example:: Several ways to handle built sources.
+
+Other GNU Tools
+
+* Emacs Lisp:: Emacs Lisp
+* gettext:: Gettext
+* Libtool:: Libtool
+* Java:: Java bytecode compilation (deprecated)
+* Python:: Python
+
+Building documentation
+
+* Texinfo:: Texinfo
+* Man Pages:: Man pages
+
+What Gets Installed
+
+* Basics of Installation:: What gets installed where
+* The Two Parts of Install:: Installing data and programs separately
+* Extending Installation:: Adding your own rules for installation
+* Staged Installs:: Installation in a temporary location
+* Install Rules for the User:: Useful additional rules
+
+What Goes in a Distribution
+
+* Basics of Distribution:: Files distributed by default
+* Fine-grained Distribution Control:: @code{dist_} and @code{nodist_} prefixes
+* The dist Hook:: A target for last-minute distribution changes
+* Checking the Distribution:: @samp{make distcheck} explained
+* The Types of Distributions:: A variety of formats and compression methods
+
+Support for test suites
+
+* Generalities about Testing:: Generic concepts and terminology about testing
+* Simple Tests:: Listing test scripts in @code{TESTS}
+* Custom Test Drivers:: Writing and using custom test drivers
+* Using the TAP test protocol:: Integrating test scripts that use the TAP protocol
+* DejaGnu Tests:: Interfacing with the @command{dejagnu} testing framework
+* Install Tests:: Running tests on installed packages
+
+Simple Tests
+
+* Scripts-based Testsuites:: Automake-specific concepts and terminology
+* Serial Test Harness:: Older (and discouraged) serial test harness
+* Parallel Test Harness:: Generic concurrent test harness
+
+Using the TAP test protocol
+
+* Introduction to TAP::
+* Use TAP with the Automake test harness::
+* Incompatibilities with other TAP parsers and drivers::
+* Links and external resources on TAP::
+
+Custom Test Drivers
+
+* Overview of Custom Test Drivers Support::
+* Declaring Custom Test Drivers::
+* API for Custom Test Drivers::
+
+API for Custom Test Drivers
+
+* Command-line arguments for test drivers::
+* Log files generation and test results recording::
+* Testsuite progress output::
+
+Changing Automake's Behavior
+
+* Options generalities:: Semantics of Automake option
+* List of Automake options:: A comprehensive list of Automake options
+
+Miscellaneous Rules
+
+* Tags:: Interfacing to cscope, etags and mkid
+* Suffixes:: Handling new file extensions
+
+Conditionals
+
+* Usage of Conditionals:: Declaring conditional content
+* Limits of Conditionals:: Enclosing complete statements
+
+Silencing Make
+
+* Make verbosity:: Make is verbose by default
+* Tricks For Silencing Make:: Standard and generic ways to silence make
+* Automake Silent Rules:: How Automake can help in silencing make
+
+When Automake Isn't Enough
+
+* Extending:: Adding new rules or overriding existing ones.
+* Third-Party Makefiles:: Integrating Non-Automake @file{Makefile}s.
+
+Frequently Asked Questions about Automake
+
+* CVS:: CVS and generated files
+* maintainer-mode:: missing and AM_MAINTAINER_MODE
+* Wildcards:: Why doesn't Automake support wildcards?
+* Limitations on File Names:: Limitations on source and installed file names
+* Errors with distclean:: Files left in build directory after distclean
+* Flag Variables Ordering:: CFLAGS vs.@: AM_CFLAGS vs.@: mumble_CFLAGS
+* Renamed Objects:: Why are object files sometimes renamed?
+* Per-Object Flags:: How to simulate per-object flags?
+* Multiple Outputs:: Writing rules for tools with many output files
+* Hard-Coded Install Paths:: Installing to hard-coded locations
+* Debugging Make Rules:: Strategies when things don't work as expected
+* Reporting Bugs:: Feedback on bugs and feature requests
+
+Copying This Manual
+
+* GNU Free Documentation License:: License for copying this manual
+
+Indices
+
+* Macro Index:: Index of Autoconf macros
+* Variable Index:: Index of Makefile variables
+* General Index:: General index
+
+@end detailmenu
+@end menu
+
+@end ifnottex
+
+
+@node Introduction
+@chapter Introduction
+
+Automake is a tool for automatically generating @file{Makefile.in}s
+from files called @file{Makefile.am}. Each @file{Makefile.am} is
+basically a series of @command{make} variable
+definitions@footnote{These variables are also called @dfn{make macros}
+in Make terminology, however in this manual we reserve the term
+@dfn{macro} for Autoconf's macros.}, with rules being thrown in
+occasionally. The generated @file{Makefile.in}s are compliant with
+the GNU Makefile standards.
+
+@cindex GNU Makefile standards
+
+The GNU Makefile Standards Document
+(@pxref{Makefile Conventions, , , standards, The GNU Coding Standards})
+is long, complicated, and subject to change. The goal of Automake is to
+remove the burden of Makefile maintenance from the back of the
+individual GNU maintainer (and put it on the back of the Automake
+maintainers).
+
+The typical Automake input file is simply a series of variable definitions.
+Each such file is processed to create a @file{Makefile.in}.
+
+@cindex Constraints of Automake
+@cindex Automake constraints
+
+Automake does constrain a project in certain ways; for instance, it
+assumes that the project uses Autoconf (@pxref{Top, , Introduction,
+autoconf, The Autoconf Manual}), and enforces certain restrictions on
+the @file{configure.ac} contents.
+
+@cindex Automake requirements
+@cindex Requirements, Automake
+
+Automake requires @command{perl} in order to generate the
+@file{Makefile.in}s. However, the distributions created by Automake are
+fully GNU standards-compliant, and do not require @command{perl} in order
+to be built.
+
+@cindex Bugs, reporting
+@cindex Reporting bugs
+@cindex E-mail, bug reports
+
+For more information on bug reports, @xref{Reporting Bugs}.
+
+@node Autotools Introduction
+@chapter An Introduction to the Autotools
+
+If you are new to Automake, maybe you know that it is part of a set of
+tools called @emph{The Autotools}. Maybe you've already delved into a
+package full of files named @file{configure}, @file{configure.ac},
+@file{Makefile.in}, @file{Makefile.am}, @file{aclocal.m4}, @dots{},
+some of them claiming to be @emph{generated by} Autoconf or Automake.
+But the exact purpose of these files and their relations is probably
+fuzzy. The goal of this chapter is to introduce you to this machinery,
+to show you how it works and how powerful it is. If you've never
+installed or seen such a package, do not worry: this chapter will walk
+you through it.
+
+If you need some teaching material, more illustrations, or a less
+@command{automake}-centered continuation, some slides for this
+introduction are available in Alexandre Duret-Lutz's
+@uref{http://www.lrde.epita.fr/@/~adl/@/autotools.html,
+Autotools Tutorial}.
+This chapter is the written version of the first part of his tutorial.
+
+@menu
+* GNU Build System:: Introducing the GNU Build System
+* Use Cases:: Use Cases for the GNU Build System
+* Why Autotools:: How Autotools Help
+* Hello World:: A Small Hello World Package
+@end menu
+
+@node GNU Build System
+@section Introducing the GNU Build System
+@cindex GNU Build System, introduction
+
+It is a truth universally acknowledged, that as a developer in
+possession of a new package, you must be in want of a build system.
+
+In the Unix world, such a build system is traditionally achieved using
+the command @command{make} (@pxref{Top, , Overview, make, The GNU Make
+Manual}). You express the recipe to build your package in a
+@file{Makefile}. This file is a set of rules to build the files in
+the package. For instance the program @file{prog} may be built by
+running the linker on the files @file{main.o}, @file{foo.o}, and
+@file{bar.o}; the file @file{main.o} may be built by running the
+compiler on @file{main.c}; etc. Each time @command{make} is run, it
+reads @file{Makefile}, checks the existence and modification time of
+the files mentioned, decides what files need to be built (or rebuilt),
+and runs the associated commands.
+
+When a package needs to be built on a different platform than the one
+it was developed on, its @file{Makefile} usually needs to be adjusted.
+For instance the compiler may have another name or require more
+options. In 1991, David J. MacKenzie got tired of customizing
+@file{Makefile} for the 20 platforms he had to deal with. Instead, he
+handcrafted a little shell script called @file{configure} to
+automatically adjust the @file{Makefile} (@pxref{Genesis, , Genesis,
+autoconf, The Autoconf Manual}). Compiling his package was now
+as simple as running @code{./configure && make}.
+
+@cindex GNU Coding Standards
+
+Today this process has been standardized in the GNU project. The GNU
+Coding Standards (@pxref{Managing Releases, The Release Process, ,
+standards, The GNU Coding Standards}) explains how each package of the
+GNU project should have a @file{configure} script, and the minimal
+interface it should have. The @file{Makefile} too should follow some
+established conventions. The result? A unified build system that
+makes all packages almost indistinguishable by the installer. In its
+simplest scenario, all the installer has to do is to unpack the
+package, run @code{./configure && make && make install}, and repeat
+with the next package to install.
+
+We call this build system the @dfn{GNU Build System}, since it was
+grown out of the GNU project. However it is used by a vast number of
+other packages: following any existing convention has its advantages.
+
+@cindex Autotools, introduction
+
+The Autotools are tools that will create a GNU Build System for your
+package. Autoconf mostly focuses on @file{configure} and Automake on
+@file{Makefile}s. It is entirely possible to create a GNU Build
+System without the help of these tools. However it is rather
+burdensome and error-prone. We will discuss this again after some
+illustration of the GNU Build System in action.
+
+@node Use Cases
+@section Use Cases for the GNU Build System
+@cindex GNU Build System, use cases
+@cindex GNU Build System, features
+@cindex Features of the GNU Build System
+@cindex Use Cases for the GNU Build System
+@cindex @file{amhello-1.0.tar.gz}, location
+@cindex @file{amhello-1.0.tar.gz}, use cases
+
+In this section we explore several use cases for the GNU Build System.
+You can replay all of these examples on the @file{amhello-1.0.tar.gz}
+package distributed with Automake. If Automake is installed on your
+system, you should find a copy of this file in
+@file{@var{prefix}/share/doc/automake/amhello-1.0.tar.gz}, where
+@var{prefix} is the installation prefix specified during configuration
+(@var{prefix} defaults to @file{/usr/local}, however if Automake was
+installed by some GNU/Linux distribution it most likely has been set
+to @file{/usr}). If you do not have a copy of Automake installed,
+you can find a copy of this file inside the @file{doc/} directory of
+the Automake package.
+
+Some of the following use cases present features that are in fact
+extensions to the GNU Build System. Read: they are not specified by
+the GNU Coding Standards, but they are nonetheless part of the build
+system created by the Autotools. To keep things simple, we do not
+point out the difference. Our objective is to show you many of the
+features that the build system created by the Autotools will offer to
+you.
+
+@menu
+* Basic Installation:: Common installation procedure
+* Standard Targets:: A list of standard Makefile targets
+* Standard Directory Variables:: A list of standard directory variables
+* Standard Configuration Variables:: Using configuration variables
+* config.site:: Using a config.site file
+* VPATH Builds:: Parallel build trees
+* Two-Part Install:: Installing data and programs separately
+* Cross-Compilation:: Building for other architectures
+* Renaming:: Renaming programs at install time
+* DESTDIR:: Building binary packages with DESTDIR
+* Preparing Distributions:: Rolling out tarballs
+* Dependency Tracking:: Automatic dependency tracking
+* Nested Packages:: The GNU Build Systems can be nested
+@end menu
+
+@node Basic Installation
+@subsection Basic Installation
+@cindex Configuration, basics
+@cindex Installation, basics
+@cindex GNU Build System, basics
+
+The most common installation procedure looks as follows.
+
+@example
+~ % @kbd{tar zxf amhello-1.0.tar.gz}
+~ % @kbd{cd amhello-1.0}
+~/amhello-1.0 % @kbd{./configure}
+@dots{}
+config.status: creating Makefile
+config.status: creating src/Makefile
+@dots{}
+~/amhello-1.0 % @kbd{make}
+@dots{}
+~/amhello-1.0 % @kbd{make check}
+@dots{}
+~/amhello-1.0 % @kbd{su}
+Password:
+/home/adl/amhello-1.0 # @kbd{make install}
+@dots{}
+/home/adl/amhello-1.0 # @kbd{exit}
+~/amhello-1.0 % @kbd{make installcheck}
+@dots{}
+@end example
+
+@cindex Unpacking
+
+The user first unpacks the package. Here, and in the following
+examples, we will use the non-portable @code{tar zxf} command for
+simplicity. On a system without GNU @command{tar} installed, this
+command should read @code{gunzip -c amhello-1.0.tar.gz | tar xf -}.
+
+The user then enters the newly created directory to run the
+@file{configure} script. This script probes the system for various
+features, and finally creates the @file{Makefile}s. In this toy
+example there are only two @file{Makefile}s, but in real-world projects,
+there may be many more, usually one @file{Makefile} per directory.
+
+It is now possible to run @code{make}. This will construct all the
+programs, libraries, and scripts that need to be constructed for the
+package. In our example, this compiles the @file{hello} program.
+All files are constructed in place, in the source tree; we will see
+later how this can be changed.
+
+@code{make check} causes the package's tests to be run. This step is
+not mandatory, but it is often good to make sure the programs that
+have been built behave as they should, before you decide to install
+them. Our example does not contain any tests, so running @code{make
+check} is a no-op.
+
+@cindex su, before @code{make install}
+After everything has been built, and maybe tested, it is time to
+install it on the system. That means copying the programs,
+libraries, header files, scripts, and other data files from the
+source directory to their final destination on the system. The
+command @code{make install} will do that. However, by default
+everything will be installed in subdirectories of @file{/usr/local}:
+binaries will go into @file{/usr/local/bin}, libraries will end up in
+@file{/usr/local/lib}, etc. This destination is usually not writable
+by any user, so we assume that we have to become root before we can
+run @code{make install}. In our example, running @code{make install}
+will copy the program @file{hello} into @file{/usr/local/bin}
+and @file{README} into @file{/usr/local/share/doc/amhello}.
+
+A last and optional step is to run @code{make installcheck}. This
+command may run tests on the installed files. @code{make check} tests
+the files in the source tree, while @code{make installcheck} tests
+their installed copies. The tests run by the latter can be different
+from those run by the former. For instance, there are tests that
+cannot be run in the source tree. Conversely, some packages are set
+up so that @code{make installcheck} will run the very same tests as
+@code{make check}, only on different files (non-installed
+vs.@: installed). It can make a difference, for instance when the
+source tree's layout is different from that of the installation.
+Furthermore it may help to diagnose an incomplete installation.
+
+Presently most packages do not have any @code{installcheck} tests
+because the existence of @code{installcheck} is little known, and its
+usefulness is neglected. Our little toy package is no better: @code{make
+installcheck} does nothing.
+
+@node Standard Targets
+@subsection Standard @file{Makefile} Targets
+
+So far we have come across four ways to run @command{make} in the GNU
+Build System: @code{make}, @code{make check}, @code{make install}, and
+@code{make installcheck}. The words @code{check}, @code{install}, and
+@code{installcheck}, passed as arguments to @command{make}, are called
+@dfn{targets}. @code{make} is a shorthand for @code{make all},
+@code{all} being the default target in the GNU Build System.
+
+Here is a list of the most useful targets that the GNU Coding Standards
+specify.
+
+@table @code
+@item make all
+@trindex all
+Build programs, libraries, documentation, etc.@: (same as @code{make}).
+@item make install
+@trindex install
+Install what needs to be installed, copying the files from the
+package's tree to system-wide directories.
+@item make install-strip
+@trindex install-strip
+Same as @code{make install}, then strip debugging symbols. Some
+users like to trade space for useful bug reports@enddots{}
+@item make uninstall
+@trindex uninstall
+The opposite of @code{make install}: erase the installed files.
+(This needs to be run from the same build tree that was installed.)
+@item make clean
+@trindex clean
+Erase from the build tree the files built by @code{make all}.
+@item make distclean
+@trindex distclean
+Additionally erase anything @code{./configure} created.
+@item make check
+@trindex check
+Run the test suite, if any.
+@item make installcheck
+@trindex installcheck
+Check the installed programs or libraries, if supported.
+@item make dist
+@trindex dist
+Recreate @file{@var{package}-@var{version}.tar.gz} from all the source
+files.
+@end table
+
+@node Standard Directory Variables
+@subsection Standard Directory Variables
+@cindex directory variables
+
+The GNU Coding Standards also specify a hierarchy of variables to
+denote installation directories. Some of these are:
+
+@multitable {Directory variable} {@code{$@{datarootdir@}/doc/$@{PACKAGE@}}}
+@headitem Directory variable @tab Default value
+@item @code{prefix} @tab @code{/usr/local}
+@item @w{@ @ @code{exec_prefix}} @tab @code{$@{prefix@}}
+@item @w{@ @ @ @ @code{bindir}} @tab @code{$@{exec_prefix@}/bin}
+@item @w{@ @ @ @ @code{libdir}} @tab @code{$@{exec_prefix@}/lib}
+@item @w{@ @ @ @ @dots{}}
+@item @w{@ @ @code{includedir}} @tab @code{$@{prefix@}/include}
+@item @w{@ @ @code{datarootdir}} @tab @code{$@{prefix@}/share}
+@item @w{@ @ @ @ @code{datadir}} @tab @code{$@{datarootdir@}}
+@item @w{@ @ @ @ @code{mandir}} @tab @code{$@{datarootdir@}/man}
+@item @w{@ @ @ @ @code{infodir}} @tab @code{$@{datarootdir@}/info}
+@item @w{@ @ @ @ @code{docdir}} @tab @code{$@{datarootdir@}/doc/$@{PACKAGE@}}
+@item @w{@ @ @dots{}}
+@end multitable
+
+@c We should provide a complete table somewhere, but not here. The
+@c complete list of directory variables it too confusing as-is. It
+@c requires some explanations that are too complicated for this
+@c introduction. Besides listing directories like localstatedir
+@c would make the explanations in ``Two-Part Install'' harder.
+
+Each of these directories has a role which is often obvious from its
+name. In a package, any installable file will be installed in one of
+these directories. For instance in @code{amhello-1.0}, the program
+@file{hello} is to be installed in @var{bindir}, the directory for
+binaries. The default value for this directory is
+@file{/usr/local/bin}, but the user can supply a different value when
+calling @command{configure}. Also the file @file{README} will be
+installed into @var{docdir}, which defaults to
+@file{/usr/local/share/doc/amhello}.
+
+@opindex --prefix
+
+As a user, if you wish to install a package on your own account, you
+could proceed as follows:
+
+@example
+~/amhello-1.0 % @kbd{./configure --prefix ~/usr}
+@dots{}
+~/amhello-1.0 % @kbd{make}
+@dots{}
+~/amhello-1.0 % @kbd{make install}
+@dots{}
+@end example
+
+This would install @file{~/usr/bin/hello} and
+@file{~/usr/share/doc/amhello/README}.
+
+The list of all such directory options is shown by
+@code{./configure --help}.
+
+@node Standard Configuration Variables
+@subsection Standard Configuration Variables
+@cindex configuration variables, overriding
+
+The GNU Coding Standards also define a set of standard configuration
+variables used during the build. Here are some:
+
+@table @asis
+@item @code{CC}
+C compiler command
+@item @code{CFLAGS}
+C compiler flags
+@item @code{CXX}
+C++ compiler command
+@item @code{CXXFLAGS}
+C++ compiler flags
+@item @code{LDFLAGS}
+linker flags
+@item @code{CPPFLAGS}
+C/C++ preprocessor flags
+@item @dots{}
+@end table
+
+@command{configure} usually does a good job at setting appropriate
+values for these variables, but there are cases where you may want to
+override them. For instance you may have several versions of a
+compiler installed and would like to use another one, you may have
+header files installed outside the default search path of the
+compiler, or even libraries out of the way of the linker.
+
+Here is how one would call @command{configure} to force it to use
+@command{gcc-3} as C compiler, use header files from
+@file{~/usr/include} when compiling, and libraries from
+@file{~/usr/lib} when linking.
+
+@example
+~/amhello-1.0 % @kbd{./configure --prefix ~/usr CC=gcc-3 \
+CPPFLAGS=-I$HOME/usr/include LDFLAGS=-L$HOME/usr/lib}
+@end example
+
+Again, a full list of these variables appears in the output of
+@code{./configure --help}.
+
+@node config.site
+@subsection Overriding Default Configuration Setting with @file{config.site}
+@cindex @file{config.site} example
+
+When installing several packages using the same setup, it can be
+convenient to create a file to capture common settings.
+If a file named @file{@var{prefix}/share/config.site} exists,
+@command{configure} will source it at the beginning of its execution.
+
+Recall the command from the previous section:
+
+@example
+~/amhello-1.0 % @kbd{./configure --prefix ~/usr CC=gcc-3 \
+CPPFLAGS=-I$HOME/usr/include LDFLAGS=-L$HOME/usr/lib}
+@end example
+
+Assuming we are installing many package in @file{~/usr}, and will
+always want to use these definitions of @code{CC}, @code{CPPFLAGS}, and
+@code{LDFLAGS}, we can automate this by creating the following
+@file{~/usr/share/config.site} file:
+
+@example
+test -z "$CC" && CC=gcc-3
+test -z "$CPPFLAGS" && CPPFLAGS=-I$HOME/usr/include
+test -z "$LDFLAGS" && LDFLAGS=-L$HOME/usr/lib
+@end example
+
+Now, any time a @file{configure} script is using the @file{~/usr}
+prefix, it will execute the above @file{config.site} and define
+these three variables.
+
+@example
+~/amhello-1.0 % @kbd{./configure --prefix ~/usr}
+configure: loading site script /home/adl/usr/share/config.site
+@dots{}
+@end example
+
+@xref{Site Defaults, , Setting Site Defaults, autoconf, The Autoconf
+Manual}, for more information about this feature.
+
+
+@node VPATH Builds
+@subsection Parallel Build Trees (a.k.a.@: VPATH Builds)
+@cindex Parallel build trees
+@cindex VPATH builds
+@cindex source tree and build tree
+@cindex build tree and source tree
+@cindex trees, source vs.@: build
+
+The GNU Build System distinguishes two trees: the source tree, and
+the build tree.
+
+The source tree is rooted in the directory containing
+@file{configure}. It contains all the sources files (those that are
+distributed), and may be arranged using several subdirectories.
+
+The build tree is rooted in the directory in which @file{configure}
+was run, and is populated with all object files, programs, libraries,
+and other derived files built from the sources (and hence not
+distributed). The build tree usually has the same subdirectory layout
+as the source tree; its subdirectories are created automatically by
+the build system.
+
+If @file{configure} is executed in its own directory, the source and
+build trees are combined: derived files are constructed in the same
+directories as their sources. This was the case in our first
+installation example (@pxref{Basic Installation}).
+
+A common request from users is that they want to confine all derived
+files to a single directory, to keep their source directories
+uncluttered. Here is how we could run @file{configure} to build
+everything in a subdirectory called @file{build/}.
+
+@example
+~ % @kbd{tar zxf ~/amhello-1.0.tar.gz}
+~ % @kbd{cd amhello-1.0}
+~/amhello-1.0 % @kbd{mkdir build && cd build}
+~/amhello-1.0/build % @kbd{../configure}
+@dots{}
+~/amhello-1.0/build % @kbd{make}
+@dots{}
+@end example
+
+These setups, where source and build trees are different, are often
+called @dfn{parallel builds} or @dfn{VPATH builds}. The expression
+@emph{parallel build} is misleading: the word @emph{parallel} is a
+reference to the way the build tree shadows the source tree, it is not
+about some concurrency in the way build commands are run. For this
+reason we refer to such setups using the name @emph{VPATH builds} in
+the following. @emph{VPATH} is the name of the @command{make} feature
+used by the @file{Makefile}s to allow these builds (@pxref{General
+Search, , @code{VPATH} Search Path for All Prerequisites, make, The
+GNU Make Manual}).
+
+@cindex multiple configurations, example
+@cindex debug build, example
+@cindex optimized build, example
+
+VPATH builds have other interesting uses. One is to build the same
+sources with multiple configurations. For instance:
+
+@c Keep in sync with amhello-cflags.sh
+@example
+~ % @kbd{tar zxf ~/amhello-1.0.tar.gz}
+~ % @kbd{cd amhello-1.0}
+~/amhello-1.0 % @kbd{mkdir debug optim && cd debug}
+~/amhello-1.0/debug % @kbd{../configure CFLAGS='-g -O0'}
+@dots{}
+~/amhello-1.0/debug % @kbd{make}
+@dots{}
+~/amhello-1.0/debug % cd ../optim
+~/amhello-1.0/optim % @kbd{../configure CFLAGS='-O3 -fomit-frame-pointer'}
+@dots{}
+~/amhello-1.0/optim % @kbd{make}
+@dots{}
+@end example
+
+With network file systems, a similar approach can be used to build the
+same sources on different machines. For instance, suppose that the
+sources are installed on a directory shared by two hosts: @code{HOST1}
+and @code{HOST2}, which may be different platforms.
+
+@example
+~ % @kbd{cd /nfs/src}
+/nfs/src % @kbd{tar zxf ~/amhello-1.0.tar.gz}
+@end example
+
+On the first host, you could create a local build directory:
+@example
+[HOST1] ~ % @kbd{mkdir /tmp/amh && cd /tmp/amh}
+[HOST1] /tmp/amh % @kbd{/nfs/src/amhello-1.0/configure}
+...
+[HOST1] /tmp/amh % @kbd{make && sudo make install}
+...
+@end example
+
+@noindent
+(Here we assume that the installer has configured @command{sudo} so it
+can execute @code{make install} with root privileges; it is more convenient
+than using @command{su} like in @ref{Basic Installation}).
+
+On the second host, you would do exactly the same, possibly at
+the same time:
+@example
+[HOST2] ~ % @kbd{mkdir /tmp/amh && cd /tmp/amh}
+[HOST2] /tmp/amh % @kbd{/nfs/src/amhello-1.0/configure}
+...
+[HOST2] /tmp/amh % @kbd{make && sudo make install}
+...
+@end example
+
+@cindex read-only source tree
+@cindex source tree, read-only
+
+In this scenario, nothing forbids the @file{/nfs/src/amhello-1.0}
+directory from being read-only. In fact VPATH builds are also a means
+of building packages from a read-only medium such as a CD-ROM. (The
+FSF used to sell CD-ROM with unpacked source code, before the GNU
+project grew so big.)
+
+@node Two-Part Install
+@subsection Two-Part Installation
+
+In our last example (@pxref{VPATH Builds}), a source tree was shared
+by two hosts, but compilation and installation were done separately on
+each host.
+
+The GNU Build System also supports networked setups where part of the
+installed files should be shared amongst multiple hosts. It does so
+by distinguishing architecture-dependent files from
+architecture-independent files, and providing two @file{Makefile}
+targets to install each of these classes of files.
+
+@trindex install-exec
+@trindex install-data
+
+These targets are @code{install-exec} for architecture-dependent files
+and @code{install-data} for architecture-independent files.
+The command we used up to now, @code{make install}, can be thought of
+as a shorthand for @code{make install-exec install-data}.
+
+From the GNU Build System point of view, the distinction between
+architecture-dependent files and architecture-independent files is
+based exclusively on the directory variable used to specify their
+installation destination. In the list of directory variables we
+provided earlier (@pxref{Standard Directory Variables}), all the
+variables based on @var{exec-prefix} designate architecture-dependent
+directories whose files will be installed by @code{make install-exec}.
+The others designate architecture-independent directories and will
+serve files installed by @code{make install-data}. @xref{The Two Parts
+of Install}, for more details.
+
+Here is how we could revisit our two-host installation example,
+assuming that (1) we want to install the package directly in
+@file{/usr}, and (2) the directory @file{/usr/share} is shared by the
+two hosts.
+
+On the first host we would run
+@example
+[HOST1] ~ % @kbd{mkdir /tmp/amh && cd /tmp/amh}
+[HOST1] /tmp/amh % @kbd{/nfs/src/amhello-1.0/configure --prefix /usr}
+...
+[HOST1] /tmp/amh % @kbd{make && sudo make install}
+...
+@end example
+
+On the second host, however, we need only install the
+architecture-specific files.
+@example
+[HOST2] ~ % @kbd{mkdir /tmp/amh && cd /tmp/amh}
+[HOST2] /tmp/amh % @kbd{/nfs/src/amhello-1.0/configure --prefix /usr}
+...
+[HOST2] /tmp/amh % @kbd{make && sudo make install-exec}
+...
+@end example
+
+In packages that have installation checks, it would make sense to run
+@code{make installcheck} (@pxref{Basic Installation}) to verify that
+the package works correctly despite the apparent partial installation.
+
+@node Cross-Compilation
+@subsection Cross-Compilation
+@cindex cross-compilation
+
+To @dfn{cross-compile} is to build on one platform a binary that will
+run on another platform. When speaking of cross-compilation, it is
+important to distinguish between the @dfn{build platform} on which
+the compilation is performed, and the @dfn{host platform} on which the
+resulting executable is expected to run. The following
+@command{configure} options are used to specify each of them:
+
+@table @option
+@item --build=@var{build}
+@opindex --build=@var{build}
+The system on which the package is built.
+@item --host=@var{host}
+@opindex --host=@var{host}
+The system where built programs and libraries will run.
+@end table
+
+When the @option{--host} is used, @command{configure} will search for
+the cross-compiling suite for this platform. Cross-compilation tools
+commonly have their target architecture as prefix of their name. For
+instance my cross-compiler for MinGW32 has its binaries called
+@code{i586-mingw32msvc-gcc}, @code{i586-mingw32msvc-ld},
+@code{i586-mingw32msvc-as}, etc.
+
+@cindex MinGW cross-compilation example
+@cindex cross-compilation example
+
+Here is how we could build @code{amhello-1.0} for
+@code{i586-mingw32msvc} on a GNU/Linux PC.
+
+@c Keep in sync with amhello-cross-compile.sh
+@smallexample
+~/amhello-1.0 % @kbd{./configure --build i686-pc-linux-gnu --host i586-mingw32msvc}
+checking for a BSD-compatible install... /usr/bin/install -c
+checking whether build environment is sane... yes
+checking for gawk... gawk
+checking whether make sets $(MAKE)... yes
+checking for i586-mingw32msvc-strip... i586-mingw32msvc-strip
+checking for i586-mingw32msvc-gcc... i586-mingw32msvc-gcc
+checking for C compiler default output file name... a.exe
+checking whether the C compiler works... yes
+checking whether we are cross compiling... yes
+checking for suffix of executables... .exe
+checking for suffix of object files... o
+checking whether we are using the GNU C compiler... yes
+checking whether i586-mingw32msvc-gcc accepts -g... yes
+checking for i586-mingw32msvc-gcc option to accept ANSI C...
+@dots{}
+~/amhello-1.0 % @kbd{make}
+@dots{}
+~/amhello-1.0 % @kbd{cd src; file hello.exe}
+hello.exe: MS Windows PE 32-bit Intel 80386 console executable not relocatable
+@end smallexample
+
+The @option{--host} and @option{--build} options are usually all we
+need for cross-compiling. The only exception is if the package being
+built is itself a cross-compiler: we need a third option to specify
+its target architecture.
+
+@table @option
+@item --target=@var{target}
+@opindex --target=@var{target}
+When building compiler tools: the system for which the tools will
+create output.
+@end table
+
+For instance when installing GCC, the GNU Compiler Collection, we can
+use @option{--target=@/@var{target}} to specify that we want to build
+GCC as a cross-compiler for @var{target}. Mixing @option{--build} and
+@option{--target}, we can actually cross-compile a cross-compiler;
+such a three-way cross-compilation is known as a @dfn{Canadian cross}.
+
+@xref{Specifying Names, , Specifying the System Type, autoconf, The
+Autoconf Manual}, for more information about these @command{configure}
+options.
+
+@node Renaming
+@subsection Renaming Programs at Install Time
+@cindex Renaming programs
+@cindex Transforming program names
+@cindex Programs, renaming during installation
+
+The GNU Build System provides means to automatically rename
+executables and manpages before they are installed (@pxref{Man Pages}).
+This is especially convenient
+when installing a GNU package on a system that already has a
+proprietary implementation you do not want to overwrite. For instance,
+you may want to install GNU @command{tar} as @command{gtar} so you can
+distinguish it from your vendor's @command{tar}.
+
+This can be done using one of these three @command{configure} options.
+
+@table @option
+@item --program-prefix=@var{prefix}
+@opindex --program-prefix=@var{prefix}
+Prepend @var{prefix} to installed program names.
+@item --program-suffix=@var{suffix}
+@opindex --program-suffix=@var{suffix}
+Append @var{suffix} to installed program names.
+@item --program-transform-name=@var{program}
+@opindex --program-transform-name=@var{program}
+Run @code{sed @var{program}} on installed program names.
+@end table
+
+The following commands would install @file{hello}
+as @file{/usr/local/bin/test-hello}, for instance.
+
+@example
+~/amhello-1.0 % @kbd{./configure --program-prefix test-}
+@dots{}
+~/amhello-1.0 % @kbd{make}
+@dots{}
+~/amhello-1.0 % @kbd{sudo make install}
+@dots{}
+@end example
+
+@node DESTDIR
+@subsection Building Binary Packages Using DESTDIR
+@vindex DESTDIR
+
+The GNU Build System's @code{make install} and @code{make uninstall}
+interface does not exactly fit the needs of a system administrator
+who has to deploy and upgrade packages on lots of hosts. In other
+words, the GNU Build System does not replace a package manager.
+
+Such package managers usually need to know which files have been
+installed by a package, so a mere @code{make install} is
+inappropriate.
+
+@cindex Staged installation
+
+The @code{DESTDIR} variable can be used to perform a staged
+installation. The package should be configured as if it was going to
+be installed in its final location (e.g., @code{--prefix /usr}), but
+when running @code{make install}, the @code{DESTDIR} should be set to
+the absolute name of a directory into which the installation will be
+diverted. From this directory it is easy to review which files are
+being installed where, and finally copy them to their final location
+by some means.
+
+@cindex Binary package
+
+For instance here is how we could create a binary package containing a
+snapshot of all the files to be installed.
+
+@c Keep in sync with amhello-binpkg.sh
+@example
+~/amhello-1.0 % @kbd{./configure --prefix /usr}
+@dots{}
+~/amhello-1.0 % @kbd{make}
+@dots{}
+~/amhello-1.0 % @kbd{make DESTDIR=$HOME/inst install}
+@dots{}
+~/amhello-1.0 % @kbd{cd ~/inst}
+~/inst % @kbd{find . -type f -print > ../files.lst}
+~/inst % @kbd{tar zcvf ~/amhello-1.0-i686.tar.gz `cat ../files.lst`}
+./usr/bin/hello
+./usr/share/doc/amhello/README
+@end example
+
+After this example, @code{amhello-1.0-i686.tar.gz} is ready to be
+uncompressed in @file{/} on many hosts. (Using @code{`cat ../files.lst`}
+instead of @samp{.} as argument for @command{tar} avoids entries for
+each subdirectory in the archive: we would not like @command{tar} to
+restore the modification time of @file{/}, @file{/usr/}, etc.)
+
+Note that when building packages for several architectures, it might
+be convenient to use @code{make install-data} and @code{make
+install-exec} (@pxref{Two-Part Install}) to gather
+architecture-independent files in a single package.
+
+@xref{Install}, for more information.
+
+@c We should document PRE_INSTALL/POST_INSTALL/NORMAL_INSTALL and their
+@c UNINSTALL counterparts.
+
+@node Preparing Distributions
+@subsection Preparing Distributions
+@cindex Preparing distributions
+@cindex Packages, preparation
+@cindex Distributions, preparation
+
+We have already mentioned @code{make dist}. This target collects all
+your source files and the necessary parts of the build system to
+create a tarball named @file{@var{package}-@var{version}.tar.gz}.
+
+@cindex @code{distcheck} better than @code{dist}
+
+Another, more useful command is @code{make distcheck}. The
+@code{distcheck} target constructs
+@file{@var{package}-@var{version}.tar.gz} just as well as @code{dist},
+but it additionally ensures most of the use cases presented so far
+work:
+
+@itemize @bullet
+@item
+It attempts a full compilation of the package (@pxref{Basic
+Installation}), unpacking the newly constructed tarball, running
+@code{make}, @code{make check}, @code{make install}, as well as
+@code{make installcheck}, and even @code{make dist},
+@item
+it tests VPATH builds with read-only source tree (@pxref{VPATH Builds}),
+@item
+it makes sure @code{make clean}, @code{make distclean}, and @code{make
+uninstall} do not omit any file (@pxref{Standard Targets}),
+@item
+and it checks that @code{DESTDIR} installations work (@pxref{DESTDIR}).
+@end itemize
+
+All of these actions are performed in a temporary directory, so that no
+root privileges are required. Please note that the exact location and the
+exact structure of such a subdirectory (where the extracted sources are
+placed, how the temporary build and install directories are named and how
+deeply they are nested, etc.) is to be considered an implementation detail,
+which can change at any time; so do not rely on it.
+
+Releasing a package that fails @code{make distcheck} means that one of
+the scenarios we presented will not work and some users will be
+disappointed. Therefore it is a good practice to release a package
+only after a successful @code{make distcheck}. This of course does
+not imply that the package will be flawless, but at least it will
+prevent some of the embarrassing errors you may find in packages
+released by people who have never heard about @code{distcheck} (like
+@code{DESTDIR} not working because of a typo, or a distributed file
+being erased by @code{make clean}, or even @code{VPATH} builds not
+working).
+
+@xref{Creating amhello}, to recreate @file{amhello-1.0.tar.gz} using
+@code{make distcheck}. @xref{Checking the Distribution}, for more
+information about @code{distcheck}.
+
+@node Dependency Tracking
+@subsection Automatic Dependency Tracking
+@cindex Dependency tracking
+
+Dependency tracking is performed as a side-effect of compilation.
+Each time the build system compiles a source file, it computes its
+list of dependencies (in C these are the header files included by the
+source being compiled). Later, any time @command{make} is run and a
+dependency appears to have changed, the dependent files will be
+rebuilt.
+
+Automake generates code for automatic dependency tracking by default,
+unless the developer chooses to override it; for more information,
+@pxref{Dependencies}.
+
+When @command{configure} is executed, you can see it probing each
+compiler for the dependency mechanism it supports (several mechanisms
+can be used):
+
+@example
+~/amhello-1.0 % @kbd{./configure --prefix /usr}
+@dots{}
+checking dependency style of gcc... gcc3
+@dots{}
+@end example
+
+Because dependencies are only computed as a side-effect of the
+compilation, no dependency information exists the first time a package
+is built. This is OK because all the files need to be built anyway:
+@code{make} does not have to decide which files need to be rebuilt.
+In fact, dependency tracking is completely useless for one-time builds
+and there is a @command{configure} option to disable this:
+
+@table @option
+@item --disable-dependency-tracking
+@opindex --disable-dependency-tracking
+Speed up one-time builds.
+@end table
+
+Some compilers do not offer any practical way to derive the list of
+dependencies as a side-effect of the compilation, requiring a separate
+run (maybe of another tool) to compute these dependencies. The
+performance penalty implied by these methods is important enough to
+disable them by default. The option @option{--enable-dependency-tracking}
+must be passed to @command{configure} to activate them.
+
+@table @option
+@item --enable-dependency-tracking
+@opindex --enable-dependency-tracking
+Do not reject slow dependency extractors.
+@end table
+
+@xref{Dependency Tracking Evolution, , Dependency Tracking Evolution,
+automake-history, Brief History of Automake}, for some discussion about
+the different dependency tracking schemes used by Automake over the years.
+
+@node Nested Packages
+@subsection Nested Packages
+@cindex Nested packages
+@cindex Packages, nested
+@cindex Subpackages
+
+Although nesting packages isn't something we would recommend to
+someone who is discovering the Autotools, it is a nice feature worthy
+of mention in this small advertising tour.
+
+Autoconfiscated packages (that means packages whose build system have
+been created by Autoconf and friends) can be nested to arbitrary
+depth.
+
+A typical setup is that package A will distribute one of the libraries
+it needs in a subdirectory. This library B is a complete package with
+its own GNU Build System. The @command{configure} script of A will
+run the @command{configure} script of B as part of its execution,
+building and installing A will also build and install B. Generating a
+distribution for A will also include B.
+
+It is possible to gather several packages like this. GCC is a heavy
+user of this feature. This gives installers a single package to
+configure, build and install, while it allows developers to work on
+subpackages independently.
+
+When configuring nested packages, the @command{configure} options
+given to the top-level @command{configure} are passed recursively to
+nested @command{configure}s. A package that does not understand an
+option will ignore it, assuming it is meaningful to some other
+package.
+
+@opindex --help=recursive
+
+The command @code{configure --help=recursive} can be used to display
+the options supported by all the included packages.
+
+@xref{Subpackages}, for an example setup.
+
+@node Why Autotools
+@section How Autotools Help
+@cindex Autotools, purpose
+
+There are several reasons why you may not want to implement the GNU
+Build System yourself (read: write a @file{configure} script and
+@file{Makefile}s yourself).
+
+@itemize @bullet
+@item
+As we have seen, the GNU Build System has a lot of
+features (@pxref{Use Cases}).
+Some users may expect features you have not implemented because
+you did not need them.
+@item
+Implementing these features portably is difficult and exhausting.
+Think of writing portable shell scripts, and portable
+@file{Makefile}s, for systems you may not have handy. @xref{Portable
+Shell, , Portable Shell Programming, autoconf, The Autoconf Manual}, to
+convince yourself.
+@item
+You will have to upgrade your setup to follow changes to the GNU
+Coding Standards.
+@end itemize
+
+The GNU Autotools take all this burden off your back and provide:
+
+@itemize @bullet
+@item
+Tools to create a portable, complete, and self-contained GNU Build
+System, from simple instructions.
+@emph{Self-contained} meaning the resulting build system does not
+require the GNU Autotools.
+@item
+A central place where fixes and improvements are made:
+a bug-fix for a portability issue will benefit every package.
+@end itemize
+
+Yet there also exist reasons why you may want NOT to use the
+Autotools@enddots{} For instance you may be already using (or used to)
+another incompatible build system. Autotools will only be useful if
+you do accept the concepts of the GNU Build System. People who have their
+own idea of how a build system should work will feel frustrated by the
+Autotools.
+
+@node Hello World
+@section A Small Hello World
+@cindex Example Hello World
+@cindex Hello World example
+@cindex @file{amhello-1.0.tar.gz}, creation
+
+In this section we recreate the @file{amhello-1.0} package from
+scratch. The first subsection shows how to call the Autotools to
+instantiate the GNU Build System, while the second explains the
+meaning of the @file{configure.ac} and @file{Makefile.am} files read
+by the Autotools.
+
+@anchor{amhello Explained}
+@menu
+* Creating amhello:: Create @file{amhello-1.0.tar.gz} from scratch
+* amhello's configure.ac Setup Explained::
+* amhello's Makefile.am Setup Explained::
+@end menu
+
+@node Creating amhello
+@subsection Creating @file{amhello-1.0.tar.gz}
+
+Here is how we can recreate @file{amhello-1.0.tar.gz} from scratch.
+The package is simple enough so that we will only need to write 5
+files. (You may copy them from the final @file{amhello-1.0.tar.gz}
+that is distributed with Automake if you do not want to write them.)
+
+Create the following files in an empty directory.
+
+@itemize @bullet
+
+@item
+@file{src/main.c} is the source file for the @file{hello} program. We
+store it in the @file{src/} subdirectory, because later, when the package
+evolves, it will ease the addition of a @file{man/} directory for man
+pages, a @file{data/} directory for data files, etc.
+@example
+~/amhello % @kbd{cat src/main.c}
+#include <config.h>
+#include <stdio.h>
+
+int
+main (void)
+@{
+ puts ("Hello World!");
+ puts ("This is " PACKAGE_STRING ".");
+ return 0;
+@}
+@end example
+
+@item
+@file{README} contains some very limited documentation for our little
+package.
+@example
+~/amhello % @kbd{cat README}
+This is a demonstration package for GNU Automake.
+Type 'info Automake' to read the Automake manual.
+@end example
+
+@item
+@file{Makefile.am} and @file{src/Makefile.am} contain Automake
+instructions for these two directories.
+
+@example
+~/amhello % @kbd{cat src/Makefile.am}
+bin_PROGRAMS = hello
+hello_SOURCES = main.c
+~/amhello % @kbd{cat Makefile.am}
+SUBDIRS = src
+dist_doc_DATA = README
+@end example
+
+@item
+Finally, @file{configure.ac} contains Autoconf instructions to
+create the @command{configure} script.
+
+@example
+~/amhello % @kbd{cat configure.ac}
+AC_INIT([amhello], [1.0], [@value{PACKAGE_BUGREPORT}])
+AM_INIT_AUTOMAKE([-Wall -Werror foreign])
+AC_PROG_CC
+AC_CONFIG_HEADERS([config.h])
+AC_CONFIG_FILES([
+ Makefile
+ src/Makefile
+])
+AC_OUTPUT
+@end example
+@end itemize
+
+@cindex @command{autoreconf}, example
+
+Once you have these five files, it is time to run the Autotools to
+instantiate the build system. Do this using the @command{autoreconf}
+command as follows:
+
+@example
+~/amhello % @kbd{autoreconf --install}
+configure.ac: installing './install-sh'
+configure.ac: installing './missing'
+configure.ac: installing './compile'
+src/Makefile.am: installing './depcomp'
+@end example
+
+At this point the build system is complete.
+
+In addition to the three scripts mentioned in its output, you can see
+that @command{autoreconf} created four other files: @file{configure},
+@file{config.h.in}, @file{Makefile.in}, and @file{src/Makefile.in}.
+The latter three files are templates that will be adapted to the
+system by @command{configure} under the names @file{config.h},
+@file{Makefile}, and @file{src/Makefile}. Let's do this:
+
+@example
+~/amhello % @kbd{./configure}
+checking for a BSD-compatible install... /usr/bin/install -c
+checking whether build environment is sane... yes
+checking for gawk... no
+checking for mawk... mawk
+checking whether make sets $(MAKE)... yes
+checking for gcc... gcc
+checking for C compiler default output file name... a.out
+checking whether the C compiler works... yes
+checking whether we are cross compiling... no
+checking for suffix of executables...
+checking for suffix of object files... o
+checking whether we are using the GNU C compiler... yes
+checking whether gcc accepts -g... yes
+checking for gcc option to accept ISO C89... none needed
+checking for style of include used by make... GNU
+checking dependency style of gcc... gcc3
+configure: creating ./config.status
+config.status: creating Makefile
+config.status: creating src/Makefile
+config.status: creating config.h
+config.status: executing depfiles commands
+@end example
+
+@trindex distcheck
+@cindex @code{distcheck} example
+
+You can see @file{Makefile}, @file{src/Makefile}, and @file{config.h}
+being created at the end after @command{configure} has probed the
+system. It is now possible to run all the targets we wish
+(@pxref{Standard Targets}). For instance:
+
+@example
+~/amhello % @kbd{make}
+@dots{}
+~/amhello % @kbd{src/hello}
+Hello World!
+This is amhello 1.0.
+~/amhello % @kbd{make distcheck}
+@dots{}
+=============================================
+amhello-1.0 archives ready for distribution:
+amhello-1.0.tar.gz
+=============================================
+@end example
+
+Note that running @command{autoreconf} is only needed initially when
+the GNU Build System does not exist. When you later change some
+instructions in a @file{Makefile.am} or @file{configure.ac}, the
+relevant part of the build system will be regenerated automatically
+when you execute @command{make}.
+
+@command{autoreconf} is a script that calls @command{autoconf},
+@command{automake}, and a bunch of other commands in the right order.
+If you are beginning with these tools, it is not important to figure
+out in which order all of these tools should be invoked and why. However,
+because Autoconf and Automake have separate manuals, the important
+point to understand is that @command{autoconf} is in charge of
+creating @file{configure} from @file{configure.ac}, while
+@command{automake} is in charge of creating @file{Makefile.in}s from
+@file{Makefile.am}s and @file{configure.ac}. This should at least
+direct you to the right manual when seeking answers.
+
+
+@node amhello's configure.ac Setup Explained
+@subsection @code{amhello}'s @file{configure.ac} Setup Explained
+
+@cindex @file{configure.ac}, Hello World
+
+Let us begin with the contents of @file{configure.ac}.
+
+@example
+AC_INIT([amhello], [1.0], [@value{PACKAGE_BUGREPORT}])
+AM_INIT_AUTOMAKE([-Wall -Werror foreign])
+AC_PROG_CC
+AC_CONFIG_HEADERS([config.h])
+AC_CONFIG_FILES([
+ Makefile
+ src/Makefile
+])
+AC_OUTPUT
+@end example
+
+This file is read by both @command{autoconf} (to create
+@file{configure}) and @command{automake} (to create the various
+@file{Makefile.in}s). It contains a series of M4 macros that will be
+expanded as shell code to finally form the @file{configure} script.
+We will not elaborate on the syntax of this file, because the Autoconf
+manual has a whole section about it (@pxref{Writing Autoconf Input, ,
+Writing @file{configure.ac}, autoconf, The Autoconf Manual}).
+
+The macros prefixed with @code{AC_} are Autoconf macros, documented
+in the Autoconf manual (@pxref{Autoconf Macro Index, , Autoconf Macro
+Index, autoconf, The Autoconf Manual}). The macros that start with
+@code{AM_} are Automake macros, documented later in this manual
+(@pxref{Macro Index}).
+
+The first two lines of @file{configure.ac} initialize Autoconf and
+Automake. @code{AC_INIT} takes in as parameters the name of the package,
+its version number, and a contact address for bug-reports about the
+package (this address is output at the end of @code{./configure
+--help}, for instance). When adapting this setup to your own package,
+by all means please do not blindly copy Automake's address: use the
+mailing list of your package, or your own mail address.
+
+@opindex -Wall
+@opindex -Werror
+@opindex foreign
+
+The argument to @code{AM_INIT_AUTOMAKE} is a list of options for
+@command{automake} (@pxref{Options}). @option{-Wall} and
+@option{-Werror} ask @command{automake} to turn on all warnings and
+report them as errors. We are speaking of @strong{Automake} warnings
+here, such as dubious instructions in @file{Makefile.am}. This has
+absolutely nothing to do with how the compiler will be called, even
+though it may support options with similar names. Using @option{-Wall
+-Werror} is a safe setting when starting to work on a package: you do
+not want to miss any issues. Later you may decide to relax things a
+bit. The @option{foreign} option tells Automake that this package
+will not follow the GNU Standards. GNU packages should always
+distribute additional files such as @file{ChangeLog}, @file{AUTHORS},
+etc. We do not want @command{automake} to complain about these
+missing files in our small example.
+
+The @code{AC_PROG_CC} line causes the @command{configure} script to
+search for a C compiler and define the variable @code{CC} with its
+name. The @file{src/Makefile.in} file generated by Automake uses the
+variable @code{CC} to build @file{hello}, so when @command{configure}
+creates @file{src/Makefile} from @file{src/Makefile.in}, it will define
+@code{CC} with the value it has found. If Automake is asked to create
+a @file{Makefile.in} that uses @code{CC} but @file{configure.ac} does
+not define it, it will suggest you add a call to @code{AC_PROG_CC}.
+
+The @code{AC_CONFIG_HEADERS([config.h])} invocation causes the
+@command{configure} script to create a @file{config.h} file gathering
+@samp{#define}s defined by other macros in @file{configure.ac}. In our
+case, the @code{AC_INIT} macro already defined a few of them. Here
+is an excerpt of @file{config.h} after @command{configure} has run:
+
+@smallexample
+@dots{}
+/* Define to the address where bug reports for this package should be sent. */
+#define PACKAGE_BUGREPORT "@value{PACKAGE_BUGREPORT}"
+
+/* Define to the full name and version of this package. */
+#define PACKAGE_STRING "amhello 1.0"
+@dots{}
+@end smallexample
+
+As you probably noticed, @file{src/main.c} includes @file{config.h} so
+it can use @code{PACKAGE_STRING}. In a real-world project,
+@file{config.h} can grow really big, with one @samp{#define} per
+feature probed on the system.
+
+The @code{AC_CONFIG_FILES} macro declares the list of files that
+@command{configure} should create from their @file{*.in} templates.
+Automake also scans this list to find the @file{Makefile.am} files it must
+process. (This is important to remember: when adding a new directory
+to your project, you should add its @file{Makefile} to this list,
+otherwise Automake will never process the new @file{Makefile.am} you
+wrote in that directory.)
+
+Finally, the @code{AC_OUTPUT} line is a closing command that actually
+produces the part of the script in charge of creating the files
+registered with @code{AC_CONFIG_HEADERS} and @code{AC_CONFIG_FILES}.
+
+@cindex @command{autoscan}
+
+When starting a new project, we suggest you start with such a simple
+@file{configure.ac}, and gradually add the other tests it requires.
+The command @command{autoscan} can also suggest a few of the tests
+your package may need (@pxref{autoscan Invocation, , Using
+@command{autoscan} to Create @file{configure.ac}, autoconf, The
+Autoconf Manual}).
+
+
+@node amhello's Makefile.am Setup Explained
+@subsection @code{amhello}'s @file{Makefile.am} Setup Explained
+
+@cindex @file{Makefile.am}, Hello World
+
+We now turn to @file{src/Makefile.am}. This file contains
+Automake instructions to build and install @file{hello}.
+
+@example
+bin_PROGRAMS = hello
+hello_SOURCES = main.c
+@end example
+
+A @file{Makefile.am} has the same syntax as an ordinary
+@file{Makefile}. When @command{automake} processes a
+@file{Makefile.am} it copies the entire file into the output
+@file{Makefile.in} (that will be later turned into @file{Makefile} by
+@command{configure}) but will react to certain variable definitions
+by generating some build rules and other variables.
+Often @file{Makefile.am}s contain only a list of variable definitions as
+above, but they can also contain other variable and rule definitions that
+@command{automake} will pass along without interpretation.
+
+Variables that end with @code{_PROGRAMS} are special variables
+that list programs that the resulting @file{Makefile} should build.
+In Automake speak, this @code{_PROGRAMS} suffix is called a
+@dfn{primary}; Automake recognizes other primaries such as
+@code{_SCRIPTS}, @code{_DATA}, @code{_LIBRARIES}, etc.@: corresponding
+to different types of files.
+
+The @samp{bin} part of the @code{bin_PROGRAMS} tells
+@command{automake} that the resulting programs should be installed in
+@var{bindir}. Recall that the GNU Build System uses a set of variables
+to denote destination directories and allow users to customize these
+locations (@pxref{Standard Directory Variables}). Any such directory
+variable can be put in front of a primary (omitting the @code{dir}
+suffix) to tell @command{automake} where to install the listed files.
+
+Programs need to be built from source files, so for each program
+@code{@var{prog}} listed in a @code{@w{_PROGRAMS}} variable,
+@command{automake} will look for another variable named
+@code{@var{prog}_SOURCES} listing its source files. There may be more
+than one source file: they will all be compiled and linked together.
+
+Automake also knows that source files need to be distributed when
+creating a tarball (unlike built programs). So a side-effect of this
+@code{hello_SOURCES} declaration is that @file{main.c} will be
+part of the tarball created by @code{make dist}.
+
+Finally here are some explanations regarding the top-level
+@file{Makefile.am}.
+
+@example
+SUBDIRS = src
+dist_doc_DATA = README
+@end example
+
+@code{SUBDIRS} is a special variable listing all directories that
+@command{make} should recurse into before processing the current
+directory. So this line is responsible for @command{make} building
+@file{src/hello} even though we run it from the top-level. This line
+also causes @code{make install} to install @file{src/hello} before
+installing @file{README} (not that this order matters).
+
+The line @code{dist_doc_DATA = README} causes @file{README} to be
+distributed and installed in @var{docdir}. Files listed with the
+@code{_DATA} primary are not automatically part of the tarball built
+with @code{make dist}, so we add the @code{dist_} prefix so they get
+distributed. However, for @file{README} it would not have been
+necessary: @command{automake} automatically distributes any
+@file{README} file it encounters (the list of other files
+automatically distributed is presented by @code{automake --help}).
+The only important effect of this second line is therefore to install
+@file{README} during @code{make install}.
+
+One thing not covered in this example is accessing the installation
+directory values (@pxref{Standard Directory Variables}) from your
+program code, that is, converting them into defined macros. For this,
+@pxref{Defining Directories,,, autoconf, The Autoconf Manual}.
+
+
+@node Generalities
+@chapter General ideas
+
+The following sections cover a few basic ideas that will help you
+understand how Automake works.
+
+@menu
+* General Operation:: General operation of Automake
+* Strictness:: Standards conformance checking
+* Uniform:: The Uniform Naming Scheme
+* Length Limitations:: Staying below the command line length limit
+* Canonicalization:: How derived variables are named
+* User Variables:: Variables reserved for the user
+* Auxiliary Programs:: Programs automake might require
+@end menu
+
+
+@node General Operation
+@section General Operation
+
+Automake works by reading a @file{Makefile.am} and generating a
+@file{Makefile.in}. Certain variables and rules defined in the
+@file{Makefile.am} instruct Automake to generate more specialized code;
+for instance, a @code{bin_PROGRAMS} variable definition will cause rules
+for compiling and linking programs to be generated.
+
+@cindex Non-standard targets
+@cindex @code{git-dist}, non-standard example
+@trindex git-dist
+
+The variable definitions and rules in the @file{Makefile.am} are
+copied mostly verbatim into the generated file, with all variable
+definitions preceding all rules. This allows you to add almost
+arbitrary code into the generated @file{Makefile.in}. For instance,
+the Automake distribution includes a non-standard rule for the
+@code{git-dist} target, which the Automake maintainer uses to make
+distributions from the source control system.
+
+@cindex GNU make extensions
+
+Note that most GNU make extensions are not recognized by Automake. Using
+such extensions in a @file{Makefile.am} will lead to errors or confusing
+behavior.
+
+@cindex Append operator
+@cmindex +=
+A special exception is that the GNU make append operator, @samp{+=}, is
+supported. This operator appends its right hand argument to the variable
+specified on the left. Automake will translate the operator into
+an ordinary @samp{=} operator; @samp{+=} will thus work with any make program.
+
+Automake tries to keep comments grouped with any adjoining rules or
+variable definitions.
+
+@cindex Limitations of automake parser
+@cindex Automake parser, limitations of
+@cindex indentation in Makefile.am
+Generally, Automake is not particularly smart in the parsing of unusual
+Makefile constructs, so you're advised to avoid fancy constructs or
+``creative'' use of whitespace.
+@c Keep this in sync with doc-parsing-buglets-tabs.sh
+For example, @key{TAB} characters cannot be used between a target name
+and the following ``@code{:}'' character, and variable assignments
+shouldn't be indented with @key{TAB} characters.
+@c Keep this in sync with doc-parsing-buglets-colneq-subst.sh
+Also, using more complex macro in target names can cause trouble:
+
+@example
+% @kbd{cat Makefile.am}
+$(FOO:=x): bar
+% @kbd{automake}
+Makefile.am:1: bad characters in variable name '$(FOO'
+Makefile.am:1: ':='-style assignments are not portable
+@end example
+
+@cindex Make targets, overriding
+@cindex Make rules, overriding
+@cindex Overriding make rules
+@cindex Overriding make targets
+
+A rule defined in @file{Makefile.am} generally overrides any such
+rule of a similar name that would be automatically generated by
+@command{automake}. Although this is a supported feature, it is generally
+best to avoid making use of it, as sometimes the generated rules are
+very particular.
+
+@cindex Variables, overriding
+@cindex Overriding make variables
+
+Similarly, a variable defined in @file{Makefile.am} or
+@code{AC_SUBST}ed from @file{configure.ac} will override any
+definition of the variable that @command{automake} would ordinarily
+create. This feature is more often useful than the ability to
+override a rule. Be warned that many of the variables generated by
+@command{automake} are considered to be for internal use only, and their
+names might change in future releases.
+
+@cindex Recursive operation of Automake
+@cindex Automake, recursive operation
+@cindex Example of recursive operation
+
+When examining a variable definition, Automake will recursively examine
+variables referenced in the definition. For example, if Automake is
+looking at the content of @code{foo_SOURCES} in this snippet
+
+@c Keep in sync with interp.sh
+@example
+xs = a.c b.c
+foo_SOURCES = c.c $(xs)
+@end example
+
+it would use the files @file{a.c}, @file{b.c}, and @file{c.c} as the
+contents of @code{foo_SOURCES}.
+
+@cindex @code{##} (special Automake comment)
+@cindex Special Automake comment
+@cindex Comment, special to Automake
+
+Automake also allows a form of comment that is @emph{not} copied into
+the output; all lines beginning with @samp{##} (leading spaces allowed)
+are completely ignored by Automake.
+
+It is customary to make the first line of @file{Makefile.am} read:
+
+@cindex Makefile.am, first line
+@cindex First line of Makefile.am
+
+@example
+## Process this file with automake to produce Makefile.in
+@end example
+
+@c FIXME document customary ordering of Makefile.am here!
+
+
+@node Strictness
+@section Strictness
+
+@cindex Non-GNU packages
+
+While Automake is intended to be used by maintainers of GNU packages, it
+does make some effort to accommodate those who wish to use it, but do
+not want to use all the GNU conventions.
+
+@cindex Strictness, defined
+@cindex Strictness, @option{foreign}
+@cindex @option{foreign} strictness
+@cindex Strictness, @option{gnu}
+@cindex @option{gnu} strictness
+@cindex Strictness, @option{gnits}
+@cindex @option{gnits} strictness
+
+To this end, Automake supports three levels of @dfn{strictness}---the
+strictness indicating how stringently Automake should check standards
+conformance.
+
+The valid strictness levels are:
+
+@table @option
+@item foreign
+Automake will check for only those things that are absolutely
+required for proper operations. For instance, whereas GNU standards
+dictate the existence of a @file{NEWS} file, it will not be required in
+this mode. This strictness will also turn off some warnings by default
+(among them, portability warnings).
+The name comes from the fact that Automake is intended to be
+used for GNU programs; these relaxed rules are not the standard mode of
+operation.
+
+@item gnu
+Automake will check---as much as possible---for compliance to the GNU
+standards for packages. This is the default.
+
+@item gnits
+Automake will check for compliance to the as-yet-unwritten @dfn{Gnits
+standards}. These are based on the GNU standards, but are even more
+detailed. Unless you are a Gnits standards contributor, it is
+recommended that you avoid this option until such time as the Gnits
+standard is actually published (which may never happen).
+@end table
+
+@xref{Gnits}, for more information on the precise implications of the
+strictness level.
+
+
+@node Uniform
+@section The Uniform Naming Scheme
+
+@cindex Uniform naming scheme
+
+Automake variables generally follow a @dfn{uniform naming scheme} that
+makes it easy to decide how programs (and other derived objects) are
+built, and how they are installed. This scheme also supports
+@command{configure} time determination of what should be built.
+
+@cindex @code{_PROGRAMS} primary variable
+@cindex @code{PROGRAMS} primary variable
+@cindex Primary variable, @code{PROGRAMS}
+@cindex Primary variable, defined
+@vindex _PROGRAMS
+
+At @command{make} time, certain variables are used to determine which
+objects are to be built. The variable names are made of several pieces
+that are concatenated together.
+
+The piece that tells @command{automake} what is being built is commonly called
+the @dfn{primary}. For instance, the primary @code{PROGRAMS} holds a
+list of programs that are to be compiled and linked.
+@vindex PROGRAMS
+
+@cindex @code{pkgdatadir}, defined
+@cindex @code{pkgincludedir}, defined
+@cindex @code{pkglibdir}, defined
+@cindex @code{pkglibexecdir}, defined
+
+@vindex pkgdatadir
+@vindex pkgincludedir
+@vindex pkglibdir
+@vindex pkglibexecdir
+
+@cindex @code{PACKAGE}, directory
+A different set of names is used to decide where the built objects
+should be installed. These names are prefixes to the primary, and they
+indicate which standard directory should be used as the installation
+directory. The standard directory names are given in the GNU standards
+(@pxref{Directory Variables, , , standards, The GNU Coding Standards}).
+Automake extends this list with @code{pkgdatadir}, @code{pkgincludedir},
+@code{pkglibdir}, and @code{pkglibexecdir}; these are the same as the
+non-@samp{pkg} versions, but with @samp{$(PACKAGE)} appended. For instance,
+@code{pkglibdir} is defined as @samp{$(libdir)/$(PACKAGE)}.
+
+@cindex @code{EXTRA_}, prepending
+For each primary, there is one additional variable named by prepending
+@samp{EXTRA_} to the primary name. This variable is used to list
+objects that may or may not be built, depending on what
+@command{configure} decides. This variable is required because Automake
+must statically know the entire list of objects that may be built in
+order to generate a @file{Makefile.in} that will work in all cases.
+
+@cindex @code{EXTRA_PROGRAMS}, defined
+@cindex Example, @code{EXTRA_PROGRAMS}
+@cindex @command{cpio} example
+
+For instance, @command{cpio} decides at configure time which programs
+should be built. Some of the programs are installed in @code{bindir},
+and some are installed in @code{sbindir}:
+
+@example
+EXTRA_PROGRAMS = mt rmt
+bin_PROGRAMS = cpio pax
+sbin_PROGRAMS = $(MORE_PROGRAMS)
+@end example
+
+Defining a primary without a prefix as a variable, e.g.,
+@samp{PROGRAMS}, is an error.
+
+Note that the common @samp{dir} suffix is left off when constructing the
+variable names; thus one writes @samp{bin_PROGRAMS} and not
+@samp{bindir_PROGRAMS}.
+
+Not every sort of object can be installed in every directory. Automake
+will flag those attempts it finds in error (but see below how to override
+the check if you really need to).
+Automake will also diagnose obvious misspellings in directory names.
+
+@cindex Extending list of installation directories
+@cindex Installation directories, extending list
+
+Sometimes the standard directories---even as augmented by
+Automake---are not enough. In particular it is sometimes useful, for
+clarity, to install objects in a subdirectory of some predefined
+directory. To this end, Automake allows you to extend the list of
+possible installation directories. A given prefix (e.g., @samp{zar})
+is valid if a variable of the same name with @samp{dir} appended is
+defined (e.g., @samp{zardir}).
+
+For instance, the following snippet will install @file{file.xml} into
+@samp{$(datadir)/xml}.
+
+@c Keep in sync with primary-prefix-couples-documented-valid.sh
+@example
+xmldir = $(datadir)/xml
+xml_DATA = file.xml
+@end example
+
+This feature can also be used to override the sanity checks Automake
+performs to diagnose suspicious directory/primary couples (in the
+unlikely case these checks are undesirable, and you really know what
+you're doing). For example, Automake would error out on this input:
+
+@c Should be tested in primary-prefix-invalid-couples.sh
+@example
+# Forbidden directory combinations, automake will error out on this.
+pkglib_PROGRAMS = foo
+doc_LIBRARIES = libquux.a
+@end example
+
+@noindent
+but it will succeed with this:
+
+@c Keep in sync with primary-prefix-couples-documented-valid.sh
+@example
+# Work around forbidden directory combinations. Do not use this
+# without a very good reason!
+my_execbindir = $(pkglibdir)
+my_doclibdir = $(docdir)
+my_execbin_PROGRAMS = foo
+my_doclib_LIBRARIES = libquux.a
+@end example
+
+The @samp{exec} substring of the @samp{my_execbindir} variable lets
+the files be installed at the right time (@pxref{The Two Parts of
+Install}).
+
+@cindex @samp{noinst_} primary prefix, definition
+@vindex noinst_
+
+The special prefix @samp{noinst_} indicates that the objects in question
+should be built but not installed at all. This is usually used for
+objects required to build the rest of your package, for instance static
+libraries (@pxref{A Library}), or helper scripts.
+
+@cindex @samp{check_} primary prefix, definition
+@vindex check_
+
+The special prefix @samp{check_} indicates that the objects in question
+should not be built until the @samp{make check} command is run. Those
+objects are not installed either.
+
+The current primary names are @samp{PROGRAMS}, @samp{LIBRARIES},
+@samp{LTLIBRARIES}, @samp{LISP}, @samp{PYTHON}, @samp{JAVA},
+@samp{SCRIPTS}, @samp{DATA}, @samp{HEADERS}, @samp{MANS}, and
+@samp{TEXINFOS}.
+@vindex PROGRAMS
+@vindex LIBRARIES
+@vindex LTLIBRARIES
+@vindex LISP
+@vindex PYTHON
+@vindex JAVA
+@vindex SCRIPTS
+@vindex DATA
+@vindex HEADERS
+@vindex MANS
+@vindex TEXINFOS
+
+Some primaries also allow additional prefixes that control other
+aspects of @command{automake}'s behavior. The currently defined prefixes
+are @samp{dist_}, @samp{nodist_}, @samp{nobase_}, and @samp{notrans_}.
+These prefixes are explained later (@pxref{Program and Library Variables})
+(@pxref{Man Pages}).
+
+
+@node Length Limitations
+@section Staying below the command line length limit
+
+@cindex command line length limit
+@cindex ARG_MAX
+
+Traditionally, most unix-like systems have a length limitation for the
+command line arguments and environment contents when creating new
+processes (see for example
+@uref{http://www.in-ulm.de/@/~mascheck/@/various/@/argmax/} for an
+overview on this issue),
+which of course also applies to commands spawned by @command{make}.
+POSIX requires this limit to be at least 4096 bytes, and most modern
+systems have quite high limits (or are unlimited).
+
+In order to create portable Makefiles that do not trip over these
+limits, it is necessary to keep the length of file lists bounded.
+Unfortunately, it is not possible to do so fully transparently within
+Automake, so your help may be needed. Typically, you can split long
+file lists manually and use different installation directory names for
+each list. For example,
+
+@example
+data_DATA = file1 @dots{} file@var{N} file@var{N+1} @dots{} file@var{2N}
+@end example
+
+@noindent
+may also be written as
+
+@c Keep in sync with primary-prefix-couples-documented-valid.sh
+@example
+data_DATA = file1 @dots{} file@var{N}
+data2dir = $(datadir)
+data2_DATA = file@var{N+1} @dots{} file@var{2N}
+@end example
+
+@noindent
+and will cause Automake to treat the two lists separately during
+@code{make install}. See @ref{The Two Parts of Install} for choosing
+directory names that will keep the ordering of the two parts of
+installation Note that @code{make dist} may still only work on a host
+with a higher length limit in this example.
+
+Automake itself employs a couple of strategies to avoid long command
+lines. For example, when @samp{$@{srcdir@}/} is prepended to file
+names, as can happen with above @code{$(data_DATA)} lists, it limits
+the amount of arguments passed to external commands.
+
+Unfortunately, some system's @command{make} commands may prepend
+@code{VPATH} prefixes like @samp{$@{srcdir@}/} to file names from the
+source tree automatically (@pxref{Automatic Rule Rewriting, , Automatic
+Rule Rewriting, autoconf, The Autoconf Manual}). In this case, the user
+may have to switch to use GNU Make, or refrain from using VPATH builds,
+in order to stay below the length limit.
+
+For libraries and programs built from many sources, convenience archives
+may be used as intermediates in order to limit the object list length
+(@pxref{Libtool Convenience Libraries}).
+
+
+@node Canonicalization
+@section How derived variables are named
+
+@cindex canonicalizing Automake variables
+
+Sometimes a Makefile variable name is derived from some text the
+maintainer supplies. For instance, a program name listed in
+@samp{_PROGRAMS} is rewritten into the name of a @samp{_SOURCES}
+variable. In cases like this, Automake canonicalizes the text, so that
+program names and the like do not have to follow Makefile variable naming
+rules. All characters in the name except for letters, numbers, the
+strudel (@@), and the underscore are turned into underscores when making
+variable references.
+
+For example, if your program is named @file{sniff-glue}, the derived
+variable name would be @samp{sniff_glue_SOURCES}, not
+@samp{sniff-glue_SOURCES}. Similarly the sources for a library named
+@file{libmumble++.a} should be listed in the
+@samp{libmumble___a_SOURCES} variable.
+
+The strudel is an addition, to make the use of Autoconf substitutions in
+variable names less obfuscating.
+
+
+@node User Variables
+@section Variables reserved for the user
+
+@cindex variables, reserved for the user
+@cindex user variables
+
+Some @file{Makefile} variables are reserved by the GNU Coding Standards
+for the use of the ``user''---the person building the package. For
+instance, @code{CFLAGS} is one such variable.
+
+Sometimes package developers are tempted to set user variables such as
+@code{CFLAGS} because it appears to make their job easier. However,
+the package itself should never set a user variable, particularly not
+to include switches that are required for proper compilation of the
+package. Since these variables are documented as being for the
+package builder, that person rightfully expects to be able to override
+any of these variables at build time.
+
+To get around this problem, Automake introduces an automake-specific
+shadow variable for each user flag variable. (Shadow variables are
+not introduced for variables like @code{CC}, where they would make no
+sense.) The shadow variable is named by prepending @samp{AM_} to the
+user variable's name. For instance, the shadow variable for
+@code{YFLAGS} is @code{AM_YFLAGS}. The package maintainer---that is,
+the author(s) of the @file{Makefile.am} and @file{configure.ac}
+files---may adjust these shadow variables however necessary.
+
+@xref{Flag Variables Ordering}, for more discussion about these
+variables and how they interact with per-target variables.
+
+@node Auxiliary Programs
+@section Programs automake might require
+
+@cindex Programs, auxiliary
+@cindex Auxiliary programs
+
+Automake sometimes requires helper programs so that the generated
+@file{Makefile} can do its work properly. There are a fairly large
+number of them, and we list them here.
+
+Although all of these files are distributed and installed with
+Automake, a couple of them are maintained separately. The Automake
+copies are updated before each release, but we mention the original
+source in case you need more recent versions.
+
+@table @code
+@item ar-lib
+This is a wrapper primarily for the Microsoft lib archiver, to make
+it more POSIX-like.
+
+@item compile
+This is a wrapper for compilers that do not accept options @option{-c}
+and @option{-o} at the same time. It is only used when absolutely
+required. Such compilers are rare, with the Microsoft C/C++ Compiler
+as the most notable exception. This wrapper also makes the following
+common options available for that compiler, while performing file name
+translation where needed: @option{-I}, @option{-L}, @option{-l},
+@option{-Wl,} and @option{-Xlinker}.
+
+@item config.guess
+@itemx config.sub
+These two programs compute the canonical triplets for the given build,
+host, or target architecture. These programs are updated regularly to
+support new architectures and fix probes broken by changes in new
+kernel versions. Each new release of Automake comes with up-to-date
+copies of these programs. If your copy of Automake is getting old,
+you are encouraged to fetch the latest versions of these files from
+@url{https://savannah.gnu.org/git/?group=config} before making a
+release.
+
+@item depcomp
+This program understands how to run a compiler so that it will
+generate not only the desired output but also dependency information
+that is then used by the automatic dependency tracking feature
+(@pxref{Dependencies}).
+
+@item install-sh
+This is a replacement for the @command{install} program that works on
+platforms where @command{install} is unavailable or unusable.
+
+@item mdate-sh
+This script is used to generate a @file{version.texi} file. It examines
+a file and prints some date information about it.
+
+@item missing
+This wraps a number of programs that are typically only required by
+maintainers. If the program in question doesn't exist, or seems to old,
+@command{missing} will print an informative warning before failing out,
+to provide the user with more context and information.
+
+@item mkinstalldirs
+This script used to be a wrapper around @samp{mkdir -p}, which is not
+portable. Now we prefer to use @samp{install-sh -d} when @command{configure}
+finds that @samp{mkdir -p} does not work, this makes one less script to
+distribute.
+
+For backward compatibility @file{mkinstalldirs} is still used and
+distributed when @command{automake} finds it in a package. But it is no
+longer installed automatically, and it should be safe to remove it.
+
+@item py-compile
+This is used to byte-compile Python scripts.
+
+@item test-driver
+This implements the default test driver offered by the parallel
+testsuite harness.
+
+@item texinfo.tex
+Not a program, this file is required for @samp{make dvi}, @samp{make
+ps} and @samp{make pdf} to work when Texinfo sources are in the
+package. The latest version can be downloaded from
+@url{https://www.gnu.org/software/texinfo/}.
+
+@item ylwrap
+This program wraps @command{lex} and @command{yacc} to rename their
+output files. It also ensures that, for instance, multiple
+@command{yacc} instances can be invoked in a single directory in
+parallel.
+
+@end table
+
+
+@node Examples
+@chapter Some example packages
+
+This section contains two small examples.
+
+The first example (@pxref{Complete}) assumes you have an existing
+project already using Autoconf, with handcrafted @file{Makefile}s, and
+that you want to convert it to using Automake. If you are discovering
+both tools, it is probably better that you look at the Hello World
+example presented earlier (@pxref{Hello World}).
+
+The second example (@pxref{true}) shows how two programs can be built
+from the same file, using different compilation parameters. It
+contains some technical digressions that are probably best skipped on
+first read.
+
+@menu
+* Complete:: A simple example, start to finish
+* true:: Building true and false
+@end menu
+
+
+@node Complete
+@section A simple example, start to finish
+
+@cindex Complete example
+
+Let's suppose you just finished writing @code{zardoz}, a program to make
+your head float from vortex to vortex. You've been using Autoconf to
+provide a portability framework, but your @file{Makefile.in}s have been
+ad-hoc. You want to make them bulletproof, so you turn to Automake.
+
+@cindex @code{AM_INIT_AUTOMAKE}, example use
+
+The first step is to update your @file{configure.ac} to include the
+commands that @command{automake} needs. The way to do this is to add an
+@code{AM_INIT_AUTOMAKE} call just after @code{AC_INIT}:
+
+@example
+AC_INIT([zardoz], [1.0])
+AM_INIT_AUTOMAKE
+@dots{}
+@end example
+
+Since your program doesn't have any complicating factors (e.g., it
+doesn't use @code{gettext}, it doesn't want to build a shared library),
+you're done with this part. That was easy!
+
+@cindex @command{aclocal} program, introduction
+@cindex @file{aclocal.m4}, preexisting
+@cindex @file{acinclude.m4}, defined
+
+Now you must regenerate @file{configure}. But to do that, you'll need
+to tell @command{autoconf} how to find the new macro you've used. The
+easiest way to do this is to use the @command{aclocal} program to
+generate your @file{aclocal.m4} for you. But wait@dots{} maybe you
+already have an @file{aclocal.m4}, because you had to write some hairy
+macros for your program. The @command{aclocal} program lets you put
+your own macros into @file{acinclude.m4}, so simply rename and then
+run:
+
+@example
+mv aclocal.m4 acinclude.m4
+aclocal
+autoconf
+@end example
+
+@cindex @command{zardoz} example
+
+Now it is time to write your @file{Makefile.am} for @code{zardoz}.
+Since @code{zardoz} is a user program, you want to install it where the
+rest of the user programs go: @code{bindir}. Additionally,
+@code{zardoz} has some Texinfo documentation. Your @file{configure.ac}
+script uses @code{AC_REPLACE_FUNCS}, so you need to link against
+@samp{$(LIBOBJS)}. So here's what you'd write:
+
+@example
+bin_PROGRAMS = zardoz
+zardoz_SOURCES = main.c head.c float.c vortex9.c gun.c
+zardoz_LDADD = $(LIBOBJS)
+
+info_TEXINFOS = zardoz.texi
+@end example
+
+Now you can run @samp{automake --add-missing} to generate your
+@file{Makefile.in} and grab any auxiliary files you might need, and
+you're done!
+
+
+@node true
+@section Building true and false
+
+@cindex Example, @command{false} and @command{true}
+@cindex @command{false} Example
+@cindex @command{true} Example
+
+Here is another, trickier example. It shows how to generate two
+programs (@code{true} and @code{false}) from the same source file
+(@file{true.c}). The difficult part is that each compilation of
+@file{true.c} requires different @code{cpp} flags.
+
+@example
+bin_PROGRAMS = true false
+false_SOURCES =
+false_LDADD = false.o
+
+true.o: true.c
+ $(COMPILE) -DEXIT_CODE=0 -c true.c
+
+false.o: true.c
+ $(COMPILE) -DEXIT_CODE=1 -o false.o -c true.c
+@end example
+
+Note that there is no @code{true_SOURCES} definition. Automake will
+implicitly assume that there is a source file named @file{true.c}
+(@pxref{Default _SOURCES}), and
+define rules to compile @file{true.o} and link @file{true}. The
+@samp{true.o: true.c} rule supplied by the above @file{Makefile.am},
+will override the Automake generated rule to build @file{true.o}.
+
+@code{false_SOURCES} is defined to be empty---that way no implicit value
+is substituted. Because we have not listed the source of
+@file{false}, we have to tell Automake how to link the program. This is
+the purpose of the @code{false_LDADD} line. A @code{false_DEPENDENCIES}
+variable, holding the dependencies of the @file{false} target will be
+automatically generated by Automake from the content of
+@code{false_LDADD}.
+
+The above rules won't work if your compiler doesn't accept both
+@option{-c} and @option{-o}. The simplest fix for this is to introduce a
+bogus dependency (to avoid problems with a parallel @command{make}):
+
+@example
+true.o: true.c false.o
+ $(COMPILE) -DEXIT_CODE=0 -c true.c
+
+false.o: true.c
+ $(COMPILE) -DEXIT_CODE=1 -c true.c && mv true.o false.o
+@end example
+
+As it turns out, there is also a much easier way to do this same task.
+Some of the above technique is useful enough that we've kept the
+example in the manual. However if you were to build @code{true} and
+@code{false} in real life, you would probably use per-program
+compilation flags, like so:
+
+@c Keep in sync with specflg7.sh and specflg8.sh
+@example
+bin_PROGRAMS = false true
+
+false_SOURCES = true.c
+false_CPPFLAGS = -DEXIT_CODE=1
+
+true_SOURCES = true.c
+true_CPPFLAGS = -DEXIT_CODE=0
+@end example
+
+In this case Automake will cause @file{true.c} to be compiled twice,
+with different flags. In this instance, the names of the object files
+would be chosen by automake; they would be @file{false-true.o} and
+@file{true-true.o}. (The name of the object files rarely matters.)
+
+@node automake Invocation
+@chapter Creating a @file{Makefile.in}
+@c This node used to be named "Invoking automake". This @anchor
+@c allows old links to still work.
+@anchor{Invoking automake}
+
+@cindex Multiple @file{configure.ac} files
+@cindex Invoking @command{automake}
+@cindex @command{automake}, invoking
+@cindex Invocation of @command{automake}
+@cindex @command{automake}, invocation
+
+To create all the @file{Makefile.in}s for a package, run the
+@command{automake} program in the top level directory, with no
+arguments. @command{automake} will automatically find each
+appropriate @file{Makefile.am} (by scanning @file{configure.ac};
+@pxref{configure}) and generate the corresponding @file{Makefile.in}.
+Note that @command{automake} has a rather simplistic view of what
+constitutes a package; it assumes that a package has only one
+@file{configure.ac}, at the top. If your package has multiple
+@file{configure.ac}s, then you must run @command{automake} in each
+directory holding a @file{configure.ac}. (Alternatively, you may rely
+on Autoconf's @command{autoreconf}, which is able to recurse your
+package tree and run @command{automake} where appropriate.)
+
+You can optionally give @command{automake} an argument; @file{.am} is
+appended to the argument and the result is used as the name of the
+input file. This feature is generally only used to automatically
+rebuild an out-of-date @file{Makefile.in}. Note that
+@command{automake} must always be run from the topmost directory of a
+project, even if being used to regenerate the @file{Makefile.in} in
+some subdirectory. This is necessary because @command{automake} must
+scan @file{configure.ac}, and because @command{automake} uses the
+knowledge that a @file{Makefile.in} is in a subdirectory to change its
+behavior in some cases.
+
+@vindex AUTOCONF
+Automake will run @command{autoconf} to scan @file{configure.ac} and
+its dependencies (i.e., @file{aclocal.m4} and any included file),
+therefore @command{autoconf} must be in your @env{PATH}. If there is
+an @env{AUTOCONF} variable in your environment it will be used
+instead of @command{autoconf}, this allows you to select a particular
+version of Autoconf. By the way, don't misunderstand this paragraph:
+@command{automake} runs @command{autoconf} to @strong{scan} your
+@file{configure.ac}, this won't build @file{configure} and you still
+have to run @command{autoconf} yourself for this purpose.
+
+@cindex @command{automake} options
+@cindex Options, @command{automake}
+@cindex Strictness, command line
+
+@command{automake} accepts the following options:
+
+@cindex Extra files distributed with Automake
+@cindex Files distributed with Automake
+@cindex @file{config.guess}
+
+@table @code
+@item -a
+@itemx --add-missing
+@opindex -a
+@opindex --add-missing
+Automake requires certain common files to exist in certain situations;
+for instance, @file{config.guess} is required if @file{configure.ac} invokes
+@code{AC_CANONICAL_HOST}. Automake is distributed with several of these
+files (@pxref{Auxiliary Programs}); this option will cause the missing
+ones to be automatically added to the package, whenever possible. In
+general if Automake tells you a file is missing, try using this option.
+By default Automake tries to make a symbolic link pointing to its own
+copy of the missing file; this can be changed with @option{--copy}.
+
+Many of the potentially-missing files are common scripts whose
+location may be specified via the @code{AC_CONFIG_AUX_DIR} macro.
+Therefore, @code{AC_CONFIG_AUX_DIR}'s setting affects whether a
+file is considered missing, and where the missing file is added
+(@pxref{Optional}).
+
+In some strictness modes, additional files are installed, see @ref{Gnits}
+for more information.
+
+@item --libdir=@var{dir}
+@opindex --libdir
+Look for Automake data files in directory @var{dir} instead of in the
+installation directory. This is typically used for debugging.
+
+@vindex AUTOMAKE_LIBDIR
+The environment variable @env{AUTOMAKE_LIBDIR} provides another way to
+set the directory containing Automake data files. However
+@option{--libdir} takes precedence over it.
+
+@item --print-libdir
+@opindex --print-libdir
+Print the path of the installation directory containing Automake-provided
+scripts and data files (like e.g., @file{texinfo.texi} and
+@file{install-sh}).
+
+@item -c
+@opindex -c
+@itemx --copy
+@opindex --copy
+When used with @option{--add-missing}, causes installed files to be
+copied. The default is to make a symbolic link.
+
+@item -f
+@opindex -f
+@itemx --force-missing
+@opindex --force-missing
+When used with @option{--add-missing}, causes standard files to be reinstalled
+even if they already exist in the source tree. This involves removing
+the file from the source tree before creating the new symlink (or, with
+@option{--copy}, copying the new file).
+
+@item --foreign
+@opindex --foreign
+Set the global strictness to @option{foreign}. For more information, see
+@ref{Strictness}.
+
+@item --gnits
+@opindex --gnits
+Set the global strictness to @option{gnits}. For more information, see
+@ref{Gnits}.
+
+@item --gnu
+@opindex --gnu
+Set the global strictness to @option{gnu}. For more information, see
+@ref{Gnits}. This is the default strictness.
+
+@item --help
+@opindex --help
+Print a summary of the command line options and exit.
+
+@item -i
+@itemx --ignore-deps
+@opindex -i
+This disables the dependency tracking feature in generated
+@file{Makefile}s; see @ref{Dependencies}.
+
+@item --include-deps
+@opindex --include-deps
+This enables the dependency tracking feature. This feature is enabled
+by default. This option is provided for historical reasons only and
+probably should not be used.
+
+@item --no-force
+@opindex --no-force
+Ordinarily @command{automake} creates all @file{Makefile.in}s mentioned in
+@file{configure.ac}. This option causes it to only update those
+@file{Makefile.in}s that are out of date with respect to one of their
+dependents.
+
+@item -o @var{dir}
+@itemx --output-dir=@var{dir}
+@opindex -o
+@opindex --output-dir
+Put the generated @file{Makefile.in} in the directory @var{dir}.
+Ordinarily each @file{Makefile.in} is created in the directory of the
+corresponding @file{Makefile.am}. This option is deprecated and will be
+removed in a future release.
+
+@item -v
+@itemx --verbose
+@opindex -v
+@opindex --verbose
+Cause Automake to print information about which files are being read or
+created.
+
+@item --version
+@opindex --version
+Print the version number of Automake and exit.
+
+@item -W CATEGORY
+@itemx --warnings=@var{category}
+@opindex -W
+@opindex --warnings
+Output warnings falling in @var{category}. @var{category} can be
+one of:
+@table @code
+@item gnu
+warnings related to the GNU Coding Standards
+(@pxref{Top, , , standards, The GNU Coding Standards}).
+@item obsolete
+obsolete features or constructions
+@item override
+user redefinitions of Automake rules or variables
+@item portability
+portability issues (e.g., use of @command{make} features that are
+known to be not portable)
+@item extra-portability
+extra portability issues related to obscure tools. One example of such
+a tool is the Microsoft @command{lib} archiver.
+@item syntax
+weird syntax, unused variables, typos
+@item unsupported
+unsupported or incomplete features
+@item all
+all the warnings
+@item none
+turn off all the warnings
+@item error
+treat warnings as errors
+@end table
+
+A category can be turned off by prefixing its name with @samp{no-}. For
+instance, @option{-Wno-syntax} will hide the warnings about unused
+variables.
+
+The categories output by default are @samp{obsolete}, @samp{syntax} and
+@samp{unsupported}. Additionally, @samp{gnu} and @samp{portability}
+are enabled in @option{--gnu} and @option{--gnits} strictness.
+
+@c Checked by extra-portability.sh
+Turning off @samp{portability} will also turn off @samp{extra-portability},
+and similarly turning on @samp{extra-portability} will also turn on
+@samp{portability}. However, turning on @samp{portability} or turning
+off @samp{extra-portability} will not affect the other category.
+
+@vindex WARNINGS
+The environment variable @env{WARNINGS} can contain a comma separated
+list of categories to enable. It will be taken into account before the
+command-line switches, this way @option{-Wnone} will also ignore any
+warning category enabled by @env{WARNINGS}. This variable is also used
+by other tools like @command{autoconf}; unknown categories are ignored
+for this reason.
+
+@end table
+
+@vindex AUTOMAKE_JOBS
+If the environment variable @env{AUTOMAKE_JOBS} contains a positive
+number, it is taken as the maximum number of Perl threads to use in
+@command{automake} for generating multiple @file{Makefile.in} files
+concurrently. This is an experimental feature.
+
+
+@node configure
+@chapter Scanning @file{configure.ac}, using @command{aclocal}
+
+@cindex @file{configure.ac}, scanning
+@cindex Scanning @file{configure.ac}
+@cindex Using @command{aclocal}
+@cindex @command{aclocal}, using
+
+Automake scans the package's @file{configure.ac} to determine certain
+information about the package. Some @command{autoconf} macros are required
+and some variables must be defined in @file{configure.ac}. Automake
+will also use information from @file{configure.ac} to further tailor its
+output.
+
+Automake also supplies some Autoconf macros to make the maintenance
+easier. These macros can automatically be put into your
+@file{aclocal.m4} using the @command{aclocal} program.
+
+@menu
+* Requirements:: Configuration requirements
+* Optional:: Other things Automake recognizes
+* aclocal Invocation:: Auto-generating aclocal.m4
+* Macros:: Autoconf macros supplied with Automake
+@end menu
+
+
+@node Requirements
+@section Configuration requirements
+
+@cindex Automake requirements
+@cindex Requirements of Automake
+
+@acindex AM_INIT_AUTOMAKE
+The one real requirement of Automake is that your @file{configure.ac}
+call @code{AM_INIT_AUTOMAKE}. This macro does several things that are
+required for proper Automake operation (@pxref{Macros}).
+
+Here are the other macros that Automake requires but which are not run
+by @code{AM_INIT_AUTOMAKE}:
+
+@table @code
+@item AC_CONFIG_FILES
+@itemx AC_OUTPUT
+@acindex AC_CONFIG_FILES
+@acindex AC_OUTPUT
+These two macros are usually invoked as follows near the end of
+@file{configure.ac}.
+
+@example
+@dots{}
+AC_CONFIG_FILES([
+ Makefile
+ doc/Makefile
+ src/Makefile
+ src/lib/Makefile
+ @dots{}
+])
+AC_OUTPUT
+@end example
+
+Automake uses these to determine which files to create (@pxref{Output, ,
+Creating Output Files, autoconf, The Autoconf Manual}). A listed file
+is considered to be an Automake generated @file{Makefile} if there
+exists a file with the same name and the @file{.am} extension appended.
+Typically, @samp{AC_CONFIG_FILES([foo/Makefile])} will cause Automake to
+generate @file{foo/Makefile.in} if @file{foo/Makefile.am} exists.
+
+When using @code{AC_CONFIG_FILES} with multiple input files, as in
+
+@example
+AC_CONFIG_FILES([Makefile:top.in:Makefile.in:bot.in])
+@end example
+
+@noindent
+@command{automake} will generate the first @file{.in} input file for
+which a @file{.am} file exists. If no such file exists the output
+file is not considered to be generated by Automake.
+
+Files created by @code{AC_CONFIG_FILES}, be they Automake
+@file{Makefile}s or not, are all removed by @samp{make distclean}.
+Their inputs are automatically distributed, unless they
+are the output of prior @code{AC_CONFIG_FILES} commands.
+Finally, rebuild rules are generated in the Automake @file{Makefile}
+existing in the subdirectory of the output file, if there is one, or
+in the top-level @file{Makefile} otherwise.
+
+The above machinery (cleaning, distributing, and rebuilding) works
+fine if the @code{AC_CONFIG_FILES} specifications contain only
+literals. If part of the specification uses shell variables,
+@command{automake} will not be able to fulfill this setup, and you will
+have to complete the missing bits by hand. For instance, on
+
+@c Keep in sync with output11.sh
+@example
+file=input
+@dots{}
+AC_CONFIG_FILES([output:$file],, [file=$file])
+@end example
+
+@noindent
+@command{automake} will output rules to clean @file{output}, and
+rebuild it. However the rebuild rule will not depend on @file{input},
+and this file will not be distributed either. (You must add
+@samp{EXTRA_DIST = input} to your @file{Makefile.am} if @file{input} is a
+source file.)
+
+Similarly
+
+@c Keep in sync with output11.sh
+@example
+file=output
+file2=out:in
+@dots{}
+AC_CONFIG_FILES([$file:input],, [file=$file])
+AC_CONFIG_FILES([$file2],, [file2=$file2])
+@end example
+
+@noindent
+will only cause @file{input} to be distributed. No file will be
+cleaned automatically (add @samp{DISTCLEANFILES = output out}
+yourself), and no rebuild rule will be output.
+
+Obviously @command{automake} cannot guess what value @samp{$file} is
+going to hold later when @file{configure} is run, and it cannot use
+the shell variable @samp{$file} in a @file{Makefile}. However, if you
+make reference to @samp{$file} as @samp{$@{file@}} (i.e., in a way
+that is compatible with @command{make}'s syntax) and furthermore use
+@code{AC_SUBST} to ensure that @samp{$@{file@}} is meaningful in a
+@file{Makefile}, then @command{automake} will be able to use
+@samp{$@{file@}} to generate all of these rules. For instance, here is
+how the Automake package itself generates versioned scripts for its
+test suite:
+
+@example
+AC_SUBST([APIVERSION], @dots{})
+@dots{}
+AC_CONFIG_FILES(
+ [tests/aclocal-$@{APIVERSION@}:tests/aclocal.in],
+ [chmod +x tests/aclocal-$@{APIVERSION@}],
+ [APIVERSION=$APIVERSION])
+AC_CONFIG_FILES(
+ [tests/automake-$@{APIVERSION@}:tests/automake.in],
+ [chmod +x tests/automake-$@{APIVERSION@}])
+@end example
+
+@noindent
+Here cleaning, distributing, and rebuilding are done automatically,
+because @samp{$@{APIVERSION@}} is known at @command{make}-time.
+
+Note that you should not use shell variables to declare
+@file{Makefile} files for which @command{automake} must create
+@file{Makefile.in}. Even @code{AC_SUBST} does not help here, because
+@command{automake} needs to know the file name when it runs in order
+to check whether @file{Makefile.am} exists. (In the very hairy case
+that your setup requires such use of variables, you will have to tell
+Automake which @file{Makefile.in}s to generate on the command-line.)
+
+It is possible to let @command{automake} emit conditional rules for
+@code{AC_CONFIG_FILES} with the help of @code{AM_COND_IF}
+(@pxref{Optional}).
+
+To summarize:
+@itemize @bullet
+@item
+Use literals for @file{Makefile}s, and for other files whenever possible.
+@item
+Use @samp{$file} (or @samp{$@{file@}} without @samp{AC_SUBST([file])})
+for files that @command{automake} should ignore.
+@item
+Use @samp{$@{file@}} and @samp{AC_SUBST([file])} for files
+that @command{automake} should not ignore.
+@end itemize
+
+@end table
+
+
+@node Optional
+@section Other things Automake recognizes
+
+@cindex Macros Automake recognizes
+@cindex Recognized macros by Automake
+
+Every time Automake is run it calls Autoconf to trace
+@file{configure.ac}. This way it can recognize the use of certain
+macros and tailor the generated @file{Makefile.in} appropriately.
+Currently recognized macros and their effects are:
+
+@ftable @code
+@item AC_CANONICAL_BUILD
+@itemx AC_CANONICAL_HOST
+@itemx AC_CANONICAL_TARGET
+@vindex build_triplet
+@vindex host_triplet
+@vindex target_triplet
+Automake will ensure that @file{config.guess} and @file{config.sub}
+exist. Also, the @file{Makefile} variables @code{build_triplet},
+@code{host_triplet} and @code{target_triplet} are introduced. See
+@ref{Canonicalizing, , Getting the Canonical System Type, autoconf,
+The Autoconf Manual}.
+
+@item AC_CONFIG_AUX_DIR
+Automake will look for various helper scripts, such as
+@file{install-sh}, in the directory named in this macro invocation.
+@c This list is accurate relative to version 1.11
+(The full list of scripts is:
+@file{ar-lib},
+@file{config.guess},
+@file{config.sub},
+@file{depcomp},
+@file{compile},
+@file{install-sh},
+@file{ltmain.sh},
+@file{mdate-sh},
+@file{missing},
+@file{mkinstalldirs},
+@file{py-compile},
+@file{test-driver},
+@file{texinfo.tex},
+@file{ylwrap}.)
+Not all scripts are always searched for; some scripts
+will only be sought if the generated @file{Makefile.in} requires them.
+
+If @code{AC_CONFIG_AUX_DIR} is not given, the scripts are looked for in
+their standard locations. For @file{mdate-sh},
+@file{texinfo.tex}, and @file{ylwrap}, the standard location is the
+source directory corresponding to the current @file{Makefile.am}. For
+the rest, the standard location is the first one of @file{.}, @file{..},
+or @file{../..} (relative to the top source directory) that provides any
+one of the helper scripts. @xref{Input, , Finding `configure' Input,
+autoconf, The Autoconf Manual}.
+
+Required files from @code{AC_CONFIG_AUX_DIR} are automatically
+distributed, even if there is no @file{Makefile.am} in this directory.
+
+@item AC_CONFIG_LIBOBJ_DIR
+Automake will require the sources file declared with
+@code{AC_LIBSOURCE} (see below) in the directory specified by this
+macro.
+
+@item AC_CONFIG_HEADERS
+Automake will generate rules to rebuild these headers from the
+corresponding templates (usually, the template for a @file{foo.h}
+header being @file{foo.h.in}). Older versions of Automake
+required the use of @code{AM_CONFIG_HEADER}; this is no longer
+the case, and that macro has indeed been removed.
+
+As with @code{AC_CONFIG_FILES} (@pxref{Requirements}), parts of the
+specification using shell variables will be ignored as far as
+cleaning, distributing, and rebuilding is concerned.
+
+@item AC_CONFIG_LINKS
+Automake will generate rules to remove @file{configure} generated
+links on @samp{make distclean} and to distribute named source files as
+part of @samp{make dist}.
+
+As for @code{AC_CONFIG_FILES} (@pxref{Requirements}), parts of the
+specification using shell variables will be ignored as far as cleaning
+and distributing is concerned. (There are no rebuild rules for links.)
+
+@item AC_LIBOBJ
+@itemx AC_LIBSOURCE
+@itemx AC_LIBSOURCES
+@vindex LIBOBJS
+Automake will automatically distribute any file listed in
+@code{AC_LIBSOURCE} or @code{AC_LIBSOURCES}.
+
+Note that the @code{AC_LIBOBJ} macro calls @code{AC_LIBSOURCE}. So if
+an Autoconf macro is documented to call @samp{AC_LIBOBJ([file])}, then
+@file{file.c} will be distributed automatically by Automake. This
+encompasses many macros like @code{AC_FUNC_ALLOCA},
+@code{AC_FUNC_MEMCMP}, @code{AC_REPLACE_FUNCS}, and others.
+
+By the way, direct assignments to @code{LIBOBJS} are no longer
+supported. You should always use @code{AC_LIBOBJ} for this purpose.
+@xref{AC_LIBOBJ vs LIBOBJS, , @code{AC_LIBOBJ} vs.@: @code{LIBOBJS},
+autoconf, The Autoconf Manual}.
+
+@item AC_PROG_RANLIB
+This is required if any libraries are built in the package.
+@xref{Particular Programs, , Particular Program Checks, autoconf, The
+Autoconf Manual}.
+
+@item AC_PROG_CXX
+This is required if any C++ source is included. @xref{Particular
+Programs, , Particular Program Checks, autoconf, The Autoconf Manual}.
+
+@item AC_PROG_OBJC
+This is required if any Objective C source is included. @xref{Particular
+Programs, , Particular Program Checks, autoconf, The Autoconf Manual}.
+
+@item AC_PROG_OBJCXX
+This is required if any Objective C++ source is included. @xref{Particular
+Programs, , Particular Program Checks, autoconf, The Autoconf Manual}.
+
+@item AC_PROG_F77
+This is required if any Fortran 77 source is included. @xref{Particular
+Programs, , Particular Program Checks, autoconf, The Autoconf Manual}.
+
+@item AC_F77_LIBRARY_LDFLAGS
+This is required for programs and shared libraries that are a mixture of
+languages that include Fortran 77 (@pxref{Mixing Fortran 77 With C and
+C++}). @xref{Macros, , Autoconf macros supplied with Automake}.
+
+@item AC_FC_SRCEXT
+Automake will add the flags computed by @code{AC_FC_SRCEXT} to compilation
+of files with the respective source extension (@pxref{Fortran Compiler, ,
+Fortran Compiler Characteristics, autoconf, The Autoconf Manual}).
+
+@item AC_PROG_FC
+This is required if any Fortran 90/95 source is included. This macro is
+distributed with Autoconf version 2.58 and later. @xref{Particular
+Programs, , Particular Program Checks, autoconf, The Autoconf Manual}.
+
+@item AC_PROG_LIBTOOL
+Automake will turn on processing for @command{libtool} (@pxref{Top, ,
+Introduction, libtool, The Libtool Manual}).
+
+@item AC_PROG_YACC
+@vindex YACC
+If a Yacc source file is seen, then you must either use this macro or
+define the variable @code{YACC} in @file{configure.ac}. The former is
+preferred (@pxref{Particular Programs, , Particular Program Checks,
+autoconf, The Autoconf Manual}).
+
+@item AC_PROG_LEX
+If a Lex source file is seen, then this macro must be used.
+@xref{Particular Programs, , Particular Program Checks, autoconf, The
+Autoconf Manual}.
+
+@item AC_REQUIRE_AUX_FILE
+For each @code{AC_REQUIRE_AUX_FILE([@var{file}])},
+@command{automake} will ensure that @file{@var{file}} exists in the
+aux directory, and will complain otherwise. It
+will also automatically distribute the file. This macro should be
+used by third-party Autoconf macros that require some supporting
+files in the aux directory specified with @code{AC_CONFIG_AUX_DIR}
+above. @xref{Input, , Finding @command{configure} Input, autoconf,
+The Autoconf Manual}.
+
+@item AC_SUBST
+The first argument is automatically defined as a variable in each
+generated @file{Makefile.in}, unless @code{AM_SUBST_NOTMAKE} is also
+used for this variable. @xref{Setting Output Variables, , Setting
+Output Variables, autoconf, The Autoconf Manual}.
+
+For every substituted variable @var{var}, @command{automake} will add
+a line @code{@var{var} = @var{value}} to each @file{Makefile.in} file.
+Many Autoconf macros invoke @code{AC_SUBST} to set output variables
+this way, e.g., @code{AC_PATH_XTRA} defines @code{X_CFLAGS} and
+@code{X_LIBS}. Thus, you can access these variables as
+@code{$(X_CFLAGS)} and @code{$(X_LIBS)} in any @file{Makefile.am}
+if @code{AC_PATH_XTRA} is called.
+
+@item AM_CONDITIONAL
+This introduces an Automake conditional (@pxref{Conditionals}).
+
+@item AM_COND_IF
+This macro allows @code{automake} to detect subsequent access within
+@file{configure.ac} to a conditional previously introduced with
+@code{AM_CONDITIONAL}, thus enabling conditional @code{AC_CONFIG_FILES}
+(@pxref{Usage of Conditionals}).
+
+@item AM_GNU_GETTEXT
+This macro is required for packages that use GNU gettext
+(@pxref{gettext}). It is distributed with gettext. If Automake sees
+this macro it ensures that the package meets some of gettext's
+requirements.
+
+@item AM_GNU_GETTEXT_INTL_SUBDIR
+This macro specifies that the @file{intl/} subdirectory is to be built,
+even if the @code{AM_GNU_GETTEXT} macro was invoked with a first argument
+of @samp{external}.
+
+@item AM_MAINTAINER_MODE(@ovar{default-mode})
+@opindex --enable-maintainer-mode
+@opindex --disable-maintainer-mode
+This macro adds an @option{--enable-maintainer-mode} option to
+@command{configure}. If this is used, @command{automake} will cause
+``maintainer-only'' rules to be turned off by default in the
+generated @file{Makefile.in}s, unless @var{default-mode} is
+@samp{enable}. This macro defines the @code{MAINTAINER_MODE}
+conditional, which you can use in your own @file{Makefile.am}.
+@xref{maintainer-mode}.
+
+@item AM_SUBST_NOTMAKE(@var{var})
+Prevent Automake from defining a variable @var{var}, even if it is
+substituted by @command{config.status}. Normally, Automake defines a
+@command{make} variable for each @command{configure} substitution,
+i.e., for each @code{AC_SUBST([@var{var}])}. This macro prevents that
+definition from Automake. If @code{AC_SUBST} has not been called
+for this variable, then @code{AM_SUBST_NOTMAKE} has no effects.
+Preventing variable definitions may be useful for substitution of
+multi-line values, where @code{@var{var} = @@@var{value}@@} might yield
+unintended results.
+
+@item m4_include
+Files included by @file{configure.ac} using this macro will be
+detected by Automake and automatically distributed. They will also
+appear as dependencies in @file{Makefile} rules.
+
+@code{m4_include} is seldom used by @file{configure.ac} authors, but
+can appear in @file{aclocal.m4} when @command{aclocal} detects that
+some required macros come from files local to your package (as opposed to
+macros installed in a system-wide directory, @pxref{aclocal Invocation}).
+
+@end ftable
+
+@node aclocal Invocation
+@section Auto-generating aclocal.m4
+@c This node used to be named "Invoking automake". This @anchor
+@c allows old links to still work.
+@anchor{Invoking aclocal}
+
+@cindex Invocation of @command{aclocal}
+@cindex @command{aclocal}, Invocation
+@cindex Invoking @command{aclocal}
+@cindex @command{aclocal}, Invoking
+
+Automake includes a number of Autoconf macros that can be used in
+your package (@pxref{Macros}); some of them are actually required by
+Automake in certain situations. These macros must be defined in your
+@file{aclocal.m4}; otherwise they will not be seen by
+@command{autoconf}.
+
+The @command{aclocal} program will automatically generate
+@file{aclocal.m4} files based on the contents of @file{configure.ac}.
+This provides a convenient way to get Automake-provided macros,
+without having to search around. The @command{aclocal} mechanism
+allows other packages to supply their own macros (@pxref{Extending
+aclocal}). You can also use it to maintain your own set of custom
+macros (@pxref{Local Macros}).
+
+At startup, @command{aclocal} scans all the @file{.m4} files it can
+find, looking for macro definitions (@pxref{Macro Search Path}). Then
+it scans @file{configure.ac}. Any mention of one of the macros found
+in the first step causes that macro, and any macros it in turn
+requires, to be put into @file{aclocal.m4}.
+
+@emph{Putting} the file that contains the macro definition into
+@file{aclocal.m4} is usually done by copying the entire text of this
+file, including unused macro definitions as well as both @samp{#} and
+@samp{dnl} comments. If you want to make a comment that will be
+completely ignored by @command{aclocal}, use @samp{##} as the comment
+leader.
+
+When a file selected by @command{aclocal} is located in a subdirectory
+specified as a relative search path with @command{aclocal}'s @option{-I}
+argument, @command{aclocal} assumes the file belongs to the package
+and uses @code{m4_include} instead of copying it into
+@file{aclocal.m4}. This makes the package smaller, eases dependency
+tracking, and cause the file to be distributed automatically.
+(@xref{Local Macros}, for an example.) Any macro that is found in a
+system-wide directory, or via an absolute search path will be copied.
+So use @samp{-I `pwd`/reldir} instead of @samp{-I reldir} whenever
+some relative directory should be considered outside the package.
+
+The contents of @file{acinclude.m4}, if this file exists, are also
+automatically included in @file{aclocal.m4}. We recommend against
+using @file{acinclude.m4} in new packages (@pxref{Local Macros}).
+
+@vindex AUTOM4TE
+@cindex autom4te
+While computing @file{aclocal.m4}, @command{aclocal} runs
+@command{autom4te} (@pxref{Using autom4te, , Using @command{Autom4te},
+autoconf, The Autoconf Manual}) in order to trace the macros that are
+really used, and omit from @file{aclocal.m4} all macros that are
+mentioned but otherwise unexpanded (this can happen when a macro is
+called conditionally). @command{autom4te} is expected to be in the
+@env{PATH}, just as @command{autoconf}. Its location can be
+overridden using the @env{AUTOM4TE} environment variable.
+
+@menu
+* aclocal Options:: Options supported by aclocal
+* Macro Search Path:: How aclocal finds .m4 files
+* Extending aclocal:: Writing your own aclocal macros
+* Local Macros:: Organizing local macros
+* Serials:: Serial lines in Autoconf macros
+* Future of aclocal:: aclocal's scheduled death
+@end menu
+
+@node aclocal Options
+@subsection aclocal Options
+
+@cindex @command{aclocal}, Options
+@cindex Options, @command{aclocal}
+
+@command{aclocal} accepts the following options:
+
+@table @code
+@item --automake-acdir=@var{dir}
+@opindex --automake-acdir
+Look for the automake-provided macro files in @var{dir} instead of
+in the installation directory. This is typically used for debugging.
+
+@vindex ACLOCAL_AUTOMAKE_DIR
+The environment variable @env{ACLOCAL_AUTOMAKE_DIR} provides another
+way to set the directory containing automake-provided macro files.
+However @option{--automake-acdir} takes precedence over it.
+
+@item --system-acdir=@var{dir}
+@opindex --system-acdir
+Look for the system-wide third-party macro files (and the special
+@file{dirlist} file) in @var{dir} instead of in the installation
+directory. This is typically used for debugging.
+
+@item --diff[=@var{command}]
+@opindex --diff
+Run @var{command} on M4 file that would be installed or overwritten
+by @option{--install}. The default @var{command} is @samp{diff -u}.
+This option implies @option{--install} and @option{--dry-run}.
+
+@item --dry-run
+@opindex --dry-run
+Do not actually overwrite (or create) @file{aclocal.m4} and M4
+files installed by @option{--install}.
+
+@item --help
+@opindex --help
+Print a summary of the command line options and exit.
+
+@item -I @var{dir}
+@opindex -I
+Add the directory @var{dir} to the list of directories searched for
+@file{.m4} files.
+
+@item --install
+@opindex --install
+Install system-wide third-party macros into the first directory
+specified with @samp{-I @var{dir}} instead of copying them in the
+output file.
+@c Keep in sync with aclocal-install-absdir.sh
+Note that this will happen also if @var{dir} is an absolute path.
+
+@cindex serial number and @option{--install}
+When this option is used, and only when this option is used,
+@command{aclocal} will also honor @samp{#serial @var{number}} lines
+that appear in macros: an M4 file is ignored if there exists another
+M4 file with the same basename and a greater serial number in the
+search path (@pxref{Serials}).
+
+@item --force
+@opindex --force
+Always overwrite the output file. The default is to overwrite the output
+file only when really needed, i.e., when its contents changes or if one
+of its dependencies is younger.
+
+This option forces the update of @file{aclocal.m4} (or the file
+specified with @file{--output} below) and only this file, it has
+absolutely no influence on files that may need to be installed by
+@option{--install}.
+
+@item --output=@var{file}
+@opindex --output
+Cause the output to be put into @var{file} instead of @file{aclocal.m4}.
+
+@item --print-ac-dir
+@opindex --print-ac-dir
+Prints the name of the directory that @command{aclocal} will search to
+find third-party @file{.m4} files. When this option is given, normal
+processing is suppressed. This option was used @emph{in the past} by
+third-party packages to determine where to install @file{.m4} macro
+files, but @emph{this usage is today discouraged}, since it causes
+@samp{$(prefix)} not to be thoroughly honored (which violates the
+GNU Coding Standards), and a similar semantics can be better obtained
+with the @env{ACLOCAL_PATH} environment variable; @pxref{Extending aclocal}.
+
+@item --verbose
+@opindex --verbose
+Print the names of the files it examines.
+
+@item --version
+@opindex --version
+Print the version number of Automake and exit.
+
+@item -W CATEGORY
+@item --warnings=@var{category}
+@opindex -W
+@opindex --warnings
+Output warnings falling in @var{category}. @var{category} can be
+one of:
+@table @code
+@item syntax
+dubious syntactic constructs, underquoted macros, unused macros, etc.
+@item unsupported
+unknown macros
+@item all
+all the warnings, this is the default
+@item none
+turn off all the warnings
+@item error
+treat warnings as errors
+@end table
+
+All warnings are output by default.
+
+@vindex WARNINGS
+The environment variable @env{WARNINGS} is honored in the same
+way as it is for @command{automake} (@pxref{automake Invocation}).
+
+@end table
+
+@node Macro Search Path
+@subsection Macro Search Path
+
+@cindex Macro search path
+@cindex @command{aclocal} search path
+
+By default, @command{aclocal} searches for @file{.m4} files in the following
+directories, in this order:
+
+@table @code
+@item @var{acdir-APIVERSION}
+This is where the @file{.m4} macros distributed with Automake itself
+are stored. @var{APIVERSION} depends on the Automake release used;
+for example, for Automake 1.11.x, @var{APIVERSION} = @code{1.11}.
+
+@item @var{acdir}
+This directory is intended for third party @file{.m4} files, and is
+configured when @command{automake} itself is built. This is
+@file{@@datadir@@/aclocal/}, which typically
+expands to @file{$@{prefix@}/share/aclocal/}. To find the compiled-in
+value of @var{acdir}, use the @option{--print-ac-dir} option
+(@pxref{aclocal Options}).
+@end table
+
+As an example, suppose that @command{automake-1.11.2} was configured with
+@option{--prefix=@-/usr/local}. Then, the search path would be:
+
+@enumerate
+@item @file{/usr/local/share/aclocal-1.11.2/}
+@item @file{/usr/local/share/aclocal/}
+@end enumerate
+
+The paths for the @var{acdir} and @var{acdir-APIVERSION} directories can
+be changed respectively through aclocal options @option{--system-acdir}
+and @option{--automake-acdir} (@pxref{aclocal Options}). Note however
+that these options are only intended for use by the internal Automake
+test suite, or for debugging under highly unusual situations; they are
+not ordinarily needed by end-users.
+
+As explained in (@pxref{aclocal Options}), there are several options that
+can be used to change or extend this search path.
+
+@subsubheading Modifying the Macro Search Path: @samp{-I @var{dir}}
+
+Any extra directories specified using @option{-I} options
+(@pxref{aclocal Options}) are @emph{prepended} to this search list. Thus,
+@samp{aclocal -I /foo -I /bar} results in the following search path:
+
+@enumerate
+@item @file{/foo}
+@item @file{/bar}
+@item @var{acdir}-@var{APIVERSION}
+@item @var{acdir}
+@end enumerate
+
+@subsubheading Modifying the Macro Search Path: @file{dirlist}
+@cindex @file{dirlist}
+
+There is a third mechanism for customizing the search path. If a
+@file{dirlist} file exists in @var{acdir}, then that file is assumed to
+contain a list of directory patterns, one per line. @command{aclocal}
+expands these patterns to directory names, and adds them to the search
+list @emph{after} all other directories. @file{dirlist} entries may
+use shell wildcards such as @samp{*}, @samp{?}, or @code{[...]}.
+
+For example, suppose
+@file{@var{acdir}/dirlist} contains the following:
+
+@example
+/test1
+/test2
+/test3*
+@end example
+
+@noindent
+and that @command{aclocal} was called with the @samp{-I /foo -I /bar} options.
+Then, the search path would be
+
+@c @code looks better than @file here
+@enumerate
+@item @code{/foo}
+@item @code{/bar}
+@item @var{acdir}-@var{APIVERSION}
+@item @var{acdir}
+@item @code{/test1}
+@item @code{/test2}
+@end enumerate
+
+@noindent
+and all directories with path names starting with @code{/test3}.
+
+If the @option{--system-acdir=@var{dir}} option is used, then
+@command{aclocal} will search for the @file{dirlist} file in
+@var{dir}; but remember the warnings above against the use of
+@option{--system-acdir}.
+
+@file{dirlist} is useful in the following situation: suppose that
+@command{automake} version @code{1.11.2} is installed with
+@samp{--prefix=/usr} by the system vendor. Thus, the default search
+directories are
+
+@c @code looks better than @file here
+@enumerate
+@item @code{/usr/share/aclocal-1.11/}
+@item @code{/usr/share/aclocal/}
+@end enumerate
+
+However, suppose further that many packages have been manually
+installed on the system, with $prefix=/usr/local, as is typical. In
+that case, many of these ``extra'' @file{.m4} files are in
+@file{/usr/local/share/aclocal}. The only way to force
+@file{/usr/bin/aclocal} to find these ``extra'' @file{.m4} files is to
+always call @samp{aclocal -I /usr/local/share/aclocal}. This is
+inconvenient. With @file{dirlist}, one may create a file
+@file{/usr/share/aclocal/dirlist} containing only the single line
+
+@example
+/usr/local/share/aclocal
+@end example
+
+Now, the ``default'' search path on the affected system is
+
+@c @code looks better than @file here
+@enumerate
+@item @code{/usr/share/aclocal-1.11/}
+@item @code{/usr/share/aclocal/}
+@item @code{/usr/local/share/aclocal/}
+@end enumerate
+
+without the need for @option{-I} options; @option{-I} options can be reserved
+for project-specific needs (@file{my-source-dir/m4/}), rather than
+using it to work around local system-dependent tool installation
+directories.
+
+Similarly, @file{dirlist} can be handy if you have installed a local
+copy of Automake in your account and want @command{aclocal} to look for
+macros installed at other places on the system.
+
+@anchor{ACLOCAL_PATH}
+@subsubheading Modifying the Macro Search Path: @file{ACLOCAL_PATH}
+@cindex @env{ACLOCAL_PATH}
+
+The fourth and last mechanism to customize the macro search path is
+also the simplest. Any directory included in the colon-separated
+environment variable @env{ACLOCAL_PATH} is added to the search path
+@c Keep in sync with aclocal-path-precedence.sh
+and takes precedence over system directories (including those found via
+@file{dirlist}), with the exception of the versioned directory
+@var{acdir-APIVERSION} (@pxref{Macro Search Path}). However, directories
+passed via @option{-I} will take precedence over directories in
+@env{ACLOCAL_PATH}.
+
+@c Keep in sync with aclocal-path-installed.sh
+Also note that, if the @option{--install} option is used, any @file{.m4}
+file containing a required macro that is found in a directory listed in
+@env{ACLOCAL_PATH} will be installed locally.
+@c Keep in sync with aclocal-path-installed-serial.sh
+In this case, serial numbers in @file{.m4} are honored too,
+@pxref{Serials}.
+
+Conversely to @file{dirlist}, @env{ACLOCAL_PATH} is useful if you are
+using a global copy of Automake and want @command{aclocal} to look for
+macros somewhere under your home directory.
+
+@subsubheading Planned future incompatibilities
+
+The order in which the directories in the macro search path are currently
+looked up is confusing and/or suboptimal in various aspects, and is
+probably going to be changed in the future Automake release. In
+particular, directories in @env{ACLOCAL_PATH} and @file{@var{acdir}}
+might end up taking precedence over @file{@var{acdir-APIVERSION}}, and
+directories in @file{@var{acdir}/dirlist} might end up taking precedence
+over @file{@var{acdir}}. @emph{This is a possible future incompatibility!}
+
+@node Extending aclocal
+@subsection Writing your own aclocal macros
+
+@cindex @command{aclocal}, extending
+@cindex Extending @command{aclocal}
+
+The @command{aclocal} program doesn't have any built-in knowledge of any
+macros, so it is easy to extend it with your own macros.
+
+This can be used by libraries that want to supply their own Autoconf
+macros for use by other programs. For instance, the @command{gettext}
+library supplies a macro @code{AM_GNU_GETTEXT} that should be used by
+any package using @command{gettext}. When the library is installed, it
+installs this macro so that @command{aclocal} will find it.
+
+A macro file's name should end in @file{.m4}. Such files should be
+installed in @file{$(datadir)/aclocal}. This is as simple as writing:
+
+@c Keep in sync with primary-prefix-couples-documented-valid.sh
+@example
+aclocaldir = $(datadir)/aclocal
+aclocal_DATA = mymacro.m4 myothermacro.m4
+@end example
+
+@noindent
+Please do use @file{$(datadir)/aclocal}, and not something based on
+the result of @samp{aclocal --print-ac-dir} (@pxref{Hard-Coded Install
+Paths}, for arguments). It might also be helpful to suggest to
+the user to add the @file{$(datadir)/aclocal} directory to his
+@env{ACLOCAL_PATH} variable (@pxref{ACLOCAL_PATH}) so that
+@command{aclocal} will find the @file{.m4} files installed by your
+package automatically.
+
+A file of macros should be a series of properly quoted
+@code{AC_DEFUN}'s (@pxref{Macro Definitions, , , autoconf, The
+Autoconf Manual}). The @command{aclocal} programs also understands
+@code{AC_REQUIRE} (@pxref{Prerequisite Macros, , , autoconf, The
+Autoconf Manual}), so it is safe to put each macro in a separate file.
+Each file should have no side effects but macro definitions.
+Especially, any call to @code{AC_PREREQ} should be done inside the
+defined macro, not at the beginning of the file.
+
+@cindex underquoted @code{AC_DEFUN}
+@acindex AC_DEFUN
+@acindex AC_PREREQ
+
+Starting with Automake 1.8, @command{aclocal} will warn about all
+underquoted calls to @code{AC_DEFUN}. We realize this will annoy a
+lot of people, because @command{aclocal} was not so strict in the past
+and many third party macros are underquoted; and we have to apologize
+for this temporary inconvenience. The reason we have to be stricter
+is that a future implementation of @command{aclocal} (@pxref{Future of
+aclocal}) will have to temporarily include all of these third party
+@file{.m4} files, maybe several times, including even files that are
+not actually needed. Doing so should alleviate many problems of the
+current implementation, however it requires a stricter style from the
+macro authors. Hopefully it is easy to revise the existing macros.
+For instance,
+
+@example
+# bad style
+AC_PREREQ(2.68)
+AC_DEFUN(AX_FOOBAR,
+[AC_REQUIRE([AX_SOMETHING])dnl
+AX_FOO
+AX_BAR
+])
+@end example
+
+@noindent
+should be rewritten as
+
+@example
+AC_DEFUN([AX_FOOBAR],
+[AC_PREREQ([2.68])dnl
+AC_REQUIRE([AX_SOMETHING])dnl
+AX_FOO
+AX_BAR
+])
+@end example
+
+Wrapping the @code{AC_PREREQ} call inside the macro ensures that
+Autoconf 2.68 will not be required if @code{AX_FOOBAR} is not actually
+used. Most importantly, quoting the first argument of @code{AC_DEFUN}
+allows the macro to be redefined or included twice (otherwise this
+first argument would be expanded during the second definition). For
+consistency we like to quote even arguments such as @code{2.68} that
+do not require it.
+
+If you have been directed here by the @command{aclocal} diagnostic but
+are not the maintainer of the implicated macro, you will want to
+contact the maintainer of that macro. Please make sure you have the
+latest version of the macro and that the problem hasn't already been
+reported before doing so: people tend to work faster when they aren't
+flooded by mails.
+
+Another situation where @command{aclocal} is commonly used is to
+manage macros that are used locally by the package, @ref{Local
+Macros}.
+
+@node Local Macros
+@subsection Handling Local Macros
+
+Feature tests offered by Autoconf do not cover all needs. People
+often have to supplement existing tests with their own macros, or
+with third-party macros.
+
+There are two ways to organize custom macros in a package.
+
+The first possibility (the historical practice) is to list all your
+macros in @file{acinclude.m4}. This file will be included in
+@file{aclocal.m4} when you run @command{aclocal}, and its macro(s) will
+henceforth be visible to @command{autoconf}. However if it contains
+numerous macros, it will rapidly become difficult to maintain, and it
+will be almost impossible to share macros between packages.
+
+The second possibility, which we do recommend, is to write each macro
+in its own file and gather all these files in a directory. This
+directory is usually called @file{m4/}. Then it's enough to update
+@file{configure.ac} by adding a proper call to @code{AC_CONFIG_MACRO_DIRS}:
+
+@example
+AC_CONFIG_MACRO_DIRS([m4])
+@end example
+
+@command{aclocal} will then take care of automatically adding @file{m4/}
+to its search path for m4 files.
+
+When @samp{aclocal} is run, it will build an @file{aclocal.m4}
+that @code{m4_include}s any file from @file{m4/} that defines a
+required macro. Macros not found locally will still be searched in
+system-wide directories, as explained in @ref{Macro Search Path}.
+
+Custom macros should be distributed for the same reason that
+@file{configure.ac} is: so that other people have all the sources of
+your package if they want to work on it. Actually, this distribution
+happens automatically because all @code{m4_include}d files are
+distributed.
+
+However there is no consensus on the distribution of third-party
+macros that your package may use. Many libraries install their own
+macro in the system-wide @command{aclocal} directory (@pxref{Extending
+aclocal}). For instance, Guile ships with a file called
+@file{guile.m4} that contains the macro @code{GUILE_FLAGS} that can
+be used to define setup compiler and linker flags appropriate for
+using Guile. Using @code{GUILE_FLAGS} in @file{configure.ac} will
+cause @command{aclocal} to copy @file{guile.m4} into
+@file{aclocal.m4}, but as @file{guile.m4} is not part of the project,
+it will not be distributed. Technically, that means a user who
+needs to rebuild @file{aclocal.m4} will have to install Guile first.
+This is probably OK, if Guile already is a requirement to build the
+package. However, if Guile is only an optional feature, or if your
+package might run on architectures where Guile cannot be installed,
+this requirement will hinder development. An easy solution is to copy
+such third-party macros in your local @file{m4/} directory so they get
+distributed.
+
+Since Automake 1.10, @command{aclocal} offers the option @code{--install}
+to copy these system-wide third-party macros in your local macro directory,
+helping to solve the above problem.
+
+With this setup, system-wide macros will be copied to @file{m4/}
+the first time you run @command{aclocal}. Then the locally installed
+macros will have precedence over the system-wide installed macros
+each time @command{aclocal} is run again.
+
+One reason why you should keep @option{--install} in the flags even
+after the first run is that when you later edit @file{configure.ac}
+and depend on a new macro, this macro will be installed in your
+@file{m4/} automatically. Another one is that serial numbers
+(@pxref{Serials}) can be used to update the macros in your source tree
+automatically when new system-wide versions are installed. A serial
+number should be a single line of the form
+
+@example
+#serial @var{nnn}
+@end example
+
+@noindent
+where @var{nnn} contains only digits and dots. It should appear in
+the M4 file before any macro definition. It is a good practice to
+maintain a serial number for each macro you distribute, even if you do
+not use the @option{--install} option of @command{aclocal}: this allows
+other people to use it.
+
+
+@node Serials
+@subsection Serial Numbers
+@cindex serial numbers in macros
+@cindex macro serial numbers
+@cindex @code{#serial} syntax
+@cindex @command{aclocal} and serial numbers
+
+Because third-party macros defined in @file{*.m4} files are naturally
+shared between multiple projects, some people like to version them.
+This makes it easier to tell which of two M4 files is newer. Since at
+least 1996, the tradition is to use a @samp{#serial} line for this.
+
+A serial number should be a single line of the form
+
+@example
+# serial @var{version}
+@end example
+
+@noindent
+where @var{version} is a version number containing only digits and
+dots. Usually people use a single integer, and they increment it each
+time they change the macro (hence the name of ``serial''). Such a
+line should appear in the M4 file before any macro definition.
+
+The @samp{#} must be the first character on the line,
+and it is OK to have extra words after the version, as in
+
+@example
+#serial @var{version} @var{garbage}
+@end example
+
+Normally these serial numbers are completely ignored by
+@command{aclocal} and @command{autoconf}, like any genuine comment.
+However when using @command{aclocal}'s @option{--install} feature, these
+serial numbers will modify the way @command{aclocal} selects the
+macros to install in the package: if two files with the same basename
+exist in your search path, and if at least one of them uses a
+@samp{#serial} line, @command{aclocal} will ignore the file that has
+the older @samp{#serial} line (or the file that has none).
+
+Note that a serial number applies to a whole M4 file, not to any macro
+it contains. A file can contains multiple macros, but only one
+serial.
+
+Here is a use case that illustrates the use of @option{--install} and
+its interaction with serial numbers. Let's assume we maintain a
+package called MyPackage, the @file{configure.ac} of which requires a
+third-party macro @code{AX_THIRD_PARTY} defined in
+@file{/usr/share/aclocal/thirdparty.m4} as follows:
+
+@example
+# serial 1
+AC_DEFUN([AX_THIRD_PARTY], [...])
+@end example
+
+MyPackage uses an @file{m4/} directory to store local macros as
+explained in @ref{Local Macros}, and has
+
+@example
+AC_CONFIG_MACRO_DIRS([m4])
+@end example
+
+@noindent
+in its @file{configure.ac}.
+
+Initially the @file{m4/} directory is empty. The first time we run
+@command{aclocal --install}, it will notice that
+
+@itemize @bullet
+@item
+@file{configure.ac} uses @code{AX_THIRD_PARTY}
+@item
+No local macros define @code{AX_THIRD_PARTY}
+@item
+@file{/usr/share/aclocal/thirdparty.m4} defines @code{AX_THIRD_PARTY}
+with serial 1.
+@end itemize
+
+@noindent
+Because @file{/usr/share/aclocal/thirdparty.m4} is a system-wide macro
+and @command{aclocal} was given the @option{--install} option, it will
+copy this file in @file{m4/thirdparty.m4}, and output an
+@file{aclocal.m4} that contains @samp{m4_include([m4/thirdparty.m4])}.
+
+The next time @samp{aclocal --install} is run, something different
+happens. @command{aclocal} notices that
+
+@itemize @bullet
+@item
+@file{configure.ac} uses @code{AX_THIRD_PARTY}
+@item
+@file{m4/thirdparty.m4} defines @code{AX_THIRD_PARTY}
+with serial 1.
+@item
+@file{/usr/share/aclocal/thirdparty.m4} defines @code{AX_THIRD_PARTY}
+with serial 1.
+@end itemize
+
+@noindent
+Because both files have the same serial number, @command{aclocal} uses
+the first it found in its search path order (@pxref{Macro Search
+Path}). @command{aclocal} therefore ignores
+@file{/usr/share/aclocal/thirdparty.m4} and outputs an
+@file{aclocal.m4} that contains @samp{m4_include([m4/thirdparty.m4])}.
+
+Local directories specified with @option{-I} are always searched before
+system-wide directories, so a local file will always be preferred to
+the system-wide file in case of equal serial numbers.
+
+Now suppose the system-wide third-party macro is changed. This can
+happen if the package installing this macro is updated. Let's suppose
+the new macro has serial number 2. The next time @samp{aclocal --install}
+is run the situation is the following:
+
+@itemize @bullet
+@item
+@file{configure.ac} uses @code{AX_THIRD_PARTY}
+@item
+@file{m4/thirdparty.m4} defines @code{AX_THIRD_PARTY}
+with serial 1.
+@item
+@file{/usr/share/aclocal/thirdparty.m4} defines @code{AX_THIRD_PARTY}
+with serial 2.
+@end itemize
+
+@noindent
+When @command{aclocal} sees a greater serial number, it immediately
+forgets anything it knows from files that have the same basename and a
+smaller serial number. So after it has found
+@file{/usr/share/aclocal/thirdparty.m4} with serial 2,
+@command{aclocal} will proceed as if it had never seen
+@file{m4/thirdparty.m4}. This brings us back to a situation similar
+to that at the beginning of our example, where no local file defined
+the macro. @command{aclocal} will install the new version of the
+macro in @file{m4/thirdparty.m4}, in this case overriding the old
+version. MyPackage just had its macro updated as a side effect of
+running @command{aclocal}.
+
+If you are leery of letting @command{aclocal} update your local
+macro, you can run @samp{aclocal --diff} to review the changes
+@samp{aclocal --install} would perform on these macros.
+
+Finally, note that the @option{--force} option of @command{aclocal} has
+absolutely no effect on the files installed by @option{--install}. For
+instance, if you have modified your local macros, do not expect
+@option{--install --force} to replace the local macros by their
+system-wide versions. If you want to do so, simply erase the local
+macros you want to revert, and run @samp{aclocal --install}.
+
+
+@node Future of aclocal
+@subsection The Future of @command{aclocal}
+@cindex @command{aclocal}'s scheduled death
+
+@command{aclocal} is expected to disappear. This feature really
+should not be offered by Automake. Automake should focus on
+generating @file{Makefile}s; dealing with M4 macros really is
+Autoconf's job. The fact that some people install Automake just to use
+@command{aclocal}, but do not use @command{automake} otherwise is an
+indication of how that feature is misplaced.
+
+The new implementation will probably be done slightly differently.
+For instance, it could enforce the @file{m4/}-style layout discussed in
+@ref{Local Macros}.
+
+We have no idea when and how this will happen. This has been
+discussed several times in the past, but someone still has to commit
+to that non-trivial task.
+
+From the user point of view, @command{aclocal}'s removal might turn
+out to be painful. There is a simple precaution that you may take to
+make that switch more seamless: never call @command{aclocal} yourself.
+Keep this guy under the exclusive control of @command{autoreconf} and
+Automake's rebuild rules. Hopefully you won't need to worry about
+things breaking, when @command{aclocal} disappears, because everything
+will have been taken care of. If otherwise you used to call
+@command{aclocal} directly yourself or from some script, you will
+quickly notice the change.
+
+Many packages come with a script called @file{bootstrap} or
+@file{autogen.sh}, that will just call @command{aclocal},
+@command{libtoolize}, @command{gettextize} or @command{autopoint},
+@command{autoconf}, @command{autoheader}, and @command{automake} in
+the right order. Actually this is precisely what @command{autoreconf}
+can do for you. If your package has such a @file{bootstrap} or
+@file{autogen.sh} script, consider using @command{autoreconf}. That
+should simplify its logic a lot (less things to maintain, yum!), it's
+even likely you will not need the script anymore, and more to the point
+you will not call @command{aclocal} directly anymore.
+
+For the time being, third-party packages should continue to install
+public macros into @file{/usr/share/aclocal/}. If @command{aclocal}
+is replaced by another tool it might make sense to rename the
+directory, but supporting @file{/usr/share/aclocal/} for backward
+compatibility should be really easy provided all macros are properly
+written (@pxref{Extending aclocal}).
+
+
+
+@node Macros
+@section Autoconf macros supplied with Automake
+
+Automake ships with several Autoconf macros that you can use from your
+@file{configure.ac}. When you use one of them it will be included by
+@command{aclocal} in @file{aclocal.m4}.
+
+@menu
+* Public Macros:: Macros that you can use.
+* Obsolete Macros:: Macros that will soon be removed.
+* Private Macros:: Macros that you should not use.
+@end menu
+
+@c consider generating the following subsections automatically from m4 files.
+
+@node Public Macros
+@subsection Public Macros
+
+@table @code
+
+@item AM_INIT_AUTOMAKE([OPTIONS])
+@acindex AM_INIT_AUTOMAKE
+Runs many macros required for proper operation of the generated Makefiles.
+
+@vindex AUTOMAKE_OPTIONS
+Today, @code{AM_INIT_AUTOMAKE} is called with a single argument: a
+space-separated list of Automake options that should be applied to
+every @file{Makefile.am} in the tree. The effect is as if
+each option were listed in @code{AUTOMAKE_OPTIONS} (@pxref{Options}).
+
+@acindex AC_INIT
+This macro can also be called in another, @emph{deprecated} form:
+@code{AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])}. In this form,
+there are two required arguments: the package and the version number.
+This usage is mostly obsolete because the @var{package} and @var{version}
+can be obtained from Autoconf's @code{AC_INIT} macro. However,
+differently from what happens for @code{AC_INIT} invocations, this
+@code{AM_INIT_AUTOMAKE} invocation supports shell variables' expansions
+in the @code{PACKAGE} and @code{VERSION} arguments (which otherwise
+defaults, respectively, to the @code{PACKAGE_TARNAME} and
+@code{PACKAGE_VERSION} defined via the @code{AC_INIT} invocation;
+@pxref{AC_INIT, , The @code{AC_INIT} macro, autoconf, The Autoconf Manual});
+and this can be still be useful in some selected situations.
+Our hope is that future Autoconf versions will improve their support
+for package versions defined dynamically at configure runtime; when
+(and if) this happens, support for the two-args @code{AM_INIT_AUTOMAKE}
+invocation will likely be removed from Automake.
+
+@anchor{Modernize AM_INIT_AUTOMAKE invocation}
+If your @file{configure.ac} has:
+
+@example
+AC_INIT([src/foo.c])
+AM_INIT_AUTOMAKE([mumble], [1.5])
+@end example
+
+@noindent
+you should modernize it as follows:
+
+@example
+AC_INIT([mumble], [1.5])
+AC_CONFIG_SRCDIR([src/foo.c])
+AM_INIT_AUTOMAKE
+@end example
+
+Note that if you're upgrading your @file{configure.ac} from an earlier
+version of Automake, it is not always correct to simply move the
+package and version arguments from @code{AM_INIT_AUTOMAKE} directly to
+@code{AC_INIT}, as in the example above. The first argument to
+@code{AC_INIT} should be the name of your package (e.g., @samp{GNU
+Automake}), not the tarball name (e.g., @samp{automake}) that you used
+to pass to @code{AM_INIT_AUTOMAKE}. Autoconf tries to derive a
+tarball name from the package name, which should work for most but not
+all package names. (If it doesn't work for yours, you can use the
+four-argument form of @code{AC_INIT} to provide the tarball name
+explicitly).
+
+@cindex @code{PACKAGE}, prevent definition
+@cindex @code{VERSION}, prevent definition
+@opindex no-define
+By default this macro @code{AC_DEFINE}'s @code{PACKAGE} and
+@code{VERSION}. This can be avoided by passing the @option{no-define}
+option (@pxref{List of Automake options}):
+@example
+AM_INIT_AUTOMAKE([no-define ...])
+@end example
+
+@item AM_PATH_LISPDIR
+@acindex AM_PATH_LISPDIR
+@vindex EMACS
+@vindex lispdir
+Searches for the program @command{emacs}, and, if found, sets the
+output variable @code{lispdir} to the full path to Emacs' site-lisp
+directory.
+
+Note that this test assumes the @command{emacs} found to be a version
+that supports Emacs Lisp (such as GNU Emacs or XEmacs). Other
+emacsen can cause this test to hang (some, like old versions of
+MicroEmacs, start up in interactive mode, requiring @kbd{C-x C-c} to
+exit, which is hardly obvious for a non-emacs user). In most cases,
+however, you should be able to use @kbd{C-c} to kill the test. In
+order to avoid problems, you can set @env{EMACS} to ``no'' in the
+environment, or use the @option{--with-lispdir} option to
+@command{configure} to explicitly set the correct path (if you're sure
+you have an @command{emacs} that supports Emacs Lisp).
+
+@item AM_PROG_AR(@ovar{act-if-fail})
+@acindex AM_PROG_AR
+@vindex AR
+You must use this macro when you use the archiver in your project, if
+you want support for unusual archivers such as Microsoft @command{lib}.
+The content of the optional argument is executed if the archiver
+interface is not recognized; the default action is to abort configure
+with an error message.
+
+@item AM_PROG_AS
+@acindex AM_PROG_AS
+@vindex CCAS
+@vindex CCASFLAGS
+Use this macro when you have assembly code in your project. This will
+choose the assembler for you (by default the C compiler) and set
+@code{CCAS}, and will also set @code{CCASFLAGS} if required.
+
+@item AM_PROG_CC_C_O
+@acindex AM_PROG_CC_C_O
+This is an obsolescent macro that checks that the C compiler supports
+the @option{-c} and @option{-o} options together. Note that, since
+Automake 1.14, the @code{AC_PROG_CC} is rewritten to implement such
+checks itself, and thus the explicit use of @code{AM_PROG_CC_C_O}
+should no longer be required.
+
+@item AM_PROG_LEX
+@acindex AM_PROG_LEX
+@acindex AC_PROG_LEX
+@cindex HP-UX 10, @command{lex} problems
+@cindex @command{lex} problems with HP-UX 10
+Like @code{AC_PROG_LEX} (@pxref{Particular Programs, , Particular
+Program Checks, autoconf, The Autoconf Manual}), but uses the
+@command{missing} script on systems that do not have @command{lex}.
+HP-UX 10 is one such system.
+
+@item AM_PROG_GCJ
+@acindex AM_PROG_GCJ
+@vindex GCJ
+@vindex GCJFLAGS
+This macro finds the @command{gcj} program or causes an error. It sets
+@code{GCJ} and @code{GCJFLAGS}. @command{gcj} is the Java front-end to the
+GNU Compiler Collection.
+
+@item AM_PROG_UPC([@var{compiler-search-list}])
+@acindex AM_PROG_UPC
+@vindex UPC
+Find a compiler for Unified Parallel C and define the @code{UPC}
+variable. The default @var{compiler-search-list} is @samp{upcc upc}.
+This macro will abort @command{configure} if no Unified Parallel C
+compiler is found.
+
+@item AM_MISSING_PROG(@var{name}, @var{program})
+@acindex AM_MISSING_PROG
+@vindex MISSING
+Find a maintainer tool @var{program} and define the @var{name}
+environment variable with its location. If @var{program} is not
+detected, then @var{name} will instead invoke the @command{missing}
+script, in order to give useful advice to the user about the missing
+maintainer tool. @xref{maintainer-mode}, for more information on when
+the @command{missing} script is appropriate.
+
+@item AM_SILENT_RULES
+@acindex AM_SILENT_RULES
+Control the machinery for less verbose build output
+(@pxref{Automake Silent Rules}).
+
+@item AM_WITH_DMALLOC
+@acindex AM_WITH_DMALLOC
+@cindex @command{dmalloc}, support for
+@vindex WITH_DMALLOC
+@opindex --with-dmalloc
+Add support for the @uref{http://dmalloc.com/, Dmalloc package}. If
+the user runs @command{configure} with @option{--with-dmalloc}, then
+define @code{WITH_DMALLOC} and add @option{-ldmalloc} to @code{LIBS}.
+
+@end table
+
+
+@node Obsolete Macros
+@subsection Obsolete Macros
+@cindex obsolete macros
+@cindex autoupdate
+
+Although using some of the following macros was required in past
+releases, you should not use any of them in new code. @emph{All
+these macros will be removed in the next major Automake version};
+if you are still using them, running @command{autoupdate} should
+adjust your @file{configure.ac} automatically (@pxref{autoupdate
+Invocation, , Using @command{autoupdate} to Modernize
+@file{configure.ac}, autoconf, The Autoconf Manual}).
+@emph{Do it NOW!}
+
+@table @code
+
+@item AM_PROG_MKDIR_P
+@acindex AM_PROG_MKDIR_P
+@cindex @code{mkdir -p}, macro check
+@vindex MKDIR_P
+@vindex mkdir_p
+
+From Automake 1.8 to 1.9.6 this macro used to define the output
+variable @code{mkdir_p} to one of @code{mkdir -p}, @code{install-sh
+-d}, or @code{mkinstalldirs}.
+
+Nowadays Autoconf provides a similar functionality with
+@code{AC_PROG_MKDIR_P} (@pxref{Particular Programs, , Particular
+Program Checks, autoconf, The Autoconf Manual}), however this defines
+the output variable @code{MKDIR_P} instead. In case you are still
+using the @code{AM_PROG_MKDIR_P} macro in your @file{configure.ac},
+or its provided variable @code{$(mkdir_p)} in your @file{Makefile.am},
+you are advised to switch ASAP to the more modern Autoconf-provided
+interface instead; both the macro and the variable might be removed
+in a future major Automake release.
+
+@end table
+
+
+@node Private Macros
+@subsection Private Macros
+
+The following macros are private macros you should not call directly.
+They are called by the other public macros when appropriate. Do not
+rely on them, as they might be changed in a future version. Consider
+them as implementation details; or better, do not consider them at all:
+skip this section!
+
+@ftable @code
+@item _AM_DEPENDENCIES
+@itemx AM_SET_DEPDIR
+@itemx AM_DEP_TRACK
+@itemx AM_OUTPUT_DEPENDENCY_COMMANDS
+These macros are used to implement Automake's automatic dependency
+tracking scheme. They are called automatically by Automake when
+required, and there should be no need to invoke them manually.
+
+@item AM_MAKE_INCLUDE
+This macro is used to discover how the user's @command{make} handles
+@code{include} statements. This macro is automatically invoked when
+needed; there should be no need to invoke it manually.
+
+@item AM_PROG_INSTALL_STRIP
+This is used to find a version of @code{install} that can be used to
+strip a program at installation time. This macro is automatically
+included when required.
+
+@item AM_SANITY_CHECK
+This checks to make sure that a file created in the build directory is
+newer than a file in the source directory. This can fail on systems
+where the clock is set incorrectly. This macro is automatically run
+from @code{AM_INIT_AUTOMAKE}.
+
+@end ftable
+
+
+@node Directories
+@chapter Directories
+
+For simple projects that distribute all files in the same directory
+it is enough to have a single @file{Makefile.am} that builds
+everything in place.
+
+In larger projects, it is common to organize files in different
+directories, in a tree. For example, there could be a directory
+for the program's source, one for the testsuite, and one for the
+documentation; or, for very large projects, there could be one
+directory per program, per library or per module.
+
+The traditional approach is to build these subdirectories recursively,
+employing @emph{make recursion}: each directory contains its
+own @file{Makefile}, and when @command{make} is run from the top-level
+directory, it enters each subdirectory in turn, and invokes there a
+new @command{make} instance to build the directory's contents.
+
+Because this approach is very widespread, Automake offers built-in
+support for it. However, it is worth nothing that the use of make
+recursion has its own serious issues and drawbacks, and that it's
+well possible to have packages with a multi directory layout that
+make little or no use of such recursion (examples of such packages
+are GNU Bison and GNU Automake itself); see also the @ref{Alternative}
+section below.
+
+@menu
+* Subdirectories:: Building subdirectories recursively
+* Conditional Subdirectories:: Conditionally not building directories
+* Alternative:: Subdirectories without recursion
+* Subpackages:: Nesting packages
+@end menu
+
+@node Subdirectories
+@section Recursing subdirectories
+
+@cindex @code{SUBDIRS}, explained
+
+In packages using make recursion, the top level @file{Makefile.am} must
+tell Automake which subdirectories are to be built. This is done via
+the @code{SUBDIRS} variable.
+@vindex SUBDIRS
+
+The @code{SUBDIRS} variable holds a list of subdirectories in which
+building of various sorts can occur. The rules for many targets
+(e.g., @code{all}) in the generated @file{Makefile} will run commands
+both locally and in all specified subdirectories. Note that the
+directories listed in @code{SUBDIRS} are not required to contain
+@file{Makefile.am}s; only @file{Makefile}s (after configuration).
+This allows inclusion of libraries from packages that do not use
+Automake (such as @code{gettext}; see also @ref{Third-Party
+Makefiles}).
+
+In packages that use subdirectories, the top-level @file{Makefile.am} is
+often very short. For instance, here is the @file{Makefile.am} from the
+GNU Hello distribution:
+
+@example
+EXTRA_DIST = BUGS ChangeLog.O README-alpha
+SUBDIRS = doc intl po src tests
+@end example
+
+When Automake invokes @command{make} in a subdirectory, it uses the value
+of the @code{MAKE} variable. It passes the value of the variable
+@code{AM_MAKEFLAGS} to the @command{make} invocation; this can be set in
+@file{Makefile.am} if there are flags you must always pass to
+@command{make}.
+@vindex MAKE
+@vindex AM_MAKEFLAGS
+
+The directories mentioned in @code{SUBDIRS} are usually direct
+children of the current directory, each subdirectory containing its
+own @file{Makefile.am} with a @code{SUBDIRS} pointing to deeper
+subdirectories. Automake can be used to construct packages of
+arbitrary depth this way.
+
+By default, Automake generates @file{Makefiles} that work depth-first
+in postfix order: the subdirectories are built before the current
+directory. However, it is possible to change this ordering. You can
+do this by putting @samp{.} into @code{SUBDIRS}. For instance,
+putting @samp{.} first will cause a prefix ordering of
+directories.
+
+Using
+
+@example
+SUBDIRS = lib src . test
+@end example
+
+@noindent
+will cause @file{lib/} to be built before @file{src/}, then the
+current directory will be built, finally the @file{test/} directory
+will be built. It is customary to arrange test directories to be
+built after everything else since they are meant to test what has
+been constructed.
+
+In addition to the built-in recursive targets defined by Automake
+(@code{all}, @code{check}, etc.), the developer can also define his
+own recursive targets. That is done by passing the names of such
+targets as arguments to the m4 macro @code{AM_EXTRA_RECURSIVE_TARGETS}
+in @file{configure.ac}. Automake generates rules to handle the
+recursion for such targets; and the developer can define real actions
+for them by defining corresponding @code{-local} targets.
+
+@example
+% @kbd{cat configure.ac}
+AC_INIT([pkg-name], [1.0]
+AM_INIT_AUTOMAKE
+AM_EXTRA_RECURSIVE_TARGETS([foo])
+AC_CONFIG_FILES([Makefile sub/Makefile sub/src/Makefile])
+AC_OUTPUT
+% @kbd{cat Makefile.am}
+SUBDIRS = sub
+foo-local:
+ @@echo This will be run by "make foo".
+% @kbd{cat sub/Makefile.am}
+SUBDIRS = src
+% @kbd{cat sub/src/Makefile.am}
+foo-local:
+ @@echo This too will be run by a "make foo" issued either in
+ @@echo the 'sub/src/' directory, the 'sub/' directory, or the
+ @@echo top-level directory.
+@end example
+
+@node Conditional Subdirectories
+@section Conditional Subdirectories
+@cindex Subdirectories, building conditionally
+@cindex Conditional subdirectories
+@cindex @code{SUBDIRS}, conditional
+@cindex Conditional @code{SUBDIRS}
+
+It is possible to define the @code{SUBDIRS} variable conditionally if,
+like in the case of GNU Inetutils, you want to only build a subset of
+the entire package.
+
+To illustrate how this works, let's assume we have two directories
+@file{src/} and @file{opt/}. @file{src/} should always be built, but we
+want to decide in @command{configure} whether @file{opt/} will be built
+or not. (For this example we will assume that @file{opt/} should be
+built when the variable @samp{$want_opt} was set to @samp{yes}.)
+
+Running @command{make} should thus recurse into @file{src/} always, and
+then maybe in @file{opt/}.
+
+However @samp{make dist} should always recurse into both @file{src/}
+and @file{opt/}. Because @file{opt/} should be distributed even if it
+is not needed in the current configuration. This means
+@file{opt/Makefile} should be created @emph{unconditionally}.
+
+There are two ways to setup a project like this. You can use Automake
+conditionals (@pxref{Conditionals}) or use Autoconf @code{AC_SUBST}
+variables (@pxref{Setting Output Variables, , Setting Output
+Variables, autoconf, The Autoconf Manual}). Using Automake
+conditionals is the preferred solution. Before we illustrate these
+two possibilities, let's introduce @code{DIST_SUBDIRS}.
+
+@menu
+* SUBDIRS vs DIST_SUBDIRS:: Two sets of directories
+* Subdirectories with AM_CONDITIONAL:: Specifying conditional subdirectories
+* Subdirectories with AC_SUBST:: Another way for conditional recursion
+* Unconfigured Subdirectories:: Not even creating a @samp{Makefile}
+@end menu
+
+@node SUBDIRS vs DIST_SUBDIRS
+@subsection @code{SUBDIRS} vs.@: @code{DIST_SUBDIRS}
+@cindex @code{DIST_SUBDIRS}, explained
+
+Automake considers two sets of directories, defined by the variables
+@code{SUBDIRS} and @code{DIST_SUBDIRS}.
+
+@code{SUBDIRS} contains the subdirectories of the current directory
+that must be built (@pxref{Subdirectories}). It must be defined
+manually; Automake will never guess a directory is to be built. As we
+will see in the next two sections, it is possible to define it
+conditionally so that some directory will be omitted from the build.
+
+@code{DIST_SUBDIRS} is used in rules that need to recurse in all
+directories, even those that have been conditionally left out of the
+build. Recall our example where we may not want to build subdirectory
+@file{opt/}, but yet we want to distribute it? This is where
+@code{DIST_SUBDIRS} comes into play: @samp{opt} may not appear in
+@code{SUBDIRS}, but it must appear in @code{DIST_SUBDIRS}.
+
+Precisely, @code{DIST_SUBDIRS} is used by @samp{make
+maintainer-clean}, @samp{make distclean} and @samp{make dist}. All
+other recursive rules use @code{SUBDIRS}.
+
+If @code{SUBDIRS} is defined conditionally using Automake
+conditionals, Automake will define @code{DIST_SUBDIRS} automatically
+from the possible values of @code{SUBDIRS} in all conditions.
+
+If @code{SUBDIRS} contains @code{AC_SUBST} variables,
+@code{DIST_SUBDIRS} will not be defined correctly because Automake
+does not know the possible values of these variables. In this case
+@code{DIST_SUBDIRS} needs to be defined manually.
+
+@node Subdirectories with AM_CONDITIONAL
+@subsection Subdirectories with @code{AM_CONDITIONAL}
+@cindex @code{SUBDIRS} and @code{AM_CONDITIONAL}
+@cindex @code{AM_CONDITIONAL} and @code{SUBDIRS}
+
+@c Keep in sync with subdir-am-cond.sh
+
+@file{configure} should output the @file{Makefile} for each directory
+and define a condition into which @file{opt/} should be built.
+
+@example
+@dots{}
+AM_CONDITIONAL([COND_OPT], [test "$want_opt" = yes])
+AC_CONFIG_FILES([Makefile src/Makefile opt/Makefile])
+@dots{}
+@end example
+
+Then @code{SUBDIRS} can be defined in the top-level @file{Makefile.am}
+as follows.
+
+@example
+if COND_OPT
+ MAYBE_OPT = opt
+endif
+SUBDIRS = src $(MAYBE_OPT)
+@end example
+
+As you can see, running @command{make} will rightly recurse into
+@file{src/} and maybe @file{opt/}.
+
+@vindex DIST_SUBDIRS
+As you can't see, running @samp{make dist} will recurse into both
+@file{src/} and @file{opt/} directories because @samp{make dist}, unlike
+@samp{make all}, doesn't use the @code{SUBDIRS} variable. It uses the
+@code{DIST_SUBDIRS} variable.
+
+In this case Automake will define @samp{DIST_SUBDIRS = src opt}
+automatically because it knows that @code{MAYBE_OPT} can contain
+@samp{opt} in some condition.
+
+@node Subdirectories with AC_SUBST
+@subsection Subdirectories with @code{AC_SUBST}
+@cindex @code{SUBDIRS} and @code{AC_SUBST}
+@cindex @code{AC_SUBST} and @code{SUBDIRS}
+
+@c Keep in sync with subdir-ac-subst.sh
+
+Another possibility is to define @code{MAYBE_OPT} from
+@file{./configure} using @code{AC_SUBST}:
+
+@example
+@dots{}
+if test "$want_opt" = yes; then
+ MAYBE_OPT=opt
+else
+ MAYBE_OPT=
+fi
+AC_SUBST([MAYBE_OPT])
+AC_CONFIG_FILES([Makefile src/Makefile opt/Makefile])
+@dots{}
+@end example
+
+In this case the top-level @file{Makefile.am} should look as follows.
+
+@example
+SUBDIRS = src $(MAYBE_OPT)
+DIST_SUBDIRS = src opt
+@end example
+
+The drawback is that since Automake cannot guess what the possible
+values of @code{MAYBE_OPT} are, it is necessary to define
+@code{DIST_SUBDIRS}.
+
+@node Unconfigured Subdirectories
+@subsection Unconfigured Subdirectories
+@cindex Subdirectories, configured conditionally
+
+The semantics of @code{DIST_SUBDIRS} are often misunderstood by some
+users that try to @emph{configure and build} subdirectories
+conditionally. Here by configuring we mean creating the
+@file{Makefile} (it might also involve running a nested
+@command{configure} script: this is a costly operation that explains
+why people want to do it conditionally, but only the @file{Makefile}
+is relevant to the discussion).
+
+The above examples all assume that every @file{Makefile} is created,
+even in directories that are not going to be built. The simple reason
+is that we want @samp{make dist} to distribute even the directories
+that are not being built (e.g., platform-dependent code), hence
+@file{make dist} must recurse into the subdirectory, hence this
+directory must be configured and appear in @code{DIST_SUBDIRS}.
+
+Building packages that do not configure every subdirectory is a tricky
+business, and we do not recommend it to the novice as it is easy to
+produce an incomplete tarball by mistake. We will not discuss this
+topic in depth here, yet for the adventurous here are a few rules to
+remember.
+
+@cartouche
+@itemize
+@item @code{SUBDIRS} should always be a subset of @code{DIST_SUBDIRS}.
+
+It makes little sense to have a directory in @code{SUBDIRS} that
+is not in @code{DIST_SUBDIRS}. Think of the former as a way to tell
+which directories listed in the latter should be built.
+@item Any directory listed in @code{DIST_SUBDIRS} and @code{SUBDIRS}
+must be configured.
+
+I.e., the @file{Makefile} must exists or the recursive @command{make}
+rules will not be able to process the directory.
+@item Any configured directory must be listed in @code{DIST_SUBDIRS}.
+
+So that the cleaning rules remove the generated @file{Makefile}s.
+It would be correct to see @code{DIST_SUBDIRS} as a variable that
+lists all the directories that have been configured.
+@end itemize
+@end cartouche
+
+In order to prevent recursion in some unconfigured directory you
+must therefore ensure that this directory does not appear in
+@code{DIST_SUBDIRS} (and @code{SUBDIRS}). For instance, if you define
+@code{SUBDIRS} conditionally using @code{AC_SUBST} and do not define
+@code{DIST_SUBDIRS} explicitly, it will be default to
+@samp{$(SUBDIRS)}; another possibility is to force @code{DIST_SUBDIRS
+= $(SUBDIRS)}.
+
+Of course, directories that are omitted from @code{DIST_SUBDIRS} will
+not be distributed unless you make other arrangements for this to
+happen (for instance, always running @samp{make dist} in a
+configuration where all directories are known to appear in
+@code{DIST_SUBDIRS}; or writing a @code{dist-hook} target to
+distribute these directories).
+
+@cindex Subdirectories, not distributed
+In few packages, unconfigured directories are not even expected to
+be distributed. Although these packages do not require the
+aforementioned extra arrangements, there is another pitfall. If the
+name of a directory appears in @code{SUBDIRS} or @code{DIST_SUBDIRS},
+@command{automake} will make sure the directory exists. Consequently
+@command{automake} cannot be run on such a distribution when one
+directory has been omitted. One way to avoid this check is to use the
+@code{AC_SUBST} method to declare conditional directories; since
+@command{automake} does not know the values of @code{AC_SUBST}
+variables it cannot ensure the corresponding directory exists.
+
+@node Alternative
+@section An Alternative Approach to Subdirectories
+
+If you've ever read Peter Miller's excellent paper,
+@uref{http://miller.emu.id.au/pmiller/books/rmch/,
+Recursive Make Considered Harmful}, the preceding sections on the use of
+make recursion will probably come as unwelcome advice. For those who
+haven't read the paper, Miller's main thesis is that recursive
+@command{make} invocations are both slow and error-prone.
+
+Automake provides sufficient cross-directory support @footnote{We
+believe. This work is new and there are probably warts.
+@xref{Introduction}, for information on reporting bugs.} to enable you
+to write a single @file{Makefile.am} for a complex multi-directory
+package.
+
+By default an installable file specified in a subdirectory will have its
+directory name stripped before installation. For instance, in this
+example, the header file will be installed as
+@file{$(includedir)/stdio.h}:
+
+@example
+include_HEADERS = inc/stdio.h
+@end example
+
+@vindex nobase_
+@cindex @code{nobase_} prefix
+@cindex Path stripping, avoiding
+@cindex Avoiding path stripping
+
+However, the @samp{nobase_} prefix can be used to circumvent this path
+stripping. In this example, the header file will be installed as
+@file{$(includedir)/sys/types.h}:
+
+@example
+nobase_include_HEADERS = sys/types.h
+@end example
+
+@cindex @code{nobase_} and @code{dist_} or @code{nodist_}
+@cindex @code{dist_} and @code{nobase_}
+@cindex @code{nodist_} and @code{nobase_}
+@vindex dist_
+@vindex nodist_
+
+@samp{nobase_} should be specified first when used in conjunction with
+either @samp{dist_} or @samp{nodist_} (@pxref{Fine-grained Distribution
+Control}). For instance:
+
+@example
+nobase_dist_pkgdata_DATA = images/vortex.pgm sounds/whirl.ogg
+@end example
+
+Finally, note that a variable using the @samp{nobase_} prefix can
+often be replaced by several variables, one for each destination
+directory (@pxref{Uniform}). For instance, the last example could be
+rewritten as follows:
+
+@c Keep in sync with primary-prefix-couples-documented-valid.sh
+@example
+imagesdir = $(pkgdatadir)/images
+soundsdir = $(pkgdatadir)/sounds
+dist_images_DATA = images/vortex.pgm
+dist_sounds_DATA = sounds/whirl.ogg
+@end example
+
+@noindent
+This latter syntax makes it possible to change one destination
+directory without changing the layout of the source tree.
+
+Currently, @samp{nobase_*_LTLIBRARIES} are the only exception to this
+rule, in that there is no particular installation order guarantee for
+an otherwise equivalent set of variables without @samp{nobase_} prefix.
+
+@node Subpackages
+@section Nesting Packages
+@cindex Nesting packages
+@cindex Subpackages
+@acindex AC_CONFIG_SUBDIRS
+@acindex AC_CONFIG_AUX_DIR
+
+
+In the GNU Build System, packages can be nested to arbitrary depth.
+This means that a package can embed other packages with their own
+@file{configure}, @file{Makefile}s, etc.
+
+These other packages should just appear as subdirectories of their
+parent package. They must be listed in @code{SUBDIRS} like other
+ordinary directories. However the subpackage's @file{Makefile}s
+should be output by its own @file{configure} script, not by the
+parent's @file{configure}. This is achieved using the
+@code{AC_CONFIG_SUBDIRS} Autoconf macro (@pxref{Subdirectories,
+AC_CONFIG_SUBDIRS, Configuring Other Packages in Subdirectories,
+autoconf, The Autoconf Manual}).
+
+Here is an example package for an @code{arm} program that links with
+a @code{hand} library that is a nested package in subdirectory
+@file{hand/}.
+
+@code{arm}'s @file{configure.ac}:
+
+@example
+AC_INIT([arm], [1.0])
+AC_CONFIG_AUX_DIR([.])
+AM_INIT_AUTOMAKE
+AC_PROG_CC
+AC_CONFIG_FILES([Makefile])
+# Call hand's ./configure script recursively.
+AC_CONFIG_SUBDIRS([hand])
+AC_OUTPUT
+@end example
+
+@code{arm}'s @file{Makefile.am}:
+
+@example
+# Build the library in the hand subdirectory first.
+SUBDIRS = hand
+
+# Include hand's header when compiling this directory.
+AM_CPPFLAGS = -I$(srcdir)/hand
+
+bin_PROGRAMS = arm
+arm_SOURCES = arm.c
+# link with the hand library.
+arm_LDADD = hand/libhand.a
+@end example
+
+Now here is @code{hand}'s @file{hand/configure.ac}:
+
+@example
+AC_INIT([hand], [1.2])
+AC_CONFIG_AUX_DIR([.])
+AM_INIT_AUTOMAKE
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+@end example
+
+@noindent
+and its @file{hand/Makefile.am}:
+
+@example
+lib_LIBRARIES = libhand.a
+libhand_a_SOURCES = hand.c
+@end example
+
+When @samp{make dist} is run from the top-level directory it will
+create an archive @file{arm-1.0.tar.gz} that contains the @code{arm}
+code as well as the @file{hand} subdirectory. This package can be
+built and installed like any ordinary package, with the usual
+@samp{./configure && make && make install} sequence (the @code{hand}
+subpackage will be built and installed by the process).
+
+When @samp{make dist} is run from the hand directory, it will create a
+self-contained @file{hand-1.2.tar.gz} archive. So although it appears
+to be embedded in another package, it can still be used separately.
+
+The purpose of the @samp{AC_CONFIG_AUX_DIR([.])} instruction is to
+force Automake and Autoconf to search for auxiliary scripts in the
+current directory. For instance, this means that there will be two
+copies of @file{install-sh}: one in the top-level of the @code{arm}
+package, and another one in the @file{hand/} subdirectory for the
+@code{hand} package.
+
+The historical default is to search for these auxiliary scripts in
+the parent directory and the grandparent directory. So if the
+@samp{AC_CONFIG_AUX_DIR([.])} line was removed from
+@file{hand/configure.ac}, that subpackage would share the auxiliary
+script of the @code{arm} package. This may looks like a gain in size
+(a few kilobytes), but it is actually a loss of modularity as the
+@code{hand} subpackage is no longer self-contained (@samp{make dist}
+in the subdirectory will not work anymore).
+
+Packages that do not use Automake need more work to be integrated this
+way. @xref{Third-Party Makefiles}.
+
+@node Programs
+@chapter Building Programs and Libraries
+
+A large part of Automake's functionality is dedicated to making it easy
+to build programs and libraries.
+
+@menu
+* A Program:: Building a program
+* A Library:: Building a library
+* A Shared Library:: Building a Libtool library
+* Program and Library Variables:: Variables controlling program and
+ library builds
+* Default _SOURCES:: Default source files
+* LIBOBJS:: Special handling for LIBOBJS and ALLOCA
+* Program Variables:: Variables used when building a program
+* Yacc and Lex:: Yacc and Lex support
+* C++ Support:: Compiling C++ sources
+* Objective C Support:: Compiling Objective C sources
+* Objective C++ Support:: Compiling Objective C++ sources
+* Unified Parallel C Support:: Compiling Unified Parallel C sources
+* Assembly Support:: Compiling assembly sources
+* Fortran 77 Support:: Compiling Fortran 77 sources
+* Fortran 9x Support:: Compiling Fortran 9x sources
+* Java Support with gcj:: Compiling Java sources using gcj
+* Vala Support:: Compiling Vala sources
+* Support for Other Languages:: Compiling other languages
+* Dependencies:: Automatic dependency tracking
+* EXEEXT:: Support for executable extensions
+@end menu
+
+
+@node A Program
+@section Building a program
+
+In order to build a program, you need to tell Automake which sources
+are part of it, and which libraries it should be linked with.
+
+This section also covers conditional compilation of sources or
+programs. Most of the comments about these also apply to libraries
+(@pxref{A Library}) and libtool libraries (@pxref{A Shared Library}).
+
+@menu
+* Program Sources:: Defining program sources
+* Linking:: Linking with libraries or extra objects
+* Conditional Sources:: Handling conditional sources
+* Conditional Programs:: Building a program conditionally
+@end menu
+
+@node Program Sources
+@subsection Defining program sources
+
+@cindex @code{PROGRAMS}, @code{bindir}
+@vindex _PROGRAMS
+@vindex bin_PROGRAMS
+@vindex sbin_PROGRAMS
+@vindex libexec_PROGRAMS
+@vindex pkglibexec_PROGRAMS
+@vindex noinst_PROGRAMS
+@vindex check_PROGRAMS
+
+In a directory containing source that gets built into a program (as
+opposed to a library or a script), the @code{PROGRAMS} primary is used.
+Programs can be installed in @code{bindir}, @code{sbindir},
+@code{libexecdir}, @code{pkglibexecdir}, or not at all
+(@code{noinst_}). They can also be built only for @samp{make check}, in
+which case the prefix is @samp{check_}.
+
+For instance:
+
+@example
+bin_PROGRAMS = hello
+@end example
+
+In this simple case, the resulting @file{Makefile.in} will contain code
+to generate a program named @code{hello}.
+
+Associated with each program are several assisting variables that are
+named after the program. These variables are all optional, and have
+reasonable defaults. Each variable, its use, and default is spelled out
+below; we use the ``hello'' example throughout.
+
+The variable @code{hello_SOURCES} is used to specify which source files
+get built into an executable:
+
+@example
+hello_SOURCES = hello.c version.c getopt.c getopt1.c getopt.h system.h
+@end example
+
+This causes each mentioned @file{.c} file to be compiled into the
+corresponding @file{.o}. Then all are linked to produce @file{hello}.
+
+@cindex @code{_SOURCES} primary, defined
+@cindex @code{SOURCES} primary, defined
+@cindex Primary variable, @code{SOURCES}
+@vindex _SOURCES
+
+If @code{hello_SOURCES} is not specified, then it defaults to the single
+file @file{hello.c} (@pxref{Default _SOURCES}).
+@vindex _SOURCES
+@vindex SOURCES
+
+Multiple programs can be built in a single directory. Multiple programs
+can share a single source file, which must be listed in each
+@code{_SOURCES} definition.
+
+@cindex Header files in @code{_SOURCES}
+@cindex @code{_SOURCES} and header files
+
+Header files listed in a @code{_SOURCES} definition will be included in
+the distribution but otherwise ignored. In case it isn't obvious, you
+should not include the header file generated by @file{configure} in a
+@code{_SOURCES} variable; this file should not be distributed. Lex
+(@file{.l}) and Yacc (@file{.y}) files can also be listed; see @ref{Yacc
+and Lex}.
+
+
+@node Linking
+@subsection Linking the program
+
+If you need to link against libraries that are not found by
+@command{configure}, you can use @code{LDADD} to do so. This variable is
+used to specify additional objects or libraries to link with; it is
+inappropriate for specifying specific linker flags, you should use
+@code{AM_LDFLAGS} for this purpose.
+@vindex LDADD
+@vindex AM_LDFLAGS
+
+@cindex @code{prog_LDADD}, defined
+
+Sometimes, multiple programs are built in one directory but do not share
+the same link-time requirements. In this case, you can use the
+@code{@var{prog}_LDADD} variable (where @var{prog} is the name of the
+program as it appears in some @code{_PROGRAMS} variable, and usually
+written in lowercase) to override @code{LDADD}. If this variable exists
+for a given program, then that program is not linked using @code{LDADD}.
+@vindex maude_LDADD
+
+For instance, in GNU cpio, @code{pax}, @code{cpio} and @code{mt} are
+linked against the library @file{libcpio.a}. However, @code{rmt} is
+built in the same directory, and has no such link requirement. Also,
+@code{mt} and @code{rmt} are only built on certain architectures. Here
+is what cpio's @file{src/Makefile.am} looks like (abridged):
+
+@example
+bin_PROGRAMS = cpio pax $(MT)
+libexec_PROGRAMS = $(RMT)
+EXTRA_PROGRAMS = mt rmt
+
+LDADD = ../lib/libcpio.a $(INTLLIBS)
+rmt_LDADD =
+
+cpio_SOURCES = @dots{}
+pax_SOURCES = @dots{}
+mt_SOURCES = @dots{}
+rmt_SOURCES = @dots{}
+@end example
+
+@cindex @code{_LDFLAGS}, defined
+@vindex maude_LDFLAGS
+@code{@var{prog}_LDADD} is inappropriate for passing program-specific
+linker flags (except for @option{-l}, @option{-L}, @option{-dlopen} and
+@option{-dlpreopen}). So, use the @code{@var{prog}_LDFLAGS} variable for
+this purpose.
+
+@cindex @code{_DEPENDENCIES}, defined
+@vindex maude_DEPENDENCIES
+@vindex EXTRA_maude_DEPENDENCIES
+It is also occasionally useful to have a program depend on some other
+target that is not actually part of that program. This can be done
+using either the @code{@var{prog}_DEPENDENCIES} or the
+@code{EXTRA_@var{prog}_DEPENDENCIES} variable. Each program depends on
+the contents both variables, but no further interpretation is done.
+
+Since these dependencies are associated to the link rule used to
+create the programs they should normally list files used by the link
+command. That is @file{*.$(OBJEXT)}, @file{*.a}, or @file{*.la}
+files. In rare cases you may need to add other kinds of files such as
+linker scripts, but @emph{listing a source file in
+@code{_DEPENDENCIES} is wrong}. If some source file needs to be built
+before all the components of a program are built, consider using the
+@code{BUILT_SOURCES} variable instead (@pxref{Sources}).
+
+If @code{@var{prog}_DEPENDENCIES} is not supplied, it is computed by
+Automake. The automatically-assigned value is the contents of
+@code{@var{prog}_LDADD}, with most configure substitutions, @option{-l},
+@option{-L}, @option{-dlopen} and @option{-dlpreopen} options removed. The
+configure substitutions that are left in are only @samp{$(LIBOBJS)} and
+@samp{$(ALLOCA)}; these are left because it is known that they will not
+cause an invalid value for @code{@var{prog}_DEPENDENCIES} to be
+generated.
+
+@ref{Conditional Sources} shows a situation where @code{_DEPENDENCIES}
+may be used.
+
+The @code{EXTRA_@var{prog}_DEPENDENCIES} may be useful for cases where
+you merely want to augment the @command{automake}-generated
+@code{@var{prog}_DEPENDENCIES} rather than replacing it.
+
+@cindex @code{LDADD} and @option{-l}
+@cindex @option{-l} and @code{LDADD}
+We recommend that you avoid using @option{-l} options in @code{LDADD}
+or @code{@var{prog}_LDADD} when referring to libraries built by your
+package. Instead, write the file name of the library explicitly as in
+the above @code{cpio} example. Use @option{-l} only to list
+third-party libraries. If you follow this rule, the default value of
+@code{@var{prog}_DEPENDENCIES} will list all your local libraries and
+omit the other ones.
+
+
+@node Conditional Sources
+@subsection Conditional compilation of sources
+
+You can't put a configure substitution (e.g., @samp{@@FOO@@} or
+@samp{$(FOO)} where @code{FOO} is defined via @code{AC_SUBST}) into a
+@code{_SOURCES} variable. The reason for this is a bit hard to
+explain, but suffice to say that it simply won't work. Automake will
+give an error if you try to do this.
+
+Fortunately there are two other ways to achieve the same result. One is
+to use configure substitutions in @code{_LDADD} variables, the other is
+to use an Automake conditional.
+
+@subsubheading Conditional Compilation using @code{_LDADD} Substitutions
+
+@cindex @code{EXTRA_prog_SOURCES}, defined
+
+Automake must know all the source files that could possibly go into a
+program, even if not all the files are built in every circumstance. Any
+files that are only conditionally built should be listed in the
+appropriate @code{EXTRA_} variable. For instance, if
+@file{hello-linux.c} or @file{hello-generic.c} were conditionally included
+in @code{hello}, the @file{Makefile.am} would contain:
+
+@example
+bin_PROGRAMS = hello
+hello_SOURCES = hello-common.c
+EXTRA_hello_SOURCES = hello-linux.c hello-generic.c
+hello_LDADD = $(HELLO_SYSTEM)
+hello_DEPENDENCIES = $(HELLO_SYSTEM)
+@end example
+
+@noindent
+You can then setup the @samp{$(HELLO_SYSTEM)} substitution from
+@file{configure.ac}:
+
+@example
+@dots{}
+case $host in
+ *linux*) HELLO_SYSTEM='hello-linux.$(OBJEXT)' ;;
+ *) HELLO_SYSTEM='hello-generic.$(OBJEXT)' ;;
+esac
+AC_SUBST([HELLO_SYSTEM])
+@dots{}
+@end example
+
+In this case, the variable @code{HELLO_SYSTEM} should be replaced by
+either @file{hello-linux.o} or @file{hello-generic.o}, and added to
+both @code{hello_DEPENDENCIES} and @code{hello_LDADD} in order to be
+built and linked in.
+
+@subsubheading Conditional Compilation using Automake Conditionals
+
+An often simpler way to compile source files conditionally is to use
+Automake conditionals. For instance, you could use this
+@file{Makefile.am} construct to build the same @file{hello} example:
+
+@example
+bin_PROGRAMS = hello
+if LINUX
+hello_SOURCES = hello-linux.c hello-common.c
+else
+hello_SOURCES = hello-generic.c hello-common.c
+endif
+@end example
+
+In this case, @file{configure.ac} should setup the @code{LINUX}
+conditional using @code{AM_CONDITIONAL} (@pxref{Conditionals}).
+
+When using conditionals like this you don't need to use the
+@code{EXTRA_} variable, because Automake will examine the contents of
+each variable to construct the complete list of source files.
+
+If your program uses a lot of files, you will probably prefer a
+conditional @samp{+=}.
+
+@example
+bin_PROGRAMS = hello
+hello_SOURCES = hello-common.c
+if LINUX
+hello_SOURCES += hello-linux.c
+else
+hello_SOURCES += hello-generic.c
+endif
+@end example
+
+@node Conditional Programs
+@subsection Conditional compilation of programs
+@cindex Conditional programs
+@cindex Programs, conditional
+
+Sometimes it is useful to determine the programs that are to be built
+at configure time. For instance, GNU @code{cpio} only builds
+@code{mt} and @code{rmt} under special circumstances. The means to
+achieve conditional compilation of programs are the same you can use
+to compile source files conditionally: substitutions or conditionals.
+
+@subsubheading Conditional Programs using @command{configure} Substitutions
+
+@vindex EXTRA_PROGRAMS
+@cindex @code{EXTRA_PROGRAMS}, defined
+In this case, you must notify Automake of all the programs that can
+possibly be built, but at the same time cause the generated
+@file{Makefile.in} to use the programs specified by @command{configure}.
+This is done by having @command{configure} substitute values into each
+@code{_PROGRAMS} definition, while listing all optionally built programs
+in @code{EXTRA_PROGRAMS}.
+
+@example
+bin_PROGRAMS = cpio pax $(MT)
+libexec_PROGRAMS = $(RMT)
+EXTRA_PROGRAMS = mt rmt
+@end example
+
+As explained in @ref{EXEEXT}, Automake will rewrite
+@code{bin_PROGRAMS}, @code{libexec_PROGRAMS}, and
+@code{EXTRA_PROGRAMS}, appending @samp{$(EXEEXT)} to each binary.
+Obviously it cannot rewrite values obtained at run-time through
+@command{configure} substitutions, therefore you should take care of
+appending @samp{$(EXEEXT)} yourself, as in @samp{AC_SUBST([MT],
+['mt$@{EXEEXT@}'])}.
+
+@subsubheading Conditional Programs using Automake Conditionals
+
+You can also use Automake conditionals (@pxref{Conditionals}) to
+select programs to be built. In this case you don't have to worry
+about @samp{$(EXEEXT)} or @code{EXTRA_PROGRAMS}.
+
+@c Keep in sync with exeext.sh
+@example
+bin_PROGRAMS = cpio pax
+if WANT_MT
+ bin_PROGRAMS += mt
+endif
+if WANT_RMT
+ libexec_PROGRAMS = rmt
+endif
+@end example
+
+
+@node A Library
+@section Building a library
+
+@cindex @code{_LIBRARIES} primary, defined
+@cindex @code{LIBRARIES} primary, defined
+@cindex Primary variable, @code{LIBRARIES}
+@vindex _LIBRARIES
+
+@vindex lib_LIBRARIES
+@vindex pkglib_LIBRARIES
+@vindex noinst_LIBRARIES
+
+Building a library is much like building a program. In this case, the
+name of the primary is @code{LIBRARIES}. Libraries can be installed in
+@code{libdir} or @code{pkglibdir}.
+
+@xref{A Shared Library}, for information on how to build shared
+libraries using libtool and the @code{LTLIBRARIES} primary.
+
+Each @code{_LIBRARIES} variable is a list of the libraries to be built.
+For instance, to create a library named @file{libcpio.a}, but not install
+it, you would write:
+
+@example
+noinst_LIBRARIES = libcpio.a
+libcpio_a_SOURCES = @dots{}
+@end example
+
+The sources that go into a library are determined exactly as they are
+for programs, via the @code{_SOURCES} variables. Note that the library
+name is canonicalized (@pxref{Canonicalization}), so the @code{_SOURCES}
+variable corresponding to @file{libcpio.a} is @samp{libcpio_a_SOURCES},
+not @samp{libcpio.a_SOURCES}.
+
+@vindex maude_LIBADD
+Extra objects can be added to a library using the
+@code{@var{library}_LIBADD} variable. This should be used for objects
+determined by @command{configure}. Again from @code{cpio}:
+
+@c Keep in sync with pr401c.sh
+@example
+libcpio_a_LIBADD = $(LIBOBJS) $(ALLOCA)
+@end example
+
+In addition, sources for extra objects that will not exist until
+configure-time must be added to the @code{BUILT_SOURCES} variable
+(@pxref{Sources}).
+
+Building a static library is done by compiling all object files, then
+by invoking @samp{$(AR) $(ARFLAGS)} followed by the name of the
+library and the list of objects, and finally by calling
+@samp{$(RANLIB)} on that library. You should call
+@code{AC_PROG_RANLIB} from your @file{configure.ac} to define
+@code{RANLIB} (Automake will complain otherwise). You should also
+call @code{AM_PROG_AR} to define @code{AR}, in order to support unusual
+archivers such as Microsoft lib. @code{ARFLAGS} will default to
+@code{cru}; you can override this variable by setting it in your
+@file{Makefile.am} or by @code{AC_SUBST}ing it from your
+@file{configure.ac}. You can override the @code{AR} variable by
+defining a per-library @code{maude_AR} variable (@pxref{Program and
+Library Variables}).
+
+@cindex Empty libraries
+Be careful when selecting library components conditionally. Because
+building an empty library is not portable, you should ensure that any
+library always contains at least one object.
+
+To use a static library when building a program, add it to
+@code{LDADD} for this program. In the following example, the program
+@file{cpio} is statically linked with the library @file{libcpio.a}.
+
+@example
+noinst_LIBRARIES = libcpio.a
+libcpio_a_SOURCES = @dots{}
+
+bin_PROGRAMS = cpio
+cpio_SOURCES = cpio.c @dots{}
+cpio_LDADD = libcpio.a
+@end example
+
+
+@node A Shared Library
+@section Building a Shared Library
+
+@cindex Shared libraries, support for
+
+Building shared libraries portably is a relatively complex matter.
+For this reason, GNU Libtool (@pxref{Top, , Introduction, libtool, The
+Libtool Manual}) was created to help build shared libraries in a
+platform-independent way.
+
+@menu
+* Libtool Concept:: Introducing Libtool
+* Libtool Libraries:: Declaring Libtool Libraries
+* Conditional Libtool Libraries:: Building Libtool Libraries Conditionally
+* Conditional Libtool Sources:: Choosing Library Sources Conditionally
+* Libtool Convenience Libraries:: Building Convenience Libtool Libraries
+* Libtool Modules:: Building Libtool Modules
+* Libtool Flags:: Using _LIBADD, _LDFLAGS, and _LIBTOOLFLAGS
+* LTLIBOBJS:: Using $(LTLIBOBJS) and $(LTALLOCA)
+* Libtool Issues:: Common Issues Related to Libtool's Use
+@end menu
+
+@node Libtool Concept
+@subsection The Libtool Concept
+
+@cindex @command{libtool}, introduction
+@cindex libtool library, definition
+@cindex suffix @file{.la}, defined
+@cindex @file{.la} suffix, defined
+
+Libtool abstracts shared and static libraries into a unified concept
+henceforth called @dfn{libtool libraries}. Libtool libraries are
+files using the @file{.la} suffix, and can designate a static library,
+a shared library, or maybe both. Their exact nature cannot be
+determined until @file{./configure} is run: not all platforms support
+all kinds of libraries, and users can explicitly select which
+libraries should be built. (However the package's maintainers can
+tune the default, @pxref{AC_PROG_LIBTOOL, , The @code{AC_PROG_LIBTOOL}
+macro, libtool, The Libtool Manual}.)
+
+@cindex suffix @file{.lo}, defined
+Because object files for shared and static libraries must be compiled
+differently, libtool is also used during compilation. Object files
+built by libtool are called @dfn{libtool objects}: these are files
+using the @file{.lo} suffix. Libtool libraries are built from these
+libtool objects.
+
+You should not assume anything about the structure of @file{.la} or
+@file{.lo} files and how libtool constructs them: this is libtool's
+concern, and the last thing one wants is to learn about libtool's
+guts. However the existence of these files matters, because they are
+used as targets and dependencies in @file{Makefile}s rules when
+building libtool libraries. There are situations where you may have
+to refer to these, for instance when expressing dependencies for
+building source files conditionally (@pxref{Conditional Libtool
+Sources}).
+
+@cindex @file{libltdl}, introduction
+
+People considering writing a plug-in system, with dynamically loaded
+modules, should look into @file{libltdl}: libtool's dlopening library
+(@pxref{Using libltdl, , Using libltdl, libtool, The Libtool Manual}).
+This offers a portable dlopening facility to load libtool libraries
+dynamically, and can also achieve static linking where unavoidable.
+
+Before we discuss how to use libtool with Automake in details, it
+should be noted that the libtool manual also has a section about how
+to use Automake with libtool (@pxref{Using Automake, , Using Automake
+with Libtool, libtool, The Libtool Manual}).
+
+@node Libtool Libraries
+@subsection Building Libtool Libraries
+
+@cindex @code{_LTLIBRARIES} primary, defined
+@cindex @code{LTLIBRARIES} primary, defined
+@cindex Primary variable, @code{LTLIBRARIES}
+@cindex Example of shared libraries
+@vindex lib_LTLIBRARIES
+@vindex pkglib_LTLIBRARIES
+@vindex _LTLIBRARIES
+
+Automake uses libtool to build libraries declared with the
+@code{LTLIBRARIES} primary. Each @code{_LTLIBRARIES} variable is a
+list of libtool libraries to build. For instance, to create a libtool
+library named @file{libgettext.la}, and install it in @code{libdir},
+write:
+
+@example
+lib_LTLIBRARIES = libgettext.la
+libgettext_la_SOURCES = gettext.c gettext.h @dots{}
+@end example
+
+Automake predefines the variable @code{pkglibdir}, so you can use
+@code{pkglib_LTLIBRARIES} to install libraries in
+@samp{$(libdir)/@@PACKAGE@@/}.
+
+If @file{gettext.h} is a public header file that needs to be installed
+in order for people to use the library, it should be declared using a
+@code{_HEADERS} variable, not in @code{libgettext_la_SOURCES}.
+Headers listed in the latter should be internal headers that are not
+part of the public interface.
+
+@example
+lib_LTLIBRARIES = libgettext.la
+libgettext_la_SOURCES = gettext.c @dots{}
+include_HEADERS = gettext.h @dots{}
+@end example
+
+A package can build and install such a library along with other
+programs that use it. This dependency should be specified using
+@code{LDADD}. The following example builds a program named
+@file{hello} that is linked with @file{libgettext.la}.
+
+@example
+lib_LTLIBRARIES = libgettext.la
+libgettext_la_SOURCES = gettext.c @dots{}
+
+bin_PROGRAMS = hello
+hello_SOURCES = hello.c @dots{}
+hello_LDADD = libgettext.la
+@end example
+
+@noindent
+Whether @file{hello} is statically or dynamically linked with
+@file{libgettext.la} is not yet known: this will depend on the
+configuration of libtool and the capabilities of the host.
+
+
+@node Conditional Libtool Libraries
+@subsection Building Libtool Libraries Conditionally
+@cindex libtool libraries, conditional
+@cindex conditional libtool libraries
+
+Like conditional programs (@pxref{Conditional Programs}), there are
+two main ways to build conditional libraries: using Automake
+conditionals or using Autoconf @code{AC_SUBST}itutions.
+
+The important implementation detail you have to be aware of is that
+the place where a library will be installed matters to libtool: it
+needs to be indicated @emph{at link-time} using the @option{-rpath}
+option.
+
+For libraries whose destination directory is known when Automake runs,
+Automake will automatically supply the appropriate @option{-rpath}
+option to libtool. This is the case for libraries listed explicitly in
+some installable @code{_LTLIBRARIES} variables such as
+@code{lib_LTLIBRARIES}.
+
+However, for libraries determined at configure time (and thus
+mentioned in @code{EXTRA_LTLIBRARIES}), Automake does not know the
+final installation directory. For such libraries you must add the
+@option{-rpath} option to the appropriate @code{_LDFLAGS} variable by
+hand.
+
+The examples below illustrate the differences between these two methods.
+
+Here is an example where @code{WANTEDLIBS} is an @code{AC_SUBST}ed
+variable set at @file{./configure}-time to either @file{libfoo.la},
+@file{libbar.la}, both, or none. Although @samp{$(WANTEDLIBS)}
+appears in the @code{lib_LTLIBRARIES}, Automake cannot guess it
+relates to @file{libfoo.la} or @file{libbar.la} at the time it creates
+the link rule for these two libraries. Therefore the @option{-rpath}
+argument must be explicitly supplied.
+
+@c Keep in sync with ltcond.sh
+@example
+EXTRA_LTLIBRARIES = libfoo.la libbar.la
+lib_LTLIBRARIES = $(WANTEDLIBS)
+libfoo_la_SOURCES = foo.c @dots{}
+libfoo_la_LDFLAGS = -rpath '$(libdir)'
+libbar_la_SOURCES = bar.c @dots{}
+libbar_la_LDFLAGS = -rpath '$(libdir)'
+@end example
+
+Here is how the same @file{Makefile.am} would look using Automake
+conditionals named @code{WANT_LIBFOO} and @code{WANT_LIBBAR}. Now
+Automake is able to compute the @option{-rpath} setting itself, because
+it's clear that both libraries will end up in @samp{$(libdir)} if they
+are installed.
+
+@c Keep in sync with ltcond.sh
+@example
+lib_LTLIBRARIES =
+if WANT_LIBFOO
+lib_LTLIBRARIES += libfoo.la
+endif
+if WANT_LIBBAR
+lib_LTLIBRARIES += libbar.la
+endif
+libfoo_la_SOURCES = foo.c @dots{}
+libbar_la_SOURCES = bar.c @dots{}
+@end example
+
+@node Conditional Libtool Sources
+@subsection Libtool Libraries with Conditional Sources
+
+Conditional compilation of sources in a library can be achieved in the
+same way as conditional compilation of sources in a program
+(@pxref{Conditional Sources}). The only difference is that
+@code{_LIBADD} should be used instead of @code{_LDADD} and that it
+should mention libtool objects (@file{.lo} files).
+
+So, to mimic the @file{hello} example from @ref{Conditional Sources},
+we could build a @file{libhello.la} library using either
+@file{hello-linux.c} or @file{hello-generic.c} with the following
+@file{Makefile.am}.
+
+@c Keep in sync with ltcond2.sh
+@example
+lib_LTLIBRARIES = libhello.la
+libhello_la_SOURCES = hello-common.c
+EXTRA_libhello_la_SOURCES = hello-linux.c hello-generic.c
+libhello_la_LIBADD = $(HELLO_SYSTEM)
+libhello_la_DEPENDENCIES = $(HELLO_SYSTEM)
+@end example
+
+@noindent
+And make sure @command{configure} defines @code{HELLO_SYSTEM} as
+either @file{hello-linux.lo} or @file{hello-@-generic.lo}.
+
+Or we could simply use an Automake conditional as follows.
+
+@c Keep in sync with ltcond2.sh
+@example
+lib_LTLIBRARIES = libhello.la
+libhello_la_SOURCES = hello-common.c
+if LINUX
+libhello_la_SOURCES += hello-linux.c
+else
+libhello_la_SOURCES += hello-generic.c
+endif
+@end example
+
+@node Libtool Convenience Libraries
+@subsection Libtool Convenience Libraries
+@cindex convenience libraries, libtool
+@cindex libtool convenience libraries
+@vindex noinst_LTLIBRARIES
+@vindex check_LTLIBRARIES
+
+Sometimes you want to build libtool libraries that should not be
+installed. These are called @dfn{libtool convenience libraries} and
+are typically used to encapsulate many sublibraries, later gathered
+into one big installed library.
+
+Libtool convenience libraries are declared by directory-less variables
+such as @code{noinst_LTLIBRARIES}, @code{check_LTLIBRARIES}, or even
+@code{EXTRA_LTLIBRARIES}. Unlike installed libtool libraries they do
+not need an @option{-rpath} flag at link time (actually this is the only
+difference).
+
+Convenience libraries listed in @code{noinst_LTLIBRARIES} are always
+built. Those listed in @code{check_LTLIBRARIES} are built only upon
+@samp{make check}. Finally, libraries listed in
+@code{EXTRA_LTLIBRARIES} are never built explicitly: Automake outputs
+rules to build them, but if the library does not appear as a Makefile
+dependency anywhere it won't be built (this is why
+@code{EXTRA_LTLIBRARIES} is used for conditional compilation).
+
+Here is a sample setup merging libtool convenience libraries from
+subdirectories into one main @file{libtop.la} library.
+
+@c Keep in sync with ltconv.sh
+@example
+# -- Top-level Makefile.am --
+SUBDIRS = sub1 sub2 @dots{}
+lib_LTLIBRARIES = libtop.la
+libtop_la_SOURCES =
+libtop_la_LIBADD = \
+ sub1/libsub1.la \
+ sub2/libsub2.la \
+ @dots{}
+
+# -- sub1/Makefile.am --
+noinst_LTLIBRARIES = libsub1.la
+libsub1_la_SOURCES = @dots{}
+
+# -- sub2/Makefile.am --
+# showing nested convenience libraries
+SUBDIRS = sub2.1 sub2.2 @dots{}
+noinst_LTLIBRARIES = libsub2.la
+libsub2_la_SOURCES =
+libsub2_la_LIBADD = \
+ sub21/libsub21.la \
+ sub22/libsub22.la \
+ @dots{}
+@end example
+
+When using such setup, beware that @command{automake} will assume
+@file{libtop.la} is to be linked with the C linker. This is because
+@code{libtop_la_SOURCES} is empty, so @command{automake} picks C as
+default language. If @code{libtop_la_SOURCES} was not empty,
+@command{automake} would select the linker as explained in @ref{How
+the Linker is Chosen}.
+
+If one of the sublibraries contains non-C source, it is important that
+the appropriate linker be chosen. One way to achieve this is to
+pretend that there is such a non-C file among the sources of the
+library, thus forcing @command{automake} to select the appropriate
+linker. Here is the top-level @file{Makefile} of our example updated
+to force C++ linking.
+
+@example
+SUBDIRS = sub1 sub2 @dots{}
+lib_LTLIBRARIES = libtop.la
+libtop_la_SOURCES =
+# Dummy C++ source to cause C++ linking.
+nodist_EXTRA_libtop_la_SOURCES = dummy.cxx
+libtop_la_LIBADD = \
+ sub1/libsub1.la \
+ sub2/libsub2.la \
+ @dots{}
+@end example
+
+@samp{EXTRA_*_SOURCES} variables are used to keep track of source
+files that might be compiled (this is mostly useful when doing
+conditional compilation using @code{AC_SUBST}, @pxref{Conditional
+Libtool Sources}), and the @code{nodist_} prefix means the listed
+sources are not to be distributed (@pxref{Program and Library
+Variables}). In effect the file @file{dummy.cxx} does not need to
+exist in the source tree. Of course if you have some real source file
+to list in @code{libtop_la_SOURCES} there is no point in cheating with
+@code{nodist_EXTRA_libtop_la_SOURCES}.
+
+
+@node Libtool Modules
+@subsection Libtool Modules
+@cindex modules, libtool
+@cindex libtool modules
+@cindex @option{-module}, libtool
+
+These are libtool libraries meant to be dlopened. They are
+indicated to libtool by passing @option{-module} at link-time.
+
+@example
+pkglib_LTLIBRARIES = mymodule.la
+mymodule_la_SOURCES = doit.c
+mymodule_la_LDFLAGS = -module
+@end example
+
+Ordinarily, Automake requires that a library's name start with
+@code{lib}. However, when building a dynamically loadable module you
+might wish to use a "nonstandard" name. Automake will not complain
+about such nonstandard names if it knows the library being built is a
+libtool module, i.e., if @option{-module} explicitly appears in the
+library's @code{_LDFLAGS} variable (or in the common @code{AM_LDFLAGS}
+variable when no per-library @code{_LDFLAGS} variable is defined).
+
+As always, @code{AC_SUBST} variables are black boxes to Automake since
+their values are not yet known when @command{automake} is run.
+Therefore if @option{-module} is set via such a variable, Automake
+cannot notice it and will proceed as if the library was an ordinary
+libtool library, with strict naming.
+
+If @code{mymodule_la_SOURCES} is not specified, then it defaults to
+the single file @file{mymodule.c} (@pxref{Default _SOURCES}).
+
+@node Libtool Flags
+@subsection @code{_LIBADD}, @code{_LDFLAGS}, and @code{_LIBTOOLFLAGS}
+@cindex @code{_LIBADD}, libtool
+@cindex @code{_LDFLAGS}, libtool
+@cindex @code{_LIBTOOLFLAGS}, libtool
+@vindex AM_LIBTOOLFLAGS
+@vindex LIBTOOLFLAGS
+@vindex maude_LIBTOOLFLAGS
+
+As shown in previous sections, the @samp{@var{library}_LIBADD}
+variable should be used to list extra libtool objects (@file{.lo}
+files) or libtool libraries (@file{.la}) to add to @var{library}.
+
+The @samp{@var{library}_LDFLAGS} variable is the place to list
+additional libtool linking flags, such as @option{-version-info},
+@option{-static}, and a lot more. @xref{Link mode, , Link mode,
+libtool, The Libtool Manual}.
+
+The @command{libtool} command has two kinds of options: mode-specific
+options and generic options. Mode-specific options such as the
+aforementioned linking flags should be lumped with the other flags
+passed to the tool invoked by @command{libtool} (hence the use of
+@samp{@var{library}_LDFLAGS} for libtool linking flags). Generic
+options include @option{--tag=@var{tag}} and @option{--silent}
+(@pxref{Invoking libtool, , Invoking @command{libtool}, libtool, The
+Libtool Manual} for more options) should appear before the mode
+selection on the command line; in @file{Makefile.am}s they should
+be listed in the @samp{@var{library}_LIBTOOLFLAGS} variable.
+
+If @samp{@var{library}_LIBTOOLFLAGS} is not defined, then the variable
+@code{AM_LIBTOOLFLAGS} is used instead.
+
+These flags are passed to libtool after the @option{--tag=@var{tag}}
+option computed by Automake (if any), so
+@samp{@var{library}_LIBTOOLFLAGS} (or @code{AM_LIBTOOLFLAGS}) is a
+good place to override or supplement the @option{--tag=@var{tag}}
+setting.
+
+The libtool rules also use a @code{LIBTOOLFLAGS} variable that should
+not be set in @file{Makefile.am}: this is a user variable (@pxref{Flag
+Variables Ordering}. It allows users to run @samp{make
+LIBTOOLFLAGS=--silent}, for instance. Note that the verbosity of
+@command{libtool} can also be influenced by the Automake support
+for silent rules (@pxref{Automake Silent Rules}).
+
+@node LTLIBOBJS, Libtool Issues, Libtool Flags, A Shared Library
+@subsection @code{LTLIBOBJS} and @code{LTALLOCA}
+@cindex @code{LTLIBOBJS}, special handling
+@cindex @code{LIBOBJS}, and Libtool
+@cindex @code{LTALLOCA}, special handling
+@cindex @code{ALLOCA}, and Libtool
+@vindex LTLIBOBJS
+@vindex LIBOBJS
+@vindex LTALLOCA
+@vindex ALLOCA
+@acindex AC_LIBOBJ
+
+Where an ordinary library might include @samp{$(LIBOBJS)} or
+@samp{$(ALLOCA)} (@pxref{LIBOBJS}), a libtool library must use
+@samp{$(LTLIBOBJS)} or @samp{$(LTALLOCA)}. This is required because
+the object files that libtool operates on do not necessarily end in
+@file{.o}.
+
+Nowadays, the computation of @code{LTLIBOBJS} from @code{LIBOBJS} is
+performed automatically by Autoconf (@pxref{AC_LIBOBJ vs LIBOBJS, ,
+@code{AC_LIBOBJ} vs.@: @code{LIBOBJS}, autoconf, The Autoconf Manual}).
+
+@node Libtool Issues
+@subsection Common Issues Related to Libtool's Use
+
+@menu
+* Error required file ltmain.sh not found:: The need to run libtoolize
+* Objects created both with libtool and without:: Avoid a specific build race
+@end menu
+
+@node Error required file ltmain.sh not found
+@subsubsection Error: @samp{required file `./ltmain.sh' not found}
+@cindex @file{ltmain.sh} not found
+@cindex @command{libtoolize}, no longer run by @command{automake}
+@cindex @command{libtoolize} and @command{autoreconf}
+@cindex @command{autoreconf} and @command{libtoolize}
+@cindex @file{bootstrap} and @command{autoreconf}
+@cindex @file{autogen.sh} and @command{autoreconf}
+
+Libtool comes with a tool called @command{libtoolize} that will
+install libtool's supporting files into a package. Running this
+command will install @file{ltmain.sh}. You should execute it before
+@command{aclocal} and @command{automake}.
+
+People upgrading old packages to newer autotools are likely to face
+this issue because older Automake versions used to call
+@command{libtoolize}. Therefore old build scripts do not call
+@command{libtoolize}.
+
+Since Automake 1.6, it has been decided that running
+@command{libtoolize} was none of Automake's business. Instead, that
+functionality has been moved into the @command{autoreconf} command
+(@pxref{autoreconf Invocation, , Using @command{autoreconf}, autoconf,
+The Autoconf Manual}). If you do not want to remember what to run and
+when, just learn the @command{autoreconf} command. Hopefully,
+replacing existing @file{bootstrap} or @file{autogen.sh} scripts by
+a call to @command{autoreconf} should also free you from any similar
+incompatible change in the future.
+
+@node Objects created both with libtool and without
+@subsubsection Objects @samp{created with both libtool and without}
+
+Sometimes, the same source file is used both to build a libtool
+library and to build another non-libtool target (be it a program or
+another library).
+
+Let's consider the following @file{Makefile.am}.
+
+@example
+bin_PROGRAMS = prog
+prog_SOURCES = prog.c foo.c @dots{}
+
+lib_LTLIBRARIES = libfoo.la
+libfoo_la_SOURCES = foo.c @dots{}
+@end example
+
+@noindent
+(In this trivial case the issue could be avoided by linking
+@file{libfoo.la} with @file{prog} instead of listing @file{foo.c} in
+@code{prog_SOURCES}. But let's assume we really want to keep
+@file{prog} and @file{libfoo.la} separate.)
+
+Technically, it means that we should build @file{foo.$(OBJEXT)} for
+@file{prog}, and @file{foo.lo} for @file{libfoo.la}. The problem is
+that in the course of creating @file{foo.lo}, libtool may erase (or
+replace) @file{foo.$(OBJEXT)}, and this cannot be avoided.
+
+Therefore, when Automake detects this situation it will complain
+with a message such as
+@example
+object 'foo.$(OBJEXT)' created both with libtool and without
+@end example
+
+A workaround for this issue is to ensure that these two objects get
+different basenames. As explained in @ref{Renamed Objects}, this
+happens automatically when per-targets flags are used.
+
+@example
+bin_PROGRAMS = prog
+prog_SOURCES = prog.c foo.c @dots{}
+prog_CFLAGS = $(AM_CFLAGS)
+
+lib_LTLIBRARIES = libfoo.la
+libfoo_la_SOURCES = foo.c @dots{}
+@end example
+
+@noindent
+Adding @samp{prog_CFLAGS = $(AM_CFLAGS)} is almost a no-op, because
+when the @code{prog_CFLAGS} is defined, it is used instead of
+@code{AM_CFLAGS}. However as a side effect it will cause
+@file{prog.c} and @file{foo.c} to be compiled as
+@file{prog-prog.$(OBJEXT)} and @file{prog-foo.$(OBJEXT)}, which solves
+the issue.
+
+@node Program and Library Variables
+@section Program and Library Variables
+
+Associated with each program is a collection of variables that can be
+used to modify how that program is built. There is a similar list of
+such variables for each library. The canonical name of the program (or
+library) is used as a base for naming these variables.
+
+In the list below, we use the name ``maude'' to refer to the program or
+library. In your @file{Makefile.am} you would replace this with the
+canonical name of your program. This list also refers to ``maude'' as a
+program, but in general the same rules apply for both static and dynamic
+libraries; the documentation below notes situations where programs and
+libraries differ.
+
+@vtable @code
+@item maude_SOURCES
+This variable, if it exists, lists all the source files that are
+compiled to build the program. These files are added to the
+distribution by default. When building the program, Automake will cause
+each source file to be compiled to a single @file{.o} file (or
+@file{.lo} when using libtool). Normally these object files are named
+after the source file, but other factors can change this. If a file in
+the @code{_SOURCES} variable has an unrecognized extension, Automake
+will do one of two things with it. If a suffix rule exists for turning
+files with the unrecognized extension into @file{.o} files, then
+@command{automake} will treat this file as it will any other source file
+(@pxref{Support for Other Languages}). Otherwise, the file will be
+ignored as though it were a header file.
+
+The prefixes @code{dist_} and @code{nodist_} can be used to control
+whether files listed in a @code{_SOURCES} variable are distributed.
+@code{dist_} is redundant, as sources are distributed by default, but it
+can be specified for clarity if desired.
+
+It is possible to have both @code{dist_} and @code{nodist_} variants of
+a given @code{_SOURCES} variable at once; this lets you easily
+distribute some files and not others, for instance:
+
+@example
+nodist_maude_SOURCES = nodist.c
+dist_maude_SOURCES = dist-me.c
+@end example
+
+By default the output file (on Unix systems, the @file{.o} file) will
+be put into the current build directory. However, if the option
+@option{subdir-objects} is in effect in the current directory then the
+@file{.o} file will be put into the subdirectory named after the
+source file. For instance, with @option{subdir-objects} enabled,
+@file{sub/dir/file.c} will be compiled to @file{sub/dir/file.o}. Some
+people prefer this mode of operation. You can specify
+@option{subdir-objects} in @code{AUTOMAKE_OPTIONS} (@pxref{Options}).
+@cindex Subdirectory, objects in
+@cindex Objects in subdirectory
+
+
+@item EXTRA_maude_SOURCES
+Automake needs to know the list of files you intend to compile
+@emph{statically}. For one thing, this is the only way Automake has of
+knowing what sort of language support a given @file{Makefile.in}
+requires. @footnote{There are other, more obscure reasons for
+this limitation as well.} This means that, for example, you can't put a
+configure substitution like @samp{@@my_sources@@} into a @samp{_SOURCES}
+variable. If you intend to conditionally compile source files and use
+@file{configure} to substitute the appropriate object names into, e.g.,
+@code{_LDADD} (see below), then you should list the corresponding source
+files in the @code{EXTRA_} variable.
+
+This variable also supports @code{dist_} and @code{nodist_} prefixes.
+For instance, @code{nodist_EXTRA_maude_SOURCES} would list extra
+sources that may need to be built, but should not be distributed.
+
+@item maude_AR
+A static library is created by default by invoking @samp{$(AR)
+$(ARFLAGS)} followed by the name of the library and then the objects
+being put into the library. You can override this by setting the
+@code{_AR} variable. This is usually used with C++; some C++
+compilers require a special invocation in order to instantiate all the
+templates that should go into a library. For instance, the SGI C++
+compiler likes this variable set like so:
+@example
+libmaude_a_AR = $(CXX) -ar -o
+@end example
+
+@item maude_LIBADD
+Extra objects can be added to a @emph{library} using the @code{_LIBADD}
+variable. For instance, this should be used for objects determined by
+@command{configure} (@pxref{A Library}).
+
+In the case of libtool libraries, @code{maude_LIBADD} can also refer
+to other libtool libraries.
+
+@item maude_LDADD
+Extra objects (@file{*.$(OBJEXT)}) and libraries (@file{*.a},
+@file{*.la}) can be added to a @emph{program} by listing them in the
+@code{_LDADD} variable. For instance, this should be used for objects
+determined by @command{configure} (@pxref{Linking}).
+
+@code{_LDADD} and @code{_LIBADD} are inappropriate for passing
+program-specific linker flags (except for @option{-l}, @option{-L},
+@option{-dlopen} and @option{-dlpreopen}). Use the @code{_LDFLAGS} variable
+for this purpose.
+
+For instance, if your @file{configure.ac} uses @code{AC_PATH_XTRA}, you
+could link your program against the X libraries like so:
+
+@example
+maude_LDADD = $(X_PRE_LIBS) $(X_LIBS) $(X_EXTRA_LIBS)
+@end example
+
+We recommend that you use @option{-l} and @option{-L} only when
+referring to third-party libraries, and give the explicit file names
+of any library built by your package. Doing so will ensure that
+@code{maude_DEPENDENCIES} (see below) is correctly defined by default.
+
+@item maude_LDFLAGS
+This variable is used to pass extra flags to the link step of a program
+or a shared library. It overrides the @code{AM_LDFLAGS} variable.
+
+@item maude_LIBTOOLFLAGS
+This variable is used to pass extra options to @command{libtool}.
+It overrides the @code{AM_LIBTOOLFLAGS} variable.
+These options are output before @command{libtool}'s @option{--mode=@var{mode}}
+option, so they should not be mode-specific options (those belong to
+the compiler or linker flags). @xref{Libtool Flags}.
+
+@item maude_DEPENDENCIES
+@itemx EXTRA_maude_DEPENDENCIES
+It is also occasionally useful to have a target (program or library)
+depend on some other file that is not actually part of that target.
+This can be done using the @code{_DEPENDENCIES} variable. Each
+target depends on the contents of such a variable, but no further
+interpretation is done.
+
+Since these dependencies are associated to the link rule used to
+create the programs they should normally list files used by the link
+command. That is @file{*.$(OBJEXT)}, @file{*.a}, or @file{*.la} files
+for programs; @file{*.lo} and @file{*.la} files for Libtool libraries;
+and @file{*.$(OBJEXT)} files for static libraries. In rare cases you
+may need to add other kinds of files such as linker scripts, but
+@emph{listing a source file in @code{_DEPENDENCIES} is wrong}. If
+some source file needs to be built before all the components of a
+program are built, consider using the @code{BUILT_SOURCES} variable
+(@pxref{Sources}).
+
+If @code{_DEPENDENCIES} is not supplied, it is computed by Automake.
+The automatically-assigned value is the contents of @code{_LDADD} or
+@code{_LIBADD}, with most configure substitutions, @option{-l}, @option{-L},
+@option{-dlopen} and @option{-dlpreopen} options removed. The configure
+substitutions that are left in are only @samp{$(LIBOBJS)} and
+@samp{$(ALLOCA)}; these are left because it is known that they will not
+cause an invalid value for @code{_DEPENDENCIES} to be generated.
+
+@code{_DEPENDENCIES} is more likely used to perform conditional
+compilation using an @code{AC_SUBST} variable that contains a list of
+objects. @xref{Conditional Sources}, and @ref{Conditional Libtool
+Sources}.
+
+The @code{EXTRA_*_DEPENDENCIES} variable may be useful for cases where
+you merely want to augment the @command{automake}-generated
+@code{_DEPENDENCIES} variable rather than replacing it.
+
+@item maude_LINK
+You can override the linker on a per-program basis. By default the
+linker is chosen according to the languages used by the program. For
+instance, a program that includes C++ source code would use the C++
+compiler to link. The @code{_LINK} variable must hold the name of a
+command that can be passed all the @file{.o} file names and libraries
+to link against as arguments. Note that the name of the underlying
+program is @emph{not} passed to @code{_LINK}; typically one uses
+@samp{$@@}:
+
+@example
+maude_LINK = $(CCLD) -magic -o $@@
+@end example
+
+If a @code{_LINK} variable is not supplied, it may still be generated
+and used by Automake due to the use of per-target link flags such as
+@code{_CFLAGS}, @code{_LDFLAGS} or @code{_LIBTOOLFLAGS}, in cases where
+they apply.
+
+@item maude_CCASFLAGS
+@itemx maude_CFLAGS
+@itemx maude_CPPFLAGS
+@itemx maude_CXXFLAGS
+@itemx maude_FFLAGS
+@itemx maude_GCJFLAGS
+@itemx maude_LFLAGS
+@itemx maude_OBJCFLAGS
+@itemx maude_OBJCXXFLAGS
+@itemx maude_RFLAGS
+@itemx maude_UPCFLAGS
+@itemx maude_YFLAGS
+@cindex per-target compilation flags, defined
+Automake allows you to set compilation flags on a per-program (or
+per-library) basis. A single source file can be included in several
+programs, and it will potentially be compiled with different flags for
+each program. This works for any language directly supported by
+Automake. These @dfn{per-target compilation flags} are
+@samp{_CCASFLAGS},
+@samp{_CFLAGS},
+@samp{_CPPFLAGS},
+@samp{_CXXFLAGS},
+@samp{_FFLAGS},
+@samp{_GCJFLAGS},
+@samp{_LFLAGS},
+@samp{_OBJCFLAGS},
+@samp{_OBJCXXFLAGS},
+@samp{_RFLAGS},
+@samp{_UPCFLAGS}, and
+@samp{_YFLAGS}.
+
+When using a per-target compilation flag, Automake will choose a
+different name for the intermediate object files. Ordinarily a file
+like @file{sample.c} will be compiled to produce @file{sample.o}.
+However, if the program's @code{_CFLAGS} variable is set, then the
+object file will be named, for instance, @file{maude-sample.o}. (See
+also @ref{Renamed Objects}).
+
+In compilations with per-target flags, the ordinary @samp{AM_} form of
+the flags variable is @emph{not} automatically included in the
+compilation (however, the user form of the variable @emph{is} included).
+So for instance, if you want the hypothetical @file{maude} compilations
+to also use the value of @code{AM_CFLAGS}, you would need to write:
+
+@example
+maude_CFLAGS = @dots{} your flags @dots{} $(AM_CFLAGS)
+@end example
+
+@xref{Flag Variables Ordering}, for more discussion about the
+interaction between user variables, @samp{AM_} shadow variables, and
+per-target variables.
+
+@item maude_SHORTNAME
+On some platforms the allowable file names are very short. In order to
+support these systems and per-target compilation flags at the same
+time, Automake allows you to set a ``short name'' that will influence
+how intermediate object files are named. For instance, in the following
+example,
+
+@example
+bin_PROGRAMS = maude
+maude_CPPFLAGS = -DSOMEFLAG
+maude_SHORTNAME = m
+maude_SOURCES = sample.c @dots{}
+@end example
+
+@noindent
+the object file would be named @file{m-sample.o} rather than
+@file{maude-sample.o}.
+
+This facility is rarely needed in practice,
+and we recommend avoiding it until you find it is required.
+@end vtable
+
+@node Default _SOURCES
+@section Default @code{_SOURCES}
+
+@vindex _SOURCES
+@vindex SOURCES
+@cindex @code{_SOURCES}, default
+@cindex default @code{_SOURCES}
+@vindex AM_DEFAULT_SOURCE_EXT
+
+@code{_SOURCES} variables are used to specify source files of programs
+(@pxref{A Program}), libraries (@pxref{A Library}), and Libtool
+libraries (@pxref{A Shared Library}).
+
+When no such variable is specified for a target, Automake will define
+one itself. The default is to compile a single C file whose base name
+is the name of the target itself, with any extension replaced by
+@code{AM_DEFAULT_SOURCE_EXT}, which defaults to @file{.c}.
+
+For example if you have the following somewhere in your
+@file{Makefile.am} with no corresponding @code{libfoo_a_SOURCES}:
+
+@example
+lib_LIBRARIES = libfoo.a sub/libc++.a
+@end example
+
+@noindent
+@file{libfoo.a} will be built using a default source file named
+@file{libfoo.c}, and @file{sub/libc++.a} will be built from
+@file{sub/libc++.c}. (In older versions @file{sub/libc++.a}
+would be built from @file{sub_libc___a.c}, i.e., the default source
+was the canonized name of the target, with @file{.c} appended.
+We believe the new behavior is more sensible, but for backward
+compatibility @command{automake} will use the old name if a file or a rule
+with that name exists and @code{AM_DEFAULT_SOURCE_EXT} is not used.)
+
+@cindex @code{check_PROGRAMS} example
+@vindex check_PROGRAMS
+Default sources are mainly useful in test suites, when building many
+test programs each from a single source. For instance, in
+
+@example
+check_PROGRAMS = test1 test2 test3
+AM_DEFAULT_SOURCE_EXT = .cpp
+@end example
+
+@noindent
+@file{test1}, @file{test2}, and @file{test3} will be built
+from @file{test1.cpp}, @file{test2.cpp}, and @file{test3.cpp}.
+Without the last line, they will be built from @file{test1.c},
+@file{test2.c}, and @file{test3.c}.
+
+@cindex Libtool modules, default source example
+@cindex default source, Libtool modules example
+Another case where this is convenient is building many Libtool modules
+(@file{module@var{n}.la}), each defined in its own file
+(@file{module@var{n}.c}).
+
+@example
+AM_LDFLAGS = -module
+lib_LTLIBRARIES = module1.la module2.la module3.la
+@end example
+
+@cindex empty @code{_SOURCES}
+@cindex @code{_SOURCES}, empty
+Finally, there is one situation where this default source computation
+needs to be avoided: when a target should not be built from sources.
+We already saw such an example in @ref{true}; this happens when all
+the constituents of a target have already been compiled and just need
+to be combined using a @code{_LDADD} variable. Then it is necessary
+to define an empty @code{_SOURCES} variable, so that @command{automake}
+does not compute a default.
+
+@example
+bin_PROGRAMS = target
+target_SOURCES =
+target_LDADD = libmain.a libmisc.a
+@end example
+
+@node LIBOBJS
+@section Special handling for @code{LIBOBJS} and @code{ALLOCA}
+
+@cindex @code{LIBOBJS}, example
+@cindex @code{ALLOCA}, example
+@cindex @code{LIBOBJS}, special handling
+@cindex @code{ALLOCA}, special handling
+@vindex LTLIBOBJS
+@vindex LIBOBJS
+@vindex LTALLOCA
+@vindex ALLOCA
+
+The @samp{$(LIBOBJS)} and @samp{$(ALLOCA)} variables list object
+files that should be compiled into the project to provide an
+implementation for functions that are missing or broken on the host
+system. They are substituted by @file{configure}.
+
+@acindex AC_LIBOBJ
+
+These variables are defined by Autoconf macros such as
+@code{AC_LIBOBJ}, @code{AC_REPLACE_FUNCS} (@pxref{Generic Functions, ,
+Generic Function Checks, autoconf, The Autoconf Manual}), or
+@code{AC_FUNC_ALLOCA} (@pxref{Particular Functions, , Particular
+Function Checks, autoconf, The Autoconf Manual}). Many other Autoconf
+macros call @code{AC_LIBOBJ} or @code{AC_REPLACE_FUNCS} to
+populate @samp{$(LIBOBJS)}.
+
+@acindex AC_LIBSOURCE
+
+Using these variables is very similar to doing conditional compilation
+using @code{AC_SUBST} variables, as described in @ref{Conditional
+Sources}. That is, when building a program, @samp{$(LIBOBJS)} and
+@samp{$(ALLOCA)} should be added to the associated @samp{*_LDADD}
+variable, or to the @samp{*_LIBADD} variable when building a library.
+However there is no need to list the corresponding sources in
+@samp{EXTRA_*_SOURCES} nor to define @samp{*_DEPENDENCIES}. Automake
+automatically adds @samp{$(LIBOBJS)} and @samp{$(ALLOCA)} to the
+dependencies, and it will discover the list of corresponding source
+files automatically (by tracing the invocations of the
+@code{AC_LIBSOURCE} Autoconf macros). If you have already defined
+@samp{*_DEPENDENCIES} explicitly for an unrelated reason, then you
+either need to add these variables manually, or use
+@samp{EXTRA_*_DEPENDENCIES} instead of @samp{*_DEPENDENCIES}.
+
+These variables are usually used to build a portability library that
+is linked with all the programs of the project. We now review a
+sample setup. First, @file{configure.ac} contains some checks that
+affect either @code{LIBOBJS} or @code{ALLOCA}.
+
+@example
+# configure.ac
+@dots{}
+AC_CONFIG_LIBOBJ_DIR([lib])
+@dots{}
+AC_FUNC_MALLOC dnl May add malloc.$(OBJEXT) to LIBOBJS
+AC_FUNC_MEMCMP dnl May add memcmp.$(OBJEXT) to LIBOBJS
+AC_REPLACE_FUNCS([strdup]) dnl May add strdup.$(OBJEXT) to LIBOBJS
+AC_FUNC_ALLOCA dnl May add alloca.$(OBJEXT) to ALLOCA
+@dots{}
+AC_CONFIG_FILES([
+ lib/Makefile
+ src/Makefile
+])
+AC_OUTPUT
+@end example
+
+@acindex AC_CONFIG_LIBOBJ_DIR
+
+The @code{AC_CONFIG_LIBOBJ_DIR} tells Autoconf that the source files
+of these object files are to be found in the @file{lib/} directory.
+Automake can also use this information, otherwise it expects the
+source files are to be in the directory where the @samp{$(LIBOBJS)}
+and @samp{$(ALLOCA)} variables are used.
+
+The @file{lib/} directory should therefore contain @file{malloc.c},
+@file{memcmp.c}, @file{strdup.c}, @file{alloca.c}. Here is its
+@file{Makefile.am}:
+
+@example
+# lib/Makefile.am
+
+noinst_LIBRARIES = libcompat.a
+libcompat_a_SOURCES =
+libcompat_a_LIBADD = $(LIBOBJS) $(ALLOCA)
+@end example
+
+The library can have any name, of course, and anyway it is not going
+to be installed: it just holds the replacement versions of the missing
+or broken functions so we can later link them in. Many projects
+also include extra functions, specific to the project, in that
+library: they are simply added on the @code{_SOURCES} line.
+
+@cindex Empty libraries and @samp{$(LIBOBJS)}
+@cindex @samp{$(LIBOBJS)} and empty libraries
+There is a small trap here, though: @samp{$(LIBOBJS)} and
+@samp{$(ALLOCA)} might be empty, and building an empty library is not
+portable. You should ensure that there is always something to put in
+@file{libcompat.a}. Most projects will also add some utility
+functions in that directory, and list them in
+@code{libcompat_a_SOURCES}, so in practice @file{libcompat.a} cannot
+be empty.
+
+Finally here is how this library could be used from the @file{src/}
+directory.
+
+@example
+# src/Makefile.am
+
+# Link all programs in this directory with libcompat.a
+LDADD = ../lib/libcompat.a
+
+bin_PROGRAMS = tool1 tool2 @dots{}
+tool1_SOURCES = @dots{}
+tool2_SOURCES = @dots{}
+@end example
+
+When option @option{subdir-objects} is not used, as in the above
+example, the variables @samp{$(LIBOBJS)} or @samp{$(ALLOCA)} can only
+be used in the directory where their sources lie. E.g., here it would
+be wrong to use @samp{$(LIBOBJS)} or @samp{$(ALLOCA)} in
+@file{src/Makefile.am}. However if both @option{subdir-objects} and
+@code{AC_CONFIG_LIBOBJ_DIR} are used, it is OK to use these variables
+in other directories. For instance @file{src/Makefile.am} could be
+changed as follows.
+
+@example
+# src/Makefile.am
+
+AUTOMAKE_OPTIONS = subdir-objects
+LDADD = $(LIBOBJS) $(ALLOCA)
+
+bin_PROGRAMS = tool1 tool2 @dots{}
+tool1_SOURCES = @dots{}
+tool2_SOURCES = @dots{}
+@end example
+
+Because @samp{$(LIBOBJS)} and @samp{$(ALLOCA)} contain object
+file names that end with @samp{.$(OBJEXT)}, they are not suitable for
+Libtool libraries (where the expected object extension is @file{.lo}):
+@code{LTLIBOBJS} and @code{LTALLOCA} should be used instead.
+
+@code{LTLIBOBJS} is defined automatically by Autoconf and should not
+be defined by hand (as in the past), however at the time of writing
+@code{LTALLOCA} still needs to be defined from @code{ALLOCA} manually.
+@xref{AC_LIBOBJ vs LIBOBJS, , @code{AC_LIBOBJ} vs.@: @code{LIBOBJS},
+autoconf, The Autoconf Manual}.
+
+
+@node Program Variables
+@section Variables used when building a program
+
+Occasionally it is useful to know which @file{Makefile} variables
+Automake uses for compilations, and in which order (@pxref{Flag
+Variables Ordering}); for instance, you might need to do your own
+compilation in some special cases.
+
+Some variables are inherited from Autoconf; these are @code{CC},
+@code{CFLAGS}, @code{CPPFLAGS}, @code{DEFS}, @code{LDFLAGS}, and
+@code{LIBS}.
+@vindex CC
+@vindex CFLAGS
+@vindex CPPFLAGS
+@vindex DEFS
+@vindex LDFLAGS
+@vindex LIBS
+
+There are some additional variables that Automake defines on its own:
+
+@vtable @code
+@item AM_CPPFLAGS
+The contents of this variable are passed to every compilation that invokes
+the C preprocessor; it is a list of arguments to the preprocessor. For
+instance, @option{-I} and @option{-D} options should be listed here.
+
+Automake already provides some @option{-I} options automatically, in a
+separate variable that is also passed to every compilation that invokes
+the C preprocessor. In particular it generates @samp{-I.},
+@samp{-I$(srcdir)}, and a @option{-I} pointing to the directory holding
+@file{config.h} (if you've used @code{AC_CONFIG_HEADERS}). You can
+disable the default @option{-I} options using the @option{nostdinc}
+option.
+
+When a file to be included is generated during the build and not part
+of a distribution tarball, its location is under @code{$(builddir)},
+not under @code{$(srcdir)}. This matters especially for packages that
+use header files placed in sub-directories and want to allow builds
+outside the source tree (@pxref{VPATH Builds}). In that case we
+recommend to use a pair of @option{-I} options, such as, e.g.,
+@samp{-Isome/subdir -I$(srcdir)/some/subdir} or
+@samp{-I$(top_builddir)/some/subdir -I$(top_srcdir)/some/subdir}.
+Note that the reference to the build tree should come before the
+reference to the source tree, so that accidentally leftover generated
+files in the source directory are ignored.
+
+@code{AM_CPPFLAGS} is ignored in preference to a per-executable (or
+per-library) @code{_CPPFLAGS} variable if it is defined.
+
+@item INCLUDES
+This does the same job as @code{AM_CPPFLAGS} (or any per-target
+@code{_CPPFLAGS} variable if it is used). It is an older name for the
+same functionality. This variable is deprecated; we suggest using
+@code{AM_CPPFLAGS} and per-target @code{_CPPFLAGS} instead.
+
+@item AM_CFLAGS
+This is the variable the @file{Makefile.am} author can use to pass
+in additional C compiler flags. In some situations, this is
+not used, in preference to the per-executable (or per-library)
+@code{_CFLAGS}.
+
+@item COMPILE
+This is the command used to actually compile a C source file. The
+file name is appended to form the complete command line.
+
+@item AM_LDFLAGS
+This is the variable the @file{Makefile.am} author can use to pass
+in additional linker flags. In some situations, this is not used, in
+preference to the per-executable (or per-library) @code{_LDFLAGS}.
+
+@item LINK
+This is the command used to actually link a C program. It already
+includes @samp{-o $@@} and the usual variable references (for instance,
+@code{CFLAGS}); it takes as ``arguments'' the names of the object files
+and libraries to link in. This variable is not used when the linker is
+overridden with a per-target @code{_LINK} variable or per-target flags
+cause Automake to define such a @code{_LINK} variable.
+@end vtable
+
+
+@node Yacc and Lex
+@section Yacc and Lex support
+
+Automake has somewhat idiosyncratic support for Yacc and Lex.
+
+Automake assumes that the @file{.c} file generated by @command{yacc}
+(or @command{lex}) should be named using the basename of the input
+file. That is, for a yacc source file @file{foo.y}, Automake will
+cause the intermediate file to be named @file{foo.c} (as opposed to
+@file{y.tab.c}, which is more traditional).
+
+The extension of a yacc source file is used to determine the extension
+of the resulting C or C++ source and header files. Note that header
+files are generated only when the @option{-d} Yacc option is used; see
+below for more information about this flag, and how to specify it.
+Files with the extension @file{.y} will thus be turned into @file{.c}
+sources and @file{.h} headers; likewise, @file{.yy} will become
+@file{.cc} and @file{.hh}, @file{.y++} will become @file{c++} and
+@file{h++}, @file{.yxx} will become @file{.cxx} and @file{.hxx},
+and @file{.ypp} will become @file{.cpp} and @file{.hpp}.
+
+Similarly, lex source files can be used to generate C or C++; the
+extensions @file{.l}, @file{.ll}, @file{.l++}, @file{.lxx}, and
+@file{.lpp} are recognized.
+
+You should never explicitly mention the intermediate (C or C++) file
+in any @code{SOURCES} variable; only list the source file.
+
+The intermediate files generated by @command{yacc} (or @command{lex})
+will be included in any distribution that is made. That way the user
+doesn't need to have @command{yacc} or @command{lex}.
+
+If a @command{yacc} source file is seen, then your @file{configure.ac} must
+define the variable @code{YACC}. This is most easily done by invoking
+the macro @code{AC_PROG_YACC} (@pxref{Particular Programs, , Particular
+Program Checks, autoconf, The Autoconf Manual}).
+
+@vindex YFLAGS
+@vindex AM_YFLAGS
+When @code{yacc} is invoked, it is passed @code{AM_YFLAGS} and
+@code{YFLAGS}. The latter is a user variable and the former is
+intended for the @file{Makefile.am} author.
+
+@code{AM_YFLAGS} is usually used to pass the @option{-d} option to
+@command{yacc}. Automake knows what this means and will automatically
+adjust its rules to update and distribute the header file built by
+@samp{yacc -d}@footnote{Please note that @command{automake} recognizes
+@option{-d} in @code{AM_YFLAGS} only if it is not clustered with other
+options; for example, it won't be recognized if @code{AM_YFLAGS} is
+@option{-dt}, but it will be if @code{AM_YFLAGS} is @option{-d -t} or
+@option{-t -d}.}.
+What Automake cannot guess, though, is where this
+header will be used: it is up to you to ensure the header gets built
+before it is first used. Typically this is necessary in order for
+dependency tracking to work when the header is included by another
+file. The common solution is listing the header file in
+@code{BUILT_SOURCES} (@pxref{Sources}) as follows.
+
+@example
+BUILT_SOURCES = parser.h
+AM_YFLAGS = -d
+bin_PROGRAMS = foo
+foo_SOURCES = @dots{} parser.y @dots{}
+@end example
+
+If a @command{lex} source file is seen, then your @file{configure.ac}
+must define the variable @code{LEX}. You can use @code{AC_PROG_LEX}
+to do this (@pxref{Particular Programs, , Particular Program Checks,
+autoconf, The Autoconf Manual}), but using @code{AM_PROG_LEX} macro
+(@pxref{Macros}) is recommended.
+
+@vindex LFLAGS
+@vindex AM_LFLAGS
+When @command{lex} is invoked, it is passed @code{AM_LFLAGS} and
+@code{LFLAGS}. The latter is a user variable and the former is
+intended for the @file{Makefile.am} author.
+
+When @code{AM_MAINTAINER_MODE} (@pxref{maintainer-mode}) is used, the
+rebuild rule for distributed Yacc and Lex sources are only used when
+@code{maintainer-mode} is enabled, or when the files have been erased.
+
+@cindex @command{ylwrap}
+@cindex @command{yacc}, multiple parsers
+@cindex Multiple @command{yacc} parsers
+@cindex Multiple @command{lex} lexers
+@cindex @command{lex}, multiple lexers
+
+When @command{lex} or @command{yacc} sources are used, @code{automake -a}
+automatically installs an auxiliary program called @command{ylwrap} in
+your package (@pxref{Auxiliary Programs}).
+This program is used by the build rules to rename the output of these
+tools, and makes it possible to include multiple @command{yacc} (or
+@command{lex}) source files in a single directory. (This is necessary
+because yacc's output file name is fixed, and a parallel make could
+conceivably invoke more than one instance of @command{yacc}
+simultaneously.)
+
+For @command{yacc}, simply managing locking is insufficient. The output of
+@command{yacc} always uses the same symbol names internally, so it isn't
+possible to link two @command{yacc} parsers into the same executable.
+
+We recommend using the following renaming hack used in @command{gdb}:
+@example
+#define yymaxdepth c_maxdepth
+#define yyparse c_parse
+#define yylex c_lex
+#define yyerror c_error
+#define yylval c_lval
+#define yychar c_char
+#define yydebug c_debug
+#define yypact c_pact
+#define yyr1 c_r1
+#define yyr2 c_r2
+#define yydef c_def
+#define yychk c_chk
+#define yypgo c_pgo
+#define yyact c_act
+#define yyexca c_exca
+#define yyerrflag c_errflag
+#define yynerrs c_nerrs
+#define yyps c_ps
+#define yypv c_pv
+#define yys c_s
+#define yy_yys c_yys
+#define yystate c_state
+#define yytmp c_tmp
+#define yyv c_v
+#define yy_yyv c_yyv
+#define yyval c_val
+#define yylloc c_lloc
+#define yyreds c_reds
+#define yytoks c_toks
+#define yylhs c_yylhs
+#define yylen c_yylen
+#define yydefred c_yydefred
+#define yydgoto c_yydgoto
+#define yysindex c_yysindex
+#define yyrindex c_yyrindex
+#define yygindex c_yygindex
+#define yytable c_yytable
+#define yycheck c_yycheck
+#define yyname c_yyname
+#define yyrule c_yyrule
+@end example
+
+For each define, replace the @samp{c_} prefix with whatever you like.
+These defines work for @command{bison}, @command{byacc}, and
+traditional @code{yacc}s. If you find a parser generator that uses a
+symbol not covered here, please report the new name so it can be added
+to the list.
+
+
+@node C++ Support
+@section C++ Support
+
+@cindex C++ support
+@cindex Support for C++
+
+Automake includes full support for C++.
+
+Any package including C++ code must define the output variable
+@code{CXX} in @file{configure.ac}; the simplest way to do this is to use
+the @code{AC_PROG_CXX} macro (@pxref{Particular Programs, , Particular
+Program Checks, autoconf, The Autoconf Manual}).
+
+A few additional variables are defined when a C++ source file is seen:
+
+@vtable @code
+@item CXX
+The name of the C++ compiler.
+
+@item CXXFLAGS
+Any flags to pass to the C++ compiler.
+
+@item AM_CXXFLAGS
+The maintainer's variant of @code{CXXFLAGS}.
+
+@item CXXCOMPILE
+The command used to actually compile a C++ source file. The file name
+is appended to form the complete command line.
+
+@item CXXLINK
+The command used to actually link a C++ program.
+@end vtable
+
+
+@node Objective C Support
+@section Objective C Support
+
+@cindex Objective C support
+@cindex Support for Objective C
+
+Automake includes some support for Objective C.
+
+Any package including Objective C code must define the output variable
+@code{OBJC} in @file{configure.ac}; the simplest way to do this is to use
+the @code{AC_PROG_OBJC} macro (@pxref{Particular Programs, , Particular
+Program Checks, autoconf, The Autoconf Manual}).
+
+A few additional variables are defined when an Objective C source file
+is seen:
+
+@vtable @code
+@item OBJC
+The name of the Objective C compiler.
+
+@item OBJCFLAGS
+Any flags to pass to the Objective C compiler.
+
+@item AM_OBJCFLAGS
+The maintainer's variant of @code{OBJCFLAGS}.
+
+@item OBJCCOMPILE
+The command used to actually compile an Objective C source file. The
+file name is appended to form the complete command line.
+
+@item OBJCLINK
+The command used to actually link an Objective C program.
+@end vtable
+
+
+@node Objective C++ Support
+@section Objective C++ Support
+
+@cindex Objective C++ support
+@cindex Support for Objective C++
+
+Automake includes some support for Objective C++.
+
+Any package including Objective C++ code must define the output variable
+@code{OBJCXX} in @file{configure.ac}; the simplest way to do this is to use
+the @code{AC_PROG_OBJCXX} macro (@pxref{Particular Programs, , Particular
+Program Checks, autoconf, The Autoconf Manual}).
+
+A few additional variables are defined when an Objective C++ source file
+is seen:
+
+@vtable @code
+@item OBJCXX
+The name of the Objective C++ compiler.
+
+@item OBJCXXFLAGS
+Any flags to pass to the Objective C++ compiler.
+
+@item AM_OBJCXXFLAGS
+The maintainer's variant of @code{OBJCXXFLAGS}.
+
+@item OBJCXXCOMPILE
+The command used to actually compile an Objective C++ source file. The
+file name is appended to form the complete command line.
+
+@item OBJCXXLINK
+The command used to actually link an Objective C++ program.
+@end vtable
+
+
+@node Unified Parallel C Support
+@section Unified Parallel C Support
+
+@cindex Unified Parallel C support
+@cindex Support for Unified Parallel C
+
+Automake includes some support for Unified Parallel C.
+
+Any package including Unified Parallel C code must define the output
+variable @code{UPC} in @file{configure.ac}; the simplest way to do
+this is to use the @code{AM_PROG_UPC} macro (@pxref{Public Macros}).
+
+A few additional variables are defined when a Unified Parallel C
+source file is seen:
+
+@vtable @code
+@item UPC
+The name of the Unified Parallel C compiler.
+
+@item UPCFLAGS
+Any flags to pass to the Unified Parallel C compiler.
+
+@item AM_UPCFLAGS
+The maintainer's variant of @code{UPCFLAGS}.
+
+@item UPCCOMPILE
+The command used to actually compile a Unified Parallel C source file.
+The file name is appended to form the complete command line.
+
+@item UPCLINK
+The command used to actually link a Unified Parallel C program.
+@end vtable
+
+
+@node Assembly Support
+@section Assembly Support
+
+Automake includes some support for assembly code. There are two forms
+of assembler files: normal (@file{*.s}) and preprocessed by @code{CPP}
+(@file{*.S} or @file{*.sx}).
+
+@vindex CCAS
+@vindex CCASFLAGS
+@vindex CPPFLAGS
+@vindex AM_CCASFLAGS
+@vindex AM_CPPFLAGS
+The variable @code{CCAS} holds the name of the compiler used to build
+assembly code. This compiler must work a bit like a C compiler; in
+particular it must accept @option{-c} and @option{-o}. The values of
+@code{CCASFLAGS} and @code{AM_CCASFLAGS} (or its per-target
+definition) is passed to the compilation. For preprocessed files,
+@code{DEFS}, @code{DEFAULT_INCLUDES}, @code{INCLUDES}, @code{CPPFLAGS}
+and @code{AM_CPPFLAGS} are also used.
+
+The autoconf macro @code{AM_PROG_AS} will define @code{CCAS} and
+@code{CCASFLAGS} for you (unless they are already set, it simply sets
+@code{CCAS} to the C compiler and @code{CCASFLAGS} to the C compiler
+flags), but you are free to define these variables by other means.
+
+Only the suffixes @file{.s}, @file{.S}, and @file{.sx} are recognized by
+@command{automake} as being files containing assembly code.
+
+
+@node Fortran 77 Support
+@comment node-name, next, previous, up
+@section Fortran 77 Support
+
+@cindex Fortran 77 support
+@cindex Support for Fortran 77
+
+Automake includes full support for Fortran 77.
+
+Any package including Fortran 77 code must define the output variable
+@code{F77} in @file{configure.ac}; the simplest way to do this is to use
+the @code{AC_PROG_F77} macro (@pxref{Particular Programs, , Particular
+Program Checks, autoconf, The Autoconf Manual}).
+
+A few additional variables are defined when a Fortran 77 source file is
+seen:
+
+@vtable @code
+
+@item F77
+The name of the Fortran 77 compiler.
+
+@item FFLAGS
+Any flags to pass to the Fortran 77 compiler.
+
+@item AM_FFLAGS
+The maintainer's variant of @code{FFLAGS}.
+
+@item RFLAGS
+Any flags to pass to the Ratfor compiler.
+
+@item AM_RFLAGS
+The maintainer's variant of @code{RFLAGS}.
+
+@item F77COMPILE
+The command used to actually compile a Fortran 77 source file. The file
+name is appended to form the complete command line.
+
+@item FLINK
+The command used to actually link a pure Fortran 77 program or shared
+library.
+
+@end vtable
+
+Automake can handle preprocessing Fortran 77 and Ratfor source files in
+addition to compiling them@footnote{Much, if not most, of the
+information in the following sections pertaining to preprocessing
+Fortran 77 programs was taken almost verbatim from @ref{Catalogue of
+Rules, , Catalogue of Rules, make, The GNU Make Manual}.}. Automake
+also contains some support for creating programs and shared libraries
+that are a mixture of Fortran 77 and other languages (@pxref{Mixing
+Fortran 77 With C and C++}).
+
+These issues are covered in the following sections.
+
+@menu
+* Preprocessing Fortran 77:: Preprocessing Fortran 77 sources
+* Compiling Fortran 77 Files:: Compiling Fortran 77 sources
+* Mixing Fortran 77 With C and C++:: Mixing Fortran 77 With C and C++
+@end menu
+
+
+@node Preprocessing Fortran 77
+@comment node-name, next, previous, up
+@subsection Preprocessing Fortran 77
+
+@cindex Preprocessing Fortran 77
+@cindex Fortran 77, Preprocessing
+@cindex Ratfor programs
+
+@file{N.f} is made automatically from @file{N.F} or @file{N.r}. This
+rule runs just the preprocessor to convert a preprocessable Fortran 77
+or Ratfor source file into a strict Fortran 77 source file. The precise
+command used is as follows:
+
+@table @file
+
+@item .F
+@code{$(F77) -F $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS)@*
+$(AM_FFLAGS) $(FFLAGS)}
+
+@item .r
+@code{$(F77) -F $(AM_FFLAGS) $(FFLAGS) $(AM_RFLAGS) $(RFLAGS)}
+
+@end table
+
+
+@node Compiling Fortran 77 Files
+@comment node-name, next, previous, up
+@subsection Compiling Fortran 77 Files
+
+@file{N.o} is made automatically from @file{N.f}, @file{N.F} or
+@file{N.r} by running the Fortran 77 compiler. The precise command used
+is as follows:
+
+@table @file
+
+@item .f
+@code{$(F77) -c $(AM_FFLAGS) $(FFLAGS)}
+
+@item .F
+@code{$(F77) -c $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS)@*
+$(AM_FFLAGS) $(FFLAGS)}
+
+@item .r
+@code{$(F77) -c $(AM_FFLAGS) $(FFLAGS) $(AM_RFLAGS) $(RFLAGS)}
+
+@end table
+
+
+@node Mixing Fortran 77 With C and C++
+@comment node-name, next, previous, up
+@subsection Mixing Fortran 77 With C and C++
+
+@cindex Fortran 77, mixing with C and C++
+@cindex Mixing Fortran 77 with C and C++
+@cindex Linking Fortran 77 with C and C++
+@cindex cfortran
+@cindex Mixing Fortran 77 with C and/or C++
+
+Automake currently provides @emph{limited} support for creating programs
+and shared libraries that are a mixture of Fortran 77 and C and/or C++.
+However, there are many other issues related to mixing Fortran 77 with
+other languages that are @emph{not} (currently) handled by Automake, but
+that are handled by other packages@footnote{For example,
+@uref{http://www-zeus.desy.de/~burow/cfortran/, the cfortran package}
+addresses all of these inter-language issues, and runs under nearly all
+Fortran 77, C and C++ compilers on nearly all platforms. However,
+@command{cfortran} is not yet Free Software, but it will be in the next
+major release.}.
+
+Automake can help in two ways:
+
+@enumerate
+@item
+Automatic selection of the linker depending on which combinations of
+source code.
+
+@item
+Automatic selection of the appropriate linker flags (e.g., @option{-L} and
+@option{-l}) to pass to the automatically selected linker in order to link
+in the appropriate Fortran 77 intrinsic and run-time libraries.
+
+@cindex @code{FLIBS}, defined
+@vindex FLIBS
+These extra Fortran 77 linker flags are supplied in the output variable
+@code{FLIBS} by the @code{AC_F77_LIBRARY_LDFLAGS} Autoconf macro.
+@xref{Fortran Compiler, , Fortran Compiler Characteristics, autoconf,
+The Autoconf Manual}.
+@end enumerate
+
+If Automake detects that a program or shared library (as mentioned in
+some @code{_PROGRAMS} or @code{_LTLIBRARIES} primary) contains source
+code that is a mixture of Fortran 77 and C and/or C++, then it requires
+that the macro @code{AC_F77_LIBRARY_LDFLAGS} be called in
+@file{configure.ac}, and that either @code{$(FLIBS)}
+appear in the appropriate @code{_LDADD} (for programs) or @code{_LIBADD}
+(for shared libraries) variables. It is the responsibility of the
+person writing the @file{Makefile.am} to make sure that @samp{$(FLIBS)}
+appears in the appropriate @code{_LDADD} or
+@code{_LIBADD} variable.
+
+@cindex Mixed language example
+@cindex Example, mixed language
+
+For example, consider the following @file{Makefile.am}:
+
+@example
+bin_PROGRAMS = foo
+foo_SOURCES = main.cc foo.f
+foo_LDADD = libfoo.la $(FLIBS)
+
+pkglib_LTLIBRARIES = libfoo.la
+libfoo_la_SOURCES = bar.f baz.c zardoz.cc
+libfoo_la_LIBADD = $(FLIBS)
+@end example
+
+In this case, Automake will insist that @code{AC_F77_LIBRARY_LDFLAGS}
+is mentioned in @file{configure.ac}. Also, if @samp{$(FLIBS)} hadn't
+been mentioned in @code{foo_LDADD} and @code{libfoo_la_LIBADD}, then
+Automake would have issued a warning.
+
+@menu
+* How the Linker is Chosen:: Automatic linker selection
+@end menu
+
+@node How the Linker is Chosen
+@comment node-name, next, previous, up
+@subsubsection How the Linker is Chosen
+
+@cindex Automatic linker selection
+@cindex Selecting the linker automatically
+
+When a program or library mixes several languages, Automake choose the
+linker according to the following priorities. (The names in
+parentheses are the variables containing the link command.)
+
+@enumerate
+@item
+@vindex GCJLINK
+Native Java (@code{GCJLINK})
+@item
+@vindex OBJCXXLINK
+Objective C++ (@code{OBJCXXLINK})
+@item
+@vindex CXXLINK
+C++ (@code{CXXLINK})
+@item
+@vindex F77LINK
+Fortran 77 (@code{F77LINK})
+@item
+@vindex FCLINK
+Fortran (@code{FCLINK})
+@item
+@vindex OBJCLINK
+Objective C (@code{OBJCLINK})
+@item
+@vindex UPCLINK
+Unified Parallel C (@code{UPCLINK})
+@item
+@vindex LINK
+C (@code{LINK})
+@end enumerate
+
+For example, if Fortran 77, C and C++ source code is compiled
+into a program, then the C++ linker will be used. In this case, if the
+C or Fortran 77 linkers required any special libraries that weren't
+included by the C++ linker, then they must be manually added to an
+@code{_LDADD} or @code{_LIBADD} variable by the user writing the
+@file{Makefile.am}.
+
+Automake only looks at the file names listed in @file{_SOURCES}
+variables to choose the linker, and defaults to the C linker.
+Sometimes this is inconvenient because you are linking against a
+library written in another language and would like to set the linker
+more appropriately. @xref{Libtool Convenience Libraries}, for a
+trick with @code{nodist_EXTRA_@dots{}_SOURCES}.
+
+A per-target @code{_LINK} variable will override the above selection.
+Per-target link flags will cause Automake to write a per-target
+@code{_LINK} variable according to the language chosen as above.
+
+
+@node Fortran 9x Support
+@comment node-name, next, previous, up
+@section Fortran 9x Support
+
+@cindex Fortran 9x support
+@cindex Support for Fortran 9x
+
+Automake includes support for Fortran 9x.
+
+Any package including Fortran 9x code must define the output variable
+@code{FC} in @file{configure.ac}; the simplest way to do this is to use
+the @code{AC_PROG_FC} macro (@pxref{Particular Programs, , Particular
+Program Checks, autoconf, The Autoconf Manual}).
+
+A few additional variables are defined when a Fortran 9x source file is
+seen:
+
+@vtable @code
+
+@item FC
+The name of the Fortran 9x compiler.
+
+@item FCFLAGS
+Any flags to pass to the Fortran 9x compiler.
+
+@item AM_FCFLAGS
+The maintainer's variant of @code{FCFLAGS}.
+
+@item FCCOMPILE
+The command used to actually compile a Fortran 9x source file. The file
+name is appended to form the complete command line.
+
+@item FCLINK
+The command used to actually link a pure Fortran 9x program or shared
+library.
+
+@end vtable
+
+@menu
+* Compiling Fortran 9x Files:: Compiling Fortran 9x sources
+@end menu
+
+@node Compiling Fortran 9x Files
+@comment node-name, next, previous, up
+@subsection Compiling Fortran 9x Files
+
+@file{@var{file}.o} is made automatically from @file{@var{file}.f90},
+@file{@var{file}.f95}, @file{@var{file}.f03}, or @file{@var{file}.f08}
+by running the Fortran 9x compiler. The precise command used
+is as follows:
+
+@table @file
+
+@item .f90
+@code{$(FC) $(AM_FCFLAGS) $(FCFLAGS) -c $(FCFLAGS_f90) $<}
+
+@item .f95
+@code{$(FC) $(AM_FCFLAGS) $(FCFLAGS) -c $(FCFLAGS_f95) $<}
+
+@item .f03
+@code{$(FC) $(AM_FCFLAGS) $(FCFLAGS) -c $(FCFLAGS_f03) $<}
+
+@item .f08
+@code{$(FC) $(AM_FCFLAGS) $(FCFLAGS) -c $(FCFLAGS_f08) $<}
+
+@end table
+
+@node Java Support with gcj
+@comment node-name, next, previous, up
+@section Compiling Java sources using gcj
+
+@cindex Java support with gcj
+@cindex Support for Java with gcj
+@cindex Java to native code, compilation
+@cindex Compilation of Java to native code
+
+Automake includes support for natively compiled Java, using @command{gcj},
+the Java front end to the GNU Compiler Collection (rudimentary support
+for compiling Java to bytecode using the @command{javac} compiler is
+also present, @emph{albeit deprecated}; @pxref{Java}).
+
+Any package including Java code to be compiled must define the output
+variable @code{GCJ} in @file{configure.ac}; the variable @code{GCJFLAGS}
+must also be defined somehow (either in @file{configure.ac} or
+@file{Makefile.am}). The simplest way to do this is to use the
+@code{AM_PROG_GCJ} macro.
+
+@vindex GCJFLAGS
+
+By default, programs including Java source files are linked with
+@command{gcj}.
+
+As always, the contents of @code{AM_GCJFLAGS} are passed to every
+compilation invoking @command{gcj} (in its role as an ahead-of-time
+compiler, when invoking it to create @file{.class} files,
+@code{AM_JAVACFLAGS} is used instead). If it is necessary to pass
+options to @command{gcj} from @file{Makefile.am}, this variable, and not
+the user variable @code{GCJFLAGS}, should be used.
+
+@vindex AM_GCJFLAGS
+
+@command{gcj} can be used to compile @file{.java}, @file{.class},
+@file{.zip}, or @file{.jar} files.
+
+When linking, @command{gcj} requires that the main class be specified
+using the @option{--main=} option. The easiest way to do this is to use
+the @code{_LDFLAGS} variable for the program.
+
+
+@node Vala Support
+@comment node-name, next, previous, up
+@section Vala Support
+
+@cindex Vala Support
+@cindex Support for Vala
+
+Automake provides initial support for Vala
+(@uref{http://www.vala-project.org/}).
+This requires valac version 0.7.0 or later, and currently requires
+the user to use GNU @command{make}.
+
+@example
+foo_SOURCES = foo.vala bar.vala zardoc.c
+@end example
+
+Any @file{.vala} file listed in a @code{_SOURCES} variable will be
+compiled into C code by the Vala compiler. The generated @file{.c} files
+are distributed. The end user does not need to have a Vala compiler installed.
+
+Automake ships with an Autoconf macro called @code{AM_PROG_VALAC}
+that will locate the Vala compiler and optionally check its version
+number.
+
+@defmac AM_PROG_VALAC (@ovar{minimum-version}, @ovar{action-if-found},
+ @ovar{action-if-not-found})
+Search for a Vala compiler in @env{PATH}. If it is found, the variable
+@code{VALAC} is set to point to it (see below for more details). This
+macro takes three optional arguments. The first argument, if present,
+is the minimum version of the Vala compiler required to compile this
+package. If a compiler is found and satisfies @var{minimum-version},
+then @var{action-if-found} is run (this defaults to do nothing).
+Otherwise, @var{action-if-not-found} is run. If @var{action-if-not-found}
+is not specified, the default value is to print a warning in case no
+compiler is found, or if a too-old version of the compiler is found.
+@end defmac
+
+There are a few variables that are used when compiling Vala sources:
+
+@vtable @code
+@item VALAC
+Absolute path to the Vala compiler, or simply @samp{valac} if no
+suitable compiler Vala could be found at configure runtime.
+
+@item VALAFLAGS
+Additional arguments for the Vala compiler.
+
+@item AM_VALAFLAGS
+The maintainer's variant of @code{VALAFLAGS}.
+
+@example
+lib_LTLIBRARIES = libfoo.la
+libfoo_la_SOURCES = foo.vala
+@end example
+@end vtable
+
+Note that currently, you cannot use per-target @code{*_VALAFLAGS}
+(@pxref{Renamed Objects}) to produce different C files from one Vala
+source file.
+
+
+@node Support for Other Languages
+@comment node-name, next, previous, up
+@section Support for Other Languages
+
+Automake currently only includes full support for C, C++ (@pxref{C++
+Support}), Objective C (@pxref{Objective C Support}),
+Objective C++ (@pxref{Objective C++ Support}),
+Fortran 77
+(@pxref{Fortran 77 Support}), Fortran 9x (@pxref{Fortran 9x Support}),
+and Java (@pxref{Java Support with gcj}). There is only rudimentary
+support for other languages, support for which will be improved based
+on user demand.
+
+Some limited support for adding your own languages is available via the
+suffix rule handling (@pxref{Suffixes}).
+
+@node Dependencies
+@section Automatic dependency tracking
+
+As a developer it is often painful to continually update the
+@file{Makefile.am} whenever the include-file dependencies change in a
+project. Automake supplies a way to automatically track dependency
+changes (@pxref{Dependency Tracking}).
+
+@cindex Dependency tracking
+@cindex Automatic dependency tracking
+
+Automake always uses complete dependencies for a compilation,
+including system headers. Automake's model is that dependency
+computation should be a side effect of the build. To this end,
+dependencies are computed by running all compilations through a
+special wrapper program called @command{depcomp}. @command{depcomp}
+understands how to coax many different C and C++ compilers into
+generating dependency information in the format it requires.
+@samp{automake -a} will install @command{depcomp} into your source
+tree for you. If @command{depcomp} can't figure out how to properly
+invoke your compiler, dependency tracking will simply be disabled for
+your build.
+
+@cindex @command{depcomp}
+
+Experience with earlier versions of Automake (@pxref{Dependency Tracking
+Evolution, , Dependency Tracking Evolution, automake-history, Brief History
+of Automake}) taught us that it is not reliable to generate dependencies
+only on the maintainer's system, as configurations vary too much. So
+instead Automake implements dependency tracking at build time.
+
+Automatic dependency tracking can be suppressed by putting
+@option{no-dependencies} in the variable @code{AUTOMAKE_OPTIONS}, or
+passing @option{no-dependencies} as an argument to @code{AM_INIT_AUTOMAKE}
+(this should be the preferred way). Or, you can invoke @command{automake}
+with the @option{-i} option. Dependency tracking is enabled by default.
+
+@vindex AUTOMAKE_OPTIONS
+@opindex no-dependencies
+
+The person building your package also can choose to disable dependency
+tracking by configuring with @option{--disable-dependency-tracking}.
+
+@cindex Disabling dependency tracking
+@cindex Dependency tracking, disabling
+
+
+@node EXEEXT
+@section Support for executable extensions
+
+@cindex Executable extension
+@cindex Extension, executable
+@cindex Windows
+
+On some platforms, such as Windows, executables are expected to have an
+extension such as @file{.exe}. On these platforms, some compilers (GCC
+among them) will automatically generate @file{foo.exe} when asked to
+generate @file{foo}.
+
+Automake provides mostly-transparent support for this. Unfortunately
+@emph{mostly} doesn't yet mean @emph{fully}. Until the English
+dictionary is revised, you will have to assist Automake if your package
+must support those platforms.
+
+One thing you must be aware of is that, internally, Automake rewrites
+something like this:
+
+@example
+bin_PROGRAMS = liver
+@end example
+
+to this:
+
+@example
+bin_PROGRAMS = liver$(EXEEXT)
+@end example
+
+The targets Automake generates are likewise given the @samp{$(EXEEXT)}
+extension.
+
+The variables @code{TESTS} and @code{XFAIL_TESTS} (@pxref{Simple Tests})
+are also rewritten if they contain filenames that have been declared as
+programs in the same @file{Makefile}. (This is mostly useful when some
+programs from @code{check_PROGRAMS} are listed in @code{TESTS}.)
+
+However, Automake cannot apply this rewriting to @command{configure}
+substitutions. This means that if you are conditionally building a
+program using such a substitution, then your @file{configure.ac} must
+take care to add @samp{$(EXEEXT)} when constructing the output variable.
+
+Sometimes maintainers like to write an explicit link rule for their
+program. Without executable extension support, this is easy---you
+simply write a rule whose target is the name of the program. However,
+when executable extension support is enabled, you must instead add the
+@samp{$(EXEEXT)} suffix.
+
+This might be a nuisance for maintainers who know their package will
+never run on a platform that has
+executable extensions. For those maintainers, the @option{no-exeext}
+option (@pxref{Options}) will disable this feature. This works in a
+fairly ugly way; if @option{no-exeext} is seen, then the presence of a
+rule for a target named @code{foo} in @file{Makefile.am} will override
+an @command{automake}-generated rule for @samp{foo$(EXEEXT)}. Without
+the @option{no-exeext} option, this use will give a diagnostic.
+
+
+@node Other Objects
+@chapter Other Derived Objects
+
+Automake can handle derived objects that are not C programs. Sometimes
+the support for actually building such objects must be explicitly
+supplied, but Automake will still automatically handle installation and
+distribution.
+
+@menu
+* Scripts:: Executable scripts
+* Headers:: Header files
+* Data:: Architecture-independent data files
+* Sources:: Derived sources
+@end menu
+
+
+@node Scripts
+@section Executable Scripts
+
+@cindex @code{_SCRIPTS} primary, defined
+@cindex @code{SCRIPTS} primary, defined
+@cindex Primary variable, @code{SCRIPTS}
+@vindex _SCRIPTS
+@cindex Installing scripts
+
+It is possible to define and install programs that are scripts. Such
+programs are listed using the @code{SCRIPTS} primary name. When the
+script is distributed in its final, installable form, the
+@file{Makefile} usually looks as follows:
+@vindex SCRIPTS
+
+@example
+# Install my_script in $(bindir) and distribute it.
+dist_bin_SCRIPTS = my_script
+@end example
+
+Scripts are not distributed by default; as we have just seen, those
+that should be distributed can be specified using a @code{dist_}
+prefix as with other primaries.
+
+@cindex @code{SCRIPTS}, installation directories
+@vindex bin_SCRIPTS
+@vindex sbin_SCRIPTS
+@vindex libexec_SCRIPTS
+@vindex pkgdata_SCRIPTS
+@vindex pkglibexec_SCRIPTS
+@vindex noinst_SCRIPTS
+@vindex check_SCRIPTS
+
+Scripts can be installed in @code{bindir}, @code{sbindir},
+@code{libexecdir}, @code{pkglibexecdir}, or @code{pkgdatadir}.
+
+Scripts that need not be installed can be listed in
+@code{noinst_SCRIPTS}, and among them, those which are needed only by
+@samp{make check} should go in @code{check_SCRIPTS}.
+
+When a script needs to be built, the @file{Makefile.am} should include
+the appropriate rules. For instance the @command{automake} program
+itself is a Perl script that is generated from @file{automake.in}.
+Here is how this is handled:
+
+@example
+bin_SCRIPTS = automake
+CLEANFILES = $(bin_SCRIPTS)
+EXTRA_DIST = automake.in
+
+do_subst = sed -e 's,[@@]datadir[@@],$(datadir),g' \
+ -e 's,[@@]PERL[@@],$(PERL),g' \
+ -e 's,[@@]PACKAGE[@@],$(PACKAGE),g' \
+ -e 's,[@@]VERSION[@@],$(VERSION),g' \
+ @dots{}
+
+automake: automake.in Makefile
+ $(do_subst) < $(srcdir)/automake.in > automake
+ chmod +x automake
+@end example
+
+Such scripts for which a build rule has been supplied need to be
+deleted explicitly using @code{CLEANFILES} (@pxref{Clean}), and their
+sources have to be distributed, usually with @code{EXTRA_DIST}
+(@pxref{Basics of Distribution}).
+
+Another common way to build scripts is to process them from
+@file{configure} with @code{AC_CONFIG_FILES}. In this situation
+Automake knows which files should be cleaned and distributed, and what
+the rebuild rules should look like.
+
+For instance if @file{configure.ac} contains
+
+@example
+AC_CONFIG_FILES([src/my_script], [chmod +x src/my_script])
+@end example
+
+@noindent
+to build @file{src/my_script} from @file{src/my_script.in}, then a
+@file{src/Makefile.am} to install this script in @code{$(bindir)} can
+be as simple as
+
+@example
+bin_SCRIPTS = my_script
+CLEANFILES = $(bin_SCRIPTS)
+@end example
+
+@noindent
+There is no need for @code{EXTRA_DIST} or any build rule: Automake
+infers them from @code{AC_CONFIG_FILES} (@pxref{Requirements}).
+@code{CLEANFILES} is still useful, because by default Automake will
+clean targets of @code{AC_CONFIG_FILES} in @code{distclean}, not
+@code{clean}.
+
+Although this looks simpler, building scripts this way has one
+drawback: directory variables such as @code{$(datadir)} are not fully
+expanded and may refer to other directory variables.
+
+@node Headers
+@section Header files
+
+@cindex @code{_HEADERS} primary, defined
+@cindex @code{HEADERS} primary, defined
+@cindex Primary variable, @code{HEADERS}
+@vindex _HEADERS
+@vindex noinst_HEADERS
+@cindex @code{HEADERS}, installation directories
+@cindex Installing headers
+@vindex include_HEADERS
+@vindex oldinclude_HEADERS
+@vindex pkginclude_HEADERS
+
+
+Header files that must be installed are specified by the
+@code{HEADERS} family of variables. Headers can be installed in
+@code{includedir}, @code{oldincludedir}, @code{pkgincludedir} or any
+other directory you may have defined (@pxref{Uniform}). For instance,
+
+@example
+include_HEADERS = foo.h bar/bar.h
+@end example
+
+@noindent
+will install the two files as @file{$(includedir)/foo.h} and
+@file{$(includedir)/bar.h}.
+
+The @code{nobase_} prefix is also supported,
+
+@example
+nobase_include_HEADERS = foo.h bar/bar.h
+@end example
+
+@noindent
+will install the two files as @file{$(includedir)/foo.h} and
+@file{$(includedir)/bar/bar.h} (@pxref{Alternative}).
+
+@vindex noinst_HEADERS
+Usually, only header files that accompany installed libraries need to
+be installed. Headers used by programs or convenience libraries are
+not installed. The @code{noinst_HEADERS} variable can be used for
+such headers. However when the header actually belongs to a single
+convenience library or program, we recommend listing it in the
+program's or library's @code{_SOURCES} variable (@pxref{Program
+Sources}) instead of in @code{noinst_HEADERS}. This is clearer for
+the @file{Makefile.am} reader. @code{noinst_HEADERS} would be the
+right variable to use in a directory containing only headers and no
+associated library or program.
+
+All header files must be listed somewhere; in a @code{_SOURCES}
+variable or in a @code{_HEADERS} variable. Missing ones will not
+appear in the distribution.
+
+For header files that are built and must not be distributed, use the
+@code{nodist_} prefix as in @code{nodist_include_HEADERS} or
+@code{nodist_prog_SOURCES}. If these generated headers are needed
+during the build, you must also ensure they exist before they are
+used (@pxref{Sources}).
+
+
+@node Data
+@section Architecture-independent data files
+
+@cindex @code{_DATA} primary, defined
+@cindex @code{DATA} primary, defined
+@cindex Primary variable, @code{DATA}
+@vindex _DATA
+
+Automake supports the installation of miscellaneous data files using the
+@code{DATA} family of variables.
+@vindex DATA
+
+@vindex data_DATA
+@vindex sysconf_DATA
+@vindex sharedstate_DATA
+@vindex localstate_DATA
+@vindex pkgdata_DATA
+
+Such data can be installed in the directories @code{datadir},
+@code{sysconfdir}, @code{sharedstatedir}, @code{localstatedir}, or
+@code{pkgdatadir}.
+
+By default, data files are @emph{not} included in a distribution. Of
+course, you can use the @code{dist_} prefix to change this on a
+per-variable basis.
+
+Here is how Automake declares its auxiliary data files:
+
+@example
+dist_pkgdata_DATA = clean-kr.am clean.am @dots{}
+@end example
+
+
+@node Sources
+@section Built Sources
+
+Because Automake's automatic dependency tracking works as a side-effect
+of compilation (@pxref{Dependencies}) there is a bootstrap issue: a
+target should not be compiled before its dependencies are made, but
+these dependencies are unknown until the target is first compiled.
+
+Ordinarily this is not a problem, because dependencies are distributed
+sources: they preexist and do not need to be built. Suppose that
+@file{foo.c} includes @file{foo.h}. When it first compiles
+@file{foo.o}, @command{make} only knows that @file{foo.o} depends on
+@file{foo.c}. As a side-effect of this compilation @command{depcomp}
+records the @file{foo.h} dependency so that following invocations of
+@command{make} will honor it. In these conditions, it's clear there is
+no problem: either @file{foo.o} doesn't exist and has to be built
+(regardless of the dependencies), or accurate dependencies exist and
+they can be used to decide whether @file{foo.o} should be rebuilt.
+
+It's a different story if @file{foo.h} doesn't exist by the first
+@command{make} run. For instance, there might be a rule to build
+@file{foo.h}. This time @file{file.o}'s build will fail because the
+compiler can't find @file{foo.h}. @command{make} failed to trigger the
+rule to build @file{foo.h} first by lack of dependency information.
+
+@vindex BUILT_SOURCES
+@cindex @code{BUILT_SOURCES}, defined
+
+The @code{BUILT_SOURCES} variable is a workaround for this problem. A
+source file listed in @code{BUILT_SOURCES} is made on @samp{make all}
+or @samp{make check} (or even @samp{make install}) before other
+targets are processed. However, such a source file is not
+@emph{compiled} unless explicitly requested by mentioning it in some
+other @code{_SOURCES} variable.
+
+So, to conclude our introductory example, we could use
+@samp{BUILT_SOURCES = foo.h} to ensure @file{foo.h} gets built before
+any other target (including @file{foo.o}) during @samp{make all} or
+@samp{make check}.
+
+@code{BUILT_SOURCES} is actually a bit of a misnomer, as any file which
+must be created early in the build process can be listed in this
+variable. Moreover, all built sources do not necessarily have to be
+listed in @code{BUILT_SOURCES}. For instance, a generated @file{.c} file
+doesn't need to appear in @code{BUILT_SOURCES} (unless it is included by
+another source), because it's a known dependency of the associated
+object.
+
+It might be important to emphasize that @code{BUILT_SOURCES} is
+honored only by @samp{make all}, @samp{make check} and @samp{make
+install}. This means you cannot build a specific target (e.g.,
+@samp{make foo}) in a clean tree if it depends on a built source.
+However it will succeed if you have run @samp{make all} earlier,
+because accurate dependencies are already available.
+
+The next section illustrates and discusses the handling of built sources
+on a toy example.
+
+@menu
+* Built Sources Example:: Several ways to handle built sources.
+@end menu
+
+@node Built Sources Example
+@subsection Built Sources Example
+
+Suppose that @file{foo.c} includes @file{bindir.h}, which is
+installation-dependent and not distributed: it needs to be built. Here
+@file{bindir.h} defines the preprocessor macro @code{bindir} to the
+value of the @command{make} variable @code{bindir} (inherited from
+@file{configure}).
+
+We suggest several implementations below. It's not meant to be an
+exhaustive listing of all ways to handle built sources, but it will give
+you a few ideas if you encounter this issue.
+
+@subsubheading First Try
+
+This first implementation will illustrate the bootstrap issue mentioned
+in the previous section (@pxref{Sources}).
+
+Here is a tentative @file{Makefile.am}.
+
+@example
+# This won't work.
+bin_PROGRAMS = foo
+foo_SOURCES = foo.c
+nodist_foo_SOURCES = bindir.h
+CLEANFILES = bindir.h
+bindir.h: Makefile
+ echo '#define bindir "$(bindir)"' >$@@
+@end example
+
+This setup doesn't work, because Automake doesn't know that @file{foo.c}
+includes @file{bindir.h}. Remember, automatic dependency tracking works
+as a side-effect of compilation, so the dependencies of @file{foo.o} will
+be known only after @file{foo.o} has been compiled (@pxref{Dependencies}).
+The symptom is as follows.
+
+@example
+% make
+source='foo.c' object='foo.o' libtool=no \
+depfile='.deps/foo.Po' tmpdepfile='.deps/foo.TPo' \
+depmode=gcc /bin/sh ./depcomp \
+gcc -I. -I. -g -O2 -c `test -f 'foo.c' || echo './'`foo.c
+foo.c:2: bindir.h: No such file or directory
+make: *** [foo.o] Error 1
+@end example
+
+In this example @file{bindir.h} is not distributed nor installed, and
+it is not even being built on-time. One may wonder if the
+@samp{nodist_foo_SOURCES = bindir.h} line has any use at all. This
+line simply states that @file{bindir.h} is a source of @code{foo}, so
+for instance, it should be inspected while generating tags
+(@pxref{Tags}). In other words, it does not help our present problem,
+and the build would fail identically without it.
+
+@subsubheading Using @code{BUILT_SOURCES}
+
+A solution is to require @file{bindir.h} to be built before anything
+else. This is what @code{BUILT_SOURCES} is meant for (@pxref{Sources}).
+
+@example
+bin_PROGRAMS = foo
+foo_SOURCES = foo.c
+nodist_foo_SOURCES = bindir.h
+BUILT_SOURCES = bindir.h
+CLEANFILES = bindir.h
+bindir.h: Makefile
+ echo '#define bindir "$(bindir)"' >$@@
+@end example
+
+See how @file{bindir.h} gets built first:
+
+@example
+% make
+echo '#define bindir "/usr/local/bin"' >bindir.h
+make all-am
+make[1]: Entering directory `/home/adl/tmp'
+source='foo.c' object='foo.o' libtool=no \
+depfile='.deps/foo.Po' tmpdepfile='.deps/foo.TPo' \
+depmode=gcc /bin/sh ./depcomp \
+gcc -I. -I. -g -O2 -c `test -f 'foo.c' || echo './'`foo.c
+gcc -g -O2 -o foo foo.o
+make[1]: Leaving directory `/home/adl/tmp'
+@end example
+
+However, as said earlier, @code{BUILT_SOURCES} applies only to the
+@code{all}, @code{check}, and @code{install} targets. It still fails
+if you try to run @samp{make foo} explicitly:
+
+@example
+% make clean
+test -z "bindir.h" || rm -f bindir.h
+test -z "foo" || rm -f foo
+rm -f *.o
+% : > .deps/foo.Po # Suppress previously recorded dependencies
+% make foo
+source='foo.c' object='foo.o' libtool=no \
+depfile='.deps/foo.Po' tmpdepfile='.deps/foo.TPo' \
+depmode=gcc /bin/sh ./depcomp \
+gcc -I. -I. -g -O2 -c `test -f 'foo.c' || echo './'`foo.c
+foo.c:2: bindir.h: No such file or directory
+make: *** [foo.o] Error 1
+@end example
+
+@subsubheading Recording Dependencies manually
+
+Usually people are happy enough with @code{BUILT_SOURCES} because they
+never build targets such as @samp{make foo} before @samp{make all}, as
+in the previous example. However if this matters to you, you can
+avoid @code{BUILT_SOURCES} and record such dependencies explicitly in
+the @file{Makefile.am}.
+
+@example
+bin_PROGRAMS = foo
+foo_SOURCES = foo.c
+nodist_foo_SOURCES = bindir.h
+foo.$(OBJEXT): bindir.h
+CLEANFILES = bindir.h
+bindir.h: Makefile
+ echo '#define bindir "$(bindir)"' >$@@
+@end example
+
+You don't have to list @emph{all} the dependencies of @file{foo.o}
+explicitly, only those that might need to be built. If a dependency
+already exists, it will not hinder the first compilation and will be
+recorded by the normal dependency tracking code. (Note that after
+this first compilation the dependency tracking code will also have
+recorded the dependency between @file{foo.o} and
+@file{bindir.h}; so our explicit dependency is really useful to
+the first build only.)
+
+Adding explicit dependencies like this can be a bit dangerous if you are
+not careful enough. This is due to the way Automake tries not to
+overwrite your rules (it assumes you know better than it).
+@samp{foo.$(OBJEXT): bindir.h} supersedes any rule Automake may want to
+output to build @samp{foo.$(OBJEXT)}. It happens to work in this case
+because Automake doesn't have to output any @samp{foo.$(OBJEXT):}
+target: it relies on a suffix rule instead (i.e., @samp{.c.$(OBJEXT):}).
+Always check the generated @file{Makefile.in} if you do this.
+
+@subsubheading Build @file{bindir.h} from @file{configure}
+
+It's possible to define this preprocessor macro from @file{configure},
+either in @file{config.h} (@pxref{Defining Directories, , Defining
+Directories, autoconf, The Autoconf Manual}), or by processing a
+@file{bindir.h.in} file using @code{AC_CONFIG_FILES}
+(@pxref{Configuration Actions, ,Configuration Actions, autoconf, The
+Autoconf Manual}).
+
+At this point it should be clear that building @file{bindir.h} from
+@file{configure} works well for this example. @file{bindir.h} will exist
+before you build any target, hence will not cause any dependency issue.
+
+The Makefile can be shrunk as follows. We do not even have to mention
+@file{bindir.h}.
+
+@example
+bin_PROGRAMS = foo
+foo_SOURCES = foo.c
+@end example
+
+However, it's not always possible to build sources from
+@file{configure}, especially when these sources are generated by a tool
+that needs to be built first.
+
+@subsubheading Build @file{bindir.c}, not @file{bindir.h}.
+
+Another attractive idea is to define @code{bindir} as a variable or
+function exported from @file{bindir.o}, and build @file{bindir.c}
+instead of @file{bindir.h}.
+
+@example
+noinst_PROGRAMS = foo
+foo_SOURCES = foo.c bindir.h
+nodist_foo_SOURCES = bindir.c
+CLEANFILES = bindir.c
+bindir.c: Makefile
+ echo 'const char bindir[] = "$(bindir)";' >$@@
+@end example
+
+@file{bindir.h} contains just the variable's declaration and doesn't
+need to be built, so it won't cause any trouble. @file{bindir.o} is
+always dependent on @file{bindir.c}, so @file{bindir.c} will get built
+first.
+
+@subsubheading Which is best?
+
+There is no panacea, of course. Each solution has its merits and
+drawbacks.
+
+You cannot use @code{BUILT_SOURCES} if the ability to run @samp{make
+foo} on a clean tree is important to you.
+
+You won't add explicit dependencies if you are leery of overriding
+an Automake rule by mistake.
+
+Building files from @file{./configure} is not always possible, neither
+is converting @file{.h} files into @file{.c} files.
+
+
+@node Other GNU Tools
+@chapter Other GNU Tools
+
+Since Automake is primarily intended to generate @file{Makefile.in}s for
+use in GNU programs, it tries hard to interoperate with other GNU tools.
+
+@menu
+* Emacs Lisp:: Emacs Lisp
+* gettext:: Gettext
+* Libtool:: Libtool
+* Java:: Java bytecode compilation (deprecated)
+* Python:: Python
+@end menu
+
+
+@node Emacs Lisp
+@section Emacs Lisp
+
+@cindex @code{_LISP} primary, defined
+@cindex @code{LISP} primary, defined
+@cindex Primary variable, @code{LISP}
+
+@vindex _LISP
+@vindex lisp_LISP
+@vindex noinst_LISP
+
+Automake provides some support for Emacs Lisp. The @code{LISP} primary
+is used to hold a list of @file{.el} files. Possible prefixes for this
+primary are @code{lisp_} and @code{noinst_}. Note that if
+@code{lisp_LISP} is defined, then @file{configure.ac} must run
+@code{AM_PATH_LISPDIR} (@pxref{Macros}).
+
+@vindex dist_lisp_LISP
+@vindex dist_noinst_LISP
+Lisp sources are not distributed by default. You can prefix the
+@code{LISP} primary with @code{dist_}, as in @code{dist_lisp_LISP} or
+@code{dist_noinst_LISP}, to indicate that these files should be
+distributed.
+
+Automake will byte-compile all Emacs Lisp source files using the Emacs
+found by @code{AM_PATH_LISPDIR}, if any was found. When performing such
+byte-compilation, the flags specified in the (developer-reserved)
+@code{AM_ELCFLAGS} and (user-reserved) @code{ELCFLAGS} make variables
+will be passed to the Emacs invocation.
+
+Byte-compiled Emacs Lisp files are not portable among all versions of
+Emacs, so it makes sense to turn this off if you expect sites to have
+more than one version of Emacs installed. Furthermore, many packages
+don't actually benefit from byte-compilation. Still, we recommend
+that you byte-compile your Emacs Lisp sources. It is probably better
+for sites with strange setups to cope for themselves than to make the
+installation less nice for everybody else.
+
+There are two ways to avoid byte-compiling. Historically, we have
+recommended the following construct.
+
+@example
+lisp_LISP = file1.el file2.el
+ELCFILES =
+@end example
+
+@noindent
+@code{ELCFILES} is an internal Automake variable that normally lists
+all @file{.elc} files that must be byte-compiled. Automake defines
+@code{ELCFILES} automatically from @code{lisp_LISP}. Emptying this
+variable explicitly prevents byte-compilation.
+
+Since Automake 1.8, we now recommend using @code{lisp_DATA} instead:
+
+@c Keep in sync with primary-prefix-couples-documented-valid.sh
+@example
+lisp_DATA = file1.el file2.el
+@end example
+
+Note that these two constructs are not equivalent. @code{_LISP} will
+not install a file if Emacs is not installed, while @code{_DATA} will
+always install its files.
+
+@node gettext
+@section Gettext
+
+@cindex GNU Gettext support
+@cindex Gettext support
+@cindex Support for GNU Gettext
+
+If @code{AM_GNU_GETTEXT} is seen in @file{configure.ac}, then Automake
+turns on support for GNU gettext, a message catalog system for
+internationalization
+(@pxref{Top, , Introduction, gettext, GNU gettext utilities}).
+
+The @code{gettext} support in Automake requires the addition of one or
+two subdirectories to the package: @file{po} and possibly also @file{intl}.
+The latter is needed if @code{AM_GNU_GETTEXT} is not invoked with the
+@samp{external} argument, or if @code{AM_GNU_GETTEXT_INTL_SUBDIR} is used.
+Automake ensures that these directories exist and are mentioned in
+@code{SUBDIRS}.
+
+@node Libtool
+@section Libtool
+
+Automake provides support for GNU Libtool (@pxref{Top, , Introduction,
+libtool, The Libtool Manual}) with the @code{LTLIBRARIES} primary.
+@xref{A Shared Library}.
+
+
+@node Java
+@section Java bytecode compilation (deprecated)
+
+@cindex @code{_JAVA} primary, defined
+@cindex @code{JAVA} primary, defined
+@cindex Primary variable, @code{JAVA}
+@cindex Java to bytecode, compilation
+@cindex Compilation of Java to bytecode
+
+Automake provides some minimal support for Java bytecode compilation with
+the @code{JAVA} primary (in addition to the support for compiling Java to
+native machine code; @pxref{Java Support with gcj}). Note however that
+@emph{the interface and most features described here are deprecated}.
+Future Automake releases will strive to provide a better and cleaner
+interface, which however @emph{won't be backward-compatible}; the present
+interface will probably be removed altogether some time after the
+introduction of the new interface (if that ever materializes). In any
+case, the current @code{JAVA} primary features are frozen and will no
+longer be developed, not even to take bug fixes.
+
+Any @file{.java} files listed in a @code{_JAVA} variable will be
+compiled with @code{JAVAC} at build time. By default, @file{.java}
+files are not included in the distribution, you should use the
+@code{dist_} prefix to distribute them.
+
+Here is a typical setup for distributing @file{.java} files and
+installing the @file{.class} files resulting from their compilation.
+
+@c Keep in sync with primary-prefix-couples-documented-valid.sh
+@example
+javadir = $(datadir)/java
+dist_java_JAVA = a.java b.java @dots{}
+@end example
+
+@cindex @code{JAVA} restrictions
+@cindex Restrictions for @code{JAVA}
+
+Currently Automake enforces the restriction that only one @code{_JAVA}
+primary can be used in a given @file{Makefile.am}. The reason for this
+restriction is that, in general, it isn't possible to know which
+@file{.class} files were generated from which @file{.java} files, so
+it would be impossible to know which files to install where. For
+instance, a @file{.java} file can define multiple classes; the resulting
+@file{.class} file names cannot be predicted without parsing the
+@file{.java} file.
+
+There are a few variables that are used when compiling Java sources:
+
+@vtable @code
+@item JAVAC
+The name of the Java compiler. This defaults to @samp{javac}.
+
+@item JAVACFLAGS
+The flags to pass to the compiler. This is considered to be a user
+variable (@pxref{User Variables}).
+
+@item AM_JAVACFLAGS
+More flags to pass to the Java compiler. This, and not
+@code{JAVACFLAGS}, should be used when it is necessary to put Java
+compiler flags into @file{Makefile.am}.
+
+@item JAVAROOT
+The value of this variable is passed to the @option{-d} option to
+@code{javac}. It defaults to @samp{$(top_builddir)}.
+
+@item CLASSPATH_ENV
+This variable is a shell expression that is used to set the
+@env{CLASSPATH} environment variable on the @code{javac} command line.
+(In the future we will probably handle class path setting differently.)
+@end vtable
+
+
+@node Python
+@section Python
+
+@cindex @code{_PYTHON} primary, defined
+@cindex @code{PYTHON} primary, defined
+@cindex Primary variable, @code{PYTHON}
+@vindex _PYTHON
+
+Automake provides support for Python compilation with the
+@code{PYTHON} primary. A typical setup is to call
+@code{AM_PATH_PYTHON} in @file{configure.ac} and use a line like the
+following in @file{Makefile.am}:
+
+@example
+python_PYTHON = tree.py leave.py
+@end example
+
+Any files listed in a @code{_PYTHON} variable will be byte-compiled
+with @command{py-compile} at install time. @command{py-compile}
+actually creates both standard (@file{.pyc}) and optimized
+(@file{.pyo}) byte-compiled versions of the source files. Note that
+because byte-compilation occurs at install time, any files listed in
+@code{noinst_PYTHON} will not be compiled. Python source files are
+included in the distribution by default, prepend @code{nodist_} (as in
+@code{nodist_python_PYTHON}) to omit them.
+
+Automake ships with an Autoconf macro called @code{AM_PATH_PYTHON}
+that will determine some Python-related directory variables (see
+below). If you have called @code{AM_PATH_PYTHON} from
+@file{configure.ac}, then you may use the variables
+@c Keep in sync with primary-prefix-couples-documented-valid.sh
+@code{python_PYTHON} or @code{pkgpython_PYTHON} to list Python source
+files in your @file{Makefile.am}, depending on where you want your files
+installed (see the definitions of @code{pythondir} and
+@code{pkgpythondir} below).
+
+@defmac AM_PATH_PYTHON (@ovar{version}, @ovar{action-if-found},
+ @ovar{action-if-not-found})
+
+Search for a Python interpreter on the system. This macro takes three
+optional arguments. The first argument, if present, is the minimum
+version of Python required for this package: @code{AM_PATH_PYTHON}
+will skip any Python interpreter that is older than @var{version}.
+If an interpreter is found and satisfies @var{version}, then
+@var{action-if-found} is run. Otherwise, @var{action-if-not-found} is
+run.
+
+If @var{action-if-not-found} is not specified, as in the following
+example, the default is to abort @command{configure}.
+
+@example
+AM_PATH_PYTHON([2.2])
+@end example
+
+@noindent
+This is fine when Python is an absolute requirement for the package.
+If Python >= 2.5 was only @emph{optional} to the package,
+@code{AM_PATH_PYTHON} could be called as follows.
+
+@example
+AM_PATH_PYTHON([2.5],, [:])
+@end example
+
+If the @env{PYTHON} variable is set when @code{AM_PATH_PYTHON} is
+called, then that will be the only Python interpreter that is tried.
+
+@code{AM_PATH_PYTHON} creates the following output variables based on
+the Python installation found during configuration.
+@end defmac
+
+@vtable @code
+@item PYTHON
+The name of the Python executable, or @samp{:} if no suitable
+interpreter could be found.
+
+Assuming @var{action-if-not-found} is used (otherwise @file{./configure}
+will abort if Python is absent), the value of @code{PYTHON} can be used
+to setup a conditional in order to disable the relevant part of a build
+as follows.
+
+@example
+AM_PATH_PYTHON(,, [:])
+AM_CONDITIONAL([HAVE_PYTHON], [test "$PYTHON" != :])
+@end example
+
+@item PYTHON_VERSION
+The Python version number, in the form @var{major}.@var{minor}
+(e.g., @samp{2.5}). This is currently the value of
+@samp{sys.version[:3]}.
+
+@item PYTHON_PREFIX
+The string @samp{$@{prefix@}}. This term may be used in future work
+that needs the contents of Python's @samp{sys.prefix}, but general
+consensus is to always use the value from @command{configure}.
+
+@item PYTHON_EXEC_PREFIX
+The string @samp{$@{exec_prefix@}}. This term may be used in future work
+that needs the contents of Python's @samp{sys.exec_prefix}, but general
+consensus is to always use the value from @command{configure}.
+
+@item PYTHON_PLATFORM
+The canonical name used by Python to describe the operating system, as
+given by @samp{sys.platform}. This value is sometimes needed when
+building Python extensions.
+
+@item pythondir
+The directory name for the @file{site-packages} subdirectory of the
+standard Python install tree.
+
+@item pkgpythondir
+This is the directory under @code{pythondir} that is named after the
+package. That is, it is @samp{$(pythondir)/$(PACKAGE)}. It is provided
+as a convenience.
+
+@item pyexecdir
+This is the directory where Python extension modules (shared libraries)
+should be installed. An extension module written in C could be declared
+as follows to Automake:
+
+@c Keep in sync with primary-prefix-couples-documented-valid.sh
+@example
+pyexec_LTLIBRARIES = quaternion.la
+quaternion_la_SOURCES = quaternion.c support.c support.h
+quaternion_la_LDFLAGS = -avoid-version -module
+@end example
+
+@item pkgpyexecdir
+This is a convenience variable that is defined as
+@samp{$(pyexecdir)/$(PACKAGE)}.
+@end vtable
+
+All of these directory variables have values that start with either
+@samp{$@{prefix@}} or @samp{$@{exec_prefix@}} unexpanded. This works
+fine in @file{Makefiles}, but it makes these variables hard to use in
+@file{configure}. This is mandated by the GNU coding standards, so
+that the user can run @samp{make prefix=/foo install}. The Autoconf
+manual has a section with more details on this topic
+(@pxref{Installation Directory Variables, , Installation Directory
+Variables, autoconf, The Autoconf Manual}). See also @ref{Hard-Coded
+Install Paths}.
+
+
+@node Documentation
+@chapter Building documentation
+
+Currently Automake provides support for Texinfo and man pages.
+
+@menu
+* Texinfo:: Texinfo
+* Man Pages:: Man pages
+@end menu
+
+
+@node Texinfo
+@section Texinfo
+
+@cindex @code{_TEXINFOS} primary, defined
+@cindex @code{TEXINFOS} primary, defined
+@cindex Primary variable, @code{TEXINFOS}
+@cindex HTML output using Texinfo
+@cindex PDF output using Texinfo
+@cindex PS output using Texinfo
+@cindex DVI output using Texinfo
+@vindex _TEXINFOS
+@vindex info_TEXINFOS
+
+If the current directory contains Texinfo source, you must declare it
+with the @code{TEXINFOS} primary. Generally Texinfo files are converted
+into info, and thus the @code{info_TEXINFOS} variable is most commonly used
+here. Any Texinfo source file should have the @file{.texi} extension.
+Automake also accepts @file{.txi} or @file{.texinfo} extensions, but their
+use is discouraged now, and will elicit runtime warnings.
+
+Automake generates rules to build @file{.info}, @file{.dvi},
+@file{.ps}, @file{.pdf} and @file{.html} files from your Texinfo
+sources. Following the GNU Coding Standards, only the @file{.info}
+files are built by @samp{make all} and installed by @samp{make
+install} (unless you use @option{no-installinfo}, see below).
+Furthermore, @file{.info} files are automatically distributed so that
+Texinfo is not a prerequisite for installing your package.
+
+It is worth noting that, contrary to what happens with the other formats,
+the generated @file{.info} files are by default placed in @code{srcdir}
+rather than in the @code{builddir}. This can be changed with the
+@option{info-in-builddir} option.
+
+@trindex dvi
+@trindex html
+@trindex pdf
+@trindex ps
+@trindex install-dvi
+@trindex install-html
+@trindex install-pdf
+@trindex install-ps
+Other documentation formats can be built on request by @samp{make
+dvi}, @samp{make ps}, @samp{make pdf} and @samp{make html}, and they
+can be installed with @samp{make install-dvi}, @samp{make install-ps},
+@samp{make install-pdf} and @samp{make install-html} explicitly.
+@samp{make uninstall} will remove everything: the Texinfo
+documentation installed by default as well as all the above optional
+formats.
+
+All of these targets can be extended using @samp{-local} rules
+(@pxref{Extending}).
+
+@cindex Texinfo flag, @code{VERSION}
+@cindex Texinfo flag, @code{UPDATED}
+@cindex Texinfo flag, @code{EDITION}
+@cindex Texinfo flag, @code{UPDATED-MONTH}
+
+@cindex @code{VERSION} Texinfo flag
+@cindex @code{UPDATED} Texinfo flag
+@cindex @code{EDITION} Texinfo flag
+@cindex @code{UPDATED-MONTH} Texinfo flag
+
+@cindex @file{mdate-sh}
+
+If the @file{.texi} file @code{@@include}s @file{version.texi}, then
+that file will be automatically generated. The file @file{version.texi}
+defines four Texinfo flags you can reference using
+@code{@@value@{EDITION@}}, @code{@@value@{VERSION@}},
+@code{@@value@{UPDATED@}}, and @code{@@value@{UPDATED-MONTH@}}.
+
+@table @code
+@item EDITION
+@itemx VERSION
+Both of these flags hold the version number of your program. They are
+kept separate for clarity.
+
+@item UPDATED
+This holds the date the primary @file{.texi} file was last modified.
+
+@item UPDATED-MONTH
+This holds the name of the month in which the primary @file{.texi} file
+was last modified.
+@end table
+
+The @file{version.texi} support requires the @command{mdate-sh}
+script; this script is supplied with Automake and automatically
+included when @command{automake} is invoked with the
+@option{--add-missing} option.
+
+If you have multiple Texinfo files, and you want to use the
+@file{version.texi} feature, then you have to have a separate version
+file for each Texinfo file. Automake will treat any include in a
+Texinfo file that matches @file{vers*.texi} just as an automatically
+generated version file.
+
+Sometimes an info file actually depends on more than one @file{.texi}
+file. For instance, in GNU Hello, @file{hello.texi} includes the file
+@file{fdl.texi}. You can tell Automake about these dependencies using
+the @code{@var{texi}_TEXINFOS} variable. Here is how GNU Hello does it:
+@vindex TEXINFOS
+@vindex _TEXINFOS
+
+@example
+info_TEXINFOS = hello.texi
+hello_TEXINFOS = fdl.texi
+@end example
+
+@cindex @file{texinfo.tex}
+
+By default, Automake requires the file @file{texinfo.tex} to appear in
+the same directory as the @file{Makefile.am} file that lists the
+@file{.texi} files. If you used @code{AC_CONFIG_AUX_DIR} in
+@file{configure.ac} (@pxref{Input, , Finding `configure' Input,
+autoconf, The Autoconf Manual}), then @file{texinfo.tex} is looked for
+there. In both cases, @command{automake} then supplies @file{texinfo.tex} if
+@option{--add-missing} is given, and takes care of its distribution.
+However, if you set the @code{TEXINFO_TEX} variable (see below),
+it overrides the location of the file and turns off its installation
+into the source as well as its distribution.
+
+The option @option{no-texinfo.tex} can be used to eliminate the
+requirement for the file @file{texinfo.tex}. Use of the variable
+@code{TEXINFO_TEX} is preferable, however, because that allows the
+@code{dvi}, @code{ps}, and @code{pdf} targets to still work.
+
+@cindex Option, @code{no-installinfo}
+@cindex Target, @code{install-info}
+@cindex @code{install-info} target
+@cindex @code{no-installinfo} option
+
+@opindex no-installinfo
+@trindex install-info
+
+Automake generates an @code{install-info} rule; some people apparently
+use this. By default, info pages are installed by @samp{make
+install}, so running @code{make install-info} is pointless. This can
+be prevented via the @code{no-installinfo} option. In this case,
+@file{.info} files are not installed by default, and user must
+request this explicitly using @samp{make install-info}.
+
+@vindex AM_UPDATE_INFO_DIR
+By default, @code{make install-info} and @code{make uninstall-info}
+will try to run the @command{install-info} program (if available) to
+update (or create/remove) the @file{@code{$@{infodir@}}/dir} index.
+If this is undesired, it can be prevented by exporting the
+@code{AM_UPDATE_INFO_DIR} variable to "@code{no}".
+
+The following variables are used by the Texinfo build rules.
+
+@vtable @code
+@item MAKEINFO
+The name of the program invoked to build @file{.info} files. This
+variable is defined by Automake. If the @command{makeinfo} program is
+found on the system then it will be used by default; otherwise
+@command{missing} will be used instead.
+
+@item MAKEINFOHTML
+The command invoked to build @file{.html} files. Automake
+defines this to @samp{$(MAKEINFO) --html}.
+
+@item MAKEINFOFLAGS
+User flags passed to each invocation of @samp{$(MAKEINFO)} and
+@samp{$(MAKEINFOHTML)}. This user variable (@pxref{User Variables}) is
+not expected to be defined in any @file{Makefile}; it can be used by
+users to pass extra flags to suit their needs.
+
+@item AM_MAKEINFOFLAGS
+@itemx AM_MAKEINFOHTMLFLAGS
+Maintainer flags passed to each @command{makeinfo} invocation. Unlike
+@code{MAKEINFOFLAGS}, these variables are meant to be defined by
+maintainers in @file{Makefile.am}. @samp{$(AM_MAKEINFOFLAGS)} is
+passed to @code{makeinfo} when building @file{.info} files; and
+@samp{$(AM_MAKEINFOHTMLFLAGS)} is used when building @file{.html}
+files.
+
+@c Keep in sync with txinfo-many-output-formats.sh
+For instance, the following setting can be used to obtain one single
+@file{.html} file per manual, without node separators.
+@example
+AM_MAKEINFOHTMLFLAGS = --no-headers --no-split
+@end example
+
+@code{AM_MAKEINFOHTMLFLAGS} defaults to @samp{$(AM_MAKEINFOFLAGS)}.
+This means that defining @code{AM_MAKEINFOFLAGS} without defining
+@code{AM_MAKEINFOHTMLFLAGS} will impact builds of both @file{.info}
+and @file{.html} files.
+
+@item TEXI2DVI
+The name of the command that converts a @file{.texi} file into a
+@file{.dvi} file. This defaults to @samp{texi2dvi}, a script that ships
+with the Texinfo package.
+
+@item TEXI2PDF
+The name of the command that translates a @file{.texi} file into a
+@file{.pdf} file. This defaults to @samp{$(TEXI2DVI) --pdf --batch}.
+
+@item DVIPS
+The name of the command that builds a @file{.ps} file out of a
+@file{.dvi} file. This defaults to @samp{dvips}.
+
+@item TEXINFO_TEX
+
+If your package has Texinfo files in many directories, you can use the
+variable @code{TEXINFO_TEX} to tell Automake where to find the canonical
+@file{texinfo.tex} for your package. The value of this variable should
+be the relative path from the current @file{Makefile.am} to
+@file{texinfo.tex}:
+
+@example
+TEXINFO_TEX = ../doc/texinfo.tex
+@end example
+@end vtable
+
+
+@node Man Pages
+@section Man Pages
+
+@cindex @code{_MANS} primary, defined
+@cindex @code{MANS} primary, defined
+@cindex Primary variable, @code{MANS}
+
+@vindex _MANS
+@vindex man_MANS
+A package can also include man pages (but see the GNU standards on this
+matter, @ref{Man Pages, , , standards, The GNU Coding Standards}.) Man
+pages are declared using the @code{MANS} primary. Generally the
+@code{man_MANS} variable is used. Man pages are automatically installed in
+the correct subdirectory of @code{mandir}, based on the file extension.
+
+File extensions such as @file{.1c} are handled by looking for the valid
+part of the extension and using that to determine the correct
+subdirectory of @code{mandir}. Valid section names are the digits
+@samp{0} through @samp{9}, and the letters @samp{l} and @samp{n}.
+
+Sometimes developers prefer to name a man page something like
+@file{foo.man} in the source, and then rename it to have the correct
+suffix, for example @file{foo.1}, when installing the file. Automake
+also supports this mode. For a valid section named @var{section},
+there is a corresponding directory named @samp{man@var{section}dir},
+and a corresponding @code{_MANS} variable. Files listed in such a
+variable are installed in the indicated section. If the file already
+has a valid suffix, then it is installed as-is; otherwise the file
+suffix is changed to match the section.
+
+For instance, consider this example:
+@example
+man1_MANS = rename.man thesame.1 alsothesame.1c
+@end example
+
+@noindent
+In this case, @file{rename.man} will be renamed to @file{rename.1} when
+installed, but the other files will keep their names.
+
+@cindex Target, @code{install-man}
+@cindex Option, @option{no-installman}
+@cindex @code{install-man} target
+@cindex @option{no-installman} option
+@opindex no-installman
+@trindex install-man
+
+By default, man pages are installed by @samp{make install}. However,
+since the GNU project does not require man pages, many maintainers do
+not expend effort to keep the man pages up to date. In these cases, the
+@option{no-installman} option will prevent the man pages from being
+installed by default. The user can still explicitly install them via
+@samp{make install-man}.
+
+For fast installation, with many files it is preferable to use
+@samp{man@var{section}_MANS} over @samp{man_MANS} as well as files that
+do not need to be renamed.
+
+Man pages are not currently considered to be source, because it is not
+uncommon for man pages to be automatically generated. Therefore they
+are not automatically included in the distribution. However, this can
+be changed by use of the @code{dist_} prefix. For instance here is
+how to distribute and install the two man pages of GNU @command{cpio}
+(which includes both Texinfo documentation and man pages):
+
+@example
+dist_man_MANS = cpio.1 mt.1
+@end example
+
+The @code{nobase_} prefix is meaningless for man pages and is
+disallowed.
+
+@vindex notrans_
+@cindex @code{notrans_} prefix
+@cindex Man page renaming, avoiding
+@cindex Avoiding man page renaming
+
+Executables and manpages may be renamed upon installation
+(@pxref{Renaming}). For manpages this can be avoided by use of the
+@code{notrans_} prefix. For instance, suppose an executable @samp{foo}
+allowing to access a library function @samp{foo} from the command line.
+The way to avoid renaming of the @file{foo.3} manpage is:
+
+@example
+man_MANS = foo.1
+notrans_man_MANS = foo.3
+@end example
+
+@cindex @code{notrans_} and @code{dist_} or @code{nodist_}
+@cindex @code{dist_} and @code{notrans_}
+@cindex @code{nodist_} and @code{notrans_}
+
+@samp{notrans_} must be specified first when used in conjunction with
+either @samp{dist_} or @samp{nodist_} (@pxref{Fine-grained Distribution
+Control}). For instance:
+
+@example
+notrans_dist_man3_MANS = bar.3
+@end example
+
+@node Install
+@chapter What Gets Installed
+
+@cindex Installation support
+@cindex @samp{make install} support
+
+Naturally, Automake handles the details of actually installing your
+program once it has been built. All files named by the various
+primaries are automatically installed in the appropriate places when the
+user runs @samp{make install}.
+
+@menu
+* Basics of Installation:: What gets installed where
+* The Two Parts of Install:: Installing data and programs separately
+* Extending Installation:: Adding your own rules for installation
+* Staged Installs:: Installation in a temporary location
+* Install Rules for the User:: Useful additional rules
+@end menu
+
+@node Basics of Installation
+@section Basics of Installation
+
+A file named in a primary is installed by copying the built file into
+the appropriate directory. The base name of the file is used when
+installing.
+
+@example
+bin_PROGRAMS = hello subdir/goodbye
+@end example
+
+In this example, both @samp{hello} and @samp{goodbye} will be installed
+in @samp{$(bindir)}.
+
+Sometimes it is useful to avoid the basename step at install time. For
+instance, you might have a number of header files in subdirectories of
+the source tree that are laid out precisely how you want to install
+them. In this situation you can use the @code{nobase_} prefix to
+suppress the base name step. For example:
+
+@example
+nobase_include_HEADERS = stdio.h sys/types.h
+@end example
+
+@noindent
+will install @file{stdio.h} in @samp{$(includedir)} and @file{types.h}
+in @samp{$(includedir)/sys}.
+
+For most file types, Automake will install multiple files at once, while
+avoiding command line length issues (@pxref{Length Limitations}). Since
+some @command{install} programs will not install the same file twice in
+one invocation, you may need to ensure that file lists are unique within
+one variable such as @samp{nobase_include_HEADERS} above.
+
+You should not rely on the order in which files listed in one variable
+are installed. Likewise, to cater for parallel make, you should not
+rely on any particular file installation order even among different
+file types (library dependencies are an exception here).
+
+
+@node The Two Parts of Install
+@section The Two Parts of Install
+
+Automake generates separate @code{install-data} and @code{install-exec}
+rules, in case the installer is installing on multiple machines that
+share directory structure---these targets allow the machine-independent
+parts to be installed only once. @code{install-exec} installs
+platform-dependent files, and @code{install-data} installs
+platform-independent files. The @code{install} target depends on both
+of these targets. While Automake tries to automatically segregate
+objects into the correct category, the @file{Makefile.am} author is, in
+the end, responsible for making sure this is done correctly.
+@trindex install-data
+@trindex install-exec
+@trindex install
+@cindex Install, two parts of
+
+Variables using the standard directory prefixes @samp{data},
+@samp{info}, @samp{man}, @samp{include}, @samp{oldinclude},
+@samp{pkgdata}, or @samp{pkginclude} are installed by
+@code{install-data}.
+
+Variables using the standard directory prefixes @samp{bin},
+@samp{sbin}, @samp{libexec}, @samp{sysconf}, @samp{localstate},
+@samp{lib}, or @samp{pkglib} are installed by @code{install-exec}.
+
+For instance, @code{data_DATA} files are installed by @code{install-data},
+while @code{bin_PROGRAMS} files are installed by @code{install-exec}.
+
+Any variable using a user-defined directory prefix with
+@samp{exec} in the name (e.g.,
+@c Keep in sync with primary-prefix-couples-documented-valid.sh
+@code{myexecbin_PROGRAMS}) is installed by @code{install-exec}. All
+other user-defined prefixes are installed by @code{install-data}.
+
+@node Extending Installation
+@section Extending Installation
+
+It is possible to extend this mechanism by defining an
+@code{install-exec-local} or @code{install-data-local} rule. If these
+rules exist, they will be run at @samp{make install} time. These
+rules can do almost anything; care is required.
+@trindex install-exec-local
+@trindex install-data-local
+
+Automake also supports two install hooks, @code{install-exec-hook} and
+@code{install-data-hook}. These hooks are run after all other install
+rules of the appropriate type, exec or data, have completed. So, for
+instance, it is possible to perform post-installation modifications
+using an install hook. @xref{Extending}, for some examples.
+@cindex Install hook
+
+@node Staged Installs
+@section Staged Installs
+
+@vindex DESTDIR
+Automake generates support for the @code{DESTDIR} variable in all
+install rules. @code{DESTDIR} is used during the @samp{make install}
+step to relocate install objects into a staging area. Each object and
+path is prefixed with the value of @code{DESTDIR} before being copied
+into the install area. Here is an example of typical DESTDIR usage:
+
+@example
+mkdir /tmp/staging &&
+make DESTDIR=/tmp/staging install
+@end example
+
+The @command{mkdir} command avoids a security problem if the attacker
+creates a symbolic link from @file{/tmp/staging} to a victim area;
+then @command{make} places install objects in a directory tree built under
+@file{/tmp/staging}. If @file{/gnu/bin/foo} and
+@file{/gnu/share/aclocal/foo.m4} are to be installed, the above command
+would install @file{/tmp/staging/gnu/bin/foo} and
+@file{/tmp/staging/gnu/share/aclocal/foo.m4}.
+
+This feature is commonly used to build install images and packages
+(@pxref{DESTDIR}).
+
+Support for @code{DESTDIR} is implemented by coding it directly into
+the install rules. If your @file{Makefile.am} uses a local install
+rule (e.g., @code{install-exec-local}) or an install hook, then you
+must write that code to respect @code{DESTDIR}.
+
+@xref{Makefile Conventions, , , standards, The GNU Coding Standards},
+for another usage example.
+
+@node Install Rules for the User
+@section Install Rules for the User
+
+Automake also generates rules for targets @code{uninstall},
+@code{installdirs}, and @code{install-strip}.
+@trindex uninstall
+@trindex installdirs
+@trindex install-strip
+
+Automake supports @code{uninstall-local} and @code{uninstall-hook}.
+There is no notion of separate uninstalls for ``exec'' and ``data'', as
+these features would not provide additional functionality.
+
+Note that @code{uninstall} is not meant as a replacement for a real
+packaging tool.
+
+
+@node Clean
+@chapter What Gets Cleaned
+
+@cindex @samp{make clean} support
+
+The GNU Makefile Standards specify a number of different clean rules.
+@xref{Standard Targets, , Standard Targets for Users, standards,
+The GNU Coding Standards}.
+
+Generally the files that can be cleaned are determined automatically by
+Automake. Of course, Automake also recognizes some variables that can
+be defined to specify additional files to clean. These variables are
+@code{MOSTLYCLEANFILES}, @code{CLEANFILES}, @code{DISTCLEANFILES}, and
+@code{MAINTAINERCLEANFILES}.
+@vindex MOSTLYCLEANFILES
+@vindex CLEANFILES
+@vindex DISTCLEANFILES
+@vindex MAINTAINERCLEANFILES
+
+@trindex mostlyclean-local
+@trindex clean-local
+@trindex distclean-local
+@trindex maintainer-clean-local
+When cleaning involves more than deleting some hard-coded list of
+files, it is also possible to supplement the cleaning rules with your
+own commands. Simply define a rule for any of the
+@code{mostlyclean-local}, @code{clean-local}, @code{distclean-local},
+or @code{maintainer-clean-local} targets (@pxref{Extending}). A common
+case is deleting a directory, for instance, a directory created by the
+test suite:
+
+@example
+clean-local:
+ -rm -rf testSubDir
+@end example
+
+Since @command{make} allows only one set of rules for a given target,
+a more extensible way of writing this is to use a separate target
+listed as a dependency:
+
+@example
+clean-local: clean-local-check
+.PHONY: clean-local-check
+clean-local-check:
+ -rm -rf testSubDir
+@end example
+
+As the GNU Standards aren't always explicit as to which files should
+be removed by which rule, we've adopted a heuristic that we believe
+was first formulated by Fran@,{c}ois Pinard:
+
+@itemize @bullet
+@item
+If @command{make} built it, and it is commonly something that one would
+want to rebuild (for instance, a @file{.o} file), then
+@code{mostlyclean} should delete it.
+
+@item
+Otherwise, if @command{make} built it, then @code{clean} should delete it.
+
+@item
+If @command{configure} built it, then @code{distclean} should delete it.
+
+@item
+If the maintainer built it (for instance, a @file{.info} file), then
+@code{maintainer-clean} should delete it. However
+@code{maintainer-clean} should not delete anything that needs to exist
+in order to run @samp{./configure && make}.
+@end itemize
+
+We recommend that you follow this same set of heuristics in your
+@file{Makefile.am}.
+
+
+@node Dist
+@chapter What Goes in a Distribution
+
+@menu
+* Basics of Distribution:: Files distributed by default
+* Fine-grained Distribution Control:: @code{dist_} and @code{nodist_} prefixes
+* The dist Hook:: A target for last-minute distribution changes
+* Checking the Distribution:: @samp{make distcheck} explained
+* The Types of Distributions:: A variety of formats and compression methods
+@end menu
+
+@node Basics of Distribution
+@section Basics of Distribution
+
+@cindex @samp{make dist}
+
+@vindex PACKAGE
+@vindex VERSION
+@trindex dist
+The @code{dist} rule in the generated @file{Makefile.in} can be used
+to generate a gzipped @code{tar} file and other flavors of archive for
+distribution. The file is named based on the @code{PACKAGE} and
+@code{VERSION} variables automatically defined by either the
+@code{AC_INIT} invocation or by a @emph{deprecated} two-arguments
+invocation of the @code{AM_INIT_AUTOMAKE} macro (see @ref{Public Macros}
+for how these variables get their values, from either defaults or explicit
+values -- it's slightly trickier than one would expect).
+More precisely the gzipped @code{tar} file is named
+@samp{$@{PACKAGE@}-$@{VERSION@}.tar.gz}.
+@vindex GZIP_ENV
+You can use the @command{make} variable @code{GZIP_ENV} to control how gzip
+is run. The default setting is @option{--best}.
+
+@cindex @code{m4_include}, distribution
+@cindex @code{include}, distribution
+@acindex m4_include
+@cmindex include
+For the most part, the files to distribute are automatically found by
+Automake: all source files are automatically included in a distribution,
+as are all @file{Makefile.am} and @file{Makefile.in} files. Automake also
+has a built-in list of commonly used files that are automatically
+included if they are found in the current directory (either physically,
+or as the target of a @file{Makefile.am} rule); this list is printed by
+@samp{automake --help}. Note that some files in this list are actually
+distributed only if other certain conditions hold (for example,
+@c Keep in sync with autodist-config-headers.sh
+the @file{config.h.top} and @file{config.h.bot} files are automatically
+distributed only if, e.g., @samp{AC_CONFIG_HEADERS([config.h])} is used
+in @file{configure.ac}). Also, files that are read by @command{configure}
+(i.e.@: the source files corresponding to the files specified in various
+Autoconf macros such as @code{AC_CONFIG_FILES} and siblings) are
+automatically distributed. Files included in a @file{Makefile.am} (using
+@code{include}) or in @file{configure.ac} (using @code{m4_include}), and
+helper scripts installed with @samp{automake --add-missing} are also
+distributed.
+
+@vindex EXTRA_DIST
+Still, sometimes there are files that must be distributed, but which
+are not covered in the automatic rules. These files should be listed in
+the @code{EXTRA_DIST} variable. You can mention files from
+subdirectories in @code{EXTRA_DIST}.
+
+You can also mention a directory in @code{EXTRA_DIST}; in this case the
+entire directory will be recursively copied into the distribution.
+Please note that this will also copy @emph{everything} in the directory,
+including, e.g., Subversion's @file{.svn} private directories or CVS/RCS
+version control files; thus we recommend against using this feature
+as-is. However, you can use the @code{dist-hook} feature to
+ameliorate the problem; @pxref{The dist Hook}.
+
+@vindex SUBDIRS
+@vindex DIST_SUBDIRS
+If you define @code{SUBDIRS}, Automake will recursively include the
+subdirectories in the distribution. If @code{SUBDIRS} is defined
+conditionally (@pxref{Conditionals}), Automake will normally include
+all directories that could possibly appear in @code{SUBDIRS} in the
+distribution. If you need to specify the set of directories
+conditionally, you can set the variable @code{DIST_SUBDIRS} to the
+exact list of subdirectories to include in the distribution
+(@pxref{Conditional Subdirectories}).
+
+
+@node Fine-grained Distribution Control
+@section Fine-grained Distribution Control
+
+@vindex dist_
+@vindex nodist_
+Sometimes you need tighter control over what does @emph{not} go into the
+distribution; for instance, you might have source files that are
+generated and that you do not want to distribute. In this case
+Automake gives fine-grained control using the @code{dist} and
+@code{nodist} prefixes. Any primary or @code{_SOURCES} variable can be
+prefixed with @code{dist_} to add the listed files to the distribution.
+Similarly, @code{nodist_} can be used to omit the files from the
+distribution.
+
+As an example, here is how you would cause some data to be distributed
+while leaving some source code out of the distribution:
+
+@example
+dist_data_DATA = distribute-this
+bin_PROGRAMS = foo
+nodist_foo_SOURCES = do-not-distribute.c
+@end example
+
+@node The dist Hook
+@section The dist Hook
+
+@trindex dist-hook
+
+Occasionally it is useful to be able to change the distribution before
+it is packaged up. If the @code{dist-hook} rule exists, it is run
+after the distribution directory is filled, but before the actual
+distribution archives are created. One way to use this is for
+removing unnecessary files that get recursively included by specifying
+a directory in @code{EXTRA_DIST}:
+
+@example
+EXTRA_DIST = doc
+dist-hook:
+ rm -rf `find $(distdir)/doc -type d -name .svn`
+@end example
+
+@c The caveats described here should be documented in 'disthook.sh'.
+@noindent
+Note that the @code{dist-hook} recipe shouldn't assume that the regular
+files in the distribution directory are writable; this might not be the
+case if one is packaging from a read-only source tree, or when a
+@code{make distcheck} is being done. For similar reasons, the recipe
+shouldn't assume that the subdirectories put into the distribution
+directory as effect of having them listed in @code{EXTRA_DIST} are
+writable. So, if the @code{dist-hook} recipe wants to modify the
+content of an existing file (or @code{EXTRA_DIST} subdirectory) in the
+distribution directory, it should explicitly to make it writable first:
+
+@example
+EXTRA_DIST = README doc
+dist-hook:
+ chmod u+w $(distdir)/README $(distdir)/doc
+ echo "Distribution date: `date`" >> README
+ rm -f $(distdir)/doc/HACKING
+@end example
+
+@vindex distdir
+@vindex top_distdir
+Two variables that come handy when writing @code{dist-hook} rules are
+@samp{$(distdir)} and @samp{$(top_distdir)}.
+
+@samp{$(distdir)} points to the directory where the @code{dist} rule
+will copy files from the current directory before creating the
+tarball. If you are at the top-level directory, then @samp{distdir =
+$(PACKAGE)-$(VERSION)}. When used from subdirectory named
+@file{foo/}, then @samp{distdir = ../$(PACKAGE)-$(VERSION)/foo}.
+@samp{$(distdir)} can be a relative or absolute path, do not assume
+any form.
+
+@samp{$(top_distdir)} always points to the root directory of the
+distributed tree. At the top-level it's equal to @samp{$(distdir)}.
+In the @file{foo/} subdirectory
+@samp{top_distdir = ../$(PACKAGE)-$(VERSION)}.
+@samp{$(top_distdir)} too can be a relative or absolute path.
+
+Note that when packages are nested using @code{AC_CONFIG_SUBDIRS}
+(@pxref{Subpackages}), then @samp{$(distdir)} and
+@samp{$(top_distdir)} are relative to the package where @samp{make
+dist} was run, not to any sub-packages involved.
+
+@node Checking the Distribution
+@section Checking the Distribution
+
+@cindex @samp{make distcheck}
+@trindex distcheck
+Automake also generates a @code{distcheck} rule that can be of help
+to ensure that a given distribution will actually work. Simplifying
+a bit, we can say this rule first makes a distribution, and then,
+@emph{operating from it}, takes the following steps:
+@itemize
+@item
+tries to do a @code{VPATH} build (@pxref{VPATH Builds}), with the
+@code{srcdir} and all its content made @emph{read-only};
+@item
+runs the test suite (with @command{make check}) on this fresh build;
+@item
+installs the package in a temporary directory (with @command{make
+install}), and tries runs the test suite on the resulting installation
+(with @command{make installcheck});
+@item
+checks that the package can be correctly uninstalled (by @command{make
+uninstall}) and cleaned (by @code{make distclean});
+@item
+finally, makes another tarball to ensure the distribution is
+self-contained.
+@end itemize
+
+All of these actions are performed in a temporary directory. Please
+note that the exact location and the exact structure of such a directory
+(where the read-only sources are placed, how the temporary build and
+install directories are named and how deeply they are nested, etc.) is
+to be considered an implementation detail, which can change at any time;
+so do not reply on it.
+
+@vindex AM_DISTCHECK_CONFIGURE_FLAGS
+@vindex DISTCHECK_CONFIGURE_FLAGS
+@subheading DISTCHECK_CONFIGURE_FLAGS
+Building the package involves running @samp{./configure}. If you need
+to supply additional flags to @command{configure}, define them in the
+@code{AM_DISTCHECK_CONFIGURE_FLAGS} variable in your top-level
+@file{Makefile.am}. The user can still extend or override the flags
+provided there by defining the @code{DISTCHECK_CONFIGURE_FLAGS} variable,
+on the command line when invoking @command{make}.
+@c See automake bug#14991 for more details about how the following holds.
+It's worth noting that @command{make distcheck} needs complete control
+over the @command{configure} options @option{--srcdir} and
+@option{--prefix}, so those options cannot be overridden by
+@code{AM_DISTCHECK_CONFIGURE_FLAGS} nor by
+@code{DISTCHECK_CONFIGURE_FLAGS}.
+
+Also note that developers are encouraged to strive to make their code
+buildable without requiring any special configure option; thus, in
+general, you shouldn't define @code{AM_DISTCHECK_CONFIGURE_FLAGS}.
+However, there might be few scenarios in which the use of this variable
+is justified.
+GNU @command{m4} offers an example. GNU @command{m4} configures by
+default with its experimental and seldom used "changeword" feature
+disabled; so in its case it is useful to have @command{make distcheck}
+run configure with the @option{--with-changeword} option, to ensure that
+the code for changeword support still compiles correctly.
+GNU @command{m4} also employs the @code{AM_DISTCHECK_CONFIGURE_FLAGS}
+variable to stress-test the use of @option{--program-prefix=g}, since at
+one point the @command{m4} build system had a bug where @command{make
+installcheck} was wrongly assuming it could blindly test "@command{m4}",
+rather than the just-installed "@command{gm4}".
+
+@trindex distcheck-hook
+@subheading distcheck-hook
+If the @code{distcheck-hook} rule is defined in your top-level
+@file{Makefile.am}, then it will be invoked by @code{distcheck} after
+the new distribution has been unpacked, but before the unpacked copy
+is configured and built. Your @code{distcheck-hook} can do almost
+anything, though as always caution is advised. Generally this hook is
+used to check for potential distribution errors not caught by the
+standard mechanism. Note that @code{distcheck-hook} as well as
+@code{AM_DISTCHECK_CONFIGURE_FLAGS} and @code{DISTCHECK_CONFIGURE_FLAGS}
+are not honored in a subpackage @file{Makefile.am}, but the flags from
+@code{AM_DISTCHECK_CONFIGURE_FLAGS} and @code{DISTCHECK_CONFIGURE_FLAGS}
+are passed down to the @command{configure} script of the subpackage.
+
+@cindex @samp{make distcleancheck}
+@trindex distcleancheck
+@vindex DISTCLEANFILES
+@vindex distcleancheck_listfiles
+
+@subheading distcleancheck
+Speaking of potential distribution errors, @code{distcheck} also
+ensures that the @code{distclean} rule actually removes all built
+files. This is done by running @samp{make distcleancheck} at the end of
+the @code{VPATH} build. By default, @code{distcleancheck} will run
+@code{distclean} and then make sure the build tree has been emptied by
+running @samp{$(distcleancheck_listfiles)}. Usually this check will
+find generated files that you forgot to add to the @code{DISTCLEANFILES}
+variable (@pxref{Clean}).
+
+The @code{distcleancheck} behavior should be OK for most packages,
+otherwise you have the possibility to override the definition of
+either the @code{distcleancheck} rule, or the
+@samp{$(distcleancheck_listfiles)} variable. For instance, to disable
+@code{distcleancheck} completely, add the following rule to your
+top-level @file{Makefile.am}:
+
+@example
+distcleancheck:
+ @@:
+@end example
+
+If you want @code{distcleancheck} to ignore built files that have not
+been cleaned because they are also part of the distribution, add the
+following definition instead:
+
+@c Keep in sync with distcleancheck.sh
+@example
+distcleancheck_listfiles = \
+ find . -type f -exec sh -c 'test -f $(srcdir)/$$1 || echo $$1' \
+ sh '@{@}' ';'
+@end example
+
+The above definition is not the default because it's usually an error if
+your Makefiles cause some distributed files to be rebuilt when the user
+build the package. (Think about the user missing the tool required to
+build the file; or if the required tool is built by your package,
+consider the cross-compilation case where it can't be run.) There is
+an entry in the FAQ about this (@pxref{Errors with distclean}), make
+sure you read it before playing with @code{distcleancheck_listfiles}.
+
+@cindex @samp{make distuninstallcheck}
+@trindex distuninstallcheck
+@vindex distuninstallcheck_listfiles
+
+@subheading distuninstallcheck
+@code{distcheck} also checks that the @code{uninstall} rule works
+properly, both for ordinary and @code{DESTDIR} builds. It does this
+by invoking @samp{make uninstall}, and then it checks the install tree
+to see if any files are left over. This check will make sure that you
+correctly coded your @code{uninstall}-related rules.
+
+By default, the checking is done by the @code{distuninstallcheck} rule,
+and the list of files in the install tree is generated by
+@samp{$(distuninstallcheck_listfiles)} (this is a variable whose value is
+a shell command to run that prints the list of files to stdout).
+
+Either of these can be overridden to modify the behavior of
+@code{distcheck}. For instance, to disable this check completely, you
+would write:
+
+@example
+distuninstallcheck:
+ @@:
+@end example
+
+@node The Types of Distributions
+@section The Types of Distributions
+
+Automake generates rules to provide archives of the project for
+distributions in various formats. Their targets are:
+
+@table @asis
+@item @code{dist-gzip}
+Generate a @samp{gzip} tar archive of the distribution. This is the
+only format enabled by default.
+@trindex dist-gzip
+
+@vindex BZIP2
+@item @code{dist-bzip2}
+Generate a @samp{bzip2} tar archive of the distribution. bzip2 archives
+are frequently smaller than gzipped archives.
+By default, this rule makes @samp{bzip2} use a compression option of @option{-9}.
+To make it use a different one, set the @env{BZIP2} environment variable.
+For example, @samp{make dist-bzip2 BZIP2=-7}.
+@trindex dist-bzip2
+
+@item @code{dist-lzip}
+Generate an @samp{lzip} tar archive of the distribution. @command{lzip}
+archives are frequently smaller than @command{bzip2}-compressed archives.
+@trindex dist-lzip
+
+@vindex XZ_OPT
+@item @code{dist-xz}
+Generate an @samp{xz} tar archive of the distribution. @command{xz}
+archives are frequently smaller than @command{bzip2}-compressed archives.
+By default, this rule makes @samp{xz} use a compression option of
+@option{-e}. To make it use a different one, set the @env{XZ_OPT}
+environment variable. For example, run this command to use the
+default compression ratio, but with a progress indicator:
+@samp{make dist-xz XZ_OPT=-ve}.
+@trindex dist-xz
+
+@item @code{dist-zip}
+Generate a @samp{zip} archive of the distribution.
+@trindex dist-zip
+
+@item @code{dist-tarZ}
+Generate a tar archive of the distribution, compressed with the
+historical (and obsolescent) program @command{compress}. This
+option is deprecated, and it and the corresponding functionality
+will be removed altogether in Automake 2.0.
+@trindex dist-tarZ
+
+@item @code{dist-shar}
+Generate a @samp{shar} archive of the distribution. This format
+archive is obsolescent, and use of this option is deprecated.
+It and the corresponding functionality will be removed altogether
+in Automake 2.0.
+@trindex dist-shar
+
+@end table
+
+The rule @code{dist} (and its historical synonym @code{dist-all})
+will create archives in all the enabled formats (@pxref{List of
+Automake options} for how to change this list). By default, only
+the @code{dist-gzip} target is hooked to @code{dist}.
+
+
+@node Tests
+@chapter Support for test suites
+
+@cindex Test suites
+@cindex @code{make check}
+@trindex check
+
+Automake can generate code to handle two kinds of test suites. One is
+based on integration with the @command{dejagnu} framework. The other
+(and most used) form is based on the use of generic test scripts, and
+its activation is triggered by the definition of the special @code{TESTS}
+variable. This second form allows for various degrees of sophistication
+and customization; in particular, it allows for concurrent execution
+of test scripts, use of established test protocols such as TAP, and
+definition of custom test drivers and test runners.
+
+@noindent
+In either case, the testsuite is invoked via @samp{make check}.
+
+@menu
+* Generalities about Testing:: Concepts and terminology about testing
+* Simple Tests:: Listing test scripts in @code{TESTS}
+* Custom Test Drivers:: Writing and using custom test drivers
+* Using the TAP test protocol:: Integrating test scripts that use the TAP protocol
+* DejaGnu Tests:: Interfacing with the @command{dejagnu} testing framework
+* Install Tests:: Running tests on installed packages
+@end menu
+
+@node Generalities about Testing
+@section Generalities about Testing
+
+The purpose of testing is to determine whether a program or system behaves
+as expected (e.g., known inputs produce the expected outputs, error
+conditions are correctly handled or reported, and older bugs do not
+resurface).
+
+@cindex test case
+The minimal unit of testing is usually called @emph{test case}, or simply
+@emph{test}. How a test case is defined or delimited, and even what
+exactly @emph{constitutes} a test case, depends heavily on the testing
+paradigm and/or framework in use, so we won't attempt any more precise
+definition. The set of the test cases for a given program or system
+constitutes its @emph{testsuite}.
+
+@cindex test harness
+@cindex testsuite harness
+A @emph{test harness} (also @emph{testsuite harness}) is a program or
+software component that executes all (or part of) the defined test cases,
+analyzes their outcomes, and report or register these outcomes
+appropriately. Again, the details of how this is accomplished (and how
+the developer and user can influence it or interface with it) varies
+wildly, and we'll attempt no precise definition.
+
+@cindex test pass
+@cindex test failure
+A test is said to @emph{pass} when it can determine that the condition or
+behaviour it means to verify holds, and is said to @emph{fail} when it can
+determine that such condition of behaviour does @emph{not} hold.
+
+@cindex test skip
+Sometimes, tests can rely on non-portable tools or prerequisites, or
+simply make no sense on a given system (for example, a test checking a
+Windows-specific feature makes no sense on a GNU/Linux system). In this
+case, accordingly to the definition above, the tests can neither be
+considered passed nor failed; instead, they are @emph{skipped} -- i.e.,
+they are not run, or their result is anyway ignored for what concerns
+the count of failures an successes. Skips are usually explicitly
+reported though, so that the user will be aware that not all of the
+testsuite has really run.
+
+@cindex xfail
+@cindex expected failure
+@cindex expected test failure
+@cindex xpass
+@cindex unexpected pass
+@cindex unexpected test pass
+It's not uncommon, especially during early development stages, that some
+tests fail for known reasons, and that the developer doesn't want to
+tackle these failures immediately (this is especially true when the
+failing tests deal with corner cases). In this situation, the better
+policy is to declare that each of those failures is an @emph{expected
+failure} (or @emph{xfail}). In case a test that is expected to fail ends
+up passing instead, many testing environments will flag the result as a
+special kind of failure called @emph{unexpected pass} (or @emph{xpass}).
+
+@cindex hard error
+@cindex Distinction between errors and failures in testsuites
+Many testing environments and frameworks distinguish between test failures
+and hard errors. As we've seen, a test failure happens when some invariant
+or expected behaviour of the software under test is not met. An @emph{hard
+error} happens when e.g., the set-up of a test case scenario fails, or when
+some other unexpected or highly undesirable condition is encountered (for
+example, the program under test experiences a segmentation fault).
+
+@node Simple Tests
+@section Simple Tests
+
+@menu
+* Scripts-based Testsuites:: Automake-specific concepts and terminology
+* Serial Test Harness:: Older (and discouraged) serial test harness
+* Parallel Test Harness:: Generic concurrent test harness
+@end menu
+
+@node Scripts-based Testsuites
+@subsection Scripts-based Testsuites
+
+If the special variable @code{TESTS} is defined, its value is taken to be
+a list of programs or scripts to run in order to do the testing. Under
+the appropriate circumstances, it's possible for @code{TESTS} to list
+also data files to be passed to one or more test scripts defined by
+different means (the so-called ``log compilers'', @pxref{Parallel Test
+Harness}).
+
+Test scripts can be executed serially or concurrently. Automake supports
+both these kinds of test execution, with the parallel test harness being
+the default. The concurrent test harness relies on the concurrence
+capabilities (if any) offered by the underlying @command{make}
+implementation, and can thus only be as good as those are.
+
+By default, only the exit statuses of the test scripts are considered when
+determining the testsuite outcome. But Automake allows also the use of
+more complex test protocols, either standard (@pxref{Using the TAP test
+protocol}) or custom (@pxref{Custom Test Drivers}). Note that you can't
+enable such protocols when the serial harness is used, though.
+In the rest of this section we are going to concentrate mostly on
+protocol-less tests, since we cover test protocols in a later section
+(again, @pxref{Custom Test Drivers}).
+
+@cindex Exit status 77, special interpretation
+@cindex Exit status 99, special interpretation
+When no test protocol is in use, an exit status of 0 from a test script will
+denote a success, an exit status of 77 a skipped test, an exit status of 99
+an hard error, and any other exit status will denote a failure.
+
+@cindex Tests, expected failure
+@cindex Expected test failure
+@vindex XFAIL_TESTS
+@vindex DISABLE_HARD_ERRORS
+@cindex Disabling hard errors
+You may define the variable @code{XFAIL_TESTS} to a list of tests
+(usually a subset of @code{TESTS}) that are expected to fail; this will
+effectively reverse the result of those tests (with the provision that
+skips and hard errors remain untouched). You may also instruct the
+testsuite harness to treat hard errors like simple failures, by defining
+the @code{DISABLE_HARD_ERRORS} make variable to a nonempty value.
+
+Note however that, for tests based on more complex test protocols,
+the exact effects of @code{XFAIL_TESTS} and @code{DISABLE_HARD_ERRORS}
+might change, or they might even have no effect at all (for example,
+@c Keep this in sync with tap-no-disable-hard-errors.sh
+in tests using TAP, there is no way to disable hard errors, and the
+@code{DISABLE_HARD_ERRORS} variable has no effect on them).
+
+@anchor{Testsuite progress on console}
+@cindex Testsuite progress on console
+The result of each test case run by the scripts in @code{TESTS} will be
+printed on standard output, along with the test name. For test protocols
+that allow more test cases per test script (such as TAP), a number,
+identifier and/or brief description specific for the single test case is
+expected to be printed in addition to the name of the test script. The
+possible results (whose meanings should be clear from the previous
+@ref{Generalities about Testing}) are @code{PASS}, @code{FAIL},
+@code{SKIP}, @code{XFAIL}, @code{XPASS} and @code{ERROR}. Here is an
+example of output from an hypothetical testsuite that uses both plain
+and TAP tests:
+@c Keep in sync with tap-doc.sh
+@example
+PASS: foo.sh
+PASS: zardoz.tap 1 - Daemon started
+PASS: zardoz.tap 2 - Daemon responding
+SKIP: zardoz.tap 3 - Daemon uses /proc # SKIP /proc is not mounted
+PASS: zardoz.tap 4 - Daemon stopped
+SKIP: bar.sh
+PASS: mu.tap 1
+XFAIL: mu.tap 2 # TODO frobnication not yet implemented
+@end example
+
+@noindent
+A testsuite summary (expected to report at least the number of run,
+skipped and failed tests) will be printed at the end of the testsuite
+run.
+
+@anchor{Simple tests and color-tests}
+@vindex AM_COLOR_TESTS
+@cindex Colorized testsuite output
+If the standard output is connected to a capable terminal, then the test
+results and the summary are colored appropriately. The developer and the
+user can disable colored output by setting the @command{make} variable
+@samp{AM_COLOR_TESTS=no}; the user can in addition force colored output
+even without a connecting terminal with @samp{AM_COLOR_TESTS=always}.
+It's also worth noting that some @command{make} implementations,
+when used in parallel mode, have slightly different semantics
+(@pxref{Parallel make,,, autoconf, The Autoconf Manual}), which can
+break the automatic detection of a connection to a capable terminal.
+If this is the case, the user will have to resort to the use of
+@samp{AM_COLOR_TESTS=always} in order to have the testsuite output
+colorized.
+
+Test programs that need data files should look for them in @code{srcdir}
+(which is both a make variable and an environment variable made available
+to the tests), so that they work when building in a separate directory
+(@pxref{Build Directories, , Build Directories , autoconf,
+The Autoconf Manual}), and in particular for the @code{distcheck} rule
+(@pxref{Checking the Distribution}).
+
+@vindex TESTS
+@vindex TESTS_ENVIRONMENT
+@vindex AM_TESTS_ENVIRONMENT
+The @code{AM_TESTS_ENVIRONMENT} and @code{TESTS_ENVIRONMENT} variables can
+be used to run initialization code and set environment variables for the
+test scripts. The former variable is developer-reserved, and can be
+defined in the @file{Makefile.am}, while the latter is reserved for the
+user, which can employ it to extend or override the settings in the
+former; for this to work portably, however, the contents of a non-empty
+@code{AM_TESTS_ENVIRONMENT} @emph{must} be terminated by a semicolon.
+
+@vindex AM_TESTS_FD_REDIRECT
+The @code{AM_TESTS_FD_REDIRECT} variable can be used to define file
+descriptor redirections for the test scripts. One might think that
+@code{AM_TESTS_ENVIRONMENT} could be used for this purpose, but experience
+has shown that doing so portably is practically impossible. The main
+hurdle is constituted by Korn shells, which usually set the close-on-exec
+flag on file descriptors opened with the @command{exec} builtin, thus
+rendering an idiom like @code{AM_TESTS_ENVIRONMENT = exec 9>&2;}
+ineffectual. This issue also affects some Bourne shells, such as the
+HP-UX's @command{/bin/sh},
+
+@c Keep in sync with tests-environment-backcompat.sh
+@example
+AM_TESTS_ENVIRONMENT = \
+## Some environment initializations are kept in a separate shell
+## file 'tests-env.sh', which can make it easier to also run tests
+## from the command line.
+ . $(srcdir)/tests-env.sh; \
+## On Solaris, prefer more POSIX-compliant versions of the standard
+## tools by default.
+ if test -d /usr/xpg4/bin; then \
+ PATH=/usr/xpg4/bin:$$PATH; export PATH; \
+ fi;
+@c $$ restore font-lock
+## With this, the test scripts will be able to print diagnostic
+## messages to the original standard error stream, even if the test
+## driver redirects the stderr of the test scripts to a log file
+## before executing them.
+AM_TESTS_FD_REDIRECT = 9>&2
+@end example
+
+@noindent
+Note however that @code{AM_TESTS_ENVIRONMENT} is, for historical and
+implementation reasons, @emph{not} supported by the serial harness
+(@pxref{Serial Test Harness}).
+
+Automake ensures that each file listed in @code{TESTS} is built before
+it is run; you can list both source and derived programs (or scripts)
+in @code{TESTS}; the generated rule will look both in @code{srcdir} and
+@file{.}. For instance, you might want to run a C program as a test.
+To do this you would list its name in @code{TESTS} and also in
+@code{check_PROGRAMS}, and then specify it as you would any other
+program.
+
+Programs listed in @code{check_PROGRAMS} (and @code{check_LIBRARIES},
+@code{check_LTLIBRARIES}...) are only built during @code{make check},
+not during @code{make all}. You should list there any program needed
+by your tests that does not need to be built by @code{make all}. Note
+that @code{check_PROGRAMS} are @emph{not} automatically added to
+@code{TESTS} because @code{check_PROGRAMS} usually lists programs used
+by the tests, not the tests themselves. Of course you can set
+@code{TESTS = $(check_PROGRAMS)} if all your programs are test cases.
+
+@node Serial Test Harness
+@subsection Older (and discouraged) serial test harness
+@cindex @option{serial-tests}, Using
+
+First, note that today the use of this harness is strongly discouraged in
+favour of the parallel test harness (@pxref{Parallel Test Harness}).
+Still, there are @emph{few} situations when the advantages offered by
+the parallel harness are irrelevant, and when test concurrency can
+even cause tricky problems. In those cases, it might make sense to
+still use the serial harness, for simplicity and reliability (we still
+suggest trying to give the parallel harness a shot though).
+
+The serial test harness is enabled by the Automake option
+@option{serial-tests}. It operates by simply running the tests serially,
+one at the time, without any I/O redirection. It's up to the user to
+implement logging of tests' output, if that's required or desired.
+
+For historical and implementation reasons, the @code{AM_TESTS_ENVIRONMENT}
+variable is @emph{not} supported by this harness (it will be silently
+ignored if defined); only @code{TESTS_ENVIRONMENT} is, and it is to be
+considered a developer-reserved variable. This is done so that, when
+using the serial harness, @code{TESTS_ENVIRONMENT} can be defined to an
+invocation of an interpreter through which the tests are to be run.
+For instance, the following setup may be used to run tests with Perl:
+
+@example
+TESTS_ENVIRONMENT = $(PERL) -Mstrict -w
+TESTS = foo.pl bar.pl baz.pl
+@end example
+
+@noindent
+It's important to note that the use of @code{TESTS_ENVIRONMENT} endorsed
+here would be @emph{invalid} with the parallel harness. That harness
+provides a more elegant way to achieve the same effect, with the further
+benefit of freeing the @code{TESTS_ENVIRONMENT} variable for the user
+(@pxref{Parallel Test Harness}).
+
+Another, less serious limit of the serial harness is that it doesn't
+really distinguish between simple failures and hard errors; this is
+due to historical reasons only, and might be fixed in future Automake
+versions.
+
+@node Parallel Test Harness
+@subsection Parallel Test Harness
+
+By default, Automake generated a parallel (concurrent) test harness. It
+features automatic collection of the test scripts output in @file{.log}
+files, concurrent execution of tests with @code{make -j}, specification
+of inter-test dependencies, lazy reruns of tests that have not completed
+in a prior run, and hard errors for exceptional failures.
+
+@anchor{Basics of test metadata}
+@vindex TEST_SUITE_LOG
+@vindex TESTS
+@cindex @file{.log} files
+@cindex @file{.trs} files
+@cindex test metadata
+The parallel test harness operates by defining a set of @command{make}
+rules that run the test scripts listed in @code{TESTS}, and, for each
+such script, save its output in a corresponding @file{.log} file and
+its results (and other ``metadata'', @pxref{API for Custom Test Drivers})
+in a corresponding @file{.trs} (as in @b{T}est @b{R}e@b{S}ults) file.
+@c We choose the '.trs' extension also because, at the time of writing,
+@c it isn't already used for other significant purposes; see e.g.:
+@c - http://filext.com/file-extension/trs
+@c - http://www.file-extensions.org/search/?searchstring=trs
+The @file{.log} file will contain all the output emitted by the test on
+its standard output and its standard error. The @file{.trs} file will
+contain, among the other things, the results of the test cases run by
+the script.
+
+The parallel test harness will also create a summary log file,
+@code{TEST_SUITE_LOG}, which defaults to @file{test-suite.log} and requires
+a @file{.log} suffix. This file depends upon all the @file{.log} and
+@file{.trs} files created for the test scripts listed in @code{TESTS}.
+
+@vindex VERBOSE
+As with the serial harness above, by default one status line is printed
+per completed test, and a short summary after the suite has completed.
+However, standard output and standard error of the test are redirected
+to a per-test log file, so that parallel execution does not produce
+intermingled output. The output from failed tests is collected in the
+@file{test-suite.log} file. If the variable @samp{VERBOSE} is set, this
+file is output after the summary.
+
+@vindex TEST_EXTENSIONS
+@vindex TEST_LOGS
+Each couple of @file{.log} and @file{.trs} files is created when the
+corresponding test has completed. The set of log files is listed in
+the read-only variable @code{TEST_LOGS}, and defaults to @code{TESTS},
+with the executable extension if any (@pxref{EXEEXT}), as well as any
+suffix listed in @code{TEST_EXTENSIONS} removed, and @file{.log} appended.
+Results are undefined if a test file name ends in several concatenated
+suffixes. @code{TEST_EXTENSIONS} defaults to @file{.test}; it can be
+overridden by the user, in which case any extension listed in it must be
+constituted by a dot, followed by a non-digit alphabetic character,
+followed by any number of alphabetic characters.
+@c Keep in sync with test-extensions.sh
+For example, @samp{.sh}, @samp{.T} and @samp{.t1} are valid extensions,
+while @samp{.x-y}, @samp{.6c} and @samp{.t.1} are not.
+
+@cindex Configure substitutions in @code{TESTS}
+It is important to note that, due to current limitations (unlikely to be
+lifted), configure substitutions in the definition of @code{TESTS} can
+only work if they will expand to a list of tests that have a suffix listed
+in @code{TEST_EXTENSIONS}.
+
+@vindex _LOG_COMPILE
+@vindex _LOG_COMPILER
+@vindex _LOG_FLAGS
+@vindex LOG_COMPILE
+@vindex LOG_COMPILER
+@vindex LOG_FLAGS
+@vindex @var{ext}_LOG_COMPILE
+@vindex @var{ext}_LOG_COMPILER
+@vindex @var{ext}_LOG_FLAGS
+@vindex AM_@var{ext}_LOG_FLAGS
+@vindex AM_LOG_FLAGS
+For tests that match an extension @code{.@var{ext}} listed in
+@code{TEST_EXTENSIONS}, you can provide a custom ``test runner'' using
+the variable @code{@var{ext}_LOG_COMPILER} (note the upper-case
+extension) and pass options in @code{AM_@var{ext}_LOG_FLAGS} and allow
+the user to pass options in @code{@var{ext}_LOG_FLAGS}. It will cause
+all tests with this extension to be called with this runner. For all
+tests without a registered extension, the variables @code{LOG_COMPILER},
+@code{AM_LOG_FLAGS}, and @code{LOG_FLAGS} may be used. For example,
+
+@c Keep in sync with parallel-tests-log-compiler-example.sh
+@example
+TESTS = foo.pl bar.py baz
+TEST_EXTENSIONS = .pl .py
+PL_LOG_COMPILER = $(PERL)
+AM_PL_LOG_FLAGS = -w
+PY_LOG_COMPILER = $(PYTHON)
+AM_PY_LOG_FLAGS = -v
+LOG_COMPILER = ./wrapper-script
+AM_LOG_FLAGS = -d
+@end example
+
+@noindent
+will invoke @samp{$(PERL) -w foo.pl}, @samp{$(PYTHON) -v bar.py},
+and @samp{./wrapper-script -d baz} to produce @file{foo.log},
+@file{bar.log}, and @file{baz.log}, respectively. The @file{foo.trs},
+@file{bar.trs} and @file{baz.trs} files will be automatically produced
+as a side-effect.
+
+It's important to note that, differently from what we've seen for the
+serial test harness (@pxref{Serial Test Harness}), the
+@code{AM_TESTS_ENVIRONMENT} and @code{TESTS_ENVIRONMENT} variables
+@emph{cannot} be used to define a custom test runner; the
+@code{LOG_COMPILER} and @code{LOG_FLAGS} (or their extension-specific
+counterparts) should be used instead:
+
+@example
+## This is WRONG!
+AM_TESTS_ENVIRONMENT = PERL5LIB='$(srcdir)/lib' $(PERL) -Mstrict -w
+@end example
+
+@example
+## Do this instead.
+AM_TESTS_ENVIRONMENT = PERL5LIB='$(srcdir)/lib'; export PERL5LIB;
+LOG_COMPILER = $(PERL)
+AM_LOG_FLAGS = -Mstrict -w
+@end example
+
+By default, the test suite harness will run all tests, but there are
+several ways to limit the set of tests that are run:
+
+@itemize @bullet
+@item
+You can set the @code{TESTS} variable. For example, you can use a
+command like this to run only a subset of the tests:
+
+@example
+env TESTS="foo.test bar.test" make -e check
+@end example
+
+Note however that the command above will unconditionally overwrite the
+@file{test-suite.log} file, thus clobbering the recorded results
+of any previous testsuite run. This might be undesirable for packages
+whose testsuite takes long time to execute. Luckily, this problem can
+easily be avoided by overriding also @code{TEST_SUITE_LOG} at runtime;
+for example,
+
+@c Keep in sync with parallel-tests-log-override-2.sh
+@example
+env TEST_SUITE_LOG=partial.log TESTS="..." make -e check
+@end example
+
+will write the result of the partial testsuite runs to the
+@file{partial.log}, without touching @file{test-suite.log}.
+
+@item
+You can set the @code{TEST_LOGS} variable. By default, this variable is
+computed at @command{make} run time from the value of @code{TESTS} as
+described above. For example, you can use the following:
+
+@example
+set x subset*.log; shift
+env TEST_LOGS="foo.log $*" make -e check
+@end example
+
+The comments made above about @code{TEST_SUITE_LOG} overriding applies
+here too.
+
+@item
+@vindex RECHECK_LOGS
+@cindex lazy test execution
+By default, the test harness removes all old per-test @file{.log} and
+@file{.trs} files before it starts running tests to regenerate them. The
+variable @code{RECHECK_LOGS} contains the set of @file{.log} (and, by
+implication, @file{.trs}) files which are removed. @code{RECHECK_LOGS}
+defaults to @code{TEST_LOGS}, which means all tests need to be rechecked.
+By overriding this variable, you can choose which tests need to be
+reconsidered. For example, you can lazily rerun only those tests which
+are outdated, i.e., older than their prerequisite test files, by setting
+this variable to the empty value:
+
+@example
+env RECHECK_LOGS= make -e check
+@end example
+
+@item
+@trindex recheck
+You can ensure that all tests are rerun which have failed or passed
+unexpectedly, by running @code{make recheck} in the test directory.
+This convenience target will set @code{RECHECK_LOGS} appropriately
+before invoking the main test harness.
+@end itemize
+
+@noindent
+In order to guarantee an ordering between tests even with @code{make
+-j@var{N}}, dependencies between the corresponding @file{.log} files
+may be specified through usual @command{make} dependencies. For example,
+the following snippet lets the test named @file{foo-execute.test} depend
+upon completion of the test @file{foo-compile.test}:
+
+@example
+TESTS = foo-compile.test foo-execute.test
+foo-execute.log: foo-compile.log
+@end example
+
+@noindent
+Please note that this ordering ignores the @emph{results} of required
+tests, thus the test @file{foo-execute.test} is run even if the test
+@file{foo-compile.test} failed or was skipped beforehand. Further,
+please note that specifying such dependencies currently works only for
+tests that end in one of the suffixes listed in @code{TEST_EXTENSIONS}.
+
+Tests without such specified dependencies may be run concurrently with
+parallel @command{make -j@var{N}}, so be sure they are prepared for
+concurrent execution.
+
+@cindex Unit tests
+@c Keep in sync with 'parallel-tests-extra-programs.sh'.
+The combination of lazy test execution and correct dependencies between
+tests and their sources may be exploited for efficient unit testing
+during development. To further speed up the edit-compile-test cycle, it
+may even be useful to specify compiled programs in @code{EXTRA_PROGRAMS}
+instead of with @code{check_PROGRAMS}, as the former allows intertwined
+compilation and test execution (but note that @code{EXTRA_PROGRAMS} are
+not cleaned automatically, @pxref{Uniform}).
+
+The variables @code{TESTS} and @code{XFAIL_TESTS} may contain
+conditional parts as well as configure substitutions. In the latter
+case, however, certain restrictions apply: substituted test names
+must end with a nonempty test suffix like @file{.test}, so that one of
+the inference rules generated by @command{automake} can apply. For
+literal test names, @command{automake} can generate per-target rules
+to avoid this limitation.
+
+Please note that it is currently not possible to use @code{$(srcdir)/}
+or @code{$(top_srcdir)/} in the @code{TESTS} variable. This technical
+limitation is necessary to avoid generating test logs in the source tree
+and has the unfortunate consequence that it is not possible to specify
+distributed tests that are themselves generated by means of explicit
+rules, in a way that is portable to all @command{make} implementations
+(@pxref{Make Target Lookup,,, autoconf, The Autoconf Manual}, the
+semantics of FreeBSD and OpenBSD @command{make} conflict with this).
+In case of doubt you may want to require to use GNU @command{make},
+or work around the issue with inference rules to generate the tests.
+
+@node Custom Test Drivers
+@section Custom Test Drivers
+
+@menu
+* Overview of Custom Test Drivers Support::
+* Declaring Custom Test Drivers::
+* API for Custom Test Drivers::
+@end menu
+
+@node Overview of Custom Test Drivers Support
+@subsection Overview of Custom Test Drivers Support
+
+Starting from Automake version 1.12, the parallel test harness allows
+the package authors to use third-party custom test drivers, in case the
+default ones are inadequate for their purposes, or do not support their
+testing protocol of choice.
+
+A custom test driver is expected to properly run the test programs passed
+to it (including the command-line arguments passed to those programs, if
+any), to analyze their execution and outcome, to create the @file{.log}
+and @file{.trs} files associated to these test runs, and to display the test
+results on the console. It is responsibility of the author of the test
+driver to ensure that it implements all the above steps meaningfully and
+correctly; Automake isn't and can't be of any help here. On the other
+hand, the Automake-provided code for testsuite summary generation offers
+support for test drivers allowing several test results per test script,
+if they take care to register such results properly (@pxref{Log files
+generation and test results recording}).
+
+The exact details of how test scripts' results are to be determined and
+analyzed is left to the individual drivers. Some drivers might only
+consider the test script exit status (this is done for example by the
+default test driver used by the parallel test harness, described
+in the previous section). Other drivers might implement more complex and
+advanced test protocols, which might require them to parse and interpreter
+the output emitted by the test script they're running (examples of such
+protocols are TAP and SubUnit).
+
+It's very important to note that, even when using custom test drivers,
+most of the infrastructure described in the previous section about the
+parallel harness remains in place; this includes:
+
+@itemize
+@item
+list of test scripts defined in @code{TESTS}, and overridable at
+runtime through the redefinition of @code{TESTS} or @code{TEST_LOGS};
+@item
+concurrency through the use of @command{make}'s option @option{-j};
+@item
+per-test @file{.log} and @file{.trs} files, and generation of a summary
+@file{.log} file from them;
+@item
+@code{recheck} target, @code{RECHECK_LOGS} variable, and lazy reruns
+of tests;
+@item
+inter-test dependencies;
+@item
+support for @code{check_*} variables (@code{check_PROGRAMS},
+@code{check_LIBRARIES}, ...);
+@item
+use of @code{VERBOSE} environment variable to get verbose output on
+testsuite failures;
+@item
+definition and honoring of @code{TESTS_ENVIRONMENT},
+@code{AM_TESTS_ENVIRONMENT} and @code{AM_TESTS_FD_REDIRECT}
+variables;
+@item
+definition of generic and extension-specific @code{LOG_COMPILER} and
+@code{LOG_FLAGS} variables.
+@end itemize
+
+@noindent
+On the other hand, the exact semantics of how (and if) testsuite output
+colorization, @code{XFAIL_TESTS}, and hard errors are supported and
+handled is left to the individual test drivers.
+
+@c TODO: We should really add a working example in the doc/ directory,
+@c TODO: and reference if from here.
+
+@node Declaring Custom Test Drivers
+@subsection Declaring Custom Test Drivers
+
+@vindex _LOG_DRIVER
+@vindex _LOG_DRIVER_FLAGS
+@vindex LOG_DRIVER
+@vindex LOG_DRIVER_FLAGS
+@vindex @var{ext}_LOG_DRIVER
+@vindex @var{ext}_LOG_DRIVER_FLAGS
+@vindex AM_@var{ext}_LOG_DRIVER_FLAGS
+@vindex AM_LOG_DRIVER_FLAGS
+Custom testsuite drivers are declared by defining the make variables
+@code{LOG_DRIVER} or @code{@var{ext}_LOG_DRIVER} (where @var{ext} must
+be declared in @code{TEST_EXTENSIONS}). They must be defined to
+programs or scripts that will be used to drive the execution, logging,
+and outcome report of the tests with corresponding extensions (or of
+those with no registered extension in the case of @code{LOG_DRIVER}).
+Clearly, multiple distinct test drivers can be declared in the same
+@file{Makefile.am}. Note moreover that the @code{LOG_DRIVER} variables
+are @emph{not} a substitute for the @code{LOG_COMPILER} variables: the
+two sets of variables can, and often do, usefully and legitimately
+coexist.
+
+@c TODO: We should really be able to point to a clarifying example here!
+
+The developer-reserved variable @code{AM_LOG_DRIVER_FLAGS} and the
+user-reserved variable @code{LOG_DRIVER_FLAGS} can be used to define
+flags that will be passed to each invocation of @code{LOG_DRIVER},
+with the user-defined flags obviously taking precedence over the
+developer-reserved ones. Similarly, for each extension @var{ext}
+declared in @code{TEST_EXTENSIONS}, flags listed in
+@code{AM_@var{ext}_LOG_DRIVER_FLAGS} and
+@code{@var{ext}_LOG_DRIVER_FLAGS} will be passed to
+invocations of @code{@var{ext}_LOG_DRIVER}.
+
+@node API for Custom Test Drivers
+@subsection API for Custom Test Drivers
+
+Note that @emph{the APIs described here are still highly experimental},
+and will very likely undergo tightenings and likely also extensive changes
+in the future, to accommodate for new features or to satisfy additional
+portability requirements.
+
+The main characteristic of these APIs is that they are designed to share
+as much infrastructure, semantics, and implementation details as possible
+with the parallel test harness and its default driver.
+
+@menu
+* Command-line arguments for test drivers::
+* Log files generation and test results recording::
+* Testsuite progress output::
+@end menu
+
+@node Command-line arguments for test drivers
+@subsubsection Command-line arguments for test drivers
+
+A custom driver can rely on various command-line options and arguments
+being passed to it automatically by the Automake-generated test harness.
+It is @emph{mandatory} that it understands all of them (even if the exact
+interpretation of the associated semantics can legitimately change
+between a test driver and another, and even be a no-op in some drivers).
+
+@noindent
+Here is the list of options:
+
+@table @option
+@item --test-name=@var{NAME}
+The name of the test, with VPATH prefix (if any) removed. This can have a
+suffix and a directory component (as in e.g., @file{sub/foo.test}), and is
+mostly meant to be used in console reports about testsuite advancements and
+results (@pxref{Testsuite progress output}).
+@item --log-file=@file{@var{PATH}.log}
+The @file{.log} file the test driver must create (@pxref{Basics of
+test metadata}). If it has a directory component (as in e.g.,
+@file{sub/foo.log}), the test harness will ensure that such directory
+exists @emph{before} the test driver is called.
+@item --trs-file=@file{@var{PATH}.trs}
+The @file{.trs} file the test driver must create (@pxref{Basics of
+test metadata}). If it has a directory component (as in e.g.,
+@file{sub/foo.trs}), the test harness will ensure that such directory
+exists @emph{before} the test driver is called.
+@item --color-tests=@{yes|no@}
+Whether the console output should be colorized or not (@pxref{Simple
+tests and color-tests}, to learn when this option gets activated and
+when it doesn't).
+@item --expect-failure=@{yes|no@}
+Whether the tested program is expected to fail.
+@item --enable-hard-errors=@{yes|no@}
+Whether ``hard errors'' in the tested program should be treated differently
+from normal failures or not (the default should be @code{yes}). The exact
+meaning of ``hard error'' is highly dependent from the test protocols or
+conventions in use.
+@item --
+Explicitly terminate the list of options.
+@end table
+
+@noindent
+The first non-option argument passed to the test driver is the program to
+be run, and all the following ones are command-line options and arguments
+for this program.
+
+Note that the exact semantics attached to the @option{--color-tests},
+@option{--expect-failure} and @option{--enable-hard-errors} options are
+left up to the individual test drivers. Still, having a behaviour
+compatible or at least similar to that provided by the default driver
+is advised, as that would offer a better consistency and a more pleasant
+user experience.
+
+@node Log files generation and test results recording
+@subsubsection Log files generation and test results recording
+
+The test driver must correctly generate the files specified by the
+@option{--log-file} and @option{--trs-file} option (even when the tested
+program fails or crashes).
+
+The @file{.log} file should ideally contain all the output produced by the
+tested program, plus optionally other information that might facilitate
+debugging or analysis of bug reports. Apart from that, its format is
+basically free.
+
+The @file{.trs} file is used to register some metadata through the use
+of custom reStructuredText fields. This metadata is expected to be
+employed in various ways by the parallel test harness; for example, to
+count the test results when printing the testsuite summary, or to decide
+which tests to re-run upon @command{make recheck}. Unrecognized metadata
+in a @file{.trs} file is currently ignored by the harness, but this might
+change in the future. The list of currently recognized metadata follows.
+
+@table @code
+
+@item :test-result:
+@cindex Register test result
+@cindex Register test case result
+@cindex Test result, registering
+@cindex Test case result, registering
+@cindex @code{:test-result:}
+@cindex reStructuredText field, @code{:test-result:}
+The test driver must use this field to register the results of @emph{each}
+test case run by a test script file. Several @code{:test-result:} fields
+can be present in the same @file{.trs} file; this is done in order to
+support test protocols that allow a single test script to run more test
+cases.
+
+@c Keep this in sync with lib/am/check-am:$(TEST_SUITE_LOG).
+The only recognized test results are currently @code{PASS}, @code{XFAIL},
+@code{SKIP}, @code{FAIL}, @code{XPASS} and @code{ERROR}. These results,
+when declared with @code{:test-result:}, can be optionally followed by
+text holding the name and/or a brief description of the corresponding
+test; the harness will ignore such extra text when generating
+@file{test-suite.log} and preparing the testsuite summary.
+
+@c Keep in sync with 'test-metadata-recheck.sh'.
+@item @code{:recheck:}
+@cindex :recheck:
+@cindex reStructuredText field, @code{:recheck:}
+If this field is present and defined to @code{no}, then the corresponding
+test script will @emph{not} be run upon a @command{make recheck}. What
+happens when two or more @code{:recheck:} fields are present in the same
+@file{.trs} file is undefined behaviour.
+
+@c Keep in sync with 'test-metadata-global-log.sh'.
+@item @code{:copy-in-global-log:}
+@cindex :copy-in-global-log:
+@cindex reStructuredText field, @code{:copy-in-global-log:}
+If this field is present and defined to @code{no}, then the content
+of the @file{.log} file will @emph{not} be copied into the global
+@file{test-suite.log}. We allow to forsake such copying because, while
+it can be useful in debugging and analysis of bug report, it can also be
+just a waste of space in normal situations, e.g., when a test script is
+successful. What happens when two or more @code{:copy-in-global-log:}
+fields are present in the same @file{.trs} file is undefined behaviour.
+
+@c Keep in sync with 'test-metadata-global-result.sh'.
+@item @code{:test-global-result:}
+@cindex :test-global-result:
+@cindex reStructuredText field, @code{:test-global-result:}
+This is used to declare the "global result" of the script. Currently,
+the value of this field is needed only to be reported (more or less
+verbatim) in the generated global log file @code{$(TEST_SUITE_LOG)},
+so it's quite free-form. For example, a test script which run 10 test
+cases, 6 of which pass and 4 of which are skipped, could reasonably have
+a @code{PASS/SKIP} value for this field, while a test script which run
+19 successful tests and one failed test could have an @code{ALMOST
+PASSED} value. What happens when two or more @code{:test-global-result:}
+fields are present in the same @file{.trs} file is undefined behaviour.
+@end table
+
+@noindent
+Let's see a small example. Assume a @file{.trs} file contains the
+following lines:
+
+@example
+:test-result: PASS server starts
+:global-log-copy: no
+:test-result: PASS HTTP/1.1 request
+:test-result: FAIL HTTP/1.0 request
+:recheck: yes
+:test-result: SKIP HTTPS request (TLS library wasn't available)
+:test-result: PASS server stops
+@end example
+
+@noindent
+Then the corresponding test script will be re-run by @command{make check},
+will contribute with @emph{five} test results to the testsuite summary
+(three of these tests being successful, one failed, and one skipped), and
+the content of the corresponding @file{.log} file will @emph{not} be
+copied in the global log file @file{test-suite.log}.
+
+@node Testsuite progress output
+@subsubsection Testsuite progress output
+
+A custom test driver also has the task of displaying, on the standard
+output, the test results as soon as they become available. Depending on
+the protocol in use, it can also display the reasons for failures and
+skips, and, more generally, any useful diagnostic output (but remember
+that each line on the screen is precious, so that cluttering the screen
+with overly verbose information is bad idea). The exact format of this
+progress output is left up to the test driver; in fact, a custom test
+driver might @emph{theoretically} even decide not to do any such report,
+leaving it all to the testsuite summary (that would be a very lousy idea,
+of course, and serves only to illustrate the flexibility that is
+granted here).
+
+Remember that consistency is good; so, if possible, try to be consistent
+with the output of the built-in Automake test drivers, providing a similar
+``look & feel''. In particular, the testsuite progress output should be
+colorized when the @option{--color-tests} is passed to the driver. On the
+other end, if you are using a known and widespread test protocol with
+well-established implementations, being consistent with those
+implementations' output might be a good idea too.
+
+@node Using the TAP test protocol
+@section Using the TAP test protocol
+
+@menu
+* Introduction to TAP::
+* Use TAP with the Automake test harness::
+* Incompatibilities with other TAP parsers and drivers::
+* Links and external resources on TAP::
+@end menu
+
+@node Introduction to TAP
+@subsection Introduction to TAP
+
+TAP, the Test Anything Protocol, is a simple text-based interface between
+testing modules or programs and a test harness. The tests (also called
+``TAP producers'' in this context) write test results in a simple format
+on standard output; a test harness (also called ``TAP consumer'') will
+parse and interpret these results, and properly present them to the user,
+and/or register them for later analysis. The exact details of how this
+is accomplished can vary among different test harnesses. The Automake
+harness will present the results on the console in the usual
+fashion (@pxref{Testsuite progress on console}), and will use the
+@file{.trs} files (@pxref{Basics of test metadata}) to store the test
+results and related metadata. Apart from that, it will try to remain
+as much compatible as possible with pre-existing and widespread utilities,
+such as the @uref{http://search.cpan.org/~andya/Test-Harness/bin/prove,
+@command{prove} utility}, at least for the simpler usages.
+
+TAP started its life as part of the test harness for Perl, but today
+it has been (mostly) standardized, and has various independent
+implementations in different languages; among them, C, C++, Perl,
+Python, PHP, and Java. For a semi-official specification of the
+TAP protocol, please refer to the documentation of
+@uref{http://search.cpan.org/~petdance/Test-Harness/lib/Test/Harness/TAP.pod,
+ @samp{Test::Harness::TAP}}.
+
+The most relevant real-world usages of TAP are obviously in the testsuites
+of @command{perl} and of many perl modules. Still, also other important
+third-party packages, such as @uref{http://git-scm.com/, @command{git}},
+use TAP in their testsuite.
+
+@node Use TAP with the Automake test harness
+@subsection Use TAP with the Automake test harness
+
+Currently, the TAP driver that comes with Automake requires some by-hand
+steps on the developer's part (this situation should hopefully be improved
+in future Automake versions). You'll have to grab the @file{tap-driver.sh}
+script from the Automake distribution by hand, copy it in your source tree,
+and use the Automake support for third-party test drivers to instruct the
+harness to use the @file{tap-driver.sh} script and the awk program found
+by @code{AM_INIT_AUTOMAKE} to run your TAP-producing tests. See the example
+below for clarification.
+
+Apart from the options common to all the Automake test drivers
+(@pxref{Command-line arguments for test drivers}), the @file{tap-driver.sh}
+supports the following options, whose names are chosen for enhanced
+compatibility with the @command{prove} utility.
+
+@table @option
+@c Keep in sync with 'tap-exit.sh' and 'tap-signal.tap'.
+@item --ignore-exit
+Causes the test driver to ignore the exit status of the test scripts;
+by default, the driver will report an error if the script exits with a
+non-zero status. This option has effect also on non-zero exit statuses
+due to termination by a signal.
+@item --comments
+Instruct the test driver to display TAP diagnostic (i.e., lines beginning
+with the @samp{#} character) in the testsuite progress output too; by
+default, TAP diagnostic is only copied to the @file{.log} file.
+@item --no-comments
+Revert the effects of @option{--comments}.
+@item --merge
+Instruct the test driver to merge the test scripts' standard error into
+their standard output. This is necessary if you want to ensure that
+diagnostics from the test scripts are displayed in the correct order
+relative to test results; this can be of great help in debugging
+(especially if your test scripts are shell scripts run with shell
+tracing active). As a downside, this option might cause the test
+harness to get confused if anything that appears on standard error
+looks like a test result.
+@item --no-merge
+Revert the effects of @option{--merge}.
+@item --diagnostic-string=@var{STRING}
+Change the string that introduces TAP diagnostic from the default value
+of ``@code{#}'' to @code{@var{STRING}}. This can be useful if your
+TAP-based test scripts produce verbose output on which they have limited
+control (because, say, the output comes from other tools invoked in the
+scripts), and it might contain text that gets spuriously interpreted as
+TAP diagnostic: such an issue can be solved by redefining the string that
+activates TAP diagnostic to a value you know won't appear by chance in
+the tests' output. Note however that this feature is non-standard, as
+the ``official'' TAP protocol does not allow for such a customization; so
+don't use it if you can avoid it.
+@end table
+
+@noindent
+Here is an example of how the TAP driver can be set up and used.
+
+@c Keep in sync with tap-doc2.sh
+@example
+% @kbd{cat configure.ac}
+AC_INIT([GNU Try Tap], [1.0], [bug-automake@@gnu.org])
+AC_CONFIG_AUX_DIR([build-aux])
+AM_INIT_AUTOMAKE([foreign -Wall -Werror])
+AC_CONFIG_FILES([Makefile])
+AC_REQUIRE_AUX_FILE([tap-driver.sh])
+AC_OUTPUT
+
+% @kbd{cat Makefile.am}
+TEST_LOG_DRIVER = env AM_TAP_AWK='$(AWK)' $(SHELL) \
+ $(top_srcdir)/build-aux/tap-driver.sh
+TESTS = foo.test bar.test baz.test
+EXTRA_DIST = $(TESTS)
+
+% @kbd{cat foo.test}
+#!/bin/sh
+echo 1..4 # Number of tests to be executed.
+echo 'ok 1 - Swallows fly'
+echo 'not ok 2 - Caterpillars fly # TODO metamorphosis in progress'
+echo 'ok 3 - Pigs fly # SKIP not enough acid'
+echo '# I just love word plays ...'
+echo 'ok 4 - Flies fly too :-)'
+
+% @kbd{cat bar.test}
+#!/bin/sh
+echo 1..3
+echo 'not ok 1 - Bummer, this test has failed.'
+echo 'ok 2 - This passed though.'
+echo 'Bail out! Ennui kicking in, sorry...'
+echo 'ok 3 - This will not be seen.'
+
+% @kbd{cat baz.test}
+#!/bin/sh
+echo 1..1
+echo ok 1
+# Exit with error, even if all the tests have been successful.
+exit 7
+
+% @kbd{cp @var{PREFIX}/share/automake-@var{APIVERSION}/tap-driver.sh .}
+% @kbd{autoreconf -vi && ./configure && make check}
+...
+PASS: foo.test 1 - Swallows fly
+XFAIL: foo.test 2 - Caterpillars fly # TODO metamorphosis in progress
+SKIP: foo.test 3 - Pigs fly # SKIP not enough acid
+PASS: foo.test 4 - Flies fly too :-)
+FAIL: bar.test 1 - Bummer, this test has failed.
+PASS: bar.test 2 - This passed though.
+ERROR: bar.test - Bail out! Ennui kicking in, sorry...
+PASS: baz.test 1
+ERROR: baz.test - exited with status 7
+...
+Please report to bug-automake@@gnu.org
+...
+% @kbd{echo exit status: $?}
+exit status: 1
+
+@c Keep the "skewed" indentation below, it produces pretty PDF output.
+% @kbd{env TEST_LOG_DRIVER_FLAGS='--comments --ignore-exit' \
+ TESTS='foo.test baz.test' make -e check}
+...
+PASS: foo.test 1 - Swallows fly
+XFAIL: foo.test 2 - Caterpillars fly # TODO metamorphosis in progress
+SKIP: foo.test 3 - Pigs fly # SKIP not enough acid
+# foo.test: I just love word plays...
+PASS: foo.test 4 - Flies fly too :-)
+PASS: baz.test 1
+...
+% @kbd{echo exit status: $?}
+exit status: 0
+@end example
+
+@node Incompatibilities with other TAP parsers and drivers
+@subsection Incompatibilities with other TAP parsers and drivers
+
+For implementation or historical reasons, the TAP driver and harness as
+implemented by Automake have some minors incompatibilities with the
+mainstream versions, which you should be aware of.
+
+@itemize @bullet
+@item
+A @code{Bail out!} directive doesn't stop the whole testsuite, but only
+the test script it occurs in. This doesn't follow TAP specifications,
+but on the other hand it maximizes compatibility (and code sharing) with
+the ``hard error'' concept of the default testsuite driver.
+@item
+The @code{version} and @code{pragma} directives are not supported.
+@item
+The @option{--diagnostic-string} option of our driver allows to modify
+the string that introduces TAP diagnostic from the default value
+of ``@code{#}''. The standard TAP protocol has currently no way to
+allow this, so if you use it your diagnostic will be lost to more
+compliant tools like @command{prove} and @code{Test::Harness}
+@item
+And there are probably some other small and yet undiscovered
+incompatibilities, especially in corner cases or with rare usages.
+@end itemize
+
+@node Links and external resources on TAP
+@subsection Links and external resources on TAP
+
+@noindent
+Here are some links to more extensive official or third-party
+documentation and resources about the TAP protocol and related
+tools and libraries.
+@itemize @bullet
+@item
+@uref{http://search.cpan.org/~petdance/Test-Harness/lib/Test/Harness/TAP.pod,
+ @samp{Test::Harness::TAP}},
+the (mostly) official documentation about the TAP format and protocol.
+@item
+@uref{http://search.cpan.org/~andya/Test-Harness/bin/prove,
+ @command{prove}},
+the most famous command-line TAP test driver, included in the distribution
+of @command{perl} and
+@uref{http://search.cpan.org/~andya/Test-Harness/lib/Test/Harness.pm,
+ @samp{Test::Harness}}.
+@item
+The @uref{http://testanything.org/wiki/index.php/Main_Page,TAP wiki}.
+@item
+A ``gentle introduction'' to testing for perl coders:
+@uref{http://search.cpan.org/dist/Test-Simple/lib/Test/Tutorial.pod,
+ @samp{Test::Tutorial}}.
+@item
+@uref{http://search.cpan.org/~mschwern/Test-Simple/lib/Test/Simple.pm,
+ @samp{Test::Simple}}
+and
+@uref{http://search.cpan.org/~mschwern/Test-Simple/lib/Test/More.pm,
+ @samp{Test::More}},
+the standard perl testing libraries, which are based on TAP.
+@item
+@uref{http://www.eyrie.org/~eagle/software/c-tap-harness/,C TAP Harness},
+a C-based project implementing both a TAP producer and a TAP consumer.
+@item
+@uref{http://www.tap4j.org/,tap4j},
+a Java-based project implementing both a TAP producer and a TAP consumer.
+@end itemize
+
+@node DejaGnu Tests
+@section DejaGnu Tests
+
+If @uref{https://ftp.gnu.org/gnu/dejagnu/, @command{dejagnu}} appears in
+@code{AUTOMAKE_OPTIONS}, then a @command{dejagnu}-based test suite is
+assumed. The variable @code{DEJATOOL} is a list of names that are
+passed, one at a time, as the @option{--tool} argument to
+@command{runtest} invocations; it defaults to the name of the package.
+
+The variable @code{RUNTESTDEFAULTFLAGS} holds the @option{--tool} and
+@option{--srcdir} flags that are passed to dejagnu by default; this can be
+overridden if necessary.
+@vindex RUNTESTDEFAULTFLAGS
+
+The variables @code{EXPECT} and @code{RUNTEST} can
+also be overridden to provide project-specific values. For instance,
+you will need to do this if you are testing a compiler toolchain,
+because the default values do not take into account host and target
+names.
+@opindex dejagnu
+@vindex DEJATOOL
+@vindex EXPECT
+@vindex RUNTEST
+
+The contents of the variable @code{RUNTESTFLAGS} are passed to the
+@code{runtest} invocation. This is considered a ``user variable''
+(@pxref{User Variables}). If you need to set @command{runtest} flags in
+@file{Makefile.am}, you can use @code{AM_RUNTESTFLAGS} instead.
+@vindex RUNTESTFLAGS
+@vindex AM_RUNTESTFLAGS
+
+@cindex @file{site.exp}
+Automake will generate rules to create a local @file{site.exp} file,
+defining various variables detected by @command{configure}. This file
+is automatically read by DejaGnu. It is OK for the user of a package
+to edit this file in order to tune the test suite. However this is
+not the place where the test suite author should define new variables:
+this should be done elsewhere in the real test suite code.
+Especially, @file{site.exp} should not be distributed.
+
+Still, if the package author has legitimate reasons to extend
+@file{site.exp} at @command{make} time, he can do so by defining
+the variable @code{EXTRA_DEJAGNU_SITE_CONFIG}; the files listed
+there will be considered @file{site.exp} prerequisites, and their
+content will be appended to it (in the same order in which they
+appear in @code{EXTRA_DEJAGNU_SITE_CONFIG}). Note that files are
+@emph{not} distributed by default.
+
+For more information regarding DejaGnu test suites, see @ref{Top, , ,
+dejagnu, The DejaGnu Manual}.
+
+@node Install Tests
+@section Install Tests
+
+The @code{installcheck} target is available to the user as a way to
+run any tests after the package has been installed. You can add tests
+to this by writing an @code{installcheck-local} rule.
+
+
+@node Rebuilding
+@chapter Rebuilding Makefiles
+@cindex rebuild rules
+
+Automake generates rules to automatically rebuild @file{Makefile}s,
+@file{configure}, and other derived files like @file{Makefile.in}.
+
+@acindex AM_MAINTAINER_MODE
+If you are using @code{AM_MAINTAINER_MODE} in @file{configure.ac}, then
+these automatic rebuilding rules are only enabled in maintainer mode.
+
+@vindex CONFIG_STATUS_DEPENDENCIES
+@vindex CONFIGURE_DEPENDENCIES
+@cindex @file{version.sh}, example
+@cindex @file{version.m4}, example
+
+Sometimes it is convenient to supplement the rebuild rules for
+@file{configure} or @file{config.status} with additional dependencies.
+The variables @code{CONFIGURE_DEPENDENCIES} and
+@code{CONFIG_STATUS_DEPENDENCIES} can be used to list these extra
+dependencies. These variables should be defined in all
+@file{Makefile}s of the tree (because these two rebuild rules are
+output in all them), so it is safer and easier to @code{AC_SUBST} them
+from @file{configure.ac}. For instance, the following statement will
+cause @file{configure} to be rerun each time @file{version.sh} is
+changed.
+
+@c Keep in sync with remake-config-status-dependencies.sh
+@example
+AC_SUBST([CONFIG_STATUS_DEPENDENCIES], ['$(top_srcdir)/version.sh'])
+@end example
+
+@noindent
+Note the @samp{$(top_srcdir)/} in the file name. Since this variable
+is to be used in all @file{Makefile}s, its value must be sensible at
+any level in the build hierarchy.
+
+Beware not to mistake @code{CONFIGURE_DEPENDENCIES} for
+@code{CONFIG_STATUS_DEPENDENCIES}.
+
+@c Keep in sync with remake-configure-dependencies.sh
+@code{CONFIGURE_DEPENDENCIES} adds dependencies to the
+@file{configure} rule, whose effect is to run @command{autoconf}. This
+variable should be seldom used, because @command{automake} already tracks
+@code{m4_include}d files. However it can be useful when playing
+tricky games with @code{m4_esyscmd} or similar non-recommendable
+macros with side effects. Be also aware that interactions of this
+variable with the @ref{Autom4te Cache, , autom4te cache, autoconf,
+The Autoconf Manual} are quite problematic and can cause subtle
+breakage, so you might want to disable the cache if you want to use
+@code{CONFIGURE_DEPENDENCIES}.
+
+@code{CONFIG_STATUS_DEPENDENCIES} adds dependencies to the
+@file{config.status} rule, whose effect is to run @file{configure}.
+This variable should therefore carry any non-standard source that may
+be read as a side effect of running @command{configure}, like @file{version.sh}
+in the example above.
+
+Speaking of @file{version.sh} scripts, we recommend against them
+today. They are mainly used when the version of a package is updated
+automatically by a script (e.g., in daily builds). Here is what some
+old-style @file{configure.ac}s may look like:
+
+@example
+AC_INIT
+. $srcdir/version.sh
+AM_INIT_AUTOMAKE([name], $VERSION_NUMBER)
+@dots{}
+@end example
+
+@noindent
+Here, @file{version.sh} is a shell fragment that sets
+@code{VERSION_NUMBER}. The problem with this example is that
+@command{automake} cannot track dependencies (listing @file{version.sh}
+in @command{CONFIG_STATUS_DEPENDENCIES}, and distributing this file is up
+to the user), and that it uses the obsolete form of @code{AC_INIT} and
+@code{AM_INIT_AUTOMAKE}. Upgrading to the new syntax is not
+straightforward, because shell variables are not allowed in
+@code{AC_INIT}'s arguments. We recommend that @file{version.sh} be
+replaced by an M4 file that is included by @file{configure.ac}:
+
+@example
+m4_include([version.m4])
+AC_INIT([name], VERSION_NUMBER)
+AM_INIT_AUTOMAKE
+@dots{}
+@end example
+
+@noindent
+Here @file{version.m4} could contain something like
+@samp{m4_define([VERSION_NUMBER], [1.2])}. The advantage of this
+second form is that @command{automake} will take care of the
+dependencies when defining the rebuild rule, and will also distribute
+the file automatically. An inconvenience is that @command{autoconf}
+will now be rerun each time the version number is bumped, when only
+@file{configure} had to be rerun in the previous setup.
+
+
+@node Options
+@chapter Changing Automake's Behavior
+
+@menu
+* Options generalities:: Semantics of Automake option
+* List of Automake options:: A comprehensive list of Automake options
+@end menu
+
+@node Options generalities
+@section Options generalities
+
+Various features of Automake can be controlled by options. Except where
+noted otherwise, options can be specified in one of several ways. Most
+options can be applied on a per-@file{Makefile} basis when listed in a
+special @file{Makefile} variable named @code{AUTOMAKE_OPTIONS}. Some
+of these options only make sense when specified in the toplevel
+@file{Makefile.am} file. Options are applied globally to all processed
+@file{Makefile} files when listed in the first argument of
+@code{AM_INIT_AUTOMAKE} in @file{configure.ac}, and some options which
+require changes to the @command{configure} script can only be specified
+there. These are annotated below.
+
+As a general rule, options specified in @code{AUTOMAKE_OPTIONS} take
+precedence over those specified in @code{AM_INIT_AUTOMAKE}, which in
+turn take precedence over those specified on the command line.
+
+Also, some care must be taken about the interactions among strictness
+level and warning categories. As a general rule, strictness-implied
+warnings are overridden by those specified by explicit options. For
+example, even if @samp{portability} warnings are disabled by default
+in @option{foreign} strictness, an usage like this will end up enabling
+them:
+
+@example
+AUTOMAKE_OPTIONS = -Wportability foreign
+@end example
+
+However, a strictness level specified in a higher-priority context
+will override all the explicit warnings specified in a lower-priority
+context. For example, if @file{configure.ac} contains:
+
+@example
+AM_INIT_AUTOMAKE([-Wportability])
+@end example
+
+@noindent
+and @file{Makefile.am} contains:
+
+@example
+AUTOMAKE_OPTIONS = foreign
+@end example
+
+@noindent
+then @samp{portability} warnings will be @emph{disabled} in
+@file{Makefile.am}.
+
+@node List of Automake options
+@section List of Automake options
+
+@vindex AUTOMAKE_OPTIONS
+
+@table @asis
+@item @option{gnits}
+@itemx @option{gnu}
+@itemx @option{foreign}
+@cindex Option, @option{gnits}
+@cindex Option, @option{gnu}
+@cindex Option, @option{foreign}
+@opindex gnits
+@opindex gnu
+@opindex foreign
+
+Set the strictness as appropriate. The @option{gnits} option also
+implies options @option{readme-alpha} and @option{check-news}.
+
+@item @option{check-news}
+@cindex Option, @option{check-news}
+@opindex check-news
+Cause @samp{make dist} to fail unless the current version number appears
+in the first few lines of the @file{NEWS} file.
+
+@item @option{dejagnu}
+@cindex Option, @option{dejagnu}
+@opindex dejagnu
+Cause @command{dejagnu}-specific rules to be generated. @xref{DejaGnu Tests}.
+
+@item @option{dist-bzip2}
+@cindex Option, @option{dist-bzip2}
+@opindex dist-bzip2
+Hook @code{dist-bzip2} to @code{dist}.
+@trindex dist-bzip2
+
+@item @option{dist-lzip}
+@cindex Option, @option{dist-lzip}
+@opindex dist-lzip
+Hook @code{dist-lzip} to @code{dist}.
+@trindex dist-lzip
+
+@item @option{dist-xz}
+@cindex Option, @option{dist-xz}
+@opindex dist-xz
+Hook @code{dist-xz} to @code{dist}.
+@trindex dist-xz
+
+@item @option{dist-zip}
+@cindex Option, @option{dist-zip}
+@opindex dist-zip
+Hook @code{dist-zip} to @code{dist}.
+@trindex dist-zip
+
+@item @option{dist-shar}
+@cindex Option, @option{dist-shar}
+@opindex dist-shar
+Hook @code{dist-shar} to @code{dist}. Use of this option
+is deprecated, as the @samp{shar} format is obsolescent and
+problematic. Support for it will be removed altogether in
+Automake 2.0.
+@trindex dist-shar
+
+@item @option{dist-tarZ}
+@cindex Option, @option{dist-tarZ}
+@opindex dist-tarZ
+Hook @code{dist-tarZ} to @code{dist}. Use of this option
+is deprecated, as the @samp{compress} program is obsolete.
+Support for it will be removed altogether in Automake 2.0.
+@trindex dist-tarZ
+
+@item @option{filename-length-max=99}
+@cindex Option, @option{filename-length-max=99}
+@opindex filename-length-max=99
+Abort if file names longer than 99 characters are found during
+@samp{make dist}. Such long file names are generally considered not to
+be portable in tarballs. See the @option{tar-v7} and @option{tar-ustar}
+options below. This option should be used in the top-level
+@file{Makefile.am} or as an argument of @code{AM_INIT_AUTOMAKE} in
+@file{configure.ac}, it will be ignored otherwise. It will also be
+ignored in sub-packages of nested packages (@pxref{Subpackages}).
+
+@item @option{info-in-builddir}
+@cindex Option, @option{info-in-builddir}
+@opindex info-in-builddir
+Instruct Automake to place the generated @file{.info} files in the
+@code{builddir} rather than in the @code{srcdir}. Note that this
+might make VPATH builds with some non-GNU make implementations more
+brittle.
+
+@item @option{no-define}
+@cindex Option, @option{no-define}
+@opindex no-define
+This option is meaningful only when passed as an argument to
+@code{AM_INIT_AUTOMAKE}. It will prevent the @code{PACKAGE} and
+@code{VERSION} variables from being @code{AC_DEFINE}d. But notice
+that they will remain defined as shell variables in the generated
+@code{configure}, and as make variables in the generated
+@code{Makefile}; this is deliberate, and required for backward
+compatibility.
+
+@item @option{no-dependencies}
+@cindex Option, @option{no-dependencies}
+@opindex no-dependencies
+This is similar to using @option{--ignore-deps} on the command line,
+but is useful for those situations where you don't have the necessary
+bits to make automatic dependency tracking work
+(@pxref{Dependencies}). In this case the effect is to effectively
+disable automatic dependency tracking.
+
+@item @option{no-dist}
+@cindex Option, @option{no-dist}
+@opindex no-dist
+Don't emit any code related to @code{dist} target. This is useful
+when a package has its own method for making distributions.
+
+@item @option{no-dist-gzip}
+@cindex Option, @option{no-dist-gzip}
+@opindex no-dist-gzip
+Do not hook @code{dist-gzip} to @code{dist}.
+@trindex no-dist-gzip
+
+@item @option{no-exeext}
+@cindex Option, @option{no-exeext}
+@opindex no-exeext
+If your @file{Makefile.am} defines a rule for target @code{foo}, it
+will override a rule for a target named @samp{foo$(EXEEXT)}. This is
+necessary when @code{EXEEXT} is found to be empty. However, by
+default @command{automake} will generate an error for this use. The
+@option{no-exeext} option will disable this error. This is intended for
+use only where it is known in advance that the package will not be
+ported to Windows, or any other operating system using extensions on
+executables.
+
+@item @option{no-installinfo}
+@cindex Option, @option{no-installinfo}
+@opindex no-installinfo
+The generated @file{Makefile.in} will not cause info pages to be built
+or installed by default. However, @code{info} and @code{install-info}
+targets will still be available. This option is disallowed at
+@option{gnu} strictness and above.
+@trindex info
+@trindex install-info
+
+@item @option{no-installman}
+@cindex Option, @option{no-installman}
+@opindex no-installman
+The generated @file{Makefile.in} will not cause man pages to be
+installed by default. However, an @code{install-man} target will still
+be available for optional installation. This option is disallowed at
+@option{gnu} strictness and above.
+@trindex install-man
+
+@item @option{nostdinc}
+@cindex Option, @option{nostdinc}
+@opindex nostdinc
+This option can be used to disable the standard @option{-I} options that
+are ordinarily automatically provided by Automake.
+
+@item @option{no-texinfo.tex}
+@cindex Option, @option{no-texinfo.tex}
+@opindex no-texinfo.tex
+Don't require @file{texinfo.tex}, even if there are texinfo files in
+this directory.
+
+@item @option{serial-tests}
+@cindex Option, @option{serial-tests}
+@opindex serial-tests
+Enable the older serial test suite harness for @code{TESTS} (@pxref{Serial
+Test Harness}, for more information).
+
+@item @option{parallel-tests}
+@cindex Option, @option{parallel-tests}
+@opindex parallel-tests
+Enable test suite harness for @code{TESTS} that can run tests in parallel
+(@pxref{Parallel Test Harness}, for more information). This option is
+only kept for backward-compatibility, since the parallel test harness is
+the default now.
+
+@item @option{readme-alpha}
+@cindex Option, @option{readme-alpha}
+@opindex readme-alpha
+If this release is an alpha release, and the file @file{README-alpha}
+exists, then it will be added to the distribution. If this option is
+given, version numbers are expected to follow one of two forms. The
+first form is @samp{@var{major}.@var{minor}.@var{alpha}}, where each
+element is a number; the final period and number should be left off for
+non-alpha releases. The second form is
+@samp{@var{major}.@var{minor}@var{alpha}}, where @var{alpha} is a
+letter; it should be omitted for non-alpha releases.
+
+@item @option{std-options}
+@cindex Options, @option{std-options}
+@cindex @samp{make installcheck}, testing @option{--help} and @option{--version}
+@cindex @option{--help} check
+@cindex @option{--version} check
+@opindex std-options
+
+Make the @code{installcheck} rule check that installed scripts and
+programs support the @option{--help} and @option{--version} options.
+This also provides a basic check that the program's
+run-time dependencies are satisfied after installation.
+
+@vindex AM_INSTALLCHECK_STD_OPTIONS_EXEMPT
+In a few situations, programs (or scripts) have to be exempted from this
+test. For instance, @command{false} (from GNU coreutils) is never
+successful, even for @option{--help} or @option{--version}. You can list
+such programs in the variable @code{AM_INSTALLCHECK_STD_OPTIONS_EXEMPT}.
+Programs (not scripts) listed in this variable should be suffixed by
+@samp{$(EXEEXT)} for the sake of Windows or OS/2. For instance, suppose we
+build @file{false} as a program but @file{true.sh} as a script, and that
+neither of them support @option{--help} or @option{--version}:
+
+@example
+AUTOMAKE_OPTIONS = std-options
+bin_PROGRAMS = false ...
+bin_SCRIPTS = true.sh ...
+AM_INSTALLCHECK_STD_OPTIONS_EXEMPT = false$(EXEEXT) true.sh
+@end example
+
+@item @option{subdir-objects}
+@cindex Options, @option{subdir-objects}
+@opindex subdir-objects
+If this option is specified, then objects are placed into the
+subdirectory of the build directory corresponding to the subdirectory of
+the source file. For instance, if the source file is
+@file{subdir/file.cxx}, then the output file would be
+@file{subdir/file.o}.
+
+@anchor{tar-formats}
+@item @option{tar-v7}
+@itemx @option{tar-ustar}
+@itemx @option{tar-pax}
+@cindex Option, @option{tar-v7}
+@cindex Option, @option{tar-ustar}
+@cindex Option, @option{tar-pax}
+@cindex @command{tar} formats
+@cindex v7 @command{tar} format
+@cindex ustar format
+@cindex pax format
+@opindex tar-v7
+@opindex tar-ustar
+@opindex tar-pax
+
+These three mutually exclusive options select the tar format to use
+when generating tarballs with @samp{make dist}. (The tar file created
+is then compressed according to the set of @option{no-dist-gzip},
+@option{dist-bzip2}, @option{dist-lzip}, @option{dist-xz} and
+@option{dist-tarZ} options in use.)
+
+These options must be passed as arguments to @code{AM_INIT_AUTOMAKE}
+(@pxref{Macros}) because they can require additional configure checks.
+Automake will complain if it sees such options in an
+@code{AUTOMAKE_OPTIONS} variable.
+
+@option{tar-v7} selects the old V7 tar format. This is the historical
+default. This antiquated format is understood by all tar
+implementations and supports file names with up to 99 characters. When
+given longer file names some tar implementations will diagnose the
+problem while other will generate broken tarballs or use non-portable
+extensions. Furthermore, the V7 format cannot store empty
+directories. When using this format, consider using the
+@option{filename-length-max=99} option to catch file names too long.
+
+@option{tar-ustar} selects the ustar format defined by POSIX
+1003.1-1988. This format is believed to be old enough to be portable.
+It fully supports empty directories. It can store file names with up
+to 256 characters, provided that the file name can be split at
+directory separator in two parts, first of them being at most 155
+bytes long. So, in most cases the maximum file name length will be
+shorter than 256 characters. However you may run against broken tar
+implementations that incorrectly handle file names longer than 99
+characters (please report them to @email{@value{PACKAGE_BUGREPORT}} so we
+can document this accurately).
+
+@option{tar-pax} selects the new pax interchange format defined by POSIX
+1003.1-2001. It does not limit the length of file names. However,
+this format is very young and should probably be restricted to
+packages that target only very modern platforms. There are moves to
+change the pax format in an upward-compatible way, so this option may
+refer to a more recent version in the future.
+
+@xref{Formats, , Controlling the Archive Format, tar, GNU Tar}, for
+further discussion about tar formats.
+
+@command{configure} knows several ways to construct these formats. It
+will not abort if it cannot find a tool up to the task (so that the
+package can still be built), but @samp{make dist} will fail.
+
+@item @var{version}
+@cindex Option, @var{version}
+A version number (e.g., @samp{0.30}) can be specified. If Automake is not
+newer than the version specified, creation of the @file{Makefile.in}
+will be suppressed.
+
+@item @option{-W@var{category}} or @option{--warnings=@var{category}}
+@cindex Option, warnings
+@cindex Option, @option{-W@var{category}}
+@cindex Option, @option{--warnings=@var{category}}
+These options behave exactly like their command-line counterpart
+(@pxref{automake Invocation}). This allows you to enable or disable some
+warning categories on a per-file basis. You can also setup some warnings
+for your entire project; for instance, try @samp{AM_INIT_AUTOMAKE([-Wall])}
+in your @file{configure.ac}.
+
+@end table
+
+Unrecognized options are diagnosed by @command{automake}.
+
+If you want an option to apply to all the files in the tree, you can use
+the @code{AM_INIT_AUTOMAKE} macro in @file{configure.ac}.
+@xref{Macros}.
+
+
+@node Miscellaneous
+@chapter Miscellaneous Rules
+
+There are a few rules and variables that didn't fit anywhere else.
+
+@menu
+* Tags:: Interfacing to cscope, etags and mkid
+* Suffixes:: Handling new file extensions
+@end menu
+
+
+@node Tags
+@section Interfacing to @command{etags}
+
+@cindex @file{TAGS} support
+
+Automake will generate rules to generate @file{TAGS} files for use with
+GNU Emacs under some circumstances.
+
+@trindex tags
+If any C, C++ or Fortran 77 source code or headers are present, then
+@code{tags} and @code{TAGS} rules will be generated for the directory.
+All files listed using the @code{_SOURCES}, @code{_HEADERS}, and
+@code{_LISP} primaries will be used to generate tags. Note that
+generated source files that are not distributed must be declared in
+variables like @code{nodist_noinst_HEADERS} or
+@code{nodist_@var{prog}_SOURCES} or they will be ignored.
+
+A @code{tags} rule will be output at the topmost directory of a
+multi-directory package. When run from this topmost directory,
+@samp{make tags} will generate a @file{TAGS} file that includes by
+reference all @file{TAGS} files from subdirectories.
+
+The @code{tags} rule will also be generated if the variable
+@code{ETAGS_ARGS} is defined. This variable is intended for use in
+directories that contain taggable source that @command{etags} does
+not understand. The user can use the @code{ETAGSFLAGS} to pass
+additional flags to @command{etags}; @code{AM_ETAGSFLAGS} is also
+available for use in @file{Makefile.am}.
+@vindex ETAGS_ARGS
+@vindex ETAGSFLAGS
+@vindex AM_ETAGSFLAGS
+
+Here is how Automake generates tags for its source, and for nodes in its
+Texinfo file:
+
+@example
+ETAGS_ARGS = automake.in --lang=none \
+ --regex='/^@@node[ \t]+\([^,]+\)/\1/' automake.texi
+@end example
+
+If you add file names to @code{ETAGS_ARGS}, you will probably also
+want to define @code{TAGS_DEPENDENCIES}. The contents of this variable
+are added directly to the dependencies for the @code{tags} rule.
+@vindex TAGS_DEPENDENCIES
+
+Automake also generates a @code{ctags} rule that can be used to
+build @command{vi}-style @file{tags} files. The variable @code{CTAGS}
+is the name of the program to invoke (by default @command{ctags});
+@code{CTAGSFLAGS} can be used by the user to pass additional flags,
+and @code{AM_CTAGSFLAGS} can be used by the @file{Makefile.am}.
+
+@trindex id
+Automake will also generate an @code{ID} rule that will run
+@command{mkid} on the source. This is only supported on a
+directory-by-directory basis.
+
+Similarly, the @code{cscope} rule will create a list of all the source
+files in the tree and run @command{cscope} to build an inverted index
+database. The variable @code{CSCOPE} is the name of the program to invoke
+(by default @command{cscope}); @code{CSCOPEFLAGS} and
+@code{CSCOPE_ARGS} can be used by the user to pass additional flags and
+file names respectively, while @code{AM_CSCOPEFLAGS} can be used by the
+@file{Makefile.am}. Note that, currently, the Automake-provided
+@code{cscope} support, when used in a VPATH build, might not work well
+with non-GNU make implementations (especially with make implementations
+performing @ref{Automatic Rule Rewriting, , VPATH rewrites, autoconf,
+The Autoconf Manual}).
+
+Finally, Automake also emits rules to support the
+@uref{https://www.gnu.org/software/global/, GNU Global Tags program}.
+The @code{GTAGS} rule runs Global Tags and puts the
+result in the top build directory. The variable @code{GTAGS_ARGS}
+holds arguments that are passed to @command{gtags}.
+@vindex GTAGS_ARGS
+
+
+@node Suffixes
+@section Handling new file extensions
+
+@cindex Adding new @code{SUFFIXES}
+@cindex @code{SUFFIXES}, adding
+@vindex SUFFIXES
+
+It is sometimes useful to introduce a new implicit rule to handle a file
+type that Automake does not know about.
+
+For instance, suppose you had a compiler that could compile @file{.foo}
+files to @file{.o} files. You would simply define a suffix rule for
+your language:
+
+@example
+.foo.o:
+ foocc -c -o $@@ $<
+@end example
+
+Then you could directly use a @file{.foo} file in a @code{_SOURCES}
+variable and expect the correct results:
+
+@example
+bin_PROGRAMS = doit
+doit_SOURCES = doit.foo
+@end example
+
+This was the simpler and more common case. In other cases, you will
+have to help Automake to figure out which extensions you are defining your
+suffix rule for. This usually happens when your extension does not
+start with a dot. Then, all you have to do is to put a list of new
+suffixes in the @code{SUFFIXES} variable @strong{before} you define your
+implicit rule.
+
+For instance, the following definition prevents Automake from misinterpreting
+the @samp{.idlC.cpp:} rule as an attempt to transform @file{.idlC} files into
+@file{.cpp} files.
+
+@c Keep in sync with suffix7.sh
+@example
+SUFFIXES = .idl C.cpp
+.idlC.cpp:
+ # whatever
+@end example
+
+As you may have noted, the @code{SUFFIXES} variable behaves like the
+@code{.SUFFIXES} special target of @command{make}. You should not touch
+@code{.SUFFIXES} yourself, but use @code{SUFFIXES} instead and let
+Automake generate the suffix list for @code{.SUFFIXES}. Any given
+@code{SUFFIXES} go at the start of the generated suffixes list, followed
+by Automake generated suffixes not already in the list.
+
+@node Include
+@chapter Include
+
+@cmindex include
+@cindex Including @file{Makefile} fragment
+@cindex @file{Makefile} fragment, including
+
+Automake supports an @code{include} directive that can be used to
+include other @file{Makefile} fragments when @command{automake} is run.
+Note that these fragments are read and interpreted by @command{automake},
+not by @command{make}. As with conditionals, @command{make} has no idea that
+@code{include} is in use.
+
+There are two forms of @code{include}:
+
+@table @code
+@item include $(srcdir)/file
+Include a fragment that is found relative to the current source
+directory.
+
+@item include $(top_srcdir)/file
+Include a fragment that is found relative to the top source directory.
+@end table
+
+Note that if a fragment is included inside a conditional, then the
+condition applies to the entire contents of that fragment.
+
+Makefile fragments included this way are always distributed because
+they are needed to rebuild @file{Makefile.in}.
+
+Inside a fragment, the construct @code{%reldir%} is replaced with the
+directory of the fragment relative to the base @file{Makefile.am}.
+Similarly, @code{%canon_reldir%} is replaced with the canonicalized
+(@pxref{Canonicalization}) form of @code{%reldir%}. As a convenience,
+@code{%D%} is a synonym for @code{%reldir%}, and @code{%C%}
+is a synonym for @code{%canon_reldir%}.
+
+A special feature is that if the fragment is in the same directory as
+the base @file{Makefile.am} (i.e., @code{%reldir%} is @code{.}), then
+@code{%reldir%} and @code{%canon_reldir%} will expand to the empty
+string as well as eat, if present, a following slash or underscore
+respectively.
+
+Thus, a makefile fragment might look like this:
+
+@example
+bin_PROGRAMS += %reldir%/mumble
+%canon_reldir%_mumble_SOURCES = %reldir%/one.c
+@end example
+
+@node Conditionals
+@chapter Conditionals
+
+@cindex Conditionals
+
+Automake supports a simple type of conditionals.
+
+These conditionals are not the same as conditionals in
+GNU Make. Automake conditionals are checked at configure time by the
+@file{configure} script, and affect the translation from
+@file{Makefile.in} to @file{Makefile}. They are based on options passed
+to @file{configure} and on results that @file{configure} has discovered
+about the host system. GNU Make conditionals are checked at @command{make}
+time, and are based on variables passed to the make program or defined
+in the @file{Makefile}.
+
+Automake conditionals will work with any make program.
+
+@menu
+* Usage of Conditionals:: Declaring conditional content
+* Limits of Conditionals:: Enclosing complete statements
+@end menu
+
+@node Usage of Conditionals
+@section Usage of Conditionals
+
+@acindex AM_CONDITIONAL
+Before using a conditional, you must define it by using
+@code{AM_CONDITIONAL} in the @file{configure.ac} file (@pxref{Macros}).
+
+@defmac AM_CONDITIONAL (@var{conditional}, @var{condition})
+The conditional name, @var{conditional}, should be a simple string
+starting with a letter and containing only letters, digits, and
+underscores. It must be different from @samp{TRUE} and @samp{FALSE}
+that are reserved by Automake.
+
+The shell @var{condition} (suitable for use in a shell @code{if}
+statement) is evaluated when @command{configure} is run. Note that you
+must arrange for @emph{every} @code{AM_CONDITIONAL} to be invoked every
+time @command{configure} is run. If @code{AM_CONDITIONAL} is run
+conditionally (e.g., in a shell @code{if} statement), then the result
+will confuse @command{automake}.
+@end defmac
+
+@cindex @option{--enable-debug}, example
+@cindex Example conditional @option{--enable-debug}
+@cindex Conditional example, @option{--enable-debug}
+
+Conditionals typically depend upon options that the user provides to
+the @command{configure} script. Here is an example of how to write a
+conditional that is true if the user uses the @option{--enable-debug}
+option.
+
+@example
+AC_ARG_ENABLE([debug],
+[ --enable-debug Turn on debugging],
+[case "$@{enableval@}" in
+ yes) debug=true ;;
+ no) debug=false ;;
+ *) AC_MSG_ERROR([bad value $@{enableval@} for --enable-debug]) ;;
+esac],[debug=false])
+AM_CONDITIONAL([DEBUG], [test x$debug = xtrue])
+@end example
+
+Here is an example of how to use that conditional in @file{Makefile.am}:
+
+@cmindex if
+@cmindex endif
+@cmindex else
+
+@example
+if DEBUG
+DBG = debug
+else
+DBG =
+endif
+noinst_PROGRAMS = $(DBG)
+@end example
+
+This trivial example could also be handled using @code{EXTRA_PROGRAMS}
+(@pxref{Conditional Programs}).
+
+You may only test a single variable in an @code{if} statement, possibly
+negated using @samp{!}. The @code{else} statement may be omitted.
+Conditionals may be nested to any depth. You may specify an argument to
+@code{else} in which case it must be the negation of the condition used
+for the current @code{if}. Similarly you may specify the condition
+that is closed on the @code{endif} line:
+
+@example
+if DEBUG
+DBG = debug
+else !DEBUG
+DBG =
+endif !DEBUG
+@end example
+
+@noindent
+Unbalanced conditions are errors. The @code{if}, @code{else}, and
+@code{endif} statements should not be indented, i.e., start on column
+one.
+
+The @code{else} branch of the above two examples could be omitted,
+since assigning the empty string to an otherwise undefined variable
+makes no difference.
+
+@acindex AM_COND_IF
+In order to allow access to the condition registered by
+@code{AM_CONDITIONAL} inside @file{configure.ac}, and to allow
+conditional @code{AC_CONFIG_FILES}, @code{AM_COND_IF} may be used:
+
+@defmac AM_COND_IF (@var{conditional}, @ovar{if-true}, @ovar{if-false})
+If @var{conditional} is fulfilled, execute @var{if-true}, otherwise
+execute @var{if-false}. If either branch contains @code{AC_CONFIG_FILES},
+it will cause @command{automake} to output the rules for the respective
+files only for the given condition.
+@end defmac
+
+@code{AM_COND_IF} macros may be nested when m4 quotation is used
+properly (@pxref{M4 Quotation, ,, autoconf, The Autoconf Manual}).
+
+@cindex Example conditional @code{AC_CONFIG_FILES}
+@cindex @code{AC_CONFIG_FILES}, conditional
+
+Here is an example of how to define a conditional config file:
+
+@example
+AM_CONDITIONAL([SHELL_WRAPPER], [test "x$with_wrapper" = xtrue])
+AM_COND_IF([SHELL_WRAPPER],
+ [AC_CONFIG_FILES([wrapper:wrapper.in])])
+@end example
+
+@node Limits of Conditionals
+@section Limits of Conditionals
+
+Conditionals should enclose complete statements like variables or
+rules definitions. Automake cannot deal with conditionals used inside
+a variable definition, for instance, and is not even able to diagnose
+this situation. The following example would not work:
+
+@example
+# This syntax is not understood by Automake
+AM_CPPFLAGS = \
+ -DFEATURE_A \
+if WANT_DEBUG
+ -DDEBUG \
+endif
+ -DFEATURE_B
+@end example
+
+However the intended definition of @code{AM_CPPFLAGS} can be achieved
+with
+
+@example
+if WANT_DEBUG
+ DEBUGFLAGS = -DDEBUG
+endif
+AM_CPPFLAGS = -DFEATURE_A $(DEBUGFLAGS) -DFEATURE_B
+@end example
+
+@noindent
+or
+
+@example
+AM_CPPFLAGS = -DFEATURE_A
+if WANT_DEBUG
+AM_CPPFLAGS += -DDEBUG
+endif
+AM_CPPFLAGS += -DFEATURE_B
+@end example
+
+More details and examples of conditionals are described alongside
+various Automake features in this manual (@pxref{Conditional
+Subdirectories}, @pxref{Conditional Sources}, @pxref{Conditional
+Programs}, @pxref{Conditional Libtool Libraries}, @pxref{Conditional
+Libtool Sources}).
+
+@node Silencing Make
+@chapter Silencing @command{make}
+
+@cindex Silent @command{make}
+@cindex Silencing @command{make}
+@cindex Silent rules
+@cindex Silent @command{make} rules
+
+@menu
+* Make verbosity:: Make is verbose by default
+* Tricks For Silencing Make:: Standard and generic ways to silence make
+* Automake Silent Rules:: How Automake can help in silencing make
+@end menu
+
+@node Make verbosity
+@section Make is verbose by default
+
+Normally, when executing the set of rules associated with a target,
+@command{make} prints each rule before it is executed. This behaviour,
+while having been in place for a long time, and being even mandated by
+the POSIX standard, starkly violates the ``silence is golden'' UNIX
+principle@footnote{See also
+@uref{http://catb.org/~esr/writings/taoup/html/ch11s09.html}.}:
+
+@quotation
+When a program has nothing interesting or surprising to say, it should
+say nothing. Well-behaved Unix programs do their jobs unobtrusively,
+with a minimum of fuss and bother. Silence is golden.
+@end quotation
+
+In fact, while such verbosity of @command{make} can theoretically be
+useful to track bugs and understand reasons of failures right away, it
+can also hide warning and error messages from @command{make}-invoked
+tools, drowning them in a flood of uninteresting and seldom useful
+messages, and thus allowing them to go easily undetected.
+
+This problem can be very annoying, especially for developers, who usually
+know quite well what's going on behind the scenes, and for whom the
+verbose output from @command{make} ends up being mostly noise that hampers
+the easy detection of potentially important warning messages.
+
+@node Tricks For Silencing Make
+@section Standard and generic ways to silence make
+
+Here we describe some common idioms/tricks to obtain a quieter make
+output, with their relative advantages and drawbacks. In the next
+section (@ref{Automake Silent Rules}) we'll see how Automake can help
+in this respect, providing more elaborate and flexible idioms.
+
+@itemize @bullet
+
+@item @command{make -s}
+
+This simply causes @command{make} not to print @emph{any} rule before
+executing it.
+
+The @option{-s} flag is mandated by POSIX, universally supported, and
+its purpose and function are easy to understand.
+
+But it also has its serious limitations too. First of all, it embodies
+an ``all or nothing'' strategy, i.e., either everything is silenced, or
+nothing is; this lack of granularity can sometimes be a fatal flaw.
+Moreover, when the @option{-s} flag is used, the @command{make} output
+might turn out to be too much terse; in case of errors, the user won't
+be able to easily see what rule or command have caused them, or even,
+in case of tools with poor error reporting, what the errors were!
+
+@item @command{make >/dev/null || make}
+
+Apparently, this perfectly obeys the ``silence is golden'' rule: warnings
+from stderr are passed through, output reporting is done only in case of
+error, and in that case it should provide a verbose-enough report to allow
+an easy determination of the error location and causes.
+
+However, calling @command{make} two times in a row might hide errors
+(especially intermittent ones), or subtly change the expected semantic
+of the @command{make} calls --- things these which can clearly make
+debugging and error assessment very difficult.
+
+@item @command{make --no-print-directory}
+
+This is GNU @command{make} specific. When called with the
+@option{--no-print-directory} option, GNU @command{make} will disable
+printing of the working directory by invoked sub-@command{make}s (the
+well-known ``@i{Entering/Leaving directory ...}'' messages). This helps
+to decrease the verbosity of the output, but experience has shown that
+it can also often render debugging considerably harder in projects using
+deeply-nested @command{make} recursion.
+
+As an aside, notice that the @option{--no-print-directory} option is
+automatically activated if the @option{-s} flag is used.
+
+@c TODO: Other tricks?
+@c TODO: Maybe speak about the @code{.SILENT} target?
+@c TODO: - Pros: More granularity on what to silence.
+@c TODO: - Cons: No easy way to temporarily override.
+
+@end itemize
+
+@node Automake Silent Rules
+@section How Automake can help in silencing make
+
+The tricks and idioms for silencing @command{make} described in the
+previous section can be useful from time to time, but we've seen that
+they all have their serious drawbacks and limitations. That's why
+automake provides support for a more advanced and flexible way of
+obtaining quieter output from @command{make} (for most rules at least).
+
+To give the gist of what Automake can do in this respect, here is a simple
+comparison between a typical @command{make} output (where silent rules
+are disabled) and one with silent rules enabled:
+
+@example
+% @kbd{cat Makefile.am}
+bin_PROGRAMS = foo
+foo_SOURCES = main.c func.c
+% @kbd{cat main.c}
+int main (void) @{ return func (); @} /* func used undeclared */
+% @kbd{cat func.c}
+int func (void) @{ int i; return i; @} /* i used uninitialized */
+
+@i{The make output is by default very verbose. This causes warnings
+from the compiler to be somewhat hidden, and not immediate to spot.}
+% @kbd{make CFLAGS=-Wall}
+gcc -DPACKAGE_NAME=\"foo\" -DPACKAGE_TARNAME=\"foo\" ...
+-DPACKAGE_STRING=\"foo\ 1.0\" -DPACKAGE_BUGREPORT=\"\" ...
+-DPACKAGE=\"foo\" -DVERSION=\"1.0\" -I. -Wall -MT main.o
+-MD -MP -MF .deps/main.Tpo -c -o main.o main.c
+main.c: In function ‘main’:
+main.c:3:3: warning: implicit declaration of function ‘func’
+mv -f .deps/main.Tpo .deps/main.Po
+gcc -DPACKAGE_NAME=\"foo\" -DPACKAGE_TARNAME=\"foo\" ...
+-DPACKAGE_STRING=\"foo\ 1.0\" -DPACKAGE_BUGREPORT=\"\" ...
+-DPACKAGE=\"foo\" -DVERSION=\"1.0\" -I. -Wall -MT func.o
+-MD -MP -MF .deps/func.Tpo -c -o func.o func.c
+func.c: In function ‘func’:
+func.c:4:3: warning: ‘i’ used uninitialized in this function
+mv -f .deps/func.Tpo .deps/func.Po
+gcc -Wall -o foo main.o func.o
+
+@i{Clean up, so that we we can rebuild everything from scratch.}
+% @kbd{make clean}
+test -z "foo" || rm -f foo
+rm -f *.o
+
+@i{Silent rules enabled: the output is minimal but informative. In
+particular, the warnings from the compiler stick out very clearly.}
+% @kbd{make V=0 CFLAGS=-Wall}
+ CC main.o
+main.c: In function ‘main’:
+main.c:3:3: warning: implicit declaration of function ‘func’
+ CC func.o
+func.c: In function ‘func’:
+func.c:4:3: warning: ‘i’ used uninitialized in this function
+ CCLD foo
+@end example
+
+@cindex silent rules and libtool
+Also, in projects using @command{libtool}, the use of silent rules can
+automatically enable the @command{libtool}'s @option{--silent} option:
+
+@example
+% @kbd{cat Makefile.am}
+lib_LTLIBRARIES = libx.la
+
+% @kbd{make # Both make and libtool are verbose by default.}
+...
+libtool: compile: gcc -DPACKAGE_NAME=\"foo\" ... -DLT_OBJDIR=\".libs/\"
+ -I. -g -O2 -MT libx.lo -MD -MP -MF .deps/libx.Tpo -c libx.c -fPIC
+ -DPIC -o .libs/libx.o
+mv -f .deps/libx.Tpo .deps/libx.Plo
+/bin/sh ./libtool --tag=CC --mode=link gcc -g -O2 -o libx.la -rpath
+ /usr/local/lib libx.lo
+libtool: link: gcc -shared .libs/libx.o -Wl,-soname -Wl,libx.so.0
+ -o .libs/libx.so.0.0.0
+libtool: link: cd .libs && rm -f libx.so && ln -s libx.so.0.0.0 libx.so
+...
+
+% @kbd{make V=0}
+ CC libx.lo
+ CCLD libx.la
+@end example
+
+For Automake-generated @file{Makefile}s, the user may influence the
+verbosity at @command{configure} run time as well as at @command{make}
+run time:
+
+@itemize @bullet
+@item
+@opindex --enable-silent-rules
+@opindex --disable-silent-rules
+Passing @option{--enable-silent-rules} to @command{configure} will cause
+build rules to be less verbose; the option @option{--disable-silent-rules}
+will cause normal verbose output.
+@item
+@vindex @code{V}
+At @command{make} run time, the default chosen at @command{configure}
+time may be overridden: @code{make V=1} will produce verbose output,
+@code{make V=0} less verbose output.
+@end itemize
+
+@cindex default verbosity for silent rules
+Note that silent rules are @emph{disabled} by default; the user must
+enable them explicitly at either @command{configure} run time or at
+@command{make} run time. We think that this is a good policy, since
+it provides the casual user with enough information to prepare a good
+bug report in case anything breaks.
+
+Still, notwithstanding the rationales above, a developer who really
+wants to make silent rules enabled by default in his own package can
+do so by calling @code{AM_SILENT_RULES([yes])} in @file{configure.ac}.
+
+@c Keep in sync with silent-configsite.sh
+Users who prefer to have silent rules enabled by default can edit their
+@file{config.site} file to make the variable @code{enable_silent_rules}
+default to @samp{yes}. This should still allow disabling silent rules
+at @command{configure} time and at @command{make} time.
+
+@c FIXME: there's really a need to specify this explicitly?
+For portability to different @command{make} implementations, package authors
+are advised to not set the variable @code{V} inside the @file{Makefile.am}
+file, to allow the user to override the value for subdirectories as well.
+
+To work at its best, the current implementation of this feature normally
+uses nested variable expansion @samp{$(@var{var1}$(V))}, a @file{Makefile}
+feature that is not required by POSIX 2008 but is widely supported in
+practice. On the rare @command{make} implementations that do not support
+nested variable expansion, whether rules are silent is always determined at
+configure time, and cannot be overridden at make time. Future versions of
+POSIX are likely to require nested variable expansion, so this minor
+limitation should go away with time.
+
+@vindex @code{AM_V_GEN}
+@vindex @code{AM_V_at}
+@vindex @code{AM_DEFAULT_VERBOSITY}
+@vindex @code{AM_V}
+@vindex @code{AM_DEFAULT_V}
+To extend the silent mode to your own rules, you have few choices:
+
+@itemize @bullet
+
+@item
+You can use the predefined variable @code{AM_V_GEN} as a prefix to
+commands that should output a status line in silent mode, and
+@code{AM_V_at} as a prefix to commands that should not output anything
+in silent mode. When output is to be verbose, both of these variables
+will expand to the empty string.
+
+@item
+You can silence a recipe unconditionally with @code{@@}, and then use
+the predefined variable @code{AM_V_P} to know whether make is being run
+in silent or verbose mode, adjust the verbose information your recipe
+displays accordingly:
+
+@example
+generate-headers:
+ @set -e; \
+ ... [commands defining a shell variable '$headers'] ...; \
+ if $(AM_V_P); then set -x; else echo " GEN [headers]"; fi; \
+ rm -f $$headers && generate-header --flags $$headers
+@end example
+
+@item
+You can add your own variables, so strings of your own choice are shown.
+The following snippet shows how you would define your own equivalent of
+@code{AM_V_GEN}:
+
+@example
+pkg_verbose = $(pkg_verbose_@@AM_V@@)
+pkg_verbose_ = $(pkg_verbose_@@AM_DEFAULT_V@@)
+pkg_verbose_0 = @@echo PKG-GEN $@@;
+
+foo: foo.in
+ $(pkg_verbose)cp $(srcdir)/foo.in $@@
+@end example
+
+@end itemize
+
+As a final note, observe that, even when silent rules are enabled,
+the @option{--no-print-directory} option is still required with GNU
+@command{make} if the ``@i{Entering/Leaving directory ...}'' messages
+are to be disabled.
+
+@node Gnits
+@chapter The effect of @option{--gnu} and @option{--gnits}
+
+@cindex @option{--gnu}, required files
+@cindex @option{--gnu}, complete description
+
+The @option{--gnu} option (or @option{gnu} in the
+@code{AUTOMAKE_OPTIONS} variable) causes @command{automake} to check
+the following:
+
+@itemize @bullet
+@item
+The files @file{INSTALL}, @file{NEWS}, @file{README}, @file{AUTHORS},
+and @file{ChangeLog}, plus one of @file{COPYING.LIB}, @file{COPYING.LESSER}
+or @file{COPYING}, are required at the topmost directory of the package.
+
+If the @option{--add-missing} option is given, @command{automake} will
+add a generic version of the @file{INSTALL} file as well as the
+@file{COPYING} file containing the text of the current version of the
+GNU General Public License existing at the time of this Automake release
+(version 3 as this is written, @uref{https://www.gnu.org/@/copyleft/@/gpl.html}).
+However, an existing @file{COPYING} file will never be overwritten by
+@command{automake}.
+
+@item
+The options @option{no-installman} and @option{no-installinfo} are
+prohibited.
+@end itemize
+
+Note that this option will be extended in the future to do even more
+checking; it is advisable to be familiar with the precise requirements
+of the GNU standards. Also, @option{--gnu} can require certain
+non-standard GNU programs to exist for use by various maintainer-only
+rules; for instance, in the future @command{pathchk} might be required for
+@samp{make dist}.
+
+@cindex @option{--gnits}, complete description
+
+The @option{--gnits} option does everything that @option{--gnu} does, and
+checks the following as well:
+
+@itemize @bullet
+@item
+@samp{make installcheck} will check to make sure that the @option{--help}
+and @option{--version} really print a usage message and a version string,
+respectively. This is the @option{std-options} option (@pxref{Options}).
+
+@item
+@samp{make dist} will check to make sure the @file{NEWS} file has been
+updated to the current version.
+
+@item
+@code{VERSION} is checked to make sure its format complies with Gnits
+standards.
+@c FIXME xref when standards are finished
+
+@item
+@cindex @file{README-alpha}
+If @code{VERSION} indicates that this is an alpha release, and the file
+@file{README-alpha} appears in the topmost directory of a package, then
+it is included in the distribution. This is done in @option{--gnits}
+mode, and no other, because this mode is the only one where version
+number formats are constrained, and hence the only mode where Automake
+can automatically determine whether @file{README-alpha} should be
+included.
+
+@item
+The file @file{THANKS} is required.
+@end itemize
+
+
+@node Not Enough
+@chapter When Automake Isn't Enough
+
+In some situations, where Automake is not up to one task, one has to
+resort to handwritten rules or even handwritten @file{Makefile}s.
+
+@menu
+* Extending:: Adding new rules or overriding existing ones.
+* Third-Party Makefiles:: Integrating Non-Automake @file{Makefile}s.
+@end menu
+
+@node Extending
+@section Extending Automake Rules
+
+With some minor exceptions (for example @code{_PROGRAMS} variables,
+@code{TESTS}, or @code{XFAIL_TESTS}) being rewritten to append
+@samp{$(EXEEXT)}), the contents of a @file{Makefile.am} is copied to
+@file{Makefile.in} verbatim.
+
+@cindex copying semantics
+
+These copying semantics mean that many problems can be worked around
+by simply adding some @command{make} variables and rules to
+@file{Makefile.am}. Automake will ignore these additions.
+
+@cindex conflicting definitions
+@cindex rules, conflicting
+@cindex variables, conflicting
+@cindex definitions, conflicts
+
+Since a @file{Makefile.in} is built from data gathered from three
+different places (@file{Makefile.am}, @file{configure.ac}, and
+@command{automake} itself), it is possible to have conflicting
+definitions of rules or variables. When building @file{Makefile.in}
+the following priorities are respected by @command{automake} to ensure
+the user always has the last word:
+
+@itemize
+@item
+User defined variables in @file{Makefile.am} have priority over
+variables @code{AC_SUBST}ed from @file{configure.ac}, and
+@code{AC_SUBST}ed variables have priority over
+@command{automake}-defined variables.
+@item
+As far as rules are concerned, a user-defined rule overrides any
+@command{automake}-defined rule for the same target.
+@end itemize
+
+@cindex overriding rules
+@cindex overriding semantics
+@cindex rules, overriding
+
+These overriding semantics make it possible to fine tune some default
+settings of Automake, or replace some of its rules. Overriding
+Automake rules is often inadvisable, particularly in the topmost
+directory of a package with subdirectories. The @option{-Woverride}
+option (@pxref{automake Invocation}) comes in handy to catch overridden
+definitions.
+
+Note that Automake does not make any distinction between rules with
+commands and rules that only specify dependencies. So it is not
+possible to append new dependencies to an @command{automake}-defined
+target without redefining the entire rule.
+
+@cindex @option{-local} targets
+@cindex local targets
+
+However, various useful targets have a @samp{-local} version you can
+specify in your @file{Makefile.am}. Automake will supplement the
+standard target with these user-supplied targets.
+
+@trindex all
+@trindex all-local
+@trindex info
+@trindex info-local
+@trindex dvi
+@trindex dvi-local
+@trindex ps
+@trindex ps-local
+@trindex pdf
+@trindex pdf-local
+@trindex html
+@trindex html-local
+@trindex check
+@trindex check-local
+@trindex install
+@trindex install-data
+@trindex install-data-local
+@trindex install-dvi
+@trindex install-dvi-local
+@trindex install-exec
+@trindex install-exec-local
+@trindex install-html
+@trindex install-html-local
+@trindex install-info
+@trindex install-info-local
+@trindex install-pdf
+@trindex install-pdf-local
+@trindex install-ps
+@trindex install-ps-local
+@trindex uninstall
+@trindex uninstall-local
+@trindex mostlyclean
+@trindex mostlyclean-local
+@trindex clean
+@trindex clean-local
+@trindex distclean
+@trindex distclean-local
+@trindex installdirs
+@trindex installdirs-local
+@trindex installcheck
+@trindex installcheck-local
+
+The targets that support a local version are @code{all}, @code{info},
+@code{dvi}, @code{ps}, @code{pdf}, @code{html}, @code{check},
+@code{install-data}, @code{install-dvi}, @code{install-exec},
+@code{install-html}, @code{install-info}, @code{install-pdf},
+@code{install-ps}, @code{uninstall}, @code{installdirs},
+@code{installcheck} and the various @code{clean} targets
+(@code{mostlyclean}, @code{clean}, @code{distclean}, and
+@code{maintainer-clean}).
+
+Note that there are no @code{uninstall-exec-local} or
+@code{uninstall-data-local} targets; just use @code{uninstall-local}.
+It doesn't make sense to uninstall just data or just executables.
+
+For instance, here is one way to erase a subdirectory during
+@samp{make clean} (@pxref{Clean}).
+
+@example
+clean-local:
+ -rm -rf testSubDir
+@end example
+
+You may be tempted to use @code{install-data-local} to install a file
+to some hard-coded location, but you should avoid this
+(@pxref{Hard-Coded Install Paths}).
+
+With the @code{-local} targets, there is no particular guarantee of
+execution order; typically, they are run early, but with parallel
+make, there is no way to be sure of that.
+
+@cindex @option{-hook} targets
+@cindex hook targets
+@trindex install-data-hook
+@trindex install-exec-hook
+@trindex uninstall-hook
+@trindex dist-hook
+
+In contrast, some rules also have a way to run another rule, called a
+@dfn{hook}; hooks are always executed after the main rule's work is done.
+The hook is named after the principal target, with @samp{-hook} appended.
+The targets allowing hooks are @code{install-data},
+@code{install-exec}, @code{uninstall}, @code{dist}, and
+@code{distcheck}.
+
+For instance, here is how to create a hard link to an installed program:
+
+@example
+install-exec-hook:
+ ln $(DESTDIR)$(bindir)/program$(EXEEXT) \
+ $(DESTDIR)$(bindir)/proglink$(EXEEXT)
+@end example
+
+Although cheaper and more portable than symbolic links, hard links
+will not work everywhere (for instance, OS/2 does not have
+@command{ln}). Ideally you should fall back to @samp{cp -p} when
+@command{ln} does not work. An easy way, if symbolic links are
+acceptable to you, is to add @code{AC_PROG_LN_S} to
+@file{configure.ac} (@pxref{Particular Programs, , Particular Program
+Checks, autoconf, The Autoconf Manual}) and use @samp{$(LN_S)} in
+@file{Makefile.am}.
+
+@cindex versioned binaries, installing
+@cindex installing versioned binaries
+@cindex @code{LN_S} example
+For instance, here is how you could install a versioned copy of a
+program using @samp{$(LN_S)}:
+
+@c Keep in sync with insthook.sh
+@example
+install-exec-hook:
+ cd $(DESTDIR)$(bindir) && \
+ mv -f prog$(EXEEXT) prog-$(VERSION)$(EXEEXT) && \
+ $(LN_S) prog-$(VERSION)$(EXEEXT) prog$(EXEEXT)
+@end example
+
+Note that we rename the program so that a new version will erase the
+symbolic link, not the real binary. Also we @command{cd} into the
+destination directory in order to create relative links.
+
+When writing @code{install-exec-hook} or @code{install-data-hook},
+please bear in mind that the exec/data distinction is based on the
+installation directory, not on the primary used (@pxref{The Two Parts of
+Install}).
+@c Keep in sync with primary-prefix-couples-documented-valid.sh
+So a @code{foo_SCRIPTS} will be installed by
+@code{install-data}, and a @code{barexec_SCRIPTS} will be installed by
+@code{install-exec}. You should define your hooks consequently.
+
+@c FIXME should include discussion of variables you can use in these
+@c rules
+
+@node Third-Party Makefiles
+@section Third-Party @file{Makefile}s
+
+@cindex Third-party packages, interfacing with
+@cindex Interfacing with third-party packages
+
+In most projects all @file{Makefile}s are generated by Automake. In
+some cases, however, projects need to embed subdirectories with
+handwritten @file{Makefile}s. For instance, one subdirectory could be
+a third-party project with its own build system, not using Automake.
+
+It is possible to list arbitrary directories in @code{SUBDIRS} or
+@code{DIST_SUBDIRS} provided each of these directories has a
+@file{Makefile} that recognizes all the following recursive targets.
+
+@cindex recursive targets and third-party @file{Makefile}s
+When a user runs one of these targets, that target is run recursively
+in all subdirectories. This is why it is important that even
+third-party @file{Makefile}s support them.
+
+@table @code
+@item all
+Compile the entire package. This is the default target in
+Automake-generated @file{Makefile}s, but it does not need to be the
+default in third-party @file{Makefile}s.
+
+@item distdir
+@trindex distdir
+@vindex distdir
+@vindex top_distdir
+Copy files to distribute into @samp{$(distdir)}, before a tarball is
+constructed. Of course this target is not required if the
+@option{no-dist} option (@pxref{Options}) is used.
+
+The variables @samp{$(top_distdir)} and @samp{$(distdir)}
+(@pxref{The dist Hook}) will be passed from the outer package to the subpackage
+when the @code{distdir} target is invoked. These two variables have
+been adjusted for the directory that is being recursed into, so they
+are ready to use.
+
+@item install
+@itemx install-data
+@itemx install-exec
+@itemx uninstall
+Install or uninstall files (@pxref{Install}).
+
+@item install-dvi
+@itemx install-html
+@itemx install-info
+@itemx install-ps
+@itemx install-pdf
+Install only some specific documentation format (@pxref{Texinfo}).
+
+@item installdirs
+Create install directories, but do not install any files.
+
+@item check
+@itemx installcheck
+Check the package (@pxref{Tests}).
+
+@item mostlyclean
+@itemx clean
+@itemx distclean
+@itemx maintainer-clean
+Cleaning rules (@pxref{Clean}).
+
+@item dvi
+@itemx pdf
+@itemx ps
+@itemx info
+@itemx html
+Build the documentation in various formats (@pxref{Texinfo}).
+
+@item tags
+@itemx ctags
+Build @file{TAGS} and @file{CTAGS} (@pxref{Tags}).
+@end table
+
+If you have ever used Gettext in a project, this is a good example of
+how third-party @file{Makefile}s can be used with Automake. The
+@file{Makefile}s @command{gettextize} puts in the @file{po/} and
+@file{intl/} directories are handwritten @file{Makefile}s that
+implement all of these targets. That way they can be added to
+@code{SUBDIRS} in Automake packages.
+
+Directories that are only listed in @code{DIST_SUBDIRS} but not in
+@code{SUBDIRS} need only the @code{distclean},
+@code{maintainer-clean}, and @code{distdir} rules (@pxref{Conditional
+Subdirectories}).
+
+Usually, many of these rules are irrelevant to the third-party
+subproject, but they are required for the whole package to work. It's
+OK to have a rule that does nothing, so if you are integrating a
+third-party project with no documentation or tag support, you could
+simply augment its @file{Makefile} as follows:
+
+@example
+EMPTY_AUTOMAKE_TARGETS = dvi pdf ps info html tags ctags
+.PHONY: $(EMPTY_AUTOMAKE_TARGETS)
+$(EMPTY_AUTOMAKE_TARGETS):
+@end example
+
+Another aspect of integrating third-party build systems is whether
+they support VPATH builds (@pxref{VPATH Builds}). Obviously if the
+subpackage does not support VPATH builds the whole package will not
+support VPATH builds. This in turns means that @samp{make distcheck}
+will not work, because it relies on VPATH builds. Some people can
+live without this (actually, many Automake users have never heard of
+@samp{make distcheck}). Other people may prefer to revamp the
+existing @file{Makefile}s to support VPATH@. Doing so does not
+necessarily require Automake, only Autoconf is needed (@pxref{Build
+Directories, , Build Directories, autoconf, The Autoconf Manual}).
+The necessary substitutions: @samp{@@srcdir@@}, @samp{@@top_srcdir@@},
+and @samp{@@top_builddir@@} are defined by @file{configure} when it
+processes a @file{Makefile} (@pxref{Preset Output Variables, , Preset
+Output Variables, autoconf, The Autoconf Manual}), they are not
+computed by the Makefile like the aforementioned @samp{$(distdir)} and
+@samp{$(top_distdir)} variables.
+
+It is sometimes inconvenient to modify a third-party @file{Makefile}
+to introduce the above required targets. For instance, one may want to
+keep the third-party sources untouched to ease upgrades to new
+versions.
+
+@cindex @file{GNUmakefile} including @file{Makefile}
+Here are two other ideas. If GNU make is assumed, one possibility is
+to add to that subdirectory a @file{GNUmakefile} that defines the
+required targets and includes the third-party @file{Makefile}. For
+this to work in VPATH builds, @file{GNUmakefile} must lie in the build
+directory; the easiest way to do this is to write a
+@file{GNUmakefile.in} instead, and have it processed with
+@code{AC_CONFIG_FILES} from the outer package. For example if we
+assume @file{Makefile} defines all targets except the documentation
+targets, and that the @code{check} target is actually called
+@code{test}, we could write @file{GNUmakefile} (or
+@file{GNUmakefile.in}) like this:
+
+@example
+# First, include the real Makefile
+include Makefile
+# Then, define the other targets needed by Automake Makefiles.
+.PHONY: dvi pdf ps info html check
+dvi pdf ps info html:
+check: test
+@end example
+
+@cindex Proxy @file{Makefile} for third-party packages
+A similar idea that does not use @code{include} is to write a proxy
+@file{Makefile} that dispatches rules to the real @file{Makefile},
+either with @samp{$(MAKE) -f Makefile.real $(AM_MAKEFLAGS) target} (if
+it's OK to rename the original @file{Makefile}) or with @samp{cd
+subdir && $(MAKE) $(AM_MAKEFLAGS) target} (if it's OK to store the
+subdirectory project one directory deeper). The good news is that
+this proxy @file{Makefile} can be generated with Automake. All we
+need are @option{-local} targets (@pxref{Extending}) that perform the
+dispatch. Of course the other Automake features are available, so you
+could decide to let Automake perform distribution or installation.
+Here is a possible @file{Makefile.am}:
+
+@example
+all-local:
+ cd subdir && $(MAKE) $(AM_MAKEFLAGS) all
+check-local:
+ cd subdir && $(MAKE) $(AM_MAKEFLAGS) test
+clean-local:
+ cd subdir && $(MAKE) $(AM_MAKEFLAGS) clean
+
+# Assuming the package knows how to install itself
+install-data-local:
+ cd subdir && $(MAKE) $(AM_MAKEFLAGS) install-data
+install-exec-local:
+ cd subdir && $(MAKE) $(AM_MAKEFLAGS) install-exec
+uninstall-local:
+ cd subdir && $(MAKE) $(AM_MAKEFLAGS) uninstall
+
+# Distribute files from here.
+EXTRA_DIST = subdir/Makefile subdir/program.c ...
+@end example
+
+Pushing this idea to the extreme, it is also possible to ignore the
+subproject build system and build everything from this proxy
+@file{Makefile.am}. This might sound very sensible if you need VPATH
+builds but the subproject does not support them.
+
+@node Distributing
+@chapter Distributing @file{Makefile.in}s
+
+Automake places no restrictions on the distribution of the resulting
+@file{Makefile.in}s. We still encourage software authors to
+distribute their work under terms like those of the GPL, but doing so
+is not required to use Automake.
+
+Some of the files that can be automatically installed via the
+@option{--add-missing} switch do fall under the GPL@. However, these also
+have a special exception allowing you to distribute them with your
+package, regardless of the licensing you choose.
+
+
+@node API Versioning
+@chapter Automake API Versioning
+
+New Automake releases usually include bug fixes and new features.
+Unfortunately they may also introduce new bugs and incompatibilities.
+This makes four reasons why a package may require a particular Automake
+version.
+
+Things get worse when maintaining a large tree of packages, each one
+requiring a different version of Automake. In the past, this meant that
+any developer (and sometimes users) had to install several versions of
+Automake in different places, and switch @samp{$PATH} appropriately for
+each package.
+
+Starting with version 1.6, Automake installs versioned binaries. This
+means you can install several versions of Automake in the same
+@samp{$prefix}, and can select an arbitrary Automake version by running
+@command{automake-1.6} or @command{automake-1.7} without juggling with
+@samp{$PATH}. Furthermore, @file{Makefile}'s generated by Automake 1.6
+will use @command{automake-1.6} explicitly in their rebuild rules.
+
+The number @samp{1.6} in @command{automake-1.6} is Automake's API version,
+not Automake's version. If a bug fix release is made, for instance
+Automake 1.6.1, the API version will remain 1.6. This means that a
+package that works with Automake 1.6 should also work with 1.6.1; after
+all, this is what people expect from bug fix releases.
+
+If your package relies on a feature or a bug fix introduced in
+a release, you can pass this version as an option to Automake to ensure
+older releases will not be used. For instance, use this in your
+@file{configure.ac}:
+
+@example
+ AM_INIT_AUTOMAKE([1.6.1]) dnl Require Automake 1.6.1 or better.
+@end example
+
+@noindent
+or, in a particular @file{Makefile.am}:
+
+@example
+ AUTOMAKE_OPTIONS = 1.6.1 # Require Automake 1.6.1 or better.
+@end example
+
+@noindent
+Automake will print an error message if its version is
+older than the requested version.
+
+
+@heading What is in the API
+
+Automake's programming interface is not easy to define. Basically it
+should include at least all @strong{documented} variables and targets
+that a @file{Makefile.am} author can use, any behavior associated with
+them (e.g., the places where @samp{-hook}'s are run), the command line
+interface of @command{automake} and @command{aclocal}, @dots{}
+
+@heading What is not in the API
+
+Every undocumented variable, target, or command line option, is not part
+of the API@. You should avoid using them, as they could change from one
+version to the other (even in bug fix releases, if this helps to fix a
+bug).
+
+If it turns out you need to use such an undocumented feature, contact
+@email{automake@@gnu.org} and try to get it documented and exercised by
+the test-suite.
+
+@node Upgrading
+@chapter Upgrading a Package to a Newer Automake Version
+
+Automake maintains three kind of files in a package.
+
+@itemize
+@item @file{aclocal.m4}
+@item @file{Makefile.in}s
+@item auxiliary tools like @file{install-sh} or @file{py-compile}
+@end itemize
+
+@file{aclocal.m4} is generated by @command{aclocal} and contains some
+Automake-supplied M4 macros. Auxiliary tools are installed by
+@samp{automake --add-missing} when needed. @file{Makefile.in}s are
+built from @file{Makefile.am} by @command{automake}, and rely on the
+definitions of the M4 macros put in @file{aclocal.m4} as well as the
+behavior of the auxiliary tools installed.
+
+Because all of these files are closely related, it is important to
+regenerate all of them when upgrading to a newer Automake release.
+The usual way to do that is
+
+@example
+aclocal # with any option needed (such a -I m4)
+autoconf
+automake --add-missing --force-missing
+@end example
+
+@noindent
+or more conveniently:
+
+@example
+autoreconf -vfi
+@end example
+
+The use of @option{--force-missing} ensures that auxiliary tools will be
+overridden by new versions (@pxref{automake Invocation}).
+
+It is important to regenerate all of these files each time Automake is
+upgraded, even between bug fixes releases. For instance, it is not
+unusual for a bug fix to involve changes to both the rules generated
+in @file{Makefile.in} and the supporting M4 macros copied to
+@file{aclocal.m4}.
+
+Presently @command{automake} is able to diagnose situations where
+@file{aclocal.m4} has been generated with another version of
+@command{aclocal}. However it never checks whether auxiliary scripts
+are up-to-date. In other words, @command{automake} will tell you when
+@command{aclocal} needs to be rerun, but it will never diagnose a
+missing @option{--force-missing}.
+
+Before upgrading to a new major release, it is a good idea to read the
+file @file{NEWS}. This file lists all changes between releases: new
+features, obsolete constructs, known incompatibilities, and
+workarounds.
+
+@node FAQ
+@chapter Frequently Asked Questions about Automake
+
+This chapter covers some questions that often come up on the mailing
+lists.
+
+@menu
+* CVS:: CVS and generated files
+* maintainer-mode:: missing and AM_MAINTAINER_MODE
+* Wildcards:: Why doesn't Automake support wildcards?
+* Limitations on File Names:: Limitations on source and installed file names
+* Errors with distclean:: Files left in build directory after distclean
+* Flag Variables Ordering:: CFLAGS vs.@: AM_CFLAGS vs.@: mumble_CFLAGS
+* Renamed Objects:: Why are object files sometimes renamed?
+* Per-Object Flags:: How to simulate per-object flags?
+* Multiple Outputs:: Writing rules for tools with many output files
+* Hard-Coded Install Paths:: Installing to hard-coded locations
+* Debugging Make Rules:: Strategies when things don't work as expected
+* Reporting Bugs:: Feedback on bugs and feature requests
+@end menu
+
+@node CVS
+@section CVS and generated files
+
+@subheading Background: distributed generated Files
+@cindex generated files, distributed
+@cindex rebuild rules
+
+Packages made with Autoconf and Automake ship with some generated
+files like @file{configure} or @file{Makefile.in}. These files were
+generated on the developer's machine and are distributed so that
+end-users do not have to install the maintainer tools required to
+rebuild them. Other generated files like Lex scanners, Yacc parsers,
+or Info documentation, are usually distributed on similar grounds.
+
+Automake output rules in @file{Makefile}s to rebuild these files. For
+instance, @command{make} will run @command{autoconf} to rebuild
+@file{configure} whenever @file{configure.ac} is changed. This makes
+development safer by ensuring a @file{configure} is never out-of-date
+with respect to @file{configure.ac}.
+
+As generated files shipped in packages are up-to-date, and because
+@command{tar} preserves times-tamps, these rebuild rules are not
+triggered when a user unpacks and builds a package.
+
+@subheading Background: CVS and Timestamps
+@cindex timestamps and CVS
+@cindex CVS and timestamps
+
+Unless you use CVS keywords (in which case files must be updated at
+commit time), CVS preserves timestamp during @samp{cvs commit} and
+@samp{cvs import -d} operations.
+
+When you check out a file using @samp{cvs checkout} its timestamp is
+set to that of the revision that is being checked out.
+
+However, during @command{cvs update}, files will have the date of the
+update, not the original timestamp of this revision. This is meant to
+make sure that @command{make} notices sources files have been updated.
+
+This timestamp shift is troublesome when both sources and generated
+files are kept under CVS@. Because CVS processes files in lexical
+order, @file{configure.ac} will appear newer than @file{configure}
+after a @command{cvs update} that updates both files, even if
+@file{configure} was newer than @file{configure.ac} when it was
+checked in. Calling @command{make} will then trigger a spurious rebuild
+of @file{configure}.
+
+@subheading Living with CVS in Autoconfiscated Projects
+@cindex CVS and generated files
+@cindex generated files and CVS
+
+There are basically two clans amongst maintainers: those who keep all
+distributed files under CVS, including generated files, and those who
+keep generated files @emph{out} of CVS.
+
+@subsubheading All Files in CVS
+
+@itemize @bullet
+@item
+The CVS repository contains all distributed files so you know exactly
+what is distributed, and you can checkout any prior version entirely.
+
+@item
+Maintainers can see how generated files evolve (for instance, you can
+see what happens to your @file{Makefile.in}s when you upgrade Automake
+and make sure they look OK).
+
+@item
+Users do not need the autotools to build a checkout of the project, it
+works just like a released tarball.
+
+@item
+If users use @command{cvs update} to update their copy, instead of
+@command{cvs checkout} to fetch a fresh one, timestamps will be
+inaccurate. Some rebuild rules will be triggered and attempt to
+run developer tools such as @command{autoconf} or @command{automake}.
+
+Calls to such tools are all wrapped into a call to the @command{missing}
+script discussed later (@pxref{maintainer-mode}), so that the user will
+see more descriptive warnings about missing or out-of-date tools, and
+possible suggestions about how to obtain them, rather than just some
+``command not found'' error, or (worse) some obscure message from some
+older version of the required tool they happen to have installed.
+
+Maintainers interested in keeping their package buildable from a CVS
+checkout even for those users that lack maintainer-specific tools might
+want to provide an helper script (or to enhance their existing bootstrap
+script) to fix the timestamps after a
+@command{cvs update} or a @command{git checkout}, to prevent spurious
+rebuilds. In case of a project committing the Autotools-generated
+files, as well as the generated @file{.info} files, such script might
+look something like this:
+
+@smallexample
+#!/bin/sh
+# fix-timestamp.sh: prevents useless rebuilds after "cvs update"
+sleep 1
+# aclocal-generated aclocal.m4 depends on locally-installed
+# '.m4' macro files, as well as on 'configure.ac'
+touch aclocal.m4
+sleep 1
+# autoconf-generated configure depends on aclocal.m4 and on
+# configure.ac
+touch configure
+# so does autoheader-generated config.h.in
+touch config.h.in
+# and all the automake-generated Makefile.in files
+touch `find . -name Makefile.in -print`
+# finally, the makeinfo-generated '.info' files depend on the
+# corresponding '.texi' files
+touch doc/*.info
+@end smallexample
+
+@item
+In distributed development, developers are likely to have different
+version of the maintainer tools installed. In this case rebuilds
+triggered by timestamp lossage will lead to spurious changes
+to generated files. There are several solutions to this:
+
+@itemize
+@item
+All developers should use the same versions, so that the rebuilt files
+are identical to files in CVS@. (This starts to be difficult when each
+project you work on uses different versions.)
+@item
+Or people use a script to fix the timestamp after a checkout (the GCC
+folks have such a script).
+@item
+Or @file{configure.ac} uses @code{AM_MAINTAINER_MODE}, which will
+disable all of these rebuild rules by default. This is further discussed
+in @ref{maintainer-mode}.
+@end itemize
+
+@item
+Although we focused on spurious rebuilds, the converse can also
+happen. CVS's timestamp handling can also let you think an
+out-of-date file is up-to-date.
+
+For instance, suppose a developer has modified @file{Makefile.am} and
+has rebuilt @file{Makefile.in}, and then decides to do a last-minute
+change to @file{Makefile.am} right before checking in both files
+(without rebuilding @file{Makefile.in} to account for the change).
+
+This last change to @file{Makefile.am} makes the copy of
+@file{Makefile.in} out-of-date. Since CVS processes files
+alphabetically, when another developer @samp{cvs update}s his or her
+tree, @file{Makefile.in} will happen to be newer than
+@file{Makefile.am}. This other developer will not see that
+@file{Makefile.in} is out-of-date.
+
+@end itemize
+
+@subsubheading Generated Files out of CVS
+
+One way to get CVS and @command{make} working peacefully is to never
+store generated files in CVS, i.e., do not CVS-control files that
+are @file{Makefile} targets (also called @emph{derived} files).
+
+This way developers are not annoyed by changes to generated files. It
+does not matter if they all have different versions (assuming they are
+compatible, of course). And finally, timestamps are not lost, changes
+to sources files can't be missed as in the
+@file{Makefile.am}/@file{Makefile.in} example discussed earlier.
+
+The drawback is that the CVS repository is not an exact copy of what
+is distributed and that users now need to install various development
+tools (maybe even specific versions) before they can build a checkout.
+But, after all, CVS's job is versioning, not distribution.
+
+Allowing developers to use different versions of their tools can also
+hide bugs during distributed development. Indeed, developers will be
+using (hence testing) their own generated files, instead of the
+generated files that will be released actually. The developer who
+prepares the tarball might be using a version of the tool that
+produces bogus output (for instance a non-portable C file), something
+other developers could have noticed if they weren't using their own
+versions of this tool.
+
+@subheading Third-party Files
+@cindex CVS and third-party files
+@cindex third-party files and CVS
+
+Another class of files not discussed here (because they do not cause
+timestamp issues) are files that are shipped with a package, but
+maintained elsewhere. For instance, tools like @command{gettextize}
+and @command{autopoint} (from Gettext) or @command{libtoolize} (from
+Libtool), will install or update files in your package.
+
+These files, whether they are kept under CVS or not, raise similar
+concerns about version mismatch between developers' tools. The
+Gettext manual has a section about this, see @ref{CVS Issues, CVS
+Issues, Integrating with CVS, gettext, GNU gettext tools}.
+
+@node maintainer-mode
+@section @command{missing} and @code{AM_MAINTAINER_MODE}
+
+@subheading @command{missing}
+@cindex @command{missing}, purpose
+
+The @command{missing} script is a wrapper around several maintainer
+tools, designed to warn users if a maintainer tool is required but
+missing. Typical maintainer tools are @command{autoconf},
+@command{automake}, @command{bison}, etc. Because file generated by
+these tools are shipped with the other sources of a package, these
+tools shouldn't be required during a user build and they are not
+checked for in @file{configure}.
+
+However, if for some reason a rebuild rule is triggered and involves a
+missing tool, @command{missing} will notice it and warn the user, even
+suggesting how to obtain such a tool (at least in case it is a well-known
+one, like @command{makeinfo} or @command{bison}). This is more helpful
+and user-friendly than just having the rebuild rules spewing out a terse
+error message like @samp{sh: @var{tool}: command not found}. Similarly,
+@command{missing} will warn the user if it detects that a maintainer
+tool it attempted to use seems too old (be warned that diagnosing this
+correctly is typically more difficult that detecting missing tools, and
+requires cooperation from the tool itself, so it won't always work).
+
+If the required tool is installed, @command{missing} will run it and
+won't attempt to continue after failures. This is correct during
+development: developers love fixing failures. However, users with
+missing or too old maintainer tools may get an error when the rebuild
+rule is spuriously triggered, halting the build. This failure to let
+the build continue is one of the arguments of the
+@code{AM_MAINTAINER_MODE} advocates.
+
+@subheading @code{AM_MAINTAINER_MODE}
+@cindex @code{AM_MAINTAINER_MODE}, purpose
+@acindex AM_MAINTAINER_MODE
+
+@code{AM_MAINTAINER_MODE} allows you to choose whether the so called
+"rebuild rules" should be enabled or disabled. With
+@code{AM_MAINTAINER_MODE([enable])}, they are enabled by default,
+otherwise they are disabled by default. In the latter case, if
+you have @code{AM_MAINTAINER_MODE} in @file{configure.ac}, and run
+@samp{./configure && make}, then @command{make} will *never* attempt to
+rebuild @file{configure}, @file{Makefile.in}s, Lex or Yacc outputs, etc.
+I.e., this disables build rules for files that are usually distributed
+and that users should normally not have to update.
+
+The user can override the default setting by passing either
+@samp{--enable-maintainer-mode} or @samp{--disable-maintainer-mode}
+to @command{configure}.
+
+People use @code{AM_MAINTAINER_MODE} either because they do not want their
+users (or themselves) annoyed by timestamps lossage (@pxref{CVS}), or
+because they simply can't stand the rebuild rules and prefer running
+maintainer tools explicitly.
+
+@code{AM_MAINTAINER_MODE} also allows you to disable some custom build
+rules conditionally. Some developers use this feature to disable
+rules that need exotic tools that users may not have available.
+
+Several years ago Fran@,{c}ois Pinard pointed out several arguments
+against this @code{AM_MAINTAINER_MODE} macro. Most of them relate to
+insecurity. By removing dependencies you get non-dependable builds:
+changes to sources files can have no effect on generated files and this
+can be very confusing when unnoticed. He adds that security shouldn't
+be reserved to maintainers (what @option{--enable-maintainer-mode}
+suggests), on the contrary. If one user has to modify a
+@file{Makefile.am}, then either @file{Makefile.in} should be updated
+or a warning should be output (this is what Automake uses
+@command{missing} for) but the last thing you want is that nothing
+happens and the user doesn't notice it (this is what happens when
+rebuild rules are disabled by @code{AM_MAINTAINER_MODE}).
+
+Jim Meyering, the inventor of the @code{AM_MAINTAINER_MODE} macro was
+swayed by Fran@,{c}ois's arguments, and got rid of
+@code{AM_MAINTAINER_MODE} in all of his packages.
+
+Still many people continue to use @code{AM_MAINTAINER_MODE}, because
+it helps them working on projects where all files are kept under version
+control, and because @command{missing} isn't enough if you have the
+wrong version of the tools.
+
+
+@node Wildcards
+@section Why doesn't Automake support wildcards?
+@cindex wildcards
+
+Developers are lazy. They would often like to use wildcards in
+@file{Makefile.am}s, so that they would not need to remember to
+update @file{Makefile.am}s every time they add, delete, or rename
+a file.
+
+There are several objections to this:
+@itemize
+@item
+When using CVS (or similar) developers need to remember they have to
+run @samp{cvs add} or @samp{cvs rm} anyway. Updating
+@file{Makefile.am} accordingly quickly becomes a reflex.
+
+Conversely, if your application doesn't compile
+because you forgot to add a file in @file{Makefile.am}, it will help
+you remember to @samp{cvs add} it.
+
+@item
+Using wildcards makes it easy to distribute files by mistake. For
+instance, some code a developer is experimenting with (a test case,
+say) that should not be part of the distribution.
+
+@item
+Using wildcards it's easy to omit some files by mistake. For
+instance, one developer creates a new file, uses it in many places,
+but forgets to commit it. Another developer then checks out the
+incomplete project and is able to run @samp{make dist} successfully,
+even though a file is missing. By listing files, @samp{make dist}
+@emph{will} complain.
+
+@item
+Wildcards are not portable to some non-GNU @command{make} implementations,
+e.g., NetBSD @command{make} will not expand globs such as @samp{*} in
+prerequisites of a target.
+
+@item
+Finally, it's really hard to @emph{forget} to add a file to
+@file{Makefile.am}: files that are not listed in @file{Makefile.am} are
+not compiled or installed, so you can't even test them.
+@end itemize
+
+Still, these are philosophical objections, and as such you may disagree,
+or find enough value in wildcards to dismiss all of them. Before you
+start writing a patch against Automake to teach it about wildcards,
+let's see the main technical issue: portability.
+
+Although @samp{$(wildcard ...)} works with GNU @command{make}, it is
+not portable to other @command{make} implementations.
+
+The only way Automake could support @command{$(wildcard ...)} is by
+expanding @command{$(wildcard ...)} when @command{automake} is run.
+The resulting @file{Makefile.in}s would be portable since they would
+list all files and not use @samp{$(wildcard ...)}. However that
+means developers would need to remember to run @command{automake} each
+time they add, delete, or rename files.
+
+Compared to editing @file{Makefile.am}, this is a very small gain. Sure,
+it's easier and faster to type @samp{automake; make} than to type
+@samp{emacs Makefile.am; make}. But nobody bothered enough to write a
+patch to add support for this syntax. Some people use scripts to
+generate file lists in @file{Makefile.am} or in separate
+@file{Makefile} fragments.
+
+Even if you don't care about portability, and are tempted to use
+@samp{$(wildcard ...)} anyway because you target only GNU Make, you
+should know there are many places where Automake needs to know exactly
+which files should be processed. As Automake doesn't know how to
+expand @samp{$(wildcard ...)}, you cannot use it in these places.
+@samp{$(wildcard ...)} is a black box comparable to @code{AC_SUBST}ed
+variables as far Automake is concerned.
+
+You can get warnings about @samp{$(wildcard ...}) constructs using the
+@option{-Wportability} flag.
+
+@node Limitations on File Names
+@section Limitations on File Names
+@cindex file names, limitations on
+
+Automake attempts to support all kinds of file names, even those that
+contain unusual characters or are unusually long. However, some
+limitations are imposed by the underlying operating system and tools.
+
+Most operating systems prohibit the use of the null byte in file
+names, and reserve @samp{/} as a directory separator. Also, they
+require that file names are properly encoded for the user's locale.
+Automake is subject to these limits.
+
+Portable packages should limit themselves to POSIX file
+names. These can contain ASCII letters and digits,
+@samp{_}, @samp{.}, and @samp{-}. File names consist of components
+separated by @samp{/}. File name components cannot begin with
+@samp{-}.
+
+Portable POSIX file names cannot contain components that exceed a
+14-byte limit, but nowadays it's normally safe to assume the
+more-generous XOPEN limit of 255 bytes. POSIX
+limits file names to 255 bytes (XOPEN allows 1023 bytes),
+but you may want to limit a source tarball to file names of 99 bytes
+to avoid interoperability problems with old versions of @command{tar}.
+
+If you depart from these rules (e.g., by using non-ASCII
+characters in file names, or by using lengthy file names), your
+installers may have problems for reasons unrelated to Automake.
+However, if this does not concern you, you should know about the
+limitations imposed by Automake itself. These limitations are
+undesirable, but some of them seem to be inherent to underlying tools
+like Autoconf, Make, M4, and the shell. They fall into three
+categories: install directories, build directories, and file names.
+
+The following characters:
+
+@example
+@r{newline} " # $ ' `
+@end example
+
+should not appear in the names of install directories. For example,
+the operand of @command{configure}'s @option{--prefix} option should
+not contain these characters.
+
+Build directories suffer the same limitations as install directories,
+and in addition should not contain the following characters:
+
+@example
+& @@ \
+@end example
+
+For example, the full name of the directory containing the source
+files should not contain these characters.
+
+Source and installation file names like @file{main.c} are limited even
+further: they should conform to the POSIX/XOPEN
+rules described above. In addition, if you plan to port to
+non-POSIX environments, you should avoid file names that
+differ only in case (e.g., @file{makefile} and @file{Makefile}).
+Nowadays it is no longer worth worrying about the 8.3 limits of
+DOS file systems.
+
+@c FIXME This should probably be moved in the "Checking the Distribution"
+@c FIXME section...
+@node Errors with distclean
+@section Errors with distclean
+@cindex @code{distclean}, diagnostic
+@cindex @samp{make distclean}, diagnostic
+@cindex dependencies and distributed files
+@trindex distclean
+
+This is a diagnostic you might encounter while running @samp{make
+distcheck}.
+
+As explained in @ref{Checking the Distribution}, @samp{make distcheck}
+attempts to build and check your package for errors like this one.
+
+@samp{make distcheck} will perform a @code{VPATH} build of your
+package (@pxref{VPATH Builds}), and then call @samp{make distclean}.
+Files left in the build directory after @samp{make distclean} has run
+are listed after this error.
+
+This diagnostic really covers two kinds of errors:
+
+@itemize @bullet
+@item
+files that are forgotten by distclean;
+@item
+distributed files that are erroneously rebuilt.
+@end itemize
+
+The former left-over files are not distributed, so the fix is to mark
+them for cleaning (@pxref{Clean}), this is obvious and doesn't deserve
+more explanations.
+
+The latter bug is not always easy to understand and fix, so let's
+proceed with an example. Suppose our package contains a program for
+which we want to build a man page using @command{help2man}. GNU
+@command{help2man} produces simple manual pages from the @option{--help}
+and @option{--version} output of other commands (@pxref{Top, , Overview,
+help2man, The Help2man Manual}). Because we don't want to force our
+users to install @command{help2man}, we decide to distribute the
+generated man page using the following setup.
+
+@example
+# This Makefile.am is bogus.
+bin_PROGRAMS = foo
+foo_SOURCES = foo.c
+dist_man_MANS = foo.1
+
+foo.1: foo$(EXEEXT)
+ help2man --output=foo.1 ./foo$(EXEEXT)
+@end example
+
+This will effectively distribute the man page. However,
+@samp{make distcheck} will fail with:
+
+@example
+ERROR: files left in build directory after distclean:
+./foo.1
+@end example
+
+Why was @file{foo.1} rebuilt? Because although distributed,
+@file{foo.1} depends on a non-distributed built file:
+@file{foo$(EXEEXT)}. @file{foo$(EXEEXT)} is built by the user, so it
+will always appear to be newer than the distributed @file{foo.1}.
+
+@samp{make distcheck} caught an inconsistency in our package. Our
+intent was to distribute @file{foo.1} so users do not need to install
+@command{help2man}, however since this rule causes this file to be
+always rebuilt, users @emph{do} need @command{help2man}. Either we
+should ensure that @file{foo.1} is not rebuilt by users, or there is
+no point in distributing @file{foo.1}.
+
+More generally, the rule is that distributed files should never depend
+on non-distributed built files. If you distribute something
+generated, distribute its sources.
+
+One way to fix the above example, while still distributing
+@file{foo.1} is to not depend on @file{foo$(EXEEXT)}. For instance,
+assuming @command{foo --version} and @command{foo --help} do not
+change unless @file{foo.c} or @file{configure.ac} change, we could
+write the following @file{Makefile.am}:
+
+@example
+bin_PROGRAMS = foo
+foo_SOURCES = foo.c
+dist_man_MANS = foo.1
+
+foo.1: foo.c $(top_srcdir)/configure.ac
+ $(MAKE) $(AM_MAKEFLAGS) foo$(EXEEXT)
+ help2man --output=foo.1 ./foo$(EXEEXT)
+@end example
+
+This way, @file{foo.1} will not get rebuilt every time
+@file{foo$(EXEEXT)} changes. The @command{make} call makes sure
+@file{foo$(EXEEXT)} is up-to-date before @command{help2man}. Another
+way to ensure this would be to use separate directories for binaries
+and man pages, and set @code{SUBDIRS} so that binaries are built
+before man pages.
+
+We could also decide not to distribute @file{foo.1}. In
+this case it's fine to have @file{foo.1} dependent upon
+@file{foo$(EXEEXT)}, since both will have to be rebuilt.
+However it would be impossible to build the package in a
+cross-compilation, because building @file{foo.1} involves
+an @emph{execution} of @file{foo$(EXEEXT)}.
+
+Another context where such errors are common is when distributed files
+are built by tools that are built by the package. The pattern is
+similar:
+
+@example
+distributed-file: built-tools distributed-sources
+ build-command
+@end example
+
+@noindent
+should be changed to
+
+@example
+distributed-file: distributed-sources
+ $(MAKE) $(AM_MAKEFLAGS) built-tools
+ build-command
+@end example
+
+@noindent
+or you could choose not to distribute @file{distributed-file}, if
+cross-compilation does not matter.
+
+The points made through these examples are worth a summary:
+
+@cartouche
+@itemize
+@item
+Distributed files should never depend upon non-distributed built
+files.
+@item
+Distributed files should be distributed with all their dependencies.
+@item
+If a file is @emph{intended} to be rebuilt by users, then there is no point
+in distributing it.
+@end itemize
+@end cartouche
+
+@vrindex distcleancheck_listfiles
+For desperate cases, it's always possible to disable this check by
+setting @code{distcleancheck_listfiles} as documented in @ref{Checking
+the Distribution}.
+Make sure you do understand the reason why @samp{make distcheck}
+complains before you do this. @code{distcleancheck_listfiles} is a
+way to @emph{hide} errors, not to fix them. You can always do better.
+
+@node Flag Variables Ordering
+@section Flag Variables Ordering
+@cindex Ordering flag variables
+@cindex Flag variables, ordering
+
+@display
+What is the difference between @code{AM_CFLAGS}, @code{CFLAGS}, and
+@code{mumble_CFLAGS}?
+@end display
+
+@display
+Why does @command{automake} output @code{CPPFLAGS} after
+@code{AM_CPPFLAGS} on compile lines? Shouldn't it be the converse?
+@end display
+
+@display
+My @file{configure} adds some warning flags into @code{CXXFLAGS}. In
+one @file{Makefile.am} I would like to append a new flag, however if I
+put the flag into @code{AM_CXXFLAGS} it is prepended to the other
+flags, not appended.
+@end display
+
+@subheading Compile Flag Variables
+@cindex Flag Variables, Ordering
+@cindex Compile Flag Variables
+@cindex @code{AM_CCASFLAGS} and @code{CCASFLAGS}
+@cindex @code{AM_CFLAGS} and @code{CFLAGS}
+@cindex @code{AM_CPPFLAGS} and @code{CPPFLAGS}
+@cindex @code{AM_CXXFLAGS} and @code{CXXFLAGS}
+@cindex @code{AM_FCFLAGS} and @code{FCFLAGS}
+@cindex @code{AM_FFLAGS} and @code{FFLAGS}
+@cindex @code{AM_GCJFLAGS} and @code{GCJFLAGS}
+@cindex @code{AM_LDFLAGS} and @code{LDFLAGS}
+@cindex @code{AM_LFLAGS} and @code{LFLAGS}
+@cindex @code{AM_LIBTOOLFLAGS} and @code{LIBTOOLFLAGS}
+@cindex @code{AM_OBJCFLAGS} and @code{OBJCFLAGS}
+@cindex @code{AM_OBJCXXFLAGS} and @code{OBJXXCFLAGS}
+@cindex @code{AM_RFLAGS} and @code{RFLAGS}
+@cindex @code{AM_UPCFLAGS} and @code{UPCFLAGS}
+@cindex @code{AM_YFLAGS} and @code{YFLAGS}
+@cindex @code{CCASFLAGS} and @code{AM_CCASFLAGS}
+@cindex @code{CFLAGS} and @code{AM_CFLAGS}
+@cindex @code{CPPFLAGS} and @code{AM_CPPFLAGS}
+@cindex @code{CXXFLAGS} and @code{AM_CXXFLAGS}
+@cindex @code{FCFLAGS} and @code{AM_FCFLAGS}
+@cindex @code{FFLAGS} and @code{AM_FFLAGS}
+@cindex @code{GCJFLAGS} and @code{AM_GCJFLAGS}
+@cindex @code{LDFLAGS} and @code{AM_LDFLAGS}
+@cindex @code{LFLAGS} and @code{AM_LFLAGS}
+@cindex @code{LIBTOOLFLAGS} and @code{AM_LIBTOOLFLAGS}
+@cindex @code{OBJCFLAGS} and @code{AM_OBJCFLAGS}
+@cindex @code{OBJCXXFLAGS} and @code{AM_OBJCXXFLAGS}
+@cindex @code{RFLAGS} and @code{AM_RFLAGS}
+@cindex @code{UPCFLAGS} and @code{AM_UPCFLAGS}
+@cindex @code{YFLAGS} and @code{AM_YFLAGS}
+
+This section attempts to answer all the above questions. We will
+mostly discuss @code{CPPFLAGS} in our examples, but actually the
+answer holds for all the compile flags used in Automake:
+@code{CCASFLAGS}, @code{CFLAGS}, @code{CPPFLAGS}, @code{CXXFLAGS},
+@code{FCFLAGS}, @code{FFLAGS}, @code{GCJFLAGS}, @code{LDFLAGS},
+@code{LFLAGS}, @code{LIBTOOLFLAGS}, @code{OBJCFLAGS}, @code{OBJCXXFLAGS},
+@code{RFLAGS}, @code{UPCFLAGS}, and @code{YFLAGS}.
+
+@code{CPPFLAGS}, @code{AM_CPPFLAGS}, and @code{mumble_CPPFLAGS} are
+three variables that can be used to pass flags to the C preprocessor
+(actually these variables are also used for other languages like C++
+or preprocessed Fortran). @code{CPPFLAGS} is the user variable
+(@pxref{User Variables}), @code{AM_CPPFLAGS} is the Automake variable,
+and @code{mumble_CPPFLAGS} is the variable specific to the
+@code{mumble} target (we call this a per-target variable,
+@pxref{Program and Library Variables}).
+
+Automake always uses two of these variables when compiling C sources
+files. When compiling an object file for the @code{mumble} target,
+the first variable will be @code{mumble_CPPFLAGS} if it is defined, or
+@code{AM_CPPFLAGS} otherwise. The second variable is always
+@code{CPPFLAGS}.
+
+In the following example,
+
+@example
+bin_PROGRAMS = foo bar
+foo_SOURCES = xyz.c
+bar_SOURCES = main.c
+foo_CPPFLAGS = -DFOO
+AM_CPPFLAGS = -DBAZ
+@end example
+
+@noindent
+@file{xyz.o} will be compiled with @samp{$(foo_CPPFLAGS) $(CPPFLAGS)},
+(because @file{xyz.o} is part of the @code{foo} target), while
+@file{main.o} will be compiled with @samp{$(AM_CPPFLAGS) $(CPPFLAGS)}
+(because there is no per-target variable for target @code{bar}).
+
+The difference between @code{mumble_CPPFLAGS} and @code{AM_CPPFLAGS}
+being clear enough, let's focus on @code{CPPFLAGS}. @code{CPPFLAGS}
+is a user variable, i.e., a variable that users are entitled to modify
+in order to compile the package. This variable, like many others,
+is documented at the end of the output of @samp{configure --help}.
+
+For instance, someone who needs to add @file{/home/my/usr/include} to
+the C compiler's search path would configure a package with
+
+@example
+./configure CPPFLAGS='-I /home/my/usr/include'
+@end example
+
+@noindent
+and this flag would be propagated to the compile rules of all
+@file{Makefile}s.
+
+It is also not uncommon to override a user variable at
+@command{make}-time. Many installers do this with @code{prefix}, but
+this can be useful with compiler flags too. For instance, if, while
+debugging a C++ project, you need to disable optimization in one
+specific object file, you can run something like
+
+@example
+rm file.o
+make CXXFLAGS=-O0 file.o
+make
+@end example
+
+The reason @samp{$(CPPFLAGS)} appears after @samp{$(AM_CPPFLAGS)} or
+@samp{$(mumble_CPPFLAGS)} in the compile command is that users
+should always have the last say. It probably makes more sense if you
+think about it while looking at the @samp{CXXFLAGS=-O0} above, which
+should supersede any other switch from @code{AM_CXXFLAGS} or
+@code{mumble_CXXFLAGS} (and this of course replaces the previous value
+of @code{CXXFLAGS}).
+
+You should never redefine a user variable such as @code{CPPFLAGS} in
+@file{Makefile.am}. Use @samp{automake -Woverride} to diagnose such
+mistakes. Even something like
+
+@example
+CPPFLAGS = -DDATADIR=\"$(datadir)\" @@CPPFLAGS@@
+@end example
+
+@noindent
+is erroneous. Although this preserves @file{configure}'s value of
+@code{CPPFLAGS}, the definition of @code{DATADIR} will disappear if a
+user attempts to override @code{CPPFLAGS} from the @command{make}
+command line.
+
+@example
+AM_CPPFLAGS = -DDATADIR=\"$(datadir)\"
+@end example
+
+@noindent
+is all that is needed here if no per-target flags are used.
+
+You should not add options to these user variables within
+@file{configure} either, for the same reason. Occasionally you need
+to modify these variables to perform a test, but you should reset
+their values afterwards. In contrast, it is OK to modify the
+@samp{AM_} variables within @file{configure} if you @code{AC_SUBST}
+them, but it is rather rare that you need to do this, unless you
+really want to change the default definitions of the @samp{AM_}
+variables in all @file{Makefile}s.
+
+What we recommend is that you define extra flags in separate
+variables. For instance, you may write an Autoconf macro that computes
+a set of warning options for the C compiler, and @code{AC_SUBST} them
+in @code{WARNINGCFLAGS}; you may also have an Autoconf macro that
+determines which compiler and which linker flags should be used to
+link with library @file{libfoo}, and @code{AC_SUBST} these in
+@code{LIBFOOCFLAGS} and @code{LIBFOOLDFLAGS}. Then, a
+@file{Makefile.am} could use these variables as follows:
+
+@example
+AM_CFLAGS = $(WARNINGCFLAGS)
+bin_PROGRAMS = prog1 prog2
+prog1_SOURCES = @dots{}
+prog2_SOURCES = @dots{}
+prog2_CFLAGS = $(LIBFOOCFLAGS) $(AM_CFLAGS)
+prog2_LDFLAGS = $(LIBFOOLDFLAGS)
+@end example
+
+In this example both programs will be compiled with the flags
+substituted into @samp{$(WARNINGCFLAGS)}, and @code{prog2} will
+additionally be compiled with the flags required to link with
+@file{libfoo}.
+
+Note that listing @code{AM_CFLAGS} in a per-target @code{CFLAGS}
+variable is a common idiom to ensure that @code{AM_CFLAGS} applies to
+every target in a @file{Makefile.in}.
+
+Using variables like this gives you full control over the ordering of
+the flags. For instance, if there is a flag in $(WARNINGCFLAGS) that
+you want to negate for a particular target, you can use something like
+@samp{prog1_CFLAGS = $(AM_CFLAGS) -no-flag}. If all of these flags had
+been forcefully appended to @code{CFLAGS}, there would be no way to
+disable one flag. Yet another reason to leave user variables to
+users.
+
+Finally, we have avoided naming the variable of the example
+@code{LIBFOO_LDFLAGS} (with an underscore) because that would cause
+Automake to think that this is actually a per-target variable (like
+@code{mumble_LDFLAGS}) for some non-declared @code{LIBFOO} target.
+
+@subheading Other Variables
+
+There are other variables in Automake that follow similar principles
+to allow user options. For instance, Texinfo rules (@pxref{Texinfo})
+use @code{MAKEINFOFLAGS} and @code{AM_MAKEINFOFLAGS}. Similarly,
+DejaGnu tests (@pxref{DejaGnu Tests}) use @code{RUNTESTDEFAULTFLAGS} and
+@code{AM_RUNTESTDEFAULTFLAGS}. The tags and ctags rules
+(@pxref{Tags}) use @code{ETAGSFLAGS}, @code{AM_ETAGSFLAGS},
+@code{CTAGSFLAGS}, and @code{AM_CTAGSFLAGS}. Java rules
+(@pxref{Java}) use @code{JAVACFLAGS} and @code{AM_JAVACFLAGS}. None
+of these rules support per-target flags (yet).
+
+To some extent, even @code{AM_MAKEFLAGS} (@pxref{Subdirectories})
+obeys this naming scheme. The slight difference is that
+@code{MAKEFLAGS} is passed to sub-@command{make}s implicitly by
+@command{make} itself.
+
+@code{ARFLAGS} (@pxref{A Library}) is usually defined by Automake and
+has neither @code{AM_} nor per-target cousin.
+
+Finally you should not think that the existence of a per-target
+variable implies the existence of an @code{AM_} variable or of a user
+variable. For instance, the @code{mumble_LDADD} per-target variable
+overrides the makefile-wide @code{LDADD} variable (which is not a user
+variable), and @code{mumble_LIBADD} exists only as a per-target
+variable. @xref{Program and Library Variables}.
+
+
+@node Renamed Objects
+@section Why are object files sometimes renamed?
+
+This happens when per-target compilation flags are used. Object
+files need to be renamed just in case they would clash with object
+files compiled from the same sources, but with different flags.
+Consider the following example.
+
+@example
+bin_PROGRAMS = true false
+true_SOURCES = generic.c
+true_CPPFLAGS = -DEXIT_CODE=0
+false_SOURCES = generic.c
+false_CPPFLAGS = -DEXIT_CODE=1
+@end example
+
+@noindent
+Obviously the two programs are built from the same source, but it
+would be bad if they shared the same object, because @file{generic.o}
+cannot be built with both @samp{-DEXIT_CODE=0} @emph{and}
+@samp{-DEXIT_CODE=1}. Therefore @command{automake} outputs rules to
+build two different objects: @file{true-generic.o} and
+@file{false-generic.o}.
+
+@command{automake} doesn't actually look whether source files are
+shared to decide if it must rename objects. It will just rename all
+objects of a target as soon as it sees per-target compilation flags
+used.
+
+It's OK to share object files when per-target compilation flags are not
+used. For instance, @file{true} and @file{false} will both use
+@file{version.o} in the following example.
+
+@example
+AM_CPPFLAGS = -DVERSION=1.0
+bin_PROGRAMS = true false
+true_SOURCES = true.c version.c
+false_SOURCES = false.c version.c
+@end example
+
+Note that the renaming of objects is also affected by the
+@code{_SHORTNAME} variable (@pxref{Program and Library Variables}).
+
+
+@node Per-Object Flags
+@section Per-Object Flags Emulation
+@cindex Per-object flags, emulated
+
+@display
+One of my source files needs to be compiled with different flags. How
+do I do?
+@end display
+
+Automake supports per-program and per-library compilation flags (see
+@ref{Program and Library Variables} and @ref{Flag Variables
+Ordering}). With this you can define compilation flags that apply to
+all files compiled for a target. For instance, in
+
+@example
+bin_PROGRAMS = foo
+foo_SOURCES = foo.c foo.h bar.c bar.h main.c
+foo_CFLAGS = -some -flags
+@end example
+
+@noindent
+@file{foo-foo.o}, @file{foo-bar.o}, and @file{foo-main.o} will all be
+compiled with @samp{-some -flags}. (If you wonder about the names of
+these object files, see @ref{Renamed Objects}.) Note that
+@code{foo_CFLAGS} gives the flags to use when compiling all the C
+sources of the @emph{program} @code{foo}, it has nothing to do with
+@file{foo.c} or @file{foo-foo.o} specifically.
+
+What if @file{foo.c} needs to be compiled into @file{foo.o} using some
+specific flags, that none of the other files requires? Obviously
+per-program flags are not directly applicable here. Something like
+per-object flags are expected, i.e., flags that would be used only
+when creating @file{foo-foo.o}. Automake does not support that,
+however this is easy to simulate using a library that contains only
+that object, and compiling this library with per-library flags.
+
+@example
+bin_PROGRAMS = foo
+foo_SOURCES = bar.c bar.h main.c
+foo_CFLAGS = -some -flags
+foo_LDADD = libfoo.a
+noinst_LIBRARIES = libfoo.a
+libfoo_a_SOURCES = foo.c foo.h
+libfoo_a_CFLAGS = -some -other -flags
+@end example
+
+Here @file{foo-bar.o} and @file{foo-main.o} will all be
+compiled with @samp{-some -flags}, while @file{libfoo_a-foo.o} will
+be compiled using @samp{-some -other -flags}. Eventually, all
+three objects will be linked to form @file{foo}.
+
+This trick can also be achieved using Libtool convenience libraries,
+for instance @samp{noinst_LTLIBRARIES = libfoo.la} (@pxref{Libtool
+Convenience Libraries}).
+
+Another tempting idea to implement per-object flags is to override the
+compile rules @command{automake} would output for these files.
+Automake will not define a rule for a target you have defined, so you
+could think about defining the @samp{foo-foo.o: foo.c} rule yourself.
+We recommend against this, because this is error prone. For instance,
+if you add such a rule to the first example, it will break the day you
+decide to remove @code{foo_CFLAGS} (because @file{foo.c} will then be
+compiled as @file{foo.o} instead of @file{foo-foo.o}, @pxref{Renamed
+Objects}). Also in order to support dependency tracking, the two
+@file{.o}/@file{.obj} extensions, and all the other flags variables
+involved in a compilation, you will end up modifying a copy of the
+rule previously output by @command{automake} for this file. If a new
+release of Automake generates a different rule, your copy will need to
+be updated by hand.
+
+@node Multiple Outputs
+@section Handling Tools that Produce Many Outputs
+@cindex multiple outputs, rules with
+@cindex many outputs, rules with
+@cindex rules with multiple outputs
+
+This section describes a @command{make} idiom that can be used when a
+tool produces multiple output files. It is not specific to Automake
+and can be used in ordinary @file{Makefile}s.
+
+Suppose we have a program called @command{foo} that will read one file
+called @file{data.foo} and produce two files named @file{data.c} and
+@file{data.h}. We want to write a @file{Makefile} rule that captures
+this one-to-two dependency.
+
+The naive rule is incorrect:
+
+@example
+# This is incorrect.
+data.c data.h: data.foo
+ foo data.foo
+@end example
+
+@noindent
+What the above rule really says is that @file{data.c} and
+@file{data.h} each depend on @file{data.foo}, and can each be built by
+running @samp{foo data.foo}. In other words it is equivalent to:
+
+@example
+# We do not want this.
+data.c: data.foo
+ foo data.foo
+data.h: data.foo
+ foo data.foo
+@end example
+
+@noindent
+which means that @command{foo} can be run twice. Usually it will not
+be run twice, because @command{make} implementations are smart enough
+to check for the existence of the second file after the first one has
+been built; they will therefore detect that it already exists.
+However there are a few situations where it can run twice anyway:
+
+@itemize
+@item
+The most worrying case is when running a parallel @command{make}. If
+@file{data.c} and @file{data.h} are built in parallel, two @samp{foo
+data.foo} commands will run concurrently. This is harmful.
+@item
+Another case is when the dependency (here @file{data.foo}) is
+(or depends upon) a phony target.
+@end itemize
+
+A solution that works with parallel @command{make} but not with
+phony dependencies is the following:
+
+@example
+data.c data.h: data.foo
+ foo data.foo
+data.h: data.c
+@end example
+
+@noindent
+The above rules are equivalent to
+
+@example
+data.c: data.foo
+ foo data.foo
+data.h: data.foo data.c
+ foo data.foo
+@end example
+
+@noindent
+therefore a parallel @command{make} will have to serialize the builds
+of @file{data.c} and @file{data.h}, and will detect that the second is
+no longer needed once the first is over.
+
+Using this pattern is probably enough for most cases. However it does
+not scale easily to more output files (in this scheme all output files
+must be totally ordered by the dependency relation), so we will
+explore a more complicated solution.
+
+Another idea is to write the following:
+
+@example
+# There is still a problem with this one.
+data.c: data.foo
+ foo data.foo
+data.h: data.c
+@end example
+
+@noindent
+The idea is that @samp{foo data.foo} is run only when @file{data.c}
+needs to be updated, but we further state that @file{data.h} depends
+upon @file{data.c}. That way, if @file{data.h} is required and
+@file{data.foo} is out of date, the dependency on @file{data.c} will
+trigger the build.
+
+This is almost perfect, but suppose we have built @file{data.h} and
+@file{data.c}, and then we erase @file{data.h}. Then, running
+@samp{make data.h} will not rebuild @file{data.h}. The above rules
+just state that @file{data.c} must be up-to-date with respect to
+@file{data.foo}, and this is already the case.
+
+What we need is a rule that forces a rebuild when @file{data.h} is
+missing. Here it is:
+
+@example
+data.c: data.foo
+ foo data.foo
+data.h: data.c
+## Recover from the removal of $@@
+ @@if test -f $@@; then :; else \
+ rm -f data.c; \
+ $(MAKE) $(AM_MAKEFLAGS) data.c; \
+ fi
+@end example
+
+The above scheme can be extended to handle more outputs and more
+inputs. One of the outputs is selected to serve as a witness to the
+successful completion of the command, it depends upon all inputs, and
+all other outputs depend upon it. For instance, if @command{foo}
+should additionally read @file{data.bar} and also produce
+@file{data.w} and @file{data.x}, we would write:
+
+@example
+data.c: data.foo data.bar
+ foo data.foo data.bar
+data.h data.w data.x: data.c
+## Recover from the removal of $@@
+ @@if test -f $@@; then :; else \
+ rm -f data.c; \
+ $(MAKE) $(AM_MAKEFLAGS) data.c; \
+ fi
+@end example
+
+However there are now three minor problems in this setup. One is related
+to the timestamp ordering of @file{data.h}, @file{data.w},
+@file{data.x}, and @file{data.c}. Another one is a race condition
+if a parallel @command{make} attempts to run multiple instances of the
+recover block at once. Finally, the recursive rule breaks @samp{make -n}
+when run with GNU @command{make} (as well as some other @command{make}
+implementations), as it may remove @file{data.h} even when it should not
+(@pxref{MAKE Variable, , How the @code{MAKE} Variable Works, make,
+The GNU Make Manual}).
+
+Let us deal with the first problem. @command{foo} outputs four files,
+but we do not know in which order these files are created. Suppose
+that @file{data.h} is created before @file{data.c}. Then we have a
+weird situation. The next time @command{make} is run, @file{data.h}
+will appear older than @file{data.c}, the second rule will be
+triggered, a shell will be started to execute the @samp{if@dots{}fi}
+command, but actually it will just execute the @code{then} branch,
+that is: nothing. In other words, because the witness we selected is
+not the first file created by @command{foo}, @command{make} will start
+a shell to do nothing each time it is run.
+
+A simple riposte is to fix the timestamps when this happens.
+
+@example
+data.c: data.foo data.bar
+ foo data.foo data.bar
+data.h data.w data.x: data.c
+ @@if test -f $@@; then \
+ touch $@@; \
+ else \
+## Recover from the removal of $@@
+ rm -f data.c; \
+ $(MAKE) $(AM_MAKEFLAGS) data.c; \
+ fi
+@end example
+
+Another solution is to use a different and dedicated file as witness,
+rather than using any of @command{foo}'s outputs.
+
+@example
+data.stamp: data.foo data.bar
+ @@rm -f data.tmp
+ @@touch data.tmp
+ foo data.foo data.bar
+ @@mv -f data.tmp $@@
+data.c data.h data.w data.x: data.stamp
+## Recover from the removal of $@@
+ @@if test -f $@@; then :; else \
+ rm -f data.stamp; \
+ $(MAKE) $(AM_MAKEFLAGS) data.stamp; \
+ fi
+@end example
+
+@file{data.tmp} is created before @command{foo} is run, so it has a
+timestamp older than output files output by @command{foo}. It is then
+renamed to @file{data.stamp} after @command{foo} has run, because we
+do not want to update @file{data.stamp} if @command{foo} fails.
+
+This solution still suffers from the second problem: the race
+condition in the recover rule. If, after a successful build, a user
+erases @file{data.c} and @file{data.h}, and runs @samp{make -j}, then
+@command{make} may start both recover rules in parallel. If the two
+instances of the rule execute @samp{$(MAKE) $(AM_MAKEFLAGS)
+data.stamp} concurrently the build is likely to fail (for instance, the
+two rules will create @file{data.tmp}, but only one can rename it).
+
+Admittedly, such a weird situation does not arise during ordinary
+builds. It occurs only when the build tree is mutilated. Here
+@file{data.c} and @file{data.h} have been explicitly removed without
+also removing @file{data.stamp} and the other output files.
+@code{make clean; make} will always recover from these situations even
+with parallel makes, so you may decide that the recover rule is solely
+to help non-parallel make users and leave things as-is. Fixing this
+requires some locking mechanism to ensure only one instance of the
+recover rule rebuilds @file{data.stamp}. One could imagine something
+along the following lines.
+
+@example
+data.c data.h data.w data.x: data.stamp
+## Recover from the removal of $@@
+ @@if test -f $@@; then :; else \
+ trap 'rm -rf data.lock data.stamp' 1 2 13 15; \
+## mkdir is a portable test-and-set
+ if mkdir data.lock 2>/dev/null; then \
+## This code is being executed by the first process.
+ rm -f data.stamp; \
+ $(MAKE) $(AM_MAKEFLAGS) data.stamp; \
+ result=$$?; rm -rf data.lock; exit $$result; \
+ else \
+## This code is being executed by the follower processes.
+## Wait until the first process is done.
+ while test -d data.lock; do sleep 1; done; \
+## Succeed if and only if the first process succeeded.
+ test -f data.stamp; \
+ fi; \
+ fi
+@end example
+
+Using a dedicated witness, like @file{data.stamp}, is very handy when
+the list of output files is not known beforehand. As an illustration,
+consider the following rules to compile many @file{*.el} files into
+@file{*.elc} files in a single command. It does not matter how
+@code{ELFILES} is defined (as long as it is not empty: empty targets
+are not accepted by POSIX).
+
+@example
+ELFILES = one.el two.el three.el @dots{}
+ELCFILES = $(ELFILES:=c)
+
+elc-stamp: $(ELFILES)
+ @@rm -f elc-temp
+ @@touch elc-temp
+ $(elisp_comp) $(ELFILES)
+ @@mv -f elc-temp $@@
+
+$(ELCFILES): elc-stamp
+ @@if test -f $@@; then :; else \
+## Recover from the removal of $@@
+ trap 'rm -rf elc-lock elc-stamp' 1 2 13 15; \
+ if mkdir elc-lock 2>/dev/null; then \
+## This code is being executed by the first process.
+ rm -f elc-stamp; \
+ $(MAKE) $(AM_MAKEFLAGS) elc-stamp; \
+ rmdir elc-lock; \
+ else \
+## This code is being executed by the follower processes.
+## Wait until the first process is done.
+ while test -d elc-lock; do sleep 1; done; \
+## Succeed if and only if the first process succeeded.
+ test -f elc-stamp; exit $$?; \
+@c $$
+ fi; \
+ fi
+@end example
+
+These solutions all still suffer from the third problem, namely that
+they break the promise that @samp{make -n} should not cause any actual
+changes to the tree. For those solutions that do not create lock files,
+it is possible to split the recover rules into two separate recipe
+commands, one of which does all work but the recursion, and the
+other invokes the recursive @samp{$(MAKE)}. The solutions involving
+locking could act upon the contents of the @samp{MAKEFLAGS} variable,
+but parsing that portably is not easy (@pxref{The Make Macro MAKEFLAGS,,,
+autoconf, The Autoconf Manual}). Here is an example:
+
+@example
+ELFILES = one.el two.el three.el @dots{}
+ELCFILES = $(ELFILES:=c)
+
+elc-stamp: $(ELFILES)
+ @@rm -f elc-temp
+ @@touch elc-temp
+ $(elisp_comp) $(ELFILES)
+ @@mv -f elc-temp $@@
+
+$(ELCFILES): elc-stamp
+## Recover from the removal of $@@
+ @@dry=; for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=*|--*);; \
+ *n*) dry=:;; \
+ esac; \
+ done; \
+ if test -f $@@; then :; else \
+ $$dry trap 'rm -rf elc-lock elc-stamp' 1 2 13 15; \
+ if $$dry mkdir elc-lock 2>/dev/null; then \
+## This code is being executed by the first process.
+ $$dry rm -f elc-stamp; \
+ $(MAKE) $(AM_MAKEFLAGS) elc-stamp; \
+ $$dry rmdir elc-lock; \
+ else \
+## This code is being executed by the follower processes.
+## Wait until the first process is done.
+ while test -d elc-lock && test -z "$$dry"; do \
+@c $$
+ sleep 1; \
+ done; \
+## Succeed if and only if the first process succeeded.
+ $$dry test -f elc-stamp; exit $$?; \
+ fi; \
+ fi
+@end example
+
+For completeness it should be noted that GNU @command{make} is able to
+express rules with multiple output files using pattern rules
+(@pxref{Pattern Examples, , Pattern Rule Examples, make, The GNU Make
+Manual}). We do not discuss pattern rules here because they are not
+portable, but they can be convenient in packages that assume GNU
+@command{make}.
+
+
+@node Hard-Coded Install Paths
+@section Installing to Hard-Coded Locations
+
+@display
+My package needs to install some configuration file. I tried to use
+the following rule, but @samp{make distcheck} fails. Why?
+
+@example
+# Do not do this.
+install-data-local:
+ $(INSTALL_DATA) $(srcdir)/afile $(DESTDIR)/etc/afile
+@end example
+@end display
+
+@display
+My package needs to populate the installation directory of another
+package at install-time. I can easily compute that installation
+directory in @file{configure}, but if I install files therein,
+@samp{make distcheck} fails. How else should I do?
+@end display
+
+These two setups share their symptoms: @samp{make distcheck} fails
+because they are installing files to hard-coded paths. In the later
+case the path is not really hard-coded in the package, but we can
+consider it to be hard-coded in the system (or in whichever tool that
+supplies the path). As long as the path does not use any of the
+standard directory variables (@samp{$(prefix)}, @samp{$(bindir)},
+@samp{$(datadir)}, etc.), the effect will be the same:
+user-installations are impossible.
+
+As a (non-root) user who wants to install a package, you usually have no
+right to install anything in @file{/usr} or @file{/usr/local}. So you
+do something like @samp{./configure --prefix ~/usr} to install a
+package in your own @file{~/usr} tree.
+
+If a package attempts to install something to some hard-coded path
+(e.g., @file{/etc/afile}), regardless of this @option{--prefix} setting,
+then the installation will fail. @samp{make distcheck} performs such
+a @option{--prefix} installation, hence it will fail too.
+
+Now, there are some easy solutions.
+
+The above @code{install-data-local} example for installing
+@file{/etc/afile} would be better replaced by
+
+@example
+sysconf_DATA = afile
+@end example
+
+@noindent
+by default @code{sysconfdir} will be @samp{$(prefix)/etc}, because
+this is what the GNU Standards require. When such a package is
+installed on an FHS compliant system, the installer will have to set
+@samp{--sysconfdir=/etc}. As the maintainer of the package you
+should not be concerned by such site policies: use the appropriate
+standard directory variable to install your files so that the installer
+can easily redefine these variables to match their site conventions.
+
+Installing files that should be used by another package is slightly
+more involved. Let's take an example and assume you want to install
+a shared library that is a Python extension module. If you ask Python
+where to install the library, it will answer something like this:
+
+@example
+% @kbd{python -c 'from distutils import sysconfig;
+ print sysconfig.get_python_lib(1,0)'}
+/usr/lib/python2.5/site-packages
+@end example
+
+If you indeed use this absolute path to install your shared library,
+non-root users will not be able to install the package, hence
+distcheck fails.
+
+Let's do better. The @samp{sysconfig.get_python_lib()} function
+actually accepts a third argument that will replace Python's
+installation prefix.
+
+@example
+% @kbd{python -c 'from distutils import sysconfig;
+ print sysconfig.get_python_lib(1,0,"$@{exec_prefix@}")'}
+$@{exec_prefix@}/lib/python2.5/site-packages
+@end example
+
+You can also use this new path. If you do
+@itemize @bullet
+@item
+root users can install your package with the same @option{--prefix}
+as Python (you get the behavior of the previous attempt)
+
+@item
+non-root users can install your package too, they will have the
+extension module in a place that is not searched by Python but they
+can work around this using environment variables (and if you installed
+scripts that use this shared library, it's easy to tell Python were to
+look in the beginning of your script, so the script works in both
+cases).
+@end itemize
+
+The @code{AM_PATH_PYTHON} macro uses similar commands to define
+@samp{$(pythondir)} and @samp{$(pyexecdir)} (@pxref{Python}).
+
+Of course not all tools are as advanced as Python regarding that
+substitution of @var{prefix}. So another strategy is to figure the
+part of the installation directory that must be preserved. For
+instance, here is how @code{AM_PATH_LISPDIR} (@pxref{Emacs Lisp})
+computes @samp{$(lispdir)}:
+
+@example
+$EMACS -batch -Q -eval '(while load-path
+ (princ (concat (car load-path) "\n"))
+ (setq load-path (cdr load-path)))' >conftest.out
+lispdir=`sed -n
+ -e 's,/$,,'
+ -e '/.*\/lib\/x*emacs\/site-lisp$/@{
+ s,.*/lib/\(x*emacs/site-lisp\)$,$@{libdir@}/\1,;p;q;
+ @}'
+ -e '/.*\/share\/x*emacs\/site-lisp$/@{
+ s,.*/share/\(x*emacs/site-lisp\),$@{datarootdir@}/\1,;p;q;
+ @}'
+ conftest.out`
+@end example
+
+I.e., it just picks the first directory that looks like
+@file{*/lib/*emacs/site-lisp} or @file{*/share/*emacs/site-lisp} in
+the search path of emacs, and then substitutes @samp{$@{libdir@}} or
+@samp{$@{datadir@}} appropriately.
+
+The emacs case looks complicated because it processes a list and
+expects two possible layouts, otherwise it's easy, and the benefits for
+non-root users are really worth the extra @command{sed} invocation.
+
+
+@node Debugging Make Rules
+@section Debugging Make Rules
+@cindex debugging rules
+@cindex rules, debugging
+
+The rules and dependency trees generated by @command{automake} can get
+rather complex, and leave the developer head-scratching when things
+don't work as expected. Besides the debug options provided by the
+@command{make} command (@pxref{Options Summary,,, make, The GNU Make
+Manual}), here's a couple of further hints for debugging makefiles
+generated by @command{automake} effectively:
+
+@itemize
+@item
+If less verbose output has been enabled in the package with the use
+of silent rules (@pxref{Automake Silent Rules}), you can use
+@code{make V=1} to see the commands being executed.
+@item
+@code{make -n} can help show what would be done without actually doing
+it. Note however, that this will @emph{still execute} commands prefixed
+with @samp{+}, and, when using GNU @command{make}, commands that contain
+the strings @samp{$(MAKE)} or @samp{$@{MAKE@}} (@pxref{Instead of
+Execution,,, make, The GNU Make Manual}).
+Typically, this is helpful to show what recursive rules would do, but it
+means that, in your own rules, you should not mix such recursion with
+actions that change any files.@footnote{Automake's @samp{dist} and
+@samp{distcheck} rules had a bug in this regard in that they created
+directories even with @option{-n}, but this has been fixed in Automake
+1.11.} Furthermore, note that GNU @command{make} will update
+prerequisites for the @file{Makefile} file itself even with @option{-n}
+(@pxref{Remaking Makefiles,,, make, The GNU Make Manual}).
+@item
+@code{make SHELL="/bin/bash -vx"} can help debug complex rules.
+@xref{The Make Macro SHELL,,, autoconf, The Autoconf Manual}, for some
+portability quirks associated with this construct.
+@item
+@code{echo 'print: ; @@echo "$(VAR)"' | make -f Makefile -f - print}
+can be handy to examine the expanded value of variables. You may need
+to use a target other than @samp{print} if that is already used or a
+file with that name exists.
+@item
+@url{http://bashdb.sourceforge.net/@/remake/} provides a modified
+GNU @command{make} command called @command{remake} that copes with
+complex GNU @command{make}-specific Makefiles and allows to trace
+execution, examine variables, and call rules interactively, much like
+a debugger.
+@end itemize
+
+
+@node Reporting Bugs
+@section Reporting Bugs
+
+Most nontrivial software has bugs. Automake is no exception. Although
+we cannot promise we can or will fix a bug, and we might not even agree
+that it is a bug, we want to hear about problems you encounter. Often we
+agree they are bugs and want to fix them.
+
+To make it possible for us to fix a bug, please report it. In order to
+do so effectively, it helps to know when and how to do it.
+
+Before reporting a bug, it is a good idea to see if it is already known.
+You can look at the @uref{https://debbugs.gnu.org/, GNU Bug Tracker}
+and the @uref{https://lists.gnu.org/@/archive/@/html/@/bug-automake/,
+bug-automake mailing list archives} for previous bug reports. We
+previously used a
+@uref{http://sourceware.org/@/cgi-bin/@/gnatsweb.pl?database=automake,
+Gnats database} for bug tracking, so some bugs might have been reported
+there already. Please do not use it for new bug reports, however.
+
+If the bug is not already known, it should be reported. It is very
+important to report bugs in a way that is useful and efficient. For
+this, please familiarize yourself with
+@uref{http://www.chiark.greenend.org.uk/@/~sgtatham/@/bugs.html, How to
+Report Bugs Effectively} and
+@uref{http://catb.org/@/~esr/@/faqs/@/smart-questions.html, How to Ask
+Questions the Smart Way}. This helps you and developers to save time
+which can then be spent on fixing more bugs and implementing more
+features.
+
+For a bug report, a feature request or other suggestions, please send
+email to @email{@value{PACKAGE_BUGREPORT}}. This will then open a new
+bug in the @uref{https://debbugs.gnu.org/@/automake, bug tracker}. Be
+sure to include the versions of Autoconf and Automake that you use.
+Ideally, post a minimal @file{Makefile.am} and @file{configure.ac} that
+reproduces the problem you encounter. If you have encountered test
+suite failures, please attach the @file{test-suite.log} file.
+
+@c ========================================================== Appendices
+
+@page
+@node Copying This Manual
+@appendix Copying This Manual
+
+@menu
+* GNU Free Documentation License:: License for copying this manual
+@end menu
+
+@node GNU Free Documentation License
+@appendixsec GNU Free Documentation License
+@include fdl.texi
+
+@page
+@node Indices
+@appendix Indices
+
+@menu
+* Macro Index:: Index of Autoconf macros
+* Variable Index:: Index of Makefile variables
+* General Index:: General index
+@end menu
+
+@node Macro Index
+@appendixsec Macro Index
+
+@printindex fn
+
+@node Variable Index
+@appendixsec Variable Index
+
+@printindex vr
+
+@node General Index
+@appendixsec General Index
+
+@printindex cp
+
+
+@bye
+
+@c LocalWords: texinfo setfilename settitle setchapternewpage texi direntry
+@c LocalWords: dircategory in's aclocal ifinfo titlepage Tromey vskip pt sp
+@c LocalWords: filll defcodeindex ov cv op tr syncodeindex fn cp vr ifnottex
+@c LocalWords: dir Automake's ac Dist Gnits gnits dfn Autoconf's pxref
+@c LocalWords: cindex Autoconf autoconf perl samp cvs dist trindex SUBST foo
+@c LocalWords: xs emph FIXME ref vindex pkglibdir pkgincludedir pkgdatadir mt
+@c LocalWords: pkg libdir cpio bindir sbindir rmt pax sbin zar zardir acindex
+@c LocalWords: HTML htmldir html noinst TEXINFOS nodist nobase strudel CFLAGS
+@c LocalWords: libmumble CC YFLAGS itemx de fication config url comp
+@c LocalWords: depcomp elisp sh mdate mkinstalldirs mkdir py tex dvi ps pdf
+@c LocalWords: ylwrap zardoz INIT gettext acinclude mv FUNCS LIBOBJS LDADD fr
+@c LocalWords: uref featureful dnl src LINGUAS es ko nl pl sl sv PROG ISC doc
+@c LocalWords: POSIX STDC fcntl FUNC ALLOCA blksize struct stat intl po chmod
+@c LocalWords: ChangeLog SUBDIRS gettextize gpl testdata getopt INTLLIBS cpp
+@c LocalWords: localedir datadir DLOCALEDIR DEXIT CPPFLAGS autoreconf opindex
+@c LocalWords: AUX var symlink deps Wno Wnone package's aclocal's distclean
+@c LocalWords: ltmain xref LIBSOURCE LIBSOURCES LIBOBJ MEMCMP vs RANLIB CXX
+@c LocalWords: LDFLAGS LIBTOOL libtool XTRA LIBS gettext's acdir APIVERSION
+@c LocalWords: dirlist noindent usr TIOCGWINSZ sc
+@c LocalWords: GWINSZ termios SRCDIR tarball bzip LISPDIR lispdir XEmacs CCAS
+@c LocalWords: emacsen MicroEmacs CCASFLAGS UX GCJ gcj GCJFLAGS posix DMALLOC
+@c LocalWords: dmalloc ldmalloc REGEX regex DEPDIR DEP DEFUN aclocaldir fi
+@c LocalWords: mymacro myothermacro AMFLAGS autopoint autogen libtoolize yum
+@c LocalWords: autoheader README MAKEFLAGS subdir Inetutils sync COND endif
+@c LocalWords: Miller's installable includedir inc pkgdata EXEEXT libexec bsd
+@c LocalWords: pkglib libexecdir prog libcpio cpio's dlopen dlpreopen linux
+@c LocalWords: subsubsection OBJEXT esac lib LTLIBRARIES liblob LIBADD AR ar
+@c LocalWords: ARFLAGS cru ing maude libgettext lo LTLIBOBJS rpath SGI PRE yy
+@c LocalWords: libmaude CCLD CXXFLAGS FFLAGS LFLAGS OBJCFLAGS RFLAGS DEFS cc
+@c LocalWords: OBJCXXFLAGS
+@c LocalWords: SHORTNAME vtable srcdir nostdinc basename yxx cxx ll lxx gdb
+@c LocalWords: lexers yymaxdepth maxdepth yyparse yylex yyerror yylval lval
+@c LocalWords: yychar yydebug yypact yyr yydef def yychk chk yypgo pgo yyact
+@c LocalWords: yyexca exca yyerrflag errflag yynerrs nerrs yyps yypv pv yys
+@c LocalWords: yystate yytmp tmp yyv yyval val yylloc lloc yyreds yytoks toks
+@c LocalWords: yylhs yylen yydefred yydgoto yysindex yyrindex yygindex yyname
+@c LocalWords: yytable yycheck yyrule byacc CXXCOMPILE CXXLINK FLINK cfortran
+@c LocalWords: Catalogue preprocessable FLIBS libfoo baz JAVACFLAGS java exe
+@c LocalWords: SunOS fying basenames exeext uninstalled oldinclude kr FSF's
+@c LocalWords: pkginclude oldincludedir sysconf sharedstate localstate gcc rm
+@c LocalWords: sysconfdir sharedstatedir localstatedir preexist CLEANFILES gz
+@c LocalWords: depfile tmpdepfile depmode const interoperate
+@c LocalWords: JAVAC javac JAVAROOT builddir CLASSPATH ENV pyc pyo pkgpython
+@c LocalWords: pyexecdir pkgpyexecdir Python's pythondir pkgpythondir txi ois
+@c LocalWords: installinfo vers MAKEINFO makeinfo MAKEINFOFLAGS noinstall rf
+@c LocalWords: mandir thesame alsothesame installman myexecbin DESTDIR Pinard
+@c LocalWords: uninstall installdirs uninstalls MOSTLYCLEANFILES mostlyclean
+@c LocalWords: DISTCLEANFILES MAINTAINERCLEANFILES GZIP gzip shar exp
+@c LocalWords: distdir distcheck distcleancheck listfiles distuninstallcheck
+@c LocalWords: VPATH tarfile stdout XFAIL DejaGnu dejagnu DEJATOOL runtest ln
+@c LocalWords: RUNTESTDEFAULTFLAGS toolchain RUNTESTFLAGS asis readme DVIPS
+@c LocalWords: installcheck gzipped tarZ std utils etags mkid cd
+@c LocalWords: ARGS taggable ETAGSFLAGS lang ctags CTAGSFLAGS GTAGS gtags idl
+@c LocalWords: foocc doit idlC multilibs ABIs cmindex defmac ARG enableval FC
+@c LocalWords: MSG xtrue DBG pathchk CYGWIN afile proglink versioned CVS's TE
+@c LocalWords: wildcards Autoconfiscated subsubheading autotools Meyering API
+@c LocalWords: ois's wildcard Wportability cartouche vrindex printindex Duret
+@c LocalWords: DSOMEFLAG DVERSION automake Lutz insertcopying versioning FAQ
+@c LocalWords: LTLIBOBJ Libtool's libtool's libltdl dlopening itutions libbar
+@c LocalWords: WANTEDLIBS libhello sublibraries libtop libsub dlopened Ratfor
+@c LocalWords: mymodule timestamps timestamp underquoted MAKEINFOHTMLFLAGS te
+@c LocalWords: GNUmakefile Subpackages subpackage's subpackages aux
+@c LocalWords: detailmenu Timeline pwd reldir AUTOM autom PREREQ FOOBAR libc
+@c LocalWords: libhand subpackage moduleN libmain libmisc FCFLAGS FCCOMPILE
+@c LocalWords: FCLINK subst sed ELCFILES elc MAKEINFOHTML dvips esyscmd ustar
+@c LocalWords: tarballs Woverride vfi ELFILES djm AutoMake honkin FSF
+@c LocalWords: fileutils precanned MacKenzie's reimplement termutils Tromey's
+@c LocalWords: cois gnitsians LIBPROGRAMS progs LIBLIBRARIES Textutils Ulrich
+@c LocalWords: Matzigkeit Drepper's Gord Matzigkeit's jm Dalley Debian org
+@c LocalWords: Administrivia ILU CORBA Sourceware Molenda sourceware Elliston
+@c LocalWords: dep Oliva Akim Demaille Aiieeee Demaillator Akim's sourcequake
+@c LocalWords: grep backported screenshots libgcj KB unnumberedsubsubsec pre
+@c LocalWords: precomputing hacky makedepend inline clearmake LD PRELOAD Rel
+@c LocalWords: syscalls perlhist acl pm multitable headitem fdl appendixsec
+@c LocalWords: LTALLOCA MALLOC malloc memcmp strdup alloca libcompat xyz DFOO
+@c LocalWords: unprefixed buildable preprocessed DBAZ DDATADIR WARNINGCFLAGS
+@c LocalWords: LIBFOOCFLAGS LIBFOOLDFLAGS ftable testSubDir obj LIBTOOLFLAGS
+@c LocalWords: barexec Pinard's automatize initialize lzip xz cscope
diff --git a/doc/fdl.texi b/doc/fdl.texi
new file mode 100644
index 000000000..16589f90b
--- /dev/null
+++ b/doc/fdl.texi
@@ -0,0 +1,506 @@
+@c The GNU Free Documentation License.
+@center Version 1.3, 3 November 2008
+
+@c This file is intended to be included within another document,
+@c hence no sectioning command or @node.
+
+@display
+Copyright @copyright{} 2000-2017 Free Software Foundation, Inc.
+@uref{http://fsf.org/}
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+@end display
+
+@enumerate 0
+@item
+PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+functional and useful document @dfn{free} in the sense of freedom: to
+assure everyone the effective freedom to copy and redistribute it,
+with or without modifying it, either commercially or noncommercially.
+Secondarily, this License preserves for the author and publisher a way
+to get credit for their work, while not being considered responsible
+for modifications made by others.
+
+This License is a kind of ``copyleft'', which means that derivative
+works of the document must themselves be free in the same sense. It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does. But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book. We recommend this License
+principally for works whose purpose is instruction or reference.
+
+@item
+APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that
+contains a notice placed by the copyright holder saying it can be
+distributed under the terms of this License. Such a notice grants a
+world-wide, royalty-free license, unlimited in duration, to use that
+work under the conditions stated herein. The ``Document'', below,
+refers to any such manual or work. Any member of the public is a
+licensee, and is addressed as ``you''. You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.
+
+A ``Modified Version'' of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A ``Secondary Section'' is a named appendix or a front-matter section
+of the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall
+subject (or to related matters) and contains nothing that could fall
+directly within that overall subject. (Thus, if the Document is in
+part a textbook of mathematics, a Secondary Section may not explain
+any mathematics.) The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The ``Invariant Sections'' are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License. If a
+section does not fit the above definition of Secondary then it is not
+allowed to be designated as Invariant. The Document may contain zero
+Invariant Sections. If the Document does not identify any Invariant
+Sections then there are none.
+
+The ``Cover Texts'' are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License. A Front-Cover Text may
+be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A ``Transparent'' copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, that is suitable for revising the document
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters. A copy made in an otherwise Transparent file
+format whose markup, or absence of markup, has been arranged to thwart
+or discourage subsequent modification by readers is not Transparent.
+An image format is not Transparent if used for any substantial amount
+of text. A copy that is not ``Transparent'' is called ``Opaque''.
+
+Examples of suitable formats for Transparent copies include plain
+@sc{ascii} without markup, Texinfo input format, La@TeX{} input
+format, @acronym{SGML} or @acronym{XML} using a publicly available
+@acronym{DTD}, and standard-conforming simple @acronym{HTML},
+PostScript or @acronym{PDF} designed for human modification. Examples
+of transparent image formats include @acronym{PNG}, @acronym{XCF} and
+@acronym{JPG}. Opaque formats include proprietary formats that can be
+read and edited only by proprietary word processors, @acronym{SGML} or
+@acronym{XML} for which the @acronym{DTD} and/or processing tools are
+not generally available, and the machine-generated @acronym{HTML},
+PostScript or @acronym{PDF} produced by some word processors for
+output purposes only.
+
+The ``Title Page'' means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page. For works in
+formats which do not have any title page as such, ``Title Page'' means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+The ``publisher'' means any person or entity that distributes copies
+of the Document to the public.
+
+A section ``Entitled XYZ'' means a named subunit of the Document whose
+title either is precisely XYZ or contains XYZ in parentheses following
+text that translates XYZ in another language. (Here XYZ stands for a
+specific section name mentioned below, such as ``Acknowledgements'',
+``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title''
+of such a section when you modify the Document means that it remains a
+section ``Entitled XYZ'' according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which
+states that this License applies to the Document. These Warranty
+Disclaimers are considered to be included by reference in this
+License, but only as regards disclaiming warranties: any other
+implication that these Warranty Disclaimers may have is void and has
+no effect on the meaning of this License.
+
+@item
+VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License. You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute. However, you may accept
+compensation in exchange for copies. If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
+@item
+COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have
+printed covers) of the Document, numbering more than 100, and the
+Document's license notice requires Cover Texts, you must enclose the
+copies in covers that carry, clearly and legibly, all of these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover. Both covers must also clearly and legibly identify
+you as the publisher of these copies. The front cover must present
+the full title with all words of the title equally prominent and
+visible. You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a computer-network location from which the general network-using
+public has access to download using public-standard network protocols
+a complete Transparent copy of the Document, free of added material.
+If you use the latter option, you must take reasonably prudent steps,
+when you begin distribution of Opaque copies in quantity, to ensure
+that this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+
+@item
+MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it. In addition, you must do these things in the Modified Version:
+
+@enumerate A
+@item
+Use in the Title Page (and on the covers, if any) a title distinct
+from that of the Document, and from those of previous versions
+(which should, if there were any, be listed in the History section
+of the Document). You may use the same title as a previous version
+if the original publisher of that version gives permission.
+
+@item
+List on the Title Page, as authors, one or more persons or entities
+responsible for authorship of the modifications in the Modified
+Version, together with at least five of the principal authors of the
+Document (all of its principal authors, if it has fewer than five),
+unless they release you from this requirement.
+
+@item
+State on the Title page the name of the publisher of the
+Modified Version, as the publisher.
+
+@item
+Preserve all the copyright notices of the Document.
+
+@item
+Add an appropriate copyright notice for your modifications
+adjacent to the other copyright notices.
+
+@item
+Include, immediately after the copyright notices, a license notice
+giving the public permission to use the Modified Version under the
+terms of this License, in the form shown in the Addendum below.
+
+@item
+Preserve in that license notice the full lists of Invariant Sections
+and required Cover Texts given in the Document's license notice.
+
+@item
+Include an unaltered copy of this License.
+
+@item
+Preserve the section Entitled ``History'', Preserve its Title, and add
+to it an item stating at least the title, year, new authors, and
+publisher of the Modified Version as given on the Title Page. If
+there is no section Entitled ``History'' in the Document, create one
+stating the title, year, authors, and publisher of the Document as
+given on its Title Page, then add an item describing the Modified
+Version as stated in the previous sentence.
+
+@item
+Preserve the network location, if any, given in the Document for
+public access to a Transparent copy of the Document, and likewise
+the network locations given in the Document for previous versions
+it was based on. These may be placed in the ``History'' section.
+You may omit a network location for a work that was published at
+least four years before the Document itself, or if the original
+publisher of the version it refers to gives permission.
+
+@item
+For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve
+the Title of the section, and preserve in the section all the
+substance and tone of each of the contributor acknowledgements and/or
+dedications given therein.
+
+@item
+Preserve all the Invariant Sections of the Document,
+unaltered in their text and in their titles. Section numbers
+or the equivalent are not considered part of the section titles.
+
+@item
+Delete any section Entitled ``Endorsements''. Such a section
+may not be included in the Modified Version.
+
+@item
+Do not retitle any existing section to be Entitled ``Endorsements'' or
+to conflict in title with any Invariant Section.
+
+@item
+Preserve any Warranty Disclaimers.
+@end enumerate
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant. To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section Entitled ``Endorsements'', provided it contains
+nothing but endorsements of your Modified Version by various
+parties---for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version. Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity. If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
+@item
+COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy. If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled ``History''
+in the various original documents, forming one section Entitled
+``History''; likewise combine any sections Entitled ``Acknowledgements'',
+and any sections Entitled ``Dedications''. You must delete all
+sections Entitled ``Endorsements.''
+
+@item
+COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+
+@item
+AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, is called an ``aggregate'' if the copyright
+resulting from the compilation is not used to limit the legal rights
+of the compilation's users beyond what the individual works permit.
+When the Document is included in an aggregate, this License does not
+apply to the other works in the aggregate which are not themselves
+derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one half of
+the entire aggregate, the Document's Cover Texts may be placed on
+covers that bracket the Document within the aggregate, or the
+electronic equivalent of covers if the Document is in electronic form.
+Otherwise they must appear on printed covers that bracket the whole
+aggregate.
+
+@item
+TRANSLATION
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections. You may include a
+translation of this License, and all the license notices in the
+Document, and any Warranty Disclaimers, provided that you also include
+the original English version of this License and the original versions
+of those notices and disclaimers. In case of a disagreement between
+the translation and the original version of this License or a notice
+or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled ``Acknowledgements'',
+``Dedications'', or ``History'', the requirement (section 4) to Preserve
+its Title (section 1) will typically require changing the actual
+title.
+
+@item
+TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense, or distribute it is void, and
+will automatically terminate your rights under this License.
+
+However, if you cease all violation of this License, then your license
+from a particular copyright holder is reinstated (a) provisionally,
+unless and until the copyright holder explicitly and finally
+terminates your license, and (b) permanently, if the copyright holder
+fails to notify you of the violation by some reasonable means prior to
+60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, receipt of a copy of some or all of the same material does
+not give you any rights to use it.
+
+@item
+FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions
+of the GNU Free Documentation License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns. See
+@uref{http://www.gnu.org/copyleft/}.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License ``or any later version'' applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation. If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation. If the Document
+specifies that a proxy can decide which future versions of this
+License can be used, that proxy's public statement of acceptance of a
+version permanently authorizes you to choose that version for the
+Document.
+
+@item
+RELICENSING
+
+``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any
+World Wide Web server that publishes copyrightable works and also
+provides prominent facilities for anybody to edit those works. A
+public wiki that anybody can edit is an example of such a server. A
+``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the
+site means any set of copyrightable works thus published on the MMC
+site.
+
+``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0
+license published by Creative Commons Corporation, a not-for-profit
+corporation with a principal place of business in San Francisco,
+California, as well as future copyleft versions of that license
+published by that same organization.
+
+``Incorporate'' means to publish or republish a Document, in whole or
+in part, as part of another Document.
+
+An MMC is ``eligible for relicensing'' if it is licensed under this
+License, and if all works that were first published under this License
+somewhere other than this MMC, and subsequently incorporated in whole
+or in part into the MMC, (1) had no cover texts or invariant sections,
+and (2) were thus incorporated prior to November 1, 2008.
+
+The operator of an MMC Site may republish an MMC contained in the site
+under CC-BY-SA on the same site at any time before August 1, 2009,
+provided the MMC is eligible for relicensing.
+
+@end enumerate
+
+@page
+@heading ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+@smallexample
+@group
+ Copyright (C) @var{year} @var{your name}.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+ Texts. A copy of the license is included in the section entitled ``GNU
+ Free Documentation License''.
+@end group
+@end smallexample
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the ``with@dots{}Texts.'' line with this:
+
+@smallexample
+@group
+ with the Invariant Sections being @var{list their titles}, with
+ the Front-Cover Texts being @var{list}, and with the Back-Cover Texts
+ being @var{list}.
+@end group
+@end smallexample
+
+If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
+
+@c Local Variables:
+@c ispell-local-pdict: "ispell-dict"
+@c End:
+
diff --git a/doc/help2man b/doc/help2man
new file mode 100755
index 000000000..f7a9c455c
--- /dev/null
+++ b/doc/help2man
@@ -0,0 +1,768 @@
+#!/usr/bin/perl -w
+
+# Generate a short man page from --help and --version output.
+# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2009,
+# 2010, 2011, 2012, 2013, 2014, 2015 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 3, 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 <https://www.gnu.org/licenses/>.
+
+# Written by Brendan O'Dea <bod@debian.org>
+# Available from https://ftp.gnu.org/gnu/help2man/
+
+use 5.008;
+use strict;
+use Getopt::Long;
+use Text::ParseWords qw(shellwords);
+use Text::Tabs qw(expand);
+use POSIX qw(strftime setlocale LC_ALL);
+
+my $this_program = 'help2man';
+my $this_version = '1.47.4';
+
+sub _ { $_[0] }
+sub configure_locale
+{
+ my $locale = shift;
+ die "$this_program: no locale support (Locale::gettext required)\n"
+ unless $locale eq 'C';
+}
+
+sub dec { $_[0] }
+sub enc { $_[0] }
+sub enc_user { $_[0] }
+sub kark { die +(sprintf shift, @_), "\n" }
+sub N_ { $_[0] }
+
+sub program_basename;
+sub get_option_value;
+sub convert_option;
+sub fix_italic_spacing;
+
+my $version_info = enc_user sprintf _(<<'EOT'), $this_program, $this_version;
+GNU %s %s
+
+Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2009, 2010,
+2011, 2012, 2013, 2014, 2015 Free Software Foundation, Inc.
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+Written by Brendan O'Dea <bod@debian.org>
+EOT
+
+my $help_info = enc_user sprintf _(<<'EOT'), $this_program, $this_program;
+`%s' generates a man page out of `--help' and `--version' output.
+
+Usage: %s [OPTION]... EXECUTABLE
+
+ -n, --name=STRING description for the NAME paragraph
+ -s, --section=SECTION section number for manual page (1, 6, 8)
+ -m, --manual=TEXT name of manual (User Commands, ...)
+ -S, --source=TEXT source of program (FSF, Debian, ...)
+ -L, --locale=STRING select locale (default "C")
+ -i, --include=FILE include material from `FILE'
+ -I, --opt-include=FILE include material from `FILE' if it exists
+ -o, --output=FILE send output to `FILE'
+ -p, --info-page=TEXT name of Texinfo manual
+ -N, --no-info suppress pointer to Texinfo manual
+ -l, --libtool exclude the `lt-' from the program name
+ --help print this help, then exit
+ --version print version number, then exit
+
+EXECUTABLE should accept `--help' and `--version' options and produce output on
+stdout although alternatives may be specified using:
+
+ -h, --help-option=STRING help option string
+ -v, --version-option=STRING version option string
+ --version-string=STRING version string
+ --no-discard-stderr include stderr when parsing option output
+
+Report bugs to <bug-help2man@gnu.org>.
+EOT
+
+my $section = 1;
+my $manual = '';
+my $source = '';
+my $help_option = '--help';
+my $version_option = '--version';
+my $discard_stderr = 1;
+my ($opt_name, @opt_include, $opt_output, $opt_info, $opt_no_info, $opt_libtool,
+ $version_text);
+
+my %opt_def = (
+ 'n|name=s' => \$opt_name,
+ 's|section=s' => \$section,
+ 'm|manual=s' => \$manual,
+ 'S|source=s' => \$source,
+ 'L|locale=s' => sub { configure_locale pop },
+ 'i|include=s' => sub { push @opt_include, [ pop, 1 ] },
+ 'I|opt-include=s' => sub { push @opt_include, [ pop, 0 ] },
+ 'o|output=s' => \$opt_output,
+ 'p|info-page=s' => \$opt_info,
+ 'N|no-info' => \$opt_no_info,
+ 'l|libtool' => \$opt_libtool,
+ 'help' => sub { print $help_info; exit },
+ 'version' => sub { print $version_info; exit },
+ 'h|help-option=s' => \$help_option,
+ 'v|version-option=s' => \$version_option,
+ 'version-string=s' => \$version_text,
+ 'discard-stderr!' => \$discard_stderr,
+);
+
+# Parse options.
+Getopt::Long::config('bundling');
+die $help_info unless GetOptions %opt_def and @ARGV == 1;
+
+my %include = ();
+my %replace = ();
+my %append = ();
+my %append_match = ();
+my @sections = (); # retain order of include file or in-line *section*s
+
+# Process include file (if given). Format is:
+#
+# Optional initial text, ignored. May include lines starting with `-'
+# which are processed as options.
+#
+# [section]
+# Verbatim text to be included in the named section. By default at
+# the start, but in the case of `name' and `synopsis' the content
+# will replace the autogenerated contents.
+#
+# [<section]
+# Verbatim text to be inserted at the start of the named section.
+#
+# [=section]
+# Verbatim text to replace the named section.
+#
+# [>section]
+# Verbatim text to be appended to the end of the named section.
+#
+# /pattern/
+# Verbatim text for inclusion below a paragraph matching `pattern'.
+#
+
+while (@opt_include)
+{
+ my ($inc, $required) = @{shift @opt_include};
+
+ next unless -f $inc or $required;
+ kark N_("%s: can't open `%s' (%s)"), $this_program, $inc, $!
+ unless open INC, $inc;
+
+ my $key;
+ my $hash;
+
+ while (<INC>)
+ {
+ # Convert input to internal Perl format, so that multibyte
+ # sequences are treated as single characters.
+ $_ = dec $_;
+
+ # [section]
+ if (/^\[([^]]+)\]\s*$/)
+ {
+ $key = uc $1;
+ $key =~ s/^\s+//;
+ $key =~ s/\s+$//;
+ $hash = \%include;
+ # Handle explicit [<section], [=section] and [>section]
+ if ($key =~ s/^([<>=])\s*//)
+ {
+ if ($1 eq '>') { $hash = \%append; }
+ elsif ($1 eq '=') { $hash = \%replace; }
+ }
+ # NAME/SYNOPSIS replace by default
+ elsif ($key eq _('NAME') or $key eq _('SYNOPSIS'))
+ {
+ $hash = \%replace;
+ }
+ else
+ {
+ $hash = \%include;
+ }
+
+ push @sections, $key;
+ next;
+ }
+
+ # /pattern/
+ if (m!^/(.*)/([ims]*)\s*$!)
+ {
+ my $pat = $2 ? "(?$2)$1" : $1;
+
+ # Check pattern.
+ eval { $key = qr($pat) };
+ if ($@)
+ {
+ $@ =~ s/ at .*? line \d.*//;
+ die "$inc:$.:$@";
+ }
+
+ $hash = \%append_match;
+ next;
+ }
+
+ # Check for options before the first section--anything else is
+ # silently ignored, allowing the first for comments and
+ # revision info.
+ unless ($key)
+ {
+ # handle options
+ if (/^-/)
+ {
+ local @ARGV = shellwords $_;
+ GetOptions %opt_def;
+ }
+
+ next;
+ }
+
+ $hash->{$key} .= $_;
+ }
+
+ close INC;
+
+ kark N_("%s: no valid information found in `%s'"), $this_program, $inc
+ unless $key;
+}
+
+# Compress trailing blank lines.
+for my $hash (\(%include, %replace, %append, %append_match))
+{
+ for (keys %$hash) { $hash->{$_} =~ s/\n+$/\n/ }
+}
+
+# Grab help and version info from executable.
+my $help_text = get_option_value $ARGV[0], $help_option;
+$version_text ||= get_option_value $ARGV[0], $version_option;
+
+# By default the generated manual pages will include the current date. This may
+# however be overriden by setting the environment variable $SOURCE_DATE_EPOCH
+# to an integer value of the seconds since the UNIX epoch. This is primarily
+# intended to support reproducible builds (wiki.debian.org/ReproducibleBuilds)
+# and will additionally ensure that the output date string is UTC.
+my $epoch_secs = time;
+if (exists $ENV{SOURCE_DATE_EPOCH} and $ENV{SOURCE_DATE_EPOCH} =~ /^(\d+)$/)
+{
+ $epoch_secs = $1;
+ $ENV{TZ} = 'UTC';
+}
+
+# Translators: the following message is a strftime(3) format string, which in
+# the English version expands to the month as a word and the full year. It
+# is used on the footer of the generated manual pages. If in doubt, you may
+# just use %x as the value (which should be the full locale-specific date).
+my $date = enc strftime _("%B %Y"), localtime $epoch_secs;
+my $program = program_basename $ARGV[0];
+my $package = $program;
+my $version;
+
+if ($opt_output)
+{
+ unlink $opt_output or kark N_("%s: can't unlink %s (%s)"),
+ $this_program, $opt_output, $! if -e $opt_output;
+
+ open STDOUT, ">$opt_output"
+ or kark N_("%s: can't create %s (%s)"), $this_program, $opt_output, $!;
+}
+
+# The first line of the --version information is assumed to be in one
+# of the following formats:
+#
+# <version>
+# <program> <version>
+# {GNU,Free} <program> <version>
+# <program> ({GNU,Free} <package>) <version>
+# <program> - {GNU,Free} <package> <version>
+#
+# and separated from any copyright/author details by a blank line.
+
+($_, $version_text) = ((split /\n+/, $version_text, 2), '');
+
+if (/^(\S+) +\(((?:GNU|Free) +[^)]+)\) +(.*)/ or
+ /^(\S+) +- *((?:GNU|Free) +\S+) +(.*)/)
+{
+ $program = program_basename $1;
+ $package = $2;
+ $version = $3;
+}
+elsif (/^((?:GNU|Free) +)?(\S+) +(.*)/)
+{
+ $program = program_basename $2;
+ $package = $1 ? "$1$program" : $program;
+ $version = $3;
+}
+else
+{
+ $version = $_;
+}
+
+# No info for `info' itself.
+$opt_no_info = 1 if $program eq 'info';
+
+if ($opt_name)
+{
+ # --name overrides --include contents.
+ $replace{_('NAME')} = "$program \\- $opt_name\n";
+}
+
+# Translators: "NAME", "SYNOPSIS" and other one or two word strings in all
+# upper case are manual page section headings. The man(1) manual page in your
+# language, if available should provide the conventional translations.
+for ($replace{_('NAME')} || ($include{_('NAME')} ||= ''))
+{
+ if ($_) # Use first name given as $program
+ {
+ $program = $1 if /^([^\s,]+)(?:,?\s*[^\s,\\-]+)*\s+\\?-/;
+ }
+ else # Set a default (useless) NAME paragraph.
+ {
+ $_ = sprintf _("%s \\- manual page for %s %s") . "\n", $program,
+ $program, $version;
+ }
+}
+
+# Man pages traditionally have the page title in caps.
+my $PROGRAM = uc $program;
+
+# Set default page head/footers
+$source ||= "$program $version";
+unless ($manual)
+{
+ for ($section)
+ {
+ if (/^(1[Mm]|8)/) { $manual = enc _('System Administration Utilities') }
+ elsif (/^6/) { $manual = enc _('Games') }
+ else { $manual = enc _('User Commands') }
+ }
+}
+
+# Extract usage clause(s) [if any] for SYNOPSIS.
+# Translators: "Usage" and "or" here are patterns (regular expressions) which
+# are used to match the usage synopsis in program output. An example from cp
+# (GNU coreutils) which contains both strings:
+# Usage: cp [OPTION]... [-T] SOURCE DEST
+# or: cp [OPTION]... SOURCE... DIRECTORY
+# or: cp [OPTION]... -t DIRECTORY SOURCE...
+my $PAT_USAGE = _('Usage');
+my $PAT_USAGE_CONT = _('or');
+if ($help_text =~ s/^($PAT_USAGE):( +(\S+))(.*)((?:\n(?: {6}\1| *($PAT_USAGE_CONT): +\S).*)*)//om)
+{
+ my @syn = $3 . $4;
+
+ if ($_ = $5)
+ {
+ s/^\n//;
+ for (split /\n/) { s/^ *(($PAT_USAGE_CONT): +)?//o; push @syn, $_ }
+ }
+
+ my $synopsis = '';
+ for (@syn)
+ {
+ $synopsis .= ".br\n" if $synopsis;
+ s!^\S*/!!;
+ s/^lt-// if $opt_libtool;
+ s/^(\S+) *//;
+ $synopsis .= ".B $1\n";
+ s/\s+$//;
+ s/(([][]|\.\.+)+)/\\fR$1\\fI/g;
+ s/^/\\fI/ unless s/^\\fR//;
+ $_ .= '\fR';
+ s/(\\fI)( *)/$2$1/g;
+ s/\\fI\\fR//g;
+ s/^\\fR//;
+ s/\\fI$//;
+ s/^\./\\&./;
+
+ $_ = fix_italic_spacing $_;
+ $synopsis .= "$_\n";
+ }
+
+ $include{_('SYNOPSIS')} .= $synopsis;
+}
+
+# Process text, initial section is DESCRIPTION.
+my $sect = _('DESCRIPTION');
+$_ = "$help_text\n\n$version_text";
+
+# Normalise paragraph breaks.
+s/^\n+//;
+s/\n*$/\n/;
+s/\n\n+/\n\n/g;
+
+# Join hyphenated lines.
+s/([A-Za-z])-\n *([A-Za-z])/$1$2/g;
+
+# Temporarily exchange leading dots, apostrophes and backslashes for
+# tokens.
+s/^\./\x80/mg;
+s/^'/\x81/mg;
+s/\\/\x82/g;
+
+# Translators: patterns are used to match common program output. In the source
+# these strings are all of the form of "my $PAT_something = _('...');" and are
+# regular expressions. If there is more than one commonly used string, you
+# may separate alternatives with "|". Spaces in these expressions are written
+# as " +" to indicate that more than one space may be matched. The string
+# "(?:[\\w-]+ +)?" in the bug reporting pattern is used to indicate an
+# optional word, so that either "Report bugs" or "Report _program_ bugs" will
+# be matched.
+my $PAT_BUGS = _('Report +(?:[\w-]+ +)?bugs|Email +bug +reports +to');
+my $PAT_AUTHOR = _('Written +by');
+my $PAT_OPTIONS = _('Options');
+my $PAT_ENVIRONMENT = _('Environment');
+my $PAT_FILES = _('Files');
+my $PAT_EXAMPLES = _('Examples');
+my $PAT_FREE_SOFTWARE = _('This +is +free +software');
+
+# Start a new paragraph (if required) for these.
+s/([^\n])\n($PAT_BUGS|$PAT_AUTHOR) /$1\n\n$2 /og;
+
+# Convert iso-8859-1 copyright symbol or (c) to nroff
+# character.
+s/^Copyright +(?:\xa9|\([Cc]\))/Copyright \\(co/mg;
+
+while (length)
+{
+ # Convert some standard paragraph names.
+ if (s/^($PAT_OPTIONS): *\n+//o)
+ {
+ $sect = _('OPTIONS');
+ next;
+ }
+ if (s/^($PAT_ENVIRONMENT): *\n+//o)
+ {
+ $sect = _('ENVIRONMENT');
+ next;
+ }
+ if (s/^($PAT_FILES): *\n+//o)
+ {
+ $sect = _('FILES');
+ next;
+ }
+ elsif (s/^($PAT_EXAMPLES): *\n+//o)
+ {
+ $sect = _('EXAMPLES');
+ next;
+ }
+
+ # Custom section indicated by a line containing "*Section Name*".
+ if (s/^\*(\w(.*\w)?)\* *\n+//)
+ {
+ $sect = uc $1;
+ $sect =~ tr/*/ /; # also accept *Section*Name*
+ push @sections, $sect;
+ next;
+ }
+
+ # Copyright section.
+ if (/^Copyright /)
+ {
+ $sect = _('COPYRIGHT');
+ }
+
+ # Bug reporting section.
+ elsif (/^($PAT_BUGS) /o)
+ {
+ $sect = _('REPORTING BUGS');
+ }
+
+ # Author section.
+ elsif (/^($PAT_AUTHOR)/o)
+ {
+ $sect = _('AUTHOR');
+ }
+
+ # Examples, indicated by an indented leading $, % or > are
+ # rendered in a constant width font.
+ if (/^( +)([\$\%>] )\S/)
+ {
+ my $indent = $1;
+ my $prefix = $2;
+ my $break = '.IP';
+ while (s/^$indent\Q$prefix\E(\S.*)\n*//)
+ {
+ $include{$sect} .= "$break\n\\f(CW$prefix$1\\fR\n";
+ $break = '.br';
+ }
+
+ next;
+ }
+
+ my $matched = '';
+
+ # Sub-sections have a trailing colon and the second line indented.
+ if (s/^(\S.*:) *\n / /)
+ {
+ $matched .= $& if %append_match;
+ $include{$sect} .= qq(.SS "$1"\n);
+ }
+
+ my $indent = 0;
+ my $content = '';
+
+ # Option with description.
+ if (s/^( {1,10}([+-]\S.*?))(?:( +(?!-))|\n( {20,}))(\S.*)\n//)
+ {
+ $matched .= $& if %append_match;
+ $indent = length ($4 || "$1$3");
+ $content = ".TP\n\x84$2\n\x84$5\n";
+ unless ($4)
+ {
+ # Indent may be different on second line.
+ $indent = length $& if /^ {20,}/;
+ }
+ }
+
+ # Option without description.
+ elsif (s/^ {1,10}([+-]\S.*)\n//)
+ {
+ $matched .= $& if %append_match;
+ $content = ".HP\n\x84$1\n";
+ $indent = 80; # not continued
+ }
+
+ # Indented paragraph with tag.
+ elsif (s/^( +(\S.*?))(?:( +)|\n( {20,}))(\S.*)\n//)
+ {
+ $matched .= $& if %append_match;
+ $indent = length ($4 || "$1$3");
+ $content = ".TP\n\x84$2\n\x84$5\n";
+ }
+
+ # Indented paragraph.
+ elsif (s/^( +)(\S.*)\n//)
+ {
+ $matched .= $& if %append_match;
+ $indent = length $1;
+ $content = ".IP\n\x84$2\n";
+ }
+
+ # Left justified paragraph.
+ else
+ {
+ s/(.*)\n//;
+ $matched .= $& if %append_match;
+ $content = ".PP\n" if $include{$sect};
+ $content .= "$1\n";
+ }
+
+ # Append continuations.
+ while ($indent ? s/^ {$indent}(\S.*)\n// : s/^(\S.*)\n//)
+ {
+ $matched .= $& if %append_match;
+ $content .= "\x84$1\n";
+ }
+
+ # Move to next paragraph.
+ s/^\n+//;
+
+ for ($content)
+ {
+ # Leading dot and apostrophe protection.
+ s/\x84\./\x80/g;
+ s/\x84'/\x81/g;
+ s/\x84//g;
+
+ # Examples should be verbatim.
+ unless ($sect eq _('EXAMPLES'))
+ {
+ # Convert options.
+ s/(^|[ (])(-[][\w=-]+)/$1 . convert_option $2/mge;
+
+ # Italicise filenames: /a/b, $VAR/c/d, ~/e/f
+ s!
+ (^|[ (]) # space/punctuation before
+ (
+ (?:\$\w+|~)? # leading variable, or tilde
+ (?:/\w(?:[\w.-]*\w)?)+ # path components
+ )
+ ($|[ ,;.)]) # space/punctuation after
+ !$1\\fI$2\\fP$3!xmg;
+
+ $_ = fix_italic_spacing $_;
+ }
+
+ # Escape remaining hyphens.
+ s/-/\x83/g;
+
+ if ($sect eq _('COPYRIGHT'))
+ {
+ # Insert line breaks before additional copyright messages
+ # and the disclaimer.
+ s/\n(Copyright |$PAT_FREE_SOFTWARE)/\n.br\n$1/og;
+ }
+ elsif ($sect eq _('REPORTING BUGS'))
+ {
+ # Handle multi-line bug reporting sections of the form:
+ #
+ # Report <program> bugs to <addr>
+ # GNU <package> home page: <url>
+ # ...
+ s/\n([[:upper:]])/\n.br\n$1/g;
+ }
+ }
+
+ # Check if matched paragraph contains /pat/.
+ if (%append_match)
+ {
+ for my $pat (keys %append_match)
+ {
+ if ($matched =~ $pat)
+ {
+ $content .= ".PP\n" unless $append_match{$pat} =~ /^\./;
+ $content .= $append_match{$pat};
+ }
+ }
+ }
+
+ $include{$sect} .= $content;
+}
+
+# Refer to the real documentation.
+unless ($opt_no_info)
+{
+ my $info_page = $opt_info || $program;
+
+ $sect = _('SEE ALSO');
+ $include{$sect} .= ".PP\n" if $include{$sect};
+ $include{$sect} .= sprintf _(<<'EOT'), $program, $program, $info_page;
+The full documentation for
+.B %s
+is maintained as a Texinfo manual. If the
+.B info
+and
+.B %s
+programs are properly installed at your site, the command
+.IP
+.B info %s
+.PP
+should give you access to the complete manual.
+EOT
+}
+
+# Append additional text.
+while (my ($sect, $text) = each %append)
+{
+ $include{$sect} .= $append{$sect};
+}
+
+# Replace sections.
+while (my ($sect, $text) = each %replace)
+{
+ $include{$sect} = $replace{$sect};
+}
+
+# Output header.
+print <<EOT;
+.\\" DO NOT MODIFY THIS FILE! It was generated by $this_program $this_version.
+.TH $PROGRAM "$section" "$date" "$source" "$manual"
+EOT
+
+# Section ordering.
+my @pre = (_('NAME'), _('SYNOPSIS'), _('DESCRIPTION'), _('OPTIONS'));
+my @post = (_('ENVIRONMENT'), _('FILES'), _('EXAMPLES'), _('AUTHOR'),
+ _('REPORTING BUGS'), _('COPYRIGHT'), _('SEE ALSO'));
+my %filter = map { $_ => 1 } @pre, @post;
+
+# Output content.
+my %done;
+for my $sect (@pre, (grep !$filter{$_}, @sections), @post)
+{
+ next if $done{$sect}++; # ignore duplicates
+ next unless $include{$sect};
+ if ($include{$sect})
+ {
+ my $quote = $sect =~ /\W/ ? '"' : '';
+ print enc ".SH $quote$sect$quote\n";
+
+ for ($include{$sect})
+ {
+ # Replace leading dot, apostrophe, backslash and hyphen
+ # tokens.
+ s/\x80/\\&./g;
+ s/\x81/\\&'/g;
+ s/\x82/\\e/g;
+ s/\x83/\\-/g;
+
+ # Convert some latin1 chars to troff equivalents
+ s/\xa0/\\ /g; # non-breaking space
+
+ print enc $_;
+ }
+ }
+}
+
+close STDOUT or kark N_("%s: error writing to %s (%s)"), $this_program,
+ $opt_output || 'stdout', $!;
+
+exit;
+
+# Get program basename, and strip libtool "lt-" prefix if required.
+sub program_basename
+{
+ local $_ = shift;
+ s!.*/!!;
+ s/^lt-// if $opt_libtool;
+ $_;
+}
+
+# Call program with given option and return results.
+sub get_option_value
+{
+ my ($prog, $opt) = @_;
+ my $stderr = $discard_stderr ? '/dev/null' : '&1';
+ my $value = join '',
+ map { s/ +$//; expand $_ }
+ map { dec $_ }
+ `$prog $opt 2>$stderr`;
+
+ unless ($value)
+ {
+ my $err = N_("%s: can't get `%s' info from %s%s");
+ my $extra = $discard_stderr
+ ? "\n" . N_("Try `--no-discard-stderr' if option outputs to stderr")
+ : '';
+
+ kark $err, $this_program, $opt, $prog, $extra;
+ }
+
+ $value;
+}
+
+# Convert option dashes to \- to stop nroff from hyphenating 'em, and
+# embolden. Option arguments get italicised.
+sub convert_option
+{
+ local $_ = '\fB' . shift;
+
+ s/-/\x83/g;
+ unless (s/\[=(.*)\]$/\\fR[=\\fI$1\\fR]/)
+ {
+ s/=(.)/\\fR=\\fI$1/;
+ s/ (.)/ \\fI$1/;
+ $_ .= '\fR';
+ }
+
+ $_;
+}
+
+# Insert spacing escape characters \, and \/ before and after italic text. See
+# https://www.gnu.org/software/groff/manual/html_node/Ligatures-and-Kerning.html
+sub fix_italic_spacing
+{
+ local $_ = shift;
+ s!\\fI(.*?)\\f([BRP])!\\fI\\,$1\\/\\f$2!g;
+ return $_;
+}
diff --git a/doc/local.mk b/doc/local.mk
new file mode 100644
index 000000000..b6742e6aa
--- /dev/null
+++ b/doc/local.mk
@@ -0,0 +1,115 @@
+## Included by top-level Makefile for Automake.
+
+## Copyright (C) 1995-2017 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 <https://www.gnu.org/licenses/>.
+
+## ---------------- ##
+## Documentation. ##
+## ---------------- ##
+
+info_TEXINFOS = %D%/automake.texi %D%/automake-history.texi
+doc_automake_TEXINFOS = %D%/fdl.texi
+doc_automake_history_TEXINFOS = %D%/fdl.texi
+
+man1_MANS = \
+ %D%/aclocal.1 \
+ %D%/automake.1 \
+ %D%/aclocal-$(APIVERSION).1 \
+ %D%/automake-$(APIVERSION).1
+
+$(man1_MANS): $(top_srcdir)/configure.ac
+
+CLEANFILES += $(man1_MANS)
+# XXX: This script should be updated with 'fetch' target.
+EXTRA_DIST += %D%/help2man
+
+update_mans = \
+ $(AM_V_GEN): \
+ && $(MKDIR_P) %D% \
+ && ./pre-inst-env $(PERL) $(srcdir)/%D%/help2man --output=$@
+
+%D%/aclocal.1 %D%/automake.1:
+ $(AM_V_GEN): \
+ && $(MKDIR_P) %D% \
+ && f=`echo $@ | sed 's|.*/||; s|\.1$$||; $(transform)'` \
+ && echo ".so man1/$$f-$(APIVERSION).1" > $@
+
+%D%/aclocal-$(APIVERSION).1: $(aclocal_script) lib/Automake/Config.pm
+ $(update_mans) aclocal-$(APIVERSION)
+%D%/automake-$(APIVERSION).1: $(automake_script) lib/Automake/Config.pm
+ $(update_mans) automake-$(APIVERSION)
+
+## ---------------------------- ##
+## Example package "amhello". ##
+## ---------------------------- ##
+
+amhello_sources = \
+ %D%/amhello/configure.ac \
+ %D%/amhello/Makefile.am \
+ %D%/amhello/README \
+ %D%/amhello/src/main.c \
+ %D%/amhello/src/Makefile.am
+
+amhello_configury = \
+ aclocal.m4 \
+ autom4te.cache \
+ Makefile.in \
+ config.h.in \
+ configure \
+ depcomp \
+ install-sh \
+ missing \
+ src/Makefile.in
+
+dist_noinst_DATA += $(amhello_sources)
+dist_doc_DATA = $(srcdir)/%D%/amhello-1.0.tar.gz
+
+setup_autotools_paths = { \
+ ACLOCAL=aclocal-$(APIVERSION) && export ACLOCAL \
+ && AUTOMAKE=automake-$(APIVERSION) && export AUTOMAKE \
+ && AUTOCONF='$(am_AUTOCONF)' && export AUTOCONF \
+ && AUTOM4TE='$(am_AUTOM4TE)' && export AUTOM4TE \
+ && AUTORECONF='$(am_AUTORECONF)' && export AUTORECONF \
+ && AUTOHEADER='$(am_AUTOHEADER)' && export AUTOHEADER \
+ && AUTOUPDATE='$(am_AUTOUPDATE)' && export AUTOUPDATE \
+ && true; \
+}
+
+# We depend on configure.ac so that we regenerate the tarball
+# whenever the Automake version changes.
+$(srcdir)/%D%/amhello-1.0.tar.gz: $(amhello_sources) $(srcdir)/configure.ac
+ $(AM_V_GEN)tmp=amhello-output.tmp \
+ && $(am__cd) $(srcdir)/%D%/amhello \
+ && : Make our aclocal and automake avaiable before system ones. \
+ && $(setup_autotools_paths) \
+ && ( \
+ { $(AM_V_P) || exec 5>&2 >$$tmp 2>&1; } \
+ && $(abs_builddir)/pre-inst-env $(am_AUTORECONF) -vfi \
+ && ./configure \
+ && $(MAKE) $(AM_MAKEFLAGS) distcheck \
+ && $(MAKE) $(AM_MAKEFLAGS) distclean \
+ || { \
+ if $(AM_V_P); then :; else \
+ echo "$@: recipe failed." >&5; \
+ echo "See file '`pwd`/$$tmp' for details" >&5; \
+ fi; \
+ exit 1; \
+ } \
+ ) \
+ && rm -rf $(amhello_configury) $$tmp \
+ && mv -f amhello-1.0.tar.gz ..
+
+
+# vim: ft=automake noet
diff --git a/gen-testsuite-part b/gen-testsuite-part
new file mode 100755
index 000000000..3c5fc3852
--- /dev/null
+++ b/gen-testsuite-part
@@ -0,0 +1,420 @@
+#! /usr/bin/env perl
+# Automatically compute some dependencies for the hand-written tests
+# of the Automake testsuite. Also, automatically generate some more
+# tests from them (for particular cases/setups only).
+
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+#--------------------------------------------------------------------------
+
+use warnings FATAL => "all";
+use strict;
+use File::Basename ();
+use constant TRUE => 1;
+use constant FALSE => 0;
+
+my $me = File::Basename::basename $0;
+
+# For use in VPATH builds.
+my $srcdir = ".";
+
+# The testsuite subdirectory, relative to the top-lever source directory.
+my $testdir = "t";
+
+# Where testsuite-related helper scripts, data files and shell libraries
+# are placed. Relative to the top-lever source directory.
+my $testauxdir = "$testdir/ax";
+
+#--------------------------------------------------------------------------
+
+sub unindent ($)
+{
+ my $text = shift;
+ $text =~ /^(\s*)/;
+ my $indentation = $1;
+ $text =~ s/^$indentation//gm;
+ return $text;
+}
+
+sub atomic_write ($$;$)
+{
+ my ($outfile, $func) = (shift, shift);
+ my $perms = @_ > 0 ? shift : 0777;
+ my $tmpfile = "$outfile-t";
+ foreach my $f ($outfile, $tmpfile)
+ {
+ unlink $f or die "$me: cannot unlink '$f': $!\n"
+ if -e $f;
+ }
+ open (my $fh, ">$tmpfile")
+ or die "$me: can't write to '$tmpfile': $!\n";
+ $func->($fh);
+ close $fh
+ or die "$me: closing '$tmpfile': $!\n";
+ chmod ($perms & ~umask, $tmpfile)
+ or die "$me: cannot change perms for '$tmpfile': $!\n";
+ rename ($tmpfile, $outfile)
+ or die "$me: renaming '$tmpfile' -> '$outfile: $!\n'";
+}
+
+sub line_match ($$)
+{
+ my ($re, $file) = (shift, shift);
+ # Try both builddir and srcdir, with builddir first, to play nice
+ # with VPATH builds.
+ open (FH, "<$file") or open (FH, "<$srcdir/$file")
+ or die "$me: cannot open file '$file': $!\n";
+ my $ret = 0;
+ while (defined (my $line = <FH>))
+ {
+ if ($line =~ $re)
+ {
+ $ret = 1;
+ last;
+ }
+ }
+ close FH or die "$me: cannot close file '$file': $!\n";
+ return $ret;
+}
+
+sub write_wrapper_script ($$$)
+{
+ my ($file_handle, $wrapped_test, $shell_setup_code, $creator_name) = @_;
+ print $file_handle unindent <<EOF;
+ #! /bin/sh
+ # This file has been automatically generated. DO NOT EDIT BY HAND!
+ . test-lib.sh
+ $shell_setup_code
+ # In the spirit of VPATH, we prefer a test in the build tree
+ # over one in the source tree.
+ for dir in . "\$am_top_srcdir"; do
+ if test -f "\$dir/$wrapped_test"; then
+ echo "\$0: will source \$dir/$wrapped_test"
+ . "\$dir/$wrapped_test"; exit \$?
+ fi
+ done
+ echo "\$0: cannot find wrapped test '$wrapped_test'" >&2
+ exit 99
+EOF
+}
+
+sub get_list_of_tests ()
+{
+ my $make = defined $ENV{MAKE} ? $ENV{MAKE} : "make";
+ # Unset MAKEFLAGS, for when we are called from make itself.
+ my $cmd = "MAKEFLAGS= && unset MAKEFLAGS && cd '$srcdir' && "
+ . "$make -s -f $testdir/list-of-tests.mk print-list-of-tests";
+ my @tests_list = split /\s+/, `$cmd`;
+ die "$me: cannot get list of tests\n" unless $? == 0 && @tests_list;
+ my $ok = 1;
+ foreach my $test (@tests_list)
+ {
+ # Respect VPATH builds.
+ next if -f $test || -f "$srcdir/$test";
+ warn "$me: test '$test' not found\n";
+ $ok = 0;
+ }
+ die "$me: some test scripts not found\n" if !$ok;
+ return @tests_list;
+}
+
+sub parse_options (@)
+{
+ use Getopt::Long qw/GetOptions/;
+ local @ARGV = @_;
+ GetOptions ('srcdir=s' => \$srcdir) or die "$me: usage error\n";
+ die "$me: too many arguments\n" if @ARGV > 0;
+ die "$me: srcdir '$srcdir': not a directory\n" unless -d $srcdir;
+}
+
+#--------------------------------------------------------------------------
+
+my %deps_extractor =
+ (
+ libtool_macros =>
+ {
+ line_matcher => qr/^\s*required=.*\blibtool/,
+ nodist_prereqs => "$testdir/libtool-macros.log",
+ },
+ gettext_macros =>
+ {
+ line_matcher => qr/^\s*required=.*\bgettext/,
+ nodist_prereqs => "$testdir/gettext-macros.log",
+ },
+ pkgconfig_macros =>
+ {
+ line_matcher => qr/^\s*required=.*\bpkg-config/,
+ nodist_prereqs => "$testdir/pkg-config-macros.log",
+ },
+ use_trivial_test_driver =>
+ {
+ line_matcher => qr/\btrivial-test-driver\b/,
+ dist_prereqs => "$testauxdir/trivial-test-driver",
+ },
+ check_testsuite_summary =>
+ {
+ line_matcher => qr/\btestsuite-summary-checks\.sh\b/,
+ dist_prereqs => "$testauxdir/testsuite-summary-checks.sh",
+ },
+ extract_testsuite_summary =>
+ {
+ line_matcher => qr/\bextract-testsuite-summary\.pl\b/,
+ dist_prereqs => "$testauxdir/extract-testsuite-summary.pl",
+ },
+ check_tap_testsuite_summary =>
+ {
+ line_matcher => qr/\btap-summary-aux\.sh\b/,
+ dist_prereqs => "$testauxdir/tap-summary-aux.sh",
+ },
+ on_tap_with_common_setup =>
+ {
+ line_matcher => qr/\btap-setup\.sh\b/,
+ dist_prereqs => "$testauxdir/tap-setup.sh",
+ nodist_prereqs => "$testdir/tap-common-setup.log",
+ },
+ depcomp =>
+ {
+ line_matcher => qr/\bdepcomp\.sh\b/,
+ dist_prereqs => "$testauxdir/depcomp.sh",
+ },
+ );
+
+#--------------------------------------------------------------------------
+
+my %test_generators =
+ (
+ #
+ # Any test script in the Automake testsuite that checks features of
+ # the Automake-provided parallel testsuite harness might want to
+ # define a sibling test that does similar checks, but for the old
+ # serial testsuite harness instead.
+ #
+ # Individual tests can request the creation of such a sibling by
+ # making the string "try-with-serial-tests" appear any line of the
+ # test itself.
+ #
+ serial_testsuite_harness =>
+ {
+ line_matcher => qr/\btry-with-serial-tests\b/,
+ shell_setup_code => 'am_serial_tests=yes',
+ },
+ #
+ # For each test script in the Automake testsuite that tests features
+ # of one or more automake-provided shell script from the 'lib/'
+ # subdirectory by running those scripts directly (i.e., not thought
+ # make calls and automake-generated makefiles), define a sibling test
+ # that does likewise, but running the said script with the configure
+ # time $SHELL instead of the default system shell /bin/sh.
+ #
+ # A test is considered a candidate for sibling-generation if it calls
+ # the 'get_shell_script' function anywhere.
+ #
+ # Individual tests can prevent the creation of such a sibling by
+ # explicitly setting the '$am_test_prefer_config_shell' variable
+ # to either "yes" or "no".
+ # The rationale for this is that if the variable is set to "yes",
+ # the test already uses $SHELL, so that a sibling would be just a
+ # duplicate; while if the variable is set to "no", the test doesn't
+ # support, or is not meant to use, $SHELL to run the script under
+ # testing, and forcing it to do so in the sibling would likely
+ # cause a spurious failure.
+ #
+ prefer_config_shell =>
+ {
+ line_matcher =>
+ qr/(^|\s)get_shell_script\s/,
+ line_rejecter =>
+ qr/\bam_test_prefer_config_shell=/,
+ shell_setup_code =>
+ 'am_test_prefer_config_shell=yes',
+ },
+ );
+
+#--------------------------------------------------------------------------
+
+parse_options @ARGV;
+
+my @all_tests = get_list_of_tests;
+my @generated_tests = (); # Will be updated later.
+
+print "## -*- Makefile -*-\n";
+print "## Generated by $me. DO NOT EDIT BY HAND!\n\n";
+
+print <<EOF;
+
+## --------------------------------------------- ##
+## Autogenerated tests and their dependencies. ##
+## --------------------------------------------- ##
+
+EOF
+
+# A test script '$test' can possibly match more than one condition, so
+# for each tests we need to keep a list of generated wrapper tests.
+# Since what defines these wrapper scripts is the set of initializations
+# that are issued before sourcing the original, wrapped tests, these
+# initializations is what we put in our list entries.
+# The list will be saved in the hash entry '$wrapper_setups{$test}'.
+my %wrapper_setups = ();
+foreach my $test (@all_tests)
+ {
+ my @setups = ('');
+ foreach my $x (values %test_generators)
+ {
+ next
+ if not line_match $x->{line_matcher}, $test;
+ next
+ if $x->{line_rejecter} and line_match $x->{line_rejecter}, $test;
+ @setups = map { ($_, "$_\n$x->{shell_setup_code}") } @setups;
+ }
+ @setups = grep { $_ ne '' } @setups;
+ $wrapper_setups{$test} = \@setups if @setups;
+ }
+# And now create all the wrapper tests.
+for my $wrapped_test (sort keys %wrapper_setups)
+ {
+ my $setup_list = $wrapper_setups{$wrapped_test};
+ (my $base = $wrapped_test) =~ s/\.([^.]*)$//;
+ my $suf = $1 or die "$me: test '$wrapped_test' lacks a suffix\n";
+ my $count = 0;
+ foreach my $setup (@$setup_list)
+ {
+ $count++;
+ my $wbase = "$base-w" . ($count > 1 ? $count : '');
+ my $wrapper_test = "$wbase.$suf";
+ # Register wrapper test as "autogenerated".
+ push @generated_tests, $wrapper_test;
+ # Create wrapper test.
+ atomic_write $wrapper_test,
+ sub { write_wrapper_script $_[0], $wrapped_test,
+ $setup },
+ 0444;
+ # The generated test works by sourcing the original test, so that
+ # it has to be re-run every time that changes ...
+ print "$wbase.log: $wrapped_test\n";
+ # ... but also every time the prerequisites of the wrapped test
+ # changes. The simpler (although suboptimal) way to do so is to
+ # ensure that the wrapped tests runs before the wrapper one (in
+ # case it needs to be re-run *at all*).
+ # FIXME: we could maybe refactor the script to find a more
+ # granular way to express such implicit dependencies.
+ print "$wbase.log: $base.log\n";
+ }
+ }
+
+print <<EOF;
+
+## ---------------------------------------------------- ##
+## Ad-hoc autogenerated tests and their dependencies. ##
+## ---------------------------------------------------- ##
+
+EOF
+
+print "## Tests on automatic dependency tracking (see 'depcomp.sh').\n";
+
+# Key: depmode, value: list of required programs.
+my %depmodes =
+ (
+ auto => ["cc"],
+ disabled => ["cc"],
+ makedepend => ["cc", "makedepend", "-c-o"],
+ dashmstdout => ["gcc"],
+ cpp => ["gcc"],
+# This was for older (pre-3.x) GCC versions (newer versions
+# have depmode "gcc3"). But other compilers use this depmode
+# as well (for example, the IMB xlc/xlC compilers, and the HP
+# C compiler, see 'lib/depcomp' for more info), so it's not
+# obsolete, and it's worth giving it some coverage.
+ gcc => ["gcc"],
+# This is for older (pre-7) msvc versions. Newer versions
+# have depmodes "msvc7" and "msvc7msys".
+ msvisualcpp => ["cl", "cygpath"],
+ msvcmsys => ["cl", "mingw"],
+ );
+
+foreach my $lt (TRUE, FALSE)
+ {
+ foreach my $m (sort keys %depmodes)
+ {
+ my $planned = ($lt && $m eq "auto") ? 84 : 28;
+ my @required =
+ (
+ @{$depmodes{$m}},
+ $lt ? ("libtoolize",) : (),
+ );
+ my @vars_init =
+ (
+ "am_create_testdir=empty",
+ "depmode=$m",
+ "depcomp_with_libtool=" . ($lt ? "yes" : "no"),
+ );
+ my $test = "$testdir/depcomp" . ($lt ? "-lt-" : "-") . "$m.tap";
+ # Register wrapper test as "autogenerated" ...
+ push @generated_tests, $test;
+ # ... and create it.
+ atomic_write ($test, sub
+ {
+ my $file_handle = shift;
+ print $file_handle unindent <<EOF;
+ #! /bin/sh
+ # Automatically generated test. DO NOT EDIT BY HAND!
+ @vars_init
+ required="@required"
+ . test-init.sh
+ plan_ $planned
+ . depcomp.sh
+ exit \$?
+EOF
+ },
+ 0444);
+ }
+ }
+
+# Update generated makefile fragment to account for all the generated tests.
+print "generated_TESTS =\n";
+map { print "generated_TESTS += $_\n" } @generated_tests;
+
+# The test scripts are scanned for automatic dependency generation *after*
+# the generated tests have been created, so they too can be scanned. To
+# do so correctly, we need to update the list in '@all_tests' to make it
+# comprise also the freshly-generated tests.
+
+push @all_tests, @generated_tests;
+
+print <<EOF;
+
+## ----------------------------- ##
+## Autogenerated dependencies. ##
+## ----------------------------- ##
+
+EOF
+
+for my $k (sort keys %deps_extractor)
+ {
+ my $x = $deps_extractor{$k};
+ my $dist_prereqs = $x->{dist_prereqs} || "";
+ my $nodist_prereqs = $x->{nodist_prereqs} || "";
+ my @tests = grep { line_match $x->{line_matcher}, $_ } @all_tests;
+ map { s/\.[^.]*$//; s/$/\.log/; } (my @logs = @tests);
+ print "## Added by deps-extracting key '$k'.\n";
+ ## The list of all tests which have a dependency detected by the
+ ## current key.
+ print join(" \\\n ", "${k}_TESTS =", @tests) . "\n";
+ print "EXTRA_DIST += $dist_prereqs\n";
+ map { print "$_: $dist_prereqs $nodist_prereqs\n" } @logs;
+ print "\n";
+ }
+
+__END__
diff --git a/lib/Automake/ChannelDefs.pm b/lib/Automake/ChannelDefs.pm
new file mode 100644
index 000000000..a127b2f49
--- /dev/null
+++ b/lib/Automake/ChannelDefs.pm
@@ -0,0 +1,444 @@
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+package Automake::ChannelDefs;
+
+use Automake::Config;
+BEGIN
+{
+ if ($perl_threads)
+ {
+ require threads;
+ import threads;
+ }
+}
+use Automake::Channels;
+
+=head1 NAME
+
+Automake::ChannelDefs - channel definitions for Automake and helper functions
+
+=head1 SYNOPSIS
+
+ use Automake::ChannelDefs;
+
+ Automake::ChannelDefs::usage ();
+ prog_error ($MESSAGE, [%OPTIONS]);
+ error ($WHERE, $MESSAGE, [%OPTIONS]);
+ error ($MESSAGE);
+ fatal ($WHERE, $MESSAGE, [%OPTIONS]);
+ fatal ($MESSAGE);
+ verb ($MESSAGE, [%OPTIONS]);
+ switch_warning ($CATEGORY);
+ parse_WARNINGS ();
+ parse_warnings ($OPTION, $ARGUMENT);
+ Automake::ChannelDefs::set_strictness ($STRICTNESS_NAME);
+
+=head1 DESCRIPTION
+
+This packages defines channels that can be used in Automake to
+output diagnostics and other messages (via C<msg()>). It also defines
+some helper function to enable or disable these channels, and some
+shorthand function to output on specific channels.
+
+=cut
+
+use 5.006;
+use strict;
+use Exporter;
+
+use vars qw (@ISA @EXPORT);
+
+@ISA = qw (Exporter);
+@EXPORT = qw (&prog_error &error &fatal &verb
+ &switch_warning &parse_WARNINGS &parse_warnings);
+
+=head2 CHANNELS
+
+The following channels can be used as the first argument of
+C<Automake::Channel::msg>. For some of them we list a shorthand
+function that makes the code more readable.
+
+=over 4
+
+=item C<fatal>
+
+Fatal errors. Use C<&fatal> to send messages over this channel.
+
+=item C<error>
+
+Common errors. Use C<&error> to send messages over this channel.
+
+=item C<error-gnu>
+
+Errors related to GNU Standards.
+
+=item C<error-gnu/warn>
+
+Errors related to GNU Standards that should be warnings in 'foreign' mode.
+
+=item C<error-gnits>
+
+Errors related to GNITS Standards (silent by default).
+
+=item C<automake>
+
+Internal errors. Use C<&prog_error> to send messages over this channel.
+
+=item C<gnu>
+
+Warnings related to GNU Coding Standards.
+
+=item C<obsolete>
+
+Warnings about obsolete features (silent by default).
+
+=item C<override>
+
+Warnings about user redefinitions of Automake rules or
+variables (silent by default).
+
+=item C<portability>
+
+Warnings about non-portable constructs.
+
+=item C<extra-portability>
+
+Extra warnings about non-portable constructs covering obscure tools.
+
+=item C<syntax>
+
+Warnings about weird syntax, unused variables, typos...
+
+=item C<unsupported>
+
+Warnings about unsupported (or mis-supported) features.
+
+=item C<verb>
+
+Messages output in C<--verbose> mode. Use C<&verb> to send such messages.
+
+=item C<note>
+
+Informative messages.
+
+=back
+
+=cut
+
+# Initialize our list of error/warning channels.
+# Do not forget to update &usage and the manual
+# if you add or change a warning channel.
+
+register_channel 'fatal', type => 'fatal', uniq_part => UP_NONE, ordered => 0;
+register_channel 'error', type => 'error';
+register_channel 'error-gnu', type => 'error';
+register_channel 'error-gnu/warn', type => 'error';
+register_channel 'error-gnits', type => 'error', silent => 1;
+register_channel 'automake', type => 'fatal', backtrace => 1,
+ header => ("####################\n" .
+ "## Internal Error ##\n" .
+ "####################\n"),
+ footer => "\nPlease contact <$PACKAGE_BUGREPORT>.",
+ uniq_part => UP_NONE, ordered => 0;
+
+register_channel 'extra-portability', type => 'warning', silent => 1;
+register_channel 'gnu', type => 'warning';
+register_channel 'obsolete', type => 'warning';
+register_channel 'override', type => 'warning', silent => 1;
+register_channel 'portability', type => 'warning', silent => 1;
+register_channel 'portability-recursive', type => 'warning', silent => 1;
+register_channel 'syntax', type => 'warning';
+register_channel 'unsupported', type => 'warning';
+
+register_channel 'verb', type => 'debug', silent => 1, uniq_part => UP_NONE,
+ ordered => 0;
+register_channel 'note', type => 'debug', silent => 0;
+
+setup_channel_type 'warning', header => 'warning: ';
+setup_channel_type 'error', header => 'error: ';
+setup_channel_type 'fatal', header => 'error: ';
+
+=head2 FUNCTIONS
+
+=over 4
+
+=item C<usage ()>
+
+Display warning categories.
+
+=cut
+
+sub usage ()
+{
+ print <<EOF;
+Warning categories include:
+ gnu GNU coding standards (default in gnu and gnits modes)
+ obsolete obsolete features or constructions
+ override user redefinitions of Automake rules or variables
+ portability portability issues (default in gnu and gnits modes)
+ extra-portability extra portability issues related to obscure tools
+ syntax dubious syntactic constructs (default)
+ unsupported unsupported or incomplete features (default)
+ all all the warnings
+ no-CATEGORY turn off warnings in CATEGORY
+ none turn off all the warnings
+ error treat warnings as errors
+EOF
+}
+
+=item C<prog_error ($MESSAGE, [%OPTIONS])>
+
+Signal a programming error (on channel C<automake>),
+display C<$MESSAGE>, and exit 1.
+
+=cut
+
+sub prog_error ($;%)
+{
+ my ($msg, %opts) = @_;
+ msg 'automake', '', $msg, %opts;
+}
+
+=item C<error ($WHERE, $MESSAGE, [%OPTIONS])>
+
+=item C<error ($MESSAGE)>
+
+Uncategorized errors.
+
+=cut
+
+sub error ($;$%)
+{
+ my ($where, $msg, %opts) = @_;
+ msg ('error', $where, $msg, %opts);
+}
+
+=item C<fatal ($WHERE, $MESSAGE, [%OPTIONS])>
+
+=item C<fatal ($MESSAGE)>
+
+Fatal errors.
+
+=cut
+
+sub fatal ($;$%)
+{
+ my ($where, $msg, %opts) = @_;
+ msg ('fatal', $where, $msg, %opts);
+}
+
+=item C<verb ($MESSAGE, [%OPTIONS])>
+
+C<--verbose> messages.
+
+=cut
+
+sub verb ($;%)
+{
+ my ($msg, %opts) = @_;
+ $msg = "thread " . threads->tid . ": " . $msg
+ if $perl_threads;
+ msg 'verb', '', $msg, %opts;
+}
+
+=item C<switch_warning ($CATEGORY)>
+
+If C<$CATEGORY> is C<mumble>, turn on channel C<mumble>.
+If it's C<no-mumble>, turn C<mumble> off.
+Else handle C<all> and C<none> for completeness.
+
+=cut
+
+sub switch_warning ($)
+{
+ my ($cat) = @_;
+ my $has_no = 0;
+
+ if ($cat =~ /^no-(.*)$/)
+ {
+ $cat = $1;
+ $has_no = 1;
+ }
+
+ if ($cat eq 'all')
+ {
+ setup_channel_type 'warning', silent => $has_no;
+ }
+ elsif ($cat eq 'none')
+ {
+ setup_channel_type 'warning', silent => ! $has_no;
+ }
+ elsif ($cat eq 'error')
+ {
+ $warnings_are_errors = ! $has_no;
+ # Set exit code if Perl warns about something
+ # (like uninitialized variables).
+ $SIG{"__WARN__"} =
+ $has_no ? 'DEFAULT' : sub { print STDERR @_; $exit_code = 1; };
+ }
+ elsif (channel_type ($cat) eq 'warning')
+ {
+ setup_channel $cat, silent => $has_no;
+ #
+ # Handling of portability warnings is trickier. For relevant tests,
+ # see 'dollarvar2', 'extra-portability' and 'extra-portability3'.
+ #
+ # -Wportability-recursive and -Wno-portability-recursive should not
+ # have any effect on other 'portability' or 'extra-portability'
+ # warnings, so there's no need to handle them separately or ad-hoc.
+ #
+ if ($cat eq 'extra-portability' && ! $has_no) # -Wextra-portability
+ {
+ # -Wextra-portability must enable 'portability' and
+ # 'portability-recursive' warnings.
+ setup_channel 'portability', silent => 0;
+ setup_channel 'portability-recursive', silent => 0;
+ }
+ if ($cat eq 'portability') # -Wportability or -Wno-portability
+ {
+ if ($has_no) # -Wno-portability
+ {
+ # -Wno-portability must disable 'extra-portability' and
+ # 'portability-recursive' warnings.
+ setup_channel 'portability-recursive', silent => 1;
+ setup_channel 'extra-portability', silent => 1;
+ }
+ else # -Wportability
+ {
+ # -Wportability must enable 'portability-recursive'
+ # warnings. But it should have no influence over the
+ # 'extra-portability' warnings.
+ setup_channel 'portability-recursive', silent => 0;
+ }
+ }
+ }
+ else
+ {
+ return 1;
+ }
+ return 0;
+}
+
+=item C<parse_WARNINGS ()>
+
+Parse the WARNINGS environment variable.
+
+=cut
+
+sub parse_WARNINGS ()
+{
+ if (exists $ENV{'WARNINGS'})
+ {
+ # Ignore unknown categories. This is required because WARNINGS
+ # should be honored by many tools.
+ switch_warning $_ foreach (split (',', $ENV{'WARNINGS'}));
+ }
+}
+
+=item C<parse_warnings ($OPTION, $ARGUMENT)>
+
+Parse the argument of C<--warning=CATEGORY> or C<-WCATEGORY>.
+
+C<$OPTIONS> is C<"--warning"> or C<"-W">, C<$ARGUMENT> is C<CATEGORY>.
+
+This is meant to be used as an argument to C<Getopt>.
+
+=cut
+
+sub parse_warnings ($$)
+{
+ my ($opt, $categories) = @_;
+
+ foreach my $cat (split (',', $categories))
+ {
+ msg 'unsupported', "unknown warning category '$cat'"
+ if switch_warning $cat;
+ }
+}
+
+=item C<set_strictness ($STRICTNESS_NAME)>
+
+Configure channels for strictness C<$STRICTNESS_NAME>.
+
+=cut
+
+sub set_strictness ($)
+{
+ my ($name) = @_;
+
+ if ($name eq 'gnu')
+ {
+ setup_channel 'error-gnu', silent => 0;
+ setup_channel 'error-gnu/warn', silent => 0, type => 'error';
+ setup_channel 'error-gnits', silent => 1;
+ setup_channel 'portability', silent => 0;
+ setup_channel 'extra-portability', silent => 1;
+ setup_channel 'gnu', silent => 0;
+ }
+ elsif ($name eq 'gnits')
+ {
+ setup_channel 'error-gnu', silent => 0;
+ setup_channel 'error-gnu/warn', silent => 0, type => 'error';
+ setup_channel 'error-gnits', silent => 0;
+ setup_channel 'portability', silent => 0;
+ setup_channel 'extra-portability', silent => 1;
+ setup_channel 'gnu', silent => 0;
+ }
+ elsif ($name eq 'foreign')
+ {
+ setup_channel 'error-gnu', silent => 1;
+ setup_channel 'error-gnu/warn', silent => 0, type => 'warning';
+ setup_channel 'error-gnits', silent => 1;
+ setup_channel 'portability', silent => 1;
+ setup_channel 'extra-portability', silent => 1;
+ setup_channel 'gnu', silent => 1;
+ }
+ else
+ {
+ prog_error "level '$name' not recognized";
+ }
+}
+
+=back
+
+=head1 SEE ALSO
+
+L<Automake::Channels>
+
+=head1 HISTORY
+
+Written by Alexandre Duret-Lutz E<lt>F<adl@gnu.org>E<gt>.
+
+=cut
+
+1;
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/lib/Automake/Channels.pm b/lib/Automake/Channels.pm
new file mode 100644
index 000000000..3fc4f6407
--- /dev/null
+++ b/lib/Automake/Channels.pm
@@ -0,0 +1,836 @@
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+###############################################################
+# The main copy of this file is in Automake's git repository. #
+# Updates should be sent to automake-patches@gnu.org. #
+###############################################################
+
+package Automake::Channels;
+
+=head1 NAME
+
+Automake::Channels - support functions for error and warning management
+
+=head1 SYNOPSIS
+
+ use Automake::Channels;
+
+ # Register a channel to output warnings about unused variables.
+ register_channel 'unused', type => 'warning';
+
+ # Register a channel for system errors.
+ register_channel 'system', type => 'error', exit_code => 4;
+
+ # Output a message on channel 'unused'.
+ msg 'unused', "$file:$line", "unused variable '$var'";
+
+ # Make the 'unused' channel silent.
+ setup_channel 'unused', silent => 1;
+
+ # Turn on all channels of type 'warning'.
+ setup_channel_type 'warning', silent => 0;
+
+ # Redirect all channels to push messages on a Thread::Queue using
+ # the specified serialization key.
+ setup_channel_queue $queue, $key;
+
+ # Output a message pending in a Thread::Queue.
+ pop_channel_queue $queue;
+
+ # Treat all warnings as errors.
+ $warnings_are_errors = 1;
+
+ # Exit with the greatest exit code encountered so far.
+ exit $exit_code;
+
+=head1 DESCRIPTION
+
+This perl module provides support functions for handling diagnostic
+channels in programs. Channels can be registered to convey fatal,
+error, warning, or debug messages. Each channel has various options
+(e.g. is the channel silent, should duplicate messages be removed,
+etc.) that can also be overridden on a per-message basis.
+
+=cut
+
+use 5.006;
+use strict;
+use Exporter;
+use Carp;
+use File::Basename;
+
+use vars qw (@ISA @EXPORT %channels $me);
+
+@ISA = qw (Exporter);
+@EXPORT = qw ($exit_code $warnings_are_errors
+ &reset_local_duplicates &reset_global_duplicates
+ &register_channel &msg &exists_channel &channel_type
+ &setup_channel &setup_channel_type
+ &dup_channel_setup &drop_channel_setup
+ &buffer_messages &flush_messages
+ &setup_channel_queue &pop_channel_queue
+ US_GLOBAL US_LOCAL
+ UP_NONE UP_TEXT UP_LOC_TEXT);
+
+$me = basename $0;
+
+=head2 Global Variables
+
+=over 4
+
+=item C<$exit_code>
+
+The greatest exit code seen so far. C<$exit_code> is updated from
+the C<exit_code> options of C<fatal> and C<error> channels.
+
+=cut
+
+use vars qw ($exit_code);
+$exit_code = 0;
+
+=item C<$warnings_are_errors>
+
+Set this variable to 1 if warning messages should be treated as
+errors (i.e. if they should update C<$exit_code>).
+
+=cut
+
+use vars qw ($warnings_are_errors);
+$warnings_are_errors = 0;
+
+=back
+
+=head2 Constants
+
+=over 4
+
+=item C<UP_NONE>, C<UP_TEXT>, C<UP_LOC_TEXT>
+
+Possible values for the C<uniq_part> options. This selects the part
+of the message that should be considered when filtering out duplicates.
+If C<UP_LOC_TEXT> is used, the location and the explanation message
+are used for filtering. If C<UP_TEXT> is used, only the explanation
+message is used (so the same message will be filtered out if it appears
+at different locations). C<UP_NONE> means that duplicate messages
+should be output.
+
+=cut
+
+use constant UP_NONE => 0;
+use constant UP_TEXT => 1;
+use constant UP_LOC_TEXT => 2;
+
+=item C<US_LOCAL>, C<US_GLOBAL>
+
+Possible values for the C<uniq_scope> options.
+Use C<US_GLOBAL> for error messages that should be printed only
+once during the execution of the program, C<US_LOCAL> for message that
+should be printed only once per file. (Actually, C<Channels> does not
+do this now when files are changed, it relies on you calling
+C<reset_local_duplicates> when this happens.)
+
+=cut
+
+# possible values for uniq_scope
+use constant US_LOCAL => 0;
+use constant US_GLOBAL => 1;
+
+=back
+
+=head2 Options
+
+Channels accept the options described below. These options can be
+passed as a hash to the C<register_channel>, C<setup_channel>, and C<msg>
+functions. The possible keys, with their default value are:
+
+=over
+
+=item C<type =E<gt> 'warning'>
+
+The type of the channel. One of C<'debug'>, C<'warning'>, C<'error'>, or
+C<'fatal'>. Fatal messages abort the program when they are output.
+Error messages update the exit status. Debug and warning messages are
+harmless, except that warnings are treated as errors if
+C<$warnings_are_errors> is set.
+
+=item C<exit_code =E<gt> 1>
+
+The value to update C<$exit_code> with when a fatal or error message
+is emitted. C<$exit_code> is also updated for warnings output
+when C<$warnings_are_errors> is set.
+
+=item C<file =E<gt> \*STDERR>
+
+The file where the error should be output.
+
+=item C<silent =E<gt> 0>
+
+Whether the channel should be silent. Use this do disable a
+category of warning, for instance.
+
+=item C<ordered =E<gt> 1>
+
+Whether, with multi-threaded execution, the message should be queued
+for ordered output.
+
+=item C<uniq_part =E<gt> UP_LOC_TEXT>
+
+The part of the message subject to duplicate filtering. See the
+documentation for the C<UP_NONE>, C<UP_TEXT>, and C<UP_LOC_TEXT>
+constants above.
+
+C<uniq_part> can also be set to an arbitrary string that will be used
+instead of the message when considering duplicates.
+
+=item C<uniq_scope =E<gt> US_LOCAL>
+
+The scope of duplicate filtering. See the documentation for the
+C<US_LOCAL>, and C<US_GLOBAL> constants above.
+
+=item C<header =E<gt> ''>
+
+A string to prepend to each message emitted through this channel.
+With partial messages, only the first part will have C<header>
+prepended.
+
+=item C<footer =E<gt> ''>
+
+A string to append to each message emitted through this channel.
+With partial messages, only the final part will have C<footer>
+appended.
+
+=item C<backtrace =E<gt> 0>
+
+Die with a stack backtrace after displaying the message.
+
+=item C<partial =E<gt> 0>
+
+When set, indicates a partial message that should
+be output along with the next message with C<partial> unset.
+Several partial messages can be stacked this way.
+
+Duplicate filtering will apply to the I<global> message resulting from
+all I<partial> messages, using the options from the last (non-partial)
+message. Linking associated messages is the main reason to use this
+option.
+
+For instance the following messages
+
+ msg 'channel', 'foo:2', 'redefinition of A ...';
+ msg 'channel', 'foo:1', '... A previously defined here';
+ msg 'channel', 'foo:3', 'redefinition of A ...';
+ msg 'channel', 'foo:1', '... A previously defined here';
+
+will result in
+
+ foo:2: redefinition of A ...
+ foo:1: ... A previously defined here
+ foo:3: redefinition of A ...
+
+where the duplicate "I<... A previously defined here>" has been
+filtered out.
+
+Linking these messages using C<partial> as follows will prevent the
+fourth message to disappear.
+
+ msg 'channel', 'foo:2', 'redefinition of A ...', partial => 1;
+ msg 'channel', 'foo:1', '... A previously defined here';
+ msg 'channel', 'foo:3', 'redefinition of A ...', partial => 1;
+ msg 'channel', 'foo:1', '... A previously defined here';
+
+Note that because the stack of C<partial> messages is printed with the
+first non-C<partial> message, most options of C<partial> messages will
+be ignored.
+
+=back
+
+=cut
+
+use vars qw (%_default_options %_global_duplicate_messages
+ %_local_duplicate_messages);
+
+# Default options for a channel.
+%_default_options =
+ (
+ type => 'warning',
+ exit_code => 1,
+ file => \*STDERR,
+ silent => 0,
+ ordered => 1,
+ queue => 0,
+ queue_key => undef,
+ uniq_scope => US_LOCAL,
+ uniq_part => UP_LOC_TEXT,
+ header => '',
+ footer => '',
+ backtrace => 0,
+ partial => 0,
+ );
+
+# Filled with output messages as keys, to detect duplicates.
+# The value associated with each key is the number of occurrences
+# filtered out.
+%_local_duplicate_messages = ();
+%_global_duplicate_messages = ();
+
+sub _reset_duplicates (\%)
+{
+ my ($ref) = @_;
+ my $dup = 0;
+ foreach my $k (keys %$ref)
+ {
+ $dup += $ref->{$k};
+ }
+ %$ref = ();
+ return $dup;
+}
+
+
+=head2 Functions
+
+=over 4
+
+=item C<reset_local_duplicates ()>
+
+Reset local duplicate messages (see C<US_LOCAL>), and
+return the number of messages that have been filtered out.
+
+=cut
+
+sub reset_local_duplicates ()
+{
+ return _reset_duplicates %_local_duplicate_messages;
+}
+
+=item C<reset_global_duplicates ()>
+
+Reset local duplicate messages (see C<US_GLOBAL>), and
+return the number of messages that have been filtered out.
+
+=cut
+
+sub reset_global_duplicates ()
+{
+ return _reset_duplicates %_global_duplicate_messages;
+}
+
+sub _merge_options (\%%)
+{
+ my ($hash, %options) = @_;
+ local $_;
+
+ foreach (keys %options)
+ {
+ if (exists $hash->{$_})
+ {
+ $hash->{$_} = $options{$_}
+ }
+ else
+ {
+ confess "unknown option '$_'";
+ }
+ }
+ if ($hash->{'ordered'})
+ {
+ confess "fatal messages cannot be ordered"
+ if $hash->{'type'} eq 'fatal';
+ confess "backtrace cannot be output on ordered messages"
+ if $hash->{'backtrace'};
+ }
+}
+
+=item C<register_channel ($name, [%options])>
+
+Declare channel C<$name>, and override the default options
+with those listed in C<%options>.
+
+=cut
+
+sub register_channel ($;%)
+{
+ my ($name, %options) = @_;
+ my %channel_opts = %_default_options;
+ _merge_options %channel_opts, %options;
+ $channels{$name} = \%channel_opts;
+}
+
+=item C<exists_channel ($name)>
+
+Returns true iff channel C<$name> has been registered.
+
+=cut
+
+sub exists_channel ($)
+{
+ my ($name) = @_;
+ return exists $channels{$name};
+}
+
+=item C<channel_type ($name)>
+
+Returns the type of channel C<$name> if it has been registered.
+Returns the empty string otherwise.
+
+=cut
+
+sub channel_type ($)
+{
+ my ($name) = @_;
+ return $channels{$name}{'type'} if exists_channel $name;
+ return '';
+}
+
+# _format_sub_message ($LEADER, $MESSAGE)
+# ---------------------------------------
+# Split $MESSAGE at new lines and add $LEADER to each line.
+sub _format_sub_message ($$)
+{
+ my ($leader, $message) = @_;
+ return $leader . join ("\n" . $leader, split ("\n", $message)) . "\n";
+}
+
+# Store partial messages here. (See the 'partial' option.)
+use vars qw ($partial);
+$partial = '';
+
+# _format_message ($LOCATION, $MESSAGE, %OPTIONS)
+# -----------------------------------------------
+# Format the message. Return a string ready to print.
+sub _format_message ($$%)
+{
+ my ($location, $message, %opts) = @_;
+ my $msg = ($partial eq '' ? $opts{'header'} : '') . $message
+ . ($opts{'partial'} ? '' : $opts{'footer'});
+ if (ref $location)
+ {
+ # If $LOCATION is a reference, assume it's an instance of the
+ # Automake::Location class and display contexts.
+ my $loc = $location->get || $me;
+ $msg = _format_sub_message ("$loc: ", $msg);
+ for my $pair ($location->get_contexts)
+ {
+ $msg .= _format_sub_message ($pair->[0] . ": ", $pair->[1]);
+ }
+ }
+ else
+ {
+ $location ||= $me;
+ $msg = _format_sub_message ("$location: ", $msg);
+ }
+ return $msg;
+}
+
+# _enqueue ($QUEUE, $KEY, $UNIQ_SCOPE, $TO_FILTER, $MSG, $FILE)
+# -------------------------------------------------------------
+# Push message on a queue, to be processed by another thread.
+sub _enqueue ($$$$$$)
+{
+ my ($queue, $key, $uniq_scope, $to_filter, $msg, $file) = @_;
+ $queue->enqueue ($key, $msg, $to_filter, $uniq_scope);
+ confess "message queuing works only for STDERR"
+ if $file ne \*STDERR;
+}
+
+# _dequeue ($QUEUE)
+# -----------------
+# Pop a message from a queue, and print, similarly to how
+# _print_message would do it. Return 0 if the queue is
+# empty. Note that the key has already been dequeued.
+sub _dequeue ($)
+{
+ my ($queue) = @_;
+ my $msg = $queue->dequeue || return 0;
+ my $to_filter = $queue->dequeue;
+ my $uniq_scope = $queue->dequeue;
+ my $file = \*STDERR;
+
+ if ($to_filter ne '')
+ {
+ # Do we want local or global uniqueness?
+ my $dups;
+ if ($uniq_scope == US_LOCAL)
+ {
+ $dups = \%_local_duplicate_messages;
+ }
+ elsif ($uniq_scope == US_GLOBAL)
+ {
+ $dups = \%_global_duplicate_messages;
+ }
+ else
+ {
+ confess "unknown value for uniq_scope: " . $uniq_scope;
+ }
+
+ # Update the hash of messages.
+ if (exists $dups->{$to_filter})
+ {
+ ++$dups->{$to_filter};
+ return 1;
+ }
+ else
+ {
+ $dups->{$to_filter} = 0;
+ }
+ }
+ print $file $msg;
+ return 1;
+}
+
+
+# _print_message ($LOCATION, $MESSAGE, %OPTIONS)
+# ----------------------------------------------
+# Format the message, check duplicates, and print it.
+sub _print_message ($$%)
+{
+ my ($location, $message, %opts) = @_;
+
+ return 0 if ($opts{'silent'});
+
+ my $msg = _format_message ($location, $message, %opts);
+ if ($opts{'partial'})
+ {
+ # Incomplete message. Store, don't print.
+ $partial .= $msg;
+ return;
+ }
+ else
+ {
+ # Prefix with any partial message send so far.
+ $msg = $partial . $msg;
+ $partial = '';
+ }
+
+ msg ('note', '', 'warnings are treated as errors', uniq_scope => US_GLOBAL)
+ if ($opts{'type'} eq 'warning' && $warnings_are_errors);
+
+ # Check for duplicate message if requested.
+ my $to_filter;
+ if ($opts{'uniq_part'} ne UP_NONE)
+ {
+ # Which part of the error should we match?
+ if ($opts{'uniq_part'} eq UP_TEXT)
+ {
+ $to_filter = $message;
+ }
+ elsif ($opts{'uniq_part'} eq UP_LOC_TEXT)
+ {
+ $to_filter = $msg;
+ }
+ else
+ {
+ $to_filter = $opts{'uniq_part'};
+ }
+
+ # Do we want local or global uniqueness?
+ my $dups;
+ if ($opts{'uniq_scope'} == US_LOCAL)
+ {
+ $dups = \%_local_duplicate_messages;
+ }
+ elsif ($opts{'uniq_scope'} == US_GLOBAL)
+ {
+ $dups = \%_global_duplicate_messages;
+ }
+ else
+ {
+ confess "unknown value for uniq_scope: " . $opts{'uniq_scope'};
+ }
+
+ # Update the hash of messages.
+ if (exists $dups->{$to_filter})
+ {
+ ++$dups->{$to_filter};
+ return 0;
+ }
+ else
+ {
+ $dups->{$to_filter} = 0;
+ }
+ }
+ my $file = $opts{'file'};
+ if ($opts{'ordered'} && $opts{'queue'})
+ {
+ _enqueue ($opts{'queue'}, $opts{'queue_key'}, $opts{'uniq_scope'},
+ $to_filter, $msg, $file);
+ }
+ else
+ {
+ print $file $msg;
+ }
+ return 1;
+}
+
+=item C<msg ($channel, $location, $message, [%options])>
+
+Emit a message on C<$channel>, overriding some options of the channel with
+those specified in C<%options>. Obviously C<$channel> must have been
+registered with C<register_channel>.
+
+C<$message> is the text of the message, and C<$location> is a location
+associated to the message.
+
+For instance to complain about some unused variable C<mumble>
+declared at line 10 in F<foo.c>, one could do:
+
+ msg 'unused', 'foo.c:10', "unused variable 'mumble'";
+
+If channel C<unused> is not silent (and if this message is not a duplicate),
+the following would be output:
+
+ foo.c:10: unused variable 'mumble'
+
+C<$location> can also be an instance of C<Automake::Location>. In this
+case, the stack of contexts will be displayed in addition.
+
+If C<$message> contains newline characters, C<$location> is prepended
+to each line. For instance,
+
+ msg 'error', 'somewhere', "1st line\n2nd line";
+
+becomes
+
+ somewhere: 1st line
+ somewhere: 2nd line
+
+If C<$location> is an empty string, it is replaced by the name of the
+program. Actually, if you don't use C<%options>, you can even
+elide the empty C<$location>. Thus
+
+ msg 'fatal', '', 'fatal error';
+ msg 'fatal', 'fatal error';
+
+both print
+
+ progname: fatal error
+
+=cut
+
+
+use vars qw (@backlog %buffering);
+
+# See buffer_messages() and flush_messages() below.
+%buffering = (); # The map of channel types to buffer.
+@backlog = (); # The buffer of messages.
+
+sub msg ($$;$%)
+{
+ my ($channel, $location, $message, %options) = @_;
+
+ if (! defined $message)
+ {
+ $message = $location;
+ $location = '';
+ }
+
+ confess "unknown channel $channel" unless exists $channels{$channel};
+
+ my %opts = %{$channels{$channel}};
+ _merge_options (%opts, %options);
+
+ if (exists $buffering{$opts{'type'}})
+ {
+ push @backlog, [$channel, $location->clone, $message, %options];
+ return;
+ }
+
+ # Print the message if needed.
+ if (_print_message ($location, $message, %opts))
+ {
+ # Adjust exit status.
+ if ($opts{'type'} eq 'error'
+ || $opts{'type'} eq 'fatal'
+ || ($opts{'type'} eq 'warning' && $warnings_are_errors))
+ {
+ my $es = $opts{'exit_code'};
+ $exit_code = $es if $es > $exit_code;
+ }
+
+ # Die on fatal messages.
+ confess if $opts{'backtrace'};
+ if ($opts{'type'} eq 'fatal')
+ {
+ # flush messages explicitly here, needed in worker threads.
+ STDERR->flush;
+ exit $exit_code;
+ }
+ }
+}
+
+
+=item C<setup_channel ($channel, %options)>
+
+Override the options of C<$channel> with those specified by C<%options>.
+
+=cut
+
+sub setup_channel ($%)
+{
+ my ($name, %opts) = @_;
+ confess "unknown channel $name" unless exists $channels{$name};
+ _merge_options %{$channels{$name}}, %opts;
+}
+
+=item C<setup_channel_type ($type, %options)>
+
+Override the options of any channel of type C<$type>
+with those specified by C<%options>.
+
+=cut
+
+sub setup_channel_type ($%)
+{
+ my ($type, %opts) = @_;
+ foreach my $channel (keys %channels)
+ {
+ setup_channel $channel, %opts
+ if $channels{$channel}{'type'} eq $type;
+ }
+}
+
+=item C<dup_channel_setup ()>, C<drop_channel_setup ()>
+
+Sometimes it is necessary to make temporary modifications to channels.
+For instance one may want to disable a warning while processing a
+particular file, and then restore the initial setup. These two
+functions make it easy: C<dup_channel_setup ()> saves a copy of the
+current configuration for later restoration by
+C<drop_channel_setup ()>.
+
+You can think of this as a stack of configurations whose first entry
+is the active one. C<dup_channel_setup ()> duplicates the first
+entry, while C<drop_channel_setup ()> just deletes it.
+
+=cut
+
+use vars qw (@_saved_channels @_saved_werrors);
+@_saved_channels = ();
+@_saved_werrors = ();
+
+sub dup_channel_setup ()
+{
+ my %channels_copy;
+ foreach my $k1 (keys %channels)
+ {
+ $channels_copy{$k1} = {%{$channels{$k1}}};
+ }
+ push @_saved_channels, \%channels_copy;
+ push @_saved_werrors, $warnings_are_errors;
+}
+
+sub drop_channel_setup ()
+{
+ my $saved = pop @_saved_channels;
+ %channels = %$saved;
+ $warnings_are_errors = pop @_saved_werrors;
+}
+
+=item C<buffer_messages (@types)>, C<flush_messages ()>
+
+By default, when C<msg> is called, messages are processed immediately.
+
+Sometimes it is necessary to delay the output of messages.
+For instance you might want to make diagnostics before
+channels have been completely configured.
+
+After C<buffer_messages(@types)> has been called, messages sent with
+C<msg> to a channel whose type is listed in C<@types> will be stored in a
+list for later processing.
+
+This backlog of messages is processed when C<flush_messages> is
+called, with the current channel options (not the options in effect,
+at the time of C<msg>). So for instance, if some channel was silenced
+in the meantime, messages to this channel will not be printed.
+
+C<flush_messages> cancels the effect of C<buffer_messages>. Following
+calls to C<msg> are processed immediately as usual.
+
+=cut
+
+sub buffer_messages (@)
+{
+ foreach my $type (@_)
+ {
+ $buffering{$type} = 1;
+ }
+}
+
+sub flush_messages ()
+{
+ %buffering = ();
+ foreach my $args (@backlog)
+ {
+ &msg (@$args);
+ }
+ @backlog = ();
+}
+
+=item C<setup_channel_queue ($queue, $key)>
+
+Set the queue to fill for each channel that is ordered,
+and the key to use for serialization.
+
+=cut
+sub setup_channel_queue ($$)
+{
+ my ($queue, $key) = @_;
+ foreach my $channel (keys %channels)
+ {
+ setup_channel $channel, queue => $queue, queue_key => $key
+ if $channels{$channel}{'ordered'};
+ }
+}
+
+=item C<pop_channel_queue ($queue)>
+
+pop a message off the $queue; the key has already been popped.
+
+=cut
+sub pop_channel_queue ($)
+{
+ my ($queue) = @_;
+ return _dequeue ($queue);
+}
+
+=back
+
+=head1 SEE ALSO
+
+L<Automake::Location>
+
+=head1 HISTORY
+
+Written by Alexandre Duret-Lutz E<lt>F<adl@gnu.org>E<gt>.
+
+=cut
+
+1;
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/lib/Automake/Condition.pm b/lib/Automake/Condition.pm
new file mode 100644
index 000000000..de50e3a08
--- /dev/null
+++ b/lib/Automake/Condition.pm
@@ -0,0 +1,657 @@
+# Copyright (C) 1997-2017 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 <https://www.gnu.org/licenses/>.
+
+package Automake::Condition;
+
+use 5.006;
+use strict;
+use Carp;
+
+require Exporter;
+use vars '@ISA', '@EXPORT_OK';
+@ISA = qw/Exporter/;
+@EXPORT_OK = qw/TRUE FALSE reduce_and reduce_or/;
+
+=head1 NAME
+
+Automake::Condition - record a conjunction of conditionals
+
+=head1 SYNOPSIS
+
+ use Automake::Condition;
+
+ # Create a condition to represent "COND1 and not COND2".
+ my $cond = new Automake::Condition "COND1_TRUE", "COND2_FALSE";
+ # Create a condition to represent "not COND3".
+ my $other = new Automake::Condition "COND3_FALSE";
+
+ # Create a condition to represent
+ # "COND1 and not COND2 and not COND3".
+ my $both = $cond->merge ($other);
+
+ # Likewise, but using a list of conditional strings
+ my $both2 = $cond->merge_conds ("COND3_FALSE");
+
+ # Strip from $both any subconditions which are in $other.
+ # This is the opposite of merge.
+ $cond = $both->strip ($other);
+
+ # Return the list of conditions ("COND1_TRUE", "COND2_FALSE"):
+ my @conds = $cond->conds;
+
+ # Is $cond always true? (Not in this example)
+ if ($cond->true) { ... }
+
+ # Is $cond always false? (Not in this example)
+ if ($cond->false) { ... }
+
+ # Return the list of conditionals as a string:
+ # "COND1_TRUE COND2_FALSE"
+ my $str = $cond->string;
+
+ # Return the list of conditionals as a human readable string:
+ # "COND1 and !COND2"
+ my $str = $cond->human;
+
+ # Return the list of conditionals as a AC_SUBST-style string:
+ # "@COND1_TRUE@@COND2_FALSE@"
+ my $subst = $cond->subst_string;
+
+ # Is $cond true when $both is true? (Yes in this example)
+ if ($cond->true_when ($both)) { ... }
+
+ # Is $cond redundant w.r.t. {$other, $both}?
+ # (Yes in this example)
+ if ($cond->redundant_wrt ($other, $both)) { ... }
+
+ # Does $cond imply any of {$other, $both}?
+ # (Not in this example)
+ if ($cond->implies_any ($other, $both)) { ... }
+
+ # Remove superfluous conditionals assuming they will eventually
+ # be multiplied together.
+ # (Returns @conds = ($both) in this example, because
+ # $other and $cond are implied by $both.)
+ @conds = Automake::Condition::reduce_and ($other, $both, $cond);
+
+ # Remove superfluous conditionals assuming they will eventually
+ # be summed together.
+ # (Returns @conds = ($cond, $other) in this example, because
+ # $both is a subset condition of $cond: $cond is true whenever $both
+ # is true.)
+ @conds = Automake::Condition::reduce_or ($other, $both, $cond);
+
+ # Invert a Condition. This returns a list of Conditions.
+ @conds = $both->not;
+
+=head1 DESCRIPTION
+
+A C<Condition> is a conjunction of conditionals (i.e., atomic conditions
+defined in F<configure.ac> by C<AM_CONDITIONAL>. In Automake they
+are used to represent the conditions into which F<Makefile> variables and
+F<Makefile> rules are defined.
+
+If the variable C<VAR> is defined as
+
+ if COND1
+ if COND2
+ VAR = value
+ endif
+ endif
+
+then it will be associated a C<Condition> created with
+the following statement.
+
+ new Automake::Condition "COND1_TRUE", "COND2_TRUE";
+
+Remember that a C<Condition> is a I<conjunction> of conditionals, so
+the above C<Condition> means C<VAR> is defined when C<COND1>
+B<and> C<COND2> are true. There is no way to express disjunctions
+(i.e., I<or>s) with this class (but see L<DisjConditions>).
+
+Another point worth to mention is that each C<Condition> object is
+unique with respect to its conditionals. Two C<Condition> objects
+created for the same set of conditionals will have the same address.
+This makes it easy to compare C<Condition>s: just compare the
+references.
+
+ my $c1 = new Automake::Condition "COND1_TRUE", "COND2_TRUE";
+ my $c2 = new Automake::Condition "COND1_TRUE", "COND2_TRUE";
+ $c1 == $c2; # True!
+
+=head2 Methods
+
+=over 4
+
+=item C<$cond = new Automake::Condition [@conds]>
+
+Return a C<Condition> objects for the conjunctions of conditionals
+listed in C<@conds> as strings.
+
+An item in C<@conds> should be either C<"FALSE">, C<"TRUE">, or have
+the form C<"NAME_FALSE"> or C<"NAME_TRUE"> where C<NAME> can be
+anything (in practice C<NAME> should be the name of a conditional
+declared in F<configure.ac> with C<AM_CONDITIONAL>, but it's not
+C<Automake::Condition>'s responsibility to ensure this).
+
+An empty C<@conds> means C<"TRUE">.
+
+As explained previously, the reference (object) returned is unique
+with respect to C<@conds>. For this purpose, duplicate elements are
+ignored, and C<@conds> is rewritten as C<("FALSE")> if it contains
+C<"FALSE"> or two contradictory conditionals (such as C<"NAME_FALSE">
+and C<"NAME_TRUE">.)
+
+Therefore the following two statements create the same object (they
+both create the C<"FALSE"> condition).
+
+ my $c3 = new Automake::Condition "COND1_TRUE", "COND1_FALSE";
+ my $c4 = new Automake::Condition "COND2_TRUE", "FALSE";
+ $c3 == $c4; # True!
+ $c3 == FALSE; # True!
+
+=cut
+
+# Keys in this hash are conditional strings. Values are the
+# associated object conditions. This is used by 'new' to reuse
+# Condition objects with identical conditionals.
+use vars '%_condition_singletons';
+# Do NOT reset this hash here. It's already empty by default,
+# and any setting would otherwise occur AFTER the 'TRUE' and 'FALSE'
+# constants definitions.
+# %_condition_singletons = ();
+
+sub new ($;@)
+{
+ my ($class, @conds) = @_;
+ my $self = {
+ hash => {},
+ };
+ bless $self, $class;
+
+ for my $cond (@conds)
+ {
+ # Catch some common programming errors:
+ # - A Condition passed to new
+ confess "'$cond' is a reference, expected a string" if ref $cond;
+ # - A Condition passed as a string to new
+ confess "'$cond' does not look like a condition" if $cond =~ /::/;
+ }
+
+ # Accept strings like "FOO BAR" as shorthand for ("FOO", "BAR").
+ @conds = map { split (' ', $_) } @conds;
+
+ for my $cond (@conds)
+ {
+ next if $cond eq 'TRUE';
+
+ # Detect cases when @conds can be simplified to FALSE.
+ if (($cond eq 'FALSE' && $#conds > 0)
+ || ($cond =~ /^(.*)_TRUE$/ && exists $self->{'hash'}{"${1}_FALSE"})
+ || ($cond =~ /^(.*)_FALSE$/ && exists $self->{'hash'}{"${1}_TRUE"}))
+ {
+ return &FALSE;
+ }
+
+ $self->{'hash'}{$cond} = 1;
+ }
+
+ my $key = $self->string;
+ if (exists $_condition_singletons{$key})
+ {
+ return $_condition_singletons{$key};
+ }
+ $_condition_singletons{$key} = $self;
+ return $self;
+}
+
+=item C<$newcond = $cond-E<gt>merge (@otherconds)>
+
+Return a new condition which is the conjunction of
+C<$cond> and C<@otherconds>.
+
+=cut
+
+sub merge ($@)
+{
+ my ($self, @otherconds) = @_;
+ new Automake::Condition (map { $_->conds } ($self, @otherconds));
+}
+
+=item C<$newcond = $cond-E<gt>merge_conds (@conds)>
+
+Return a new condition which is the conjunction of C<$cond> and
+C<@conds>, where C<@conds> is a list of conditional strings, as
+passed to C<new>.
+
+=cut
+
+sub merge_conds ($@)
+{
+ my ($self, @conds) = @_;
+ new Automake::Condition $self->conds, @conds;
+}
+
+=item C<$newcond = $cond-E<gt>strip ($minuscond)>
+
+Return a new condition which has all the conditionals of C<$cond>
+except those of C<$minuscond>. This is the opposite of C<merge>.
+
+=cut
+
+sub strip ($$)
+{
+ my ($self, $minus) = @_;
+ my @res = grep { not $minus->_has ($_) } $self->conds;
+ return new Automake::Condition @res;
+}
+
+=item C<@list = $cond-E<gt>conds>
+
+Return the set of conditionals defining C<$cond>, as strings. Note that
+this might not be exactly the list passed to C<new> (or a
+concatenation of such lists if C<merge> was used), because of the
+cleanup mentioned in C<new>'s description.
+
+For instance C<$c3-E<gt>conds> will simply return C<("FALSE")>.
+
+=cut
+
+sub conds ($ )
+{
+ my ($self) = @_;
+ my @conds = keys %{$self->{'hash'}};
+ return ("TRUE") unless @conds;
+ return sort @conds;
+}
+
+# Undocumented, shouldn't be needed outside of this class.
+sub _has ($$)
+{
+ my ($self, $cond) = @_;
+ return exists $self->{'hash'}{$cond};
+}
+
+=item C<$cond-E<gt>false>
+
+Return 1 iff this condition is always false.
+
+=cut
+
+sub false ($ )
+{
+ my ($self) = @_;
+ return $self->_has ('FALSE');
+}
+
+=item C<$cond-E<gt>true>
+
+Return 1 iff this condition is always true.
+
+=cut
+
+sub true ($ )
+{
+ my ($self) = @_;
+ return 0 == keys %{$self->{'hash'}};
+}
+
+=item C<$cond-E<gt>string>
+
+Build a string which denotes the condition.
+
+For instance using the C<$cond> definition from L<SYNOPSYS>,
+C<$cond-E<gt>string> will return C<"COND1_TRUE COND2_FALSE">.
+
+=cut
+
+sub string ($ )
+{
+ my ($self) = @_;
+
+ return $self->{'string'} if defined $self->{'string'};
+
+ my $res = '';
+ if ($self->false)
+ {
+ $res = 'FALSE';
+ }
+ else
+ {
+ $res = join (' ', $self->conds);
+ }
+ $self->{'string'} = $res;
+ return $res;
+}
+
+=item C<$cond-E<gt>human>
+
+Build a human readable string which denotes the condition.
+
+For instance using the C<$cond> definition from L<SYNOPSYS>,
+C<$cond-E<gt>string> will return C<"COND1 and !COND2">.
+
+=cut
+
+sub _to_human ($ )
+{
+ my ($s) = @_;
+ if ($s =~ /^(.*)_(TRUE|FALSE)$/)
+ {
+ return (($2 eq 'FALSE') ? '!' : '') . $1;
+ }
+ else
+ {
+ return $s;
+ }
+}
+
+sub human ($ )
+{
+ my ($self) = @_;
+
+ return $self->{'human'} if defined $self->{'human'};
+
+ my $res = '';
+ if ($self->false)
+ {
+ $res = 'FALSE';
+ }
+ else
+ {
+ $res = join (' and ', map { _to_human $_ } $self->conds);
+ }
+ $self->{'human'} = $res;
+ return $res;
+}
+
+=item C<$cond-E<gt>subst_string>
+
+Build a C<AC_SUBST>-style string for output in F<Makefile.in>.
+
+For instance using the C<$cond> definition from L<SYNOPSYS>,
+C<$cond-E<gt>subst_string> will return C<"@COND1_TRUE@@COND2_FALSE@">.
+
+=cut
+
+sub subst_string ($ )
+{
+ my ($self) = @_;
+
+ return $self->{'subst_string'} if defined $self->{'subst_string'};
+
+ my $res = '';
+ if ($self->false)
+ {
+ $res = '#';
+ }
+ elsif (! $self->true)
+ {
+ $res = '@' . join ('@@', sort $self->conds) . '@';
+ }
+ $self->{'subst_string'} = $res;
+ return $res;
+}
+
+=item C<$cond-E<gt>true_when ($when)>
+
+Return 1 iff C<$cond> is true when C<$when> is true.
+Return 0 otherwise.
+
+Using the definitions from L<SYNOPSYS>, C<$cond> is true
+when C<$both> is true, but the converse is wrong.
+
+=cut
+
+sub true_when ($$)
+{
+ my ($self, $when) = @_;
+
+ # Nothing is true when FALSE (not even FALSE itself, but it
+ # shouldn't hurt if you decide to change that).
+ return 0 if $self->false || $when->false;
+
+ # If we are true, we stay true when $when is true :)
+ return 1 if $self->true;
+
+ # $SELF is true under $WHEN if each conditional component of $SELF
+ # exists in $WHEN.
+ foreach my $cond ($self->conds)
+ {
+ return 0 unless $when->_has ($cond);
+ }
+ return 1;
+}
+
+=item C<$cond-E<gt>redundant_wrt (@conds)>
+
+Return 1 iff C<$cond> is true for any condition in C<@conds>.
+If @conds is empty, return 1 iff C<$cond> is C<FALSE>.
+Return 0 otherwise.
+
+=cut
+
+sub redundant_wrt ($@)
+{
+ my ($self, @conds) = @_;
+
+ foreach my $cond (@conds)
+ {
+ return 1 if $self->true_when ($cond);
+ }
+ return $self->false;
+}
+
+=item C<$cond-E<gt>implies_any (@conds)>
+
+Return 1 iff C<$cond> implies any of the conditions in C<@conds>.
+Return 0 otherwise.
+
+=cut
+
+sub implies_any ($@)
+{
+ my ($self, @conds) = @_;
+
+ foreach my $cond (@conds)
+ {
+ return 1 if $cond->true_when ($self);
+ }
+ return 0;
+}
+
+=item C<$cond-E<gt>not>
+
+Return a negation of C<$cond> as a list of C<Condition>s.
+This list should be used to construct a C<DisjConditions>
+(we cannot return a C<DisjConditions> from C<Automake::Condition>,
+because that would make these two packages interdependent).
+
+=cut
+
+sub not ($ )
+{
+ my ($self) = @_;
+ return @{$self->{'not'}} if defined $self->{'not'};
+ my @res =
+ map { new Automake::Condition &conditional_negate ($_) } $self->conds;
+ $self->{'not'} = [@res];
+ return @res;
+}
+
+=item C<$cond-E<gt>multiply (@conds)>
+
+Assumption: C<@conds> represent a disjunction of conditions.
+
+Return the result of multiplying C<$cond> with that disjunction.
+The result will be a list of conditions suitable to construct a
+C<DisjConditions>.
+
+=cut
+
+sub multiply ($@)
+{
+ my ($self, @set) = @_;
+ my %res = ();
+ for my $cond (@set)
+ {
+ my $ans = $self->merge ($cond);
+ $res{$ans} = $ans;
+ }
+
+ # FALSE can always be removed from a disjunction.
+ delete $res{FALSE};
+
+ # Now, $self is a common factor of the remaining conditions.
+ # If one of the conditions is $self, we can discard the rest.
+ return ($self, ())
+ if exists $res{$self};
+
+ return (values %res);
+}
+
+=back
+
+=head2 Other helper functions
+
+=over 4
+
+=item C<TRUE>
+
+The C<"TRUE"> conditional.
+
+=item C<FALSE>
+
+The C<"FALSE"> conditional.
+
+=cut
+
+use constant TRUE => new Automake::Condition "TRUE";
+use constant FALSE => new Automake::Condition "FALSE";
+
+=item C<reduce_and (@conds)>
+
+Return a subset of @conds with the property that the conjunction of
+the subset is the same as the conjunction of @conds. For example, if
+both C<COND1_TRUE COND2_TRUE> and C<COND1_TRUE> are in the list,
+discard the latter. If the input list is empty, return C<(TRUE)>.
+
+=cut
+
+sub reduce_and (@)
+{
+ my (@conds) = @_;
+ my @ret = ();
+ my $cond;
+ while (@conds > 0)
+ {
+ $cond = shift @conds;
+
+ # FALSE is absorbent.
+ return FALSE
+ if $cond == FALSE;
+
+ if (! $cond->redundant_wrt (@ret, @conds))
+ {
+ push (@ret, $cond);
+ }
+ }
+
+ return TRUE if @ret == 0;
+ return @ret;
+}
+
+=item C<reduce_or (@conds)>
+
+Return a subset of @conds with the property that the disjunction of
+the subset is equivalent to the disjunction of @conds. For example,
+if both C<COND1_TRUE COND2_TRUE> and C<COND1_TRUE> are in the list,
+discard the former. If the input list is empty, return C<(FALSE)>.
+
+=cut
+
+sub reduce_or (@)
+{
+ my (@conds) = @_;
+ my @ret = ();
+ my $cond;
+ while (@conds > 0)
+ {
+ $cond = shift @conds;
+
+ next
+ if $cond == FALSE;
+ return TRUE
+ if $cond == TRUE;
+
+ push (@ret, $cond)
+ unless $cond->implies_any (@ret, @conds);
+ }
+
+ return FALSE if @ret == 0;
+ return @ret;
+}
+
+=item C<conditional_negate ($condstr)>
+
+Negate a conditional string.
+
+=cut
+
+sub conditional_negate ($)
+{
+ my ($cond) = @_;
+
+ $cond =~ s/TRUE$/TRUEO/;
+ $cond =~ s/FALSE$/TRUE/;
+ $cond =~ s/TRUEO$/FALSE/;
+
+ return $cond;
+}
+
+=back
+
+=head1 SEE ALSO
+
+L<Automake::DisjConditions>.
+
+=head1 HISTORY
+
+C<AM_CONDITIONAL>s and supporting code were added to Automake 1.1o by
+Ian Lance Taylor <ian@cygnus.org> in 1997. Since then it has been
+improved by Tom Tromey <tromey@redhat.com>, Richard Boulton
+<richard@tartarus.org>, Raja R Harinath <harinath@cs.umn.edu>,
+Akim Demaille <akim@epita.fr>, and Alexandre Duret-Lutz <adl@gnu.org>.
+
+=cut
+
+1;
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/lib/Automake/Config.in b/lib/Automake/Config.in
new file mode 100644
index 000000000..4abef3dbf
--- /dev/null
+++ b/lib/Automake/Config.in
@@ -0,0 +1,62 @@
+# -*- Perl -*-
+# Copyright (C) 2003-2017 Free Software Foundation, Inc.
+# @configure_input@
+
+# 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 <https://www.gnu.org/licenses/>.
+
+package Automake::Config;
+use strict;
+
+use 5.006;
+require Exporter;
+
+our @ISA = qw (Exporter);
+our @EXPORT = qw ($APIVERSION $PACKAGE $PACKAGE_BUGREPORT $VERSION
+ $RELEASE_YEAR $libdir $perl_threads);
+
+# Parameters set by configure. Not to be changed. NOTE: assign
+# VERSION as string so that e.g. version 0.30 will print correctly.
+our $APIVERSION = '@APIVERSION@';
+our $PACKAGE = '@PACKAGE@';
+our $PACKAGE_BUGREPORT = '@PACKAGE_BUGREPORT@';
+our $VERSION = '@VERSION@';
+our $RELEASE_YEAR = '@RELEASE_YEAR@';
+our $libdir = $ENV{"AUTOMAKE_LIBDIR"} || '@datadir@/@PACKAGE@-@APIVERSION@';
+
+our $perl_threads = 0;
+# We need at least this version for CLONE support.
+if (eval { require 5.007_002; })
+ {
+ use Config;
+ $perl_threads = $Config{useithreads};
+ }
+
+1;
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/lib/Automake/Configure_ac.pm b/lib/Automake/Configure_ac.pm
new file mode 100644
index 000000000..876576d49
--- /dev/null
+++ b/lib/Automake/Configure_ac.pm
@@ -0,0 +1,128 @@
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+###############################################################
+# The main copy of this file is in Automake's git repository. #
+# Updates should be sent to automake-patches@gnu.org. #
+###############################################################
+
+package Automake::Configure_ac;
+
+use 5.006;
+use strict;
+use Exporter;
+use Automake::Channels;
+use Automake::ChannelDefs;
+
+use vars qw (@ISA @EXPORT);
+
+@ISA = qw (Exporter);
+@EXPORT = qw (&find_configure_ac &require_configure_ac);
+
+=head1 NAME
+
+Automake::Configure_ac - Locate configure.ac or configure.in.
+
+=head1 SYNOPSIS
+
+ use Automake::Configure_ac;
+
+ # Try to locate configure.in or configure.ac in the current
+ # directory. It may be absent. Complain if both files exist.
+ my $file_name = find_configure_ac;
+
+ # Likewise, but bomb out if the file does not exist.
+ my $file_name = require_configure_ac;
+
+ # Likewise, but in $dir.
+ my $file_name = find_configure_ac ($dir);
+ my $file_name = require_configure_ac ($dir);
+
+=over 4
+
+=back
+
+=head2 Functions
+
+=over 4
+
+=item C<$configure_ac = find_configure_ac ([$directory])>
+
+Find a F<configure.ac> or F<configure.in> file in C<$directory>,
+defaulting to the current directory. Complain if both files are present.
+Return the name of the file found, or the former if neither is present.
+
+=cut
+
+sub find_configure_ac (;@)
+{
+ my ($directory) = @_;
+ $directory ||= '.';
+ my $configure_ac =
+ File::Spec->canonpath (File::Spec->catfile ($directory, 'configure.ac'));
+ my $configure_in =
+ File::Spec->canonpath (File::Spec->catfile ($directory, 'configure.in'));
+
+ if (-f $configure_in)
+ {
+ msg ('obsolete', "autoconf input should be named 'configure.ac'," .
+ " not 'configure.in'");
+ if (-f $configure_ac)
+ {
+ msg ('unsupported',
+ "'$configure_ac' and '$configure_in' both present.\n"
+ . "proceeding with '$configure_ac'");
+ return $configure_ac
+ }
+ else
+ {
+ return $configure_in;
+ }
+ }
+ return $configure_ac;
+}
+
+
+=item C<$configure_ac = require_configure_ac ([$directory])>
+
+Like C<find_configure_ac>, but fail if neither is present.
+
+=cut
+
+sub require_configure_ac (;$)
+{
+ my $res = find_configure_ac (@_);
+ fatal "'configure.ac' is required" unless -f $res;
+ return $res
+}
+
+1;
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/lib/Automake/DisjConditions.pm b/lib/Automake/DisjConditions.pm
new file mode 100644
index 000000000..c15fafe9e
--- /dev/null
+++ b/lib/Automake/DisjConditions.pm
@@ -0,0 +1,557 @@
+# Copyright (C) 1997-2017 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 <https://www.gnu.org/licenses/>.
+
+package Automake::DisjConditions;
+
+use 5.006;
+use strict;
+use Carp;
+use Automake::Condition qw/TRUE FALSE/;
+
+=head1 NAME
+
+Automake::DisjConditions - record a disjunction of Conditions
+
+=head1 SYNOPSIS
+
+ use Automake::Condition;
+ use Automake::DisjConditions;
+
+ # Create a Condition to represent "COND1 and not COND2".
+ my $cond = new Automake::Condition "COND1_TRUE", "COND2_FALSE";
+ # Create a Condition to represent "not COND3".
+ my $other = new Automake::Condition "COND3_FALSE";
+
+ # Create a DisjConditions to represent
+ # "(COND1 and not COND2) or (not COND3)"
+ my $set = new Automake::DisjConditions $cond, $other;
+
+ # Return the list of Conditions involved in $set.
+ my @conds = $set->conds;
+
+ # Return one of the Condition involved in $set.
+ my $cond = $set->one_cond;
+
+ # Return true iff $set is always true (i.e. its subconditions
+ # cover all cases).
+ if ($set->true) { ... }
+
+ # Return false iff $set is always false (i.e. is empty, or contains
+ # only false conditions).
+ if ($set->false) { ... }
+
+ # Return a string representing the DisjConditions.
+ # "COND1_TRUE COND2_FALSE | COND3_FALSE"
+ my $str = $set->string;
+
+ # Return a human readable string representing the DisjConditions.
+ # "(COND1 and !COND2) or (!COND3)"
+ my $str = $set->human;
+
+ # Merge (OR) several DisjConditions.
+ my $all = $set->merge($set2, $set3, ...)
+
+ # Invert a DisjConditions, i.e., create a new DisjConditions
+ # that complements $set.
+ my $inv = $set->invert;
+
+ # Multiply two DisjConditions.
+ my $prod = $set1->multiply ($set2);
+
+ # Return the subconditions of a DisjConditions with respect to
+ # a Condition. See the description for a real example.
+ my $subconds = $set->sub_conditions ($cond);
+
+ # Check whether a new definition in condition $cond would be
+ # ambiguous w.r.t. existing definitions in $set.
+ ($msg, $ambig_cond) = $set->ambiguous_p ($what, $cond);
+
+=head1 DESCRIPTION
+
+A C<DisjConditions> is a disjunction of C<Condition>s. In Automake
+they are used to represent the conditions into which Makefile
+variables and Makefile rules are defined.
+
+If the variable C<VAR> is defined as
+
+ if COND1
+ if COND2
+ VAR = value1
+ endif
+ endif
+ if !COND3
+ if COND4
+ VAR = value2
+ endif
+ endif
+
+then it will be associated a C<DisjConditions> created with
+the following statement.
+
+ new Automake::DisjConditions
+ (new Automake::Condition ("COND1_TRUE", "COND2_TRUE"),
+ new Automake::Condition ("COND3_FALSE", "COND4_TRUE"));
+
+As you can see, a C<DisjConditions> is made from a list of
+C<Condition>s. Since C<DisjConditions> is a disjunction, and
+C<Condition> is a conjunction, the above can be read as
+follows.
+
+ (COND1 and COND2) or ((not COND3) and COND4)
+
+That's indeed the condition in which C<VAR> has a value.
+
+Like C<Condition> objects, a C<DisjConditions> object is unique
+with respect to its conditions. Two C<DisjConditions> objects created
+for the same set of conditions will have the same address. This makes
+it easy to compare C<DisjConditions>s: just compare the references.
+
+=head2 Methods
+
+=over 4
+
+=item C<$set = new Automake::DisjConditions [@conds]>
+
+Create a C<DisjConditions> object from the list of C<Condition>
+objects passed in arguments.
+
+If the C<@conds> list is empty, the C<DisjConditions> is assumed to be
+false.
+
+As explained previously, the reference (object) returned is unique
+with respect to C<@conds>. For this purpose, duplicate elements are
+ignored.
+
+=cut
+
+# Keys in this hash are DisjConditions strings. Values are the
+# associated object DisjConditions. This is used by 'new' to reuse
+# DisjConditions objects with identical conditions.
+use vars '%_disjcondition_singletons';
+
+sub new ($;@)
+{
+ my ($class, @conds) = @_;
+ my @filtered_conds = ();
+ for my $cond (@conds)
+ {
+ confess "'$cond' isn't a reference" unless ref $cond;
+ confess "'$cond' isn't an Automake::Condition"
+ unless $cond->isa ("Automake::Condition");
+
+ # This is a disjunction of conditions, so we drop
+ # false conditions. We'll always treat an "empty"
+ # DisjConditions as false for this reason.
+ next if $cond->false;
+
+ push @filtered_conds, $cond;
+ }
+
+ my $string;
+ if (@filtered_conds)
+ {
+ @filtered_conds = sort { $a->string cmp $b->string } @filtered_conds;
+ $string = join (' | ', map { $_->string } @filtered_conds);
+ }
+ else
+ {
+ $string = 'FALSE';
+ }
+
+ # Return any existing identical DisjConditions.
+ my $me = $_disjcondition_singletons{$string};
+ return $me if $me;
+
+ # Else, create a new DisjConditions.
+
+ # Store conditions as keys AND as values, because blessed
+ # objects are converted to strings when used as keys (so
+ # at least we still have the value when we need to call
+ # a method).
+ my %h = map {$_ => $_} @filtered_conds;
+
+ my $self = {
+ hash => \%h,
+ string => $string,
+ conds => \@filtered_conds,
+ };
+ bless $self, $class;
+
+ $_disjcondition_singletons{$string} = $self;
+ return $self;
+}
+
+
+=item C<CLONE>
+
+Internal special subroutine to fix up the self hashes in
+C<%_disjcondition_singletons> upon thread creation. C<CLONE> is invoked
+automatically with ithreads from Perl 5.7.2 or later, so if you use this
+module with earlier versions of Perl, it is not thread-safe.
+
+=cut
+
+sub CLONE
+{
+ foreach my $self (values %_disjcondition_singletons)
+ {
+ my %h = map { $_ => $_ } @{$self->{'conds'}};
+ $self->{'hash'} = \%h;
+ }
+}
+
+
+=item C<@conds = $set-E<gt>conds>
+
+Return the list of C<Condition> objects involved in C<$set>.
+
+=cut
+
+sub conds ($ )
+{
+ my ($self) = @_;
+ return @{$self->{'conds'}};
+}
+
+=item C<$cond = $set-E<gt>one_cond>
+
+Return one C<Condition> object involved in C<$set>.
+
+=cut
+
+sub one_cond ($)
+{
+ my ($self) = @_;
+ return (%{$self->{'hash'}},)[1];
+}
+
+=item C<$et = $set-E<gt>false>
+
+Return 1 iff the C<DisjConditions> object is always false (i.e., if it
+is empty, or if it contains only false C<Condition>s). Return 0
+otherwise.
+
+=cut
+
+sub false ($ )
+{
+ my ($self) = @_;
+ return 0 == keys %{$self->{'hash'}};
+}
+
+=item C<$et = $set-E<gt>true>
+
+Return 1 iff the C<DisjConditions> object is always true (i.e. covers all
+conditions). Return 0 otherwise.
+
+=cut
+
+sub true ($ )
+{
+ my ($self) = @_;
+ return $self->invert->false;
+}
+
+=item C<$str = $set-E<gt>string>
+
+Build a string which denotes the C<DisjConditions>.
+
+=cut
+
+sub string ($ )
+{
+ my ($self) = @_;
+ return $self->{'string'};
+}
+
+=item C<$cond-E<gt>human>
+
+Build a human readable string which denotes the C<DisjConditions>.
+
+=cut
+
+sub human ($ )
+{
+ my ($self) = @_;
+
+ return $self->{'human'} if defined $self->{'human'};
+
+ my $res = '';
+ if ($self->false)
+ {
+ $res = 'FALSE';
+ }
+ else
+ {
+ my @c = $self->conds;
+ if (1 == @c)
+ {
+ $res = $c[0]->human;
+ }
+ else
+ {
+ $res = '(' . join (') or (', map { $_->human } $self->conds) . ')';
+ }
+ }
+ $self->{'human'} = $res;
+ return $res;
+}
+
+
+=item C<$newcond = $cond-E<gt>merge (@otherconds)>
+
+Return a new C<DisjConditions> which is the disjunction of
+C<$cond> and C<@otherconds>. Items in C<@otherconds> can be
+@C<Condition>s or C<DisjConditions>.
+
+=cut
+
+sub merge ($@)
+{
+ my ($self, @otherconds) = @_;
+ new Automake::DisjConditions (
+ map { $_->isa ("Automake::DisjConditions") ? $_->conds : $_ }
+ ($self, @otherconds));
+}
+
+
+=item C<$prod = $set1-E<gt>multiply ($set2)>
+
+Multiply two conditional sets.
+
+ my $set1 = new Automake::DisjConditions
+ (new Automake::Condition ("A_TRUE"),
+ new Automake::Condition ("B_TRUE"));
+ my $set2 = new Automake::DisjConditions
+ (new Automake::Condition ("C_FALSE"),
+ new Automake::Condition ("D_FALSE"));
+
+C<$set1-E<gt>multiply ($set2)> will return
+
+ new Automake::DisjConditions
+ (new Automake::Condition ("A_TRUE", "C_FALSE"),
+ new Automake::Condition ("B_TRUE", "C_FALSE"),;
+ new Automake::Condition ("A_TRUE", "D_FALSE"),
+ new Automake::Condition ("B_TRUE", "D_FALSE"));
+
+The argument can also be a C<Condition>.
+
+=cut
+
+# Same as multiply() but take a list of Conditionals as second argument.
+# We use this in invert().
+sub _multiply ($@)
+{
+ my ($self, @set) = @_;
+ my @res = map { $_->multiply (@set) } $self->conds;
+ return new Automake::DisjConditions (Automake::Condition::reduce_or @res);
+}
+
+sub multiply ($$)
+{
+ my ($self, $set) = @_;
+ return $self->_multiply ($set) if $set->isa('Automake::Condition');
+ return $self->_multiply ($set->conds);
+}
+
+=item C<$inv = $set-E<gt>invert>
+
+Invert a C<DisjConditions>. Return a C<DisjConditions> which is true
+when C<$set> is false, and vice-versa.
+
+ my $set = new Automake::DisjConditions
+ (new Automake::Condition ("A_TRUE", "B_TRUE"),
+ new Automake::Condition ("A_FALSE", "B_FALSE"));
+
+Calling C<$set-E<gt>invert> will return the following C<DisjConditions>.
+
+ new Automake::DisjConditions
+ (new Automake::Condition ("A_TRUE", "B_FALSE"),
+ new Automake::Condition ("A_FALSE", "B_TRUE"));
+
+We implement the inversion by a product-of-sums to sum-of-products
+conversion using repeated multiplications. Because of the way we
+implement multiplication, the result of inversion is in canonical
+prime implicant form.
+
+=cut
+
+sub invert($ )
+{
+ my ($self) = @_;
+
+ return $self->{'invert'} if defined $self->{'invert'};
+
+ # The invert of an empty DisjConditions is TRUE.
+ my $res = new Automake::DisjConditions TRUE;
+
+ # !((a.b)+(c.d)+(e.f))
+ # = (!a+!b).(!c+!d).(!e+!f)
+ # We develop this into a sum of product iteratively, starting from TRUE:
+ # 1) TRUE
+ # 2) TRUE.!a + TRUE.!b
+ # 3) TRUE.!a.!c + TRUE.!b.!c + TRUE.!a.!d + TRUE.!b.!d
+ # 4) TRUE.!a.!c.!e + TRUE.!b.!c.!e + TRUE.!a.!d.!e + TRUE.!b.!d.!e
+ # + TRUE.!a.!c.!f + TRUE.!b.!c.!f + TRUE.!a.!d.!f + TRUE.!b.!d.!f
+ foreach my $cond ($self->conds)
+ {
+ $res = $res->_multiply ($cond->not);
+ }
+
+ # Cache result.
+ $self->{'invert'} = $res;
+ # It's tempting to also set $res->{'invert'} to $self, but that
+ # is a bad idea as $self hasn't been normalized in any way.
+ # (Different inputs can produce the same inverted set.)
+ return $res;
+}
+
+=item C<$self-E<gt>simplify>
+
+Return a C<Disjunction> which is a simplified canonical form of C<$self>.
+This canonical form contains only prime implicants, but it can contain
+non-essential prime implicants.
+
+=cut
+
+sub simplify ($)
+{
+ my ($self) = @_;
+ return $self->invert->invert;
+}
+
+=item C<$self-E<gt>sub_conditions ($cond)>
+
+Return the subconditions of C<$self> that contains C<$cond>, with
+C<$cond> stripped. More formally, return C<$res> such that
+C<$res-E<gt>multiply ($cond) == $self-E<gt>multiply ($cond)> and
+C<$res> does not mention any of the variables in C<$cond>.
+
+For instance, consider:
+
+ my $a = new Automake::DisjConditions
+ (new Automake::Condition ("A_TRUE", "B_TRUE"),
+ new Automake::Condition ("A_TRUE", "C_FALSE"),
+ new Automake::Condition ("A_TRUE", "B_FALSE", "C_TRUE"),
+ new Automake::Condition ("A_FALSE"));
+ my $b = new Automake::DisjConditions
+ (new Automake::Condition ("A_TRUE", "B_FALSE"));
+
+Calling C<$a-E<gt>sub_conditions ($b)> will return the following
+C<DisjConditions>.
+
+ new Automake::DisjConditions
+ (new Automake::Condition ("C_FALSE"), # From A_TRUE C_FALSE
+ new Automake::Condition ("C_TRUE")); # From A_TRUE B_FALSE C_TRUE"
+
+=cut
+
+sub sub_conditions ($$)
+{
+ my ($self, $subcond) = @_;
+
+ # Make $subcond blindingly apparent in the DisjConditions.
+ # For instance '$b->multiply($a->conds)' (from the POD example) is:
+ # (new Automake::Condition ("FALSE"),
+ # new Automake::Condition ("A_TRUE", "B_FALSE", "C_FALSE"),
+ # new Automake::Condition ("A_TRUE", "B_FALSE", "C_TRUE"),
+ # new Automake::Condition ("FALSE"))
+ my @prodconds = $subcond->multiply ($self->conds);
+
+ # Now, strip $subcond from the remaining (i.e., non-false) Conditions.
+ my @res = map { $_->false ? () : $_->strip ($subcond) } @prodconds;
+
+ return new Automake::DisjConditions @res;
+}
+
+=item C<($string, $ambig_cond) = $condset-E<gt>ambiguous_p ($what, $cond)>
+
+Check for an ambiguous condition. Return an error message and the
+other condition involved if we have an ambiguity. Return an empty
+string and FALSE otherwise.
+
+C<$what> is the name of the thing being defined, to use in the error
+message. C<$cond> is the C<Condition> under which it is being
+defined. C<$condset> is the C<DisjConditions> under which it had
+already been defined.
+
+=cut
+
+sub ambiguous_p ($$$)
+{
+ my ($self, $var, $cond) = @_;
+
+ # Note that these rules don't consider the following
+ # example as ambiguous.
+ #
+ # if COND1
+ # FOO = foo
+ # endif
+ # if COND2
+ # FOO = bar
+ # endif
+ #
+ # It's up to the user to not define COND1 and COND2
+ # simultaneously.
+
+ return ("$var multiply defined in condition " . $cond->human, $cond)
+ if exists $self->{'hash'}{$cond};
+
+ foreach my $vcond ($self->conds)
+ {
+ return ("$var was already defined in condition " . $vcond->human
+ . ", which includes condition ". $cond->human, $vcond)
+ if $vcond->true_when ($cond);
+
+ return ("$var was already defined in condition " . $vcond->human
+ . ", which is included in condition " . $cond->human, $vcond)
+ if $cond->true_when ($vcond);
+ }
+ return ('', FALSE);
+}
+
+=head1 SEE ALSO
+
+L<Automake::Condition>.
+
+=head1 HISTORY
+
+C<AM_CONDITIONAL>s and supporting code were added to Automake 1.1o by
+Ian Lance Taylor <ian@cygnus.org> in 1997. Since then it has been
+improved by Tom Tromey <tromey@redhat.com>, Richard Boulton
+<richard@tartarus.org>, Raja R Harinath <harinath@cs.umn.edu>, Akim
+Demaille <akim@epita.fr>, Pavel Roskin <proski@gnu.org>, and
+Alexandre Duret-Lutz <adl@gnu.org>.
+
+=cut
+
+1;
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/lib/Automake/FileUtils.pm b/lib/Automake/FileUtils.pm
new file mode 100644
index 000000000..8a0ed5956
--- /dev/null
+++ b/lib/Automake/FileUtils.pm
@@ -0,0 +1,425 @@
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+###############################################################
+# The main copy of this file is in Automake's git repository. #
+# Updates should be sent to automake-patches@gnu.org. #
+###############################################################
+
+package Automake::FileUtils;
+
+=head1 NAME
+
+Automake::FileUtils - handling files
+
+=head1 SYNOPSIS
+
+ use Automake::FileUtils
+
+=head1 DESCRIPTION
+
+This perl module provides various general purpose file handling functions.
+
+=cut
+
+use 5.006;
+use strict;
+use Exporter;
+use File::stat;
+use IO::File;
+use Automake::Channels;
+use Automake::ChannelDefs;
+
+use vars qw (@ISA @EXPORT);
+
+@ISA = qw (Exporter);
+@EXPORT = qw (&contents
+ &find_file &mtime
+ &update_file &up_to_date_p
+ &xsystem &xsystem_hint &xqx
+ &dir_has_case_matching_file &reset_dir_cache
+ &set_dir_cache_file);
+
+=item C<find_file ($file_name, @include)>
+
+Return the first path for a C<$file_name> in the C<include>s.
+
+We match exactly the behavior of GNU M4: first look in the current
+directory (which includes the case of absolute file names), and then,
+if the file name is not absolute, look in C<@include>.
+
+If the file is flagged as optional (ends with C<?>), then return undef
+if absent, otherwise exit with error.
+
+=cut
+
+# $FILE_NAME
+# find_file ($FILE_NAME, @INCLUDE)
+# --------------------------------
+sub find_file ($@)
+{
+ use File::Spec;
+
+ my ($file_name, @include) = @_;
+ my $optional = 0;
+
+ $optional = 1
+ if $file_name =~ s/\?$//;
+
+ return File::Spec->canonpath ($file_name)
+ if -e $file_name;
+
+ if (!File::Spec->file_name_is_absolute ($file_name))
+ {
+ foreach my $path (@include)
+ {
+ return File::Spec->canonpath (File::Spec->catfile ($path, $file_name))
+ if -e File::Spec->catfile ($path, $file_name)
+ }
+ }
+
+ fatal "$file_name: no such file or directory"
+ unless $optional;
+ return undef;
+}
+
+=item C<mtime ($file)>
+
+Return the mtime of C<$file>. Missing files, or C<-> standing for
+C<STDIN> or C<STDOUT> are "obsolete", i.e., as old as possible.
+
+=cut
+
+# $MTIME
+# MTIME ($FILE)
+# -------------
+sub mtime ($)
+{
+ my ($file) = @_;
+
+ return 0
+ if $file eq '-' || ! -f $file;
+
+ my $stat = stat ($file)
+ or fatal "cannot stat $file: $!";
+
+ return $stat->mtime;
+}
+
+
+=item C<update_file ($from, $to, [$force])>
+
+Rename C<$from> as C<$to>, preserving C<$to> timestamp if it has not
+changed, unless C<$force> is true (defaults to false). Recognize
+C<$to> = C<-> standing for C<STDIN>. C<$from> is always
+removed/renamed.
+
+=cut
+
+# &update_file ($FROM, $TO; $FORCE)
+# ---------------------------------
+sub update_file ($$;$)
+{
+ my ($from, $to, $force) = @_;
+ $force = 0
+ unless defined $force;
+ my $SIMPLE_BACKUP_SUFFIX = $ENV{'SIMPLE_BACKUP_SUFFIX'} || '~';
+ use File::Compare;
+ use File::Copy;
+
+ if ($to eq '-')
+ {
+ my $in = new IO::File $from, "<";
+ my $out = new IO::File (">-");
+ while ($_ = $in->getline)
+ {
+ print $out $_;
+ }
+ $in->close;
+ unlink ($from) || fatal "cannot remove $from: $!";
+ return;
+ }
+
+ if (!$force && -f "$to" && compare ("$from", "$to") == 0)
+ {
+ # File didn't change, so don't update its mod time.
+ msg 'note', "'$to' is unchanged";
+ unlink ($from)
+ or fatal "cannot remove $from: $!";
+ return
+ }
+
+ if (-f "$to")
+ {
+ # Back up and install the new one.
+ move ("$to", "$to$SIMPLE_BACKUP_SUFFIX")
+ or fatal "cannot backup $to: $!";
+ move ("$from", "$to")
+ or fatal "cannot rename $from as $to: $!";
+ msg 'note', "'$to' is updated";
+ }
+ else
+ {
+ move ("$from", "$to")
+ or fatal "cannot rename $from as $to: $!";
+ msg 'note', "'$to' is created";
+ }
+}
+
+
+=item C<up_to_date_p ($file, @dep)>
+
+Is C<$file> more recent than C<@dep>?
+
+=cut
+
+# $BOOLEAN
+# &up_to_date_p ($FILE, @DEP)
+# ---------------------------
+sub up_to_date_p ($@)
+{
+ my ($file, @dep) = @_;
+ my $mtime = mtime ($file);
+
+ foreach my $dep (@dep)
+ {
+ if ($mtime < mtime ($dep))
+ {
+ verb "up_to_date ($file): outdated: $dep";
+ return 0;
+ }
+ }
+
+ verb "up_to_date ($file): up to date";
+ return 1;
+}
+
+
+=item C<handle_exec_errors ($command, [$expected_exit_code = 0], [$hint])>
+
+Display an error message for C<$command>, based on the content of
+C<$?> and C<$!>. Be quiet if the command exited normally
+with C<$expected_exit_code>. If C<$hint> is given, display that as well
+if the command failed to run at all.
+
+=cut
+
+sub handle_exec_errors ($;$$)
+{
+ my ($command, $expected, $hint) = @_;
+ $expected = 0 unless defined $expected;
+ if (defined $hint)
+ {
+ $hint = "\n" . $hint;
+ }
+ else
+ {
+ $hint = '';
+ }
+
+ $command = (split (' ', $command))[0];
+ if ($!)
+ {
+ fatal "failed to run $command: $!" . $hint;
+ }
+ else
+ {
+ use POSIX qw (WIFEXITED WEXITSTATUS WIFSIGNALED WTERMSIG);
+
+ if (WIFEXITED ($?))
+ {
+ my $status = WEXITSTATUS ($?);
+ # Propagate exit codes.
+ fatal ('',
+ "$command failed with exit status: $status",
+ exit_code => $status)
+ unless $status == $expected;
+ }
+ elsif (WIFSIGNALED ($?))
+ {
+ my $signal = WTERMSIG ($?);
+ fatal "$command terminated by signal: $signal";
+ }
+ else
+ {
+ fatal "$command exited abnormally";
+ }
+ }
+}
+
+=item C<xqx ($command)>
+
+Same as C<qx> (but in scalar context), but fails on errors.
+
+=cut
+
+# xqx ($COMMAND)
+# --------------
+sub xqx ($)
+{
+ my ($command) = @_;
+
+ verb "running: $command";
+
+ $! = 0;
+ my $res = `$command`;
+ handle_exec_errors $command
+ if $?;
+
+ return $res;
+}
+
+
+=item C<xsystem (@argv)>
+
+Same as C<system>, but fails on errors, and reports the C<@argv>
+in verbose mode.
+
+=cut
+
+sub xsystem (@)
+{
+ my (@command) = @_;
+
+ verb "running: @command";
+
+ $! = 0;
+ handle_exec_errors "@command"
+ if system @command;
+}
+
+
+=item C<xsystem_hint ($msg, @argv)>
+
+Same as C<xsystem>, but allows to pass a hint that will be displayed
+in case the command failed to run at all.
+
+=cut
+
+sub xsystem_hint (@)
+{
+ my ($hint, @command) = @_;
+
+ verb "running: @command";
+
+ $! = 0;
+ handle_exec_errors "@command", 0, $hint
+ if system @command;
+}
+
+
+=item C<contents ($file_name)>
+
+Return the contents of C<$file_name>.
+
+=cut
+
+# contents ($FILE_NAME)
+# ---------------------
+sub contents ($)
+{
+ my ($file) = @_;
+ verb "reading $file";
+ local $/; # Turn on slurp-mode.
+ my $f = new Automake::XFile $file, "<";
+ my $contents = $f->getline;
+ $f->close;
+ return $contents;
+}
+
+
+=item C<dir_has_case_matching_file ($DIRNAME, $FILE_NAME)>
+
+Return true iff $DIR contains a file name that matches $FILE_NAME case
+insensitively.
+
+We need to be cautious on case-insensitive case-preserving file
+systems (e.g. Mac OS X's HFS+). On such systems C<-f 'Foo'> and C<-f
+'foO'> answer the same thing. Hence if a package distributes its own
+F<CHANGELOG> file, but has no F<ChangeLog> file, automake would still
+try to distribute F<ChangeLog> (because it thinks it exists) in
+addition to F<CHANGELOG>, although it is impossible for these two
+files to be in the same directory (the two file names designate the
+same file).
+
+=cut
+
+use vars '%_directory_cache';
+sub dir_has_case_matching_file ($$)
+{
+ # Note that print File::Spec->case_tolerant returns 0 even on MacOS
+ # X (with Perl v5.8.1-RC3 at least), so do not try to shortcut this
+ # function using that.
+
+ my ($dirname, $file_name) = @_;
+ return 0 unless -f "$dirname/$file_name";
+
+ # The file appears to exist, however it might be a mirage if the
+ # system is case insensitive. Let's browse the directory and check
+ # whether the file is really in. We maintain a cache of directories
+ # so Automake doesn't spend all its time reading the same directory
+ # again and again.
+ if (!exists $_directory_cache{$dirname})
+ {
+ error "failed to open directory '$dirname'"
+ unless opendir (DIR, $dirname);
+ $_directory_cache{$dirname} = { map { $_ => 1 } readdir (DIR) };
+ closedir (DIR);
+ }
+ return exists $_directory_cache{$dirname}{$file_name};
+}
+
+=item C<reset_dir_cache ($dirname)>
+
+Clear C<dir_has_case_matching_file>'s cache for C<$dirname>.
+
+=cut
+
+sub reset_dir_cache ($)
+{
+ delete $_directory_cache{$_[0]};
+}
+
+=item C<set_dir_cache_file ($dirname, $file_name)>
+
+State that C<$dirname> contains C<$file_name> now.
+
+=cut
+
+sub set_dir_cache_file ($$)
+{
+ my ($dirname, $file_name) = @_;
+ $_directory_cache{$dirname}{$file_name} = 1
+ if exists $_directory_cache{$dirname};
+}
+
+1; # for require
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/lib/Automake/General.pm b/lib/Automake/General.pm
new file mode 100644
index 000000000..9e797bc39
--- /dev/null
+++ b/lib/Automake/General.pm
@@ -0,0 +1,87 @@
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+package Automake::General;
+
+use 5.006;
+use strict;
+use Exporter;
+use File::Basename;
+
+use vars qw (@ISA @EXPORT);
+
+@ISA = qw (Exporter);
+@EXPORT = qw (&uniq $me);
+
+# Variable we share with the main package. Be sure to have a single
+# copy of them: using 'my' together with multiple inclusion of this
+# package would introduce several copies.
+use vars qw ($me);
+$me = basename ($0);
+
+# END
+# ---
+# Exit nonzero whenever closing STDOUT fails.
+sub END
+{
+ # This is required if the code might send any output to stdout
+ # E.g., even --version or --help. So it's best to do it unconditionally.
+ if (! close STDOUT)
+ {
+ print STDERR "$me: closing standard output: $!\n";
+ $? = 74; # EX_IOERR
+ return;
+ }
+}
+
+
+# @RES
+# uniq (@LIST)
+# ------------
+# Return LIST with no duplicates.
+sub uniq (@)
+{
+ my @res = ();
+ my %seen = ();
+ foreach my $item (@_)
+ {
+ if (! exists $seen{$item})
+ {
+ $seen{$item} = 1;
+ push (@res, $item);
+ }
+ }
+ return wantarray ? @res : "@res";
+}
+
+
+1; # for require
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/lib/Automake/Getopt.pm b/lib/Automake/Getopt.pm
new file mode 100644
index 000000000..af6da77ad
--- /dev/null
+++ b/lib/Automake/Getopt.pm
@@ -0,0 +1,115 @@
+# Copyright (C) 2012-2017 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 3 of the License, 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 <https://www.gnu.org/licenses/>.
+
+package Automake::Getopt;
+
+=head1 NAME
+
+Automake::Getopt - GCS conforming parser for command line options
+
+=head1 SYNOPSIS
+
+ use Automake::Getopt;
+
+=head1 DESCRIPTION
+
+Export a function C<parse_options>, performing parsing of command
+line options in conformance to the GNU Coding standards.
+
+=cut
+
+use 5.006;
+use strict;
+use warnings FATAL => 'all';
+use Exporter ();
+use Getopt::Long ();
+use Automake::ChannelDefs qw/fatal/;
+use Carp qw/croak confess/;
+
+use vars qw (@ISA @EXPORT);
+@ISA = qw (Exporter);
+@EXPORT= qw/getopt/;
+
+=item C<parse_options (%option)>
+
+Wrapper around C<Getopt::Long>, trying to conform to the GNU
+Coding Standards for error messages.
+
+=cut
+
+sub parse_options (%)
+{
+ my %option = @_;
+
+ Getopt::Long::Configure ("bundling", "pass_through");
+ # Unrecognized options are passed through, so GetOption can only fail
+ # due to internal errors or misuse of options specification.
+ Getopt::Long::GetOptions (%option)
+ or confess "error in options specification (likely)";
+
+ if (@ARGV && $ARGV[0] =~ /^-./)
+ {
+ my %argopts;
+ for my $k (keys %option)
+ {
+ if ($k =~ /(.*)=s$/)
+ {
+ map { $argopts{(length ($_) == 1)
+ ? "-$_" : "--$_" } = 1; } (split (/\|/, $1));
+ }
+ }
+ if ($ARGV[0] eq '--')
+ {
+ shift @ARGV;
+ }
+ elsif (exists $argopts{$ARGV[0]})
+ {
+ fatal ("option '$ARGV[0]' requires an argument\n"
+ . "Try '$0 --help' for more information.");
+ }
+ else
+ {
+ fatal ("unrecognized option '$ARGV[0]'.\n"
+ . "Try '$0 --help' for more information.");
+ }
+ }
+}
+
+=back
+
+=head1 SEE ALSO
+
+L<Getopt::Long>
+
+=cut
+
+1; # for require
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/lib/Automake/Item.pm b/lib/Automake/Item.pm
new file mode 100644
index 000000000..9e561eeb7
--- /dev/null
+++ b/lib/Automake/Item.pm
@@ -0,0 +1,206 @@
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+package Automake::Item;
+
+use 5.006;
+use strict;
+use Carp;
+use Automake::ChannelDefs;
+use Automake::DisjConditions;
+
+=head1 NAME
+
+Automake::Item - base class for Automake::Variable and Automake::Rule
+
+=head1 DESCRIPTION
+
+=head2 Methods
+
+=over 4
+
+=item C<new Automake::Item $name>
+
+Create and return an empty Item called C<$name>.
+
+=cut
+
+sub new ($$)
+{
+ my ($class, $name) = @_;
+ my $self = {
+ name => $name,
+ defs => {},
+ conds => {},
+ };
+ bless $self, $class;
+ return $self;
+}
+
+=item C<$item-E<gt>name>
+
+Return the name of C<$item>.
+
+=cut
+
+sub name ($)
+{
+ my ($self) = @_;
+ return $self->{'name'};
+}
+
+=item C<$item-E<gt>def ($cond)>
+
+Return the definition for this item in condition C<$cond>, if it
+exists. Return 0 otherwise.
+
+=cut
+
+sub def ($$)
+{
+ # This method is called very often, so keep it small and fast. We
+ # don't mind the extra undefined items introduced by lookup failure;
+ # avoiding this with 'exists' means doing two hash lookup on
+ # success, and proved worse on benchmark.
+ my $def = $_[0]->{'defs'}{$_[1]};
+ return defined $def && $def;
+}
+
+=item C<$item-E<gt>rdef ($cond)>
+
+Return the definition for this item in condition C<$cond>. Abort with
+an internal error if the item was not defined under this condition.
+
+The I<r> in front of C<def> stands for I<required>. One
+should call C<rdef> to assert the conditional definition's existence.
+
+=cut
+
+sub rdef ($$)
+{
+ my ($self, $cond) = @_;
+ my $d = $self->def ($cond);
+ prog_error ("undefined condition '" . $cond->human . "' for '"
+ . $self->name . "'\n" . $self->dump)
+ unless $d;
+ return $d;
+}
+
+=item C<$item-E<gt>set ($cond, $def)>
+
+Add a new definition to an existing item.
+
+=cut
+
+sub set ($$$)
+{
+ my ($self, $cond, $def) = @_;
+ $self->{'defs'}{$cond} = $def;
+ $self->{'conds'}{$cond} = $cond;
+}
+
+=item C<$var-E<gt>conditions>
+
+Return an L<Automake::DisjConditions> describing the conditions that
+that an item is defined in.
+
+These are all the conditions for which is would be safe to call
+C<rdef>.
+
+=cut
+
+sub conditions ($)
+{
+ my ($self) = @_;
+ prog_error ("self is not a reference")
+ unless ref $self;
+ return new Automake::DisjConditions (values %{$self->{'conds'}});
+}
+
+=item C<@missing_conds = $var-E<gt>not_always_defined_in_cond ($cond)>
+
+Check whether C<$var> is always defined for condition C<$cond>.
+Return a list of conditions where the definition is missing.
+
+For instance, given
+
+ if COND1
+ if COND2
+ A = foo
+ D = d1
+ else
+ A = bar
+ D = d2
+ endif
+ else
+ D = d3
+ endif
+ if COND3
+ A = baz
+ B = mumble
+ endif
+ C = mumble
+
+we should have (we display result as conditional strings in this
+illustration, but we really return DisjConditions objects):
+
+ var ('A')->not_always_defined_in_cond ('COND1_TRUE COND2_TRUE')
+ => ()
+ var ('A')->not_always_defined_in_cond ('COND1_TRUE')
+ => ()
+ var ('A')->not_always_defined_in_cond ('TRUE')
+ => ("COND1_FALSE COND3_FALSE")
+ var ('B')->not_always_defined_in_cond ('COND1_TRUE')
+ => ("COND1_TRUE COND3_FALSE")
+ var ('C')->not_always_defined_in_cond ('COND1_TRUE')
+ => ()
+ var ('D')->not_always_defined_in_cond ('TRUE')
+ => ()
+ var ('Z')->not_always_defined_in_cond ('TRUE')
+ => ("TRUE")
+
+=cut
+
+sub not_always_defined_in_cond ($$)
+{
+ my ($self, $cond) = @_;
+
+ # Compute the subconditions where $var isn't defined.
+ return
+ $self->conditions
+ ->sub_conditions ($cond)
+ ->invert
+ ->multiply ($cond);
+}
+
+
+1;
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/lib/Automake/ItemDef.pm b/lib/Automake/ItemDef.pm
new file mode 100644
index 000000000..a01b3c1fc
--- /dev/null
+++ b/lib/Automake/ItemDef.pm
@@ -0,0 +1,113 @@
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+package Automake::ItemDef;
+
+use 5.006;
+use strict;
+use Carp;
+
+=head1 NAME
+
+Automake::ItemDef - base class for Automake::VarDef and Automake::RuleDef
+
+=head1 DESCRIPTION
+
+=head2 Methods
+
+=over 4
+
+=item C<my $def = Automake::new ($comment, $location, $owner)>
+
+Create a new Makefile-item definition.
+
+C<$comment> is any comment preceding the definition. (Because
+Automake reorders items in the output, it also tries to carry comments
+around.)
+
+C<$location> is the place where the definition occurred, it should be
+an instance of L<Automake::Location>.
+
+C<$owner> specifies who owns the rule.
+
+=cut
+
+sub new ($$$$)
+{
+ my ($class, $comment, $location, $owner) = @_;
+
+ my $self = {
+ comment => $comment,
+ location => $location,
+ owner => $owner,
+ };
+ bless $self, $class;
+
+ return $self;
+}
+
+=item C<$def-E<gt>comment>
+
+=item C<$def-E<gt>location>
+
+=item C<$def-E<gt>owner>
+
+Accessors to the various constituents of an C<ItemDef>. See the
+documentation of C<new>'s arguments for a description of these.
+
+=cut
+
+sub comment ($)
+{
+ my ($self) = @_;
+ return $self->{'comment'};
+}
+
+sub location ($)
+{
+ my ($self) = @_;
+ return $self->{'location'};
+}
+
+sub owner ($)
+{
+ my ($self) = @_;
+ return $self->{'owner'};
+}
+
+=head1 SEE ALSO
+
+L<Automake::VarDef>, and L<Automake::RuleDef>.
+
+=cut
+
+1;
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/lib/Automake/Language.pm b/lib/Automake/Language.pm
new file mode 100644
index 000000000..0f90112df
--- /dev/null
+++ b/lib/Automake/Language.pm
@@ -0,0 +1,122 @@
+# Copyright (C) 2013-2017 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 <https://www.gnu.org/licenses/>.
+
+package Automake::Language;
+
+use 5.006;
+use strict;
+
+use Class::Struct ();
+Class::Struct::struct (
+ # Short name of the language (c, f77...).
+ 'name' => "\$",
+ # Nice name of the language (C, Fortran 77...).
+ 'Name' => "\$",
+
+ # List of configure variables which must be defined.
+ 'config_vars' => '@',
+
+ # 'pure' is '1' or ''. A 'pure' language is one where, if
+ # all the files in a directory are of that language, then we
+ # do not require the C compiler or any code to call it.
+ 'pure' => "\$",
+
+ 'autodep' => "\$",
+
+ # Name of the compiling variable (COMPILE).
+ 'compiler' => "\$",
+ # Content of the compiling variable.
+ 'compile' => "\$",
+ # Flag to require compilation without linking (-c).
+ 'compile_flag' => "\$",
+ 'extensions' => '@',
+ # A subroutine to compute a list of possible extensions of
+ # the product given the input extensions.
+ # (defaults to a subroutine which returns ('.$(OBJEXT)', '.lo'))
+ 'output_extensions' => "\$",
+ # A list of flag variables used in 'compile'.
+ # (defaults to [])
+ 'flags' => "@",
+
+ # Any tag to pass to libtool while compiling.
+ 'libtool_tag' => "\$",
+
+ # The file to use when generating rules for this language.
+ # The default is 'depend2'.
+ 'rule_file' => "\$",
+
+ # Name of the linking variable (LINK).
+ 'linker' => "\$",
+ # Content of the linking variable.
+ 'link' => "\$",
+
+ # Name of the compiler variable (CC).
+ 'ccer' => "\$",
+
+ # Name of the linker variable (LD).
+ 'lder' => "\$",
+ # Content of the linker variable ($(CC)).
+ 'ld' => "\$",
+
+ # Flag to specify the output file (-o).
+ 'output_flag' => "\$",
+ '_finish' => "\$",
+
+ # This is a subroutine which is called whenever we finally
+ # determine the context in which a source file will be
+ # compiled.
+ '_target_hook' => "\$",
+
+ # If TRUE, nodist_ sources will be compiled using specific rules
+ # (i.e. not inference rules). The default is FALSE.
+ 'nodist_specific' => "\$");
+
+
+sub finish ($)
+{
+ my ($self) = @_;
+ if (defined $self->_finish)
+ {
+ &{$self->_finish} (@_);
+ }
+}
+
+sub target_hook ($$$$%)
+{
+ my ($self) = @_;
+ if (defined $self->_target_hook)
+ {
+ $self->_target_hook->(@_);
+ }
+}
+
+1;
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/lib/Automake/Location.pm b/lib/Automake/Location.pm
new file mode 100644
index 000000000..5b5a597b8
--- /dev/null
+++ b/lib/Automake/Location.pm
@@ -0,0 +1,279 @@
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+package Automake::Location;
+
+use 5.006;
+
+=head1 NAME
+
+Automake::Location - a class for location tracking, with a stack of contexts
+
+=head1 SYNOPSIS
+
+ use Automake::Location;
+
+ # Create a new Location object
+ my $where = new Automake::Location "foo.c:13";
+
+ # Change the location
+ $where->set ("foo.c:14");
+
+ # Get the location (without context).
+ # Here this should print "foo.c:14"
+ print $where->get, "\n";
+
+ # Push a context, and change the location
+ $where->push_context ("included from here");
+ $where->set ("bar.h:1");
+
+ # Print the location and the stack of context (for debugging)
+ print $where->dump;
+ # This should display
+ # bar.h:1:
+ # foo.c:14: included from here
+
+ # Get the contexts (list of [$location_string, $description])
+ for my $pair (reverse $where->contexts)
+ {
+ my ($loc, $descr) = @{$pair};
+ ...
+ }
+
+ # Pop a context, and reset the location to the previous context.
+ $where->pop_context;
+
+ # Clone a Location. Use this when storing the state of a location
+ # that would otherwise be modified.
+ my $where_copy = $where->clone;
+
+ # Serialize a Location object (for passing through a thread queue,
+ # for example)
+ my @array = $where->serialize ();
+
+ # De-serialize: recreate a Location object from a queue.
+ my $where = new Automake::Location::deserialize ($queue);
+
+=head1 DESCRIPTION
+
+C<Location> objects are used to keep track of locations in Automake,
+and used to produce diagnostics.
+
+A C<Location> object is made of two parts: a location string, and
+a stack of contexts.
+
+For instance if C<VAR> is defined at line 1 in F<bar.h> which was
+included at line 14 in F<foo.c>, then the location string should be
+C<"bar.h:10"> and the context should be the pair (C<"foo.c:14">,
+C<"included from here">).
+
+Section I<SYNOPSIS> shows how to setup such a C<Location>, and access
+the location string or the stack of contexts.
+
+You can pass a C<Location> to C<Automake::Channels::msg>.
+
+=cut
+
+=head2 Methods
+
+=over
+
+=item C<$where = new Automake::Location ([$position])>
+
+Create and return a new Location object.
+
+=cut
+
+sub new ($;$)
+{
+ my ($class, $position) = @_;
+ my $self = {
+ position => $position,
+ contexts => [],
+ };
+ bless $self, $class;
+ return $self;
+}
+
+=item C<$location-E<gt>set ($position)>
+
+Change the location to be C<$position>.
+
+=cut
+
+sub set ($$)
+{
+ my ($self, $position) = @_;
+ $self->{'position'} = $position;
+}
+
+=item C<$location-E<gt>get>
+
+Get the location (without context).
+
+=cut
+
+sub get ($)
+{
+ my ($self) = @_;
+ return $self->{'position'};
+}
+
+=item C<$location-E<gt>push_context ($context)>
+
+Push a context to the location.
+
+=cut
+
+sub push_context ($$)
+{
+ my ($self, $context) = @_;
+ push @{$self->{'contexts'}}, [$self->get, $context];
+ $self->set (undef);
+}
+
+=item C<$where = $location-E<gt>pop_context ($context)>
+
+Pop a context, and reset the location to the previous context.
+
+=cut
+
+sub pop_context ($)
+{
+ my ($self) = @_;
+ my $pair = pop @{$self->{'contexts'}};
+ $self->set ($pair->[0]);
+ return @{$pair};
+}
+
+=item C<@contexts = $location-E<gt>get_contexts>
+
+Return the array of contexts.
+
+=cut
+
+sub get_contexts ($)
+{
+ my ($self) = @_;
+ return @{$self->{'contexts'}};
+}
+
+=item C<$location = $location-E<gt>clone>
+
+Clone a Location. Use this when storing the state of a location
+that would otherwise be modified.
+
+=cut
+
+sub clone ($)
+{
+ my ($self) = @_;
+ my $other = new Automake::Location ($self->get);
+ my @contexts = $self->get_contexts;
+ for my $pair (@contexts)
+ {
+ push @{$other->{'contexts'}}, [@{$pair}];
+ }
+ return $other;
+}
+
+=item C<$res = $location-E<gt>dump>
+
+Print the location and the stack of context (for debugging).
+
+=cut
+
+sub dump ($)
+{
+ my ($self) = @_;
+ my $res = ($self->get || 'INTERNAL') . ":\n";
+ for my $pair (reverse $self->get_contexts)
+ {
+ $res .= $pair->[0] || 'INTERNAL';
+ $res .= ": $pair->[1]\n";
+ }
+ return $res;
+}
+
+=item C<@array = $location-E<gt>serialize>
+
+Serialize a Location object (for passing through a thread queue,
+for example).
+
+=cut
+
+sub serialize ($)
+{
+ my ($self) = @_;
+ my @serial = ();
+ push @serial, $self->get;
+ my @contexts = $self->get_contexts;
+ for my $pair (@contexts)
+ {
+ push @serial, @{$pair};
+ }
+ push @serial, undef;
+ return @serial;
+}
+
+=item C<new Automake::Location::deserialize ($queue)>
+
+De-serialize: recreate a Location object from a queue.
+
+=cut
+
+sub deserialize ($)
+{
+ my ($queue) = @_;
+ my $position = $queue->dequeue ();
+ my $self = new Automake::Location $position;
+ while (my $position = $queue->dequeue ())
+ {
+ my $context = $queue->dequeue ();
+ push @{$self->{'contexts'}}, [$position, $context];
+ }
+ return $self;
+}
+
+=back
+
+=head1 SEE ALSO
+
+L<Automake::Channels>
+
+=head1 HISTORY
+
+Written by Alexandre Duret-Lutz E<lt>F<adl@gnu.org>E<gt>.
+
+=cut
+
+1;
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/lib/Automake/Options.pm b/lib/Automake/Options.pm
new file mode 100644
index 000000000..a6bc795fa
--- /dev/null
+++ b/lib/Automake/Options.pm
@@ -0,0 +1,476 @@
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+package Automake::Options;
+
+use 5.006;
+use strict;
+use Exporter;
+use Automake::Config;
+use Automake::ChannelDefs;
+use Automake::Channels;
+use Automake::Version;
+
+use vars qw (@ISA @EXPORT);
+
+@ISA = qw (Exporter);
+@EXPORT = qw (option global_option
+ set_option set_global_option
+ unset_option unset_global_option
+ process_option_list process_global_option_list
+ set_strictness $strictness $strictness_name
+ &FOREIGN &GNU &GNITS);
+
+=head1 NAME
+
+Automake::Options - keep track of Automake options
+
+=head1 SYNOPSIS
+
+ use Automake::Options;
+
+ # Option lookup and setting.
+ $opt = option 'name';
+ $opt = global_option 'name';
+ set_option 'name', 'value';
+ set_global_option 'name', 'value';
+ unset_option 'name';
+ unset_global_option 'name';
+
+ # Batch option setting.
+ process_option_list $location, @names;
+ process_global_option_list $location, @names;
+
+ # Strictness lookup and setting.
+ set_strictness 'foreign';
+ set_strictness 'gnu';
+ set_strictness 'gnits';
+ if ($strictness >= GNU) { ... }
+ print "$strictness_name\n";
+
+=head1 DESCRIPTION
+
+This packages manages Automake's options and strictness settings.
+Options can be either local or global. Local options are set using an
+C<AUTOMAKE_OPTIONS> variable in a F<Makefile.am> and apply only to
+this F<Makefile.am>. Global options are set from the command line or
+passed as an argument to C<AM_INIT_AUTOMAKE>, they apply to all
+F<Makefile.am>s.
+
+=cut
+
+# Values are the Automake::Location of the definition.
+use vars '%_options'; # From AUTOMAKE_OPTIONS
+use vars '%_global_options'; # From AM_INIT_AUTOMAKE or the command line.
+
+# Whether process_option_list has already been called for the current
+# Makefile.am.
+use vars '$_options_processed';
+# Whether process_global_option_list has already been called.
+use vars '$_global_options_processed';
+
+=head2 Constants
+
+=over 4
+
+=item FOREIGN
+
+=item GNU
+
+=item GNITS
+
+Strictness constants used as values for C<$strictness>.
+
+=back
+
+=cut
+
+# Constants to define the "strictness" level.
+use constant FOREIGN => 0;
+use constant GNU => 1;
+use constant GNITS => 2;
+
+=head2 Variables
+
+=over 4
+
+=item C<$strictness>
+
+The current strictness. One of C<FOREIGN>, C<GNU>, or C<GNITS>.
+
+=item C<$strictness_name>
+
+The current strictness name. One of C<'foreign'>, C<'gnu'>, or C<'gnits'>.
+
+=back
+
+=cut
+
+# Strictness levels.
+use vars qw ($strictness $strictness_name);
+
+# Strictness level as set on command line.
+use vars qw ($_default_strictness $_default_strictness_name);
+
+
+=head2 Functions
+
+=over 4
+
+=item C<Automake::Options::reset>
+
+Reset the options variables for the next F<Makefile.am>.
+
+In other words, this gets rid of all local options in use by the
+previous F<Makefile.am>.
+
+=cut
+
+sub reset ()
+{
+ $_options_processed = 0;
+ %_options = %_global_options;
+ # The first time we are run,
+ # remember the current setting as the default.
+ if (defined $_default_strictness)
+ {
+ $strictness = $_default_strictness;
+ $strictness_name = $_default_strictness_name;
+ }
+ else
+ {
+ $_default_strictness = $strictness;
+ $_default_strictness_name = $strictness_name;
+ }
+}
+
+=item C<$value = option ($name)>
+
+=item C<$value = global_option ($name)>
+
+Query the state of an option. If the option is unset, this
+returns the empty list. Otherwise it returns the option's value,
+as set by C<set_option> or C<set_global_option>.
+
+Note that C<global_option> should be used only when it is
+important to make sure an option hasn't been set locally.
+Otherwise C<option> should be the standard function to
+check for options (be they global or local).
+
+=cut
+
+sub option ($)
+{
+ my ($name) = @_;
+ return () unless defined $_options{$name};
+ return $_options{$name};
+}
+
+sub global_option ($)
+{
+ my ($name) = @_;
+ return () unless defined $_global_options{$name};
+ return $_global_options{$name};
+}
+
+=item C<set_option ($name, $value)>
+
+=item C<set_global_option ($name, $value)>
+
+Set an option. By convention, C<$value> is usually the location
+of the option definition.
+
+=cut
+
+sub set_option ($$)
+{
+ my ($name, $value) = @_;
+ $_options{$name} = $value;
+}
+
+sub set_global_option ($$)
+{
+ my ($name, $value) = @_;
+ $_global_options{$name} = $value;
+}
+
+
+=item C<unset_option ($name)>
+
+=item C<unset_global_option ($name)>
+
+Unset an option.
+
+=cut
+
+sub unset_option ($)
+{
+ my ($name) = @_;
+ delete $_options{$name};
+}
+
+sub unset_global_option ($)
+{
+ my ($name) = @_;
+ delete $_global_options{$name};
+}
+
+
+=item C<process_option_list (@list)>
+
+=item C<process_global_option_list (@list)>
+
+Process Automake's option lists. C<@list> should be a list of hash
+references with keys C<option> and C<where>, where C<option> is an
+option as they occur in C<AUTOMAKE_OPTIONS> or C<AM_INIT_AUTOMAKE>,
+and C<where> is the location where that option occurred.
+
+These functions should be called at most once for each set of options
+having the same precedence; i.e., do not call it twice for two options
+from C<AM_INIT_AUTOMAKE>.
+
+Return 0 on error, 1 otherwise.
+
+=cut
+
+# $BOOL
+# _option_is_from_configure ($OPTION, $WHERE)
+# ----------------------------------------------
+# Check that the $OPTION given in location $WHERE is specified with
+# AM_INIT_AUTOMAKE, not with AUTOMAKE_OPTIONS.
+sub _option_is_from_configure ($$)
+{
+ my ($opt, $where)= @_;
+ return 1
+ if $where->get =~ /^configure\./;
+ error $where,
+ "option '$opt' can only be used as argument to AM_INIT_AUTOMAKE\n" .
+ "but not in AUTOMAKE_OPTIONS makefile statements";
+ return 0;
+}
+
+# $BOOL
+# _is_valid_easy_option ($OPTION)
+# -------------------------------
+# Explicitly recognize valid automake options that require no
+# special handling by '_process_option_list' below.
+sub _is_valid_easy_option ($)
+{
+ my $opt = shift;
+ return scalar grep { $opt eq $_ } qw(
+ check-news
+ color-tests
+ dejagnu
+ dist-bzip2
+ dist-lzip
+ dist-xz
+ dist-zip
+ info-in-builddir
+ no-define
+ no-dependencies
+ no-dist
+ no-dist-gzip
+ no-exeext
+ no-installinfo
+ no-installman
+ no-texinfo.tex
+ nostdinc
+ readme-alpha
+ serial-tests
+ parallel-tests
+ silent-rules
+ std-options
+ subdir-objects
+ );
+}
+
+# $BOOL
+# _process_option_list (\%OPTIONS, @LIST)
+# ------------------------------------------
+# Process a list of options. \%OPTIONS is the hash to fill with options
+# data. @LIST is a list of options as get passed to public subroutines
+# process_option_list() and process_global_option_list() (see POD
+# documentation above).
+sub _process_option_list (\%@)
+{
+ my ($options, @list) = @_;
+ my @warnings = ();
+ my $ret = 1;
+
+ foreach my $h (@list)
+ {
+ local $_ = $h->{'option'};
+ my $where = $h->{'where'};
+ $options->{$_} = $where;
+ if ($_ eq 'gnits' || $_ eq 'gnu' || $_ eq 'foreign')
+ {
+ set_strictness ($_);
+ }
+ # TODO: Remove this special check in Automake 3.0.
+ elsif (/^(.*\/)?ansi2knr$/)
+ {
+ # Obsolete (and now removed) de-ANSI-fication support.
+ error ($where,
+ "automatic de-ANSI-fication support has been removed");
+ $ret = 0;
+ }
+ # TODO: Remove this special check in Automake 3.0.
+ elsif ($_ eq 'cygnus')
+ {
+ error $where, "support for Cygnus-style trees has been removed";
+ $ret = 0;
+ }
+ # TODO: Remove this special check in Automake 3.0.
+ elsif ($_ eq 'dist-lzma')
+ {
+ error ($where, "support for lzma-compressed distribution " .
+ "archives has been removed");
+ $ret = 0;
+ }
+ # TODO: Make this a fatal error in Automake 2.0.
+ elsif ($_ eq 'dist-shar')
+ {
+ msg ('obsolete', $where,
+ "support for shar distribution archives is deprecated.\n" .
+ " It will be removed in Automake 2.0");
+ }
+ # TODO: Make this a fatal error in Automake 2.0.
+ elsif ($_ eq 'dist-tarZ')
+ {
+ msg ('obsolete', $where,
+ "support for distribution archives compressed with " .
+ "legacy program 'compress' is deprecated.\n" .
+ " It will be removed in Automake 2.0");
+ }
+ elsif (/^filename-length-max=(\d+)$/)
+ {
+ delete $options->{$_};
+ $options->{'filename-length-max'} = [$_, $1];
+ }
+ elsif ($_ eq 'tar-v7' || $_ eq 'tar-ustar' || $_ eq 'tar-pax')
+ {
+ if (not _option_is_from_configure ($_, $where))
+ {
+ $ret = 0;
+ }
+ for my $opt ('tar-v7', 'tar-ustar', 'tar-pax')
+ {
+ next
+ if $opt eq $_ or ! exists $options->{$opt};
+ error ($where,
+ "options '$_' and '$opt' are mutually exclusive");
+ $ret = 0;
+ }
+ }
+ elsif (/^\d+\.\d+(?:\.\d+)?[a-z]?(?:-[A-Za-z0-9]+)?$/)
+ {
+ # Got a version number.
+ if (Automake::Version::check ($VERSION, $&))
+ {
+ error ($where, "require Automake $_, but have $VERSION");
+ $ret = 0;
+ }
+ }
+ elsif (/^(?:--warnings=|-W)(.*)$/)
+ {
+ my @w = map { { cat => $_, loc => $where} } split (',', $1);
+ push @warnings, @w;
+ }
+ elsif (! _is_valid_easy_option $_)
+ {
+ error ($where, "option '$_' not recognized");
+ $ret = 0;
+ }
+ }
+
+ # We process warnings here, so that any explicitly-given warning setting
+ # will take precedence over warning settings defined implicitly by the
+ # strictness.
+ foreach my $w (@warnings)
+ {
+ msg 'unsupported', $w->{'loc'},
+ "unknown warning category '$w->{'cat'}'"
+ if switch_warning $w->{cat};
+ }
+
+ return $ret;
+}
+
+sub process_option_list (@)
+{
+ prog_error "local options already processed"
+ if $_options_processed;
+ $_options_processed = 1;
+ _process_option_list (%_options, @_);
+}
+
+sub process_global_option_list (@)
+{
+ prog_error "global options already processed"
+ if $_global_options_processed;
+ $_global_options_processed = 1;
+ _process_option_list (%_global_options, @_);
+}
+
+=item C<set_strictness ($name)>
+
+Set the current strictness level.
+C<$name> should be one of C<'foreign'>, C<'gnu'>, or C<'gnits'>.
+
+=cut
+
+# Set strictness.
+sub set_strictness ($)
+{
+ $strictness_name = $_[0];
+
+ Automake::ChannelDefs::set_strictness ($strictness_name);
+
+ if ($strictness_name eq 'gnu')
+ {
+ $strictness = GNU;
+ }
+ elsif ($strictness_name eq 'gnits')
+ {
+ $strictness = GNITS;
+ }
+ elsif ($strictness_name eq 'foreign')
+ {
+ $strictness = FOREIGN;
+ }
+ else
+ {
+ prog_error "level '$strictness_name' not recognized";
+ }
+}
+
+1;
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/lib/Automake/Rule.pm b/lib/Automake/Rule.pm
new file mode 100644
index 000000000..37f6a2e65
--- /dev/null
+++ b/lib/Automake/Rule.pm
@@ -0,0 +1,879 @@
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+package Automake::Rule;
+
+use 5.006;
+use strict;
+use Carp;
+
+use Automake::Item;
+use Automake::RuleDef;
+use Automake::ChannelDefs;
+use Automake::Channels;
+use Automake::Options;
+use Automake::Condition qw (TRUE FALSE);
+use Automake::DisjConditions;
+require Exporter;
+use vars '@ISA', '@EXPORT', '@EXPORT_OK';
+@ISA = qw/Automake::Item Exporter/;
+@EXPORT = qw (reset register_suffix_rule next_in_suffix_chain
+ suffixes rules $KNOWN_EXTENSIONS_PATTERN
+ depend %dependencies %actions register_action
+ accept_extensions
+ reject_rule msg_rule msg_cond_rule err_rule err_cond_rule
+ rule rrule ruledef rruledef);
+
+=head1 NAME
+
+Automake::Rule - support for rules definitions
+
+=head1 SYNOPSIS
+
+ use Automake::Rule;
+ use Automake::RuleDef;
+
+
+=head1 DESCRIPTION
+
+This package provides support for Makefile rule definitions.
+
+An C<Automake::Rule> is a rule name associated to possibly
+many conditional definitions. These definitions are instances
+of C<Automake::RuleDef>.
+
+Therefore obtaining the value of a rule under a given
+condition involves two lookups. One to look up the rule,
+and one to look up the conditional definition:
+
+ my $rule = rule $name;
+ if ($rule)
+ {
+ my $def = $rule->def ($cond);
+ if ($def)
+ {
+ return $def->location;
+ }
+ ...
+ }
+ ...
+
+when it is known that the rule and the definition
+being looked up exist, the above can be simplified to
+
+ return rule ($name)->def ($cond)->location; # do not write this.
+
+but is better written
+
+ return rrule ($name)->rdef ($cond)->location;
+
+or even
+
+ return rruledef ($name, $cond)->location;
+
+The I<r> variants of the C<rule>, C<def>, and C<ruledef> methods add
+an extra test to ensure that the lookup succeeded, and will diagnose
+failures as internal errors (with a message which is much more
+informative than Perl's warning about calling a method on a
+non-object).
+
+=head2 Global variables
+
+=over 4
+
+=cut
+
+my $_SUFFIX_RULE_PATTERN =
+ '^(\.[a-zA-Z0-9_(){}$+@\-]+)(\.[a-zA-Z0-9_(){}$+@\-]+)' . "\$";
+
+my @_suffixes = ();
+my @_known_extensions_list = ();
+my %_rule_dict = ();
+
+# See comments in the implementation of the 'next_in_suffix_chain()'
+# variable for details.
+my %_suffix_rules;
+
+# Same as $suffix_rules, but records only the default rules
+# supplied by the languages Automake supports.
+my %_suffix_rules_builtin;
+
+=item C<%dependencies>
+
+Holds the dependencies of targets which dependencies are factored.
+Typically, C<.PHONY> will appear in plenty of F<*.am> files, but must
+be output once. Arguably all pure dependencies could be subject to
+this factoring, but it is not unpleasant to have paragraphs in
+Makefile: keeping related stuff altogether.
+
+=cut
+
+use vars '%dependencies';
+
+=item <%actions>
+
+Holds the factored actions. Tied to C<%dependencies>, i.e., filled
+only when keys exists in C<%dependencies>.
+
+=cut
+
+use vars '%actions';
+
+=item C<$KNOWN_EXTENSIONS_PATTERN>
+
+Pattern that matches all know input extensions (i.e. extensions used
+by the languages supported by Automake). Using this pattern (instead
+of '\..*$') to match extensions allows Automake to support dot-less
+extensions.
+
+New extensions should be registered with C<accept_extensions>.
+
+=cut
+
+use vars qw ($KNOWN_EXTENSIONS_PATTERN);
+$KNOWN_EXTENSIONS_PATTERN = "";
+
+=back
+
+=head2 Error reporting functions
+
+In these functions, C<$rule> can be either a rule name, or
+an instance of C<Automake::Rule>.
+
+=over 4
+
+=item C<err_rule ($rule, $message, [%options])>
+
+Uncategorized errors about rules.
+
+=cut
+
+sub err_rule ($$;%)
+{
+ msg_rule ('error', @_);
+}
+
+=item C<err_cond_rule ($cond, $rule, $message, [%options])>
+
+Uncategorized errors about conditional rules.
+
+=cut
+
+sub err_cond_rule ($$$;%)
+{
+ msg_cond_rule ('error', @_);
+}
+
+=item C<msg_cond_rule ($channel, $cond, $rule, $message, [%options])>
+
+Messages about conditional rules.
+
+=cut
+
+sub msg_cond_rule ($$$$;%)
+{
+ my ($channel, $cond, $rule, $msg, %opts) = @_;
+ my $r = ref ($rule) ? $rule : rrule ($rule);
+ msg $channel, $r->rdef ($cond)->location, $msg, %opts;
+}
+
+=item C<msg_rule ($channel, $targetname, $message, [%options])>
+
+Messages about rules.
+
+=cut
+
+sub msg_rule ($$$;%)
+{
+ my ($channel, $rule, $msg, %opts) = @_;
+ my $r = ref ($rule) ? $rule : rrule ($rule);
+ # Don't know which condition is concerned. Pick any.
+ my $cond = $r->conditions->one_cond;
+ msg_cond_rule ($channel, $cond, $r, $msg, %opts);
+}
+
+
+=item C<$bool = reject_rule ($rule, $error_msg)>
+
+Bail out with C<$error_msg> if a rule with name C<$rule> has been
+defined.
+
+Return true iff C<$rule> is defined.
+
+=cut
+
+sub reject_rule ($$)
+{
+ my ($rule, $msg) = @_;
+ if (rule ($rule))
+ {
+ err_rule $rule, $msg;
+ return 1;
+ }
+ return 0;
+}
+
+=back
+
+=head2 Administrative functions
+
+=over 4
+
+=item C<accept_extensions (@exts)>
+
+Update C<$KNOWN_EXTENSIONS_PATTERN> to recognize the extensions
+listed in C<@exts>. Extensions should contain a dot if needed.
+
+=cut
+
+sub accept_extensions (@)
+{
+ push @_known_extensions_list, @_;
+ $KNOWN_EXTENSIONS_PATTERN =
+ '(?:' . join ('|', map (quotemeta, @_known_extensions_list)) . ')';
+}
+
+=item C<rules>
+
+Return the list of all L<Automake::Rule> instances. (I.e., all
+rules defined so far.)
+
+=cut
+
+sub rules ()
+{
+ return values %_rule_dict;
+}
+
+
+=item C<register_action($target, $action)>
+
+Append the C<$action> to C<$actions{$target}> taking care of special
+cases.
+
+=cut
+
+sub register_action ($$)
+{
+ my ($target, $action) = @_;
+ if ($actions{$target})
+ {
+ $actions{$target} .= "\n$action" if $action;
+ }
+ else
+ {
+ $actions{$target} = $action;
+ }
+}
+
+
+=item C<Automake::Rule::reset>
+
+The I<forget all> function. Clears all known rules and resets some
+other internal data.
+
+=cut
+
+sub reset()
+{
+ %_rule_dict = ();
+ @_suffixes = ();
+ %_suffix_rules = %_suffix_rules_builtin;
+
+ %dependencies =
+ (
+ # Texinfoing.
+ 'dvi' => [],
+ 'dvi-am' => [],
+ 'pdf' => [],
+ 'pdf-am' => [],
+ 'ps' => [],
+ 'ps-am' => [],
+ 'info' => [],
+ 'info-am' => [],
+ 'html' => [],
+ 'html-am' => [],
+
+ # Installing/uninstalling.
+ 'install-data-am' => [],
+ 'install-exec-am' => [],
+ 'uninstall-am' => [],
+
+ 'install-man' => [],
+ 'uninstall-man' => [],
+
+ 'install-dvi' => [],
+ 'install-dvi-am' => [],
+ 'install-html' => [],
+ 'install-html-am' => [],
+ 'install-info' => [],
+ 'install-info-am' => [],
+ 'install-pdf' => [],
+ 'install-pdf-am' => [],
+ 'install-ps' => [],
+ 'install-ps-am' => [],
+
+ 'installcheck-am' => [],
+
+ # Cleaning.
+ 'clean-am' => [],
+ 'mostlyclean-am' => [],
+ 'maintainer-clean-am' => [],
+ 'distclean-am' => [],
+ 'clean' => [],
+ 'mostlyclean' => [],
+ 'maintainer-clean' => [],
+ 'distclean' => [],
+
+ # Tarballing.
+ 'dist-all' => [],
+
+ '.PHONY' => [],
+ '.PRECIOUS' => [],
+ # Recursive install targets (so "make -n install" works for BSD Make).
+ '.MAKE' => [],
+ );
+ %actions = ();
+}
+
+=item C<next_in_suffix_chain ($ext1, $ext2)>
+
+Return the target suffix for the next rule to use to reach C<$ext2>
+from C<$ext1>, or C<undef> if no such rule exists.
+
+=cut
+
+sub next_in_suffix_chain ($$)
+{
+ my ($ext1, $ext2) = @_;
+ return undef unless (exists $_suffix_rules{$ext1} and
+ exists $_suffix_rules{$ext1}{$ext2});
+ return $_suffix_rules{$ext1}{$ext2}[0];
+}
+
+=item C<register_suffix_rule ($where, $src, $dest)>
+
+Register a suffix rule defined on C<$where> that transforms
+files ending in C<$src> into files ending in C<$dest>.
+
+=cut
+
+sub register_suffix_rule ($$$)
+{
+ my ($where, $src, $dest) = @_;
+ my $suffix_rules = $where->{'position'} ? \%_suffix_rules
+ : \%_suffix_rules_builtin;
+
+ verb "Sources ending in $src become $dest";
+ push @_suffixes, $src, $dest;
+
+ # When transforming sources to objects, Automake uses the
+ # %suffix_rules to move from each source extension to
+ # '.$(OBJEXT)', not to '.o' or '.obj'. However some people
+ # define suffix rules for '.o' or '.obj', so internally we will
+ # consider these extensions equivalent to '.$(OBJEXT)'. We
+ # CANNOT rewrite the target (i.e., automagically replace '.o'
+ # and '.obj' by '.$(OBJEXT)' in the output), or warn the user
+ # that (s)he'd better use '.$(OBJEXT)', because Automake itself
+ # output suffix rules for '.o' or '.obj' ...
+ $dest = '.$(OBJEXT)' if ($dest eq '.o' || $dest eq '.obj');
+
+ # ----------------------------------------------------------------------
+ # The $suffix_rules variable maps the source extension for all suffix
+ # rules seen to a hash whose keys are the possible output extensions.
+ #
+ # Note that this is transitively closed by construction:
+ # if we have
+ #
+ # exists $suffix_rules{$ext1}{$ext2}
+ # && exists $suffix_rules{$ext2}{$ext3}
+ #
+ # then we also have
+ #
+ # exists $suffix_rules{$ext1}{$ext3}
+ #
+ # So it's easy to check whether '.foo' can be transformed to
+ # '.$(OBJEXT)' by checking whether $suffix_rules{'.foo'}{'.$(OBJEXT)'}
+ # exists. This will work even if transforming '.foo' to '.$(OBJEXT)'
+ # involves a chain of several suffix rules.
+ #
+ # The value of $suffix_rules{$ext1}{$ext2} is a pair [$next_sfx, $dist]
+ # where $next_sfx is target suffix for the next rule to use to reach
+ # $ext2, and $dist the distance to $ext2.
+ # ----------------------------------------------------------------------
+
+ # Register $dest as a possible destination from $src.
+ # We might have the create the \hash.
+ if (exists $suffix_rules->{$src})
+ {
+ $suffix_rules->{$src}{$dest} = [ $dest, 1 ];
+ }
+ else
+ {
+ $suffix_rules->{$src} = { $dest => [ $dest, 1 ] };
+ }
+
+ # If we know how to transform $dest in something else, then
+ # we know how to transform $src in that "something else".
+ if (exists $suffix_rules->{$dest})
+ {
+ for my $dest2 (keys %{$suffix_rules->{$dest}})
+ {
+ my $dist = $suffix_rules->{$dest}{$dest2}[1] + 1;
+ # Overwrite an existing $src->$dest2 path only if
+ # the path via $dest which is shorter.
+ if (! exists $suffix_rules->{$src}{$dest2}
+ || $suffix_rules->{$src}{$dest2}[1] > $dist)
+ {
+ $suffix_rules->{$src}{$dest2} = [ $dest, $dist ];
+ }
+ }
+ }
+
+ # Similarly, any extension that can be derived into $src
+ # can be derived into the same extensions as $src can.
+ my @dest2 = keys %{$suffix_rules->{$src}};
+ for my $src2 (keys %$suffix_rules)
+ {
+ if (exists $suffix_rules->{$src2}{$src})
+ {
+ for my $dest2 (@dest2)
+ {
+ my $dist = $suffix_rules->{$src}{$dest2} + 1;
+ # Overwrite an existing $src2->$dest2 path only if
+ # the path via $src is shorter.
+ if (! exists $suffix_rules->{$src2}{$dest2}
+ || $suffix_rules->{$src2}{$dest2}[1] > $dist)
+ {
+ $suffix_rules->{$src2}{$dest2} = [ $src, $dist ];
+ }
+ }
+ }
+ }
+}
+
+=item C<@list = suffixes>
+
+Return the list of known suffixes.
+
+=cut
+
+sub suffixes ()
+{
+ return @_suffixes;
+}
+
+=item C<rule ($rulename)>
+
+Return the C<Automake::Rule> object for the rule
+named C<$rulename> if defined. Return 0 otherwise.
+
+=cut
+
+sub rule ($)
+{
+ my ($name) = @_;
+ # Strip $(EXEEXT) from $name, so we can diagnose
+ # a clash if 'ctags$(EXEEXT):' is redefined after 'ctags:'.
+ $name =~ s,\$\(EXEEXT\)$,,;
+ return $_rule_dict{$name} || 0;
+}
+
+=item C<ruledef ($rulename, $cond)>
+
+Return the C<Automake::RuleDef> object for the rule named
+C<$rulename> if defined in condition C<$cond>. Return false
+if the condition or the rule does not exist.
+
+=cut
+
+sub ruledef ($$)
+{
+ my ($name, $cond) = @_;
+ my $rule = rule $name;
+ return $rule && $rule->def ($cond);
+}
+
+=item C<rrule ($rulename)
+
+Return the C<Automake::Rule> object for the variable named
+C<$rulename>. Abort with an internal error if the variable was not
+defined.
+
+The I<r> in front of C<var> stands for I<required>. One
+should call C<rvar> to assert the rule's existence.
+
+=cut
+
+sub rrule ($)
+{
+ my ($name) = @_;
+ my $r = rule $name;
+ prog_error ("undefined rule $name\n" . &rules_dump)
+ unless $r;
+ return $r;
+}
+
+=item C<rruledef ($varname, $cond)>
+
+Return the C<Automake::RuleDef> object for the rule named
+C<$rulename> if defined in condition C<$cond>. Abort with an internal
+error if the condition or the rule does not exist.
+
+=cut
+
+sub rruledef ($$)
+{
+ my ($name, $cond) = @_;
+ return rrule ($name)->rdef ($cond);
+}
+
+# Create the variable if it does not exist.
+# This is used only by other functions in this package.
+sub _crule ($)
+{
+ my ($name) = @_;
+ my $r = rule $name;
+ return $r if $r;
+ return _new Automake::Rule $name;
+}
+
+sub _new ($$)
+{
+ my ($class, $name) = @_;
+
+ # Strip $(EXEEXT) from $name, so we can diagnose
+ # a clash if 'ctags$(EXEEXT):' is redefined after 'ctags:'.
+ (my $keyname = $name) =~ s,\$\(EXEEXT\)$,,;
+
+ my $self = Automake::Item::new ($class, $name);
+ $_rule_dict{$keyname} = $self;
+ return $self;
+}
+
+sub _rule_defn_with_exeext_awareness ($$$)
+{
+ my ($target, $cond, $where) = @_;
+
+ # For now 'foo:' will override 'foo$(EXEEXT):'. This is temporary,
+ # though, so we emit a warning.
+ (my $noexe = $target) =~ s/\$\(EXEEXT\)$//;
+ my $noexerule = rule $noexe;
+ my $tdef = $noexerule ? $noexerule->def ($cond) : undef;
+
+ if ($noexe ne $target
+ && $tdef
+ && $noexerule->name ne $target)
+ {
+ # The no-exeext option enables this feature.
+ if (! option 'no-exeext')
+ {
+ msg ('obsolete', $tdef->location,
+ "deprecated feature: target '$noexe' overrides "
+ . "'$noexe\$(EXEEXT)'\n"
+ . "change your target to read '$noexe\$(EXEEXT)'",
+ partial => 1);
+ msg ('obsolete', $where, "target '$target' was defined here");
+ }
+ }
+ return $tdef;
+}
+
+sub _maybe_warn_about_duplicated_target ($$$$$$)
+{
+ my ($target, $tdef, $source, $owner, $cond, $where) = @_;
+
+ my $oldowner = $tdef->owner;
+ # Ok, it's the name target, but the name maybe different because
+ # 'foo$(EXEEXT)' and 'foo' have the same key in our table.
+ my $oldname = $tdef->name;
+
+ # Don't mention true conditions in diagnostics.
+ my $condmsg =
+ $cond == TRUE ? '' : (" in condition '" . $cond->human . "'");
+
+ if ($owner == RULE_USER)
+ {
+ if ($oldowner == RULE_USER)
+ {
+ # Ignore '%'-style pattern rules. We'd need the
+ # dependencies to detect duplicates, and they are
+ # already diagnosed as unportable by -Wportability.
+ if ($target !~ /^[^%]*%[^%]*$/)
+ {
+ ## FIXME: Presently we can't diagnose duplicate user rules
+ ## because we don't distinguish rules with commands
+ ## from rules that only add dependencies. E.g.,
+ ## .PHONY: foo
+ ## .PHONY: bar
+ ## is legitimate. This is checked in the 'phony.sh' test.
+
+ # msg ('syntax', $where,
+ # "redefinition of '$target'$condmsg ...", partial => 1);
+ # msg_cond_rule ('syntax', $cond, $target,
+ # "... '$target' previously defined here");
+ }
+ }
+ else
+ {
+ # Since we parse the user Makefile.am before reading
+ # the Automake fragments, this condition should never happen.
+ prog_error ("user target '$target'$condmsg seen after Automake's"
+ . " definition\nfrom " . $tdef->source);
+ }
+ }
+ else # $owner == RULE_AUTOMAKE
+ {
+ if ($oldowner == RULE_USER)
+ {
+ # -am targets listed in %dependencies support a -local
+ # variant. If the user tries to override TARGET or
+ # TARGET-am for which there exists a -local variant,
+ # just tell the user to use it.
+ my $hint = 0;
+ my $noam = $target;
+ $noam =~ s/-am$//;
+ if (exists $dependencies{"$noam-am"})
+ {
+ $hint = "consider using $noam-local instead of $target";
+ }
+
+ msg_cond_rule ('override', $cond, $target,
+ "user target '$target' defined here"
+ . "$condmsg ...", partial => 1);
+ msg ('override', $where,
+ "... overrides Automake target '$oldname' defined here",
+ partial => $hint);
+ msg_cond_rule ('override', $cond, $target, $hint)
+ if $hint;
+ }
+ else # $oldowner == RULE_AUTOMAKE
+ {
+ # Automake should ignore redefinitions of its own
+ # rules if they came from the same file. This makes
+ # it easier to process a Makefile fragment several times.
+ # However it's an error if the target is defined in many
+ # files. E.g., the user might be using bin_PROGRAMS = ctags
+ # which clashes with our 'ctags' rule.
+ # (It would be more accurate if we had a way to compare
+ # the *content* of both rules. Then $targets_source would
+ # be useless.)
+ my $oldsource = $tdef->source;
+ if (not ($source eq $oldsource && $target eq $oldname))
+ {
+ msg ('syntax',
+ $where, "redefinition of '$target'$condmsg ...",
+ partial => 1);
+ msg_cond_rule ('syntax', $cond, $target,
+ "... '$oldname' previously defined here");
+ }
+ }
+ }
+}
+
+# Return the list of conditionals in which the rule was defined. In case
+# an ambiguous conditional definition is detected, return the empty list.
+sub _conditionals_for_rule ($$$$)
+{
+ my ($rule, $owner, $cond, $where) = @_;
+ my $target = $rule->name;
+ my @conds;
+ my ($message, $ambig_cond) = $rule->conditions->ambiguous_p ($target, $cond);
+
+ return $cond if !$message; # No ambiguity.
+
+ if ($owner == RULE_USER)
+ {
+ # For user rules, just diagnose the ambiguity.
+ msg 'syntax', $where, "$message ...", partial => 1;
+ msg_cond_rule ('syntax', $ambig_cond, $target,
+ "... '$target' previously defined here");
+ return ();
+ }
+
+ # FIXME: for Automake rules, we can't diagnose ambiguities yet.
+ # The point is that Automake doesn't propagate conditions
+ # everywhere. For instance &handle_PROGRAMS doesn't care if
+ # bin_PROGRAMS was defined conditionally or not.
+ # On the following input
+ # if COND1
+ # foo:
+ # ...
+ # else
+ # bin_PROGRAMS = foo
+ # endif
+ # &handle_PROGRAMS will attempt to define a 'foo:' rule
+ # in condition TRUE (which conflicts with COND1). Fixing
+ # this in &handle_PROGRAMS and siblings seems hard: you'd
+ # have to explain &file_contents what to do with a
+ # condition. So for now we do our best *here*. If 'foo:'
+ # was already defined in condition COND1 and we want to define
+ # it in condition TRUE, then define it only in condition !COND1.
+ # (See cond14.sh and cond15.sh for some test cases.)
+ @conds = $rule->not_always_defined_in_cond ($cond)->conds;
+
+ # No conditions left to define the rule.
+ # Warn, because our workaround is meaningless in this case.
+ if (scalar @conds == 0)
+ {
+ msg 'syntax', $where, "$message ...", partial => 1;
+ msg_cond_rule ('syntax', $ambig_cond, $target,
+ "... '$target' previously defined here");
+ return ();
+ }
+ return @conds;
+}
+
+=item C<@conds = define ($rulename, $source, $owner, $cond, $where)>
+
+Define a new rule. C<$rulename> is the list of targets. C<$source>
+is the filename the rule comes from. C<$owner> is the owner of the
+rule (C<RULE_AUTOMAKE> or C<RULE_USER>). C<$cond> is the
+C<Automake::Condition> under which the rule is defined. C<$where> is
+the C<Automake::Location> where the rule is defined.
+
+Returns a (possibly empty) list of C<Automake::Condition>s where the
+rule's definition should be output.
+
+=cut
+
+sub define ($$$$$)
+{
+ my ($target, $source, $owner, $cond, $where) = @_;
+
+ prog_error "$where is not a reference"
+ unless ref $where;
+ prog_error "$cond is not a reference"
+ unless ref $cond;
+
+ # Don't even think about defining a rule in condition FALSE.
+ return () if $cond == FALSE;
+
+ my $tdef = _rule_defn_with_exeext_awareness ($target, $cond, $where);
+
+ # A GNU make-style pattern rule has a single "%" in the target name.
+ msg ('portability', $where,
+ "'%'-style pattern rules are a GNU make extension")
+ if $target =~ /^[^%]*%[^%]*$/;
+
+ # See whether this is a duplicated target declaration.
+ if ($tdef)
+ {
+ # Diagnose invalid target redefinitions, if any. Note that some
+ # target redefinitions are valid (e.g., for multiple-targets
+ # pattern rules).
+ _maybe_warn_about_duplicated_target ($target, $tdef, $source,
+ $owner, $cond, $where);
+ # Return so we don't redefine the rule in our tables, don't check
+ # for ambiguous condition, etc. The rule will be output anyway
+ # because '&read_am_file' ignores the return code.
+ return ();
+ }
+
+ my $rule = _crule $target;
+
+ # Conditions for which the rule should be defined. Due to some
+ # complications in the automake internals, this aspect is not as
+ # obvious as it might be, and in come cases this list must contain
+ # other entries in addition to '$cond'. See the comments in
+ # '_conditionals_for_rule' for a rationale.
+ my @conds = _conditionals_for_rule ($rule, $owner, $cond, $where);
+
+ # Stop if we had ambiguous conditional definitions.
+ return unless @conds;
+
+ # Finally define this rule.
+ for my $c (@conds)
+ {
+ my $def = new Automake::RuleDef ($target, '', $where->clone,
+ $owner, $source);
+ $rule->set ($c, $def);
+ }
+
+ # We honor inference rules with multiple targets because many
+ # makes support this and people use it. However this is disallowed
+ # by POSIX. We'll print a warning later.
+ my $target_count = 0;
+ my $inference_rule_count = 0;
+
+ for my $t (split (' ', $target))
+ {
+ ++$target_count;
+ # Check if the rule is a suffix rule: either it's a rule for
+ # two known extensions...
+ if ($t =~ /^($KNOWN_EXTENSIONS_PATTERN)($KNOWN_EXTENSIONS_PATTERN)$/
+ # ...or it's a rule with unknown extensions (i.e., the rule
+ # looks like '.foo.bar:' but '.foo' or '.bar' are not
+ # declared in SUFFIXES and are not known language
+ # extensions). Automake will complete SUFFIXES from
+ # @suffixes automatically (see handle_footer).
+ || ($t =~ /$_SUFFIX_RULE_PATTERN/o && accept_extensions($1)))
+ {
+ ++$inference_rule_count;
+ register_suffix_rule ($where, $1, $2);
+ }
+ }
+
+ # POSIX allows multiple targets before the colon, but disallows
+ # definitions of multiple inference rules. It's also
+ # disallowed to mix plain targets with inference rules.
+ msg ('portability', $where,
+ "inference rules can have only one target before the colon (POSIX)")
+ if $inference_rule_count > 0 && $target_count > 1;
+
+ return @conds;
+}
+
+=item C<depend ($target, @deps)>
+
+Adds C<@deps> to the dependencies of target C<$target>. This should
+be used only with factored targets (those appearing in
+C<%dependees>).
+
+=cut
+
+sub depend ($@)
+{
+ my ($category, @dependees) = @_;
+ push (@{$dependencies{$category}}, @dependees);
+}
+
+=back
+
+=head1 SEE ALSO
+
+L<Automake::RuleDef>, L<Automake::Condition>,
+L<Automake::DisjConditions>, L<Automake::Location>.
+
+=cut
+
+1;
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/lib/Automake/RuleDef.pm b/lib/Automake/RuleDef.pm
new file mode 100644
index 000000000..b87bd6fa6
--- /dev/null
+++ b/lib/Automake/RuleDef.pm
@@ -0,0 +1,129 @@
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+package Automake::RuleDef;
+
+use 5.006;
+use strict;
+use Carp;
+use Automake::ChannelDefs;
+use Automake::ItemDef;
+
+require Exporter;
+use vars '@ISA', '@EXPORT';
+@ISA = qw/Automake::ItemDef Exporter/;
+@EXPORT = qw (&RULE_AUTOMAKE &RULE_USER);
+
+=head1 NAME
+
+Automake::RuleDef - a class for rule definitions
+
+=head1 SYNOPSIS
+
+ use Automake::RuleDef;
+ use Automake::Location;
+
+=head1 DESCRIPTION
+
+This class gathers data related to one Makefile-rule definition.
+It shouldn't be needed outside of F<Rule.pm>.
+
+=head2 Constants
+
+=over 4
+
+=item C<RULE_AUTOMAKE>, C<RULE_USER>
+
+Possible owners for rules.
+
+=cut
+
+use constant RULE_AUTOMAKE => 0; # Rule defined by Automake.
+use constant RULE_USER => 1; # Rule defined in the user's Makefile.am.
+
+=back
+
+=head2 Methods
+
+=over 4
+
+=item C<new Automake::RuleDef ($name, $comment, $location, $owner, $source)>
+
+Create a new rule definition with target C<$name>, with associated comment
+C<$comment>, Location C<$location> and owner C<$owner>, defined in file
+C<$source>.
+
+=cut
+
+sub new ($$$$$)
+{
+ my ($class, $name, $comment, $location, $owner, $source) = @_;
+
+ my $self = Automake::ItemDef::new ($class, $comment, $location, $owner);
+ $self->{'source'} = $source;
+ $self->{'name'} = $name;
+ return $self;
+}
+
+=item C<$source = $rule-E<gt>source>
+
+Return the source of the rule.
+
+=cut
+
+sub source ($)
+{
+ my ($self) = @_;
+ return $self->{'source'};
+}
+
+=item C<$name = $rule-E<gt>name>
+
+Return the name of the rule.
+
+=cut
+
+sub name ($)
+{
+ my ($self) = @_;
+ return $self->{'name'};
+}
+
+=back
+
+=head1 SEE ALSO
+
+L<Automake::Rule>, L<Automake::ItemDef>.
+
+=cut
+
+1;
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/lib/Automake/VarDef.pm b/lib/Automake/VarDef.pm
new file mode 100644
index 000000000..5acdb729b
--- /dev/null
+++ b/lib/Automake/VarDef.pm
@@ -0,0 +1,349 @@
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+package Automake::VarDef;
+
+use 5.006;
+use strict;
+use Carp;
+use Automake::ChannelDefs;
+use Automake::ItemDef;
+
+require Exporter;
+use vars '@ISA', '@EXPORT';
+@ISA = qw/Automake::ItemDef Exporter/;
+@EXPORT = qw (&VAR_AUTOMAKE &VAR_CONFIGURE &VAR_MAKEFILE
+ &VAR_ASIS &VAR_PRETTY &VAR_SILENT &VAR_SORTED);
+
+=head1 NAME
+
+Automake::VarDef - a class for variable definitions
+
+=head1 SYNOPSIS
+
+ use Automake::VarDef;
+ use Automake::Location;
+
+ # Create a VarDef for a definition such as
+ # | # any comment
+ # | foo = bar # more comment
+ # in Makefile.am
+ my $loc = new Automake::Location 'Makefile.am:2';
+ my $def = new Automake::VarDef ('foo', 'bar # more comment',
+ '# any comment',
+ $loc, '', VAR_MAKEFILE, VAR_ASIS);
+
+ # Appending to a definition.
+ $def->append ('value to append', 'comment to append');
+
+ # Accessors.
+ my $value = $def->value; # with trailing '#' comments and
+ # continuation ("\\\n") omitted.
+ my $value = $def->raw_value; # the real value, as passed to new().
+ my $comment = $def->comment;
+ my $location = $def->location;
+ my $type = $def->type;
+ my $owner = $def->owner;
+ my $pretty = $def->pretty;
+
+ # Changing owner.
+ $def->set_owner (VAR_CONFIGURE,
+ new Automake::Location 'configure.ac:15');
+
+ # Marking examined definitions.
+ $def->set_seen;
+ my $seen_p = $def->seen;
+
+ # Printing a variable for debugging.
+ print STDERR $def->dump;
+
+=head1 DESCRIPTION
+
+This class gathers data related to one Makefile-variable definition.
+
+=head2 Constants
+
+=over 4
+
+=item C<VAR_AUTOMAKE>, C<VAR_CONFIGURE>, C<VAR_MAKEFILE>
+
+Possible owners for variables. A variable can be defined
+by Automake, in F<configure.ac> (using C<AC_SUBST>), or in
+the user's F<Makefile.am>.
+
+=cut
+
+# Defined so that the owner of a variable can only be increased (e.g
+# Automake should not override a configure or Makefile variable).
+use constant VAR_AUTOMAKE => 0; # Variable defined by Automake.
+use constant VAR_CONFIGURE => 1;# Variable defined in configure.ac.
+use constant VAR_MAKEFILE => 2; # Variable defined in Makefile.am.
+
+=item C<VAR_ASIS>, C<VAR_PRETTY>, C<VAR_SILENT>, C<VAR_SORTED>
+
+Possible print styles. C<VAR_ASIS> variables should be output as-is.
+C<VAR_PRETTY> variables are wrapped on multiple lines if they cannot
+fit on one. C<VAR_SILENT> variables are not output at all. Finally,
+C<VAR_SORTED> variables should be sorted and then handled as
+C<VAR_PRETTY> variables.
+
+C<VAR_SILENT> variables can also be overridden silently (unlike the
+other kinds of variables whose overriding may sometimes produce
+warnings).
+
+=cut
+
+# Possible values for pretty.
+use constant VAR_ASIS => 0; # Output as-is.
+use constant VAR_PRETTY => 1; # Pretty printed on output.
+use constant VAR_SILENT => 2; # Not output. (Can also be
+ # overridden silently.)
+use constant VAR_SORTED => 3; # Sorted and pretty-printed.
+
+=back
+
+=head2 Methods
+
+C<VarDef> defines the following methods in addition to those inherited
+from L<Automake::ItemDef>.
+
+=over 4
+
+=item C<my $def = new Automake::VarDef ($varname, $value, $comment, $location, $type, $owner, $pretty)>
+
+Create a new Makefile-variable definition. C<$varname> is the name of
+the variable being defined and C<$value> its value.
+
+C<$comment> is any comment preceding the definition. (Because
+Automake reorders variable definitions in the output, it also tries to
+carry comments around.)
+
+C<$location> is the place where the definition occurred, it should be
+an instance of L<Automake::Location>.
+
+C<$type> should be C<''> for definitions made with C<=>, and C<':'>
+for those made with C<:=>.
+
+C<$owner> specifies who owns the variables, it can be one of
+C<VAR_AUTOMAKE>, C<VAR_CONFIGURE>, or C<VAR_MAKEFILE> (see these
+definitions).
+
+Finally, C<$pretty> tells how the variable should be output, and can
+be one of C<VAR_ASIS>, C<VAR_PRETTY>, or C<VAR_SILENT>, or
+C<VAR_SORTED> (see these definitions).
+
+=cut
+
+sub new ($$$$$$$$)
+{
+ my ($class, $var, $value, $comment, $location, $type, $owner, $pretty) = @_;
+
+ # A user variable must be set by either '=' or ':=', and later
+ # promoted to '+='.
+ if ($owner != VAR_AUTOMAKE && $type eq '+')
+ {
+ error $location, "$var must be set with '=' before using '+='";
+ }
+
+ my $self = Automake::ItemDef::new ($class, $comment, $location, $owner);
+ $self->{'value'} = $value;
+ $self->{'type'} = $type;
+ $self->{'pretty'} = $pretty;
+ $self->{'seen'} = 0;
+ return $self;
+}
+
+=item C<$def-E<gt>append ($value, $comment)>
+
+Append C<$value> and <$comment> to the existing value and comment of
+C<$def>. This is normally called on C<+=> definitions.
+
+=cut
+
+sub append ($$$)
+{
+ my ($self, $value, $comment) = @_;
+ $self->{'comment'} .= $comment;
+
+ my $val = $self->{'value'};
+
+ # Strip comments from augmented variables. This is so that
+ # VAR = foo # com
+ # VAR += bar
+ # does not become
+ # VAR = foo # com bar
+ # Furthermore keeping '#' would not be portable if the variable is
+ # output on multiple lines.
+ $val =~ s/ ?#.*//;
+ # Insert a separator, if required.
+ $val .= ' ' if $val;
+ $self->{'value'} = $val . $value;
+ # Turn ASIS appended variables into PRETTY variables. This is to
+ # cope with 'make' implementation that cannot read very long lines.
+ $self->{'pretty'} = VAR_PRETTY if $self->{'pretty'} == VAR_ASIS;
+}
+
+=item C<$def-E<gt>value>
+
+=item C<$def-E<gt>raw_value>
+
+=item C<$def-E<gt>type>
+
+=item C<$def-E<gt>pretty>
+
+Accessors to the various constituents of a C<VarDef>. See the
+documentation of C<new>'s arguments for a description of these.
+
+=cut
+
+sub value ($)
+{
+ my ($self) = @_;
+ my $val = $self->raw_value;
+ # Strip anything past '#'. '#' characters cannot be escaped
+ # in Makefiles, so we don't have to be smart.
+ $val =~ s/#.*$//s;
+ # Strip backslashes.
+ $val =~ s/\\$/ /mg;
+ return $val;
+}
+
+sub raw_value ($)
+{
+ my ($self) = @_;
+ return $self->{'value'};
+}
+
+sub type ($)
+{
+ my ($self) = @_;
+ return $self->{'type'};
+}
+
+sub pretty ($)
+{
+ my ($self) = @_;
+ return $self->{'pretty'};
+}
+
+=item C<$def-E<gt>set_owner ($owner, $location)>
+
+Change the owner of a definition. This usually happens because
+the user used C<+=> on an Automake variable, so (s)he now owns
+the content. C<$location> should be an instance of L<Automake::Location>
+indicating where the change took place.
+
+=cut
+
+sub set_owner ($$$)
+{
+ my ($self, $owner, $location) = @_;
+ # We always adjust the location when the owner changes (even for
+ # '+=' statements). The risk otherwise is to warn about
+ # a VAR_MAKEFILE variable and locate it in configure.ac...
+ $self->{'owner'} = $owner;
+ $self->{'location'} = $location;
+}
+
+=item C<$def-E<gt>set_seen>
+
+=item C<$bool = $def-E<gt>seen>
+
+These function allows Automake to mark (C<set_seen>) variable that
+it has examined in some way, and latter check (using C<seen>) for
+unused variables. Unused variables usually indicate typos.
+
+=cut
+
+sub set_seen ($)
+{
+ my ($self) = @_;
+ $self->{'seen'} = 1;
+}
+
+sub seen ($)
+{
+ my ($self) = @_;
+ return $self->{'seen'};
+}
+
+=item C<$str = $def-E<gt>dump>
+
+Format the contents of C<$def> as a human-readable string,
+for debugging.
+
+=cut
+
+sub dump ($)
+{
+ my ($self) = @_;
+ my $owner = $self->owner;
+
+ if ($owner == VAR_AUTOMAKE)
+ {
+ $owner = 'Automake';
+ }
+ elsif ($owner == VAR_CONFIGURE)
+ {
+ $owner = 'Configure';
+ }
+ elsif ($owner == VAR_MAKEFILE)
+ {
+ $owner = 'Makefile';
+ }
+ else
+ {
+ prog_error ("unexpected owner");
+ }
+
+ my $where = $self->location->dump;
+ my $comment = $self->comment;
+ my $value = $self->raw_value;
+ my $type = $self->type;
+
+ return "{
+ type: $type=
+ where: $where comment: $comment
+ value: $value
+ owner: $owner
+ }\n";
+}
+
+=back
+
+=head1 SEE ALSO
+
+L<Automake::Variable>, L<Automake::ItemDef>.
+
+=cut
+
+1;
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/lib/Automake/Variable.pm b/lib/Automake/Variable.pm
new file mode 100644
index 000000000..99a829e85
--- /dev/null
+++ b/lib/Automake/Variable.pm
@@ -0,0 +1,1693 @@
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+package Automake::Variable;
+
+use 5.006;
+use strict;
+use Carp;
+
+use Automake::Channels;
+use Automake::ChannelDefs;
+use Automake::Configure_ac;
+use Automake::Item;
+use Automake::VarDef;
+use Automake::Condition qw (TRUE FALSE);
+use Automake::DisjConditions;
+use Automake::General 'uniq';
+use Automake::Wrap 'makefile_wrap';
+
+require Exporter;
+use vars '@ISA', '@EXPORT', '@EXPORT_OK';
+@ISA = qw/Automake::Item Exporter/;
+@EXPORT = qw (err_var msg_var msg_cond_var reject_var
+ var rvar vardef rvardef
+ variables
+ scan_variable_expansions check_variable_expansions
+ variable_delete
+ variables_dump
+ set_seen
+ require_variables
+ variable_value
+ output_variables
+ transform_variable_recursively);
+
+=head1 NAME
+
+Automake::Variable - support for variable definitions
+
+=head1 SYNOPSIS
+
+ use Automake::Variable;
+ use Automake::VarDef;
+
+ # Defining a variable.
+ Automake::Variable::define($varname, $owner, $type,
+ $cond, $value, $comment,
+ $where, $pretty)
+
+ # Looking up a variable.
+ my $var = var $varname;
+ if ($var)
+ {
+ ...
+ }
+
+ # Looking up a variable that is assumed to exist.
+ my $var = rvar $varname;
+
+ # The list of conditions where $var has been defined.
+ # ($var->conditions is an Automake::DisjConditions,
+ # $var->conditions->conds is a list of Automake::Condition.)
+ my @conds = $var->conditions->conds
+
+ # Access to the definition in Condition $cond.
+ # $def is an Automake::VarDef.
+ my $def = $var->def ($cond);
+ if ($def)
+ {
+ ...
+ }
+
+ # When the conditional definition is assumed to exist, use
+ my $def = $var->rdef ($cond);
+
+
+=head1 DESCRIPTION
+
+This package provides support for Makefile variable definitions.
+
+An C<Automake::Variable> is a variable name associated to possibly
+many conditional definitions. These definitions are instances
+of C<Automake::VarDef>.
+
+Therefore obtaining the value of a variable under a given
+condition involves two lookups. One to look up the variable,
+and one to look up the conditional definition:
+
+ my $var = var $name;
+ if ($var)
+ {
+ my $def = $var->def ($cond);
+ if ($def)
+ {
+ return $def->value;
+ }
+ ...
+ }
+ ...
+
+When it is known that the variable and the definition
+being looked up exist, the above can be simplified to
+
+ return var ($name)->def ($cond)->value; # Do not write this.
+
+but is better written
+
+ return rvar ($name)->rdef ($cond)->value;
+
+or even
+
+ return rvardef ($name, $cond)->value;
+
+The I<r> variants of the C<var>, C<def>, and C<vardef> methods add an
+extra test to ensure that the lookup succeeded, and will diagnose
+failures as internal errors (with a message which is much more
+informative than Perl's warning about calling a method on a
+non-object).
+
+=cut
+
+my $_VARIABLE_CHARACTERS = '[.A-Za-z0-9_@]+';
+my $_VARIABLE_PATTERN = '^' . $_VARIABLE_CHARACTERS . "\$";
+my $_VARIABLE_RECURSIVE_PATTERN =
+ '^([.A-Za-z0-9_@]|\$[({]' . $_VARIABLE_CHARACTERS . '[})]?)+' . "\$";
+
+# The order in which variables should be output. (May contain
+# duplicates -- only the first occurrence matters.)
+my @_var_order;
+
+# This keeps track of all variables defined by &_gen_varname.
+# $_gen_varname{$base} is a hash for all variables defined with
+# prefix '$base'. Values stored in this hash are the variable names.
+# Keys have the form "(COND1)VAL1(COND2)VAL2..." where VAL1 and VAL2
+# are the values of the variable for condition COND1 and COND2.
+my %_gen_varname = ();
+# $_gen_varname_n{$base} is the number of variables generated by
+# _gen_varname() for $base. This is not the same as keys
+# %{$_gen_varname{$base}} because %_gen_varname may also contain
+# variables not generated by _gen_varname.
+my %_gen_varname_n = ();
+
+# Declare the macros that define known variables, so we can
+# hint the user if she try to use one of these variables.
+
+# Macros accessible via aclocal.
+my %_am_macro_for_var =
+ (
+ CCAS => 'AM_PROG_AS',
+ CCASFLAGS => 'AM_PROG_AS',
+ EMACS => 'AM_PATH_LISPDIR',
+ GCJ => 'AM_PROG_GCJ',
+ LEX => 'AM_PROG_LEX',
+ LIBTOOL => 'LT_INIT',
+ lispdir => 'AM_PATH_LISPDIR',
+ pkgpyexecdir => 'AM_PATH_PYTHON',
+ pkgpythondir => 'AM_PATH_PYTHON',
+ pyexecdir => 'AM_PATH_PYTHON',
+ PYTHON => 'AM_PATH_PYTHON',
+ pythondir => 'AM_PATH_PYTHON',
+ );
+
+# Macros shipped with Autoconf.
+my %_ac_macro_for_var =
+ (
+ ALLOCA => 'AC_FUNC_ALLOCA',
+ CC => 'AC_PROG_CC',
+ CFLAGS => 'AC_PROG_CC',
+ CXX => 'AC_PROG_CXX',
+ CXXFLAGS => 'AC_PROG_CXX',
+ F77 => 'AC_PROG_F77',
+ FFLAGS => 'AC_PROG_F77',
+ FC => 'AC_PROG_FC',
+ FCFLAGS => 'AC_PROG_FC',
+ OBJC => 'AC_PROG_OBJC',
+ OBJCFLAGS => 'AC_PROG_OBJC',
+ OBJCXX => 'AC_PROG_OBJCXX',
+ OBJCXXFLAGS => 'AC_PROG_OBJCXX',
+ RANLIB => 'AC_PROG_RANLIB',
+ UPC => 'AM_PROG_UPC',
+ UPCFLAGS => 'AM_PROG_UPC',
+ YACC => 'AC_PROG_YACC',
+ );
+
+# The name of the configure.ac file.
+my $configure_ac;
+
+# Variables that can be overridden without complaint from -Woverride
+my %_silent_variable_override =
+ (AM_MAKEINFOHTMLFLAGS => 1,
+ AR => 1,
+ ARFLAGS => 1,
+ DEJATOOL => 1,
+ JAVAC => 1,
+ JAVAROOT => 1);
+
+# Count of helper variables used to implement conditional '+='.
+my $_appendvar;
+
+# Each call to C<Automake::Variable::traverse_recursively> gets an
+# unique label. This is used to detect recursively defined variables.
+my $_traversal = 0;
+
+
+=head2 Error reporting functions
+
+In these functions, C<$var> can be either a variable name, or
+an instance of C<Automake::Variable>.
+
+=over 4
+
+=item C<err_var ($var, $message, [%options])>
+
+Uncategorized errors about variables.
+
+=cut
+
+sub err_var ($$;%)
+{
+ msg_var ('error', @_);
+}
+
+=item C<msg_cond_var ($channel, $cond, $var, $message, [%options])>
+
+Messages about conditional variable.
+
+=cut
+
+sub msg_cond_var ($$$$;%)
+{
+ my ($channel, $cond, $var, $msg, %opts) = @_;
+ my $v = ref ($var) ? $var : rvar ($var);
+ msg $channel, $v->rdef ($cond)->location, $msg, %opts;
+}
+
+=item C<msg_var ($channel, $var, $message, [%options])>
+
+Messages about variables.
+
+=cut
+
+sub msg_var ($$$;%)
+{
+ my ($channel, $var, $msg, %opts) = @_;
+ my $v = ref ($var) ? $var : rvar ($var);
+ # Don't know which condition is concerned. Pick any.
+ my $cond = $v->conditions->one_cond;
+ msg_cond_var $channel, $cond, $v, $msg, %opts;
+}
+
+=item C<$bool = reject_var ($varname, $error_msg)>
+
+Bail out with C<$error_msg> if a variable with name C<$varname> has
+been defined.
+
+Return true iff C<$varname> is defined.
+
+=cut
+
+sub reject_var ($$)
+{
+ my ($var, $msg) = @_;
+ my $v = var ($var);
+ if ($v)
+ {
+ err_var $v, $msg;
+ return 1;
+ }
+ return 0;
+}
+
+=back
+
+=head2 Administrative functions
+
+=over 4
+
+=item C<Automake::Variable::hook ($varname, $fun)>
+
+Declare a function to be called whenever a variable
+named C<$varname> is defined or redefined.
+
+C<$fun> should take two arguments: C<$type> and C<$value>.
+When type is C<''> or <':'>, C<$value> is the value being
+assigned to C<$varname>. When C<$type> is C<'+'>, C<$value>
+is the value being appended to C<$varname>.
+
+=cut
+
+use vars '%_hooks';
+sub hook ($$)
+{
+ my ($var, $fun) = @_;
+ $_hooks{$var} = $fun;
+}
+
+=item C<variables ([$suffix])>
+
+Returns the list of all L<Automake::Variable> instances. (I.e., all
+variables defined so far.) If C<$suffix> is supplied, return only
+the L<Automake::Variable> instances that ends with C<_$suffix>.
+
+=cut
+
+use vars '%_variable_dict', '%_primary_dict';
+sub variables (;$)
+{
+ my ($suffix) = @_;
+ my @vars = ();
+ if ($suffix)
+ {
+ if (exists $_primary_dict{$suffix})
+ {
+ @vars = values %{$_primary_dict{$suffix}};
+ }
+ }
+ else
+ {
+ @vars = values %_variable_dict;
+ }
+ # The behaviour of the 'sort' built-in is undefined in scalar
+ # context, hence we need an ad-hoc handling for such context.
+ return wantarray ? sort { $a->name cmp $b->name } @vars : scalar @vars;
+}
+
+=item C<Automake::Variable::reset>
+
+The I<forget all> function. Clears all know variables and reset some
+other internal data.
+
+=cut
+
+sub reset ()
+{
+ %_variable_dict = ();
+ %_primary_dict = ();
+ $_appendvar = 0;
+ @_var_order = ();
+ %_gen_varname = ();
+ %_gen_varname_n = ();
+ $_traversal = 0;
+}
+
+=item C<var ($varname)>
+
+Return the C<Automake::Variable> object for the variable
+named C<$varname> if defined. Return 0 otherwise.
+
+=cut
+
+sub var ($)
+{
+ my ($name) = @_;
+ return $_variable_dict{$name} if exists $_variable_dict{$name};
+ return 0;
+}
+
+=item C<vardef ($varname, $cond)>
+
+Return the C<Automake::VarDef> object for the variable named
+C<$varname> if defined in condition C<$cond>. Return false
+if the condition or the variable does not exist.
+
+=cut
+
+sub vardef ($$)
+{
+ my ($name, $cond) = @_;
+ my $var = var $name;
+ return $var && $var->def ($cond);
+}
+
+# Create the variable if it does not exist.
+# This is used only by other functions in this package.
+sub _cvar ($)
+{
+ my ($name) = @_;
+ my $v = var $name;
+ return $v if $v;
+ return _new Automake::Variable $name;
+}
+
+=item C<rvar ($varname)>
+
+Return the C<Automake::Variable> object for the variable named
+C<$varname>. Abort with an internal error if the variable was not
+defined.
+
+The I<r> in front of C<var> stands for I<required>. One
+should call C<rvar> to assert the variable's existence.
+
+=cut
+
+sub rvar ($)
+{
+ my ($name) = @_;
+ my $v = var $name;
+ prog_error ("undefined variable $name\n" . &variables_dump)
+ unless $v;
+ return $v;
+}
+
+=item C<rvardef ($varname, $cond)>
+
+Return the C<Automake::VarDef> object for the variable named
+C<$varname> if defined in condition C<$cond>. Abort with an internal
+error if the condition or the variable does not exist.
+
+=cut
+
+sub rvardef ($$)
+{
+ my ($name, $cond) = @_;
+ return rvar ($name)->rdef ($cond);
+}
+
+=back
+
+=head2 Methods
+
+C<Automake::Variable> is a subclass of C<Automake::Item>. See
+that package for inherited methods.
+
+Here are the methods specific to the C<Automake::Variable> instances.
+Use the C<define> function, described latter, to create such objects.
+
+=over 4
+
+=cut
+
+# Create Automake::Variable objects. This is used
+# only in this file. Other users should use
+# the "define" function.
+sub _new ($$)
+{
+ my ($class, $name) = @_;
+ my $self = Automake::Item::new ($class, $name);
+ $self->{'scanned'} = 0;
+ $self->{'last-append'} = []; # helper variable for last conditional append.
+ $_variable_dict{$name} = $self;
+ if ($name =~ /_([[:alnum:]]+)$/)
+ {
+ $_primary_dict{$1}{$name} = $self;
+ }
+ return $self;
+}
+
+# _check_ambiguous_condition ($SELF, $COND, $WHERE)
+# -------------------------------------------------
+# Check for an ambiguous conditional. This is called when a variable
+# is being defined conditionally. If we already know about a
+# definition that is true under the same conditions, then we have an
+# ambiguity.
+sub _check_ambiguous_condition ($$$)
+{
+ my ($self, $cond, $where) = @_;
+ my $var = $self->name;
+ my ($message, $ambig_cond) = $self->conditions->ambiguous_p ($var, $cond);
+
+ # We allow silent variables to be overridden silently,
+ # by either silent or non-silent variables.
+ my $def = $self->def ($ambig_cond);
+ if ($message && $def->pretty != VAR_SILENT)
+ {
+ msg 'syntax', $where, "$message ...", partial => 1;
+ msg_var ('syntax', $var, "... '$var' previously defined here");
+ verb ($self->dump);
+ }
+}
+
+=item C<$bool = $var-E<gt>check_defined_unconditionally ([$parent, $parent_cond])>
+
+Warn if the variable is conditionally defined. C<$parent> is the name
+of the parent variable, and C<$parent_cond> the condition of the parent
+definition. These two variables are used to display diagnostics.
+
+=cut
+
+sub check_defined_unconditionally ($;$$)
+{
+ my ($self, $parent, $parent_cond) = @_;
+
+ if (!$self->conditions->true)
+ {
+ if ($parent)
+ {
+ msg_cond_var ('unsupported', $parent_cond, $parent,
+ "automake does not support conditional definition of "
+ . $self->name . " in $parent");
+ }
+ else
+ {
+ msg_var ('unsupported', $self,
+ "automake does not support " . $self->name
+ . " being defined conditionally");
+ }
+ }
+}
+
+=item C<$str = $var-E<gt>output ([@conds])>
+
+Format all the definitions of C<$var> if C<@cond> is not specified,
+else only that corresponding to C<@cond>.
+
+=cut
+
+sub output ($@)
+{
+ my ($self, @conds) = @_;
+
+ @conds = $self->conditions->conds
+ unless @conds;
+
+ my $res = '';
+ my $name = $self->name;
+
+ foreach my $cond (@conds)
+ {
+ my $def = $self->def ($cond);
+ prog_error ("unknown condition '" . $cond->human . "' for '"
+ . $self->name . "'")
+ unless $def;
+
+ next
+ if $def->pretty == VAR_SILENT;
+
+ $res .= $def->comment;
+
+ my $val = $def->raw_value;
+ my $equals = $def->type eq ':' ? ':=' : '=';
+ my $str = $cond->subst_string;
+
+
+ if ($def->pretty == VAR_ASIS)
+ {
+ my $output_var = "$name $equals $val";
+ $output_var =~ s/^/$str/meg;
+ $res .= "$output_var\n";
+ }
+ elsif ($def->pretty == VAR_PRETTY)
+ {
+ # Suppress escaped new lines. &makefile_wrap will
+ # add them back, maybe at other places.
+ $val =~ s/\\$//mg;
+ my $wrap = makefile_wrap ("$str$name $equals", "$str\t",
+ split (' ', $val));
+
+ # If the last line of the definition is made only of
+ # @substitutions@, append an empty variable to make sure it
+ # cannot be substituted as a blank line (that would confuse
+ # HP-UX Make).
+ $wrap = makefile_wrap ("$str$name $equals", "$str\t",
+ split (' ', $val), '$(am__empty)')
+ if $wrap =~ /\n(\s*@\w+@)+\s*$/;
+
+ $res .= $wrap;
+ }
+ else # ($def->pretty == VAR_SORTED)
+ {
+ # Suppress escaped new lines. &makefile_wrap will
+ # add them back, maybe at other places.
+ $val =~ s/\\$//mg;
+ $res .= makefile_wrap ("$str$name $equals", "$str\t",
+ sort (split (' ' , $val)));
+ }
+ }
+ return $res;
+}
+
+=item C<@values = $var-E<gt>value_as_list ($cond, [$parent, $parent_cond])>
+
+Get the value of C<$var> as a list, given a specified condition,
+without recursing through any subvariables.
+
+C<$cond> is the condition of interest. C<$var> does not need
+to be defined for condition C<$cond> exactly, but it needs
+to be defined for at most one condition implied by C<$cond>.
+
+C<$parent> and C<$parent_cond> designate the name and the condition
+of the parent variable, i.e., the variable in which C<$var> is
+being expanded. These are used in diagnostics.
+
+For example, if C<A> is defined as "C<foo $(B) bar>" in condition
+C<TRUE>, calling C<rvar ('A')->value_as_list (TRUE)> will return
+C<("foo", "$(B)", "bar")>.
+
+=cut
+
+sub value_as_list ($$;$$)
+{
+ my ($self, $cond, $parent, $parent_cond) = @_;
+ my @result;
+
+ # Get value for given condition
+ my $onceflag;
+ foreach my $vcond ($self->conditions->conds)
+ {
+ if ($vcond->true_when ($cond))
+ {
+ # If there is more than one definitions of $var matching
+ # $cond then we are in trouble: tell the user we need a
+ # paddle. Continue by merging results from all conditions,
+ # although it doesn't make much sense.
+ $self->check_defined_unconditionally ($parent, $parent_cond)
+ if $onceflag;
+ $onceflag = 1;
+
+ my $val = $self->rdef ($vcond)->value;
+ push @result, split (' ', $val);
+ }
+ }
+ return @result;
+}
+
+=item C<@values = $var-E<gt>value_as_list_recursive ([%options])>
+
+Return the contents of C<$var> as a list, split on whitespace. This
+will recursively follow C<$(...)> and C<${...}> inclusions. It
+preserves C<@...@> substitutions.
+
+C<%options> is a list of option for C<Variable::traverse_recursively>
+(see this method). The most useful is C<cond_filter>:
+
+ $var->value_as_list_recursive (cond_filter => $cond)
+
+will return the contents of C<$var> and any subvariable in all
+conditions implied by C<$cond>.
+
+C<%options> can also carry options specific to C<value_as_list_recursive>.
+Presently, the only such option is C<location =E<gt> 1> which instructs
+C<value_as_list_recursive> to return a list of C<[$location, @values]> pairs.
+
+=cut
+
+sub value_as_list_recursive ($;%)
+{
+ my ($var, %options) = @_;
+
+ return $var->traverse_recursively
+ (# Construct [$location, $value] pairs if requested.
+ sub {
+ my ($var, $val, $cond, $full_cond) = @_;
+ return [$var->rdef ($cond)->location, $val] if $options{'location'};
+ return $val;
+ },
+ # Collect results.
+ sub {
+ my ($var, $parent_cond, @allresults) = @_;
+ return map { my ($cond, @vals) = @$_; @vals } @allresults;
+ },
+ %options);
+}
+
+
+=item C<$bool = $var-E<gt>has_conditional_contents>
+
+Return 1 if C<$var> or one of its subvariable was conditionally
+defined. Return 0 otherwise.
+
+=cut
+
+sub has_conditional_contents ($)
+{
+ my ($self) = @_;
+
+ # Traverse the variable recursively until we
+ # find a variable defined conditionally.
+ # Use 'die' to abort the traversal, and pass it '$full_cond'
+ # to we can find easily whether the 'eval' block aborted
+ # because we found a condition, or for some other error.
+ eval
+ {
+ $self->traverse_recursively
+ (sub
+ {
+ my ($subvar, $val, $cond, $full_cond) = @_;
+ die $full_cond if ! $full_cond->true;
+ return ();
+ },
+ sub { return (); });
+ };
+ if ($@)
+ {
+ return 1 if ref ($@) && $@->isa ("Automake::Condition");
+ # Propagate other errors.
+ die;
+ }
+ return 0;
+}
+
+
+=item C<$string = $var-E<gt>dump>
+
+Return a string describing all we know about C<$var>.
+For debugging.
+
+=cut
+
+sub dump ($)
+{
+ my ($self) = @_;
+
+ my $text = $self->name . ": \n {\n";
+ foreach my $vcond ($self->conditions->conds)
+ {
+ $text .= " " . $vcond->human . " => " . $self->rdef ($vcond)->dump;
+ }
+ $text .= " }\n";
+ return $text;
+}
+
+
+=back
+
+=head2 Utility functions
+
+=over 4
+
+=item C<@list = scan_variable_expansions ($text)>
+
+Return the list of variable names expanded in C<$text>. Note that
+unlike some other functions, C<$text> is not split on spaces before we
+check for subvariables.
+
+=cut
+
+sub scan_variable_expansions ($)
+{
+ my ($text) = @_;
+ my @result = ();
+
+ # Strip comments.
+ $text =~ s/#.*$//;
+
+ # Record each use of ${stuff} or $(stuff) that does not follow a $.
+ while ($text =~ /(?<!\$)\$(?:\{([^\}]*)\}|\(([^\)]*)\))/g)
+ {
+ my $var = $1 || $2;
+ # The occurrence may look like $(string1[:subst1=[subst2]]) but
+ # we want only 'string1'.
+ $var =~ s/:[^:=]*=[^=]*$//;
+ push @result, $var;
+ }
+
+ return @result;
+}
+
+=item C<check_variable_expansions ($text, $where)>
+
+Check variable expansions in C<$text> and warn about any name that
+does not conform to POSIX. C<$where> is the location of C<$text>
+for the error message.
+
+=cut
+
+sub check_variable_expansions ($$)
+{
+ my ($text, $where) = @_;
+ # Catch expansion of variables whose name does not conform to POSIX.
+ foreach my $var (scan_variable_expansions ($text))
+ {
+ if ($var !~ /$_VARIABLE_PATTERN/o)
+ {
+ # If the variable name contains a space, it's likely
+ # to be a GNU make extension (such as $(addsuffix ...)).
+ # Mention this in the diagnostic.
+ my $gnuext = "";
+ $gnuext = "\n(probably a GNU make extension)" if $var =~ / /;
+ # Accept recursive variable expansions if so desired
+ # (we hope they are rather portable in practice).
+ if ($var =~ /$_VARIABLE_RECURSIVE_PATTERN/o)
+ {
+ msg ('portability-recursive', $where,
+ "$var: non-POSIX recursive variable expansion$gnuext");
+ }
+ else
+ {
+ msg ('portability', $where, "$var: non-POSIX variable name$gnuext");
+ }
+ }
+ }
+}
+
+
+
+=item C<Automake::Variable::define($varname, $owner, $type, $cond, $value, $comment, $where, $pretty)>
+
+Define or append to a new variable.
+
+C<$varname>: the name of the variable being defined.
+
+C<$owner>: owner of the variable (one of C<VAR_MAKEFILE>,
+C<VAR_CONFIGURE>, or C<VAR_AUTOMAKE>, defined by L<Automake::VarDef>).
+Variables can be overridden, provided the new owner is not weaker
+(C<VAR_AUTOMAKE> < C<VAR_CONFIGURE> < C<VAR_MAKEFILE>).
+
+C<$type>: the type of the assignment (C<''> for C<FOO = bar>,
+C<':'> for C<FOO := bar>, and C<'+'> for C<'FOO += bar'>).
+
+C<$cond>: the C<Condition> in which C<$var> is being defined.
+
+C<$value>: the value assigned to C<$var> in condition C<$cond>.
+
+C<$comment>: any comment (C<'# bla.'>) associated with the assignment.
+Comments from C<+=> assignments stack with comments from the last C<=>
+assignment.
+
+C<$where>: the C<Location> of the assignment.
+
+C<$pretty>: whether C<$value> should be pretty printed (one of
+C<VAR_ASIS>, C<VAR_PRETTY>, C<VAR_SILENT>, or C<VAR_SORTED>, defined
+by by L<Automake::VarDef>). C<$pretty> applies only to real
+assignments. I.e., it does not apply to a C<+=> assignment (except
+when part of it is being done as a conditional C<=> assignment).
+
+This function will all run any hook registered with the C<hook>
+function.
+
+=cut
+
+sub define ($$$$$$$$)
+{
+ my ($var, $owner, $type, $cond, $value, $comment, $where, $pretty) = @_;
+
+ prog_error "$cond is not a reference"
+ unless ref $cond;
+
+ prog_error "$where is not a reference"
+ unless ref $where;
+
+ prog_error "pretty argument missing"
+ unless defined $pretty && ($pretty == VAR_ASIS
+ || $pretty == VAR_PRETTY
+ || $pretty == VAR_SILENT
+ || $pretty == VAR_SORTED);
+
+ error $where, "bad characters in variable name '$var'"
+ if $var !~ /$_VARIABLE_PATTERN/o;
+
+ # ':='-style assignments are not acknowledged by POSIX. Moreover it
+ # has multiple meanings. In GNU make or BSD make it means "assign
+ # with immediate expansion", while in OSF make it is used for
+ # conditional assignments.
+ msg ('portability', $where, "':='-style assignments are not portable")
+ if $type eq ':';
+
+ check_variable_expansions ($value, $where);
+
+ # If there's a comment, make sure it is \n-terminated.
+ if ($comment)
+ {
+ chomp $comment;
+ $comment .= "\n";
+ }
+ else
+ {
+ $comment = '';
+ }
+
+ my $self = _cvar $var;
+
+ my $def = $self->def ($cond);
+ my $new_var = $def ? 0 : 1;
+
+ # Additional checks for Automake definitions.
+ if ($owner == VAR_AUTOMAKE && ! $new_var)
+ {
+ # An Automake variable must be consistently defined with the same
+ # sign by Automake.
+ if ($def->type ne $type && $def->owner == VAR_AUTOMAKE)
+ {
+ error ($def->location,
+ "Automake variable '$var' was set with '"
+ . $def->type . "=' here ...", partial => 1);
+ error ($where, "... and is now set with '$type=' here.");
+ prog_error ("Automake variable assignments should be consistently\n"
+ . "defined with the same sign");
+ }
+
+ # If Automake tries to override a value specified by the user,
+ # just don't let it do.
+ if ($def->owner != VAR_AUTOMAKE)
+ {
+ if (! exists $_silent_variable_override{$var})
+ {
+ my $condmsg = ($cond == TRUE
+ ? '' : (" in condition '" . $cond->human . "'"));
+ msg_cond_var ('override', $cond, $var,
+ "user variable '$var' defined here$condmsg ...",
+ partial => 1);
+ msg ('override', $where,
+ "... overrides Automake variable '$var' defined here");
+ }
+ verb ("refusing to override the user definition of:\n"
+ . $self->dump ."with '" . $cond->human . "' => '$value'");
+ return;
+ }
+ }
+
+ # Differentiate assignment types.
+
+ # 1. append (+=) to a variable defined for current condition
+ if ($type eq '+' && ! $new_var)
+ {
+ $def->append ($value, $comment);
+ $self->{'last-append'} = [];
+
+ # Only increase owners. A VAR_CONFIGURE variable augmented in a
+ # Makefile.am becomes a VAR_MAKEFILE variable.
+ $def->set_owner ($owner, $where->clone)
+ if $owner > $def->owner;
+ }
+ # 2. append (+=) to a variable defined for *another* condition
+ elsif ($type eq '+' && ! $self->conditions->false)
+ {
+ # * Generally, $cond is not TRUE. For instance:
+ # FOO = foo
+ # if COND
+ # FOO += bar
+ # endif
+ # In this case, we declare an helper variable conditionally,
+ # and append it to FOO:
+ # FOO = foo $(am__append_1)
+ # @COND_TRUE@am__append_1 = bar
+ # Of course if FOO is defined under several conditions, we add
+ # $(am__append_1) to each definitions.
+ #
+ # * If $cond is TRUE, we don't need the helper variable. E.g., in
+ # if COND1
+ # FOO = foo1
+ # else
+ # FOO = foo2
+ # endif
+ # FOO += bar
+ # we can add bar directly to all definition of FOO, and output
+ # @COND_TRUE@FOO = foo1 bar
+ # @COND_FALSE@FOO = foo2 bar
+
+ my $lastappend = [];
+ # Do we need an helper variable?
+ if ($cond != TRUE)
+ {
+ # Can we reuse the helper variable created for the previous
+ # append? (We cannot reuse older helper variables because
+ # we must preserve the order of items appended to the
+ # variable.)
+ my $condstr = $cond->string;
+ my $key = "$var:$condstr";
+ my ($appendvar, $appendvarcond) = @{$self->{'last-append'}};
+ if ($appendvar && $condstr eq $appendvarcond)
+ {
+ # Yes, let's simply append to it.
+ $var = $appendvar;
+ $owner = VAR_AUTOMAKE;
+ $self = var ($var);
+ $def = $self->rdef ($cond);
+ $new_var = 0;
+ }
+ else
+ {
+ # No, create it.
+ my $num = ++$_appendvar;
+ my $hvar = "am__append_$num";
+ $lastappend = [$hvar, $condstr];
+ &define ($hvar, VAR_AUTOMAKE, '+',
+ $cond, $value, $comment, $where, $pretty);
+
+ # Now HVAR is to be added to VAR.
+ $comment = '';
+ $value = "\$($hvar)";
+ }
+ }
+
+ # Add VALUE to all definitions of SELF.
+ foreach my $vcond ($self->conditions->conds)
+ {
+ # We have a bit of error detection to do here.
+ # This:
+ # if COND1
+ # X = Y
+ # endif
+ # X += Z
+ # should be rejected because X is not defined for all conditions
+ # where '+=' applies.
+ my $undef_cond = $self->not_always_defined_in_cond ($cond);
+ if (! $undef_cond->false)
+ {
+ error ($where,
+ "cannot apply '+=' because '$var' is not defined "
+ . "in\nthe following conditions:\n "
+ . join ("\n ", map { $_->human } $undef_cond->conds)
+ . "\neither define '$var' in these conditions,"
+ . " or use\n'+=' in the same conditions as"
+ . " the definitions.");
+ }
+ else
+ {
+ &define ($var, $owner, '+', $vcond, $value, $comment,
+ $where, $pretty);
+ }
+ }
+ $self->{'last-append'} = $lastappend;
+ }
+ # 3. first assignment (=, :=, or +=)
+ else
+ {
+ # There must be no previous value unless the user is redefining
+ # an Automake variable or an AC_SUBST variable for an existing
+ # condition.
+ _check_ambiguous_condition ($self, $cond, $where)
+ unless (!$new_var
+ && (($def->owner == VAR_AUTOMAKE && $owner != VAR_AUTOMAKE)
+ || $def->owner == VAR_CONFIGURE));
+
+ # Never decrease an owner.
+ $owner = $def->owner
+ if ! $new_var && $owner < $def->owner;
+
+ # Assignments to a macro set its location. We don't adjust
+ # locations for '+='. Ideally I suppose we would associate
+ # line numbers with random bits of text.
+ $def = new Automake::VarDef ($var, $value, $comment, $where->clone,
+ $type, $owner, $pretty);
+ $self->set ($cond, $def);
+ push @_var_order, $var;
+ }
+
+ # Call any defined hook. This helps to update some internal state
+ # *while* parsing the file. For instance the handling of SUFFIXES
+ # requires this (see var_SUFFIXES_trigger).
+ &{$_hooks{$var}}($type, $value) if exists $_hooks{$var};
+}
+
+=item C<variable_delete ($varname, [@conds])>
+
+Forget about C<$varname> under the conditions C<@conds>, or completely
+if C<@conds> is empty.
+
+=cut
+
+sub variable_delete ($@)
+{
+ my ($var, @conds) = @_;
+
+ if (!@conds)
+ {
+ delete $_variable_dict{$var};
+ }
+ else
+ {
+ for my $cond (@conds)
+ {
+ delete $_variable_dict{$var}{'defs'}{$cond};
+ }
+ }
+ if ($var =~ /_([[:alnum:]]+)$/)
+ {
+ delete $_primary_dict{$1}{$var};
+ }
+}
+
+=item C<$str = variables_dump>
+
+Return a string describing all we know about all variables.
+For debugging.
+
+=cut
+
+sub variables_dump ()
+{
+ my $text = "all variables:\n{\n";
+ foreach my $var (variables())
+ {
+ $text .= $var->dump;
+ }
+ $text .= "}\n";
+ return $text;
+}
+
+
+=item C<$var = set_seen ($varname)>
+
+=item C<$var = $var-E<gt>set_seen>
+
+Mark all definitions of this variable as examined, if the variable
+exists. See L<Automake::VarDef::set_seen>.
+
+Return the C<Variable> object if the variable exists, or 0
+otherwise (i.e., as the C<var> function).
+
+=cut
+
+sub set_seen ($)
+{
+ my ($self) = @_;
+ $self = ref $self ? $self : var $self;
+
+ return 0 unless $self;
+
+ for my $c ($self->conditions->conds)
+ {
+ $self->rdef ($c)->set_seen;
+ }
+
+ return $self;
+}
+
+
+=item C<$count = require_variables ($where, $reason, $cond, @variables)>
+
+Make sure that each supplied variable is defined in C<$cond>.
+Otherwise, issue a warning showing C<$reason> (C<$reason> should be
+the reason why these variables are required, for instance C<'option foo
+used'>). If we know which macro can define this variable, hint the
+user. Return the number of undefined variables.
+
+=cut
+
+sub require_variables ($$$@)
+{
+ my ($where, $reason, $cond, @vars) = @_;
+ my $res = 0;
+ $reason .= ' but ' unless $reason eq '';
+
+ $configure_ac = find_configure_ac
+ unless defined $configure_ac;
+
+ VARIABLE:
+ foreach my $var (@vars)
+ {
+ # Nothing to do if the variable exists.
+ next VARIABLE
+ if vardef ($var, $cond);
+
+ my $text = "$reason'$var' is undefined\n";
+ my $v = var $var;
+ if ($v)
+ {
+ my $undef_cond = $v->not_always_defined_in_cond ($cond);
+ next VARIABLE
+ if $undef_cond->false;
+ $text .= ("in the following conditions:\n "
+ . join ("\n ", map { $_->human } $undef_cond->conds)
+ . "\n");
+ }
+
+ ++$res;
+
+ if (exists $_am_macro_for_var{$var})
+ {
+ my $mac = $_am_macro_for_var{$var};
+ $text .= " The usual way to define '$var' is to add "
+ . "'$mac'\n to '$configure_ac' and run 'aclocal' and "
+ . "'autoconf' again.";
+ # aclocal will not warn about undefined macros unless it
+ # starts with AM_.
+ $text .= "\n If '$mac' is in '$configure_ac', make sure\n"
+ . " its definition is in aclocal's search path."
+ unless $mac =~ /^AM_/;
+ }
+ elsif (exists $_ac_macro_for_var{$var})
+ {
+ $text .= " The usual way to define '$var' is to add "
+ . "'$_ac_macro_for_var{$var}'\n to '$configure_ac' and "
+ . "run 'autoconf' again.";
+ }
+
+ error $where, $text, uniq_scope => US_GLOBAL;
+ }
+ return $res;
+}
+
+=item C<$count = $var->requires_variables ($reason, @variables)>
+
+Same as C<require_variables>, but a method of Automake::Variable.
+C<@variables> should be defined in the same conditions as C<$var> is
+defined.
+
+=cut
+
+sub requires_variables ($$@)
+{
+ my ($var, $reason, @args) = @_;
+ my $res = 0;
+ for my $cond ($var->conditions->conds)
+ {
+ $res += require_variables ($var->rdef ($cond)->location, $reason,
+ $cond, @args);
+ }
+ return $res;
+}
+
+
+=item C<variable_value ($var)>
+
+Get the C<TRUE> value of a variable, warn if the variable is
+conditionally defined. C<$var> can be either a variable name
+or a C<Automake::Variable> instance (this allows calls such
+as C<$var-E<gt>variable_value>).
+
+=cut
+
+sub variable_value ($)
+{
+ my ($var) = @_;
+ my $v = ref ($var) ? $var : var ($var);
+ return () unless $v;
+ $v->check_defined_unconditionally;
+ my $d = $v->def (TRUE);
+ return $d ? $d->value : "";
+}
+
+=item C<$str = output_variables>
+
+Format definitions for all variables.
+
+=cut
+
+sub output_variables ()
+{
+ my $res = '';
+ # We output variables it in the same order in which they were
+ # defined (skipping duplicates).
+ my @vars = uniq @_var_order;
+
+ # Output all the Automake variables. If the user changed one,
+ # then it is now marked as VAR_CONFIGURE or VAR_MAKEFILE.
+ foreach my $var (@vars)
+ {
+ my $v = rvar $var;
+ foreach my $cond ($v->conditions->conds)
+ {
+ $res .= $v->output ($cond)
+ if $v->rdef ($cond)->owner == VAR_AUTOMAKE;
+ }
+ }
+
+ # Now dump the user variables that were defined.
+ foreach my $var (@vars)
+ {
+ my $v = rvar $var;
+ foreach my $cond ($v->conditions->conds)
+ {
+ $res .= $v->output ($cond)
+ if $v->rdef ($cond)->owner != VAR_AUTOMAKE;
+ }
+ }
+ return $res;
+}
+
+=item C<$var-E<gt>traverse_recursively (&fun_item, &fun_collect, [cond_filter =E<gt> $cond_filter], [inner_expand =E<gt> 1], [skip_ac_subst =E<gt> 1])>
+
+Split the value of the Automake::Variable C<$var> on space, and
+traverse its components recursively.
+
+If C<$cond_filter> is an C<Automake::Condition>, process any
+conditions which are true when C<$cond_filter> is true. Otherwise,
+process all conditions.
+
+We distinguish two kinds of items in the content of C<$var>.
+Terms that look like C<$(foo)> or C<${foo}> are subvariables
+and cause recursion. Other terms are assumed to be filenames.
+
+Each time a filename is encountered, C<&fun_item> is called with the
+following arguments:
+
+ ($var, -- the Automake::Variable we are currently
+ traversing
+ $val, -- the item (i.e., filename) to process
+ $cond, -- the Condition for the $var definition we are
+ examining (ignoring the recursion context)
+ $full_cond) -- the full Condition, taking into account
+ conditions inherited from parent variables
+ during recursion
+
+If C<inner_expand> is set, variable references occurring in filename
+(as in C<$(BASE).ext>) are expanded before the filename is passed to
+C<&fun_item>.
+
+If C<skip_ac_subst> is set, Autoconf @substitutions@ will be skipped,
+i.e., C<&fun_item> will never be called for them.
+
+C<&fun_item> may return a list of items, they will be passed to
+C<&fun_store> later on. Define C<&fun_item> or @<&fun_store> as
+C<undef> when they serve no purpose.
+
+Once all items of a variable have been processed, the result (of the
+calls to C<&fun_items>, or of recursive traversals of subvariables)
+are passed to C<&fun_collect>. C<&fun_collect> receives three
+arguments:
+
+ ($var, -- the variable being traversed
+ $parent_cond, -- the Condition inherited from parent
+ variables during recursion
+ @condlist) -- a list of [$cond, @results] pairs
+ where each $cond appear only once, and @result
+ are all the results for this condition.
+
+Typically you should do C<$cond->merge ($parent_cond)> to recompute
+the C<$full_cond> associated to C<@result>. C<&fun_collect> may
+return a list of items, that will be used as the result of
+C<Automake::Variable::traverse_recursively> (the top-level, or its
+recursive calls).
+
+=cut
+
+# Contains a stack of 'from' and 'to' parts of variable
+# substitutions currently in force.
+my @_substfroms;
+my @_substtos;
+sub traverse_recursively ($&&;%)
+{
+ ++$_traversal;
+ @_substfroms = ();
+ @_substtos = ();
+ my ($var, $fun_item, $fun_collect, %options) = @_;
+ my $cond_filter = $options{'cond_filter'};
+ my $inner_expand = $options{'inner_expand'};
+ my $skip_ac_subst = $options{'skip_ac_subst'};
+ return $var->_do_recursive_traversal ($var,
+ $fun_item, $fun_collect,
+ $cond_filter, TRUE, $inner_expand,
+ $skip_ac_subst)
+}
+
+# The guts of Automake::Variable::traverse_recursively.
+sub _do_recursive_traversal ($$&&$$$$)
+{
+ my ($var, $parent, $fun_item, $fun_collect, $cond_filter, $parent_cond,
+ $inner_expand, $skip_ac_subst) = @_;
+
+ $var->set_seen;
+
+ if ($var->{'scanned'} == $_traversal)
+ {
+ err_var $var, "variable '" . $var->name() . "' recursively defined";
+ return ();
+ }
+ $var->{'scanned'} = $_traversal;
+
+ my @allresults = ();
+ my $cond_once = 0;
+ foreach my $cond ($var->conditions->conds)
+ {
+ if (ref $cond_filter)
+ {
+ # Ignore conditions that don't match $cond_filter.
+ next if ! $cond->true_when ($cond_filter);
+ # If we found out several definitions of $var
+ # match $cond_filter then we are in trouble.
+ # Tell the user we don't support this.
+ $var->check_defined_unconditionally ($parent, $parent_cond)
+ if $cond_once;
+ $cond_once = 1;
+ }
+ my @result = ();
+ my $full_cond = $cond->merge ($parent_cond);
+
+ my @to_process = $var->value_as_list ($cond, $parent, $parent_cond);
+ while (@to_process)
+ {
+ my $val = shift @to_process;
+ # If $val is a variable (i.e. ${foo} or $(bar), not a filename),
+ # handle the sub variable recursively.
+ # (Backslashes before '}' and ')' within brackets are here to
+ # please Emacs's indentation.)
+ if ($val =~ /^\$\{([^\}]*)\}$/ || $val =~ /^\$\(([^\)]*)\)$/)
+ {
+ my $subvarname = $1;
+
+ # If the user uses a losing variable name, just ignore it.
+ # This isn't ideal, but people have requested it.
+ next if ($subvarname =~ /\@.*\@/);
+
+ # See if the variable is actually a substitution reference
+ my ($from, $to);
+ # This handles substitution references like ${foo:.a=.b}.
+ if ($subvarname =~ /^([^:]*):([^=]*)=(.*)$/o)
+ {
+ $subvarname = $1;
+ $to = $3;
+ $from = quotemeta $2;
+ }
+
+ my $subvar = var ($subvarname);
+ # Don't recurse into undefined variables.
+ next unless $subvar;
+
+ push @_substfroms, $from;
+ push @_substtos, $to;
+
+ my @res = $subvar->_do_recursive_traversal ($parent,
+ $fun_item,
+ $fun_collect,
+ $cond_filter,
+ $full_cond,
+ $inner_expand,
+ $skip_ac_subst);
+ push (@result, @res);
+
+ pop @_substfroms;
+ pop @_substtos;
+
+ next;
+ }
+ # Try to expand variable references inside filenames such as
+ # '$(NAME).txt'. We do not handle ':.foo=.bar'
+ # substitutions, but it would make little sense to use this
+ # here anyway.
+ elsif ($inner_expand
+ && ($val =~ /\$\{([^\}]*)\}/ || $val =~ /\$\(([^\)]*)\)/))
+ {
+ my $subvarname = $1;
+ my $subvar = var $subvarname;
+ if ($subvar)
+ {
+ # Replace the reference by its value, and reschedule
+ # for expansion.
+ foreach my $c ($subvar->conditions->conds)
+ {
+ if (ref $cond_filter)
+ {
+ # Ignore conditions that don't match $cond_filter.
+ next if ! $c->true_when ($cond_filter);
+ # If we found out several definitions of $var
+ # match $cond_filter then we are in trouble.
+ # Tell the user we don't support this.
+ $subvar->check_defined_unconditionally ($var,
+ $full_cond)
+ if $cond_once;
+ $cond_once = 1;
+ }
+ my $subval = $subvar->rdef ($c)->value;
+ $val =~ s/\$\{$subvarname\}/$subval/g;
+ $val =~ s/\$\($subvarname\)/$subval/g;
+ unshift @to_process, split (' ', $val);
+ }
+ next;
+ }
+ # We do not know any variable with this name. Fall through
+ # to filename processing.
+ }
+ elsif ($skip_ac_subst && $val =~ /^\@.+\@$/)
+ {
+ next;
+ }
+
+ if ($fun_item) # $var is a filename we must process
+ {
+ my $substnum=$#_substfroms;
+ while ($substnum >= 0)
+ {
+ $val =~ s/$_substfroms[$substnum]$/$_substtos[$substnum]/
+ if defined $_substfroms[$substnum];
+ $substnum -= 1;
+ }
+
+ # Make sure you update the doc of
+ # Automake::Variable::traverse_recursively
+ # if you change the prototype of &fun_item.
+ my @transformed = &$fun_item ($var, $val, $cond, $full_cond);
+ push (@result, @transformed);
+ }
+ }
+ push (@allresults, [$cond, @result]) if @result;
+ }
+
+ # We only care about _recursive_ variable definitions. The user
+ # is free to use the same variable several times in the same definition.
+ $var->{'scanned'} = -1;
+
+ return ()
+ unless $fun_collect;
+ # Make sure you update the doc of Automake::Variable::traverse_recursively
+ # if you change the prototype of &fun_collect.
+ return &$fun_collect ($var, $parent_cond, @allresults);
+}
+
+# _hash_varname ($VAR)
+# --------------------
+# Compute the key associated $VAR in %_gen_varname.
+# See _gen_varname() below.
+sub _hash_varname ($)
+{
+ my ($var) = @_;
+ my $key = '';
+ foreach my $cond ($var->conditions->conds)
+ {
+ my @values = $var->value_as_list ($cond);
+ $key .= "($cond)@values";
+ }
+ return $key;
+}
+
+# _hash_values (@VALUES)
+# ----------------------
+# Hash @VALUES for %_gen_varname. @VALUES should be a list
+# of pairs: ([$cond, @values], [$cond, @values], ...).
+# See _gen_varname() below.
+sub _hash_values (@)
+{
+ my $key = '';
+ foreach my $pair (@_)
+ {
+ my ($cond, @values) = @$pair;
+ $key .= "($cond)@values";
+ }
+ return $key;
+}
+# ($VARNAME, $GENERATED)
+# _gen_varname ($BASE, @DEFINITIONS)
+# ----------------------------------
+# Return a variable name starting with $BASE, that will be
+# used to store definitions @DEFINITIONS.
+# @DEFINITIONS is a list of pair [$COND, @OBJECTS].
+#
+# If we already have a $BASE-variable containing @DEFINITIONS, reuse
+# it and set $GENERATED to 0. Otherwise construct a new name and set
+# $GENERATED to 1.
+#
+# This way, we avoid combinatorial explosion of the generated
+# variables. Especially, in a Makefile such as:
+#
+# | if FOO1
+# | A1=1
+# | endif
+# |
+# | if FOO2
+# | A2=2
+# | endif
+# |
+# | ...
+# |
+# | if FOON
+# | AN=N
+# | endif
+# |
+# | B=$(A1) $(A2) ... $(AN)
+# |
+# | c_SOURCES=$(B)
+# | d_SOURCES=$(B)
+#
+# The generated c_OBJECTS and d_OBJECTS will share the same variable
+# definitions.
+#
+# This setup can be the case of a testsuite containing lots (>100) of
+# small C programs, all testing the same set of source files.
+sub _gen_varname ($@)
+{
+ my $base = shift;
+ my $key = _hash_values @_;
+
+ return ($_gen_varname{$base}{$key}, 0)
+ if exists $_gen_varname{$base}{$key};
+
+ my $num = 1 + ($_gen_varname_n{$base} || 0);
+ $_gen_varname_n{$base} = $num;
+ my $name = "${base}_${num}";
+ $_gen_varname{$base}{$key} = $name;
+
+ return ($name, 1);
+}
+
+=item C<$resvar = transform_variable_recursively ($var, $resvar, $base, $nodefine, $where, &fun_item, [%options])>
+
+=item C<$resvar = $var-E<gt>transform_variable_recursively ($resvar, $base, $nodefine, $where, &fun_item, [%options])>
+
+Traverse C<$var> recursively, and create a C<$resvar> variable in
+which each filename in C<$var> have been transformed using
+C<&fun_item>. (C<$var> may be a variable name in the first syntax.
+It must be an C<Automake::Variable> otherwise.)
+
+Helper variables (corresponding to sub-variables of C<$var>) are
+created as needed, using C<$base> as prefix.
+
+Arguments are:
+ $var source variable to traverse
+ $resvar resulting variable to define
+ $base prefix to use when naming subvariables of $resvar
+ $nodefine if true, traverse $var but do not define any variable
+ (this assumes &fun_item has some useful side-effect)
+ $where context into which variable definitions are done
+ &fun_item a transformation function -- see the documentation
+ of &fun_item in Automake::Variable::traverse_recursively.
+
+This returns the string C<"\$($RESVAR)">.
+
+C<%options> is a list of options to pass to
+C<Variable::traverse_recursively> (see this method).
+
+=cut
+
+sub transform_variable_recursively ($$$$$&;%)
+{
+ my ($var, $resvar, $base, $nodefine, $where, $fun_item, %options) = @_;
+
+ $var = ref $var ? $var : rvar $var;
+
+ my $res = $var->traverse_recursively
+ ($fun_item,
+ # The code that defines the variable holding the result
+ # of the recursive transformation of a subvariable.
+ sub {
+ my ($subvar, $parent_cond, @allresults) = @_;
+ # If no definition is required, return anything: the result is
+ # not expected to be used, only the side effect of $fun_item
+ # should matter.
+ return 'report-me' if $nodefine;
+ # Cache $subvar, so that we reuse it if @allresults is the same.
+ my $key = _hash_varname $subvar;
+ $_gen_varname{$base}{$key} = $subvar->name;
+
+ # Find a name for the variable, unless this is the top-variable
+ # for which we want to use $resvar.
+ my ($varname, $generated) =
+ ($var != $subvar) ? _gen_varname ($base, @allresults) : ($resvar, 1);
+
+ # Define the variable if we are not reusing a previously
+ # defined variable. At the top-level, we can also avoid redefining
+ # the variable if it already contains the same values.
+ if ($generated
+ && !($varname eq $var->name && $key eq _hash_values @allresults))
+ {
+ # If the new variable is the source variable, we assume
+ # we are trying to override a user variable. Delete
+ # the old variable first.
+ variable_delete ($varname) if $varname eq $var->name;
+ # Define an empty variable in condition TRUE if there is no
+ # result.
+ @allresults = ([TRUE, '']) unless @allresults;
+ # Define the rewritten variable in all conditions not
+ # already covered by user definitions.
+ foreach my $pair (@allresults)
+ {
+ my ($cond, @result) = @$pair;
+ my $var = var $varname;
+ my @conds = ($var
+ ? $var->not_always_defined_in_cond ($cond)->conds
+ : $cond);
+
+ foreach (@conds)
+ {
+ define ($varname, VAR_AUTOMAKE, '', $_, "@result",
+ '', $where, VAR_PRETTY);
+ }
+ }
+ }
+ set_seen $varname;
+ return "\$($varname)";
+ },
+ %options);
+ return $res;
+}
+
+
+=back
+
+=head1 SEE ALSO
+
+L<Automake::VarDef>, L<Automake::Condition>,
+L<Automake::DisjConditions>, L<Automake::Location>.
+
+=cut
+
+1;
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/lib/Automake/Version.pm b/lib/Automake/Version.pm
new file mode 100644
index 000000000..65a6f21ec
--- /dev/null
+++ b/lib/Automake/Version.pm
@@ -0,0 +1,159 @@
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+package Automake::Version;
+
+use 5.006;
+use strict;
+use Automake::ChannelDefs;
+
+=head1 NAME
+
+Automake::Version - version comparison
+
+=head1 SYNOPSIS
+
+ use Automake::Version;
+
+ print "Version $version is older than required version $required\n"
+ if Automake::Version::check ($version, $required);
+
+=head1 DESCRIPTION
+
+This module provides support for comparing versions string
+as they are used in Automake.
+
+A version is a string that looks like
+C<MAJOR.MINOR[.MICRO][ALPHA][-FORK]> where C<MAJOR>, C<MINOR>, and
+C<MICRO> are digits, C<ALPHA> is a character, and C<FORK> any
+alphanumeric word.
+
+Usually, C<ALPHA> is used to label alpha releases or intermediate
+snapshots, C<FORK> is used for git branches or patched releases, and
+C<MICRO> is used for bug fixes releases on the C<MAJOR.MINOR> branch.
+
+For the purpose of ordering, C<1.4> is the same as C<1.4.0>, but
+C<1.4g> is the same as C<1.4.99g>. The C<FORK> identifier is ignored
+in the ordering, except when it looks like C<-pMINOR[ALPHA]>: some
+versions were labeled like C<1.4-p3a>, this is the same as an alpha
+release labeled C<1.4.3a>. Yes, it's horrible, but Automake did not
+support two-dot versions in the past.
+
+=head2 FUNCTIONS
+
+=over 4
+
+=item C<split ($version)>
+
+Split the string C<$version> into the corresponding C<(MAJOR, MINOR,
+MICRO, ALPHA, FORK)> tuple. For instance C<'1.4g'> would be split
+into C<(1, 4, 99, 'g', '')>. Return C<()> on error.
+
+=cut
+
+sub split ($)
+{
+ my ($ver) = @_;
+
+ # Special case for versions like 1.4-p2a.
+ if ($ver =~ /^(\d+)\.(\d+)(?:-p(\d+)([a-z]+)?)$/)
+ {
+ return ($1, $2, $3, $4 || '', '');
+ }
+ # Common case.
+ elsif ($ver =~ /^(\d+)\.(\d+)(?:\.(\d+))?([a-z])?(?:-([A-Za-z0-9]+))?$/)
+ {
+ return ($1, $2, $3 || (defined $4 ? 99 : 0), $4 || '', $5 || '');
+ }
+ return ();
+}
+
+=item C<compare (\@LVERSION, \@RVERSION)>
+
+Compare two version tuples, as returned by C<split>.
+
+Return 1, 0, or -1, if C<LVERSION> is found to be respectively
+greater than, equal to, or less than C<RVERSION>.
+
+=cut
+
+sub compare (\@\@)
+{
+ my @l = @{$_[0]};
+ my @r = @{$_[1]};
+
+ for my $i (0, 1, 2)
+ {
+ return 1 if ($l[$i] > $r[$i]);
+ return -1 if ($l[$i] < $r[$i]);
+ }
+ for my $i (3, 4)
+ {
+ return 1 if ($l[$i] gt $r[$i]);
+ return -1 if ($l[$i] lt $r[$i]);
+ }
+ return 0;
+}
+
+=item C<check($VERSION, $REQUIRED)>
+
+Handles the logic of requiring a version number in Automake.
+C<$VERSION> should be Automake's version, while C<$REQUIRED>
+is the version required by the user input.
+
+Return 0 if the required version is satisfied, 1 otherwise.
+
+=cut
+
+sub check ($$)
+{
+ my ($version, $required) = @_;
+ my @version = Automake::Version::split ($version);
+ my @required = Automake::Version::split ($required);
+
+ prog_error "version is incorrect: $version"
+ if $#version == -1;
+
+ # This should not happen, because process_option_list and split_version
+ # use similar regexes.
+ prog_error "required version is incorrect: $required"
+ if $#required == -1;
+
+ # If we require 3.4n-foo then we require something
+ # >= 3.4n, with the 'foo' fork identifier.
+ return 1
+ if ($required[4] ne '' && $required[4] ne $version[4]);
+
+ return 0 > compare (@version, @required);
+}
+
+1;
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/lib/Automake/Wrap.pm b/lib/Automake/Wrap.pm
new file mode 100644
index 000000000..f351ef1da
--- /dev/null
+++ b/lib/Automake/Wrap.pm
@@ -0,0 +1,166 @@
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+package Automake::Wrap;
+
+use 5.006;
+use strict;
+
+require Exporter;
+use vars '@ISA', '@EXPORT_OK';
+@ISA = qw/Exporter/;
+@EXPORT_OK = qw/wrap makefile_wrap/;
+
+=head1 NAME
+
+Automake::Wrap - a paragraph formatter
+
+=head1 SYNOPSIS
+
+ use Automake::Wrap 'wrap', 'makefile_wrap';
+
+ print wrap ($first_ident, $next_ident, $end_of_line, $max_length,
+ @values);
+
+ print makefile_wrap ("VARIABLE = ", " ", @values);
+
+=head1 DESCRIPTION
+
+This modules provide facility to format list of strings. It is
+comparable to Perl's L<Text::Wrap>, however we can't use L<Text::Wrap>
+because some versions will abort when some word to print exceeds the
+maximum length allowed. (Ticket #17141, fixed in Perl 5.8.0.)
+
+=head2 Functions
+
+=over 4
+
+=cut
+
+# _tab_length ($TXT)
+# ------------------
+# Compute the length of TXT, counting tab characters as 8 characters.
+sub _tab_length($)
+{
+ my ($txt) = @_;
+ my $len = length ($txt);
+ $len += 7 * ($txt =~ tr/\t/\t/);
+ return $len;
+}
+
+=item C<wrap ($head, $fill, $eol, $max_len, @values)>
+
+Format C<@values> as a block of text that starts with C<$head>,
+followed by the strings in C<@values> separated by spaces or by
+C<"$eol\n$fill"> so that the length of each line never exceeds
+C<$max_len>.
+
+The C<$max_len> constraint is ignored for C<@values> items which
+are too big to fit alone one a line.
+
+The constructed paragraph is C<"\n">-terminated.
+
+=cut
+
+sub wrap($$$$@)
+{
+ my ($head, $fill, $eol, $max_len, @values) = @_;
+
+ my $result = $head;
+ my $column = _tab_length ($head);
+
+ my $fill_len = _tab_length ($fill);
+ my $eol_len = _tab_length ($eol);
+
+ my $not_first_word = 0;
+
+ foreach (@values)
+ {
+ my $len = _tab_length ($_);
+
+ # See if the new variable fits on this line.
+ # (The + 1 is for the space we add in front of the value.).
+ if ($column + $len + $eol_len + 1 > $max_len
+ # Do not break before the first word if it does not fit on
+ # the next line anyway.
+ && ($not_first_word || $fill_len + $len + $eol_len + 1 <= $max_len))
+ {
+ # Start a new line.
+ $result .= "$eol\n" . $fill;
+ $column = $fill_len;
+ }
+ elsif ($not_first_word)
+ {
+ # Add a space only if result does not already end
+ # with a space.
+ $_ = " $_" if $result =~ /\S\z/;
+ ++$len;
+ }
+ $result .= $_;
+ $column += $len;
+ $not_first_word = 1;
+ }
+
+ $result .= "\n";
+ return $result;
+}
+
+
+=item C<makefile_wrap ($head, $fill, @values)>
+
+Format C<@values> in a way which is suitable for F<Makefile>s.
+This is comparable to C<wrap>, except C<$eol> is known to
+be C<" \\">, and the maximum length has been hardcoded to C<72>.
+
+A space is appended to C<$head> when this is not already
+the case.
+
+This can be used to format variable definitions or dependency lines.
+
+ makefile_wrap ('VARIABLE =', "\t", @values);
+ makefile_wrap ('rule:', "\t", @dependencies);
+
+=cut
+
+sub makefile_wrap ($$@)
+{
+ my ($head, $fill, @values) = @_;
+ if (@values)
+ {
+ $head .= ' ' if $head =~ /\S\z/;
+ return wrap $head, $fill, " \\", 72, @values;
+ }
+ return "$head\n";
+}
+
+
+1;
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/lib/Automake/XFile.pm b/lib/Automake/XFile.pm
new file mode 100644
index 000000000..bbdbd6d15
--- /dev/null
+++ b/lib/Automake/XFile.pm
@@ -0,0 +1,324 @@
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Written by Akim Demaille <akim@freefriends.org>.
+
+###############################################################
+# The main copy of this file is in Automake's git repository. #
+# Updates should be sent to automake-patches@gnu.org. #
+###############################################################
+
+package Automake::XFile;
+
+=head1 NAME
+
+Automake::XFile - supply object methods for filehandles with error handling
+
+=head1 SYNOPSIS
+
+ use Automake::XFile;
+
+ $fh = new Automake::XFile;
+ $fh->open ("file", "<");
+ # No need to check $FH: we died if open failed.
+ print <$fh>;
+ $fh->close;
+ # No need to check the return value of close: we died if it failed.
+
+ $fh = new Automake::XFile "file", ">";
+ # No need to check $FH: we died if new failed.
+ print $fh "bar\n";
+ $fh->close;
+
+ $fh = new Automake::XFile "file", "r";
+ # No need to check $FH: we died if new failed.
+ defined $fh
+ print <$fh>;
+ undef $fh; # automatically closes the file and checks for errors.
+
+ $fh = new Automake::XFile "file", O_WRONLY | O_APPEND;
+ # No need to check $FH: we died if new failed.
+ print $fh "corge\n";
+
+ $pos = $fh->getpos;
+ $fh->setpos ($pos);
+
+ undef $fh; # automatically closes the file and checks for errors.
+
+ autoflush STDOUT 1;
+
+=head1 DESCRIPTION
+
+C<Automake::XFile> inherits from C<IO::File>. It provides the method
+C<name> returning the file name. It provides dying versions of the
+methods C<close>, C<lock> (corresponding to C<flock>), C<new>,
+C<open>, C<seek>, and C<truncate>. It also overrides the C<getline>
+and C<getlines> methods to translate C<\r\n> to C<\n>.
+
+=cut
+
+use 5.006;
+use strict;
+use vars qw($VERSION @EXPORT @EXPORT_OK $AUTOLOAD @ISA);
+use Carp;
+use Errno;
+use IO::File;
+use File::Basename;
+use Automake::ChannelDefs;
+use Automake::Channels qw(msg);
+use Automake::FileUtils;
+
+require Exporter;
+require DynaLoader;
+
+@ISA = qw(IO::File Exporter DynaLoader);
+
+$VERSION = "1.2";
+
+@EXPORT = @IO::File::EXPORT;
+
+eval {
+ # Make all Fcntl O_XXX and LOCK_XXX constants available for importing
+ require Fcntl;
+ my @O = grep /^(LOCK|O)_/, @Fcntl::EXPORT, @Fcntl::EXPORT_OK;
+ Fcntl->import (@O); # first we import what we want to export
+ push (@EXPORT, @O);
+};
+
+=head2 Methods
+
+=over
+
+=item C<$fh = new Automake::XFile ([$expr, ...]>
+
+Constructor a new XFile object. Additional arguments
+are passed to C<open>, if any.
+
+=cut
+
+sub new
+{
+ my $type = shift;
+ my $class = ref $type || $type || "Automake::XFile";
+ my $fh = $class->SUPER::new ();
+ if (@_)
+ {
+ $fh->open (@_);
+ }
+ $fh;
+}
+
+=item C<$fh-E<gt>open ([$file, ...])>
+
+Open a file, passing C<$file> and further arguments to C<IO::File::open>.
+Die if opening fails. Store the name of the file. Use binmode for writing.
+
+=cut
+
+sub open
+{
+ my $fh = shift;
+ my ($file, $mode) = @_;
+
+ # WARNING: Gross hack: $FH is a typeglob: use its hash slot to store
+ # the 'name' of the file we are opening. See the example with
+ # io_socket_timeout in IO::Socket for more, and read Graham's
+ # comment in IO::Handle.
+ ${*$fh}{'autom4te_xfile_file'} = "$file";
+
+ if (!$fh->SUPER::open (@_))
+ {
+ fatal "cannot open $file: $!";
+ }
+
+ # In case we're running under MSWindows, don't write with CRLF.
+ # (This circumvents a bug in at least Cygwin bash where the shell
+ # parsing fails on lines ending with the continuation character '\'
+ # and CRLF).
+ # Correctly recognize usages like:
+ # - open ($file, "w")
+ # - open ($file, "+<")
+ # - open (" >$file")
+ binmode $fh
+ if (defined $mode && $mode =~ /^[+>wa]/ or $file =~ /^\s*>/);
+}
+
+=item C<$fh-E<gt>close>
+
+Close the file, handling errors.
+
+=cut
+
+sub close
+{
+ my $fh = shift;
+ if (!$fh->SUPER::close (@_))
+ {
+ my $file = $fh->name;
+ Automake::FileUtils::handle_exec_errors $file
+ unless $!;
+ fatal "cannot close $file: $!";
+ }
+}
+
+=item C<$line = $fh-E<gt>getline>
+
+Read and return a line from the file. Ensure C<\r\n> is translated to
+C<\n> on input files.
+
+=cut
+
+# Some native Windows/perl installations fail to translate \r\n to \n on
+# input so we do that here.
+sub getline
+{
+ local $_ = $_[0]->SUPER::getline;
+ # Perform a _global_ replacement: $_ may can contains many lines
+ # in slurp mode ($/ = undef).
+ s/\015\012/\n/gs if defined $_;
+ return $_;
+}
+
+=item C<@lines = $fh-E<gt>getlines>
+
+Slurp lines from the files.
+
+=cut
+
+sub getlines
+{
+ my @res = ();
+ my $line;
+ push @res, $line while $line = $_[0]->getline;
+ return @res;
+}
+
+=item C<$name = $fh-E<gt>name>
+
+Return the name of the file.
+
+=cut
+
+sub name
+{
+ my $fh = shift;
+ return ${*$fh}{'autom4te_xfile_file'};
+}
+
+=item C<$fh-E<gt>lock>
+
+Lock the file using C<flock>. If locking fails for reasons other than
+C<flock> being unsupported, then error out if C<$ENV{'MAKEFLAGS'}> indicates
+that we are spawned from a parallel C<make>.
+
+=cut
+
+sub lock
+{
+ my ($fh, $mode) = @_;
+ # Cannot use @_ here.
+
+ # Unless explicitly configured otherwise, Perl implements its 'flock' with the
+ # first of flock(2), fcntl(2), or lockf(3) that works. These can fail on
+ # NFS-backed files, with ENOLCK (GNU/Linux) or EOPNOTSUPP (FreeBSD); we
+ # usually ignore these errors. If $ENV{MAKEFLAGS} suggests that a parallel
+ # invocation of 'make' has invoked the tool we serve, report all locking
+ # failures and abort.
+ #
+ # On Unicos, flock(2) and fcntl(2) over NFS hang indefinitely when 'lockd' is
+ # not running. NetBSD NFS clients silently grant all locks. We do not
+ # attempt to defend against these dangers.
+ #
+ # -j is for parallel BSD make, -P is for parallel HP-UX make.
+ if (!flock ($fh, $mode))
+ {
+ my $make_j = (exists $ENV{'MAKEFLAGS'}
+ && " -$ENV{'MAKEFLAGS'}" =~ / (-[BdeikrRsSw]*[jP]|--[jP]|---?jobs)/);
+ my $note = "\nforgo \"make -j\" or use a file system that supports locks";
+ my $file = $fh->name;
+
+ msg ($make_j ? 'fatal' : 'unsupported',
+ "cannot lock $file with mode $mode: $!" . ($make_j ? $note : ""))
+ if $make_j || !($!{ENOLCK} || $!{EOPNOTSUPP});
+ }
+}
+
+=item C<$fh-E<gt>seek ($position, [$whence])>
+
+Seek file to C<$position>. Die if seeking fails.
+
+=cut
+
+sub seek
+{
+ my $fh = shift;
+ # Cannot use @_ here.
+ if (!seek ($fh, $_[0], $_[1]))
+ {
+ my $file = $fh->name;
+ fatal "cannot rewind $file with @_: $!";
+ }
+}
+
+=item C<$fh-E<gt>truncate ($len)>
+
+Truncate the file to length C<$len>. Die on failure.
+
+=cut
+
+sub truncate
+{
+ my ($fh, $len) = @_;
+ if (!truncate ($fh, $len))
+ {
+ my $file = $fh->name;
+ fatal "cannot truncate $file at $len: $!";
+ }
+}
+
+=back
+
+=head1 SEE ALSO
+
+L<perlfunc>,
+L<perlop/"I/O Operators">,
+L<IO::File>
+L<IO::Handle>
+L<IO::Seekable>
+
+=head1 HISTORY
+
+Derived from IO::File.pm by Akim Demaille E<lt>F<akim@freefriends.org>E<gt>.
+
+=cut
+
+1;
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/lib/Automake/local.mk b/lib/Automake/local.mk
new file mode 100644
index 000000000..1a5b35a60
--- /dev/null
+++ b/lib/Automake/local.mk
@@ -0,0 +1,57 @@
+## Included by top-level Makefile for Automake.
+
+## Copyright (C) 1995-2017 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 <https://www.gnu.org/licenses/>.
+
+## ---------------------------------------------------- ##
+## Private perl modules used by automake and aclocal. ##
+## ---------------------------------------------------- ##
+
+perllibdir = $(pkgvdatadir)/Automake
+
+dist_perllib_DATA = \
+ %D%/ChannelDefs.pm \
+ %D%/Channels.pm \
+ %D%/Condition.pm \
+ %D%/Configure_ac.pm \
+ %D%/DisjConditions.pm \
+ %D%/FileUtils.pm \
+ %D%/General.pm \
+ %D%/Getopt.pm \
+ %D%/Item.pm \
+ %D%/ItemDef.pm \
+ %D%/Language.pm \
+ %D%/Location.pm \
+ %D%/Options.pm \
+ %D%/Rule.pm \
+ %D%/RuleDef.pm \
+ %D%/Variable.pm \
+ %D%/VarDef.pm \
+ %D%/Version.pm \
+ %D%/XFile.pm \
+ %D%/Wrap.pm
+
+nodist_perllib_DATA = %D%/Config.pm
+CLEANFILES += $(nodist_perllib_DATA)
+
+%D%/Config.pm: %D%/Config.in Makefile
+ $(AM_V_at)rm -f $@ $@-t
+ $(AM_V_at)$(MKDIR_P) %D%
+ $(AM_V_GEN)in=Config.in \
+ && $(do_subst) <$(srcdir)/%D%/Config.in >$@-t
+ $(generated_file_finalize)
+EXTRA_DIST += %D%/Config.in
+
+# vim: ft=automake noet
diff --git a/lib/COPYING b/lib/COPYING
new file mode 100644
index 000000000..94a9ed024
--- /dev/null
+++ b/lib/COPYING
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ 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 3 of the License, 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 <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/lib/INSTALL b/lib/INSTALL
new file mode 100644
index 000000000..8865734f8
--- /dev/null
+++ b/lib/INSTALL
@@ -0,0 +1,368 @@
+Installation Instructions
+*************************
+
+ Copyright (C) 1994-1996, 1999-2002, 2004-2016 Free Software
+Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved. This file is offered as-is,
+without warranty of any kind.
+
+Basic Installation
+==================
+
+ Briefly, the shell command './configure && make && make install'
+should configure, build, and install this package. The following
+more-detailed instructions are generic; see the 'README' file for
+instructions specific to this package. Some packages provide this
+'INSTALL' file but do not implement all of the features documented
+below. The lack of an optional feature in a given package is not
+necessarily a bug. More recommendations for GNU packages can be found
+in *note Makefile Conventions: (standards)Makefile Conventions.
+
+ The 'configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation. It uses
+those values to create a 'Makefile' in each directory of the package.
+It may also create one or more '.h' files containing system-dependent
+definitions. Finally, it creates a shell script 'config.status' that
+you can run in the future to recreate the current configuration, and a
+file 'config.log' containing compiler output (useful mainly for
+debugging 'configure').
+
+ It can also use an optional file (typically called 'config.cache' and
+enabled with '--cache-file=config.cache' or simply '-C') that saves the
+results of its tests to speed up reconfiguring. Caching is disabled by
+default to prevent problems with accidental use of stale cache files.
+
+ If you need to do unusual things to compile the package, please try
+to figure out how 'configure' could check whether to do them, and mail
+diffs or instructions to the address given in the 'README' so they can
+be considered for the next release. If you are using the cache, and at
+some point 'config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+ The file 'configure.ac' (or 'configure.in') is used to create
+'configure' by a program called 'autoconf'. You need 'configure.ac' if
+you want to change it or regenerate 'configure' using a newer version of
+'autoconf'.
+
+ The simplest way to compile this package is:
+
+ 1. 'cd' to the directory containing the package's source code and type
+ './configure' to configure the package for your system.
+
+ Running 'configure' might take a while. While running, it prints
+ some messages telling which features it is checking for.
+
+ 2. Type 'make' to compile the package.
+
+ 3. Optionally, type 'make check' to run any self-tests that come with
+ the package, generally using the just-built uninstalled binaries.
+
+ 4. Type 'make install' to install the programs and any data files and
+ documentation. When installing into a prefix owned by root, it is
+ recommended that the package be configured and built as a regular
+ user, and only the 'make install' phase executed with root
+ privileges.
+
+ 5. Optionally, type 'make installcheck' to repeat any self-tests, but
+ this time using the binaries in their final installed location.
+ This target does not install anything. Running this target as a
+ regular user, particularly if the prior 'make install' required
+ root privileges, verifies that the installation completed
+ correctly.
+
+ 6. You can remove the program binaries and object files from the
+ source code directory by typing 'make clean'. To also remove the
+ files that 'configure' created (so you can compile the package for
+ a different kind of computer), type 'make distclean'. There is
+ also a 'make maintainer-clean' target, but that is intended mainly
+ for the package's developers. If you use it, you may have to get
+ all sorts of other programs in order to regenerate files that came
+ with the distribution.
+
+ 7. Often, you can also type 'make uninstall' to remove the installed
+ files again. In practice, not all packages have tested that
+ uninstallation works correctly, even though it is required by the
+ GNU Coding Standards.
+
+ 8. Some packages, particularly those that use Automake, provide 'make
+ distcheck', which can by used by developers to test that all other
+ targets like 'make install' and 'make uninstall' work correctly.
+ This target is generally not run by end users.
+
+Compilers and Options
+=====================
+
+ Some systems require unusual options for compilation or linking that
+the 'configure' script does not know about. Run './configure --help'
+for details on some of the pertinent environment variables.
+
+ You can give 'configure' initial values for configuration parameters
+by setting variables in the command line or in the environment. Here is
+an example:
+
+ ./configure CC=c99 CFLAGS=-g LIBS=-lposix
+
+ *Note Defining Variables::, for more details.
+
+Compiling For Multiple Architectures
+====================================
+
+ You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory. To do this, you can use GNU 'make'. 'cd' to the
+directory where you want the object files and executables to go and run
+the 'configure' script. 'configure' automatically checks for the source
+code in the directory that 'configure' is in and in '..'. This is known
+as a "VPATH" build.
+
+ With a non-GNU 'make', it is safer to compile the package for one
+architecture at a time in the source code directory. After you have
+installed the package for one architecture, use 'make distclean' before
+reconfiguring for another architecture.
+
+ On MacOS X 10.5 and later systems, you can create libraries and
+executables that work on multiple system types--known as "fat" or
+"universal" binaries--by specifying multiple '-arch' options to the
+compiler but only a single '-arch' option to the preprocessor. Like
+this:
+
+ ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+ CPP="gcc -E" CXXCPP="g++ -E"
+
+ This is not guaranteed to produce working output in all cases, you
+may have to build one architecture at a time and combine the results
+using the 'lipo' tool if you have problems.
+
+Installation Names
+==================
+
+ By default, 'make install' installs the package's commands under
+'/usr/local/bin', include files under '/usr/local/include', etc. You
+can specify an installation prefix other than '/usr/local' by giving
+'configure' the option '--prefix=PREFIX', where PREFIX must be an
+absolute file name.
+
+ You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files. If you
+pass the option '--exec-prefix=PREFIX' to 'configure', the package uses
+PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files still use the regular prefix.
+
+ In addition, if you use an unusual directory layout you can give
+options like '--bindir=DIR' to specify different values for particular
+kinds of files. Run 'configure --help' for a list of the directories
+you can set and what kinds of files go in them. In general, the default
+for these options is expressed in terms of '${prefix}', so that
+specifying just '--prefix' will affect all of the other directory
+specifications that were not explicitly provided.
+
+ The most portable way to affect installation locations is to pass the
+correct locations to 'configure'; however, many packages provide one or
+both of the following shortcuts of passing variable assignments to the
+'make install' command line to change installation locations without
+having to reconfigure or recompile.
+
+ The first method involves providing an override variable for each
+affected directory. For example, 'make install
+prefix=/alternate/directory' will choose an alternate location for all
+directory configuration variables that were expressed in terms of
+'${prefix}'. Any directories that were specified during 'configure',
+but not in terms of '${prefix}', must each be overridden at install time
+for the entire installation to be relocated. The approach of makefile
+variable overrides for each directory variable is required by the GNU
+Coding Standards, and ideally causes no recompilation. However, some
+platforms have known limitations with the semantics of shared libraries
+that end up requiring recompilation when using this method, particularly
+noticeable in packages that use GNU Libtool.
+
+ The second method involves providing the 'DESTDIR' variable. For
+example, 'make install DESTDIR=/alternate/directory' will prepend
+'/alternate/directory' before all installation names. The approach of
+'DESTDIR' overrides is not required by the GNU Coding Standards, and
+does not work on platforms that have drive letters. On the other hand,
+it does better at avoiding recompilation issues, and works well even
+when some directory options were not specified in terms of '${prefix}'
+at 'configure' time.
+
+Optional Features
+=================
+
+ If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving 'configure' the
+option '--program-prefix=PREFIX' or '--program-suffix=SUFFIX'.
+
+ Some packages pay attention to '--enable-FEATURE' options to
+'configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to '--with-PACKAGE' options, where PACKAGE
+is something like 'gnu-as' or 'x' (for the X Window System). The
+'README' should mention any '--enable-' and '--with-' options that the
+package recognizes.
+
+ For packages that use the X Window System, 'configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the 'configure' options '--x-includes=DIR' and
+'--x-libraries=DIR' to specify their locations.
+
+ Some packages offer the ability to configure how verbose the
+execution of 'make' will be. For these packages, running './configure
+--enable-silent-rules' sets the default to minimal output, which can be
+overridden with 'make V=1'; while running './configure
+--disable-silent-rules' sets the default to verbose, which can be
+overridden with 'make V=0'.
+
+Particular systems
+==================
+
+ On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC
+is not installed, it is recommended to use the following options in
+order to use an ANSI C compiler:
+
+ ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
+
+and if that doesn't work, install pre-built binaries of GCC for HP-UX.
+
+ HP-UX 'make' updates targets which have the same time stamps as their
+prerequisites, which makes it generally unusable when shipped generated
+files such as 'configure' are involved. Use GNU 'make' instead.
+
+ On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
+parse its '<wchar.h>' header file. The option '-nodtk' can be used as a
+workaround. If GNU CC is not installed, it is therefore recommended to
+try
+
+ ./configure CC="cc"
+
+and if that doesn't work, try
+
+ ./configure CC="cc -nodtk"
+
+ On Solaris, don't put '/usr/ucb' early in your 'PATH'. This
+directory contains several dysfunctional programs; working variants of
+these programs are available in '/usr/bin'. So, if you need '/usr/ucb'
+in your 'PATH', put it _after_ '/usr/bin'.
+
+ On Haiku, software installed for all users goes in '/boot/common',
+not '/usr/local'. It is recommended to use the following options:
+
+ ./configure --prefix=/boot/common
+
+Specifying the System Type
+==========================
+
+ There may be some features 'configure' cannot figure out
+automatically, but needs to determine by the type of machine the package
+will run on. Usually, assuming the package is built to be run on the
+_same_ architectures, 'configure' can figure that out, but if it prints
+a message saying it cannot guess the machine type, give it the
+'--build=TYPE' option. TYPE can either be a short name for the system
+type, such as 'sun4', or a canonical name which has the form:
+
+ CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+ OS
+ KERNEL-OS
+
+ See the file 'config.sub' for the possible values of each field. If
+'config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
+
+ If you are _building_ compiler tools for cross-compiling, you should
+use the option '--target=TYPE' to select the type of system they will
+produce code for.
+
+ If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with '--host=TYPE'.
+
+Sharing Defaults
+================
+
+ If you want to set default values for 'configure' scripts to share,
+you can create a site shell script called 'config.site' that gives
+default values for variables like 'CC', 'cache_file', and 'prefix'.
+'configure' looks for 'PREFIX/share/config.site' if it exists, then
+'PREFIX/etc/config.site' if it exists. Or, you can set the
+'CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all 'configure' scripts look for a site script.
+
+Defining Variables
+==================
+
+ Variables not defined in a site shell script can be set in the
+environment passed to 'configure'. However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost. In order to avoid this problem, you should set
+them in the 'configure' command line, using 'VAR=value'. For example:
+
+ ./configure CC=/usr/local2/bin/gcc
+
+causes the specified 'gcc' to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+Unfortunately, this technique does not work for 'CONFIG_SHELL' due to an
+Autoconf limitation. Until the limitation is lifted, you can use this
+workaround:
+
+ CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
+
+'configure' Invocation
+======================
+
+ 'configure' recognizes the following options to control how it
+operates.
+
+'--help'
+'-h'
+ Print a summary of all of the options to 'configure', and exit.
+
+'--help=short'
+'--help=recursive'
+ Print a summary of the options unique to this package's
+ 'configure', and exit. The 'short' variant lists options used only
+ in the top level, while the 'recursive' variant lists options also
+ present in any nested packages.
+
+'--version'
+'-V'
+ Print the version of Autoconf used to generate the 'configure'
+ script, and exit.
+
+'--cache-file=FILE'
+ Enable the cache: use and save the results of the tests in FILE,
+ traditionally 'config.cache'. FILE defaults to '/dev/null' to
+ disable caching.
+
+'--config-cache'
+'-C'
+ Alias for '--cache-file=config.cache'.
+
+'--quiet'
+'--silent'
+'-q'
+ Do not print messages saying which checks are being made. To
+ suppress all normal output, redirect it to '/dev/null' (any error
+ messages will still be shown).
+
+'--srcdir=DIR'
+ Look for the package's source code in directory DIR. Usually
+ 'configure' can determine that directory automatically.
+
+'--prefix=DIR'
+ Use DIR as the installation prefix. *note Installation Names:: for
+ more details, including other options available for fine-tuning the
+ installation locations.
+
+'--no-create'
+'-n'
+ Run the configure checks, but stop before creating any output
+ files.
+
+'configure' also accepts some other, not widely useful, options. Run
+'configure --help' for more details.
diff --git a/lib/am/check.am b/lib/am/check.am
new file mode 100644
index 000000000..9b05fc2c4
--- /dev/null
+++ b/lib/am/check.am
@@ -0,0 +1,573 @@
+## automake - create Makefile.in from Makefile.am
+## Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+am__tty_colors_dummy = \
+ mgn= red= grn= lgn= blu= brg= std=; \
+ am__color_tests=no
+
+am__tty_colors = { \
+ $(am__tty_colors_dummy); \
+ if test "X$(AM_COLOR_TESTS)" = Xno; then \
+ am__color_tests=no; \
+ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+ am__color_tests=yes; \
+## If stdout is a non-dumb tty, use colors. If test -t is not supported,
+## then this check fails; a conservative approach. Of course do not
+## redirect stdout here, just stderr.
+ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+ am__color_tests=yes; \
+ fi; \
+ if test $$am__color_tests = yes; then \
+ red=''; \
+ grn=''; \
+ lgn=''; \
+ blu=''; \
+ mgn=''; \
+ brg=''; \
+ std=''; \
+ fi; \
+}
+
+.PHONY: check-TESTS
+
+if !%?SERIAL_TESTS%
+
+include inst-vars.am
+
+## New parallel test driver.
+##
+## The first version of the code here was adapted from check.mk, which was
+## originally written at EPITA/LRDE, further developed at Gostai, then made
+## its way from GNU coreutils to end up, largely rewritten, in Automake.
+## The current version is an heavy rewrite of that, to allow for support
+## of more test metadata, and the use of custom test drivers and protocols
+## (among them, TAP).
+
+am__recheck_rx = ^[ ]*:recheck:[ ]*
+am__global_test_result_rx = ^[ ]*:global-test-result:[ ]*
+am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]*
+
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+## By default, we assume the test is to be re-run.
+ recheck = 1; \
+ while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+ { \
+ if (rc < 0) \
+ { \
+## If we've encountered an I/O error here, there are three possibilities:
+##
+## [1] The '.log' file exists, but the '.trs' does not; in this case,
+## we "gracefully" recover by assuming the corresponding test is
+## to be re-run (which will re-create the missing '.trs' file).
+##
+## [2] Both the '.log' and '.trs' files are missing; this means that
+## the corresponding test has not been run, and is thus *not* to
+## be re-run.
+##
+## [3] We have encountered some corner-case problem (e.g., a '.log' or
+## '.trs' files somehow made unreadable, or issues with a bad NFS
+## connection, or whatever); we don't handle such corner cases.
+##
+ if ((getline line2 < ($$0 ".log")) < 0) \
+ recheck = 0; \
+ break; \
+ } \
+ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+## A directive explicitly specifying the test is *not* to be re-run.
+ { \
+ recheck = 0; \
+ break; \
+ } \
+ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+ { \
+## A directive explicitly specifying the test *is* to be re-run.
+ break; \
+ } \
+## else continue with the next iteration.
+ }; \
+ if (recheck) \
+ print $$0; \
+## Don't leak open file descriptors, as this could cause serious
+## problems when there are many tests (yes, even on Linux).
+ close ($$0 ".trs"); \
+ close ($$0 ".log"); \
+}'
+
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+ print "fatal: making $@: " msg | "cat >&2"; \
+ exit 1; \
+} \
+function rst_section(header) \
+{ \
+ print header; \
+ len = length(header); \
+ for (i = 1; i <= len; i = i + 1) \
+ printf "="; \
+ printf "\n\n"; \
+} \
+{ \
+## By default, we assume the test log is to be copied in the global log,
+## and that its result is simply "RUN" (i.e., we still don't know what
+## it outcome was, but we know that at least it has run).
+ copy_in_global_log = 1; \
+ global_test_result = "RUN"; \
+ while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+ { \
+ if (rc < 0) \
+ fatal("failed to read from " $$0 ".trs"); \
+ if (line ~ /$(am__global_test_result_rx)/) \
+ { \
+ sub("$(am__global_test_result_rx)", "", line); \
+ sub("[ ]*$$", "", line); \
+ global_test_result = line; \
+ } \
+ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+ copy_in_global_log = 0; \
+ }; \
+ if (copy_in_global_log) \
+ { \
+ rst_section(global_test_result ": " $$0); \
+ while ((rc = (getline line < ($$0 ".log"))) != 0) \
+ { \
+ if (rc < 0) \
+ fatal("failed to read from " $$0 ".log"); \
+ print line; \
+ }; \
+ printf "\n"; \
+ }; \
+## Don't leak open file descriptors, as this could cause serious
+## problems when there are many tests (yes, even on Linux).
+ close ($$0 ".trs"); \
+ close ($$0 ".log"); \
+}'
+
+# Restructured Text title.
+am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+ --color-tests "$$am__color_tests" \
+ --enable-hard-errors "$$am__enable_hard_errors" \
+ --expect-failure "$$am__expect_failure"
+
+# To be inserted before the command running the test. Creates the
+# directory for the log if needed. Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log. Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT. Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup); \
+$(am__vpath_adj_setup) $(am__vpath_adj) \
+$(am__tty_colors); \
+srcdir=$(srcdir); export srcdir; \
+case "$@" in \
+ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \
+ *) am__odir=.;; \
+esac; \
+test "x$$am__odir" = x"." || test -d "$$am__odir" \
+ || $(MKDIR_P) "$$am__odir" || exit $$?; \
+if test -f "./$$f"; then dir=./; \
+elif test -f "$$f"; then dir=; \
+else dir="$(srcdir)/"; fi; \
+tst=$$dir$$f; log='$@'; \
+if test -n '$(DISABLE_HARD_ERRORS)'; then \
+ am__enable_hard_errors=no; \
+else \
+ am__enable_hard_errors=yes; \
+fi; \
+## The use of $dir below is required to account for VPATH
+## rewriting done by Sun make.
+case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \
+ am__expect_failure=yes;; \
+ *) \
+ am__expect_failure=no;; \
+esac; \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed). The result is saved in the shell variable
+# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+ bases='$(TEST_LOGS)'; \
+ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+## Trim away any extra whitespace. This has already proved useful
+## in avoiding weird bug on lesser make implementations. It also
+## works around the GNU make 3.80 bug where trailing whitespace in
+## "TESTS = foo.test $(empty)" causes $(TESTS_LOGS) to erroneously
+## expand to "foo.log .log".
+ bases=`echo $$bases`
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+ rm -f $< $@
+ $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+ @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+ @$(am__set_TESTS_bases); \
+## Helper shell function, tells whether a path refers to an existing,
+## regular, readable file.
+ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+## We need to ensures that all the required '.trs' and '.log' files will
+## be present and readable. The direct dependencies of $(TEST_SUITE_LOG)
+## only ensure that all the '.log' files exists; they don't ensure that
+## the '.log' files are readable, and worse, they don't ensure that the
+## '.trs' files even exist.
+ redo_bases=`for i in $$bases; do \
+ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+ done`; \
+ if test -n "$$redo_bases"; then \
+## Uh-oh, either some '.log' files were unreadable, or some '.trs' files
+## were missing (or unreadable). We need to re-run the corresponding
+## tests in order to re-create them.
+ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+ if $(am__make_dryrun); then :; else \
+## Break "rm -f" into two calls to minimize the possibility of exceeding
+## command line length limits.
+ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+ fi; \
+ fi; \
+## Use a trick to to ensure that we don't go into an infinite recursion
+## in case a test log in $(TEST_LOGS) is the same as $(TEST_SUITE_LOG).
+## Yes, this has already happened in practice. Sigh!
+ if test -n "$$am__remaking_logs"; then \
+ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+ "recursion detected" >&2; \
+## Invoking this unconditionally could cause a useless "make all" to
+## be invoked when '$redo_logs' expands to empty (automake bug#16302).
+ elif test -n "$$redo_logs"; then \
+ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+ fi; \
+ if $(am__make_dryrun); then :; else \
+## Sanity check: each unreadable or non-existent test result file should
+## has been properly remade at this point, as should the corresponding log
+## file.
+ st=0; \
+ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+ for i in $$redo_bases; do \
+ test -f $$i.trs && test -r $$i.trs \
+ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+ test -f $$i.log && test -r $$i.log \
+ || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+ done; \
+ test $$st -eq 0 || exit 1; \
+ fi
+## We need a new subshell to work portably with "make -n", since the
+## previous part of the recipe contained a $(MAKE) invocation.
+ @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+ ws='[ ]'; \
+## List of test result files.
+ results=`for b in $$bases; do echo $$b.trs; done`; \
+ test -n "$$results" || results=/dev/null; \
+## Prepare data for the test suite summary. These do not take into account
+## unreadable test results, but they'll be appropriately updated later if
+## needed.
+ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \
+ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \
+ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \
+ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \
+ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+## Whether the testsuite was successful or not.
+ if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+ success=true; \
+ else \
+ success=false; \
+ fi; \
+## Make $br a line of exactly 76 '=' characters, that will be used to
+## enclose the testsuite summary report when displayed on the console.
+ br='==================='; br=$$br$$br$$br$$br; \
+## When writing the test summary to the console, we want to color a line
+## reporting the count of some result *only* if at least one test
+## experienced such a result. This function is handy in this regard.
+ result_count () \
+ { \
+ if test x"$$1" = x"--maybe-color"; then \
+ maybe_colorize=yes; \
+ elif test x"$$1" = x"--no-color"; then \
+ maybe_colorize=no; \
+ else \
+ echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+ fi; \
+ shift; \
+ desc=$$1 count=$$2; \
+ if test $$maybe_colorize = yes && test $$count -gt 0; then \
+ color_start=$$3 color_end=$$std; \
+ else \
+ color_start= color_end=; \
+ fi; \
+ echo "$${color_start}# $$desc $$count$${color_end}"; \
+ }; \
+## A shell function that creates the testsuite summary. We need it
+## because we have to create *two* summaries, one for test-suite.log,
+## and a possibly-colorized one for console output.
+ create_testsuite_report () \
+ { \
+ result_count $$1 "TOTAL:" $$all "$$brg"; \
+ result_count $$1 "PASS: " $$pass "$$grn"; \
+ result_count $$1 "SKIP: " $$skip "$$blu"; \
+ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+ result_count $$1 "FAIL: " $$fail "$$red"; \
+ result_count $$1 "XPASS:" $$xpass "$$red"; \
+ result_count $$1 "ERROR:" $$error "$$mgn"; \
+ }; \
+## Write "global" testsuite log.
+ { \
+ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \
+ $(am__rst_title); \
+ create_testsuite_report --no-color; \
+ echo; \
+ echo ".. contents:: :depth: 2"; \
+ echo; \
+ for b in $$bases; do echo $$b; done \
+ | $(am__create_global_log); \
+ } >$(TEST_SUITE_LOG).tmp || exit 1; \
+ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \
+## Emit the test summary on the console.
+ if $$success; then \
+ col="$$grn"; \
+ else \
+ col="$$red"; \
+ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
+ fi; \
+## Multi line coloring is problematic with "less -R", so we really need
+## to color each line individually.
+ echo "$${col}$$br$${std}"; \
+ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}$$br$${std}"; \
+## This is expected to go to the console, so it might have to be colorized.
+ create_testsuite_report --maybe-color; \
+ echo "$$col$$br$$std"; \
+ if $$success; then :; else \
+ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \
+ if test -n "$(PACKAGE_BUGREPORT)"; then \
+ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+ fi; \
+ echo "$$col$$br$$std"; \
+ fi; \
+## Be sure to exit with the proper exit status. The use of "exit 1" below
+## is required to work around a FreeBSD make bug (present only when running
+## in concurrent mode). See automake bug#9245:
+## <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=9245>
+## and FreeBSD PR bin/159730:
+## <http://www.freebsd.org/cgi/query-pr.cgi?pr=159730>.
+ $$success || exit 1
+
+RECHECK_LOGS = $(TEST_LOGS)
+
+## ------------------------------------------ ##
+## Running all tests, or rechecking failures. ##
+## ------------------------------------------ ##
+
+check-TESTS: %CHECK_DEPS%
+ @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list
+ @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+## We always have to remove $(TEST_SUITE_LOG), to ensure its rule is run
+## in any case even in lazy mode: otherwise, if no test needs rerunning,
+## or a prior run plus reruns all happen within the same timestamp (can
+## happen with a prior "make TESTS=<subset>"), then we get no log output.
+## OTOH, this means that, in the rule for '$(TEST_SUITE_LOG)', we
+## cannot use '$?' to compute the set of lazily rerun tests, lest
+## we rely on .PHONY to work portably.
+ @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ @set +e; $(am__set_TESTS_bases); \
+ log_list=`for i in $$bases; do echo $$i.log; done`; \
+ trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+## Remove newlines and normalize whitespace. Trailing (and possibly
+## leading) whitespace is known to cause segmentation faults on
+## Solaris 10 XPG4 make.
+ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+## Be sure to exit with the proper exit status (automake bug#9245). See
+## comments in the recipe of $(TEST_SUITE_LOG) above for more information.
+ exit $$?;
+
+## Recheck must depend on $(check_SCRIPTS), $(check_PROGRAMS), etc.
+## It must also depend on the 'all' target. See automake bug#11252.
+recheck: all %CHECK_DEPS%
+## See comments above in the check-TESTS recipe for why remove
+## $(TEST_SUITE_LOG) here.
+ @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ @set +e; $(am__set_TESTS_bases); \
+## We must only consider tests that had an unexpected outcome (FAIL
+## or XPASS) in the earlier run.
+ bases=`for i in $$bases; do echo $$i; done \
+ | $(am__list_recheck_tests)` || exit 1; \
+ log_list=`for i in $$bases; do echo $$i.log; done`; \
+## Remove newlines and normalize whitespace. Trailing (and possibly
+## leading) whitespace is known to cause segmentation faults on
+## Solaris 10 XPG4 make.
+ log_list=`echo $$log_list`; \
+## Move the '.log' and '.trs' files associated with the tests to be
+## re-run out of the way, so that those tests will be re-run by the
+## "make test-suite.log" recursive invocation below.
+## Two tricky requirements:
+## - we must avoid extra files removal when running under "make -n";
+## - in case the test is a compiled program whose compilation fails,
+## we must ensure that any '.log' and '.trs' file referring to such
+## test are preserved, so that future "make recheck" invocations
+## will still try to re-compile and re-run it (automake bug#11791).
+## The tricky recursive make invocation below should cater to such
+## requirements.
+ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+ am__force_recheck=am--force-recheck \
+ TEST_LOGS="$$log_list"; \
+## Be sure to exit with the proper exit status (automake bug#9245). See
+## comments in the recipe of $(TEST_SUITE_LOG) above for more information.
+ exit $$?
+
+AM_RECURSIVE_TARGETS += check recheck
+
+.PHONY: recheck
+
+else %?SERIAL_TESTS%
+
+## Obsolescent serial testsuite driver.
+
+check-TESTS: $(TESTS)
+ @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+ srcdir=$(srcdir); export srcdir; \
+## Make sure Solaris VPATH-expands all members of this list, even
+## the first and the last one; thus the spaces around $(TESTS)
+ list=' $(TESTS) '; \
+ $(am__tty_colors); \
+ if test -n "$$list"; then \
+ for tst in $$list; do \
+ if test -f ./$$tst; then dir=./; \
+## Note: Solaris 2.7 seems to expand TESTS using VPATH. That's
+## why we also try 'dir='.
+ elif test -f $$tst; then dir=; \
+ else dir="$(srcdir)/"; fi; \
+ if $(TESTS_ENVIRONMENT) $${dir}$$tst $(AM_TESTS_FD_REDIRECT); then \
+## Success
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xpass=`expr $$xpass + 1`; \
+ failed=`expr $$failed + 1`; \
+ col=$$red; res=XPASS; \
+ ;; \
+ *) \
+ col=$$grn; res=PASS; \
+ ;; \
+ esac; \
+ elif test $$? -ne 77; then \
+## Failure
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xfail=`expr $$xfail + 1`; \
+ col=$$lgn; res=XFAIL; \
+ ;; \
+ *) \
+ failed=`expr $$failed + 1`; \
+ col=$$red; res=FAIL; \
+ ;; \
+ esac; \
+ else \
+## Skipped
+ skip=`expr $$skip + 1`; \
+ col=$$blu; res=SKIP; \
+ fi; \
+ echo "$${col}$$res$${std}: $$tst"; \
+ done; \
+## Prepare the banner
+ if test "$$all" -eq 1; then \
+ tests="test"; \
+ All=""; \
+ else \
+ tests="tests"; \
+ All="All "; \
+ fi; \
+ if test "$$failed" -eq 0; then \
+ if test "$$xfail" -eq 0; then \
+ banner="$$All$$all $$tests passed"; \
+ else \
+ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+ fi; \
+ else \
+ if test "$$xpass" -eq 0; then \
+ banner="$$failed of $$all $$tests failed"; \
+ else \
+ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+ fi; \
+ fi; \
+## DASHES should contain the largest line of the banner.
+ dashes="$$banner"; \
+ skipped=""; \
+ if test "$$skip" -ne 0; then \
+ if test "$$skip" -eq 1; then \
+ skipped="($$skip test was not run)"; \
+ else \
+ skipped="($$skip tests were not run)"; \
+ fi; \
+ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$skipped"; \
+ fi; \
+ report=""; \
+ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+ report="Please report to $(PACKAGE_BUGREPORT)"; \
+ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$report"; \
+ fi; \
+ dashes=`echo "$$dashes" | sed s/./=/g`; \
+ if test "$$failed" -eq 0; then \
+ col="$$grn"; \
+ else \
+ col="$$red"; \
+ fi; \
+## Multi line coloring is problematic with "less -R", so we really need
+## to color each line individually.
+ echo "$${col}$$dashes$${std}"; \
+ echo "$${col}$$banner$${std}"; \
+ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+ test -z "$$report" || echo "$${col}$$report$${std}"; \
+ echo "$${col}$$dashes$${std}"; \
+ test "$$failed" -eq 0; \
+ else :; fi
+
+endif %?SERIAL_TESTS%
diff --git a/lib/am/check2.am b/lib/am/check2.am
new file mode 100644
index 000000000..fbf4c7786
--- /dev/null
+++ b/lib/am/check2.am
@@ -0,0 +1,60 @@
+## automake - create Makefile.in from Makefile.am
+## Copyright (C) 2008-2017 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 <https://www.gnu.org/licenses/>.
+
+if %?FIRST%
+## When BSD make is run in parallel mode, it apparently strips any
+## leading directory component from the automatic variable '$*' (of
+## course, against what POSIX mandates). Try to detect and work
+## around this incompatibility.
+am__set_b = \
+ case '$@' in \
+ */*) \
+ case '$*' in \
+ */*) b='$*';; \
+ *) b=`echo '$@' | sed 's/\.log$$//'`; \
+ esac;; \
+ *) \
+ b='$*';; \
+ esac
+endif %?FIRST%
+
+## From a test file to a .log and .trs file.
+?GENERIC?%EXT%.log:
+?!GENERIC?%OBJ%: %SOURCE%
+ @p='%SOURCE%'; \
+## Another hack to support BSD make in parallel mode.
+?!GENERIC? b='%BASE%'; \
+?GENERIC? $(am__set_b); \
+ $(am__check_pre) %DRIVER% --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) %DRIVER_FLAGS% -- %COMPILE% \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+
+## If no programs are built in this package, then this rule is removed
+## at automake time. Otherwise, %am__EXEEXT% expands to a configure time
+## conditional, true if $(EXEEXT) is nonempty, thus this rule does not
+## conflict with the previous one.
+if %am__EXEEXT%
+?GENERIC?%EXT%$(EXEEXT).log:
+ @p='%SOURCE%'; \
+ ## Another hack to support BSD make in parallel mode.
+?!GENERIC? b='%BASE%'; \
+?GENERIC? $(am__set_b); \
+ $(am__check_pre) %DRIVER% --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) %DRIVER_FLAGS% -- %COMPILE% \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+endif %am__EXEEXT%
diff --git a/lib/am/clean-hdr.am b/lib/am/clean-hdr.am
new file mode 100644
index 000000000..1de69a28b
--- /dev/null
+++ b/lib/am/clean-hdr.am
@@ -0,0 +1,20 @@
+## automake - create Makefile.in from Makefile.am
+## Copyright (C) 1994-2017 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 <https://www.gnu.org/licenses/>.
+
+.PHONY: distclean-hdr
+distclean-am: distclean-hdr
+distclean-hdr:
+ -rm -f %FILES%
diff --git a/lib/am/clean.am b/lib/am/clean.am
new file mode 100644
index 000000000..e4a7fdb25
--- /dev/null
+++ b/lib/am/clean.am
@@ -0,0 +1,62 @@
+## automake - create Makefile.in from Makefile.am
+## Copyright (C) 1994-2017 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 <https://www.gnu.org/licenses/>.
+
+## We must test each macro because it might be empty, and an empty "rm
+## -rf" command looks disturbing. Also, the Solaris 2.4 "rm" will
+## return an error if there are no arguments other than "-f".
+mostlyclean-am: mostlyclean-generic
+mostlyclean-generic:
+%MOSTLYCLEAN_RMS%
+
+clean-am: clean-generic mostlyclean-am
+clean-generic:
+%CLEAN_RMS%
+
+distclean-am: distclean-generic clean-am
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+%DISTCLEAN_RMS%
+
+## Makefiles and their dependencies cannot be cleaned by
+## an -am dependency, because that would prevent other distclean
+## dependencies from calling make recursively. (The multilib
+## cleaning rules do this.)
+##
+## If you change distclean here, you probably also want to change
+## maintainer-clean below.
+distclean:
+ -rm -f %MAKEFILE%
+
+maintainer-clean-am: maintainer-clean-generic distclean-am
+maintainer-clean-generic:
+## FIXME: shouldn't we really print these messages before running
+## the dependencies?
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+%MAINTAINER_CLEAN_RMS%
+
+## See comment for distclean.
+maintainer-clean:
+ -rm -f %MAKEFILE%
+
+.PHONY: clean mostlyclean distclean maintainer-clean \
+clean-generic mostlyclean-generic distclean-generic maintainer-clean-generic
+
+?!SUBDIRS?clean: clean-am
+?!SUBDIRS?distclean: distclean-am
+?!SUBDIRS?mostlyclean: mostlyclean-am
+?!SUBDIRS?maintainer-clean: maintainer-clean-am
diff --git a/lib/am/compile.am b/lib/am/compile.am
new file mode 100644
index 000000000..c92e72d4f
--- /dev/null
+++ b/lib/am/compile.am
@@ -0,0 +1,29 @@
+## automake - create Makefile.in from Makefile.am
+## Copyright (C) 1994-2017 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 <https://www.gnu.org/licenses/>.
+
+DEFAULT_INCLUDES = %DEFAULT_INCLUDES%
+
+mostlyclean-am: mostlyclean-compile
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+?MOSTLYRMS?%MOSTLYRMS%
+
+distclean-am: distclean-compile
+distclean-compile:
+ -rm -f *.tab.c
+?DISTRMS?%DISTRMS%
+
+.PHONY: mostlyclean-compile distclean-compile
diff --git a/lib/am/configure.am b/lib/am/configure.am
new file mode 100644
index 000000000..6f0c50883
--- /dev/null
+++ b/lib/am/configure.am
@@ -0,0 +1,166 @@
+## automake - create Makefile.in from Makefile.am
+## Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+
+## This dummy rule is called from subdirectories whenever one of the
+## top-level Makefile's dependencies must be updated. It does depend
+## on %MAKEFILE% for the benefit of non-GNU make implementations (GNU
+## make will always make sure %MAKEFILE% is updated before considering
+## the am--refresh target anyway).
+if %?TOPDIR_P%
+.PHONY: am--refresh
+am--refresh: %MAKEFILE%
+ @:
+endif %?TOPDIR_P%
+
+## --------------------- ##
+## Building Makefile.*. ##
+## --------------------- ##
+
+## This rule remakes the Makefile.in.
+%MAKEFILE-IN%: %MAINTAINER-MODE% %MAKEFILE-AM% %MAKEFILE-IN-DEPS% $(am__configure_deps)
+## If configure.ac or one of configure's dependencies has changed, all
+## Makefile.in are to be updated; it is then more efficient to run
+## automake on all the Makefiles at once. It also allow Automake to be
+## run for newly added directories.
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+?TOPDIR_P? echo ' cd $(srcdir) && $(AUTOMAKE) %AUTOMAKE-OPTIONS%'; \
+?TOPDIR_P? $(am__cd) $(srcdir) && $(AUTOMAKE) %AUTOMAKE-OPTIONS% \
+?TOPDIR_P? && exit 0; \
+?!TOPDIR_P? ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+## If on the other hand, subdir/Makefile.in has been removed, then toplevel
+## am--refresh will not be aware of any need to run. We still invoke it
+## due to $? listing all prerequisites. Fix up for it by running the rebuild
+## rule for this file only, below.
+?!TOPDIR_P? && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+## Otherwise, rebuild only this file.
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) %AUTOMAKE-OPTIONS% %MAKEFILE-AM-SOURCES%'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) %AUTOMAKE-OPTIONS% %MAKEFILE-AM-SOURCES%
+
+## Ensure that GNU make doesn't remove Makefile if ./config.status (below)
+## is interrupted. Otherwise, the user would need to know to rerun
+## ./config.status to recreate the lost Makefile.
+.PRECIOUS: %MAKEFILE%
+## This rule remakes the Makefile.
+%MAKEFILE%: %MAKEFILE-DEPS% $(top_builddir)/config.status
+## If Makefile is to be updated because of config.status, then run
+## config.status without argument in order to (i) rerun all the
+## AC_CONFIG_COMMANDS including those that are not visible to
+## Automake, and (ii) to save time by running config.status all with
+## all the files, instead of once per file (iii) generate Makefiles
+## in newly added directories.
+ @case '$?' in \
+## Don't prefix $(top_builddir), because GNU make will strip it out
+## when it's '.'.
+ *config.status*) \
+?TOPDIR_P? echo ' $(SHELL) ./config.status'; \
+?TOPDIR_P? $(SHELL) ./config.status;; \
+?!TOPDIR_P? cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+## FIXME: $(am__maybe_remake_depfiles) lets us re-run the rule to create the
+## .P files. Ideally we wouldn't have to do this by hand.
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status %CONFIG-MAKEFILE% $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status %CONFIG-MAKEFILE% $(am__maybe_remake_depfiles);; \
+ esac;
+
+## Avoid the "deleted header file" problem for the dependencies.
+## Add the trailing "$(am__empty)" to trick Automake into not spuriously
+## complaining about "duplicated targets" in case the %MAKEFILE-IN-DEPS%
+## list expands to a single target that is also declared in some
+## user-defined rule.
+?HAVE-MAKEFILE-IN-DEPS?%MAKEFILE-IN-DEPS% $(am__empty):
+
+DIST_COMMON += %MAKEFILE-AM%
+
+
+## --------------------------- ##
+## config.status & configure. ##
+## --------------------------- ##
+
+if %?TOPDIR_P%
+## Always require configure.ac and configure at top level, even if they
+## don't exist. This is especially important for configure, since it
+## won't be created until autoconf is run -- which might be after
+## automake is run.
+DIST_COMMON += $(top_srcdir)/configure $(am__configure_deps)
+endif %?TOPDIR_P%
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+?TOPDIR_P? $(SHELL) ./config.status --recheck
+?!TOPDIR_P? cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: %MAINTAINER-MODE% $(am__configure_deps)
+?TOPDIR_P? $(am__cd) $(srcdir) && $(AUTOCONF)
+?!TOPDIR_P? cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+
+## ------------ ##
+## aclocal.m4. ##
+## ------------ ##
+
+## Whenever a configure dependency changes we need to rebuild
+## aclocal.m4 too. Changing configure.ac, or any file included by
+## aclocal.m4 might require adding more files to aclocal.m4. Hence
+## the $(am__configure_deps) dependency.
+## We still need $(ACLOCAL_AMFLAGS) for sake of backward-compatibility;
+## we should hopefully be able to get rid of it in a not-so-distant
+## future.
+if %?REGEN-ACLOCAL-M4%
+$(ACLOCAL_M4): %MAINTAINER-MODE% $(am__aclocal_m4_deps)
+?TOPDIR_P? $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+?!TOPDIR_P? cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+## Avoid the "deleted header file" problem for the dependencies.
+$(am__aclocal_m4_deps):
+endif %?REGEN-ACLOCAL-M4%
+
+
+## --------- ##
+## cleanup. ##
+## --------- ##
+
+## We special-case config.status here. If we do it as part of the
+## normal clean processing for this directory, then it might be
+## removed before some subdir is cleaned. However, that subdir's
+## Makefile depends on config.status.
+
+if %?TOPDIR_P%
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+distclean:
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+
+## Note: you might think we should remove Makefile.in, configure, or
+## aclocal.m4 here in a maintainer-clean rule. However, the GNU
+## Coding Standards explicitly prohibit this.
+
+maintainer-clean:
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+## autom4te.cache is created by Autoconf; the only valid target to
+## remove it is maintainer-clean, not distclean.
+## If you have an autom4te.cache that cause distcheck to fail, then
+## it is good news: you finally discovered that autoconf and/or
+## autoheader is needed to use your tarball, which is wrong.
+ -rm -rf $(top_srcdir)/autom4te.cache
+
+
+endif %?TOPDIR_P%
diff --git a/lib/am/data.am b/lib/am/data.am
new file mode 100644
index 000000000..34b582f46
--- /dev/null
+++ b/lib/am/data.am
@@ -0,0 +1,100 @@
+## automake - create Makefile.in from Makefile.am
+## Copyright (C) 1994-2017 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 <https://www.gnu.org/licenses/>.
+
+if %?INSTALL%
+include inst-vars.am
+endif %?INSTALL%
+
+## ------------ ##
+## Installing. ##
+## ------------ ##
+
+if %?INSTALL%
+am__installdirs += "$(DESTDIR)$(%NDIR%dir)"
+?EXEC?.PHONY install-exec-am: install-%DIR%%PRIMARY%
+?!EXEC?.PHONY install-data-am: install-%DIR%%PRIMARY%
+install-%DIR%%PRIMARY%: $(%DIR%_%PRIMARY%)
+ @$(NORMAL_INSTALL)
+if %?BASE%
+## Funny invocation because Makefile variable can be empty, leading to
+## a syntax error in sh.
+ @list='$(%DIR%_%PRIMARY%)'; test -n "$(%NDIR%dir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(%NDIR%dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(%NDIR%dir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+## A file can be in the source directory or the build directory.
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+## If the _%PRIMARY% variable has an entry like foo/bar, install it as
+## $(destdir)/bar, not $(destdir)/foo/bar. The user can make a
+## new dir variable or use a nobase_ target for the latter case.
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_%ONE_PRIMARY%) $$files '$(DESTDIR)$(%NDIR%dir)'"; \
+ $(INSTALL_%ONE_PRIMARY%) $$files "$(DESTDIR)$(%NDIR%dir)" || exit $$?; \
+ done
+else !%?BASE%
+ @list='$(%DIR%_%PRIMARY%)'; test -n "$(%NDIR%dir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(%NDIR%dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(%NDIR%dir)" || exit 1; \
+ fi; \
+ $(am__nobase_list) | while read dir files; do \
+ xfiles=; for file in $$files; do \
+ if test -f "$$file"; then xfiles="$$xfiles $$file"; \
+ else xfiles="$$xfiles $(srcdir)/$$file"; fi; done; \
+ test -z "$$xfiles" || { \
+ test "x$$dir" = x. || { \
+ echo " $(MKDIR_P) '$(DESTDIR)$(%NDIR%dir)/$$dir'"; \
+ $(MKDIR_P) "$(DESTDIR)$(%NDIR%dir)/$$dir"; }; \
+ echo " $(INSTALL_%ONE_PRIMARY%) $$xfiles '$(DESTDIR)$(%NDIR%dir)/$$dir'"; \
+ $(INSTALL_%ONE_PRIMARY%) $$xfiles "$(DESTDIR)$(%NDIR%dir)/$$dir" || exit $$?; }; \
+ done
+endif !%?BASE%
+endif %?INSTALL%
+
+
+## -------------- ##
+## Uninstalling. ##
+## -------------- ##
+
+if %?INSTALL%
+.PHONY uninstall-am: uninstall-%DIR%%PRIMARY%
+uninstall-%DIR%%PRIMARY%:
+ @$(NORMAL_UNINSTALL)
+ @list='$(%DIR%_%PRIMARY%)'; test -n "$(%NDIR%dir)" || list=; \
+?BASE? files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+?!BASE? $(am__nobase_strip_setup); files=`$(am__nobase_strip)`; \
+ dir='$(DESTDIR)$(%NDIR%dir)'; $(am__uninstall_files_from_dir)
+endif %?INSTALL%
+
+
+## ---------- ##
+## Cleaning. ##
+## ---------- ##
+
+## Nothing.
+
+
+## -------------- ##
+## Distributing. ##
+## -------------- ##
+
+if %?DIST%
+DIST_COMMON += %DISTVAR%
+endif %?DIST%
diff --git a/lib/am/dejagnu.am b/lib/am/dejagnu.am
new file mode 100644
index 000000000..4aa8f9cc2
--- /dev/null
+++ b/lib/am/dejagnu.am
@@ -0,0 +1,93 @@
+## automake - create Makefile.in from Makefile.am
+## Copyright (C) 1994-2017 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 <https://www.gnu.org/licenses/>.
+
+## Name of tool to use. Default is the same as the package.
+DEJATOOL = $(PACKAGE)
+
+## Default flags to pass to dejagnu. The user can override this.
+RUNTESTDEFAULTFLAGS = --tool $$tool --srcdir $$srcdir
+
+EXPECT = expect
+RUNTEST = runtest
+
+
+.PHONY: check-DEJAGNU
+check-DEJAGNU: site.exp
+## Life is easiest with an absolute srcdir, so do that.
+ srcdir='$(srcdir)'; export srcdir; \
+ EXPECT=$(EXPECT); export EXPECT; \
+## If runtest can't be found, print a warning but don't die. It is
+## pointless to cause a failure if the tests cannot be run at all.
+ if $(SHELL) -c "$(RUNTEST) --version" > /dev/null 2>&1; then \
+ exit_status=0; l='$(DEJATOOL)'; for tool in $$l; do \
+ if $(RUNTEST) $(RUNTESTDEFAULTFLAGS) $(AM_RUNTESTFLAGS) $(RUNTESTFLAGS); \
+ then :; else exit_status=1; fi; \
+ done; \
+ else echo "WARNING: could not find '$(RUNTEST)'" 1>&2; :;\
+ fi; \
+ exit $$exit_status
+
+
+## ------------------- ##
+## Building site.exp. ##
+## ------------------- ##
+
+## Note that in the rule we don't directly generate site.exp to avoid
+## the possibility of a corrupted site.exp if make is interrupted.
+## Jim Meyering has some useful text on this topic.
+site.exp: Makefile $(EXTRA_DEJAGNU_SITE_CONFIG)
+ @echo 'Making a new site.exp file ...'
+ @echo '## these variables are automatically generated by make ##' >site.tmp
+ @echo '# Do not edit here. If you wish to override these values' >>site.tmp
+ @echo '# edit the last section' >>site.tmp
+ @echo 'set srcdir "$(srcdir)"' >>site.tmp
+ @echo "set objdir `pwd`" >>site.tmp
+## Quote the *_alias variables because they might be empty.
+?BUILD? @echo 'set build_alias "$(build_alias)"' >>site.tmp
+?BUILD? @echo 'set build_triplet $(build_triplet)' >>site.tmp
+?HOST? @echo 'set host_alias "$(host_alias)"' >>site.tmp
+?HOST? @echo 'set host_triplet $(host_triplet)' >>site.tmp
+?TARGET? @echo 'set target_alias "$(target_alias)"' >>site.tmp
+?TARGET? @echo 'set target_triplet $(target_triplet)' >>site.tmp
+## Allow the package author to extend site.exp.
+ @list='$(EXTRA_DEJAGNU_SITE_CONFIG)'; for f in $$list; do \
+ echo "## Begin content included from file $$f. Do not modify. ##" \
+ && cat `test -f "$$f" || echo '$(srcdir)/'`$$f \
+ && echo "## End content included from file $$f. ##" \
+ || exit 1; \
+ done >> site.tmp
+ @echo "## End of auto-generated content; you can edit from here. ##" >> site.tmp
+ @if test -f site.exp; then \
+ sed -e '1,/^## End of auto-generated content.*##/d' site.exp >> site.tmp; \
+ fi
+ @-rm -f site.bak
+ @test ! -f site.exp || mv site.exp site.bak
+ @mv site.tmp site.exp
+
+## ---------- ##
+## Cleaning. ##
+## ---------- ##
+
+.PHONY distclean-am: distclean-DEJAGNU
+
+distclean-DEJAGNU:
+## Any other cleaning must be done by the user or by the test suite
+## itself. We can't predict what dejagnu or the test suite might
+## generate.
+ -rm -f site.exp site.bak
+ -l='$(DEJATOOL)'; for tool in $$l; do \
+ rm -f $$tool.sum $$tool.log; \
+ done
diff --git a/lib/am/depend.am b/lib/am/depend.am
new file mode 100644
index 000000000..1538036c5
--- /dev/null
+++ b/lib/am/depend.am
@@ -0,0 +1,35 @@
+## automake - create Makefile.in from Makefile.am
+## Copyright (C) 1994-2017 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 <https://www.gnu.org/licenses/>.
+
+am__mv = mv -f
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+.PHONY: am--depfiles
+
+## This Makefile depends on Depdirs' files, so we should never
+## erase them in -am or -recursive rules; that would prevent any other
+## rules from being recursive (for instance multilib clean rules are
+## recursive).
+if %?DISTRMS%
+distclean:
+ %DISTRMS%
+maintainer-clean:
+ %DISTRMS%
+endif
diff --git a/lib/am/depend2.am b/lib/am/depend2.am
new file mode 100644
index 000000000..45dd88c5e
--- /dev/null
+++ b/lib/am/depend2.am
@@ -0,0 +1,114 @@
+## automake - create Makefile.in from Makefile.am
+## Copyright (C) 1994-2017 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 <https://www.gnu.org/licenses/>.
+
+## This file is read several times:
+## - once per *extension* (not per language) for generic compilation rules
+## - once for each file which requires specific flags.
+
+## Note it is on purpose we wrote "if %AMDEP%", since:
+##
+## - if deps are turned off, %AMDEP% is mapped onto FALSE, and therefore
+## the "if FALSE" chunk is removed (automake-time conditionals).
+##
+## - if deps are on, %AMDEP% is mapped onto AMDEP, and therefore
+## the "if AMDEP" chunk is prefix with @AMDEP_TRUE@ just like for any
+## other configure-time conditional.
+##
+## We do likewise for %FASTDEP%; this expands to an ordinary configure-time
+## conditional. %FASTDEP% is used to speed up the common case of building
+## a package with gcc 3.x or later. In this case we can skip the use of
+## depcomp and easily inline the dependency tracking.
+
+if %?NONLIBTOOL%
+?GENERIC?%EXT%.o:
+?!GENERIC?%OBJ%: %SOURCE%
+if %FASTDEP%
+## In fast-dep mode, we can always use -o.
+## For non-suffix rules, we must emulate a VPATH search on %SOURCE%.
+?!GENERIC? %VERBOSE%%COMPILE% -MT %OBJ% -MD -MP -MF %DEPBASE%.Tpo %-c% -o %OBJ% %SOURCEFLAG%`test -f '%SOURCE%' || echo '$(srcdir)/'`%SOURCE%
+?!GENERIC? %SILENT%$(am__mv) %DEPBASE%.Tpo %DEPBASE%.Po
+?GENERIC??!SUBDIROBJ? %VERBOSE%%COMPILE% -MT %OBJ% -MD -MP -MF %DEPBASE%.Tpo %-c% -o %OBJ% %SOURCEFLAG%%SOURCE%
+?GENERIC??!SUBDIROBJ? %SILENT%$(am__mv) %DEPBASE%.Tpo %DEPBASE%.Po
+?GENERIC??SUBDIROBJ? %VERBOSE%depbase=`echo %OBJ% | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+?GENERIC??SUBDIROBJ? %COMPILE% -MT %OBJ% -MD -MP -MF %DEPBASE%.Tpo %-c% -o %OBJ% %SOURCEFLAG%%SOURCE% &&\
+?GENERIC??SUBDIROBJ? $(am__mv) %DEPBASE%.Tpo %DEPBASE%.Po
+else !%FASTDEP%
+if %AMDEP%
+ %VERBOSE%source='%SOURCE%' object='%OBJ%' libtool=no @AMDEPBACKSLASH@
+ DEPDIR=$(DEPDIR) $(%FPFX%DEPMODE) $(depcomp) @AMDEPBACKSLASH@
+endif %AMDEP%
+if %?GENERIC%
+?-o? %VERBOSE-NODEP%%COMPILE% %-c% %-o% %OBJ% %SOURCEFLAG%%SOURCE%
+?!-o? %VERBOSE-NODEP%%COMPILE% %-c% %SOURCEFLAG%%SOURCE%
+else !%?GENERIC%
+## For non-suffix rules, we must emulate a VPATH search on %SOURCE%.
+?-o? %VERBOSE-NODEP%%COMPILE% %-c% %-o% %OBJ% %SOURCEFLAG%`test -f '%SOURCE%' || echo '$(srcdir)/'`%SOURCE%
+?!-o? %VERBOSE-NODEP%%COMPILE% %-c% %SOURCEFLAG%`test -f '%SOURCE%' || echo '$(srcdir)/'`%SOURCE%
+endif !%?GENERIC%
+endif !%FASTDEP%
+
+?GENERIC?%EXT%.obj:
+?!GENERIC?%OBJOBJ%: %SOURCE%
+if %FASTDEP%
+## In fast-dep mode, we can always use -o.
+## For non-suffix rules, we must emulate a VPATH search on %SOURCE%.
+?!GENERIC? %VERBOSE%%COMPILE% -MT %OBJOBJ% -MD -MP -MF %DEPBASE%.Tpo %-c% -o %OBJOBJ% %SOURCEFLAG%`if test -f '%SOURCE%'; then $(CYGPATH_W) '%SOURCE%'; else $(CYGPATH_W) '$(srcdir)/%SOURCE%'; fi`
+?!GENERIC? %SILENT%$(am__mv) %DEPBASE%.Tpo %DEPBASE%.Po
+?GENERIC??!SUBDIROBJ? %VERBOSE%%COMPILE% -MT %OBJOBJ% -MD -MP -MF %DEPBASE%.Tpo %-c% -o %OBJOBJ% %SOURCEFLAG%`$(CYGPATH_W) '%SOURCE%'`
+?GENERIC??!SUBDIROBJ? %SILENT%$(am__mv) %DEPBASE%.Tpo %DEPBASE%.Po
+?GENERIC??SUBDIROBJ? %VERBOSE%depbase=`echo %OBJ% | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+?GENERIC??SUBDIROBJ? %COMPILE% -MT %OBJOBJ% -MD -MP -MF %DEPBASE%.Tpo %-c% -o %OBJOBJ% %SOURCEFLAG%`$(CYGPATH_W) '%SOURCE%'` &&\
+?GENERIC??SUBDIROBJ? $(am__mv) %DEPBASE%.Tpo %DEPBASE%.Po
+else !%FASTDEP%
+if %AMDEP%
+ %VERBOSE%source='%SOURCE%' object='%OBJOBJ%' libtool=no @AMDEPBACKSLASH@
+ DEPDIR=$(DEPDIR) $(%FPFX%DEPMODE) $(depcomp) @AMDEPBACKSLASH@
+endif %AMDEP%
+if %?GENERIC%
+?-o? %VERBOSE-NODEP%%COMPILE% %-c% %-o% %OBJOBJ% %SOURCEFLAG%`$(CYGPATH_W) '%SOURCE%'`
+?!-o? %VERBOSE-NODEP%%COMPILE% %-c% `$(CYGPATH_W) %SOURCEFLAG%'%SOURCE%'`
+else !%?GENERIC%
+## For non-suffix rules, we must emulate a VPATH search on %SOURCE%.
+?-o? %VERBOSE-NODEP%%COMPILE% %-c% %-o% %OBJOBJ% %SOURCEFLAG%`if test -f '%SOURCE%'; then $(CYGPATH_W) '%SOURCE%'; else $(CYGPATH_W) '$(srcdir)/%SOURCE%'; fi`
+?!-o? %VERBOSE-NODEP%%COMPILE% %-c% %SOURCEFLAG%`if test -f '%SOURCE%'; then $(CYGPATH_W) '%SOURCE%'; else $(CYGPATH_W) '$(srcdir)/%SOURCE%'; fi`
+endif !%?GENERIC%
+endif !%FASTDEP%
+endif %?NONLIBTOOL%
+
+if %?LIBTOOL%
+?GENERIC?%EXT%.lo:
+?!GENERIC?%LTOBJ%: %SOURCE%
+if %FASTDEP%
+## In fast-dep mode, we can always use -o.
+## For non-suffix rules, we must emulate a VPATH search on %SOURCE%.
+?!GENERIC? %VERBOSE%%LTCOMPILE% -MT %LTOBJ% -MD -MP -MF %DEPBASE%.Tpo %-c% -o %LTOBJ% %SOURCEFLAG%`test -f '%SOURCE%' || echo '$(srcdir)/'`%SOURCE%
+?!GENERIC? %SILENT%$(am__mv) %DEPBASE%.Tpo %DEPBASE%.Plo
+?GENERIC??!SUBDIROBJ? %VERBOSE%%LTCOMPILE% -MT %LTOBJ% -MD -MP -MF %DEPBASE%.Tpo %-c% -o %LTOBJ% %SOURCEFLAG%%SOURCE%
+?GENERIC??!SUBDIROBJ? %SILENT%$(am__mv) %DEPBASE%.Tpo %DEPBASE%.Plo
+?GENERIC??SUBDIROBJ? %VERBOSE%depbase=`echo %OBJ% | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+?GENERIC??SUBDIROBJ? %LTCOMPILE% -MT %LTOBJ% -MD -MP -MF %DEPBASE%.Tpo %-c% -o %LTOBJ% %SOURCEFLAG%%SOURCE% &&\
+?GENERIC??SUBDIROBJ? $(am__mv) %DEPBASE%.Tpo %DEPBASE%.Plo
+else !%FASTDEP%
+if %AMDEP%
+ %VERBOSE%source='%SOURCE%' object='%LTOBJ%' libtool=yes @AMDEPBACKSLASH@
+ DEPDIR=$(DEPDIR) $(%FPFX%DEPMODE) $(depcomp) @AMDEPBACKSLASH@
+endif %AMDEP%
+## We can always use '-o' with Libtool.
+?GENERIC? %VERBOSE-NODEP%%LTCOMPILE% %-c% -o %LTOBJ% %SOURCEFLAG%%SOURCE%
+## For non-suffix rules, we must emulate a VPATH search on %SOURCE%.
+?!GENERIC? %VERBOSE-NODEP%%LTCOMPILE% %-c% -o %LTOBJ% %SOURCEFLAG%`test -f '%SOURCE%' || echo '$(srcdir)/'`%SOURCE%
+endif !%FASTDEP%
+endif %?LIBTOOL%
diff --git a/lib/am/distdir.am b/lib/am/distdir.am
new file mode 100644
index 000000000..653966f0e
--- /dev/null
+++ b/lib/am/distdir.am
@@ -0,0 +1,561 @@
+## automake - create Makefile.in from Makefile.am
+## Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+DIST_COMMON += $(am__DIST_COMMON)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+
+if %?TOPDIR_P%
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+
+am__remove_distdir = \
+ if test -d "$(distdir)"; then \
+ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+ && rm -rf "$(distdir)" \
+## On MSYS (1.0.17) it is not possible to remove a directory that is in
+## use; so, if the first rm fails, we sleep some seconds and retry, to
+## give pending processes some time to exit and "release" the directory
+## before we remove it. The value of "some seconds" is 5 for the moment,
+## which is mostly an arbitrary value, but seems high enough in practice.
+## See automake bug#10470.
+ || { sleep 5 && rm -rf "$(distdir)"; }; \
+ else :; fi
+am__post_remove_distdir = $(am__remove_distdir)
+endif %?TOPDIR_P%
+
+if %?SUBDIRS%
+## computes a relative pathname RELDIR such that DIR1/RELDIR = DIR2.
+## Input:
+## - DIR1 relative pathname, relative to the current directory
+## - DIR2 relative pathname, relative to the current directory
+## Output:
+## - reldir relative pathname of DIR2, relative to DIR1
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+endif %?SUBDIRS%
+
+.PHONY: distdir
+if %?SUBDIRS%
+AM_RECURSIVE_TARGETS += distdir
+endif %?SUBDIRS%
+
+distdir: $(DISTFILES)
+##
+## For Gnits users, this is pretty handy. Look at 15 lines
+## in case some explanatory text is desirable.
+##
+if %?TOPDIR_P%
+if %?CK-NEWS%
+ @case `sed 15q $(srcdir)/NEWS` in \
+ *"$(VERSION)"*) : ;; \
+ *) \
+ echo "NEWS not updated; not releasing" 1>&2; \
+ exit 1;; \
+ esac
+endif %?CK-NEWS%
+endif %?TOPDIR_P%
+##
+## Only for the top dir.
+##
+if %?TOPDIR_P%
+ $(am__remove_distdir)
+ test -d "$(distdir)" || mkdir "$(distdir)"
+endif %?TOPDIR_P%
+##
+##
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+##
+## Yet another hack to support SUN make.
+##
+## Let's assume 'foo' appears in DISTFILES and is not a built file.
+## When building with VPATH=$(srcdir), SUN make and OSF1/Tru64 will
+## rewrite 'foo' as '$(srcdir)/foo'. An attempt to install the file
+## with
+## cp $file $(distdir)/$file
+## will thus install $(srcdir)/foo as $(distdir)/$(srcdir)/foo
+## instead of $(distdir)/foo.
+##
+## So let's strip this leading $(srcdir)/ when it exists. (As far we
+## know, only SUN make and OSF1/Tru64 make add it.) Searching whether
+## the file is to be found in the source or build directory will be
+## done later.
+##
+## In case we are _not_ using SUN or OSF1/Tru64 make, how can we be sure
+## we are not stripping a legitimate filename that starts with the
+## same pattern as $(srcdir)?
+## Well, it can't happen without the Makefile author distributing
+## something out of the distribution (which is bad). As an example,
+## consider "EXTRA_DIST = ../bar". This is an issue if $srcdir is
+## '..', however getting this value for srcdir is impossible:
+## "EXTRA_DIST = ../bar" implies we are in a subdirectory (so '../bar'
+## is within the package), hence '$srcdir' is something like
+## '../../subdir'.
+##
+## There is more to say about files which are above the current directory,
+## like '../bar' in the previous example. The OSF1/Tru64 make
+## implementation can simplify filenames resulting from a VPATH lookup.
+## For instance if "VPATH = ../../subdir" and '../bar' is found in that
+## VPATH directory, then occurrences of '../bar' will be replaced by
+## '../../bar' (instead of '../../subdir/../bar'). This obviously defeats
+## any attempt to strip a leading $srcdir. Presently we have no workaround
+## for this. We avoid this issue by writing "EXTRA_DIST = $(srcdir)/../bar"
+## instead of "EXTRA_DIST = ../bar". This prefixing is needed only for files
+## above the current directory. Fortunately, apart from auxdir files which
+## can be located in .. or ../.., this situation hardly occurs in practice.
+##
+## Also rewrite $(top_srcdir) (which sometimes appears in DISTFILES, and can
+## be absolute) by $(top_builddir) (which is always relative). $(srcdir) will
+## be prepended later.
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+## (The second 't' command clears the flag for the next round.)
+##
+## Make the subdirectories for the files.
+##
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+##
+##
+ for file in $$dist_files; do \
+##
+## Always look for the file in the build directory first. That way
+## for something like yacc output we will correctly pick up the latest
+## version. Also check for directories in the build directory first,
+## so one can ship generated directories.
+##
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+##
+## Use cp, not ln. There are situations in which "ln" can fail. For
+## instance a file to distribute could actually be a cross-filesystem
+## symlink -- this can easily happen if "gettextize" was run on the
+## distribution.
+##
+ if test -d $$d/$$file; then \
+## Don't mention $$file in the destination argument, since this fails if
+## the destination directory already exists. Also, use '-R' and not '-r'.
+## '-r' is almost always incorrect.
+##
+## If a directory exists both in '.' and $(srcdir), then we copy the
+## files from $(srcdir) first and then install those from '.'. This
+## can help people who distribute directories made of source files
+## *and* generated files. It is also important when the directory
+## exists only in $(srcdir), because some vendor Make (such as Tru64)
+## will magically create an empty directory in '.'.
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+## If the destination directory already exists, it may contain read-only
+## files, e.g., during "make distcheck".
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+## Test for file existence because sometimes a file gets included in
+## DISTFILES twice. For example this happens when a single source
+## file is used in building more than one program.
+## See also test 'dist-repeated.sh'.
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+##
+## Test for directory existence here because previous automake
+## invocation might have created some directories. Note that we
+## explicitly set distdir for the subdir make; that lets us mix-n-match
+## many automake-using packages into one large package, and have "dist"
+## at the top level do the right thing. If we're in the topmost
+## directory, then we use 'distdir' instead of 'top_distdir'; this lets
+## us work correctly with an enclosing package.
+if %?SUBDIRS%
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+## Disable am__remove_distdir so that sub-packages do not clear a
+## directory we have already cleared and might even have populated
+## (e.g. shared AUX dir in the sub-package).
+ am__remove_distdir=: \
+## Disable filename length check:
+ am__skip_length_check=: \
+## No need to fix modes more than once:
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+endif %?SUBDIRS%
+##
+## We might have to perform some last second updates, such as updating
+## info files.
+## We must explicitly set distdir and top_distdir for these sub-makes.
+##
+if %?DIST-TARGETS%
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$(top_distdir)" distdir="$(distdir)" \
+ %DIST-TARGETS%
+endif %?DIST-TARGETS%
+##
+## This complex find command will try to avoid changing the modes of
+## links into the source tree, in case they're hard-linked.
+##
+## Ignore return result from chmod, because it might give an error
+## if we chmod a symlink.
+##
+## Another nastiness: if the file is unreadable by us, we make it
+## readable regardless of the number of links to it. This only
+## happens in perverse cases.
+##
+## We use $(install_sh) because that is a known-portable way to modify
+## the file in place in the source tree.
+##
+## If we are being invoked recursively, then there is no need to walk
+## the whole subtree again. This is a complexity reduction for a deep
+## hierarchy of subpackages.
+##
+if %?TOPDIR_P%
+ -test -n "$(am__skip_mode_fix)" \
+ || find "$(distdir)" -type d ! -perm -755 \
+ -exec chmod u+rwx,go+rx {} \; -o \
+ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+ || chmod -R a+r "$(distdir)"
+if %?FILENAME_FILTER%
+ @if test -z "$(am__skip_length_check)" && find "$(distdir)" -type f -print | \
+ grep '^%FILENAME_FILTER%' 1>&2; then \
+ echo 'error: the above filenames are too long' 1>&2; \
+ exit 1; \
+ else :; fi
+endif %?FILENAME_FILTER%
+endif %?TOPDIR_P%
+
+
+
+## --------------------------------------- ##
+## Building various distribution flavors. ##
+## --------------------------------------- ##
+
+## Note that we don't use GNU tar's '-z' option. One reason (but not
+## the only reason) is that some versions of tar (e.g., OSF1)
+## interpret '-z' differently.
+##
+## The -o option of GNU tar used to exclude empty directories. This
+## behavior was fixed in tar 1.12 (released on 1997-04-25). But older
+## versions of tar are still used (for instance NetBSD 1.6.1 ships
+## with tar 1.11.2). We do not do anything specific w.r.t. this
+## incompatibility since packages where empty directories need to be
+## present in the archive are really unusual.
+##
+## We order DIST_TARGETS by expected duration of the compressors,
+## slowest first, for better parallelism in "make dist". Do not
+## reorder DIST_ARCHIVES, users may expect gzip to be first.
+##
+## Traditionally, gzip prepended the contents of the GZIP environment
+## variable to its arguments, and the commands below formerly used
+## this by invoking 'GZIP=$(GZIP_ENV) gzip'. The GZIP environment
+## variable is now considered to be obsolescent, so the commands below
+## now use 'eval GZIP= gzip $(GZIP_ENV)' instead; this should work
+## with both older and newer gzip implementations. The 'eval' is to
+## support makefile assignments like 'GZIP_ENV = "-9 -n"' that quote
+## the GZIP_ENV right-hand side because that was needed with the
+## former invocation pattern.
+
+if %?TOPDIR_P%
+
+?GZIP?DIST_ARCHIVES += $(distdir).tar.gz
+GZIP_ENV = --best
+.PHONY: dist-gzip
+dist-gzip: distdir
+ tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz
+ $(am__post_remove_distdir)
+
+?BZIP2?DIST_ARCHIVES += $(distdir).tar.bz2
+.PHONY: dist-bzip2
+dist-bzip2: distdir
+ tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
+ $(am__post_remove_distdir)
+
+?LZIP?DIST_ARCHIVES += $(distdir).tar.lz
+.PHONY: dist-lzip
+dist-lzip: distdir
+ tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
+ $(am__post_remove_distdir)
+
+?XZ?DIST_ARCHIVES += $(distdir).tar.xz
+.PHONY: dist-xz
+dist-xz: distdir
+ tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
+ $(am__post_remove_distdir)
+
+?COMPRESS?DIST_ARCHIVES += $(distdir).tar.Z
+.PHONY: dist-tarZ
+dist-tarZ: distdir
+ @echo WARNING: "Support for distribution archives compressed with" \
+ "legacy program 'compress' is deprecated." >&2
+ @echo WARNING: "It will be removed altogether in Automake 2.0" >&2
+ tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+ $(am__post_remove_distdir)
+
+?SHAR?DIST_ARCHIVES += $(distdir).shar.gz
+.PHONY: dist-shar
+dist-shar: distdir
+ @echo WARNING: "Support for shar distribution archives is" \
+ "deprecated." >&2
+ @echo WARNING: "It will be removed altogether in Automake 2.0" >&2
+ shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz
+ $(am__post_remove_distdir)
+
+?ZIP?DIST_ARCHIVES += $(distdir).zip
+.PHONY: dist-zip
+dist-zip: distdir
+ -rm -f $(distdir).zip
+ zip -rq $(distdir).zip $(distdir)
+ $(am__post_remove_distdir)
+
+?LZIP?DIST_TARGETS += dist-lzip
+?XZ?DIST_TARGETS += dist-xz
+?SHAR?DIST_TARGETS += dist-shar
+?BZIP2?DIST_TARGETS += dist-bzip2
+?GZIP?DIST_TARGETS += dist-gzip
+?ZIP?DIST_TARGETS += dist-zip
+?COMPRESS?DIST_TARGETS += dist-tarZ
+
+endif %?TOPDIR_P%
+
+
+
+## ------------------------------------------------- ##
+## Building all the requested distribution flavors. ##
+## ------------------------------------------------- ##
+
+## Currently we cannot use if/endif inside a rule. The file_contents
+## parser needs work.
+
+if %?TOPDIR_P%
+
+.PHONY: dist dist-all
+if %?SUBDIRS%
+AM_RECURSIVE_TARGETS += dist dist-all
+endif %?SUBDIRS%
+
+dist dist-all:
+ $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
+ $(am__post_remove_distdir)
+
+endif %?TOPDIR_P%
+
+
+## ------------------------- ##
+## Checking a distribution. ##
+## ------------------------- ##
+
+
+if %?TOPDIR_P%
+if %?SUBDIRS%
+AM_RECURSIVE_TARGETS += distcheck
+endif %?SUBDIRS%
+
+# This target untars the dist file and tries a VPATH configuration. Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+.PHONY: distcheck
+distcheck: dist
+ case '$(DIST_ARCHIVES)' in \
+ *.tar.gz*) \
+ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\
+ *.tar.bz2*) \
+ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
+ *.tar.lz*) \
+ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
+ *.tar.xz*) \
+ xz -dc $(distdir).tar.xz | $(am__untar) ;;\
+ *.tar.Z*) \
+ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+ *.shar.gz*) \
+ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\
+ *.zip*) \
+ unzip $(distdir).zip ;;\
+ esac
+## Make the new source tree read-only. Distributions ought to work in
+## this case. However, make the top-level directory writable so we
+## can make our new subdirs.
+ chmod -R a-w $(distdir)
+ chmod u+w $(distdir)
+ mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst
+## Undo the write access.
+ chmod a-w $(distdir)
+## With GNU make, the following command will be executed even with "make -n",
+## due to the presence of '$(MAKE)'. That is normally all well (and '$(MAKE)'
+## is necessary for things like parallel distcheck), but here we don't want
+## execution. To avoid MAKEFLAGS parsing hassles, use a witness file that a
+## non-'-n' run would have just created.
+ test -d $(distdir)/_build || exit 0; \
+## Compute the absolute path of '_inst'. Strip any leading DOS drive
+## to allow DESTDIR installations. Otherwise "$(DESTDIR)$(prefix)" would
+## expand to "c:/temp/am-dc-5668/c:/src/package/package-1.0/_inst".
+ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+## We will attempt a DESTDIR install in $dc_destdir. We don't
+## create this directory under $dc_install_base, because it would
+## create very long directory names.
+ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+?DISTCHECK-HOOK? && $(MAKE) $(AM_MAKEFLAGS) distcheck-hook \
+## Parallel BSD make may not start a new shell for each command in a recipe,
+## so be sure to 'cd' back to the original directory after this.
+ && am__cwd=`pwd` \
+## If we merely used '$(distdir)/_build' here, "make distcheck" could
+## sometimes fail to detect missing files in the distribution tarball,
+## especially in those cases where both the generated files and their
+## dependencies are explicitly in $(srcdir). See automake bug#18286.
+ && $(am__cd) $(distdir)/_build/sub \
+ && ../../configure \
+?GETTEXT? --with-included-gettext \
+## Additional flags for configure.
+ $(AM_DISTCHECK_CONFIGURE_FLAGS) \
+ $(DISTCHECK_CONFIGURE_FLAGS) \
+## At the moment, the code doesn't actually support changes in these --srcdir
+## and --prefix values, so don't allow them to be overridden by the user or
+## the developer. That used to be allowed, and caused issues in practice
+## (in corner-case usages); see automake bug#14991.
+ --srcdir=../.. --prefix="$$dc_install_base" \
+ && $(MAKE) $(AM_MAKEFLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) dvi \
+ && $(MAKE) $(AM_MAKEFLAGS) check \
+ && $(MAKE) $(AM_MAKEFLAGS) install \
+ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+ && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+ distuninstallcheck \
+## Make sure the package has proper DESTDIR support (we could not test this
+## in the previous install/installcheck/uninstall test, because it's reasonable
+## for installcheck to fail in a DESTDIR install).
+## We make the '$dc_install_base' read-only because this is where files
+## with missing DESTDIR support are likely to be installed.
+ && chmod -R a-w "$$dc_install_base" \
+## The logic here is quite convoluted because we must clean $dc_destdir
+## whatever happens (it won't be erased by the next run of distcheck like
+## $(distdir) is).
+ && ({ \
+## Build the directory, so we can cd into it even if "make install"
+## didn't create it. Use mkdir, not $(MKDIR_P) because we want to
+## fail if the directory already exists (PR/413).
+ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+ } || { rm -rf "$$dc_destdir"; exit 1; }) \
+ && rm -rf "$$dc_destdir" \
+ && $(MAKE) $(AM_MAKEFLAGS) dist \
+## Make sure to remove the dists we created in the test build directory.
+ && rm -rf $(DIST_ARCHIVES) \
+ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
+## Cater to parallel BSD make (see above).
+ && cd "$$am__cwd" \
+ || exit 1
+ $(am__post_remove_distdir)
+ @(echo "$(distdir) archives ready for distribution: "; \
+ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+
+## Define distuninstallcheck_listfiles and distuninstallcheck separately
+## from distcheck, so that they can be overridden by the user.
+.PHONY: distuninstallcheck
+distuninstallcheck_listfiles = find . -type f -print
+## The 'dir' file (created by install-info) might still exist after
+## uninstall, so we must be prepared to account for it. The following
+## check is not 100% strict, but is definitely good enough, and even
+## accounts for overridden $(infodir).
+am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
+ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
+distuninstallcheck:
+ @test -n '$(distuninstallcheck_dir)' || { \
+ echo 'ERROR: trying to run $@ with an empty' \
+ '$$(distuninstallcheck_dir)' >&2; \
+ exit 1; \
+ }; \
+ $(am__cd) '$(distuninstallcheck_dir)' || { \
+ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
+ exit 1; \
+ }; \
+ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left after uninstall:" ; \
+ if test -n "$(DESTDIR)"; then \
+ echo " (check DESTDIR support)"; \
+ fi ; \
+ $(distuninstallcheck_listfiles) ; \
+ exit 1; } >&2
+
+## Define distcleancheck_listfiles and distcleancheck separately
+## from distcheck, so that they can be overridden by the user.
+.PHONY: distcleancheck
+distcleancheck_listfiles = find . -type f -print
+distcleancheck: distclean
+ @if test '$(srcdir)' = . ; then \
+ echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+ exit 1 ; \
+ fi
+ @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left in build directory after distclean:" ; \
+ $(distcleancheck_listfiles) ; \
+ exit 1; } >&2
+endif %?TOPDIR_P%
diff --git a/lib/am/footer.am b/lib/am/footer.am
new file mode 100644
index 000000000..7291df1c8
--- /dev/null
+++ b/lib/am/footer.am
@@ -0,0 +1,19 @@
+## automake - create Makefile.in from Makefile.am
+## Copyright (C) 1994-2017 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 <https://www.gnu.org/licenses/>.
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/lib/am/header-vars.am b/lib/am/header-vars.am
new file mode 100644
index 000000000..10066b397
--- /dev/null
+++ b/lib/am/header-vars.am
@@ -0,0 +1,168 @@
+## automake - create Makefile.in from Makefile.am
+## Copyright (C) 1994-2017 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 <https://www.gnu.org/licenses/>.
+
+VPATH = @srcdir@
+
+@SET_MAKE@
+
+## We used to define this. However, we don't because vendor makes
+## (e.g., Solaris, Irix) won't correctly propagate variables that are
+## defined in Makefile. This particular variable can't be correctly
+## defined by configure (at least, not the current configure), so we
+## simply avoid defining it to allow the user to use this feature with
+## a vendor make.
+## DESTDIR =
+
+## Shell code that determines whether we are running under GNU make.
+##
+## Why the this needs to be so convoluted?
+##
+## (1) We can't unconditionally use make functions or special variables
+## starting with a dot, as those cause non-GNU implmentations to
+## crash hard.
+##
+## (2) We can't use $(MAKE_VERSION) here, as it is also defined in some
+## non-GNU make implementations (e.g., FreeBSD make). But at least
+## BSD make does *not* define the $(CURDIR) variable -- it uses
+## $(.CURDIR) instead.
+##
+## (3) We can't use $(MAKEFILE_LIST) here, as in some situations it
+## might cause the shell to die with "Arg list too long" (see
+## automake bug#18744).
+##
+## (4) We can't use $(MAKE_HOST) unconditionally, as it is only
+## defined in GNU make 4.0 or later.
+##
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+
+## Shell code that determines whether the current make instance is
+## running with a given one-letter option (e.g., -k, -n) that takes
+## no argument.
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+## The format of $(MAKEFLAGS) is quite tricky with GNU make; the
+## variable $(MFLAGS) behaves much better in that regard. So use it.
+ sane_makeflags=$$MFLAGS; \
+ else \
+## Non-GNU make: we must rely on $(MAKEFLAGS). This is tricker and more
+## brittle, but is the best we can do.
+ case $$MAKEFLAGS in \
+## If we run "make TESTS='snooze nap'", FreeBSD make will export MAKEFLAGS
+## to " TESTS=foo\ nap", so that the simpler loop below (on word-split
+## $$MAKEFLAGS) would see a "make flag" equal to "nap", and would wrongly
+## misinterpret that as and indication that make is running in dry mode.
+## This has already happened in practice. So we need this hack.
+ *\\[\ \ ]*) \
+## Extra indirection with ${bs} required by FreeBSD 8.x make.
+## Not sure why (so sorry for the cargo-cult programming here).
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+##
+## GNU make 4.0 has changed the format of $MFLAGS, and removed the space
+## between an option and its argument (e.g., from "-I dir" to "-Idir").
+## So we need to handle both formats, at least for options valid in GNU
+## make. OTOH, BSD make formats $(MAKEFLAGS) by separating all options,
+## and separating any option from its argument, so things are easier
+## there.
+##
+## For GNU make and BSD make.
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+## For GNU make >= 4.0.
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+## For GNU make (possibly overkill, this one).
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+## For BSD make.
+ -[dEDm]) skip_next=yes;; \
+## For NetBSD make.
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+
+## Shell code that determines whether make is running in "dry mode"
+## ("make -n") or not. Useful in rules that invoke make recursively,
+## and are thus executed also with "make -n" -- either because they
+## are declared as dependencies to '.MAKE' (NetBSD make), or because
+## their recipes contain the "$(MAKE)" string (GNU and Solaris make).
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+
+## Shell code that determines whether make is running in "keep-going mode"
+## ("make -k") or not. Useful in rules that must recursively descend into
+## subdirectories, and decide whether to stop at the first error or not.
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+
+## Some derived variables that have been found to be useful.
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+
+## These are defined because otherwise make on NetBSD V1.1 will print
+## (eg): $(NORMAL_INSTALL) expands to empty string.
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+
+## dejagnu.am uses these variables. Some users might rely on them too.
+?BUILD?build_triplet = @build@
+?HOST?host_triplet = @host@
+?TARGET?target_triplet = @target@
diff --git a/lib/am/header.am b/lib/am/header.am
new file mode 100644
index 000000000..d4dba1285
--- /dev/null
+++ b/lib/am/header.am
@@ -0,0 +1,19 @@
+## automake - create Makefile.in from Makefile.am
+## Copyright (C) 1994-2017 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 <https://www.gnu.org/licenses/>.
+
+
+## Exactly the same as data.am.
+include data.am
diff --git a/lib/am/inst-vars.am b/lib/am/inst-vars.am
new file mode 100644
index 000000000..2f2824522
--- /dev/null
+++ b/lib/am/inst-vars.am
@@ -0,0 +1,73 @@
+## automake - create Makefile.in from Makefile.am
+## Copyright (C) 2004-2017 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 <https://www.gnu.org/licenses/>.
+
+if %?FIRST%
+
+## These variables help stripping any $(VPATH) that some
+## Make implementations prepend before VPATH-found files.
+## The issue is discussed at length in distdir.am.
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+## Strip all directories.
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+## Number of files to install concurrently.
+am__install_max = 40
+## Take a $list of nobase files, strip $(srcdir) from them.
+## Split apart in setup variable and an action that can be used
+## in backticks or in a pipe.
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+## Take a $list of nobase files, collect them, indexed by their
+## srcdir-stripped dirnames. For up to am__install_max files, output
+## a line containing the dirname and the files, space-separated.
+## The arbitrary limit helps avoid the quadratic scaling exhibited by
+## string concatenation in most shells, and should avoid line length
+## limitations, while still offering only negligible performance impact
+## through spawning more install commands than absolutely needed.
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+## Collect up to 40 files per line from stdin.
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+
+## A shell code fragment to uninstall files from a given directory.
+## It expects the $dir and $files shell variables to be defined respectively
+## to the directory where the files to be removed are, and to the list of
+## such files.
+am__uninstall_files_from_dir = { \
+## Some rm implementations complain if 'rm -f' is used without arguments.
+ test -z "$$files" \
+## At least Solaris /bin/sh still lacks 'test -e', so we use the multiple
+## tests below instead. We expect $dir to be either non-existent or a
+## directory, so the failure we'll experience if it is a regular file
+## is indeed desired and welcome (better to fail loudly thasn silently).
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+
+endif %?FIRST%
diff --git a/lib/am/install.am b/lib/am/install.am
new file mode 100644
index 000000000..6ba28e732
--- /dev/null
+++ b/lib/am/install.am
@@ -0,0 +1,105 @@
+## automake - create Makefile.in from Makefile.am
+## Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+## ----------------------------------------- ##
+## installdirs -- Creating the installdirs. ##
+## ----------------------------------------- ##
+
+## The reason we loop over %am__installdirs% (instead of simply running
+## $(MKDIR_P) %am__installdirs%) is that directories variable such as
+## "$(DESTDIR)$(mydir)" can potentially expand to "" if $(mydir) is
+## conditionally defined. BTW, those directories are quoted in order
+## to support installation paths with spaces.
+
+if %?SUBDIRS%
+.PHONY: installdirs installdirs-am
+RECURSIVE_TARGETS += installdirs-recursive
+installdirs: installdirs-recursive
+installdirs-am:%installdirs-local%
+?am__installdirs? for dir in %am__installdirs%; do \
+?am__installdirs? test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+?am__installdirs? done
+else !%?SUBDIRS%
+.PHONY: installdirs
+installdirs:%installdirs-local%
+?am__installdirs? for dir in %am__installdirs%; do \
+?am__installdirs? test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+?am__installdirs? done
+endif !%?SUBDIRS%
+
+
+## ----------------- ##
+## Install targets. ##
+## ----------------- ##
+
+.PHONY: install install-exec install-data uninstall
+.PHONY: install-exec-am install-data-am uninstall-am
+
+if %?SUBDIRS%
+RECURSIVE_TARGETS += install-data-recursive install-exec-recursive \
+ install-recursive uninstall-recursive
+install:%maybe_BUILT_SOURCES% install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+else !%?SUBDIRS%
+install:%maybe_BUILT_SOURCES% install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+endif !%?SUBDIRS%
+
+if %?maybe_BUILT_SOURCES%
+.MAKE: install
+endif %?maybe_BUILT_SOURCES%
+
+.MAKE .PHONY: install-am
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+
+.PHONY: installcheck
+?SUBDIRS?installcheck: installcheck-recursive
+?!SUBDIRS?installcheck: installcheck-am
+?!SUBDIRS?.PHONY: installcheck-am
+?!SUBDIRS?installcheck-am:
+
+## If you ever modify this, keep in mind that INSTALL_PROGRAM is used
+## in subdirectories, so never set it to a value relative to the top
+## directory.
+.MAKE .PHONY: install-strip
+install-strip:
+## Beware that there are two variables used to install programs:
+## INSTALL_PROGRAM is used for ordinary *_PROGRAMS
+## install_sh_PROGRAM is used for nobase_*_PROGRAMS (because install-sh
+## creates directories)
+## It's OK to override both with INSTALL_STRIP_PROGRAM, because
+## INSTALL_STRIP_PROGRAM uses install-sh (see m4/strip.m4 for a rationale).
+##
+## Use double quotes for the *_PROGRAM settings because we might need to
+## interpolate some backquotes at runtime.
+##
+## The case for empty $(STRIP) is separate so that it is quoted correctly for
+## multiple words, but does not expand to an empty words if STRIP is empty.
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
diff --git a/lib/am/java.am b/lib/am/java.am
new file mode 100644
index 000000000..4f78e533d
--- /dev/null
+++ b/lib/am/java.am
@@ -0,0 +1,92 @@
+## automake - create Makefile.in from Makefile.am
+## Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+
+## ---------- ##
+## Building. ##
+## ---------- ##
+
+if %?FIRST%
+JAVAC = javac
+CLASSPATH_ENV = CLASSPATH=$(JAVAROOT):$(srcdir)/$(JAVAROOT)$${CLASSPATH:+":$$CLASSPATH"}
+JAVAROOT = $(top_builddir)
+endif %?FIRST%
+
+class%NDIR%.stamp: $(am__java_sources)
+ @list1='$?'; list2=; if test -n "$$list1"; then \
+ for p in $$list1; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ list2="$$list2 $$d$$p"; \
+ done; \
+ echo '$(CLASSPATH_ENV) $(JAVAC) -d $(JAVAROOT) $(AM_JAVACFLAGS) $(JAVACFLAGS) '"$$list2"; \
+ $(CLASSPATH_ENV) $(JAVAC) -d $(JAVAROOT) $(AM_JAVACFLAGS) $(JAVACFLAGS) $$list2; \
+ else :; fi
+ echo timestamp > $@
+
+
+## ------------ ##
+## Installing. ##
+## ------------ ##
+
+if %?INSTALL%
+am__installdirs += "$(DESTDIR)$(%NDIR%dir)"
+?EXEC?.PHONY install-exec-am: install-%DIR%JAVA
+?!EXEC?.PHONY install-data-am: install-%DIR%JAVA
+install-%DIR%JAVA: class%NDIR%.stamp
+ @$(NORMAL_INSTALL)
+## A single .java file can be compiled into multiple .class files. So
+## we just install all the .class files that got built into this
+## directory. This is not optimal, but will have to do for now.
+ @test -n "$(%DIR%_JAVA)" && test -n "$(%NDIR%dir)" || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(%NDIR%dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(%NDIR%dir)"; \
+ set x *.class; shift; test "$$1" != "*.class" || exit 0; \
+ echo " $(INSTALL_DATA)" "$$@" "'$(DESTDIR)$(%NDIR%dir)/$$p'"; \
+ $(INSTALL_DATA) "$$@" "$(DESTDIR)$(%NDIR%dir)"
+endif %?INSTALL%
+
+
+## -------------- ##
+## Uninstalling. ##
+## -------------- ##
+
+if %?INSTALL%
+.PHONY uninstall-am: uninstall-%DIR%JAVA
+uninstall-%DIR%JAVA:
+ @$(NORMAL_UNINSTALL)
+ @test -n "$(%DIR%_JAVA)" && test -n "$(%NDIR%dir)" || exit 0; \
+ set x *.class; shift; test "$$1" != "*.class" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(%NDIR%dir)' && rm -f" "$$@" ")"; \
+ cd "$(DESTDIR)$(%NDIR%dir)" && rm -f "$$@"
+endif %?INSTALL%
+
+
+## ---------- ##
+## Cleaning. ##
+## ---------- ##
+
+.PHONY clean-am: clean-%NDIR%JAVA
+clean-%NDIR%JAVA:
+ -rm -f *.class class%NDIR%.stamp
+
+
+## -------------- ##
+## Distributing. ##
+## -------------- ##
+
+if %?DIST%
+DIST_COMMON += %DISTVAR%
+endif %?DIST%
diff --git a/lib/am/lang-compile.am b/lib/am/lang-compile.am
new file mode 100644
index 000000000..b6c5434b5
--- /dev/null
+++ b/lib/am/lang-compile.am
@@ -0,0 +1,39 @@
+## automake - create Makefile.in from Makefile.am
+## Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+## This file is read once per *language*, not per extension.
+
+## ------------------------- ##
+## Preprocessed Fortran 77. ##
+## ------------------------- ##
+
+## We also handle the case of preprocessing '.F' files into '.f' files.
+if %?PPF77%
+.F.f:
+ $(F77COMPILE) -F $<
+endif %?PPF77%
+
+
+
+## -------- ##
+## Ratfor. ##
+## -------- ##
+
+## We also handle the case of preprocessing `.r' files into `.f' files.
+if %?RATFOR%
+.r.f:
+ $(RCOMPILE) -F $<
+endif %?RATFOR%
diff --git a/lib/am/lex.am b/lib/am/lex.am
new file mode 100644
index 000000000..b57bc5c90
--- /dev/null
+++ b/lib/am/lex.am
@@ -0,0 +1,30 @@
+## automake - create Makefile.in from Makefile.am
+## Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+## See the comment about am__skipyacc in yacc.am.
+if %?MAINTAINER-MODE%
+if %?FIRST%
+@MAINTAINER_MODE_FALSE@am__skiplex = test -f $@ ||
+endif %?FIRST%
+endif %?MAINTAINER-MODE%
+
+?GENERIC?%EXT%%DERIVED-EXT%:
+?!GENERIC?%OBJ%: %SOURCE%
+?GENERIC? %VERBOSE%$(am__skiplex) $(SHELL) $(YLWRAP) %SOURCE% $(LEX_OUTPUT_ROOT).c %OBJ% -- %COMPILE%
+?!GENERIC? %VERBOSE% \
+?!GENERIC??DIST_SOURCE? $(am__skiplex) \
+## For non-suffix rules, we must emulate a VPATH search on %SOURCE%.
+?!GENERIC? $(SHELL) $(YLWRAP) `test -f '%SOURCE%' || echo '$(srcdir)/'`%SOURCE% $(LEX_OUTPUT_ROOT).c %OBJ% -- %COMPILE%
diff --git a/lib/am/library.am b/lib/am/library.am
new file mode 100644
index 000000000..19a7f1a01
--- /dev/null
+++ b/lib/am/library.am
@@ -0,0 +1,20 @@
+## automake - create Makefile.in from Makefile.am
+## Copyright (C) 1994-2017 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 <https://www.gnu.org/licenses/>.
+
+%LIBRARY%: $(%XLIBRARY%_OBJECTS) $(%XLIBRARY%_DEPENDENCIES) $(EXTRA_%XLIBRARY%_DEPENDENCIES) %DIRSTAMP%
+ %SILENT%-rm -f %LIBRARY%
+ %VERBOSE%$(%XLIBRARY%_AR) %LIBRARY% $(%XLIBRARY%_OBJECTS) $(%XLIBRARY%_LIBADD)
+ %SILENT%$(RANLIB) %LIBRARY%
diff --git a/lib/am/libs.am b/lib/am/libs.am
new file mode 100644
index 000000000..377fdc552
--- /dev/null
+++ b/lib/am/libs.am
@@ -0,0 +1,106 @@
+## automake - create Makefile.in from Makefile.am
+## Copyright (C) 1994-2017 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 <https://www.gnu.org/licenses/>.
+
+if %?INSTALL%
+include inst-vars.am
+endif %?INSTALL%
+
+## ------------ ##
+## Installing. ##
+## ------------ ##
+
+if %?INSTALL%
+am__installdirs += "$(DESTDIR)$(%NDIR%dir)"
+?EXEC?.PHONY install-exec-am: install-%DIR%LIBRARIES
+?!EXEC?.PHONY install-data-am: install-%DIR%LIBRARIES
+install-%DIR%LIBRARIES: $(%DIR%_LIBRARIES)
+ @$(NORMAL_INSTALL)
+if %?BASE%
+## Funny invocation because Makefile variable can be empty, leading to
+## a syntax error in sh.
+ @list='$(%DIR%_LIBRARIES)'; test -n "$(%NDIR%dir)" || list=; \
+ list2=; for p in $$list; do \
+ if test -f $$p; then \
+ list2="$$list2 $$p"; \
+ else :; fi; \
+ done; \
+ test -z "$$list2" || { \
+ echo " $(MKDIR_P) '$(DESTDIR)$(%NDIR%dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(%NDIR%dir)" || exit 1; \
+ echo " $(INSTALL_DATA) $$list2 '$(DESTDIR)$(%NDIR%dir)'"; \
+ $(INSTALL_DATA) $$list2 "$(DESTDIR)$(%NDIR%dir)" || exit $$?; }
+else !%?BASE%
+## Funny invocation because Makefile variable can be empty, leading to
+## a syntax error in sh.
+ @list='$(%DIR%_LIBRARIES)'; test -n "$(%NDIR%dir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(%NDIR%dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(%NDIR%dir)" || exit 1; \
+ fi; \
+ $(am__nobase_list) | while read dir files; do \
+ xfiles=; for p in $$files; do \
+ if test -f "$$p"; then xfiles="$$xfiles $$p"; else :; fi; done; \
+ test -z "$$xfiles" || { \
+ test "x$$dir" = x. || { \
+ echo " $(MKDIR_P) '$(DESTDIR)$(%NDIR%dir)/$$dir'"; \
+ $(MKDIR_P) "$(DESTDIR)$(%NDIR%dir)/$$dir"; }; \
+ echo " $(INSTALL_DATA) $$xfiles '$(DESTDIR)$(%NDIR%dir)/$$dir'"; \
+ $(INSTALL_DATA) $$xfiles "$(DESTDIR)$(%NDIR%dir)/$$dir" || exit $$?; }; \
+ done
+endif !%?BASE%
+## We do two loops here so that $(POST_INSTALL) can be empty. If we
+## merge the two loops, we get a syntax error from sh. Anyway, having
+## $(POST_INSTALL) in the middle of the loop essentially renders it
+## useless; sh never actually executes this command. Read the GNU
+## Standards for a little enlightenment on this.
+ @$(POST_INSTALL)
+ @list='$(%DIR%_LIBRARIES)'; test -n "$(%NDIR%dir)" || list=; \
+ for p in $$list; do \
+ if test -f $$p; then \
+?BASE? $(am__strip_dir) \
+?!BASE? f=$$p; \
+## Must ranlib after installing because mod time changes.
+## cd to target directory because AIX ranlib messes up with whitespace
+## in the argument.
+ echo " ( cd '$(DESTDIR)$(%NDIR%dir)' && $(RANLIB) $$f )"; \
+ ( cd "$(DESTDIR)$(%NDIR%dir)" && $(RANLIB) $$f ) || exit $$?; \
+ else :; fi; \
+ done
+endif %?INSTALL%
+
+
+## -------------- ##
+## Uninstalling. ##
+## -------------- ##
+
+if %?INSTALL%
+.PHONY uninstall-am: uninstall-%DIR%LIBRARIES
+uninstall-%DIR%LIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @list='$(%DIR%_LIBRARIES)'; test -n "$(%NDIR%dir)" || list=; \
+?BASE? files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+?!BASE? $(am__nobase_strip_setup); files=`$(am__nobase_strip)`; \
+ dir='$(DESTDIR)$(%NDIR%dir)'; $(am__uninstall_files_from_dir)
+endif %?INSTALL%
+
+
+## ---------- ##
+## Cleaning. ##
+## ---------- ##
+
+.PHONY clean-am: clean-%DIR%LIBRARIES
+clean-%DIR%LIBRARIES:
+ -test -z "$(%DIR%_LIBRARIES)" || rm -f $(%DIR%_LIBRARIES)
diff --git a/lib/am/libtool.am b/lib/am/libtool.am
new file mode 100644
index 000000000..9b882d918
--- /dev/null
+++ b/lib/am/libtool.am
@@ -0,0 +1,28 @@
+## automake - create Makefile.in from Makefile.am
+## Copyright (C) 1994-2017 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 <https://www.gnu.org/licenses/>.
+
+.PHONY: mostlyclean-libtool clean-libtool distclean-libtool
+mostlyclean-am: mostlyclean-libtool
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-am: clean-libtool
+clean-libtool:
+?LTRMS?%LTRMS%
+
+?TOPDIR_P?distclean-am: distclean-libtool
+?TOPDIR_P?distclean-libtool:
+?TOPDIR_P? -rm -f libtool config.lt
diff --git a/lib/am/lisp.am b/lib/am/lisp.am
new file mode 100644
index 000000000..881bf3457
--- /dev/null
+++ b/lib/am/lisp.am
@@ -0,0 +1,124 @@
+## automake - create Makefile.in from Makefile.am
+## Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+if %?INSTALL%
+include inst-vars.am
+endif %?INSTALL%
+
+## ---------- ##
+## Building. ##
+## ---------- ##
+
+.el.elc:
+## We add $(builddir) and $(srcdir) to load-path, so that any '.el' files
+## that $< depends upon can be found (including generated ones).
+## We prefer files from the build directory to those from the source
+## directory, in true VPATH spirit.
+## The destination file is normally determined by appending "c" to the
+## input (which would erronously put it in $(srcdir) in VPATH builds),
+## so we override that, too.
+ if test "$(EMACS)" != "no"; then \
+ am__dir=. am__subdir_includes=''; \
+ case $@ in */*) \
+ am__dir=`echo '$@' | sed 's,/[^/]*$$,,'`; \
+ am__subdir_includes="-L $$am__dir -L $(srcdir)/$$am__dir"; \
+ esac; \
+## Emacs byte-compilation won't create this automatically, sadly.
+ test -d "$$am__dir" || $(MKDIR_P) "$$am__dir" || exit 1; \
+ $(EMACS) --batch \
+ $(AM_ELCFLAGS) $(ELCFLAGS) \
+ $$am__subdir_includes -L $(builddir) -L $(srcdir) \
+ --eval "(defun byte-compile-dest-file (f) \"$@\")" \
+ --eval "(unless (byte-compile-file \"$<\") (kill-emacs 1))"; \
+ else :; fi
+
+
+## ------------ ##
+## Installing. ##
+## ------------ ##
+
+if %?INSTALL%
+am__installdirs += "$(DESTDIR)$(%NDIR%dir)"
+
+?BASE?%DIR%LISP_INSTALL = $(INSTALL_DATA)
+?!BASE?%DIR%LISP_INSTALL = $(install_sh_DATA)
+
+?EXEC?.PHONY install-exec-am: install-%DIR%LISP
+?!EXEC?.PHONY install-data-am: install-%DIR%LISP
+
+install-%DIR%LISP: $(%DIR%_LISP) $(ELCFILES)
+ @$(NORMAL_INSTALL)
+## Do not install anything if EMACS was not found.
+ @if test "$(EMACS)" != no && test -n "$(%NDIR%dir)"; then \
+?!BASE? $(am__vpath_adj_setup) \
+## Funny invocation because Makefile variable can be empty, leading to
+## a syntax error in sh.
+ list='$(%DIR%_LISP)'; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(%NDIR%dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(%NDIR%dir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+## A lisp file can be in the source directory or the build directory.
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+?BASE? $(am__strip_dir) \
+?!BASE? $(am__vpath_adj) \
+ echo " $(%DIR%LISP_INSTALL) '$$d$$p' '$(DESTDIR)$(%NDIR%dir)/$$f'"; \
+ $(%DIR%LISP_INSTALL) "$$d$$p" "$(DESTDIR)$(%NDIR%dir)/$$f" || exit $$?; \
+## Only install .elc file if it exists.
+ if test -f $${p}c; then \
+ echo " $(%DIR%LISP_INSTALL) '$${p}c' '$(DESTDIR)$(%NDIR%dir)/$${f}c'"; \
+ $(%DIR%LISP_INSTALL) "$${p}c" "$(DESTDIR)$(%NDIR%dir)/$${f}c" || exit $$?; \
+ else : ; fi; \
+ done; \
+ else : ; fi
+endif %?INSTALL%
+
+
+## -------------- ##
+## Uninstalling. ##
+## -------------- ##
+
+if %?INSTALL%
+.PHONY uninstall-am: uninstall-%DIR%LISP
+uninstall-%DIR%LISP:
+ @$(NORMAL_UNINSTALL)
+## Do not uninstall anything if EMACS was not found.
+ @test "$(EMACS)" != no && test -n "$(%NDIR%dir)" || exit 0; \
+ list='$(%DIR%_LISP)'; \
+?BASE? files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+?!BASE? $(am__nobase_strip_setup); files=`$(am__nobase_strip)`; \
+ files="$$files "`echo "$$files" | sed 's|$$|c|'`; \
+ dir='$(DESTDIR)$(%NDIR%dir)'; $(am__uninstall_files_from_dir)
+endif %?INSTALL%
+
+
+## ---------- ##
+## Cleaning. ##
+## ---------- ##
+
+.PHONY clean-am: clean-lisp
+clean-lisp:
+ -rm -f $(ELCFILES)
+
+
+## -------------- ##
+## Distributing. ##
+## -------------- ##
+
+if %?DIST%
+DIST_COMMON += %DISTVAR%
+endif %?DIST%
diff --git a/lib/am/local.mk b/lib/am/local.mk
new file mode 100644
index 000000000..3c2d9ba39
--- /dev/null
+++ b/lib/am/local.mk
@@ -0,0 +1,65 @@
+## Included by top-level Makefile for Automake.
+
+## Copyright (C) 1995-2017 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 <https://www.gnu.org/licenses/>.
+
+## --------------------- ##
+## Makefile fragments. ##
+## --------------------- ##
+
+amdir = @amdir@
+
+dist_am_DATA = \
+ %D%/check.am \
+ %D%/check2.am \
+ %D%/clean-hdr.am \
+ %D%/clean.am \
+ %D%/compile.am \
+ %D%/configure.am \
+ %D%/data.am \
+ %D%/dejagnu.am \
+ %D%/depend.am \
+ %D%/depend2.am \
+ %D%/distdir.am \
+ %D%/footer.am \
+ %D%/header-vars.am \
+ %D%/header.am \
+ %D%/install.am \
+ %D%/inst-vars.am \
+ %D%/java.am \
+ %D%/lang-compile.am \
+ %D%/lex.am \
+ %D%/library.am \
+ %D%/libs.am \
+ %D%/libtool.am \
+ %D%/lisp.am \
+ %D%/ltlib.am \
+ %D%/ltlibrary.am \
+ %D%/mans-vars.am \
+ %D%/mans.am \
+ %D%/program.am \
+ %D%/progs.am \
+ %D%/python.am \
+ %D%/remake-hdr.am \
+ %D%/scripts.am \
+ %D%/subdirs.am \
+ %D%/tags.am \
+ %D%/texi-vers.am \
+ %D%/texibuild.am \
+ %D%/texinfos.am \
+ %D%/vala.am \
+ %D%/yacc.am
+
+# vim: ft=automake noet
diff --git a/lib/am/ltlib.am b/lib/am/ltlib.am
new file mode 100644
index 000000000..b99f0bf0a
--- /dev/null
+++ b/lib/am/ltlib.am
@@ -0,0 +1,123 @@
+## automake - create Makefile.in from Makefile.am
+## Copyright (C) 1994-2017 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 <https://www.gnu.org/licenses/>.
+
+if %?INSTALL%
+include inst-vars.am
+endif %?INSTALL%
+
+## ------------ ##
+## Installing. ##
+## ------------ ##
+
+if %?INSTALL%
+
+am__installdirs += "$(DESTDIR)$(%NDIR%dir)"
+
+?EXEC?.PHONY install-exec-am: install-%DIR%LTLIBRARIES
+?!EXEC?.PHONY install-data-am: install-%DIR%LTLIBRARIES
+
+install-%DIR%LTLIBRARIES: $(%DIR%_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+if %?BASE%
+## Funny invocation because Makefile variable can be empty, leading to
+## a syntax error in sh.
+ @list='$(%DIR%_LTLIBRARIES)'; test -n "$(%NDIR%dir)" || list=; \
+ list2=; for p in $$list; do \
+ if test -f $$p; then \
+ list2="$$list2 $$p"; \
+ else :; fi; \
+ done; \
+ test -z "$$list2" || { \
+ echo " $(MKDIR_P) '$(DESTDIR)$(%NDIR%dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(%NDIR%dir)" || exit 1; \
+## Note that we explicitly set the libtool mode. This avoids any lossage
+## if the program doesn't have a name that libtool expects.
+## Use INSTALL and not INSTALL_DATA because libtool knows the right
+## permissions to use.
+?LIBTOOL? echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(%NDIR%dir)'"; \
+?LIBTOOL? $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(%NDIR%dir)"; \
+?!LIBTOOL? echo " $(INSTALL) $(INSTALL_STRIP_FLAG) $$list '$(DESTDIR)$(%NDIR%dir)'"; \
+?!LIBTOOL? $(INSTALL) $(INSTALL_STRIP_FLAG) $$list "$(DESTDIR)$(%NDIR%dir)"; \
+ }
+else !%?BASE%
+ @list='$(%DIR%_LTLIBRARIES)'; test -n "$(%NDIR%dir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(%NDIR%dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(%NDIR%dir)" || exit 1; \
+ fi; \
+ for p in $$list; do if test -f "$$p"; then echo "$$p $$p"; else :; fi; done | \
+ sed '/ .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { cur = "." } \
+ { if ($$2 == cur) { files = files " " $$1 } \
+ else { print cur, files; files = $$1; cur = $$2 } } \
+ END { print cur, files }' | \
+ while read dir files; do \
+ test -z "$$files" || { \
+ test "x$$dir" = x. || { \
+ echo " $(MKDIR_P) '$(DESTDIR)$(%NDIR%dir)/$$dir'"; \
+ $(MKDIR_P) "$(DESTDIR)$(%NDIR%dir)/$$dir"; }; \
+## Note that we explicitly set the libtool mode. This avoids any lossage
+## if the program doesn't have a name that libtool expects.
+## Use INSTALL and not INSTALL_DATA because libtool knows the right
+## permissions to use.
+?LIBTOOL? echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$files '$(DESTDIR)$(%NDIR%dir)/$$dir'"; \
+?LIBTOOL? $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$files "$(DESTDIR)$(%NDIR%dir)/$$dir" || exit $$?; \
+?!LIBTOOL? echo " $(INSTALL) $(INSTALL_STRIP_FLAG) $$files '$(DESTDIR)$(%NDIR%dir)/$$dir'"; \
+?!LIBTOOL? $(INSTALL) $(INSTALL_STRIP_FLAG) $$files "$(DESTDIR)$(%NDIR%dir)/$$dir" || exit $$?; \
+ }; \
+ done
+endif !%?BASE%
+endif %?INSTALL%
+
+
+## -------------- ##
+## Uninstalling. ##
+## -------------- ##
+
+if %?INSTALL%
+.PHONY uninstall-am: uninstall-%DIR%LTLIBRARIES
+uninstall-%DIR%LTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @list='$(%DIR%_LTLIBRARIES)'; test -n "$(%NDIR%dir)" || list=; \
+ for p in $$list; do \
+?BASE? $(am__strip_dir) \
+?!BASE? f=$$p; \
+?LIBTOOL? echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(%NDIR%dir)/$$f'"; \
+?LIBTOOL? $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(%NDIR%dir)/$$f"; \
+?!LIBTOOL? echo " rm -f '$(DESTDIR)$(%NDIR%dir)/$$f'"; \
+?!LIBTOOL? rm -f "$(DESTDIR)$(%NDIR%dir)/$$f"; \
+ done
+endif %?INSTALL%
+
+
+## ---------- ##
+## Cleaning. ##
+## ---------- ##
+
+.PHONY clean-am: clean-%DIR%LTLIBRARIES
+clean-%DIR%LTLIBRARIES:
+ -test -z "$(%DIR%_LTLIBRARIES)" || rm -f $(%DIR%_LTLIBRARIES)
+## 'so_locations' files are created by some linkers (IRIX, OSF) when
+## building a shared object. Libtool places these files in the
+## directory where the shared object is created.
+ @list='$(%DIR%_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
diff --git a/lib/am/ltlibrary.am b/lib/am/ltlibrary.am
new file mode 100644
index 000000000..a7a2c380b
--- /dev/null
+++ b/lib/am/ltlibrary.am
@@ -0,0 +1,18 @@
+## automake - create Makefile.in from Makefile.am
+## Copyright (C) 1994-2017 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 <https://www.gnu.org/licenses/>.
+
+%LTLIBRARY%: $(%XLTLIBRARY%_OBJECTS) $(%XLTLIBRARY%_DEPENDENCIES) $(EXTRA_%XLTLIBRARY%_DEPENDENCIES) %DIRSTAMP%
+ %VERBOSE%$(%XLINK%) %RPATH% $(%XLTLIBRARY%_OBJECTS) $(%XLTLIBRARY%_LIBADD) $(LIBS)
diff --git a/lib/am/mans-vars.am b/lib/am/mans-vars.am
new file mode 100644
index 000000000..3b0f49dff
--- /dev/null
+++ b/lib/am/mans-vars.am
@@ -0,0 +1,20 @@
+## automake - create Makefile.in from Makefile.am
+## Copyright (C) 1994-2017 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 <https://www.gnu.org/licenses/>.
+
+NROFF = nroff
+## We don't really need this, but we use it in case we ever want to
+## support noinst_MANS.
+MANS = %MANS%
diff --git a/lib/am/mans.am b/lib/am/mans.am
new file mode 100644
index 000000000..59d9dd4a2
--- /dev/null
+++ b/lib/am/mans.am
@@ -0,0 +1,154 @@
+## automake - create Makefile.in from Makefile.am
+## Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+include inst-vars.am
+man%SECTION%dir = $(mandir)/man%SECTION%
+
+## ------------ ##
+## Installing. ##
+## ------------ ##
+
+## MANS primary are always installed in mandir, hence install-data
+## is hard coded.
+
+.PHONY: install-man
+?INSTALL-MAN?install-data-am: install-man
+?INSTALL-MAN?am__installdirs += "$(DESTDIR)$(man%SECTION%dir)"
+.PHONY install-man: install-man%SECTION%
+install-man%SECTION%: %DEPS%
+ @$(NORMAL_INSTALL)
+if %?NOTRANS_MANS%
+## Handle MANS with notrans_ prefix
+ @list1='%NOTRANS_SECT_LIST%'; \
+?!HAVE_NOTRANS? list2=''; \
+?HAVE_NOTRANS? list2='%NOTRANS_LIST%'; \
+ test -n "$(man%SECTION%dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man%SECTION%dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man%SECTION%dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+## Extract all items from notrans_man_MANS that should go in this section.
+## This must be done dynamically to support conditionals.
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+## Accept for 'man1' files like 'foo.1c' but not 'sub.1/foo.2' or 'foo-2.1.4'.
+ | sed -n '/\.%SECTION%[a-z]*$$/p'; \
+ fi; \
+## Extract basename of manpage, change the extension if needed.
+ } | while read p; do \
+## Find the file.
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+## Extract the basename of the man page and change the extension if needed.
+ sed 'n;s,.*/,,;p;s,\.[^%SECTION%][0-9a-z]*$$,.%SECTION%,' | \
+ sed 'N;N;s,\n, ,g' | { \
+## We now have a list "sourcefile basename installed-name".
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man%SECTION%dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man%SECTION%dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man%SECTION%dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man%SECTION%dir)" || exit $$?; }; \
+ done; }
+endif %?NOTRANS_MANS%
+if %?TRANS_MANS%
+## Handle MANS without notrans_ prefix
+ @list1='%TRANS_SECT_LIST%'; \
+?!HAVE_TRANS? list2=''; \
+?HAVE_TRANS? list2='%TRANS_LIST%'; \
+ test -n "$(man%SECTION%dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man%SECTION%dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man%SECTION%dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+## Extract all items from notrans_man_MANS that should go in this section.
+## This must be done dynamically to support conditionals.
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+## Accept for 'man1' files like `foo.1c' but not 'sub.1/foo.2' or 'foo-2.1.4'.
+ | sed -n '/\.%SECTION%[a-z]*$$/p'; \
+ fi; \
+## Extract basename of manpage, change the extension if needed.
+ } | while read p; do \
+## Find the file.
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+## Extract the basename of the man page and change the extension if needed.
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^%SECTION%][0-9a-z]*$$,%SECTION%,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+## We now have a list "sourcefile basename installed-name".
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man%SECTION%dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man%SECTION%dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man%SECTION%dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man%SECTION%dir)" || exit $$?; }; \
+ done; }
+endif %?TRANS_MANS%
+
+
+## -------------- ##
+## Uninstalling. ##
+## -------------- ##
+
+.PHONY: uninstall-man
+?INSTALL-MAN?uninstall-am: uninstall-man
+.PHONY uninstall-man: uninstall-man%SECTION%
+uninstall-man%SECTION%:
+ @$(NORMAL_UNINSTALL)
+if %?NOTRANS_MANS%
+## Handle MANS with notrans_ prefix
+ @list='%NOTRANS_SECT_LIST%'; test -n "$(man%SECTION%dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+## Extract all items from notrans_man_MANS that should go in this section.
+## This must be done dynamically to support conditionals.
+?HAVE_NOTRANS? l2='%NOTRANS_LIST%'; for i in $$l2; do echo "$$i"; done | \
+## Accept for 'man1' files like 'foo.1c' but not 'sub.1/foo.2' or 'foo-2.1.4'.
+?HAVE_NOTRANS? sed -n '/\.%SECTION%[a-z]*$$/p'; \
+## Extract basename of manpage, change the extension if needed.
+ } | sed 's,.*/,,;s,\.[^%SECTION%][0-9a-z]*$$,.%SECTION%,'`; \
+ dir='$(DESTDIR)$(man%SECTION%dir)'; $(am__uninstall_files_from_dir)
+endif %?NOTRANS_MANS%
+if %?TRANS_MANS%
+## Handle MANS without notrans_ prefix
+ @list='%TRANS_SECT_LIST%'; test -n "$(man%SECTION%dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+## Extract all items from man_MANS that should go in this section.
+## This must be done dynamically to support conditionals.
+?HAVE_TRANS? l2='%TRANS_LIST%'; for i in $$l2; do echo "$$i"; done | \
+## Accept for 'man1' files like 'foo.1c' but not 'sub.1/foo.2' or 'foo-2.1.4'.
+?HAVE_TRANS? sed -n '/\.%SECTION%[a-z]*$$/p'; \
+## Extract basename of manpage, run it through the program rename
+## transform, and change the extension if needed.
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^%SECTION%][0-9a-z]*$$,%SECTION%,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man%SECTION%dir)'; $(am__uninstall_files_from_dir)
+endif %?TRANS_MANS%
diff --git a/lib/am/program.am b/lib/am/program.am
new file mode 100644
index 000000000..d2fe0e0a5
--- /dev/null
+++ b/lib/am/program.am
@@ -0,0 +1,24 @@
+## automake - create Makefile.in from Makefile.am
+## Copyright (C) 1994-2017 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 <https://www.gnu.org/licenses/>.
+
+%PROGRAM%%EXEEXT%: $(%XPROGRAM%_OBJECTS) $(%XPROGRAM%_DEPENDENCIES) $(EXTRA_%XPROGRAM%_DEPENDENCIES) %DIRSTAMP%
+## Remove program before linking. Otherwise the link will fail if the
+## program is running somewhere. FIXME: this could be a loss if
+## you're using an incremental linker. Maybe we should think twice?
+## Or maybe not... sadly, incremental linkers are rarer than losing
+## systems.
+ @rm -f %PROGRAM%%EXEEXT%
+ %VERBOSE%$(%XLINK%) $(%XPROGRAM%_OBJECTS) $(%XPROGRAM%_LDADD) $(LIBS)
diff --git a/lib/am/progs.am b/lib/am/progs.am
new file mode 100644
index 000000000..cbea73012
--- /dev/null
+++ b/lib/am/progs.am
@@ -0,0 +1,152 @@
+## automake - create Makefile.in from Makefile.am
+## Copyright (C) 1994-2017 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 <https://www.gnu.org/licenses/>.
+
+## ------------ ##
+## Installing. ##
+## ------------ ##
+
+if %?INSTALL%
+am__installdirs += "$(DESTDIR)$(%NDIR%dir)"
+?EXEC?.PHONY install-exec-am: install-%DIR%PROGRAMS
+?!EXEC?.PHONY install-data-am: install-%DIR%PROGRAMS
+install-%DIR%PROGRAMS: $(%DIR%_PROGRAMS)
+ @$(NORMAL_INSTALL)
+## Funny invocation because Makefile variable can be empty, leading to
+## a syntax error in sh.
+ @list='$(%DIR%_PROGRAMS)'; test -n "$(%NDIR%dir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(%NDIR%dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(%NDIR%dir)" || exit 1; \
+ fi; \
+ for p in $$list; do echo "$$p $$p"; done | \
+## On Cygwin with libtool test won't see 'foo.exe' but instead 'foo'.
+## So we check for both.
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p \
+?LIBTOOL? || test -f $$p1 \
+ ; then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+## We now have a list of sourcefile pairs, separated by newline.
+## Turn that into "sourcefile source_base target_dir xformed_target_base",
+## with newlines being turned into spaces in a second step.
+ sed -e 'p;s,.*/,,;n;h' \
+?BASE? -e 's|.*|.|' \
+?!BASE? -e 's|[^/]*$$||; s|^$$|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+## The following awk script turns that into one line containing directories
+## and then lines of 'type target_name_or_directory sources ...', with type
+## 'd' designating directories, and 'f' files.
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+?!BASE? case $$type in \
+?!BASE? d) echo " $(MKDIR_P) '$(DESTDIR)$(%NDIR%dir)/$$dir'"; \
+?!BASE? $(MKDIR_P) "$(DESTDIR)$(%NDIR%dir)/$$dir" || exit $$?;; \
+?!BASE? f) \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+?!LIBTOOL? echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(%NDIR%dir)$$dir'"; \
+?!LIBTOOL? $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(%NDIR%dir)$$dir" || exit $$?; \
+## Note that we explicitly set the libtool mode. This avoids any
+## lossage if the install program doesn't have a name that libtool
+## expects.
+?LIBTOOL? echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(%NDIR%dir)$$dir'"; \
+?LIBTOOL? $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(%NDIR%dir)$$dir" || exit $$?; \
+ } \
+?!BASE? ;; esac \
+ ; done
+
+endif %?INSTALL%
+
+
+## -------------- ##
+## Uninstalling. ##
+## -------------- ##
+
+if %?INSTALL%
+.PHONY uninstall-am: uninstall-%DIR%PROGRAMS
+uninstall-%DIR%PROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(%DIR%_PROGRAMS)'; test -n "$(%NDIR%dir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+## Remove any leading directory before applying $(transform),
+## but keep the directory part in the hold buffer, in order to
+## reapply it again afterwards in the nobase case. Append $(EXEEXT).
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' \
+?!BASE? -e 'x;s,[^/]*$$,,;G;s,\n,,' \
+ `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(%NDIR%dir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(%NDIR%dir)" && rm -f $$files
+endif %?INSTALL%
+
+
+## ---------- ##
+## Cleaning. ##
+## ---------- ##
+
+.PHONY clean-am: clean-%DIR%PROGRAMS
+clean-%DIR%PROGRAMS:
+?!LIBTOOL? -test -z "$(%DIR%_PROGRAMS)" || rm -f $(%DIR%_PROGRAMS)
+## Under Cygwin, we build 'program$(EXEEXT)'. However, if this
+## program uses a Libtool library, Libtool will move it in
+## '_libs/program$(EXEEXT)' and create a 'program' wrapper (without
+## '$(EXEEXT)'). Therefore, if Libtool is used, we must try to erase
+## both 'program$(EXEEXT)' and 'program'.
+## Cleaning the '_libs/' or '.libs/' directory is done from clean-libtool.
+## FIXME: In the future (i.e., when it works) it would be nice to delegate
+## this task to "libtool --mode=clean".
+?LIBTOOL? @list='$(%DIR%_PROGRAMS)'; test -n "$$list" || exit 0; \
+?LIBTOOL? echo " rm -f" $$list; \
+?LIBTOOL? rm -f $$list || exit $$?; \
+?LIBTOOL? test -n "$(EXEEXT)" || exit 0; \
+?LIBTOOL? list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+?LIBTOOL? echo " rm -f" $$list; \
+?LIBTOOL? rm -f $$list
+
+
+## ---------- ##
+## Checking. ##
+## ---------- ##
+
+if %?CK-OPTS%
+.PHONY installcheck-am: installcheck-%DIR%PROGRAMS
+installcheck-%DIR%PROGRAMS: $(%DIR%_PROGRAMS)
+ bad=0; pid=$$$$; list="$(%DIR%_PROGRAMS)"; for p in $$list; do \
+ case ' $(AM_INSTALLCHECK_STD_OPTIONS_EXEMPT) ' in \
+## Match $(srcdir)/$$p in addition to $$p because Sun make might rewrite
+## filenames in AM_INSTALLCHECK_STD_OPTIONS_EXEMPT during VPATH builds.
+ *" $$p "* | *" $(srcdir)/$$p "*) continue;; \
+ esac; \
+## Strip the directory and $(EXEEXT) before applying $(transform).
+ f=`echo "$$p" | \
+ sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+## Insert the directory back if nobase_ is used.
+?!BASE? f=`echo "$$p" | sed 's|[^/]*$$||'`"$$f"; \
+ for opt in --help --version; do \
+ if "$(DESTDIR)$(%NDIR%dir)/$$f" $$opt >c$${pid}_.out \
+ 2>c$${pid}_.err </dev/null \
+ && test -n "`cat c$${pid}_.out`" \
+ && test -z "`cat c$${pid}_.err`"; then :; \
+ else echo "$$f does not support $$opt" 1>&2; bad=1; fi; \
+ done; \
+ done; rm -f c$${pid}_.???; exit $$bad
+endif %?CK-OPTS%
diff --git a/lib/am/python.am b/lib/am/python.am
new file mode 100644
index 000000000..5c438d51d
--- /dev/null
+++ b/lib/am/python.am
@@ -0,0 +1,148 @@
+## automake - create Makefile.in from Makefile.am
+## Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+if %?INSTALL%
+include inst-vars.am
+endif %?INSTALL%
+
+?FIRST?am__py_compile = PYTHON=$(PYTHON) $(SHELL) $(py_compile)
+
+## ------------ ##
+## Installing. ##
+## ------------ ##
+
+if %?INSTALL%
+am__installdirs += "$(DESTDIR)$(%NDIR%dir)"
+?EXEC?.PHONY install-exec-am: install-%DIR%PYTHON
+?!EXEC?.PHONY install-data-am: install-%DIR%PYTHON
+install-%DIR%PYTHON: $(%DIR%_PYTHON)
+ @$(NORMAL_INSTALL)
+if %?BASE%
+ @list='$(%DIR%_PYTHON)'; dlist=; list2=; test -n "$(%NDIR%dir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(%NDIR%dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(%NDIR%dir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+## A file can be in the source directory or the build directory.
+ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \
+ if test -f $$b$$p; then \
+## Compute basename of source file. Unless this is a nobase_ target, we
+## want to install 'python/foo.py' as '$(DESTDIR)$(%NDIR%dir)/foo.py',
+## not '$(DESTDIR)$(%NDIR%dir)/python/foo.py'.
+ $(am__strip_dir) \
+ dlist="$$dlist $$f"; \
+ list2="$$list2 $$b$$p"; \
+ else :; fi; \
+ done; \
+ for file in $$list2; do echo $$file; done | $(am__base_list) | \
+ while read files; do \
+## Don't perform translation, since script name is important.
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(%NDIR%dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(%NDIR%dir)" || exit $$?; \
+ done || exit $$?; \
+## Byte-compile must be done at install time, since file times are
+## encoded in the actual files.
+ if test -n "$$dlist"; then \
+ $(am__py_compile) --destdir "$(DESTDIR)" \
+ --basedir "$(%NDIR%dir)" $$dlist; \
+ else :; fi
+else !%?BASE%
+ @list='$(%DIR%_PYTHON)'; test -n "$(%NDIR%dir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(%NDIR%dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(%NDIR%dir)" || exit 1; \
+ fi; \
+ $(am__nobase_list) | { while read dir files; do \
+ xfiles=; for p in $$files; do \
+## A file can be in the source directory or the build directory.
+ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \
+ if test -f "$$b$$p"; then xfiles="$$xfiles $$b$$p"; dlist="$$dlist $$p"; \
+ else :; fi; done; \
+ test -z "$$xfiles" || { \
+ test "x$$dir" = x. || { \
+ echo "$(MKDIR_P) '$(DESTDIR)$(%NDIR%dir)/$$dir'"; \
+ $(MKDIR_P) "$(DESTDIR)$(%NDIR%dir)/$$dir"; }; \
+## Don't perform translation, since script name is important.
+ echo " $(INSTALL_DATA) $$xfiles '$(DESTDIR)$(%NDIR%dir)/$$dir'"; \
+ $(INSTALL_DATA) $$xfiles "$(DESTDIR)$(%NDIR%dir)/$$dir" || exit $$?; }; \
+ done; \
+## Byte-compile must be done at install time, since file times are
+## encoded in the actual files.
+ if test -n "$$dlist"; then \
+ $(am__py_compile) --destdir "$(DESTDIR)" \
+ --basedir "$(%NDIR%dir)" $$dlist; \
+ else :; fi; }
+endif !%?BASE%
+endif %?INSTALL%
+
+
+## -------------- ##
+## Uninstalling. ##
+## -------------- ##
+
+if %?INSTALL%
+
+?FIRST?am__pep3147_tweak = \
+?FIRST? sed -e 's|\.py$$||' -e 's|[^/]*$$|__pycache__/&.*.py|'
+
+.PHONY uninstall-am: uninstall-%DIR%PYTHON
+uninstall-%DIR%PYTHON:
+ @$(NORMAL_UNINSTALL)
+ @list='$(%DIR%_PYTHON)'; test -n "$(%NDIR%dir)" || list=; \
+?BASE? py_files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+?!BASE? $(am__nobase_strip_setup); py_files=`$(am__nobase_strip)`; \
+ test -n "$$py_files" || exit 0; \
+ dir='$(DESTDIR)$(%NDIR%dir)'; \
+## Also remove the .pyc and .pyo byte compiled versions.
+## This is somewhat tricky, because for newer pythons we have to take
+## PEP-3147 into account.
+ pyc_files=`echo "$$py_files" | sed 's|$$|c|'`; \
+ pyo_files=`echo "$$py_files" | sed 's|$$|o|'`; \
+ py_files_pep3147=`echo "$$py_files" | $(am__pep3147_tweak)`; \
+ echo "$$py_files_pep3147";\
+ pyc_files_pep3147=`echo "$$py_files_pep3147" | sed 's|$$|c|'`; \
+ pyo_files_pep3147=`echo "$$py_files_pep3147" | sed 's|$$|o|'`; \
+ st=0; \
+ for files in \
+ "$$py_files" \
+ "$$pyc_files" \
+ "$$pyo_files" \
+## Installation of '.py' files is not influenced by PEP-3147, so it
+## is correct *not* to have $pyfiles_pep3147 here.
+ "$$pyc_files_pep3147" \
+ "$$pyo_files_pep3147" \
+ ; do \
+ $(am__uninstall_files_from_dir) || st=$$?; \
+ done; \
+ exit $$st
+endif %?INSTALL%
+
+
+## ---------- ##
+## Cleaning. ##
+## ---------- ##
+
+## There is nothing to clean here since files are
+## byte-compiled when (and where) they are installed.
+
+## -------------- ##
+## Distributing. ##
+## -------------- ##
+
+if %?DIST%
+DIST_COMMON += %DISTVAR%
+endif %?DIST%
diff --git a/lib/am/remake-hdr.am b/lib/am/remake-hdr.am
new file mode 100644
index 000000000..52510abdc
--- /dev/null
+++ b/lib/am/remake-hdr.am
@@ -0,0 +1,71 @@
+## automake - create Makefile.in from Makefile.am
+## Copyright (C) 1994-2017 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 <https://www.gnu.org/licenses/>.
+
+%CONFIG_H%: %STAMP%
+## Recover from removal of CONFIG_HEADER.
+ @test -f $@ || rm -f %STAMP%
+ @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) %STAMP%
+
+
+%STAMP%: %CONFIG_H_DEPS% $(top_builddir)/config.status
+ @rm -f %STAMP%
+ cd $(top_builddir) && $(SHELL) ./config.status %CONFIG_H_PATH%
+
+
+## Only the first file of AC_CONFIG_HEADERS is assumed to be generated
+## by autoheader.
+if %?FIRST-HDR%
+%CONFIG_HIN%: %MAINTAINER-MODE% $(am__configure_deps) %FILES%
+## Cater to parallel BSD make.
+ ($(am__cd) $(top_srcdir) && $(AUTOHEADER))
+## Whenever $(AUTOHEADER) has run, we must make sure that
+## ./config.status will rebuild config.h. The dependency from %STAMP%
+## on %CONFIG_H_DEPS% (which contains config.hin) is not enough to
+## express this.
+##
+## There are some tricky cases where this rule will build a
+## config.hin which has the same timestamp as %STAMP%, in which case
+## ./config.status will not be rerun (meaning that users will use an
+## out-of-date config.h without knowing it). One situation where this
+## can occur is the following:
+## 1. the user updates some configure dependency (let's say foo.m4)
+## and runs 'make';
+## 2. the rebuild rules detect that a foo.m4 has changed,
+## run aclocal, autoconf, automake, and then run ./config.status.
+## (Note that autoheader hasn't been called yet, so ./config.status
+## outputs a config.h from an obsolete config.hin);
+## 3. once Makefile has been regenerated, make continues, and
+## discovers that config.h is a dependency of the 'all' rule.
+## Because config.h depends on stamp-h1, stamp-h1 depends on
+## config.hin, and config.hin depends on aclocal.m4, make runs
+## autoheader to rebuild config.hin.
+## Now make ought to call ./config.status once again to rebuild
+## config.h from the new config.hin, but if you have a sufficiently
+## fast box, steps 2 and 3 will occur within the same second: the
+## config.h/stamp-h1 generated from the outdated config.hin will have
+## the same mtime as the new config.hin. Hence make will think that
+## config.h is up to date.
+##
+## A solution is to erase %STAMP% here so that the %STAMP% rule
+## is always triggered after the this one.
+ rm -f %STAMP%
+## Autoheader has the bad habit of not changing the timestamp if
+## config.hin is unchanged, which breaks Make targets. Since what
+## must not changed gratuitously is config.h, which is already handled
+## by config.status, there is no reason to make things complex for
+## config.hin.
+ touch $@
+endif %?FIRST-HDR%
diff --git a/lib/am/scripts.am b/lib/am/scripts.am
new file mode 100644
index 000000000..6a9a23e56
--- /dev/null
+++ b/lib/am/scripts.am
@@ -0,0 +1,127 @@
+## automake - create Makefile.in from Makefile.am
+## Copyright (C) 1994-2017 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 <https://www.gnu.org/licenses/>.
+
+if %?INSTALL%
+include inst-vars.am
+endif %?INSTALL%
+
+## ------------ ##
+## Installing. ##
+## ------------ ##
+
+if %?INSTALL%
+## if doesn't work properly for Automake variables yet.
+am__installdirs += "$(DESTDIR)$(%NDIR%dir)"
+?EXEC?.PHONY install-exec-am: install-%DIR%SCRIPTS
+?!EXEC?.PHONY install-data-am: install-%DIR%SCRIPTS
+install-%DIR%SCRIPTS: $(%DIR%_SCRIPTS)
+ @$(NORMAL_INSTALL)
+## Funny invocation because Makefile variable can be empty, leading to
+## a syntax error in sh.
+ @list='$(%DIR%_SCRIPTS)'; test -n "$(%NDIR%dir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(%NDIR%dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(%NDIR%dir)" || exit 1; \
+ fi; \
+?!BASE? $(am__nobase_strip_setup); \
+ for p in $$list; do \
+## A file can be in the source directory or the build directory.
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+## A script may or may not exist.
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+## We now have a list of "sourcefile newline (nobase-)target" pairs.
+## Turn that into "sourcefile source_base target_dir xformed_target_base",
+## with newlines being turned into spaces in a second step.
+ sed -e 'p;s,.*/,,;n' \
+?BASE? -e 'h;s|.*|.|' \
+?!BASE? -e "s|$$srcdirstrip/||" -e 'h;s|[^/]*$$||; s|^$$|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+?!BASE? case $$type in \
+?!BASE? d) echo " $(MKDIR_P) '$(DESTDIR)$(%NDIR%dir)/$$dir'"; \
+?!BASE? $(MKDIR_P) "$(DESTDIR)$(%NDIR%dir)/$$dir" || exit $$?;; \
+?!BASE? f) \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(%NDIR%dir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(%NDIR%dir)$$dir" || exit $$?; \
+ } \
+?!BASE? ;; esac \
+ ; done
+endif %?INSTALL%
+
+
+## -------------- ##
+## Uninstalling. ##
+## -------------- ##
+
+if %?INSTALL%
+.PHONY uninstall-am: uninstall-%DIR%SCRIPTS
+uninstall-%DIR%SCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(%DIR%_SCRIPTS)'; test -n "$(%NDIR%dir)" || exit 0; \
+?BASE? files=`for p in $$list; do echo "$$p"; done | \
+?BASE? sed -e 's,.*/,,;$(transform)'`; \
+?!BASE? $(am__nobase_strip_setup); \
+?!BASE? files=`$(am__nobase_strip) \
+?!BASE? -e 'h;s,.*/,,;$(transform);x;s|[^/]*$$||;G;s,\n,,'`; \
+ dir='$(DESTDIR)$(%NDIR%dir)'; $(am__uninstall_files_from_dir)
+endif %?INSTALL%
+
+
+## -------------- ##
+## Distributing. ##
+## -------------- ##
+
+if %?DIST%
+DIST_COMMON += %DISTVAR%
+endif %?DIST%
+
+
+## ---------- ##
+## Checking. ##
+## ---------- ##
+
+if %?CK-OPTS%
+.PHONY installcheck-am: installcheck-%DIR%SCRIPTS
+installcheck-%DIR%SCRIPTS: $(%DIR%_SCRIPTS)
+ bad=0; pid=$$$$; list="$(%DIR%_SCRIPTS)"; for p in $$list; do \
+ case ' $(AM_INSTALLCHECK_STD_OPTIONS_EXEMPT) ' in \
+## Match $(srcdir)/$$p in addition to $$p because Sun make might rewrite
+## filenames in AM_INSTALLCHECK_STD_OPTIONS_EXEMPT during VPATH builds.
+ *" $$p "* | *" $(srcdir)/$$p "*) continue;; \
+ esac; \
+## Strip any leading directory before applying $(transform).
+ f=`echo "$$p" | sed 's,^.*/,,;$(transform)'`; \
+## Insert the directory back if nobase_ is used.
+?!BASE? f=`echo "$$p" | sed 's|[^/]*$$||'`"$$f"; \
+ for opt in --help --version; do \
+ if "$(DESTDIR)$(%NDIR%dir)/$$f" $$opt >c$${pid}_.out \
+ 2>c$${pid}_.err </dev/null \
+ && test -n "`cat c$${pid}_.out`" \
+ && test -z "`cat c$${pid}_.err`"; then :; \
+ else echo "$$f does not support $$opt" 1>&2; bad=1; fi; \
+ done; \
+ done; rm -f c$${pid}_.???; exit $$bad
+endif %?CK-OPTS%
diff --git a/lib/am/subdirs.am b/lib/am/subdirs.am
new file mode 100644
index 000000000..db681ba73
--- /dev/null
+++ b/lib/am/subdirs.am
@@ -0,0 +1,75 @@
+## automake - create Makefile.in from Makefile.am
+## Copyright (C) 1994-2017 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 <https://www.gnu.org/licenses/>.
+
+RECURSIVE_TARGETS += all-recursive check-recursive installcheck-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+
+am__recursive_targets = \
+ $(RECURSIVE_TARGETS) \
+ $(RECURSIVE_CLEAN_TARGETS) \
+ $(am__extra_recursive_targets)
+
+## All documented targets which invoke 'make' recursively, or depend
+## on targets that do so. GNUmakefile from gnulib depends on this.
+AM_RECURSIVE_TARGETS += $(am__recursive_targets:-recursive=)
+
+.PHONY .MAKE: $(am__recursive_targets)
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+
+$(am__recursive_targets):
+## Using $failcom allows "-k" to keep its natural meaning when running a
+## recursive rule.
+ @fail=; \
+ if $(am__make_keepgoing); then \
+ failcom='fail=yes'; \
+ else \
+ failcom='exit 1'; \
+ fi; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+## For distclean and maintainer-clean we make sure to use the full
+## list of subdirectories. We do this so that 'configure; make
+## distclean' really is a no-op, even if SUBDIRS is conditional.
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+mostlyclean: mostlyclean-recursive
+clean: clean-recursive
+distclean: distclean-recursive
+maintainer-clean: maintainer-clean-recursive
diff --git a/lib/am/tags.am b/lib/am/tags.am
new file mode 100644
index 000000000..151402e23
--- /dev/null
+++ b/lib/am/tags.am
@@ -0,0 +1,182 @@
+## automake - create Makefile.in from Makefile.am
+## Copyright (C) 1994-2017 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 <https://www.gnu.org/licenses/>.
+
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+## Handle VPATH correctly.
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+
+## ---- ##
+## ID. ##
+## ---- ##
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+
+
+## ------ ##
+## TAGS. ##
+## ------ ##
+
+ETAGS = etags
+.PHONY: TAGS tags
+if %?SUBDIRS%
+AM_RECURSIVE_TARGETS += TAGS
+RECURSIVE_TARGETS += tags-recursive
+tags: tags-recursive
+else !%?SUBDIRS%
+tags: tags-am
+endif !%?SUBDIRS%
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+## We use the positional parameters to build the subdir list with
+## absolute names, without the need to worry about white space in `pwd`.
+ set x; \
+ here=`pwd`; \
+## Exuberant Ctags wants --etags-include,
+## GNU Etags --include
+## Furthermore Exuberant Ctags 5.5.4 fails to create TAGS files
+## when no files are supplied, despite any --etags-include option.
+## A workaround is to pass '.' as a file. This is what $empty_fix is for.
+?SUBDIRS? if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+?SUBDIRS? include_option=--etags-include; \
+?SUBDIRS? empty_fix=.; \
+?SUBDIRS? else \
+?SUBDIRS? include_option=--include; \
+?SUBDIRS? empty_fix=; \
+?SUBDIRS? fi; \
+?SUBDIRS? list='$(SUBDIRS)'; for subdir in $$list; do \
+## Do nothing if we're trying to look in '.'.
+?SUBDIRS? if test "$$subdir" = .; then :; else \
+?SUBDIRS? test ! -f $$subdir/TAGS || \
+## Note that the = is mandatory for --etags-include.
+?SUBDIRS? set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+?SUBDIRS? fi; \
+?SUBDIRS? done; \
+ $(am__define_uniq_tagged_files); \
+## Remove the 'x' we added first:
+ shift; \
+## Make sure we have something to run etags on.
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+
+
+## --------------- ##
+## vi-style tags. ##
+## --------------- ##
+
+CTAGS = ctags
+.PHONY: CTAGS ctags
+if %?SUBDIRS%
+AM_RECURSIVE_TARGETS += CTAGS
+RECURSIVE_TARGETS += ctags-recursive
+ctags: ctags-recursive
+else !%?SUBDIRS%
+ctags: ctags-am
+endif !%?SUBDIRS%
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+## Make sure we have something to run ctags on.
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+
+## --------------- ##
+## "Global tags". ##
+## --------------- ##
+
+.PHONY: GTAGS
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+
+## ------- ##
+## cscope ##
+## ------- ##
+
+if %?TOPDIR_P%
+CSCOPE = cscope
+.PHONY: cscope clean-cscope
+AM_RECURSIVE_TARGETS += cscope
+cscope: cscope.files
+ test ! -s cscope.files \
+ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
+clean-cscope:
+ -rm -f cscope.files
+cscope.files: clean-cscope cscopelist
+endif %?TOPDIR_P%
+
+if %?SUBDIRS%
+RECURSIVE_TARGETS += cscopelist-recursive
+cscopelist: cscopelist-recursive
+else !%?SUBDIRS%
+cscopelist: cscopelist-am
+endif !%?SUBDIRS%
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+
+## ---------- ##
+## Cleaning. ##
+## ---------- ##
+
+.PHONY distclean-am: distclean-tags
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+if %?TOPDIR_P%
+ -rm -f cscope.out cscope.in.out cscope.po.out cscope.files
+endif %?TOPDIR_P%
diff --git a/lib/am/texi-vers.am b/lib/am/texi-vers.am
new file mode 100644
index 000000000..841f7d7cb
--- /dev/null
+++ b/lib/am/texi-vers.am
@@ -0,0 +1,58 @@
+## automake - create Makefile.in from Makefile.am
+## Copyright (C) 1994-2017 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 <https://www.gnu.org/licenses/>.
+
+DIST_COMMON += %VTEXI% %STAMPVTI%
+
+## Don't give this rule a command (even '@:').
+## %STAMPVTI% is always newer than %VTEXI%, so this rule is always
+## triggered. If you equip this rule with a command, GNU make will
+## assume %VTEXI% has been rebuild in the current directory and
+## discard any %VTEXI% file found in a VPATH search.
+%VTEXI%: %MAINTAINER-MODE% %STAMPVTI%
+
+## Depend on configure so that version number updates cause a rebuild.
+## (Not configure.ac, because not all setups define the version number
+## in this file.)
+%STAMPVTI%: %TEXI% $(top_srcdir)/configure
+## It is wrong to have %STAMPVTI% dependent on %DIRSTAMP%, because
+## %STAMPVTI% is distributed and %DIRSTAMP% isn't: a distributed file
+## should never be dependent upon a non-distributed built file.
+## Therefore we ensure that %DIRSTAMP% exists in the rule.
+## Use cp + mv so that the update of %VTEXI% is atomic even if
+## the source directory is on a different file system.
+?DIRSTAMP? @test -f %DIRSTAMP% || $(MAKE) $(AM_MAKEFLAGS) %DIRSTAMP%
+ @(dir=.; test -f ./%TEXI% || dir=$(srcdir); \
+ set `$(SHELL) %MDDIR%mdate-sh $$dir/%TEXI%`; \
+ echo "@set UPDATED $$1 $$2 $$3"; \
+ echo "@set UPDATED-MONTH $$2 $$3"; \
+ echo "@set EDITION $(VERSION)"; \
+ echo "@set VERSION $(VERSION)") > %VTI%.tmp$$$$ && \
+ (cmp -s %VTI%.tmp$$$$ %VTEXI% \
+ || (echo "Updating %VTEXI%" && \
+ cp %VTI%.tmp$$$$ %VTEXI%.tmp$$$$ && \
+ mv %VTEXI%.tmp$$$$ %VTEXI%)) && \
+ rm -f %VTI%.tmp$$$$ %VTEXI%.$$$$
+ @cp %VTEXI% $@
+
+mostlyclean-am: mostlyclean-%VTI%
+mostlyclean-%VTI%:
+ -rm -f %VTI%.tmp* %VTEXI%.tmp*
+
+maintainer-clean-am: maintainer-clean-%VTI%
+maintainer-clean-%VTI%:
+%MAINTAINER-MODE% -rm -f %STAMPVTI% %VTEXI%
+
+.PHONY: mostlyclean-%VTI% maintainer-clean-%VTI%
diff --git a/lib/am/texibuild.am b/lib/am/texibuild.am
new file mode 100644
index 000000000..e2d1b669f
--- /dev/null
+++ b/lib/am/texibuild.am
@@ -0,0 +1,128 @@
+## automake - create Makefile.in from Makefile.am
+## Copyright (C) 1994-2017 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 <https://www.gnu.org/licenses/>.
+
+
+?GENERIC_INFO?%SOURCE_SUFFIX%%DEST_SUFFIX%:
+?!GENERIC_INFO?%DEST_INFO_PREFIX%%DEST_SUFFIX%: %SOURCE_INFO% %DEPS%
+## It is wrong to have 'info' files dependent on %DIRSTAMP%, because
+## 'info' files are distributed and %DIRSTAMP% isn't: a distributed file
+## should never be dependent upon a non-distributed built file.
+## Therefore we ensure that %DIRSTAMP% exists in the rule.
+?!INSRC??DIRSTAMP? @test -f %DIRSTAMP% || $(MAKE) $(AM_MAKEFLAGS) %DIRSTAMP%
+## Back up the info files before running makeinfo. This is the cheapest
+## way to ensure that
+## 1) If the texinfo file shrinks (or if you start using --no-split),
+## you'll not be left with some dead info files lying around -- dead
+## files which would end up in the distribution.
+## 2) If the texinfo file has some minor mistakes which cause makeinfo
+## to fail, the info files are not removed. (They are needed by the
+## developer while he writes documentation.)
+## *.iNN files are used on DJGPP. See the comments in install-info-am
+ %AM_V_MAKEINFO%restore=: && backupdir="$(am__leading_dot)am$$$$" && \
+?INSRC? am__cwd=`pwd` && $(am__cd) $(srcdir) && \
+ rm -rf $$backupdir && mkdir $$backupdir && \
+## If makeinfo is not installed we must not backup the files so
+## 'missing' can do its job and touch $@ if it exists.
+ if ($(MAKEINFO) --version) >/dev/null 2>&1; then \
+ for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
+ if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
+ done; \
+ else :; fi && \
+?INSRC? cd "$$am__cwd"; \
+ if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) %MAKEINFOFLAGS% \
+?!INSRC? -o $@ `test -f '%SOURCE_INFO%' || echo '$(srcdir)/'`%SOURCE_INFO%; \
+?INSRC??!GENERIC_INFO? -o $@ $(srcdir)/%SOURCE_INFO%; \
+?INSRC??GENERIC_INFO? -o $@ $<; \
+ then \
+ rc=0; \
+?INSRC? $(am__cd) $(srcdir); \
+ else \
+ rc=$$?; \
+## Beware that backup info files might come from a subdirectory.
+?INSRC? $(am__cd) $(srcdir) && \
+ $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
+ fi; \
+ rm -rf $$backupdir; exit $$rc
+
+INFO_DEPS += %DEST_INFO_PREFIX%%DEST_SUFFIX%
+
+?GENERIC?%SOURCE_SUFFIX%.dvi:
+?!GENERIC?%DEST_PREFIX%.dvi: %SOURCE% %DEPS% %DIRSTAMP%
+ %AM_V_TEXI2DVI%TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+## Must set MAKEINFO like this so that version.texi will be found even
+## if it is in srcdir (-I $(srcdir) is set in %MAKEINFOFLAGS%).
+ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) %MAKEINFOFLAGS%' \
+## texi2dvi doesn't silence everything with -q, redirect to /dev/null instead.
+## We still want -q (%TEXIQUIET%) because it turns on batch mode.
+## Use '--build-dir' so that TeX and Texinfo auxiliary files and build
+## by-products are left in there, instead of cluttering the current
+## directory (see automake bug#11146). Use a different build-dir for
+## each file (and distinct from that of the corresponding PDF file) to
+## avoid hitting a Texinfop bug that could cause low-probability racy
+## failure when doing parallel builds; see:
+## https://lists.gnu.org/archive/html/automake-patches/2012-06/msg00073.html
+ $(TEXI2DVI) %TEXIQUIET% --build-dir=$(@:.dvi=.t2d) -o $@ %TEXIDEVNULL% \
+?GENERIC? %SOURCE%
+?!GENERIC? `test -f '%SOURCE%' || echo '$(srcdir)/'`%SOURCE%
+
+?GENERIC?%SOURCE_SUFFIX%.pdf:
+?!GENERIC?%DEST_PREFIX%.pdf: %SOURCE% %DEPS% %DIRSTAMP%
+ %AM_V_TEXI2PDF%TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+## Must set MAKEINFO like this so that version.texi will be found even
+## if it is in srcdir (-I $(srcdir) is set in %MAKEINFOFLAGS%).
+ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) %MAKEINFOFLAGS%' \
+## texi2pdf doesn't silence everything with -q, redirect to /dev/null instead.
+## We still want -q (%TEXIQUIET%) because it turns on batch mode.
+## Use '--build-dir' so that TeX and Texinfo auxiliary files and build
+## by-products are left in there, instead of cluttering the current
+## directory (see automake bug#11146). Use a different build-dir for
+## each file (and distinct from that of the corresponding DVI file) to
+## avoid hitting a Texinfop bug that could cause low-probability racy
+## failure when doing parallel builds; see:
+## https://lists.gnu.org/archive/html/automake-patches/2012-06/msg00073.html
+ $(TEXI2PDF) %TEXIQUIET% --build-dir=$(@:.pdf=.t2p) -o $@ %TEXIDEVNULL% \
+?GENERIC? %SOURCE%
+?!GENERIC? `test -f '%SOURCE%' || echo '$(srcdir)/'`%SOURCE%
+
+?GENERIC?%SOURCE_SUFFIX%.html:
+?!GENERIC?%DEST_PREFIX%.html: %SOURCE% %DEPS% %DIRSTAMP%
+## When --split (the default) is used, makeinfo will output a
+## directory. However it will not update the time stamp of a
+## previously existing directory, and when the names of the nodes
+## in the manual change, it may leave unused pages. Our fix
+## is to build under a temporary name, and replace the target on
+## success.
+ %AM_V_MAKEINFO%rm -rf $(@:.html=.htp)
+ %SILENT%if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) %MAKEINFOFLAGS% \
+?GENERIC? -o $(@:.html=.htp) %SOURCE%; \
+?!GENERIC? -o $(@:.html=.htp) `test -f '%SOURCE%' || echo '$(srcdir)/'`%SOURCE%; \
+ then \
+ rm -rf $@ && mv $(@:.html=.htp) $@; \
+ else \
+ rm -rf $(@:.html=.htp); exit 1; \
+ fi
+
+## If we are using the generic rules, we need separate dependencies.
+## (Don't wonder about %DIRSTAMP% here, this is used only by non-generic
+## rules.)
+if %?GENERIC_INFO%
+%DEST_INFO_PREFIX%%DEST_SUFFIX%: %SOURCE_REAL% %DEPS%
+endif %?GENERIC_INFO%
+if %?GENERIC%
+%DEST_PREFIX%.dvi: %SOURCE_REAL% %DEPS%
+%DEST_PREFIX%.pdf: %SOURCE_REAL% %DEPS%
+%DEST_PREFIX%.html: %SOURCE_REAL% %DEPS%
+endif %?GENERIC%
diff --git a/lib/am/texinfos.am b/lib/am/texinfos.am
new file mode 100644
index 000000000..a2a21e667
--- /dev/null
+++ b/lib/am/texinfos.am
@@ -0,0 +1,411 @@
+## automake - create Makefile.in from Makefile.am
+
+## Copyright (C) 1994-2017 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 <https://www.gnu.org/licenses/>.
+
+## ----------- ##
+## Variables. ##
+## ----------- ##
+
+if %?LOCAL-TEXIS%
+TEXI2DVI = texi2dvi
+TEXI2PDF = $(TEXI2DVI) --pdf --batch
+MAKEINFOHTML = $(MAKEINFO) --html
+AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS)
+endif %?LOCAL-TEXIS%
+
+
+## ---------- ##
+## Building. ##
+## ---------- ##
+
+## The way to make PostScript, for those who want it.
+if %?LOCAL-TEXIS%
+DVIPS = dvips
+.dvi.ps:
+ %AM_V_DVIPS%TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ $(DVIPS) %TEXIQUIET% -o $@ $<
+endif %?LOCAL-TEXIS%
+
+.PHONY: dvi dvi-am html html-am info info-am pdf pdf-am ps ps-am
+if %?SUBDIRS%
+RECURSIVE_TARGETS += dvi-recursive html-recursive info-recursive
+RECURSIVE_TARGETS += pdf-recursive ps-recursive
+dvi: dvi-recursive
+html: html-recursive
+info: info-recursive
+pdf: pdf-recursive
+ps: ps-recursive
+else !%?SUBDIRS%
+dvi: dvi-am
+html: html-am
+info: info-am
+pdf: pdf-am
+ps: ps-am
+endif !%?SUBDIRS%
+
+if %?LOCAL-TEXIS%
+dvi-am: $(DVIS)
+html-am: $(HTMLS)
+info-am: $(INFO_DEPS)
+pdf-am: $(PDFS)
+ps-am: $(PSS)
+else ! %?LOCAL-TEXIS%
+dvi-am:
+html-am:
+info-am:
+pdf-am:
+ps-am:
+endif ! %?LOCAL-TEXIS%
+
+
+## ------------ ##
+## Installing. ##
+## ------------ ##
+
+## Some code should be run only if install-info actually exists, and
+## if the user doesn't request it not to be run (through the
+## 'AM_UPDATE_INFO_DIR' environment variable). See automake bug#9773
+## and Debian Bug#543992.
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+
+## Look in both . and srcdir because the info pages might have been
+## rebuilt in the build directory. Can't cd to srcdir; that might
+## break a possible install-sh reference.
+##
+## Funny name due to --cygnus influence; we want to reserve
+## 'install-info' for the user.
+##
+## TEXINFOS primary are always installed in infodir, hence install-data
+## is hard coded.
+if %?INSTALL-INFO%
+if %?LOCAL-TEXIS%
+am__installdirs += "$(DESTDIR)$(infodir)"
+install-data-am: install-info-am
+endif %?LOCAL-TEXIS%
+endif %?INSTALL-INFO%
+.PHONY: \
+ install-dvi install-dvi-am \
+ install-html install-html-am \
+ install-info install-info-am \
+ install-pdf install-pdf-am \
+ install-ps install-ps-am
+
+if %?SUBDIRS%
+RECURSIVE_TARGETS += \
+ install-dvi-recursive \
+ install-html-recursive \
+ install-info-recursive \
+ install-pdf-recursive \
+ install-ps-recursive
+install-dvi: install-dvi-recursive
+install-html: install-html-recursive
+install-info: install-info-recursive
+install-pdf: install-pdf-recursive
+install-ps: install-ps-recursive
+else !%?SUBDIRS%
+install-dvi: install-dvi-am
+install-html: install-html-am
+install-info: install-info-am
+install-pdf: install-pdf-am
+install-ps: install-ps-am
+endif !%?SUBDIRS%
+
+if %?LOCAL-TEXIS%
+
+include inst-vars.am
+
+install-dvi-am: $(DVIS)
+ @$(NORMAL_INSTALL)
+ @list='$(DVIS)'; test -n "$(dvidir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(dvidir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(dvidir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \
+ done
+
+install-html-am: $(HTMLS)
+ @$(NORMAL_INSTALL)
+ @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(htmldir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ $(am__strip_dir) \
+## This indirection is required to work around a bug of the Solaris 10
+## shell /usr/xpg4/bin/sh. The description of the bug can be found at
+## <https://lists.gnu.org/archive/html/bug-autoconf/2011-11/msg00005.html>
+## and the report of the original failure can be found at automake
+## bug#10026 <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=10026#23>
+ d2=$$d$$p; \
+ if test -d "$$d2"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \
+ $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \
+ echo " $(INSTALL_DATA) '$$d2'/* '$(DESTDIR)$(htmldir)/$$f'"; \
+ $(INSTALL_DATA) "$$d2"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \
+ else \
+ list2="$$list2 $$d2"; \
+ fi; \
+ done; \
+ test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \
+ done; }
+
+install-info-am: $(INFO_DEPS)
+ @$(NORMAL_INSTALL)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(infodir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(infodir)" || exit 1; \
+ fi; \
+ for file in $$list; do \
+## Strip possible $(srcdir) prefix.
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ esac; \
+ if test -f $$file; then d=.; else d=$(srcdir); fi; \
+## 8+3 filesystems cannot deal with foo.info-N filenames: they all
+## conflict. DJGPP comes with a tool, DJTAR, that will rename these
+## files to foo.iNN while extracting the archive. DJGPP's makeinfo
+## is patched to grok these filenames. However we have to account
+## for the renaming when installing the info files.
+##
+## If $file == foo.info, then $file_i == foo.i. The reason we use two
+## shell commands instead of one ('s|\.info$$|.i|') is so that a suffix-less
+## 'foo' becomes 'foo.i' too.
+ file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \
+ for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \
+ $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \
+ if test -f $$ifile; then \
+ echo "$$ifile"; \
+ else : ; fi; \
+ done; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done
+ @$(POST_INSTALL)
+ @if $(am__can_run_installinfo); then \
+ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \
+ for file in $$list; do \
+## Strip directory
+ relfile=`echo "$$file" | sed 's|^.*/||'`; \
+## Run ":" after install-info in case install-info fails. We really
+## don't care about failures here, because they can be spurious. For
+## instance if you don't have a dir file, install-info will fail. I
+## think instead it should create a new dir file for you. This bug
+## causes the "make distcheck" target to fail reliably.
+ echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\
+## Use "|| :" here because Sun make passes -e to sh; if install-info
+## fails then we'd fail if we used ";".
+ install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\
+ done; \
+ else : ; fi
+
+install-pdf-am: $(PDFS)
+ @$(NORMAL_INSTALL)
+ @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(pdfdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(pdfdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done
+
+install-ps-am: $(PSS)
+ @$(NORMAL_INSTALL)
+ @list='$(PSS)'; test -n "$(psdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(psdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(psdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done
+
+else ! %?LOCAL-TEXIS%
+install-dvi-am:
+install-html-am:
+install-info-am:
+install-pdf-am:
+install-ps-am:
+endif ! %?LOCAL-TEXIS%
+
+
+## -------------- ##
+## Uninstalling. ##
+## -------------- ##
+
+if %?LOCAL-TEXIS%
+.PHONY uninstall-am: \
+ uninstall-dvi-am \
+ uninstall-html-am \
+ uninstall-info-am \
+ uninstall-ps-am \
+ uninstall-pdf-am
+
+uninstall-dvi-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(DVIS)'; test -n "$(dvidir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \
+ rm -f "$(DESTDIR)$(dvidir)/$$f"; \
+ done
+
+uninstall-html-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+## $f can be a directory, hence the -r.
+ echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \
+ rm -rf "$(DESTDIR)$(htmldir)/$$f"; \
+ done
+
+uninstall-info-am:
+ @$(PRE_UNINSTALL)
+## Run two loops here so that we can handle PRE_UNINSTALL and
+## NORMAL_UNINSTALL correctly.
+ @if test -d '$(DESTDIR)$(infodir)' && $(am__can_run_installinfo); then \
+ list='$(INFO_DEPS)'; \
+ for file in $$list; do \
+ relfile=`echo "$$file" | sed 's|^.*/||'`; \
+## install-info needs the actual info file. We use the installed one,
+## rather than relying on one still being in srcdir or builddir.
+## However, "make uninstall && make uninstall" should not fail,
+## so we ignore failure if the file did not exist.
+ echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \
+ if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \
+ then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \
+ done; \
+ else :; fi
+ @$(NORMAL_UNINSTALL)
+ @list='$(INFO_DEPS)'; \
+ for file in $$list; do \
+ relfile=`echo "$$file" | sed 's|^.*/||'`; \
+## DJGPP-style info files. See comment in install-info-am.
+ relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \
+ (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \
+ echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \
+ rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \
+ else :; fi); \
+ done
+
+uninstall-pdf-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \
+ rm -f "$(DESTDIR)$(pdfdir)/$$f"; \
+ done
+
+uninstall-ps-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(PSS)'; test -n "$(psdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \
+ rm -f "$(DESTDIR)$(psdir)/$$f"; \
+ done
+endif %?LOCAL-TEXIS%
+
+if %?LOCAL-TEXIS%
+.PHONY: dist-info
+dist-info: $(INFO_DEPS)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ list='$(INFO_DEPS)'; \
+ for base in $$list; do \
+## Strip possible $(srcdir) prefix.
+ case $$base in \
+ $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \
+ esac; \
+ if test -f $$base; then d=.; else d=$(srcdir); fi; \
+ base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \
+ for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \
+ if test -f $$file; then \
+## Strip leading '$$d/'.
+ relfile=`expr "$$file" : "$$d/\(.*\)"`; \
+ test -f "$(distdir)/$$relfile" || \
+ cp -p $$file "$(distdir)/$$relfile"; \
+ else :; fi; \
+ done; \
+ done
+endif %?LOCAL-TEXIS%
+
+
+## ---------- ##
+## Cleaning. ##
+## ---------- ##
+
+## The funny name is due to --cygnus influence; in Cygnus mode,
+## 'clean-info' is a target that users can use.
+
+if %?LOCAL-TEXIS%
+.PHONY mostlyclean-am: mostlyclean-aminfo
+.PHONY: mostlyclean-aminfo
+mostlyclean-aminfo:
+## Use '-rf', not just '-f', because the %*CLEAN% substitutions can also
+## contain any directory created by "makeinfo --html", as well as the
+## '*.t2d' and '*.t2p' directories used by texi2dvi and texi2pdf.
+ -rm -rf %MOSTLYCLEAN%
+
+.PHONY clean-am: clean-aminfo
+clean-aminfo:
+## Use '-rf', not just '-f'; see comments in 'mostlyclean-aminfo'
+## above for details.
+?TEXICLEAN? -test -z "%TEXICLEAN%" \
+?TEXICLEAN? || rm -rf %TEXICLEAN%
+
+.PHONY maintainer-clean-am: maintainer-clean-aminfo
+maintainer-clean-aminfo:
+ @list='$(INFO_DEPS)'; for i in $$list; do \
+## .iNN files are DJGPP-style info files.
+ i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \
+ echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \
+ rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \
+ done
+## Use '-rf', not just '-f'; see comments in 'mostlyclean-aminfo'
+## above for details.
+?MAINTCLEAN? -test -z "%MAINTCLEAN%" \
+?MAINTCLEAN? || rm -rf %MAINTCLEAN%
+
+endif %?LOCAL-TEXIS%
diff --git a/lib/am/vala.am b/lib/am/vala.am
new file mode 100644
index 000000000..f20b00c2c
--- /dev/null
+++ b/lib/am/vala.am
@@ -0,0 +1,17 @@
+## automake - create Makefile.in from Makefile.am
+## Copyright (C) 2008-2017 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 <https://www.gnu.org/licenses/>.
+
+## There is no rule here. :-)
diff --git a/lib/am/yacc.am b/lib/am/yacc.am
new file mode 100644
index 000000000..28f05d2de
--- /dev/null
+++ b/lib/am/yacc.am
@@ -0,0 +1,50 @@
+## automake - create Makefile.in from Makefile.am
+## Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+## We want to disable the Yacc rebuild rule when
+## 1. AM_MAINTAINER_MODE is used, and
+## 2. --enable-maintainer-mode is not specified, and
+## 3. parser.c already exist, and
+## 4. parser.y and parser.c are distributed.
+## Point #3 is because "make maintainer-clean" erases parser.c, yet
+## the GNU Coding Standards require that ./configure; make works even
+## after that.
+## Point #4 is because parsers listed in nodist_*_SOURCES are always
+## built on the user's side, so it makes no sense to disable them.
+##
+## Points #1, #2, #3 are solved by unconditionally prefixing the rule
+## with $(am__skipyacc) defined below only when needed.
+##
+## Point #4 requires a condition on whether parser.y/parser.c are
+## distributed or not. We cannot have a generic rule that works in
+## both cases, so we ensure in automake that nodist_ parsers always
+## use non-generic rules.
+if %?FIRST%
+if %?MAINTAINER-MODE%
+@MAINTAINER_MODE_FALSE@am__skipyacc = test -f $@ ||
+endif %?MAINTAINER-MODE%
+## The 's/c$/h/' substitution *must* be the last one.
+am__yacc_c2h = sed -e s/cc$$/hh/ -e s/cpp$$/hpp/ -e s/cxx$$/hxx/ \
+ -e s/c++$$/h++/ -e s/c$$/h/
+endif %?FIRST%
+
+?GENERIC?%EXT%%DERIVED-EXT%:
+?!GENERIC?%OBJ%: %SOURCE%
+?GENERIC? %VERBOSE%$(am__skipyacc) $(SHELL) $(YLWRAP) %SOURCE% y.tab.c %OBJ% y.tab.h `echo %OBJ% | $(am__yacc_c2h)` y.output %BASE%.output -- %COMPILE%
+?!GENERIC? %VERBOSE% \
+?!GENERIC??DIST_SOURCE? $(am__skipyacc) \
+## For non-suffix rules, we must emulate a VPATH search on %SOURCE%.
+?!GENERIC? $(SHELL) $(YLWRAP) `test -f '%SOURCE%' || echo '$(srcdir)/'`%SOURCE% y.tab.c %OBJ% y.tab.h `echo %OBJ% | $(am__yacc_c2h)` y.output %BASE%.output -- %COMPILE%
diff --git a/lib/ar-lib b/lib/ar-lib
new file mode 100755
index 000000000..245e6f32f
--- /dev/null
+++ b/lib/ar-lib
@@ -0,0 +1,270 @@
+#! /bin/sh
+# Wrapper for Microsoft lib.exe
+
+me=ar-lib
+scriptversion=2012-03-01.08; # UTC
+
+# Copyright (C) 2010-2017 Free Software Foundation, Inc.
+# Written by Peter Rosin <peda@lysator.liu.se>.
+#
+# 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 <https://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+
+# func_error message
+func_error ()
+{
+ echo "$me: $1" 1>&2
+ exit 1
+}
+
+file_conv=
+
+# func_file_conv build_file
+# Convert a $build file to $host form and store it in $file
+# Currently only supports Windows hosts.
+func_file_conv ()
+{
+ file=$1
+ case $file in
+ / | /[!/]*) # absolute file, and not a UNC file
+ if test -z "$file_conv"; then
+ # lazily determine how to convert abs files
+ case `uname -s` in
+ MINGW*)
+ file_conv=mingw
+ ;;
+ CYGWIN*)
+ file_conv=cygwin
+ ;;
+ *)
+ file_conv=wine
+ ;;
+ esac
+ fi
+ case $file_conv in
+ mingw)
+ file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
+ ;;
+ cygwin)
+ file=`cygpath -m "$file" || echo "$file"`
+ ;;
+ wine)
+ file=`winepath -w "$file" || echo "$file"`
+ ;;
+ esac
+ ;;
+ esac
+}
+
+# func_at_file at_file operation archive
+# Iterate over all members in AT_FILE performing OPERATION on ARCHIVE
+# for each of them.
+# When interpreting the content of the @FILE, do NOT use func_file_conv,
+# since the user would need to supply preconverted file names to
+# binutils ar, at least for MinGW.
+func_at_file ()
+{
+ operation=$2
+ archive=$3
+ at_file_contents=`cat "$1"`
+ eval set x "$at_file_contents"
+ shift
+
+ for member
+ do
+ $AR -NOLOGO $operation:"$member" "$archive" || exit $?
+ done
+}
+
+case $1 in
+ '')
+ func_error "no command. Try '$0 --help' for more information."
+ ;;
+ -h | --h*)
+ cat <<EOF
+Usage: $me [--help] [--version] PROGRAM ACTION ARCHIVE [MEMBER...]
+
+Members may be specified in a file named with @FILE.
+EOF
+ exit $?
+ ;;
+ -v | --v*)
+ echo "$me, version $scriptversion"
+ exit $?
+ ;;
+esac
+
+if test $# -lt 3; then
+ func_error "you must specify a program, an action and an archive"
+fi
+
+AR=$1
+shift
+while :
+do
+ if test $# -lt 2; then
+ func_error "you must specify a program, an action and an archive"
+ fi
+ case $1 in
+ -lib | -LIB \
+ | -ltcg | -LTCG \
+ | -machine* | -MACHINE* \
+ | -subsystem* | -SUBSYSTEM* \
+ | -verbose | -VERBOSE \
+ | -wx* | -WX* )
+ AR="$AR $1"
+ shift
+ ;;
+ *)
+ action=$1
+ shift
+ break
+ ;;
+ esac
+done
+orig_archive=$1
+shift
+func_file_conv "$orig_archive"
+archive=$file
+
+# strip leading dash in $action
+action=${action#-}
+
+delete=
+extract=
+list=
+quick=
+replace=
+index=
+create=
+
+while test -n "$action"
+do
+ case $action in
+ d*) delete=yes ;;
+ x*) extract=yes ;;
+ t*) list=yes ;;
+ q*) quick=yes ;;
+ r*) replace=yes ;;
+ s*) index=yes ;;
+ S*) ;; # the index is always updated implicitly
+ c*) create=yes ;;
+ u*) ;; # TODO: don't ignore the update modifier
+ v*) ;; # TODO: don't ignore the verbose modifier
+ *)
+ func_error "unknown action specified"
+ ;;
+ esac
+ action=${action#?}
+done
+
+case $delete$extract$list$quick$replace,$index in
+ yes,* | ,yes)
+ ;;
+ yesyes*)
+ func_error "more than one action specified"
+ ;;
+ *)
+ func_error "no action specified"
+ ;;
+esac
+
+if test -n "$delete"; then
+ if test ! -f "$orig_archive"; then
+ func_error "archive not found"
+ fi
+ for member
+ do
+ case $1 in
+ @*)
+ func_at_file "${1#@}" -REMOVE "$archive"
+ ;;
+ *)
+ func_file_conv "$1"
+ $AR -NOLOGO -REMOVE:"$file" "$archive" || exit $?
+ ;;
+ esac
+ done
+
+elif test -n "$extract"; then
+ if test ! -f "$orig_archive"; then
+ func_error "archive not found"
+ fi
+ if test $# -gt 0; then
+ for member
+ do
+ case $1 in
+ @*)
+ func_at_file "${1#@}" -EXTRACT "$archive"
+ ;;
+ *)
+ func_file_conv "$1"
+ $AR -NOLOGO -EXTRACT:"$file" "$archive" || exit $?
+ ;;
+ esac
+ done
+ else
+ $AR -NOLOGO -LIST "$archive" | sed -e 's/\\/\\\\/g' | while read member
+ do
+ $AR -NOLOGO -EXTRACT:"$member" "$archive" || exit $?
+ done
+ fi
+
+elif test -n "$quick$replace"; then
+ if test ! -f "$orig_archive"; then
+ if test -z "$create"; then
+ echo "$me: creating $orig_archive"
+ fi
+ orig_archive=
+ else
+ orig_archive=$archive
+ fi
+
+ for member
+ do
+ case $1 in
+ @*)
+ func_file_conv "${1#@}"
+ set x "$@" "@$file"
+ ;;
+ *)
+ func_file_conv "$1"
+ set x "$@" "$file"
+ ;;
+ esac
+ shift
+ shift
+ done
+
+ if test -n "$orig_archive"; then
+ $AR -NOLOGO -OUT:"$archive" "$orig_archive" "$@" || exit $?
+ else
+ $AR -NOLOGO -OUT:"$archive" "$@" || exit $?
+ fi
+
+elif test -n "$list"; then
+ if test ! -f "$orig_archive"; then
+ func_error "archive not found"
+ fi
+ $AR -NOLOGO -LIST "$archive" || exit $?
+fi
diff --git a/lib/compile b/lib/compile
new file mode 100755
index 000000000..f8e99f0fb
--- /dev/null
+++ b/lib/compile
@@ -0,0 +1,348 @@
+#! /bin/sh
+# Wrapper for compilers which do not understand '-c -o'.
+
+scriptversion=2017-09-16.17; # UTC
+
+# Copyright (C) 1999-2017 Free Software Foundation, Inc.
+# Written by Tom Tromey <tromey@cygnus.com>.
+#
+# 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 <https://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+nl='
+'
+
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent tools from complaining about whitespace usage.
+IFS=" "" $nl"
+
+file_conv=
+
+# func_file_conv build_file lazy
+# Convert a $build file to $host form and store it in $file
+# Currently only supports Windows hosts. If the determined conversion
+# type is listed in (the comma separated) LAZY, no conversion will
+# take place.
+func_file_conv ()
+{
+ file=$1
+ case $file in
+ / | /[!/]*) # absolute file, and not a UNC file
+ if test -z "$file_conv"; then
+ # lazily determine how to convert abs files
+ case `uname -s` in
+ MINGW*)
+ file_conv=mingw
+ ;;
+ CYGWIN*)
+ file_conv=cygwin
+ ;;
+ *)
+ file_conv=wine
+ ;;
+ esac
+ fi
+ case $file_conv/,$2, in
+ *,$file_conv,*)
+ ;;
+ mingw/*)
+ file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
+ ;;
+ cygwin/*)
+ file=`cygpath -m "$file" || echo "$file"`
+ ;;
+ wine/*)
+ file=`winepath -w "$file" || echo "$file"`
+ ;;
+ esac
+ ;;
+ esac
+}
+
+# func_cl_dashL linkdir
+# Make cl look for libraries in LINKDIR
+func_cl_dashL ()
+{
+ func_file_conv "$1"
+ if test -z "$lib_path"; then
+ lib_path=$file
+ else
+ lib_path="$lib_path;$file"
+ fi
+ linker_opts="$linker_opts -LIBPATH:$file"
+}
+
+# func_cl_dashl library
+# Do a library search-path lookup for cl
+func_cl_dashl ()
+{
+ lib=$1
+ found=no
+ save_IFS=$IFS
+ IFS=';'
+ for dir in $lib_path $LIB
+ do
+ IFS=$save_IFS
+ if $shared && test -f "$dir/$lib.dll.lib"; then
+ found=yes
+ lib=$dir/$lib.dll.lib
+ break
+ fi
+ if test -f "$dir/$lib.lib"; then
+ found=yes
+ lib=$dir/$lib.lib
+ break
+ fi
+ if test -f "$dir/lib$lib.a"; then
+ found=yes
+ lib=$dir/lib$lib.a
+ break
+ fi
+ done
+ IFS=$save_IFS
+
+ if test "$found" != yes; then
+ lib=$lib.lib
+ fi
+}
+
+# func_cl_wrapper cl arg...
+# Adjust compile command to suit cl
+func_cl_wrapper ()
+{
+ # Assume a capable shell
+ lib_path=
+ shared=:
+ linker_opts=
+ for arg
+ do
+ if test -n "$eat"; then
+ eat=
+ else
+ case $1 in
+ -o)
+ # configure might choose to run compile as 'compile cc -o foo foo.c'.
+ eat=1
+ case $2 in
+ *.o | *.[oO][bB][jJ])
+ func_file_conv "$2"
+ set x "$@" -Fo"$file"
+ shift
+ ;;
+ *)
+ func_file_conv "$2"
+ set x "$@" -Fe"$file"
+ shift
+ ;;
+ esac
+ ;;
+ -I)
+ eat=1
+ func_file_conv "$2" mingw
+ set x "$@" -I"$file"
+ shift
+ ;;
+ -I*)
+ func_file_conv "${1#-I}" mingw
+ set x "$@" -I"$file"
+ shift
+ ;;
+ -l)
+ eat=1
+ func_cl_dashl "$2"
+ set x "$@" "$lib"
+ shift
+ ;;
+ -l*)
+ func_cl_dashl "${1#-l}"
+ set x "$@" "$lib"
+ shift
+ ;;
+ -L)
+ eat=1
+ func_cl_dashL "$2"
+ ;;
+ -L*)
+ func_cl_dashL "${1#-L}"
+ ;;
+ -static)
+ shared=false
+ ;;
+ -Wl,*)
+ arg=${1#-Wl,}
+ save_ifs="$IFS"; IFS=','
+ for flag in $arg; do
+ IFS="$save_ifs"
+ linker_opts="$linker_opts $flag"
+ done
+ IFS="$save_ifs"
+ ;;
+ -Xlinker)
+ eat=1
+ linker_opts="$linker_opts $2"
+ ;;
+ -*)
+ set x "$@" "$1"
+ shift
+ ;;
+ *.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
+ func_file_conv "$1"
+ set x "$@" -Tp"$file"
+ shift
+ ;;
+ *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
+ func_file_conv "$1" mingw
+ set x "$@" "$file"
+ shift
+ ;;
+ *)
+ set x "$@" "$1"
+ shift
+ ;;
+ esac
+ fi
+ shift
+ done
+ if test -n "$linker_opts"; then
+ linker_opts="-link$linker_opts"
+ fi
+ exec "$@" $linker_opts
+ exit 1
+}
+
+eat=
+
+case $1 in
+ '')
+ echo "$0: No command. Try '$0 --help' for more information." 1>&2
+ exit 1;
+ ;;
+ -h | --h*)
+ cat <<\EOF
+Usage: compile [--help] [--version] PROGRAM [ARGS]
+
+Wrapper for compilers which do not understand '-c -o'.
+Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
+arguments, and rename the output as expected.
+
+If you are trying to build a whole package this is not the
+right script to run: please start by reading the file 'INSTALL'.
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v | --v*)
+ echo "compile $scriptversion"
+ exit $?
+ ;;
+ cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \
+ icl | *[/\\]icl | icl.exe | *[/\\]icl.exe )
+ func_cl_wrapper "$@" # Doesn't return...
+ ;;
+esac
+
+ofile=
+cfile=
+
+for arg
+do
+ if test -n "$eat"; then
+ eat=
+ else
+ case $1 in
+ -o)
+ # configure might choose to run compile as 'compile cc -o foo foo.c'.
+ # So we strip '-o arg' only if arg is an object.
+ eat=1
+ case $2 in
+ *.o | *.obj)
+ ofile=$2
+ ;;
+ *)
+ set x "$@" -o "$2"
+ shift
+ ;;
+ esac
+ ;;
+ *.c)
+ cfile=$1
+ set x "$@" "$1"
+ shift
+ ;;
+ *)
+ set x "$@" "$1"
+ shift
+ ;;
+ esac
+ fi
+ shift
+done
+
+if test -z "$ofile" || test -z "$cfile"; then
+ # If no '-o' option was seen then we might have been invoked from a
+ # pattern rule where we don't need one. That is ok -- this is a
+ # normal compilation that the losing compiler can handle. If no
+ # '.c' file was seen then we are probably linking. That is also
+ # ok.
+ exec "$@"
+fi
+
+# Name of file we expect compiler to create.
+cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
+
+# Create the lock directory.
+# Note: use '[/\\:.-]' here to ensure that we don't use the same name
+# that we are using for the .o file. Also, base the name on the expected
+# object file name, since that is what matters with a parallel build.
+lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
+while true; do
+ if mkdir "$lockdir" >/dev/null 2>&1; then
+ break
+ fi
+ sleep 1
+done
+# FIXME: race condition here if user kills between mkdir and trap.
+trap "rmdir '$lockdir'; exit 1" 1 2 15
+
+# Run the compile.
+"$@"
+ret=$?
+
+if test -f "$cofile"; then
+ test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
+elif test -f "${cofile}bj"; then
+ test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
+fi
+
+rmdir "$lockdir"
+exit $ret
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/lib/config.guess b/lib/config.guess
new file mode 100755
index 000000000..8bd1095f1
--- /dev/null
+++ b/lib/config.guess
@@ -0,0 +1,1448 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+# Copyright 1992-2017 Free Software Foundation, Inc.
+
+timestamp='2017-09-16'
+
+# This file 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 3 of the License, 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 <https://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that
+# program. This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
+#
+# Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
+#
+# You can get the latest version of this script from:
+# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
+#
+# Please send patches to <config-patches@gnu.org>.
+
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright 1992-2017 Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit ;;
+ --version | -v )
+ echo "$version" ; exit ;;
+ --help | --h* | -h )
+ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help" >&2
+ exit 1 ;;
+ * )
+ break ;;
+ esac
+done
+
+if test $# != 0; then
+ echo "$me: too many arguments$help" >&2
+ exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,) echo "int x;" > $dummy.c ;
+ for c in cc gcc c89 c99 ; do
+ if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+ CC_FOR_BUILD="$c"; break ;
+ fi ;
+ done ;
+ if test x"$CC_FOR_BUILD" = x ; then
+ CC_FOR_BUILD=no_compiler_found ;
+ fi
+ ;;
+ ,,*) CC_FOR_BUILD=$CC ;;
+ ,*,*) CC_FOR_BUILD=$HOST_CC ;;
+esac ; set_cc_for_build= ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+ PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+case "${UNAME_SYSTEM}" in
+Linux|GNU|GNU/*)
+ # If the system lacks a compiler, then just pick glibc.
+ # We could probably try harder.
+ LIBC=gnu
+
+ eval $set_cc_for_build
+ cat <<-EOF > $dummy.c
+ #include <features.h>
+ #if defined(__UCLIBC__)
+ LIBC=uclibc
+ #elif defined(__dietlibc__)
+ LIBC=dietlibc
+ #else
+ LIBC=gnu
+ #endif
+ EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
+ ;;
+esac
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+ *:NetBSD:*:*)
+ # NetBSD (nbsd) targets should (where applicable) match one or
+ # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
+ # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
+ # switched to ELF, *-*-netbsd* would select the old
+ # object file format. This provides both forward
+ # compatibility and a consistent mechanism for selecting the
+ # object file format.
+ #
+ # Note: NetBSD doesn't particularly care about the vendor
+ # portion of the name. We always set it to "unknown".
+ sysctl="sysctl -n hw.machine_arch"
+ UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
+ /sbin/$sysctl 2>/dev/null || \
+ /usr/sbin/$sysctl 2>/dev/null || \
+ echo unknown)`
+ case "${UNAME_MACHINE_ARCH}" in
+ armeb) machine=armeb-unknown ;;
+ arm*) machine=arm-unknown ;;
+ sh3el) machine=shl-unknown ;;
+ sh3eb) machine=sh-unknown ;;
+ sh5el) machine=sh5le-unknown ;;
+ earmv*)
+ arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
+ endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'`
+ machine=${arch}${endian}-unknown
+ ;;
+ *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+ esac
+ # The Operating System including object format, if it has switched
+ # to ELF recently (or will in the future) and ABI.
+ case "${UNAME_MACHINE_ARCH}" in
+ earm*)
+ os=netbsdelf
+ ;;
+ arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+ eval $set_cc_for_build
+ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ELF__
+ then
+ # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+ # Return netbsd for either. FIX?
+ os=netbsd
+ else
+ os=netbsdelf
+ fi
+ ;;
+ *)
+ os=netbsd
+ ;;
+ esac
+ # Determine ABI tags.
+ case "${UNAME_MACHINE_ARCH}" in
+ earm*)
+ expr='s/^earmv[0-9]/-eabi/;s/eb$//'
+ abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"`
+ ;;
+ esac
+ # The OS release
+ # Debian GNU/NetBSD machines have a different userland, and
+ # thus, need a distinct triplet. However, they do not need
+ # kernel version information, so it can be replaced with a
+ # suitable tag, in the style of linux-gnu.
+ case "${UNAME_VERSION}" in
+ Debian*)
+ release='-gnu'
+ ;;
+ *)
+ release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2`
+ ;;
+ esac
+ # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+ # contains redundant information, the shorter form:
+ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+ echo "${machine}-${os}${release}${abi}"
+ exit ;;
+ *:Bitrig:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
+ echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE}
+ exit ;;
+ *:OpenBSD:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+ echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+ exit ;;
+ *:LibertyBSD:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'`
+ echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE}
+ exit ;;
+ *:ekkoBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+ exit ;;
+ *:SolidBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+ exit ;;
+ macppc:MirBSD:*:*)
+ echo powerpc-unknown-mirbsd${UNAME_RELEASE}
+ exit ;;
+ *:MirBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+ exit ;;
+ *:Sortix:*:*)
+ echo ${UNAME_MACHINE}-unknown-sortix
+ exit ;;
+ *:Redox:*:*)
+ echo ${UNAME_MACHINE}-unknown-redox
+ exit ;;
+ alpha:OSF1:*:*)
+ case $UNAME_RELEASE in
+ *4.0)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+ ;;
+ *5.*)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+ ;;
+ esac
+ # According to Compaq, /usr/sbin/psrinfo has been available on
+ # OSF/1 and Tru64 systems produced since 1995. I hope that
+ # covers most systems running today. This code pipes the CPU
+ # types through head -n 1, so we only detect the type of CPU 0.
+ ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+ case "$ALPHA_CPU_TYPE" in
+ "EV4 (21064)")
+ UNAME_MACHINE=alpha ;;
+ "EV4.5 (21064)")
+ UNAME_MACHINE=alpha ;;
+ "LCA4 (21066/21068)")
+ UNAME_MACHINE=alpha ;;
+ "EV5 (21164)")
+ UNAME_MACHINE=alphaev5 ;;
+ "EV5.6 (21164A)")
+ UNAME_MACHINE=alphaev56 ;;
+ "EV5.6 (21164PC)")
+ UNAME_MACHINE=alphapca56 ;;
+ "EV5.7 (21164PC)")
+ UNAME_MACHINE=alphapca57 ;;
+ "EV6 (21264)")
+ UNAME_MACHINE=alphaev6 ;;
+ "EV6.7 (21264A)")
+ UNAME_MACHINE=alphaev67 ;;
+ "EV6.8CB (21264C)")
+ UNAME_MACHINE=alphaev68 ;;
+ "EV6.8AL (21264B)")
+ UNAME_MACHINE=alphaev68 ;;
+ "EV6.8CX (21264D)")
+ UNAME_MACHINE=alphaev68 ;;
+ "EV6.9A (21264/EV69A)")
+ UNAME_MACHINE=alphaev69 ;;
+ "EV7 (21364)")
+ UNAME_MACHINE=alphaev7 ;;
+ "EV7.9 (21364A)")
+ UNAME_MACHINE=alphaev79 ;;
+ esac
+ # A Pn.n version is a patched version.
+ # A Vn.n version is a released version.
+ # A Tn.n version is a released field test version.
+ # A Xn.n version is an unreleased experimental baselevel.
+ # 1.2 uses "1.2" for uname -r.
+ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
+ # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
+ exitcode=$?
+ trap '' 0
+ exit $exitcode ;;
+ Amiga*:UNIX_System_V:4.0:*)
+ echo m68k-unknown-sysv4
+ exit ;;
+ *:[Aa]miga[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-amigaos
+ exit ;;
+ *:[Mm]orph[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-morphos
+ exit ;;
+ *:OS/390:*:*)
+ echo i370-ibm-openedition
+ exit ;;
+ *:z/VM:*:*)
+ echo s390-ibm-zvmoe
+ exit ;;
+ *:OS400:*:*)
+ echo powerpc-ibm-os400
+ exit ;;
+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+ echo arm-acorn-riscix${UNAME_RELEASE}
+ exit ;;
+ arm*:riscos:*:*|arm*:RISCOS:*:*)
+ echo arm-unknown-riscos
+ exit ;;
+ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+ echo hppa1.1-hitachi-hiuxmpp
+ exit ;;
+ Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+ # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+ if test "`(/bin/universe) 2>/dev/null`" = att ; then
+ echo pyramid-pyramid-sysv3
+ else
+ echo pyramid-pyramid-bsd
+ fi
+ exit ;;
+ NILE*:*:*:dcosx)
+ echo pyramid-pyramid-svr4
+ exit ;;
+ DRS?6000:unix:4.0:6*)
+ echo sparc-icl-nx6
+ exit ;;
+ DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+ case `/usr/bin/uname -p` in
+ sparc) echo sparc-icl-nx7; exit ;;
+ esac ;;
+ s390x:SunOS:*:*)
+ echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4H:SunOS:5.*:*)
+ echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+ echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
+ echo i386-pc-auroraux${UNAME_RELEASE}
+ exit ;;
+ i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
+ eval $set_cc_for_build
+ SUN_ARCH=i386
+ # If there is a compiler, see if it is configured for 64-bit objects.
+ # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
+ # This test works for both compilers.
+ if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
+ if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ SUN_ARCH=x86_64
+ fi
+ fi
+ echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:6*:*)
+ # According to config.sub, this is the proper way to canonicalize
+ # SunOS6. Hard to guess exactly what SunOS6 will be like, but
+ # it's likely to be more like Solaris than SunOS4.
+ echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:*:*)
+ case "`/usr/bin/arch -k`" in
+ Series*|S4*)
+ UNAME_RELEASE=`uname -v`
+ ;;
+ esac
+ # Japanese Language versions have a version number like `4.1.3-JL'.
+ echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+ exit ;;
+ sun3*:SunOS:*:*)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ exit ;;
+ sun*:*:4.2BSD:*)
+ UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+ test "x${UNAME_RELEASE}" = x && UNAME_RELEASE=3
+ case "`/bin/arch`" in
+ sun3)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ ;;
+ sun4)
+ echo sparc-sun-sunos${UNAME_RELEASE}
+ ;;
+ esac
+ exit ;;
+ aushp:SunOS:*:*)
+ echo sparc-auspex-sunos${UNAME_RELEASE}
+ exit ;;
+ # The situation for MiNT is a little confusing. The machine name
+ # can be virtually everything (everything which is not
+ # "atarist" or "atariste" at least should have a processor
+ # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
+ # to the lowercase version "mint" (or "freemint"). Finally
+ # the system name "TOS" denotes a system which is actually not
+ # MiNT. But MiNT is downward compatible to TOS, so this should
+ # be no problem.
+ atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+ echo m68k-milan-mint${UNAME_RELEASE}
+ exit ;;
+ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+ echo m68k-hades-mint${UNAME_RELEASE}
+ exit ;;
+ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+ echo m68k-unknown-mint${UNAME_RELEASE}
+ exit ;;
+ m68k:machten:*:*)
+ echo m68k-apple-machten${UNAME_RELEASE}
+ exit ;;
+ powerpc:machten:*:*)
+ echo powerpc-apple-machten${UNAME_RELEASE}
+ exit ;;
+ RISC*:Mach:*:*)
+ echo mips-dec-mach_bsd4.3
+ exit ;;
+ RISC*:ULTRIX:*:*)
+ echo mips-dec-ultrix${UNAME_RELEASE}
+ exit ;;
+ VAX*:ULTRIX*:*:*)
+ echo vax-dec-ultrix${UNAME_RELEASE}
+ exit ;;
+ 2020:CLIX:*:* | 2430:CLIX:*:*)
+ echo clipper-intergraph-clix${UNAME_RELEASE}
+ exit ;;
+ mips:*:*:UMIPS | mips:*:*:RISCos)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h> /* for printf() prototype */
+ int main (int argc, char *argv[]) {
+#else
+ int main (argc, argv) int argc; char *argv[]; {
+#endif
+ #if defined (host_mips) && defined (MIPSEB)
+ #if defined (SYSTYPE_SYSV)
+ printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_SVR4)
+ printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+ printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+ #endif
+ #endif
+ exit (-1);
+ }
+EOF
+ $CC_FOR_BUILD -o $dummy $dummy.c &&
+ dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+ SYSTEM_NAME=`$dummy $dummyarg` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ echo mips-mips-riscos${UNAME_RELEASE}
+ exit ;;
+ Motorola:PowerMAX_OS:*:*)
+ echo powerpc-motorola-powermax
+ exit ;;
+ Motorola:*:4.3:PL8-*)
+ echo powerpc-harris-powermax
+ exit ;;
+ Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+ echo powerpc-harris-powermax
+ exit ;;
+ Night_Hawk:Power_UNIX:*:*)
+ echo powerpc-harris-powerunix
+ exit ;;
+ m88k:CX/UX:7*:*)
+ echo m88k-harris-cxux7
+ exit ;;
+ m88k:*:4*:R4*)
+ echo m88k-motorola-sysv4
+ exit ;;
+ m88k:*:3*:R3*)
+ echo m88k-motorola-sysv3
+ exit ;;
+ AViiON:dgux:*:*)
+ # DG/UX returns AViiON for all architectures
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+ then
+ if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+ [ ${TARGET_BINARY_INTERFACE}x = x ]
+ then
+ echo m88k-dg-dgux${UNAME_RELEASE}
+ else
+ echo m88k-dg-dguxbcs${UNAME_RELEASE}
+ fi
+ else
+ echo i586-dg-dgux${UNAME_RELEASE}
+ fi
+ exit ;;
+ M88*:DolphinOS:*:*) # DolphinOS (SVR3)
+ echo m88k-dolphin-sysv3
+ exit ;;
+ M88*:*:R3*:*)
+ # Delta 88k system running SVR3
+ echo m88k-motorola-sysv3
+ exit ;;
+ XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+ echo m88k-tektronix-sysv3
+ exit ;;
+ Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+ echo m68k-tektronix-bsd
+ exit ;;
+ *:IRIX*:*:*)
+ echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+ exit ;;
+ ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+ echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
+ exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '
+ i*86:AIX:*:*)
+ echo i386-ibm-aix
+ exit ;;
+ ia64:AIX:*:*)
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+ exit ;;
+ *:AIX:2:3)
+ if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <sys/systemcfg.h>
+
+ main()
+ {
+ if (!__power_pc())
+ exit(1);
+ puts("powerpc-ibm-aix3.2.5");
+ exit(0);
+ }
+EOF
+ if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+ then
+ echo "$SYSTEM_NAME"
+ else
+ echo rs6000-ibm-aix3.2.5
+ fi
+ elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+ echo rs6000-ibm-aix3.2.4
+ else
+ echo rs6000-ibm-aix3.2
+ fi
+ exit ;;
+ *:AIX:*:[4567])
+ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+ if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+ IBM_ARCH=rs6000
+ else
+ IBM_ARCH=powerpc
+ fi
+ if [ -x /usr/bin/lslpp ] ; then
+ IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc |
+ awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+ exit ;;
+ *:AIX:*:*)
+ echo rs6000-ibm-aix
+ exit ;;
+ ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+ echo romp-ibm-bsd4.4
+ exit ;;
+ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
+ echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
+ exit ;; # report: romp-ibm BSD 4.3
+ *:BOSX:*:*)
+ echo rs6000-bull-bosx
+ exit ;;
+ DPX/2?00:B.O.S.:*:*)
+ echo m68k-bull-sysv3
+ exit ;;
+ 9000/[34]??:4.3bsd:1.*:*)
+ echo m68k-hp-bsd
+ exit ;;
+ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+ echo m68k-hp-bsd4.4
+ exit ;;
+ 9000/[34678]??:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ case "${UNAME_MACHINE}" in
+ 9000/31? ) HP_ARCH=m68000 ;;
+ 9000/[34]?? ) HP_ARCH=m68k ;;
+ 9000/[678][0-9][0-9])
+ if [ -x /usr/bin/getconf ]; then
+ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+ case "${sc_cpu_version}" in
+ 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0
+ 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1
+ 532) # CPU_PA_RISC2_0
+ case "${sc_kernel_bits}" in
+ 32) HP_ARCH=hppa2.0n ;;
+ 64) HP_ARCH=hppa2.0w ;;
+ '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20
+ esac ;;
+ esac
+ fi
+ if [ "${HP_ARCH}" = "" ]; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+
+ #define _HPUX_SOURCE
+ #include <stdlib.h>
+ #include <unistd.h>
+
+ int main ()
+ {
+ #if defined(_SC_KERNEL_BITS)
+ long bits = sysconf(_SC_KERNEL_BITS);
+ #endif
+ long cpu = sysconf (_SC_CPU_VERSION);
+
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+ case CPU_PA_RISC2_0:
+ #if defined(_SC_KERNEL_BITS)
+ switch (bits)
+ {
+ case 64: puts ("hppa2.0w"); break;
+ case 32: puts ("hppa2.0n"); break;
+ default: puts ("hppa2.0"); break;
+ } break;
+ #else /* !defined(_SC_KERNEL_BITS) */
+ puts ("hppa2.0"); break;
+ #endif
+ default: puts ("hppa1.0"); break;
+ }
+ exit (0);
+ }
+EOF
+ (CCOPTS="" $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+ test -z "$HP_ARCH" && HP_ARCH=hppa
+ fi ;;
+ esac
+ if [ ${HP_ARCH} = hppa2.0w ]
+ then
+ eval $set_cc_for_build
+
+ # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+ # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
+ # generating 64-bit code. GNU and HP use different nomenclature:
+ #
+ # $ CC_FOR_BUILD=cc ./config.guess
+ # => hppa2.0w-hp-hpux11.23
+ # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+ # => hppa64-hp-hpux11.23
+
+ if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) |
+ grep -q __LP64__
+ then
+ HP_ARCH=hppa2.0w
+ else
+ HP_ARCH=hppa64
+ fi
+ fi
+ echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+ exit ;;
+ ia64:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ echo ia64-hp-hpux${HPUX_REV}
+ exit ;;
+ 3050*:HI-UX:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <unistd.h>
+ int
+ main ()
+ {
+ long cpu = sysconf (_SC_CPU_VERSION);
+ /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+ true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
+ results, however. */
+ if (CPU_IS_PA_RISC (cpu))
+ {
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+ default: puts ("hppa-hitachi-hiuxwe2"); break;
+ }
+ }
+ else if (CPU_IS_HP_MC68K (cpu))
+ puts ("m68k-hitachi-hiuxwe2");
+ else puts ("unknown-hitachi-hiuxwe2");
+ exit (0);
+ }
+EOF
+ $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ echo unknown-hitachi-hiuxwe2
+ exit ;;
+ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+ echo hppa1.1-hp-bsd
+ exit ;;
+ 9000/8??:4.3bsd:*:*)
+ echo hppa1.0-hp-bsd
+ exit ;;
+ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+ echo hppa1.0-hp-mpeix
+ exit ;;
+ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+ echo hppa1.1-hp-osf
+ exit ;;
+ hp8??:OSF1:*:*)
+ echo hppa1.0-hp-osf
+ exit ;;
+ i*86:OSF1:*:*)
+ if [ -x /usr/sbin/sysversion ] ; then
+ echo ${UNAME_MACHINE}-unknown-osf1mk
+ else
+ echo ${UNAME_MACHINE}-unknown-osf1
+ fi
+ exit ;;
+ parisc*:Lites*:*:*)
+ echo hppa1.1-hp-lites
+ exit ;;
+ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+ echo c1-convex-bsd
+ exit ;;
+ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit ;;
+ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+ echo c34-convex-bsd
+ exit ;;
+ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+ echo c38-convex-bsd
+ exit ;;
+ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+ echo c4-convex-bsd
+ exit ;;
+ CRAY*Y-MP:*:*:*)
+ echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*[A-Z]90:*:*:*)
+ echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+ -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*TS:*:*:*)
+ echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*T3E:*:*:*)
+ echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*SV1:*:*:*)
+ echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ *:UNICOS/mp:*:*)
+ echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+ FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
+ FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit ;;
+ 5000:UNIX_System_V:4.*:*)
+ FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'`
+ echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit ;;
+ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+ echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+ exit ;;
+ sparc*:BSD/OS:*:*)
+ echo sparc-unknown-bsdi${UNAME_RELEASE}
+ exit ;;
+ *:BSD/OS:*:*)
+ echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+ exit ;;
+ *:FreeBSD:*:*)
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ case ${UNAME_PROCESSOR} in
+ amd64)
+ UNAME_PROCESSOR=x86_64 ;;
+ i386)
+ UNAME_PROCESSOR=i586 ;;
+ esac
+ echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+ exit ;;
+ i*:CYGWIN*:*)
+ echo ${UNAME_MACHINE}-pc-cygwin
+ exit ;;
+ *:MINGW64*:*)
+ echo ${UNAME_MACHINE}-pc-mingw64
+ exit ;;
+ *:MINGW*:*)
+ echo ${UNAME_MACHINE}-pc-mingw32
+ exit ;;
+ *:MSYS*:*)
+ echo ${UNAME_MACHINE}-pc-msys
+ exit ;;
+ i*:PW*:*)
+ echo ${UNAME_MACHINE}-pc-pw32
+ exit ;;
+ *:Interix*:*)
+ case ${UNAME_MACHINE} in
+ x86)
+ echo i586-pc-interix${UNAME_RELEASE}
+ exit ;;
+ authenticamd | genuineintel | EM64T)
+ echo x86_64-unknown-interix${UNAME_RELEASE}
+ exit ;;
+ IA64)
+ echo ia64-unknown-interix${UNAME_RELEASE}
+ exit ;;
+ esac ;;
+ i*:UWIN*:*)
+ echo ${UNAME_MACHINE}-pc-uwin
+ exit ;;
+ amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+ echo x86_64-unknown-cygwin
+ exit ;;
+ prep*:SunOS:5.*:*)
+ echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ *:GNU:*:*)
+ # the GNU system
+ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+ exit ;;
+ *:GNU/*:*:*)
+ # other systems with GNU libc and userland
+ echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
+ exit ;;
+ i*86:Minix:*:*)
+ echo ${UNAME_MACHINE}-pc-minix
+ exit ;;
+ aarch64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ aarch64_be:Linux:*:*)
+ UNAME_MACHINE=aarch64_be
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ alpha:Linux:*:*)
+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+ EV5) UNAME_MACHINE=alphaev5 ;;
+ EV56) UNAME_MACHINE=alphaev56 ;;
+ PCA56) UNAME_MACHINE=alphapca56 ;;
+ PCA57) UNAME_MACHINE=alphapca56 ;;
+ EV6) UNAME_MACHINE=alphaev6 ;;
+ EV67) UNAME_MACHINE=alphaev67 ;;
+ EV68*) UNAME_MACHINE=alphaev68 ;;
+ esac
+ objdump --private-headers /bin/sh | grep -q ld.so.1
+ if test "$?" = 0 ; then LIBC=gnulibc1 ; fi
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ arc:Linux:*:* | arceb:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ arm*:Linux:*:*)
+ eval $set_cc_for_build
+ if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_EABI__
+ then
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ else
+ if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_PCS_VFP
+ then
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
+ else
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf
+ fi
+ fi
+ exit ;;
+ avr32*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ cris:Linux:*:*)
+ echo ${UNAME_MACHINE}-axis-linux-${LIBC}
+ exit ;;
+ crisv32:Linux:*:*)
+ echo ${UNAME_MACHINE}-axis-linux-${LIBC}
+ exit ;;
+ e2k:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ frv:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ hexagon:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ i*86:Linux:*:*)
+ echo ${UNAME_MACHINE}-pc-linux-${LIBC}
+ exit ;;
+ ia64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ k1om:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ m32r*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ m68*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ mips:Linux:*:* | mips64:Linux:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #undef CPU
+ #undef ${UNAME_MACHINE}
+ #undef ${UNAME_MACHINE}el
+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+ CPU=${UNAME_MACHINE}el
+ #else
+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+ CPU=${UNAME_MACHINE}
+ #else
+ CPU=
+ #endif
+ #endif
+EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
+ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
+ ;;
+ mips64el:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ openrisc*:Linux:*:*)
+ echo or1k-unknown-linux-${LIBC}
+ exit ;;
+ or32:Linux:*:* | or1k*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ padre:Linux:*:*)
+ echo sparc-unknown-linux-${LIBC}
+ exit ;;
+ parisc64:Linux:*:* | hppa64:Linux:*:*)
+ echo hppa64-unknown-linux-${LIBC}
+ exit ;;
+ parisc:Linux:*:* | hppa:Linux:*:*)
+ # Look for CPU level
+ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+ PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
+ PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
+ *) echo hppa-unknown-linux-${LIBC} ;;
+ esac
+ exit ;;
+ ppc64:Linux:*:*)
+ echo powerpc64-unknown-linux-${LIBC}
+ exit ;;
+ ppc:Linux:*:*)
+ echo powerpc-unknown-linux-${LIBC}
+ exit ;;
+ ppc64le:Linux:*:*)
+ echo powerpc64le-unknown-linux-${LIBC}
+ exit ;;
+ ppcle:Linux:*:*)
+ echo powerpcle-unknown-linux-${LIBC}
+ exit ;;
+ riscv32:Linux:*:* | riscv64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ s390:Linux:*:* | s390x:Linux:*:*)
+ echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
+ exit ;;
+ sh64*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ sh*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ sparc:Linux:*:* | sparc64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ tile*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ vax:Linux:*:*)
+ echo ${UNAME_MACHINE}-dec-linux-${LIBC}
+ exit ;;
+ x86_64:Linux:*:*)
+ echo ${UNAME_MACHINE}-pc-linux-${LIBC}
+ exit ;;
+ xtensa*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ i*86:DYNIX/ptx:4*:*)
+ # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+ # earlier versions are messed up and put the nodename in both
+ # sysname and nodename.
+ echo i386-sequent-sysv4
+ exit ;;
+ i*86:UNIX_SV:4.2MP:2.*)
+ # Unixware is an offshoot of SVR4, but it has its own version
+ # number series starting with 2...
+ # I am not positive that other SVR4 systems won't match this,
+ # I just have to hope. -- rms.
+ # Use sysv4.2uw... so that sysv4* matches it.
+ echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+ exit ;;
+ i*86:OS/2:*:*)
+ # If we were able to find `uname', then EMX Unix compatibility
+ # is probably installed.
+ echo ${UNAME_MACHINE}-pc-os2-emx
+ exit ;;
+ i*86:XTS-300:*:STOP)
+ echo ${UNAME_MACHINE}-unknown-stop
+ exit ;;
+ i*86:atheos:*:*)
+ echo ${UNAME_MACHINE}-unknown-atheos
+ exit ;;
+ i*86:syllable:*:*)
+ echo ${UNAME_MACHINE}-pc-syllable
+ exit ;;
+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
+ echo i386-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ i*86:*DOS:*:*)
+ echo ${UNAME_MACHINE}-pc-msdosdjgpp
+ exit ;;
+ i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+ UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+ if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+ echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+ else
+ echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+ fi
+ exit ;;
+ i*86:*:5:[678]*)
+ # UnixWare 7.x, OpenUNIX and OpenServer 6.
+ case `/bin/uname -X | grep "^Machine"` in
+ *486*) UNAME_MACHINE=i486 ;;
+ *Pentium) UNAME_MACHINE=i586 ;;
+ *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+ esac
+ echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+ exit ;;
+ i*86:*:3.2:*)
+ if test -f /usr/options/cb.name; then
+ UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+ echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+ elif /bin/uname -X 2>/dev/null >/dev/null ; then
+ UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+ (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+ (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+ && UNAME_MACHINE=i586
+ (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+ && UNAME_MACHINE=i686
+ (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+ && UNAME_MACHINE=i686
+ echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+ else
+ echo ${UNAME_MACHINE}-pc-sysv32
+ fi
+ exit ;;
+ pc:*:*:*)
+ # Left here for compatibility:
+ # uname -m prints for DJGPP always 'pc', but it prints nothing about
+ # the processor, so we play safe by assuming i586.
+ # Note: whatever this is, it MUST be the same as what config.sub
+ # prints for the "djgpp" host, or else GDB configure will decide that
+ # this is a cross-build.
+ echo i586-pc-msdosdjgpp
+ exit ;;
+ Intel:Mach:3*:*)
+ echo i386-pc-mach3
+ exit ;;
+ paragon:*:*:*)
+ echo i860-intel-osf1
+ exit ;;
+ i860:*:4.*:*) # i860-SVR4
+ if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+ echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+ else # Add other i860-SVR4 vendors below as they are discovered.
+ echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
+ fi
+ exit ;;
+ mini*:CTIX:SYS*5:*)
+ # "miniframe"
+ echo m68010-convergent-sysv
+ exit ;;
+ mc68k:UNIX:SYSTEM5:3.51m)
+ echo m68k-convergent-sysv
+ exit ;;
+ M680?0:D-NIX:5.3:*)
+ echo m68k-diab-dnix
+ exit ;;
+ M68*:*:R3V[5678]*:*)
+ test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+ 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+ OS_REL=''
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4; exit; } ;;
+ NCR*:*:4.2:* | MPRAS*:*:4.2:*)
+ OS_REL='.3'
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+ m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+ echo m68k-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ mc68030:UNIX_System_V:4.*:*)
+ echo m68k-atari-sysv4
+ exit ;;
+ TSUNAMI:LynxOS:2.*:*)
+ echo sparc-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ rs6000:LynxOS:2.*:*)
+ echo rs6000-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
+ echo powerpc-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ SM[BE]S:UNIX_SV:*:*)
+ echo mips-dde-sysv${UNAME_RELEASE}
+ exit ;;
+ RM*:ReliantUNIX-*:*:*)
+ echo mips-sni-sysv4
+ exit ;;
+ RM*:SINIX-*:*:*)
+ echo mips-sni-sysv4
+ exit ;;
+ *:SINIX-*:*:*)
+ if uname -p 2>/dev/null >/dev/null ; then
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ echo ${UNAME_MACHINE}-sni-sysv4
+ else
+ echo ns32k-sni-sysv
+ fi
+ exit ;;
+ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+ # says <Richard.M.Bartel@ccMail.Census.GOV>
+ echo i586-unisys-sysv4
+ exit ;;
+ *:UNIX_System_V:4*:FTX*)
+ # From Gerald Hewes <hewes@openmarket.com>.
+ # How about differentiating between stratus architectures? -djm
+ echo hppa1.1-stratus-sysv4
+ exit ;;
+ *:*:*:FTX*)
+ # From seanf@swdc.stratus.com.
+ echo i860-stratus-sysv4
+ exit ;;
+ i*86:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ echo ${UNAME_MACHINE}-stratus-vos
+ exit ;;
+ *:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ echo hppa1.1-stratus-vos
+ exit ;;
+ mc68*:A/UX:*:*)
+ echo m68k-apple-aux${UNAME_RELEASE}
+ exit ;;
+ news*:NEWS-OS:6*:*)
+ echo mips-sony-newsos6
+ exit ;;
+ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+ if [ -d /usr/nec ]; then
+ echo mips-nec-sysv${UNAME_RELEASE}
+ else
+ echo mips-unknown-sysv${UNAME_RELEASE}
+ fi
+ exit ;;
+ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
+ echo powerpc-be-beos
+ exit ;;
+ BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
+ echo powerpc-apple-beos
+ exit ;;
+ BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
+ echo i586-pc-beos
+ exit ;;
+ BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
+ echo i586-pc-haiku
+ exit ;;
+ x86_64:Haiku:*:*)
+ echo x86_64-unknown-haiku
+ exit ;;
+ SX-4:SUPER-UX:*:*)
+ echo sx4-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-5:SUPER-UX:*:*)
+ echo sx5-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-6:SUPER-UX:*:*)
+ echo sx6-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-7:SUPER-UX:*:*)
+ echo sx7-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-8:SUPER-UX:*:*)
+ echo sx8-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-8R:SUPER-UX:*:*)
+ echo sx8r-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-ACE:SUPER-UX:*:*)
+ echo sxace-nec-superux${UNAME_RELEASE}
+ exit ;;
+ Power*:Rhapsody:*:*)
+ echo powerpc-apple-rhapsody${UNAME_RELEASE}
+ exit ;;
+ *:Rhapsody:*:*)
+ echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+ exit ;;
+ *:Darwin:*:*)
+ UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+ eval $set_cc_for_build
+ if test "$UNAME_PROCESSOR" = unknown ; then
+ UNAME_PROCESSOR=powerpc
+ fi
+ if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then
+ if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
+ if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ case $UNAME_PROCESSOR in
+ i386) UNAME_PROCESSOR=x86_64 ;;
+ powerpc) UNAME_PROCESSOR=powerpc64 ;;
+ esac
+ fi
+ # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
+ if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
+ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_PPC >/dev/null
+ then
+ UNAME_PROCESSOR=powerpc
+ fi
+ fi
+ elif test "$UNAME_PROCESSOR" = i386 ; then
+ # Avoid executing cc on OS X 10.9, as it ships with a stub
+ # that puts up a graphical alert prompting to install
+ # developer tools. Any system running Mac OS X 10.7 or
+ # later (Darwin 11 and later) is required to have a 64-bit
+ # processor. This is not true of the ARM version of Darwin
+ # that Apple uses in portable devices.
+ UNAME_PROCESSOR=x86_64
+ fi
+ echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+ exit ;;
+ *:procnto*:*:* | *:QNX:[0123456789]*:*)
+ UNAME_PROCESSOR=`uname -p`
+ if test "$UNAME_PROCESSOR" = x86; then
+ UNAME_PROCESSOR=i386
+ UNAME_MACHINE=pc
+ fi
+ echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+ exit ;;
+ *:QNX:*:4*)
+ echo i386-pc-qnx
+ exit ;;
+ NEO-*:NONSTOP_KERNEL:*:*)
+ echo neo-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ NSE-*:NONSTOP_KERNEL:*:*)
+ echo nse-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ NSR-*:NONSTOP_KERNEL:*:*)
+ echo nsr-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ NSX-*:NONSTOP_KERNEL:*:*)
+ echo nsx-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ *:NonStop-UX:*:*)
+ echo mips-compaq-nonstopux
+ exit ;;
+ BS2000:POSIX*:*:*)
+ echo bs2000-siemens-sysv
+ exit ;;
+ DS/*:UNIX_System_V:*:*)
+ echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+ exit ;;
+ *:Plan9:*:*)
+ # "uname -m" is not consistent, so use $cputype instead. 386
+ # is converted to i386 for consistency with other x86
+ # operating systems.
+ if test "$cputype" = 386; then
+ UNAME_MACHINE=i386
+ else
+ UNAME_MACHINE="$cputype"
+ fi
+ echo ${UNAME_MACHINE}-unknown-plan9
+ exit ;;
+ *:TOPS-10:*:*)
+ echo pdp10-unknown-tops10
+ exit ;;
+ *:TENEX:*:*)
+ echo pdp10-unknown-tenex
+ exit ;;
+ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+ echo pdp10-dec-tops20
+ exit ;;
+ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+ echo pdp10-xkl-tops20
+ exit ;;
+ *:TOPS-20:*:*)
+ echo pdp10-unknown-tops20
+ exit ;;
+ *:ITS:*:*)
+ echo pdp10-unknown-its
+ exit ;;
+ SEI:*:*:SEIUX)
+ echo mips-sei-seiux${UNAME_RELEASE}
+ exit ;;
+ *:DragonFly:*:*)
+ echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+ exit ;;
+ *:*VMS:*:*)
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ case "${UNAME_MACHINE}" in
+ A*) echo alpha-dec-vms ; exit ;;
+ I*) echo ia64-dec-vms ; exit ;;
+ V*) echo vax-dec-vms ; exit ;;
+ esac ;;
+ *:XENIX:*:SysV)
+ echo i386-pc-xenix
+ exit ;;
+ i*86:skyos:*:*)
+ echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE} | sed -e 's/ .*$//'`
+ exit ;;
+ i*86:rdos:*:*)
+ echo ${UNAME_MACHINE}-pc-rdos
+ exit ;;
+ i*86:AROS:*:*)
+ echo ${UNAME_MACHINE}-pc-aros
+ exit ;;
+ x86_64:VMkernel:*:*)
+ echo ${UNAME_MACHINE}-unknown-esx
+ exit ;;
+ amd64:Isilon\ OneFS:*:*)
+ echo x86_64-unknown-onefs
+ exit ;;
+esac
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script (version $timestamp), has failed to recognize the
+operating system you are using. If your script is old, overwrite *all*
+copies of config.guess and config.sub with the latest versions from:
+
+ https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
+and
+ https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
+
+If $0 has already been updated, send the following data and any
+information you think might be pertinent to config-patches@gnu.org to
+provide the necessary information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo = `(hostinfo) 2>/dev/null`
+/bin/universe = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/lib/config.sub b/lib/config.sub
new file mode 100755
index 000000000..95dc3d072
--- /dev/null
+++ b/lib/config.sub
@@ -0,0 +1,1836 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+# Copyright 1992-2017 Free Software Foundation, Inc.
+
+timestamp='2017-09-16'
+
+# This file 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 3 of the License, 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 <https://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that
+# program. This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
+
+
+# Please send patches to <config-patches@gnu.org>.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# You can get the latest version of this script from:
+# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support. The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright 1992-2017 Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit ;;
+ --version | -v )
+ echo "$version" ; exit ;;
+ --help | --h* | -h )
+ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help"
+ exit 1 ;;
+
+ *local*)
+ # First pass through any local machine types.
+ echo $1
+ exit ;;
+
+ * )
+ break ;;
+ esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+ exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+ exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+ nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
+ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
+ knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
+ kopensolaris*-gnu* | cloudabi*-eabi* | \
+ storm-chaos* | os2-emx* | rtmk-nova*)
+ os=-$maybe_os
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+ ;;
+ android-linux)
+ os=-linux-android
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
+ ;;
+ *)
+ basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+ if [ $basic_machine != $1 ]
+ then os=`echo $1 | sed 's/.*-/-/'`
+ else os=; fi
+ ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work. We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+ -sun*os*)
+ # Prevent following clause from handling this invalid input.
+ ;;
+ -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+ -apple | -axis | -knuth | -cray | -microblaze*)
+ os=
+ basic_machine=$1
+ ;;
+ -bluegene*)
+ os=-cnk
+ ;;
+ -sim | -cisco | -oki | -wec | -winbond)
+ os=
+ basic_machine=$1
+ ;;
+ -scout)
+ ;;
+ -wrs)
+ os=-vxworks
+ basic_machine=$1
+ ;;
+ -chorusos*)
+ os=-chorusos
+ basic_machine=$1
+ ;;
+ -chorusrdb)
+ os=-chorusrdb
+ basic_machine=$1
+ ;;
+ -hiux*)
+ os=-hiuxwe2
+ ;;
+ -sco6)
+ os=-sco5v6
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco5)
+ os=-sco3.2v5
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco4)
+ os=-sco3.2v4
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2.[4-9]*)
+ os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2v[4-9]*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco5v6*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco*)
+ os=-sco3.2v2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -udk*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -isc)
+ os=-isc2.2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -clix*)
+ basic_machine=clipper-intergraph
+ ;;
+ -isc*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -lynx*178)
+ os=-lynxos178
+ ;;
+ -lynx*5)
+ os=-lynxos5
+ ;;
+ -lynx*)
+ os=-lynxos
+ ;;
+ -ptx*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+ ;;
+ -psos*)
+ os=-psos
+ ;;
+ -mint | -mint[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+ # Recognize the basic CPU types without company name.
+ # Some are omitted here because they have special meanings below.
+ 1750a | 580 \
+ | a29k \
+ | aarch64 | aarch64_be \
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+ | am33_2.0 \
+ | arc | arceb \
+ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
+ | avr | avr32 \
+ | ba \
+ | be32 | be64 \
+ | bfin \
+ | c4x | c8051 | clipper \
+ | d10v | d30v | dlx | dsp16xx \
+ | e2k | epiphany \
+ | fido | fr30 | frv | ft32 \
+ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ | hexagon \
+ | i370 | i860 | i960 | ia16 | ia64 \
+ | ip2k | iq2000 \
+ | k1om \
+ | le32 | le64 \
+ | lm32 \
+ | m32c | m32r | m32rle | m68000 | m68k | m88k \
+ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \
+ | mips | mipsbe | mipseb | mipsel | mipsle \
+ | mips16 \
+ | mips64 | mips64el \
+ | mips64octeon | mips64octeonel \
+ | mips64orion | mips64orionel \
+ | mips64r5900 | mips64r5900el \
+ | mips64vr | mips64vrel \
+ | mips64vr4100 | mips64vr4100el \
+ | mips64vr4300 | mips64vr4300el \
+ | mips64vr5000 | mips64vr5000el \
+ | mips64vr5900 | mips64vr5900el \
+ | mipsisa32 | mipsisa32el \
+ | mipsisa32r2 | mipsisa32r2el \
+ | mipsisa32r6 | mipsisa32r6el \
+ | mipsisa64 | mipsisa64el \
+ | mipsisa64r2 | mipsisa64r2el \
+ | mipsisa64r6 | mipsisa64r6el \
+ | mipsisa64sb1 | mipsisa64sb1el \
+ | mipsisa64sr71k | mipsisa64sr71kel \
+ | mipsr5900 | mipsr5900el \
+ | mipstx39 | mipstx39el \
+ | mn10200 | mn10300 \
+ | moxie \
+ | mt \
+ | msp430 \
+ | nds32 | nds32le | nds32be \
+ | nios | nios2 | nios2eb | nios2el \
+ | ns16k | ns32k \
+ | open8 | or1k | or1knd | or32 \
+ | pdp10 | pdp11 | pj | pjl \
+ | powerpc | powerpc64 | powerpc64le | powerpcle \
+ | pru \
+ | pyramid \
+ | riscv32 | riscv64 \
+ | rl78 | rx \
+ | score \
+ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+ | sh64 | sh64le \
+ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+ | spu \
+ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
+ | ubicom32 \
+ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
+ | visium \
+ | wasm32 \
+ | we32k \
+ | x86 | xc16x | xstormy16 | xtensa \
+ | z8k | z80)
+ basic_machine=$basic_machine-unknown
+ ;;
+ c54x)
+ basic_machine=tic54x-unknown
+ ;;
+ c55x)
+ basic_machine=tic55x-unknown
+ ;;
+ c6x)
+ basic_machine=tic6x-unknown
+ ;;
+ leon|leon[3-9])
+ basic_machine=sparc-$basic_machine
+ ;;
+ m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+ ;;
+ ms1)
+ basic_machine=mt-unknown
+ ;;
+
+ strongarm | thumb | xscale)
+ basic_machine=arm-unknown
+ ;;
+ xgate)
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+ xscaleeb)
+ basic_machine=armeb-unknown
+ ;;
+
+ xscaleel)
+ basic_machine=armel-unknown
+ ;;
+
+ # We use `pc' rather than `unknown'
+ # because (1) that's what they normally are, and
+ # (2) the word "unknown" tends to confuse beginning users.
+ i*86 | x86_64)
+ basic_machine=$basic_machine-pc
+ ;;
+ # Object if more than one company name word.
+ *-*-*)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+ # Recognize the basic CPU types with company name.
+ 580-* \
+ | a29k-* \
+ | aarch64-* | aarch64_be-* \
+ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
+ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
+ | avr-* | avr32-* \
+ | ba-* \
+ | be32-* | be64-* \
+ | bfin-* | bs2000-* \
+ | c[123]* | c30-* | [cjt]90-* | c4x-* \
+ | c8051-* | clipper-* | craynv-* | cydra-* \
+ | d10v-* | d30v-* | dlx-* \
+ | e2k-* | elxsi-* \
+ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
+ | h8300-* | h8500-* \
+ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+ | hexagon-* \
+ | i*86-* | i860-* | i960-* | ia16-* | ia64-* \
+ | ip2k-* | iq2000-* \
+ | k1om-* \
+ | le32-* | le64-* \
+ | lm32-* \
+ | m32c-* | m32r-* | m32rle-* \
+ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
+ | microblaze-* | microblazeel-* \
+ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+ | mips16-* \
+ | mips64-* | mips64el-* \
+ | mips64octeon-* | mips64octeonel-* \
+ | mips64orion-* | mips64orionel-* \
+ | mips64r5900-* | mips64r5900el-* \
+ | mips64vr-* | mips64vrel-* \
+ | mips64vr4100-* | mips64vr4100el-* \
+ | mips64vr4300-* | mips64vr4300el-* \
+ | mips64vr5000-* | mips64vr5000el-* \
+ | mips64vr5900-* | mips64vr5900el-* \
+ | mipsisa32-* | mipsisa32el-* \
+ | mipsisa32r2-* | mipsisa32r2el-* \
+ | mipsisa32r6-* | mipsisa32r6el-* \
+ | mipsisa64-* | mipsisa64el-* \
+ | mipsisa64r2-* | mipsisa64r2el-* \
+ | mipsisa64r6-* | mipsisa64r6el-* \
+ | mipsisa64sb1-* | mipsisa64sb1el-* \
+ | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+ | mipsr5900-* | mipsr5900el-* \
+ | mipstx39-* | mipstx39el-* \
+ | mmix-* \
+ | mt-* \
+ | msp430-* \
+ | nds32-* | nds32le-* | nds32be-* \
+ | nios-* | nios2-* | nios2eb-* | nios2el-* \
+ | none-* | np1-* | ns16k-* | ns32k-* \
+ | open8-* \
+ | or1k*-* \
+ | orion-* \
+ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
+ | pru-* \
+ | pyramid-* \
+ | riscv32-* | riscv64-* \
+ | rl78-* | romp-* | rs6000-* | rx-* \
+ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
+ | sparclite-* \
+ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \
+ | tahoe-* \
+ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+ | tile*-* \
+ | tron-* \
+ | ubicom32-* \
+ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
+ | vax-* \
+ | visium-* \
+ | wasm32-* \
+ | we32k-* \
+ | x86-* | x86_64-* | xc16x-* | xps100-* \
+ | xstormy16-* | xtensa*-* \
+ | ymp-* \
+ | z8k-* | z80-*)
+ ;;
+ # Recognize the basic CPU types without company name, with glob match.
+ xtensa*)
+ basic_machine=$basic_machine-unknown
+ ;;
+ # Recognize the various machine names and aliases which stand
+ # for a CPU type and a company and sometimes even an OS.
+ 386bsd)
+ basic_machine=i386-unknown
+ os=-bsd
+ ;;
+ 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+ basic_machine=m68000-att
+ ;;
+ 3b*)
+ basic_machine=we32k-att
+ ;;
+ a29khif)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ abacus)
+ basic_machine=abacus-unknown
+ ;;
+ adobe68k)
+ basic_machine=m68010-adobe
+ os=-scout
+ ;;
+ alliant | fx80)
+ basic_machine=fx80-alliant
+ ;;
+ altos | altos3068)
+ basic_machine=m68k-altos
+ ;;
+ am29k)
+ basic_machine=a29k-none
+ os=-bsd
+ ;;
+ amd64)
+ basic_machine=x86_64-pc
+ ;;
+ amd64-*)
+ basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ amdahl)
+ basic_machine=580-amdahl
+ os=-sysv
+ ;;
+ amiga | amiga-*)
+ basic_machine=m68k-unknown
+ ;;
+ amigaos | amigados)
+ basic_machine=m68k-unknown
+ os=-amigaos
+ ;;
+ amigaunix | amix)
+ basic_machine=m68k-unknown
+ os=-sysv4
+ ;;
+ apollo68)
+ basic_machine=m68k-apollo
+ os=-sysv
+ ;;
+ apollo68bsd)
+ basic_machine=m68k-apollo
+ os=-bsd
+ ;;
+ aros)
+ basic_machine=i386-pc
+ os=-aros
+ ;;
+ asmjs)
+ basic_machine=asmjs-unknown
+ ;;
+ aux)
+ basic_machine=m68k-apple
+ os=-aux
+ ;;
+ balance)
+ basic_machine=ns32k-sequent
+ os=-dynix
+ ;;
+ blackfin)
+ basic_machine=bfin-unknown
+ os=-linux
+ ;;
+ blackfin-*)
+ basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ bluegene*)
+ basic_machine=powerpc-ibm
+ os=-cnk
+ ;;
+ c54x-*)
+ basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ c55x-*)
+ basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ c6x-*)
+ basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ c90)
+ basic_machine=c90-cray
+ os=-unicos
+ ;;
+ cegcc)
+ basic_machine=arm-unknown
+ os=-cegcc
+ ;;
+ convex-c1)
+ basic_machine=c1-convex
+ os=-bsd
+ ;;
+ convex-c2)
+ basic_machine=c2-convex
+ os=-bsd
+ ;;
+ convex-c32)
+ basic_machine=c32-convex
+ os=-bsd
+ ;;
+ convex-c34)
+ basic_machine=c34-convex
+ os=-bsd
+ ;;
+ convex-c38)
+ basic_machine=c38-convex
+ os=-bsd
+ ;;
+ cray | j90)
+ basic_machine=j90-cray
+ os=-unicos
+ ;;
+ craynv)
+ basic_machine=craynv-cray
+ os=-unicosmp
+ ;;
+ cr16 | cr16-*)
+ basic_machine=cr16-unknown
+ os=-elf
+ ;;
+ crds | unos)
+ basic_machine=m68k-crds
+ ;;
+ crisv32 | crisv32-* | etraxfs*)
+ basic_machine=crisv32-axis
+ ;;
+ cris | cris-* | etrax*)
+ basic_machine=cris-axis
+ ;;
+ crx)
+ basic_machine=crx-unknown
+ os=-elf
+ ;;
+ da30 | da30-*)
+ basic_machine=m68k-da30
+ ;;
+ decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+ basic_machine=mips-dec
+ ;;
+ decsystem10* | dec10*)
+ basic_machine=pdp10-dec
+ os=-tops10
+ ;;
+ decsystem20* | dec20*)
+ basic_machine=pdp10-dec
+ os=-tops20
+ ;;
+ delta | 3300 | motorola-3300 | motorola-delta \
+ | 3300-motorola | delta-motorola)
+ basic_machine=m68k-motorola
+ ;;
+ delta88)
+ basic_machine=m88k-motorola
+ os=-sysv3
+ ;;
+ dicos)
+ basic_machine=i686-pc
+ os=-dicos
+ ;;
+ djgpp)
+ basic_machine=i586-pc
+ os=-msdosdjgpp
+ ;;
+ dpx20 | dpx20-*)
+ basic_machine=rs6000-bull
+ os=-bosx
+ ;;
+ dpx2* | dpx2*-bull)
+ basic_machine=m68k-bull
+ os=-sysv3
+ ;;
+ e500v[12])
+ basic_machine=powerpc-unknown
+ os=$os"spe"
+ ;;
+ e500v[12]-*)
+ basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=$os"spe"
+ ;;
+ ebmon29k)
+ basic_machine=a29k-amd
+ os=-ebmon
+ ;;
+ elxsi)
+ basic_machine=elxsi-elxsi
+ os=-bsd
+ ;;
+ encore | umax | mmax)
+ basic_machine=ns32k-encore
+ ;;
+ es1800 | OSE68k | ose68k | ose | OSE)
+ basic_machine=m68k-ericsson
+ os=-ose
+ ;;
+ fx2800)
+ basic_machine=i860-alliant
+ ;;
+ genix)
+ basic_machine=ns32k-ns
+ ;;
+ gmicro)
+ basic_machine=tron-gmicro
+ os=-sysv
+ ;;
+ go32)
+ basic_machine=i386-pc
+ os=-go32
+ ;;
+ h3050r* | hiux*)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ h8300hms)
+ basic_machine=h8300-hitachi
+ os=-hms
+ ;;
+ h8300xray)
+ basic_machine=h8300-hitachi
+ os=-xray
+ ;;
+ h8500hms)
+ basic_machine=h8500-hitachi
+ os=-hms
+ ;;
+ harris)
+ basic_machine=m88k-harris
+ os=-sysv3
+ ;;
+ hp300-*)
+ basic_machine=m68k-hp
+ ;;
+ hp300bsd)
+ basic_machine=m68k-hp
+ os=-bsd
+ ;;
+ hp300hpux)
+ basic_machine=m68k-hp
+ os=-hpux
+ ;;
+ hp3k9[0-9][0-9] | hp9[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k2[0-9][0-9] | hp9k31[0-9])
+ basic_machine=m68000-hp
+ ;;
+ hp9k3[2-9][0-9])
+ basic_machine=m68k-hp
+ ;;
+ hp9k6[0-9][0-9] | hp6[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k7[0-79][0-9] | hp7[0-79][0-9])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k78[0-9] | hp78[0-9])
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][13679] | hp8[0-9][13679])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][0-9] | hp8[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hppa-next)
+ os=-nextstep3
+ ;;
+ hppaosf)
+ basic_machine=hppa1.1-hp
+ os=-osf
+ ;;
+ hppro)
+ basic_machine=hppa1.1-hp
+ os=-proelf
+ ;;
+ i370-ibm* | ibm*)
+ basic_machine=i370-ibm
+ ;;
+ i*86v32)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv32
+ ;;
+ i*86v4*)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv4
+ ;;
+ i*86v)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv
+ ;;
+ i*86sol2)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-solaris2
+ ;;
+ i386mach)
+ basic_machine=i386-mach
+ os=-mach
+ ;;
+ i386-vsta | vsta)
+ basic_machine=i386-unknown
+ os=-vsta
+ ;;
+ iris | iris4d)
+ basic_machine=mips-sgi
+ case $os in
+ -irix*)
+ ;;
+ *)
+ os=-irix4
+ ;;
+ esac
+ ;;
+ isi68 | isi)
+ basic_machine=m68k-isi
+ os=-sysv
+ ;;
+ leon-*|leon[3-9]-*)
+ basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'`
+ ;;
+ m68knommu)
+ basic_machine=m68k-unknown
+ os=-linux
+ ;;
+ m68knommu-*)
+ basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ m88k-omron*)
+ basic_machine=m88k-omron
+ ;;
+ magnum | m3230)
+ basic_machine=mips-mips
+ os=-sysv
+ ;;
+ merlin)
+ basic_machine=ns32k-utek
+ os=-sysv
+ ;;
+ microblaze*)
+ basic_machine=microblaze-xilinx
+ ;;
+ mingw64)
+ basic_machine=x86_64-pc
+ os=-mingw64
+ ;;
+ mingw32)
+ basic_machine=i686-pc
+ os=-mingw32
+ ;;
+ mingw32ce)
+ basic_machine=arm-unknown
+ os=-mingw32ce
+ ;;
+ miniframe)
+ basic_machine=m68000-convergent
+ ;;
+ *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+ mips3*-*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+ ;;
+ mips3*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+ ;;
+ monitor)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ morphos)
+ basic_machine=powerpc-unknown
+ os=-morphos
+ ;;
+ moxiebox)
+ basic_machine=moxie-unknown
+ os=-moxiebox
+ ;;
+ msdos)
+ basic_machine=i386-pc
+ os=-msdos
+ ;;
+ ms1-*)
+ basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+ ;;
+ msys)
+ basic_machine=i686-pc
+ os=-msys
+ ;;
+ mvs)
+ basic_machine=i370-ibm
+ os=-mvs
+ ;;
+ nacl)
+ basic_machine=le32-unknown
+ os=-nacl
+ ;;
+ ncr3000)
+ basic_machine=i486-ncr
+ os=-sysv4
+ ;;
+ netbsd386)
+ basic_machine=i386-unknown
+ os=-netbsd
+ ;;
+ netwinder)
+ basic_machine=armv4l-rebel
+ os=-linux
+ ;;
+ news | news700 | news800 | news900)
+ basic_machine=m68k-sony
+ os=-newsos
+ ;;
+ news1000)
+ basic_machine=m68030-sony
+ os=-newsos
+ ;;
+ news-3600 | risc-news)
+ basic_machine=mips-sony
+ os=-newsos
+ ;;
+ necv70)
+ basic_machine=v70-nec
+ os=-sysv
+ ;;
+ next | m*-next )
+ basic_machine=m68k-next
+ case $os in
+ -nextstep* )
+ ;;
+ -ns2*)
+ os=-nextstep2
+ ;;
+ *)
+ os=-nextstep3
+ ;;
+ esac
+ ;;
+ nh3000)
+ basic_machine=m68k-harris
+ os=-cxux
+ ;;
+ nh[45]000)
+ basic_machine=m88k-harris
+ os=-cxux
+ ;;
+ nindy960)
+ basic_machine=i960-intel
+ os=-nindy
+ ;;
+ mon960)
+ basic_machine=i960-intel
+ os=-mon960
+ ;;
+ nonstopux)
+ basic_machine=mips-compaq
+ os=-nonstopux
+ ;;
+ np1)
+ basic_machine=np1-gould
+ ;;
+ neo-tandem)
+ basic_machine=neo-tandem
+ ;;
+ nse-tandem)
+ basic_machine=nse-tandem
+ ;;
+ nsr-tandem)
+ basic_machine=nsr-tandem
+ ;;
+ nsx-tandem)
+ basic_machine=nsx-tandem
+ ;;
+ op50n-* | op60c-*)
+ basic_machine=hppa1.1-oki
+ os=-proelf
+ ;;
+ openrisc | openrisc-*)
+ basic_machine=or32-unknown
+ ;;
+ os400)
+ basic_machine=powerpc-ibm
+ os=-os400
+ ;;
+ OSE68000 | ose68000)
+ basic_machine=m68000-ericsson
+ os=-ose
+ ;;
+ os68k)
+ basic_machine=m68k-none
+ os=-os68k
+ ;;
+ pa-hitachi)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ paragon)
+ basic_machine=i860-intel
+ os=-osf
+ ;;
+ parisc)
+ basic_machine=hppa-unknown
+ os=-linux
+ ;;
+ parisc-*)
+ basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ pbd)
+ basic_machine=sparc-tti
+ ;;
+ pbb)
+ basic_machine=m68k-tti
+ ;;
+ pc532 | pc532-*)
+ basic_machine=ns32k-pc532
+ ;;
+ pc98)
+ basic_machine=i386-pc
+ ;;
+ pc98-*)
+ basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentium | p5 | k5 | k6 | nexgen | viac3)
+ basic_machine=i586-pc
+ ;;
+ pentiumpro | p6 | 6x86 | athlon | athlon_*)
+ basic_machine=i686-pc
+ ;;
+ pentiumii | pentium2 | pentiumiii | pentium3)
+ basic_machine=i686-pc
+ ;;
+ pentium4)
+ basic_machine=i786-pc
+ ;;
+ pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+ basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumpro-* | p6-* | 6x86-* | athlon-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentium4-*)
+ basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pn)
+ basic_machine=pn-gould
+ ;;
+ power) basic_machine=power-ibm
+ ;;
+ ppc | ppcbe) basic_machine=powerpc-unknown
+ ;;
+ ppc-* | ppcbe-*)
+ basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppcle | powerpclittle)
+ basic_machine=powerpcle-unknown
+ ;;
+ ppcle-* | powerpclittle-*)
+ basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppc64) basic_machine=powerpc64-unknown
+ ;;
+ ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppc64le | powerpc64little)
+ basic_machine=powerpc64le-unknown
+ ;;
+ ppc64le-* | powerpc64little-*)
+ basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ps2)
+ basic_machine=i386-ibm
+ ;;
+ pw32)
+ basic_machine=i586-unknown
+ os=-pw32
+ ;;
+ rdos | rdos64)
+ basic_machine=x86_64-pc
+ os=-rdos
+ ;;
+ rdos32)
+ basic_machine=i386-pc
+ os=-rdos
+ ;;
+ rom68k)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ rm[46]00)
+ basic_machine=mips-siemens
+ ;;
+ rtpc | rtpc-*)
+ basic_machine=romp-ibm
+ ;;
+ s390 | s390-*)
+ basic_machine=s390-ibm
+ ;;
+ s390x | s390x-*)
+ basic_machine=s390x-ibm
+ ;;
+ sa29200)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ sb1)
+ basic_machine=mipsisa64sb1-unknown
+ ;;
+ sb1el)
+ basic_machine=mipsisa64sb1el-unknown
+ ;;
+ sde)
+ basic_machine=mipsisa32-sde
+ os=-elf
+ ;;
+ sei)
+ basic_machine=mips-sei
+ os=-seiux
+ ;;
+ sequent)
+ basic_machine=i386-sequent
+ ;;
+ sh)
+ basic_machine=sh-hitachi
+ os=-hms
+ ;;
+ sh5el)
+ basic_machine=sh5le-unknown
+ ;;
+ sh64)
+ basic_machine=sh64-unknown
+ ;;
+ sparclite-wrs | simso-wrs)
+ basic_machine=sparclite-wrs
+ os=-vxworks
+ ;;
+ sps7)
+ basic_machine=m68k-bull
+ os=-sysv2
+ ;;
+ spur)
+ basic_machine=spur-unknown
+ ;;
+ st2000)
+ basic_machine=m68k-tandem
+ ;;
+ stratus)
+ basic_machine=i860-stratus
+ os=-sysv4
+ ;;
+ strongarm-* | thumb-*)
+ basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ sun2)
+ basic_machine=m68000-sun
+ ;;
+ sun2os3)
+ basic_machine=m68000-sun
+ os=-sunos3
+ ;;
+ sun2os4)
+ basic_machine=m68000-sun
+ os=-sunos4
+ ;;
+ sun3os3)
+ basic_machine=m68k-sun
+ os=-sunos3
+ ;;
+ sun3os4)
+ basic_machine=m68k-sun
+ os=-sunos4
+ ;;
+ sun4os3)
+ basic_machine=sparc-sun
+ os=-sunos3
+ ;;
+ sun4os4)
+ basic_machine=sparc-sun
+ os=-sunos4
+ ;;
+ sun4sol2)
+ basic_machine=sparc-sun
+ os=-solaris2
+ ;;
+ sun3 | sun3-*)
+ basic_machine=m68k-sun
+ ;;
+ sun4)
+ basic_machine=sparc-sun
+ ;;
+ sun386 | sun386i | roadrunner)
+ basic_machine=i386-sun
+ ;;
+ sv1)
+ basic_machine=sv1-cray
+ os=-unicos
+ ;;
+ symmetry)
+ basic_machine=i386-sequent
+ os=-dynix
+ ;;
+ t3e)
+ basic_machine=alphaev5-cray
+ os=-unicos
+ ;;
+ t90)
+ basic_machine=t90-cray
+ os=-unicos
+ ;;
+ tile*)
+ basic_machine=$basic_machine-unknown
+ os=-linux-gnu
+ ;;
+ tx39)
+ basic_machine=mipstx39-unknown
+ ;;
+ tx39el)
+ basic_machine=mipstx39el-unknown
+ ;;
+ toad1)
+ basic_machine=pdp10-xkl
+ os=-tops20
+ ;;
+ tower | tower-32)
+ basic_machine=m68k-ncr
+ ;;
+ tpf)
+ basic_machine=s390x-ibm
+ os=-tpf
+ ;;
+ udi29k)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ ultra3)
+ basic_machine=a29k-nyu
+ os=-sym1
+ ;;
+ v810 | necv810)
+ basic_machine=v810-nec
+ os=-none
+ ;;
+ vaxv)
+ basic_machine=vax-dec
+ os=-sysv
+ ;;
+ vms)
+ basic_machine=vax-dec
+ os=-vms
+ ;;
+ vpp*|vx|vx-*)
+ basic_machine=f301-fujitsu
+ ;;
+ vxworks960)
+ basic_machine=i960-wrs
+ os=-vxworks
+ ;;
+ vxworks68)
+ basic_machine=m68k-wrs
+ os=-vxworks
+ ;;
+ vxworks29k)
+ basic_machine=a29k-wrs
+ os=-vxworks
+ ;;
+ wasm32)
+ basic_machine=wasm32-unknown
+ ;;
+ w65*)
+ basic_machine=w65-wdc
+ os=-none
+ ;;
+ w89k-*)
+ basic_machine=hppa1.1-winbond
+ os=-proelf
+ ;;
+ x64)
+ basic_machine=x86_64-pc
+ ;;
+ xbox)
+ basic_machine=i686-pc
+ os=-mingw32
+ ;;
+ xps | xps100)
+ basic_machine=xps100-honeywell
+ ;;
+ xscale-* | xscalee[bl]-*)
+ basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
+ ;;
+ ymp)
+ basic_machine=ymp-cray
+ os=-unicos
+ ;;
+ z8k-*-coff)
+ basic_machine=z8k-unknown
+ os=-sim
+ ;;
+ z80-*-coff)
+ basic_machine=z80-unknown
+ os=-sim
+ ;;
+ none)
+ basic_machine=none-none
+ os=-none
+ ;;
+
+# Here we handle the default manufacturer of certain CPU types. It is in
+# some cases the only manufacturer, in others, it is the most popular.
+ w89k)
+ basic_machine=hppa1.1-winbond
+ ;;
+ op50n)
+ basic_machine=hppa1.1-oki
+ ;;
+ op60c)
+ basic_machine=hppa1.1-oki
+ ;;
+ romp)
+ basic_machine=romp-ibm
+ ;;
+ mmix)
+ basic_machine=mmix-knuth
+ ;;
+ rs6000)
+ basic_machine=rs6000-ibm
+ ;;
+ vax)
+ basic_machine=vax-dec
+ ;;
+ pdp10)
+ # there are many clones, so DEC is not a safe bet
+ basic_machine=pdp10-unknown
+ ;;
+ pdp11)
+ basic_machine=pdp11-dec
+ ;;
+ we32k)
+ basic_machine=we32k-att
+ ;;
+ sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
+ basic_machine=sh-unknown
+ ;;
+ sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
+ basic_machine=sparc-sun
+ ;;
+ cydra)
+ basic_machine=cydra-cydrome
+ ;;
+ orion)
+ basic_machine=orion-highlevel
+ ;;
+ orion105)
+ basic_machine=clipper-highlevel
+ ;;
+ mac | mpw | mac-mpw)
+ basic_machine=m68k-apple
+ ;;
+ pmac | pmac-mpw)
+ basic_machine=powerpc-apple
+ ;;
+ *-unknown)
+ # Make sure to match an already-canonicalized machine name.
+ ;;
+ *)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+ *-digital*)
+ basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+ ;;
+ *-commodore*)
+ basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+ ;;
+ *)
+ ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+ # First match some system type aliases that might get confused
+ # with valid system types.
+ # -solaris* is a basic system type, with this one exception.
+ -auroraux)
+ os=-auroraux
+ ;;
+ -solaris1 | -solaris1.*)
+ os=`echo $os | sed -e 's|solaris1|sunos4|'`
+ ;;
+ -solaris)
+ os=-solaris2
+ ;;
+ -svr4*)
+ os=-sysv4
+ ;;
+ -unixware*)
+ os=-sysv4.2uw
+ ;;
+ -gnu/linux*)
+ os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+ ;;
+ # Now accept the basic system types.
+ # The portable systems comes first.
+ # Each alternative MUST end in a * to match a version number.
+ # -sysv* is not here because it comes later, after sysvr4.
+ -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
+ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+ | -sym* | -kopensolaris* | -plan9* \
+ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+ | -aos* | -aros* | -cloudabi* | -sortix* \
+ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+ | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \
+ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \
+ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+ | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
+ | -linux-newlib* | -linux-musl* | -linux-uclibc* \
+ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
+ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \
+ | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox*)
+ # Remember, each alternative MUST END IN *, to match a version number.
+ ;;
+ -qnx*)
+ case $basic_machine in
+ x86-* | i*86-*)
+ ;;
+ *)
+ os=-nto$os
+ ;;
+ esac
+ ;;
+ -nto-qnx*)
+ ;;
+ -nto*)
+ os=`echo $os | sed -e 's|nto|nto-qnx|'`
+ ;;
+ -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
+ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+ ;;
+ -mac*)
+ os=`echo $os | sed -e 's|mac|macos|'`
+ ;;
+ -linux-dietlibc)
+ os=-linux-dietlibc
+ ;;
+ -linux*)
+ os=`echo $os | sed -e 's|linux|linux-gnu|'`
+ ;;
+ -sunos5*)
+ os=`echo $os | sed -e 's|sunos5|solaris2|'`
+ ;;
+ -sunos6*)
+ os=`echo $os | sed -e 's|sunos6|solaris3|'`
+ ;;
+ -opened*)
+ os=-openedition
+ ;;
+ -os400*)
+ os=-os400
+ ;;
+ -wince*)
+ os=-wince
+ ;;
+ -osfrose*)
+ os=-osfrose
+ ;;
+ -osf*)
+ os=-osf
+ ;;
+ -utek*)
+ os=-bsd
+ ;;
+ -dynix*)
+ os=-bsd
+ ;;
+ -acis*)
+ os=-aos
+ ;;
+ -atheos*)
+ os=-atheos
+ ;;
+ -syllable*)
+ os=-syllable
+ ;;
+ -386bsd)
+ os=-bsd
+ ;;
+ -ctix* | -uts*)
+ os=-sysv
+ ;;
+ -nova*)
+ os=-rtmk-nova
+ ;;
+ -ns2 )
+ os=-nextstep2
+ ;;
+ -nsk*)
+ os=-nsk
+ ;;
+ # Preserve the version number of sinix5.
+ -sinix5.*)
+ os=`echo $os | sed -e 's|sinix|sysv|'`
+ ;;
+ -sinix*)
+ os=-sysv4
+ ;;
+ -tpf*)
+ os=-tpf
+ ;;
+ -triton*)
+ os=-sysv3
+ ;;
+ -oss*)
+ os=-sysv3
+ ;;
+ -svr4)
+ os=-sysv4
+ ;;
+ -svr3)
+ os=-sysv3
+ ;;
+ -sysvr4)
+ os=-sysv4
+ ;;
+ # This must come after -sysvr4.
+ -sysv*)
+ ;;
+ -ose*)
+ os=-ose
+ ;;
+ -es1800*)
+ os=-ose
+ ;;
+ -xenix)
+ os=-xenix
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ os=-mint
+ ;;
+ -aros*)
+ os=-aros
+ ;;
+ -zvmoe)
+ os=-zvmoe
+ ;;
+ -dicos*)
+ os=-dicos
+ ;;
+ -nacl*)
+ ;;
+ -ios)
+ ;;
+ -none)
+ ;;
+ *)
+ # Get rid of the `-' at the beginning of $os.
+ os=`echo $os | sed 's/[^-]*-//'`
+ echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system. Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+ score-*)
+ os=-elf
+ ;;
+ spu-*)
+ os=-elf
+ ;;
+ *-acorn)
+ os=-riscix1.2
+ ;;
+ arm*-rebel)
+ os=-linux
+ ;;
+ arm*-semi)
+ os=-aout
+ ;;
+ c4x-* | tic4x-*)
+ os=-coff
+ ;;
+ c8051-*)
+ os=-elf
+ ;;
+ hexagon-*)
+ os=-elf
+ ;;
+ tic54x-*)
+ os=-coff
+ ;;
+ tic55x-*)
+ os=-coff
+ ;;
+ tic6x-*)
+ os=-coff
+ ;;
+ # This must come before the *-dec entry.
+ pdp10-*)
+ os=-tops20
+ ;;
+ pdp11-*)
+ os=-none
+ ;;
+ *-dec | vax-*)
+ os=-ultrix4.2
+ ;;
+ m68*-apollo)
+ os=-domain
+ ;;
+ i386-sun)
+ os=-sunos4.0.2
+ ;;
+ m68000-sun)
+ os=-sunos3
+ ;;
+ m68*-cisco)
+ os=-aout
+ ;;
+ mep-*)
+ os=-elf
+ ;;
+ mips*-cisco)
+ os=-elf
+ ;;
+ mips*-*)
+ os=-elf
+ ;;
+ or32-*)
+ os=-coff
+ ;;
+ *-tti) # must be before sparc entry or we get the wrong os.
+ os=-sysv3
+ ;;
+ sparc-* | *-sun)
+ os=-sunos4.1.1
+ ;;
+ pru-*)
+ os=-elf
+ ;;
+ *-be)
+ os=-beos
+ ;;
+ *-haiku)
+ os=-haiku
+ ;;
+ *-ibm)
+ os=-aix
+ ;;
+ *-knuth)
+ os=-mmixware
+ ;;
+ *-wec)
+ os=-proelf
+ ;;
+ *-winbond)
+ os=-proelf
+ ;;
+ *-oki)
+ os=-proelf
+ ;;
+ *-hp)
+ os=-hpux
+ ;;
+ *-hitachi)
+ os=-hiux
+ ;;
+ i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+ os=-sysv
+ ;;
+ *-cbm)
+ os=-amigaos
+ ;;
+ *-dg)
+ os=-dgux
+ ;;
+ *-dolphin)
+ os=-sysv3
+ ;;
+ m68k-ccur)
+ os=-rtu
+ ;;
+ m88k-omron*)
+ os=-luna
+ ;;
+ *-next )
+ os=-nextstep
+ ;;
+ *-sequent)
+ os=-ptx
+ ;;
+ *-crds)
+ os=-unos
+ ;;
+ *-ns)
+ os=-genix
+ ;;
+ i370-*)
+ os=-mvs
+ ;;
+ *-next)
+ os=-nextstep3
+ ;;
+ *-gould)
+ os=-sysv
+ ;;
+ *-highlevel)
+ os=-bsd
+ ;;
+ *-encore)
+ os=-bsd
+ ;;
+ *-sgi)
+ os=-irix
+ ;;
+ *-siemens)
+ os=-sysv4
+ ;;
+ *-masscomp)
+ os=-rtu
+ ;;
+ f30[01]-fujitsu | f700-fujitsu)
+ os=-uxpv
+ ;;
+ *-rom68k)
+ os=-coff
+ ;;
+ *-*bug)
+ os=-coff
+ ;;
+ *-apple)
+ os=-macos
+ ;;
+ *-atari*)
+ os=-mint
+ ;;
+ *)
+ os=-none
+ ;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer. We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+ *-unknown)
+ case $os in
+ -riscix*)
+ vendor=acorn
+ ;;
+ -sunos*)
+ vendor=sun
+ ;;
+ -cnk*|-aix*)
+ vendor=ibm
+ ;;
+ -beos*)
+ vendor=be
+ ;;
+ -hpux*)
+ vendor=hp
+ ;;
+ -mpeix*)
+ vendor=hp
+ ;;
+ -hiux*)
+ vendor=hitachi
+ ;;
+ -unos*)
+ vendor=crds
+ ;;
+ -dgux*)
+ vendor=dg
+ ;;
+ -luna*)
+ vendor=omron
+ ;;
+ -genix*)
+ vendor=ns
+ ;;
+ -mvs* | -opened*)
+ vendor=ibm
+ ;;
+ -os400*)
+ vendor=ibm
+ ;;
+ -ptx*)
+ vendor=sequent
+ ;;
+ -tpf*)
+ vendor=ibm
+ ;;
+ -vxsim* | -vxworks* | -windiss*)
+ vendor=wrs
+ ;;
+ -aux*)
+ vendor=apple
+ ;;
+ -hms*)
+ vendor=hitachi
+ ;;
+ -mpw* | -macos*)
+ vendor=apple
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ vendor=atari
+ ;;
+ -vos*)
+ vendor=stratus
+ ;;
+ esac
+ basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+ ;;
+esac
+
+echo $basic_machine$os
+exit
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/lib/depcomp b/lib/depcomp
new file mode 100755
index 000000000..5ff3c6feb
--- /dev/null
+++ b/lib/depcomp
@@ -0,0 +1,791 @@
+#! /bin/sh
+# depcomp - compile a program generating dependencies as side-effects
+
+scriptversion=2017-09-16.17; # UTC
+
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
+
+case $1 in
+ '')
+ echo "$0: No command. Try '$0 --help' for more information." 1>&2
+ exit 1;
+ ;;
+ -h | --h*)
+ cat <<\EOF
+Usage: depcomp [--help] [--version] PROGRAM [ARGS]
+
+Run PROGRAMS ARGS to compile a file, generating dependencies
+as side-effects.
+
+Environment variables:
+ depmode Dependency tracking mode.
+ source Source file read by 'PROGRAMS ARGS'.
+ object Object file output by 'PROGRAMS ARGS'.
+ DEPDIR directory where to store dependencies.
+ depfile Dependency file to output.
+ tmpdepfile Temporary file to use when outputting dependencies.
+ libtool Whether libtool is used (yes/no).
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v | --v*)
+ echo "depcomp $scriptversion"
+ exit $?
+ ;;
+esac
+
+# Get the directory component of the given path, and save it in the
+# global variables '$dir'. Note that this directory component will
+# be either empty or ending with a '/' character. This is deliberate.
+set_dir_from ()
+{
+ case $1 in
+ */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
+ *) dir=;;
+ esac
+}
+
+# Get the suffix-stripped basename of the given path, and save it the
+# global variable '$base'.
+set_base_from ()
+{
+ base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
+}
+
+# If no dependency file was actually created by the compiler invocation,
+# we still have to create a dummy depfile, to avoid errors with the
+# Makefile "include basename.Plo" scheme.
+make_dummy_depfile ()
+{
+ echo "#dummy" > "$depfile"
+}
+
+# Factor out some common post-processing of the generated depfile.
+# Requires the auxiliary global variable '$tmpdepfile' to be set.
+aix_post_process_depfile ()
+{
+ # If the compiler actually managed to produce a dependency file,
+ # post-process it.
+ if test -f "$tmpdepfile"; then
+ # Each line is of the form 'foo.o: dependency.h'.
+ # Do two passes, one to just change these to
+ # $object: dependency.h
+ # and one to simply output
+ # dependency.h:
+ # which is needed to avoid the deleted-header problem.
+ { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
+ sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
+ } > "$depfile"
+ rm -f "$tmpdepfile"
+ else
+ make_dummy_depfile
+ fi
+}
+
+# A tabulation character.
+tab=' '
+# A newline character.
+nl='
+'
+# Character ranges might be problematic outside the C locale.
+# These definitions help.
+upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
+lower=abcdefghijklmnopqrstuvwxyz
+digits=0123456789
+alpha=${upper}${lower}
+
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+ echo "depcomp: Variables source, object and depmode must be set" 1>&2
+ exit 1
+fi
+
+# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
+depfile=${depfile-`echo "$object" |
+ sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Avoid interferences from the environment.
+gccflag= dashmflag=
+
+# Some modes work just like other modes, but use different flags. We
+# parameterize here, but still list the modes in the big case below,
+# to make depend.m4 easier to write. Note that we *cannot* use a case
+# here, because this file can only contain one case statement.
+if test "$depmode" = hp; then
+ # HP compiler uses -M and no extra arg.
+ gccflag=-M
+ depmode=gcc
+fi
+
+if test "$depmode" = dashXmstdout; then
+ # This is just like dashmstdout with a different argument.
+ dashmflag=-xM
+ depmode=dashmstdout
+fi
+
+cygpath_u="cygpath -u -f -"
+if test "$depmode" = msvcmsys; then
+ # This is just like msvisualcpp but w/o cygpath translation.
+ # Just convert the backslash-escaped backslashes to single forward
+ # slashes to satisfy depend.m4
+ cygpath_u='sed s,\\\\,/,g'
+ depmode=msvisualcpp
+fi
+
+if test "$depmode" = msvc7msys; then
+ # This is just like msvc7 but w/o cygpath translation.
+ # Just convert the backslash-escaped backslashes to single forward
+ # slashes to satisfy depend.m4
+ cygpath_u='sed s,\\\\,/,g'
+ depmode=msvc7
+fi
+
+if test "$depmode" = xlc; then
+ # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
+ gccflag=-qmakedep=gcc,-MF
+ depmode=gcc
+fi
+
+case "$depmode" in
+gcc3)
+## gcc 3 implements dependency tracking that does exactly what
+## we want. Yay! Note: for some reason libtool 1.4 doesn't like
+## it if -MD -MP comes after the -MF stuff. Hmm.
+## Unfortunately, FreeBSD c89 acceptance of flags depends upon
+## the command line argument order; so add the flags where they
+## appear in depend2.am. Note that the slowdown incurred here
+## affects only configure: in makefiles, %FASTDEP% shortcuts this.
+ for arg
+ do
+ case $arg in
+ -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
+ *) set fnord "$@" "$arg" ;;
+ esac
+ shift # fnord
+ shift # $arg
+ done
+ "$@"
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ mv "$tmpdepfile" "$depfile"
+ ;;
+
+gcc)
+## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
+## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
+## (see the conditional assignment to $gccflag above).
+## There are various ways to get dependency output from gcc. Here's
+## why we pick this rather obscure method:
+## - Don't want to use -MD because we'd like the dependencies to end
+## up in a subdir. Having to rename by hand is ugly.
+## (We might end up doing this anyway to support other compilers.)
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+## -MM, not -M (despite what the docs say). Also, it might not be
+## supported by the other compilers which use the 'gcc' depmode.
+## - Using -M directly means running the compiler twice (even worse
+## than renaming).
+ if test -z "$gccflag"; then
+ gccflag=-MD,
+ fi
+ "$@" -Wp,"$gccflag$tmpdepfile"
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ # The second -e expression handles DOS-style file names with drive
+ # letters.
+ sed -e 's/^[^:]*: / /' \
+ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the "deleted header file" problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## typically no way to rebuild the header). We avoid this by adding
+## dummy dependencies for each header file. Too bad gcc doesn't do
+## this for us directly.
+## Some versions of gcc put a space before the ':'. On the theory
+## that the space means something, we add a space to the output as
+## well. hp depmode also adds that space, but also prefixes the VPATH
+## to the object. Take care to not repeat it in the output.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ tr ' ' "$nl" < "$tmpdepfile" \
+ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
+ | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+hp)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+sgi)
+ if test "$libtool" = yes; then
+ "$@" "-Wp,-MDupdate,$tmpdepfile"
+ else
+ "$@" -MDupdate "$tmpdepfile"
+ fi
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+
+ if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
+ echo "$object : \\" > "$depfile"
+ # Clip off the initial element (the dependent). Don't try to be
+ # clever and replace this with sed code, as IRIX sed won't handle
+ # lines with more than a fixed number of characters (4096 in
+ # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
+ # the IRIX cc adds comments like '#:fec' to the end of the
+ # dependency line.
+ tr ' ' "$nl" < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
+ | tr "$nl" ' ' >> "$depfile"
+ echo >> "$depfile"
+ # The second pass generates a dummy entry for each header file.
+ tr ' ' "$nl" < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+ >> "$depfile"
+ else
+ make_dummy_depfile
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+xlc)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+aix)
+ # The C for AIX Compiler uses -M and outputs the dependencies
+ # in a .u file. In older versions, this file always lives in the
+ # current directory. Also, the AIX compiler puts '$object:' at the
+ # start of each line; $object doesn't have directory information.
+ # Version 6 uses the directory in both cases.
+ set_dir_from "$object"
+ set_base_from "$object"
+ if test "$libtool" = yes; then
+ tmpdepfile1=$dir$base.u
+ tmpdepfile2=$base.u
+ tmpdepfile3=$dir.libs/$base.u
+ "$@" -Wc,-M
+ else
+ tmpdepfile1=$dir$base.u
+ tmpdepfile2=$dir$base.u
+ tmpdepfile3=$dir$base.u
+ "$@" -M
+ fi
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ aix_post_process_depfile
+ ;;
+
+tcc)
+ # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
+ # FIXME: That version still under development at the moment of writing.
+ # Make that this statement remains true also for stable, released
+ # versions.
+ # It will wrap lines (doesn't matter whether long or short) with a
+ # trailing '\', as in:
+ #
+ # foo.o : \
+ # foo.c \
+ # foo.h \
+ #
+ # It will put a trailing '\' even on the last line, and will use leading
+ # spaces rather than leading tabs (at least since its commit 0394caf7
+ # "Emit spaces for -MD").
+ "$@" -MD -MF "$tmpdepfile"
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
+ # We have to change lines of the first kind to '$object: \'.
+ sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
+ # And for each line of the second kind, we have to emit a 'dep.h:'
+ # dummy dependency, to avoid the deleted-header problem.
+ sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+## The order of this option in the case statement is important, since the
+## shell code in configure will try each of these formats in the order
+## listed in this file. A plain '-MD' option would be understood by many
+## compilers, so we must ensure this comes after the gcc and icc options.
+pgcc)
+ # Portland's C compiler understands '-MD'.
+ # Will always output deps to 'file.d' where file is the root name of the
+ # source file under compilation, even if file resides in a subdirectory.
+ # The object file name does not affect the name of the '.d' file.
+ # pgcc 10.2 will output
+ # foo.o: sub/foo.c sub/foo.h
+ # and will wrap long lines using '\' :
+ # foo.o: sub/foo.c ... \
+ # sub/foo.h ... \
+ # ...
+ set_dir_from "$object"
+ # Use the source, not the object, to determine the base name, since
+ # that's sadly what pgcc will do too.
+ set_base_from "$source"
+ tmpdepfile=$base.d
+
+ # For projects that build the same source file twice into different object
+ # files, the pgcc approach of using the *source* file root name can cause
+ # problems in parallel builds. Use a locking strategy to avoid stomping on
+ # the same $tmpdepfile.
+ lockdir=$base.d-lock
+ trap "
+ echo '$0: caught signal, cleaning up...' >&2
+ rmdir '$lockdir'
+ exit 1
+ " 1 2 13 15
+ numtries=100
+ i=$numtries
+ while test $i -gt 0; do
+ # mkdir is a portable test-and-set.
+ if mkdir "$lockdir" 2>/dev/null; then
+ # This process acquired the lock.
+ "$@" -MD
+ stat=$?
+ # Release the lock.
+ rmdir "$lockdir"
+ break
+ else
+ # If the lock is being held by a different process, wait
+ # until the winning process is done or we timeout.
+ while test -d "$lockdir" && test $i -gt 0; do
+ sleep 1
+ i=`expr $i - 1`
+ done
+ fi
+ i=`expr $i - 1`
+ done
+ trap - 1 2 13 15
+ if test $i -le 0; then
+ echo "$0: failed to acquire lock after $numtries attempts" >&2
+ echo "$0: check lockdir '$lockdir'" >&2
+ exit 1
+ fi
+
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ # Each line is of the form `foo.o: dependent.h',
+ # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
+ # Do two passes, one to just change these to
+ # `$object: dependent.h' and one to simply `dependent.h:'.
+ sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
+ # Some versions of the HPUX 10.20 sed can't process this invocation
+ # correctly. Breaking it into two sed invocations is a workaround.
+ sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
+ | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+hp2)
+ # The "hp" stanza above does not work with aCC (C++) and HP's ia64
+ # compilers, which have integrated preprocessors. The correct option
+ # to use with these is +Maked; it writes dependencies to a file named
+ # 'foo.d', which lands next to the object file, wherever that
+ # happens to be.
+ # Much of this is similar to the tru64 case; see comments there.
+ set_dir_from "$object"
+ set_base_from "$object"
+ if test "$libtool" = yes; then
+ tmpdepfile1=$dir$base.d
+ tmpdepfile2=$dir.libs/$base.d
+ "$@" -Wc,+Maked
+ else
+ tmpdepfile1=$dir$base.d
+ tmpdepfile2=$dir$base.d
+ "$@" +Maked
+ fi
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile1" "$tmpdepfile2"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ if test -f "$tmpdepfile"; then
+ sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
+ # Add 'dependent.h:' lines.
+ sed -ne '2,${
+ s/^ *//
+ s/ \\*$//
+ s/$/:/
+ p
+ }' "$tmpdepfile" >> "$depfile"
+ else
+ make_dummy_depfile
+ fi
+ rm -f "$tmpdepfile" "$tmpdepfile2"
+ ;;
+
+tru64)
+ # The Tru64 compiler uses -MD to generate dependencies as a side
+ # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
+ # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+ # dependencies in 'foo.d' instead, so we check for that too.
+ # Subdirectories are respected.
+ set_dir_from "$object"
+ set_base_from "$object"
+
+ if test "$libtool" = yes; then
+ # Libtool generates 2 separate objects for the 2 libraries. These
+ # two compilations output dependencies in $dir.libs/$base.o.d and
+ # in $dir$base.o.d. We have to check for both files, because
+ # one of the two compilations can be disabled. We should prefer
+ # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+ # automatically cleaned when .libs/ is deleted, while ignoring
+ # the former would cause a distcleancheck panic.
+ tmpdepfile1=$dir$base.o.d # libtool 1.5
+ tmpdepfile2=$dir.libs/$base.o.d # Likewise.
+ tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504
+ "$@" -Wc,-MD
+ else
+ tmpdepfile1=$dir$base.d
+ tmpdepfile2=$dir$base.d
+ tmpdepfile3=$dir$base.d
+ "$@" -MD
+ fi
+
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ # Same post-processing that is required for AIX mode.
+ aix_post_process_depfile
+ ;;
+
+msvc7)
+ if test "$libtool" = yes; then
+ showIncludes=-Wc,-showIncludes
+ else
+ showIncludes=-showIncludes
+ fi
+ "$@" $showIncludes > "$tmpdepfile"
+ stat=$?
+ grep -v '^Note: including file: ' "$tmpdepfile"
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ # The first sed program below extracts the file names and escapes
+ # backslashes for cygpath. The second sed program outputs the file
+ # name when reading, but also accumulates all include files in the
+ # hold buffer in order to output them again at the end. This only
+ # works with sed implementations that can handle large buffers.
+ sed < "$tmpdepfile" -n '
+/^Note: including file: *\(.*\)/ {
+ s//\1/
+ s/\\/\\\\/g
+ p
+}' | $cygpath_u | sort -u | sed -n '
+s/ /\\ /g
+s/\(.*\)/'"$tab"'\1 \\/p
+s/.\(.*\) \\/\1:/
+H
+$ {
+ s/.*/'"$tab"'/
+ G
+ p
+}' >> "$depfile"
+ echo >> "$depfile" # make sure the fragment doesn't end with a backslash
+ rm -f "$tmpdepfile"
+ ;;
+
+msvc7msys)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+#nosideeffect)
+ # This comment above is used by automake to tell side-effect
+ # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout, regardless of -o.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ # Remove '-o $object'.
+ IFS=" "
+ for arg
+ do
+ case $arg in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift # fnord
+ shift # $arg
+ ;;
+ esac
+ done
+
+ test -z "$dashmflag" && dashmflag=-M
+ # Require at least two characters before searching for ':'
+ # in the target name. This is to cope with DOS-style filenames:
+ # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
+ "$@" $dashmflag |
+ sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
+ rm -f "$depfile"
+ cat < "$tmpdepfile" > "$depfile"
+ # Some versions of the HPUX 10.20 sed can't process this sed invocation
+ # correctly. Breaking it into two sed invocations is a workaround.
+ tr ' ' "$nl" < "$tmpdepfile" \
+ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
+ | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+dashXmstdout)
+ # This case only exists to satisfy depend.m4. It is never actually
+ # run, as this mode is specially recognized in the preamble.
+ exit 1
+ ;;
+
+makedepend)
+ "$@" || exit $?
+ # Remove any Libtool call
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+ # X makedepend
+ shift
+ cleared=no eat=no
+ for arg
+ do
+ case $cleared in
+ no)
+ set ""; shift
+ cleared=yes ;;
+ esac
+ if test $eat = yes; then
+ eat=no
+ continue
+ fi
+ case "$arg" in
+ -D*|-I*)
+ set fnord "$@" "$arg"; shift ;;
+ # Strip any option that makedepend may not understand. Remove
+ # the object too, otherwise makedepend will parse it as a source file.
+ -arch)
+ eat=yes ;;
+ -*|$object)
+ ;;
+ *)
+ set fnord "$@" "$arg"; shift ;;
+ esac
+ done
+ obj_suffix=`echo "$object" | sed 's/^.*\././'`
+ touch "$tmpdepfile"
+ ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+ rm -f "$depfile"
+ # makedepend may prepend the VPATH from the source file name to the object.
+ # No need to regex-escape $object, excess matching of '.' is harmless.
+ sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
+ # Some versions of the HPUX 10.20 sed can't process the last invocation
+ # correctly. Breaking it into two sed invocations is a workaround.
+ sed '1,2d' "$tmpdepfile" \
+ | tr ' ' "$nl" \
+ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
+ | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile" "$tmpdepfile".bak
+ ;;
+
+cpp)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ # Remove '-o $object'.
+ IFS=" "
+ for arg
+ do
+ case $arg in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift # fnord
+ shift # $arg
+ ;;
+ esac
+ done
+
+ "$@" -E \
+ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+ | sed '$ s: \\$::' > "$tmpdepfile"
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ cat < "$tmpdepfile" >> "$depfile"
+ sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+msvisualcpp)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ IFS=" "
+ for arg
+ do
+ case "$arg" in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+ set fnord "$@"
+ shift
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift
+ shift
+ ;;
+ esac
+ done
+ "$@" -E 2>/dev/null |
+ sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
+ echo "$tab" >> "$depfile"
+ sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+msvcmsys)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+none)
+ exec "$@"
+ ;;
+
+*)
+ echo "Unknown depmode $depmode" 1>&2
+ exit 1
+ ;;
+esac
+
+exit 0
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/lib/gendocs.sh b/lib/gendocs.sh
new file mode 100755
index 000000000..76b5de653
--- /dev/null
+++ b/lib/gendocs.sh
@@ -0,0 +1,504 @@
+#!/bin/sh -e
+# gendocs.sh -- generate a GNU manual in many formats. This script is
+# mentioned in maintain.texi. See the help message below for usage details.
+
+scriptversion=2017-09-12.23
+
+# Copyright 2003-2017 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 3 of the License, 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 <https://www.gnu.org/licenses/>.
+#
+# Original author: Mohit Agarwal.
+# Send bug reports and any other correspondence to bug-gnulib@gnu.org.
+#
+# The latest version of this script, and the companion template, is
+# available from the Gnulib repository:
+#
+# https://git.savannah.gnu.org/cgit/gnulib.git/tree/build-aux/gendocs.sh
+# https://git.savannah.gnu.org/cgit/gnulib.git/tree/doc/gendocs_template
+
+# TODO:
+# - image importing was only implemented for HTML generated by
+# makeinfo. But it should be simple enough to adjust.
+# - images are not imported in the source tarball. All the needed
+# formats (PDF, PNG, etc.) should be included.
+
+prog=`basename "$0"`
+srcdir=`pwd`
+
+scripturl="https://git.savannah.gnu.org/cgit/gnulib.git/plain/build-aux/gendocs.sh"
+templateurl="https://git.savannah.gnu.org/cgit/gnulib.git/plain/doc/gendocs_template"
+
+: ${SETLANG="env LANG= LC_MESSAGES= LC_ALL= LANGUAGE="}
+: ${MAKEINFO="makeinfo"}
+: ${TEXI2DVI="texi2dvi"}
+: ${DOCBOOK2HTML="docbook2html"}
+: ${DOCBOOK2PDF="docbook2pdf"}
+: ${DOCBOOK2TXT="docbook2txt"}
+: ${GENDOCS_TEMPLATE_DIR="."}
+: ${PERL='perl'}
+: ${TEXI2HTML="texi2html"}
+unset CDPATH
+unset use_texi2html
+
+MANUAL_TITLE=
+PACKAGE=
+EMAIL=webmasters@gnu.org # please override with --email
+commonarg= # passed to all makeinfo/texi2html invcations.
+dirargs= # passed to all tools (-I dir).
+dirs= # -I directories.
+htmlarg="--css-ref=/software/gnulib/manual.css -c TOP_NODE_UP_URL=/manual"
+infoarg=--no-split
+generate_ascii=true
+generate_html=true
+generate_info=true
+generate_tex=true
+outdir=manual
+source_extra=
+split=node
+srcfile=
+texarg="-t @finalout"
+
+version="gendocs.sh $scriptversion
+
+Copyright 2017 Free Software Foundation, Inc.
+There is NO warranty. You may redistribute this software
+under the terms of the GNU General Public License.
+For more information about these matters, see the files named COPYING."
+
+usage="Usage: $prog [OPTION]... PACKAGE MANUAL-TITLE
+
+Generate output in various formats from PACKAGE.texinfo (or .texi or
+.txi) source. See the GNU Maintainers document for a more extensive
+discussion:
+ https://www.gnu.org/prep/maintain_toc.html
+
+Options:
+ --email ADR use ADR as contact in generated web pages; always give this.
+
+ -s SRCFILE read Texinfo from SRCFILE, instead of PACKAGE.{texinfo|texi|txi}
+ -o OUTDIR write files into OUTDIR, instead of manual/.
+ -I DIR append DIR to the Texinfo search path.
+ --common ARG pass ARG in all invocations.
+ --html ARG pass ARG to makeinfo or texi2html for HTML targets,
+ instead of '$htmlarg'.
+ --info ARG pass ARG to makeinfo for Info, instead of --no-split.
+ --no-ascii skip generating the plain text output.
+ --no-html skip generating the html output.
+ --no-info skip generating the info output.
+ --no-tex skip generating the dvi and pdf output.
+ --source ARG include ARG in tar archive of sources.
+ --split HOW make split HTML by node, section, chapter; default node.
+ --tex ARG pass ARG to texi2dvi for DVI and PDF, instead of -t @finalout.
+
+ --texi2html use texi2html to make HTML target, with all split versions.
+ --docbook convert through DocBook too (xml, txt, html, pdf).
+
+ --help display this help and exit successfully.
+ --version display version information and exit successfully.
+
+Simple example: $prog --email bug-gnu-emacs@gnu.org emacs \"GNU Emacs Manual\"
+
+Typical sequence:
+ cd PACKAGESOURCE/doc
+ wget \"$scripturl\"
+ wget \"$templateurl\"
+ $prog --email BUGLIST MANUAL \"GNU MANUAL - One-line description\"
+
+Output will be in a new subdirectory \"manual\" (by default;
+use -o OUTDIR to override). Move all the new files into your web CVS
+tree, as explained in the Web Pages node of maintain.texi.
+
+Please use the --email ADDRESS option so your own bug-reporting
+address will be used in the generated HTML pages.
+
+MANUAL-TITLE is included as part of the HTML <title> of the overall
+manual/index.html file. It should include the name of the package being
+documented. manual/index.html is created by substitution from the file
+$GENDOCS_TEMPLATE_DIR/gendocs_template. (Feel free to modify the
+generic template for your own purposes.)
+
+If you have several manuals, you'll need to run this script several
+times with different MANUAL values, specifying a different output
+directory with -o each time. Then write (by hand) an overall index.html
+with links to them all.
+
+If a manual's Texinfo sources are spread across several directories,
+first copy or symlink all Texinfo sources into a single directory.
+(Part of the script's work is to make a tar.gz of the sources.)
+
+As implied above, by default monolithic Info files are generated.
+If you want split Info, or other Info options, use --info to override.
+
+You can set the environment variables MAKEINFO, TEXI2DVI, TEXI2HTML,
+and PERL to control the programs that get executed, and
+GENDOCS_TEMPLATE_DIR to control where the gendocs_template file is
+looked for. With --docbook, the environment variables DOCBOOK2HTML,
+DOCBOOK2PDF, and DOCBOOK2TXT are also consulted.
+
+By default, makeinfo and texi2dvi are run in the default (English)
+locale, since that's the language of most Texinfo manuals. If you
+happen to have a non-English manual and non-English web site, see the
+SETLANG setting in the source.
+
+Email bug reports or enhancement requests to bug-gnulib@gnu.org.
+"
+
+while test $# -gt 0; do
+ case $1 in
+ -s) shift; srcfile=$1;;
+ -o) shift; outdir=$1;;
+ -I) shift; dirargs="$dirargs -I '$1'"; dirs="$dirs $1";;
+ --common) shift; commonarg=$1;;
+ --docbook) docbook=yes;;
+ --email) shift; EMAIL=$1;;
+ --html) shift; htmlarg=$1;;
+ --info) shift; infoarg=$1;;
+ --no-ascii) generate_ascii=false;;
+ --no-html) generate_ascii=false;;
+ --no-info) generate_info=false;;
+ --no-tex) generate_tex=false;;
+ --source) shift; source_extra=$1;;
+ --split) shift; split=$1;;
+ --tex) shift; texarg=$1;;
+ --texi2html) use_texi2html=1;;
+
+ --help) echo "$usage"; exit 0;;
+ --version) echo "$version"; exit 0;;
+ -*)
+ echo "$0: Unknown option \`$1'." >&2
+ echo "$0: Try \`--help' for more information." >&2
+ exit 1;;
+ *)
+ if test -z "$PACKAGE"; then
+ PACKAGE=$1
+ elif test -z "$MANUAL_TITLE"; then
+ MANUAL_TITLE=$1
+ else
+ echo "$0: extra non-option argument \`$1'." >&2
+ exit 1
+ fi;;
+ esac
+ shift
+done
+
+# makeinfo uses the dirargs, but texi2dvi doesn't.
+commonarg=" $dirargs $commonarg"
+
+# For most of the following, the base name is just $PACKAGE
+base=$PACKAGE
+
+if test -n "$srcfile"; then
+ # but here, we use the basename of $srcfile
+ base=`basename "$srcfile"`
+ case $base in
+ *.txi|*.texi|*.texinfo) base=`echo "$base"|sed 's/\.[texinfo]*$//'`;;
+ esac
+ PACKAGE=$base
+elif test -s "$srcdir/$PACKAGE.texinfo"; then
+ srcfile=$srcdir/$PACKAGE.texinfo
+elif test -s "$srcdir/$PACKAGE.texi"; then
+ srcfile=$srcdir/$PACKAGE.texi
+elif test -s "$srcdir/$PACKAGE.txi"; then
+ srcfile=$srcdir/$PACKAGE.txi
+else
+ echo "$0: cannot find .texinfo or .texi or .txi for $PACKAGE in $srcdir." >&2
+ exit 1
+fi
+
+if test ! -r $GENDOCS_TEMPLATE_DIR/gendocs_template; then
+ echo "$0: cannot read $GENDOCS_TEMPLATE_DIR/gendocs_template." >&2
+ echo "$0: it is available from $templateurl." >&2
+ exit 1
+fi
+
+# Function to return size of $1 in something resembling kilobytes.
+calcsize()
+{
+ size=`ls -ksl $1 | awk '{print $1}'`
+ echo $size
+}
+
+# copy_images OUTDIR HTML-FILE...
+# -------------------------------
+# Copy all the images needed by the HTML-FILEs into OUTDIR.
+# Look for them in . and the -I directories; this is simpler than what
+# makeinfo supports with -I, but hopefully it will suffice.
+copy_images()
+{
+ local odir
+ odir=$1
+ shift
+ $PERL -n -e "
+BEGIN {
+ \$me = '$prog';
+ \$odir = '$odir';
+ @dirs = qw(. $dirs);
+}
+" -e '
+/<img src="(.*?)"/g && ++$need{$1};
+
+END {
+ #print "$me: @{[keys %need]}\n"; # for debugging, show images found.
+ FILE: for my $f (keys %need) {
+ for my $d (@dirs) {
+ if (-f "$d/$f") {
+ use File::Basename;
+ my $dest = dirname ("$odir/$f");
+ #
+ use File::Path;
+ -d $dest || mkpath ($dest)
+ || die "$me: cannot mkdir $dest: $!\n";
+ #
+ use File::Copy;
+ copy ("$d/$f", $dest)
+ || die "$me: cannot copy $d/$f to $dest: $!\n";
+ next FILE;
+ }
+ }
+ die "$me: $ARGV: cannot find image $f\n";
+ }
+}
+' -- "$@" || exit 1
+}
+
+case $outdir in
+ /*) abs_outdir=$outdir;;
+ *) abs_outdir=$srcdir/$outdir;;
+esac
+
+echo "Making output for $srcfile"
+echo " in `pwd`"
+mkdir -p "$outdir/"
+
+#
+if $generate_info; then
+ cmd="$SETLANG $MAKEINFO -o $PACKAGE.info $commonarg $infoarg \"$srcfile\""
+ echo "Generating info... ($cmd)"
+ rm -f $PACKAGE.info* # get rid of any strays
+ eval "$cmd"
+ tar czf "$outdir/$PACKAGE.info.tar.gz" $PACKAGE.info*
+ ls -l "$outdir/$PACKAGE.info.tar.gz"
+ info_tgz_size=`calcsize "$outdir/$PACKAGE.info.tar.gz"`
+ # do not mv the info files, there's no point in having them available
+ # separately on the web.
+fi # end info
+
+#
+if $generate_tex; then
+ cmd="$SETLANG $TEXI2DVI $dirargs $texarg \"$srcfile\""
+ printf "\nGenerating dvi... ($cmd)\n"
+ eval "$cmd"
+ # compress/finish dvi:
+ gzip -f -9 $PACKAGE.dvi
+ dvi_gz_size=`calcsize $PACKAGE.dvi.gz`
+ mv $PACKAGE.dvi.gz "$outdir/"
+ ls -l "$outdir/$PACKAGE.dvi.gz"
+
+ cmd="$SETLANG $TEXI2DVI --pdf $dirargs $texarg \"$srcfile\""
+ printf "\nGenerating pdf... ($cmd)\n"
+ eval "$cmd"
+ pdf_size=`calcsize $PACKAGE.pdf`
+ mv $PACKAGE.pdf "$outdir/"
+ ls -l "$outdir/$PACKAGE.pdf"
+fi # end tex (dvi + pdf)
+
+#
+if $generate_ascii; then
+ opt="-o $PACKAGE.txt --no-split --no-headers $commonarg"
+ cmd="$SETLANG $MAKEINFO $opt \"$srcfile\""
+ printf "\nGenerating ascii... ($cmd)\n"
+ eval "$cmd"
+ ascii_size=`calcsize $PACKAGE.txt`
+ gzip -f -9 -c $PACKAGE.txt >"$outdir/$PACKAGE.txt.gz"
+ ascii_gz_size=`calcsize "$outdir/$PACKAGE.txt.gz"`
+ mv $PACKAGE.txt "$outdir/"
+ ls -l "$outdir/$PACKAGE.txt" "$outdir/$PACKAGE.txt.gz"
+fi
+
+#
+
+if $generate_html; then
+# Split HTML at level $1. Used for texi2html.
+html_split()
+{
+ opt="--split=$1 --node-files $commonarg $htmlarg"
+ cmd="$SETLANG $TEXI2HTML --output $PACKAGE.html $opt \"$srcfile\""
+ printf "\nGenerating html by $1... ($cmd)\n"
+ eval "$cmd"
+ split_html_dir=$PACKAGE.html
+ (
+ cd ${split_html_dir} || exit 1
+ ln -sf ${PACKAGE}.html index.html
+ tar -czf "$abs_outdir/${PACKAGE}.html_$1.tar.gz" -- *.html
+ )
+ eval html_$1_tgz_size=`calcsize "$outdir/${PACKAGE}.html_$1.tar.gz"`
+ rm -f "$outdir"/html_$1/*.html
+ mkdir -p "$outdir/html_$1/"
+ mv ${split_html_dir}/*.html "$outdir/html_$1/"
+ rmdir ${split_html_dir}
+}
+
+if test -z "$use_texi2html"; then
+ opt="--no-split --html -o $PACKAGE.html $commonarg $htmlarg"
+ cmd="$SETLANG $MAKEINFO $opt \"$srcfile\""
+ printf "\nGenerating monolithic html... ($cmd)\n"
+ rm -rf $PACKAGE.html # in case a directory is left over
+ eval "$cmd"
+ html_mono_size=`calcsize $PACKAGE.html`
+ gzip -f -9 -c $PACKAGE.html >"$outdir/$PACKAGE.html.gz"
+ html_mono_gz_size=`calcsize "$outdir/$PACKAGE.html.gz"`
+ copy_images "$outdir/" $PACKAGE.html
+ mv $PACKAGE.html "$outdir/"
+ ls -l "$outdir/$PACKAGE.html" "$outdir/$PACKAGE.html.gz"
+
+ # Before Texinfo 5.0, makeinfo did not accept a --split=HOW option,
+ # it just always split by node. So if we're splitting by node anyway,
+ # leave it out.
+ if test "x$split" = xnode; then
+ split_arg=
+ else
+ split_arg=--split=$split
+ fi
+ #
+ opt="--html -o $PACKAGE.html $split_arg $commonarg $htmlarg"
+ cmd="$SETLANG $MAKEINFO $opt \"$srcfile\""
+ printf "\nGenerating html by $split... ($cmd)\n"
+ eval "$cmd"
+ split_html_dir=$PACKAGE.html
+ copy_images $split_html_dir/ $split_html_dir/*.html
+ (
+ cd $split_html_dir || exit 1
+ tar -czf "$abs_outdir/$PACKAGE.html_$split.tar.gz" -- *
+ )
+ eval \
+ html_${split}_tgz_size=`calcsize "$outdir/$PACKAGE.html_$split.tar.gz"`
+ rm -rf "$outdir/html_$split/"
+ mv $split_html_dir "$outdir/html_$split/"
+ du -s "$outdir/html_$split/"
+ ls -l "$outdir/$PACKAGE.html_$split.tar.gz"
+
+else # use texi2html:
+ opt="--output $PACKAGE.html $commonarg $htmlarg"
+ cmd="$SETLANG $TEXI2HTML $opt \"$srcfile\""
+ printf "\nGenerating monolithic html with texi2html... ($cmd)\n"
+ rm -rf $PACKAGE.html # in case a directory is left over
+ eval "$cmd"
+ html_mono_size=`calcsize $PACKAGE.html`
+ gzip -f -9 -c $PACKAGE.html >"$outdir/$PACKAGE.html.gz"
+ html_mono_gz_size=`calcsize "$outdir/$PACKAGE.html.gz"`
+ mv $PACKAGE.html "$outdir/"
+
+ html_split node
+ html_split chapter
+ html_split section
+fi
+fi # end html
+
+#
+printf "\nMaking .tar.gz for sources...\n"
+d=`dirname $srcfile`
+(
+ cd "$d"
+ srcfiles=`ls -d *.texinfo *.texi *.txi *.eps $source_extra 2>/dev/null` || true
+ tar czfh "$abs_outdir/$PACKAGE.texi.tar.gz" $srcfiles
+ ls -l "$abs_outdir/$PACKAGE.texi.tar.gz"
+)
+texi_tgz_size=`calcsize "$outdir/$PACKAGE.texi.tar.gz"`
+
+#
+# Do everything again through docbook.
+if test -n "$docbook"; then
+ opt="-o - --docbook $commonarg"
+ cmd="$SETLANG $MAKEINFO $opt \"$srcfile\" >${srcdir}/$PACKAGE-db.xml"
+ printf "\nGenerating docbook XML... ($cmd)\n"
+ eval "$cmd"
+ docbook_xml_size=`calcsize $PACKAGE-db.xml`
+ gzip -f -9 -c $PACKAGE-db.xml >"$outdir/$PACKAGE-db.xml.gz"
+ docbook_xml_gz_size=`calcsize "$outdir/$PACKAGE-db.xml.gz"`
+ mv $PACKAGE-db.xml "$outdir/"
+
+ split_html_db_dir=html_node_db
+ opt="$commonarg -o $split_html_db_dir"
+ cmd="$DOCBOOK2HTML $opt \"${outdir}/$PACKAGE-db.xml\""
+ printf "\nGenerating docbook HTML... ($cmd)\n"
+ eval "$cmd"
+ (
+ cd ${split_html_db_dir} || exit 1
+ tar -czf "$abs_outdir/${PACKAGE}.html_node_db.tar.gz" -- *.html
+ )
+ html_node_db_tgz_size=`calcsize "$outdir/${PACKAGE}.html_node_db.tar.gz"`
+ rm -f "$outdir"/html_node_db/*.html
+ mkdir -p "$outdir/html_node_db"
+ mv ${split_html_db_dir}/*.html "$outdir/html_node_db/"
+ rmdir ${split_html_db_dir}
+
+ cmd="$DOCBOOK2TXT \"${outdir}/$PACKAGE-db.xml\""
+ printf "\nGenerating docbook ASCII... ($cmd)\n"
+ eval "$cmd"
+ docbook_ascii_size=`calcsize $PACKAGE-db.txt`
+ mv $PACKAGE-db.txt "$outdir/"
+
+ cmd="$DOCBOOK2PDF \"${outdir}/$PACKAGE-db.xml\""
+ printf "\nGenerating docbook PDF... ($cmd)\n"
+ eval "$cmd"
+ docbook_pdf_size=`calcsize $PACKAGE-db.pdf`
+ mv $PACKAGE-db.pdf "$outdir/"
+fi
+
+#
+printf "\nMaking index.html for $PACKAGE...\n"
+if test -z "$use_texi2html"; then
+ CONDS="/%%IF *HTML_SECTION%%/,/%%ENDIF *HTML_SECTION%%/d;\
+ /%%IF *HTML_CHAPTER%%/,/%%ENDIF *HTML_CHAPTER%%/d"
+else
+ # should take account of --split here.
+ CONDS="/%%ENDIF.*%%/d;/%%IF *HTML_SECTION%%/d;/%%IF *HTML_CHAPTER%%/d"
+fi
+
+curdate=`$SETLANG date '+%B %d, %Y'`
+sed \
+ -e "s!%%TITLE%%!$MANUAL_TITLE!g" \
+ -e "s!%%EMAIL%%!$EMAIL!g" \
+ -e "s!%%PACKAGE%%!$PACKAGE!g" \
+ -e "s!%%DATE%%!$curdate!g" \
+ -e "s!%%HTML_MONO_SIZE%%!$html_mono_size!g" \
+ -e "s!%%HTML_MONO_GZ_SIZE%%!$html_mono_gz_size!g" \
+ -e "s!%%HTML_NODE_TGZ_SIZE%%!$html_node_tgz_size!g" \
+ -e "s!%%HTML_SECTION_TGZ_SIZE%%!$html_section_tgz_size!g" \
+ -e "s!%%HTML_CHAPTER_TGZ_SIZE%%!$html_chapter_tgz_size!g" \
+ -e "s!%%INFO_TGZ_SIZE%%!$info_tgz_size!g" \
+ -e "s!%%DVI_GZ_SIZE%%!$dvi_gz_size!g" \
+ -e "s!%%PDF_SIZE%%!$pdf_size!g" \
+ -e "s!%%ASCII_SIZE%%!$ascii_size!g" \
+ -e "s!%%ASCII_GZ_SIZE%%!$ascii_gz_size!g" \
+ -e "s!%%TEXI_TGZ_SIZE%%!$texi_tgz_size!g" \
+ -e "s!%%DOCBOOK_HTML_NODE_TGZ_SIZE%%!$html_node_db_tgz_size!g" \
+ -e "s!%%DOCBOOK_ASCII_SIZE%%!$docbook_ascii_size!g" \
+ -e "s!%%DOCBOOK_PDF_SIZE%%!$docbook_pdf_size!g" \
+ -e "s!%%DOCBOOK_XML_SIZE%%!$docbook_xml_size!g" \
+ -e "s!%%DOCBOOK_XML_GZ_SIZE%%!$docbook_xml_gz_size!g" \
+ -e "s,%%SCRIPTURL%%,$scripturl,g" \
+ -e "s!%%SCRIPTNAME%%!$prog!g" \
+ -e "$CONDS" \
+$GENDOCS_TEMPLATE_DIR/gendocs_template >"$outdir/index.html"
+
+echo "Done, see $outdir/ subdirectory for new files."
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/lib/gendocs_template b/lib/gendocs_template
new file mode 100644
index 000000000..b45e5e63e
--- /dev/null
+++ b/lib/gendocs_template
@@ -0,0 +1,91 @@
+<!--#include virtual="/server/header.html" -->
+<!-- Parent-Version: 1.77 -->
+<title>%%TITLE%% - GNU Project - Free Software Foundation</title>
+<!--#include virtual="/server/banner.html" -->
+<h2>%%TITLE%%</h2>
+
+<address>Free Software Foundation</address>
+<address>last updated %%DATE%%</address>
+
+<p>This manual (%%PACKAGE%%) is available in the following formats:</p>
+
+<ul>
+<li><a href="%%PACKAGE%%.html">HTML
+ (%%HTML_MONO_SIZE%%K bytes)</a> - entirely on one web page.</li>
+<li><a href="html_node/index.html">HTML</a> - with one web page per
+ node.</li>
+%%IF HTML_SECTION%%
+<li><a href="html_section/index.html">HTML</a> - with one web page per
+ section.</li>
+%%ENDIF HTML_SECTION%%
+%%IF HTML_CHAPTER%%
+<li><a href="html_chapter/index.html">HTML</a> - with one web page per
+ chapter.</li>
+%%ENDIF HTML_CHAPTER%%
+<li><a href="%%PACKAGE%%.html.gz">HTML compressed
+ (%%HTML_MONO_GZ_SIZE%%K gzipped characters)</a> - entirely on
+ one web page.</li>
+<li><a href="%%PACKAGE%%.html_node.tar.gz">HTML compressed
+ (%%HTML_NODE_TGZ_SIZE%%K gzipped tar file)</a> -
+ with one web page per node.</li>
+%%IF HTML_SECTION%%
+<li><a href="%%PACKAGE%%.html_section.tar.gz">HTML compressed
+ (%%HTML_SECTION_TGZ_SIZE%%K gzipped tar file)</a> -
+ with one web page per section.</li>
+%%ENDIF HTML_SECTION%%
+%%IF HTML_CHAPTER%%
+<li><a href="%%PACKAGE%%.html_chapter.tar.gz">HTML compressed
+ (%%HTML_CHAPTER_TGZ_SIZE%%K gzipped tar file)</a> -
+ with one web page per chapter.</li>
+%%ENDIF HTML_CHAPTER%%
+<li><a href="%%PACKAGE%%.info.tar.gz">Info document
+ (%%INFO_TGZ_SIZE%%K bytes gzipped tar file)</a>.</li>
+<li><a href="%%PACKAGE%%.txt">ASCII text
+ (%%ASCII_SIZE%%K bytes)</a>.</li>
+<li><a href="%%PACKAGE%%.txt.gz">ASCII text compressed
+ (%%ASCII_GZ_SIZE%%K bytes gzipped)</a>.</li>
+<li><a href="%%PACKAGE%%.dvi.gz">TeX dvi file
+ (%%DVI_GZ_SIZE%%K bytes gzipped)</a>.</li>
+<li><a href="%%PACKAGE%%.pdf">PDF file
+ (%%PDF_SIZE%%K bytes)</a>.</li>
+<li><a href="%%PACKAGE%%.texi.tar.gz">Texinfo source
+ (%%TEXI_TGZ_SIZE%%K bytes gzipped tar file).</a></li>
+</ul>
+
+<p>You can <a href="https://shop.fsf.org/">buy printed copies of
+some manuals</a> (among other items) from the Free Software Foundation;
+this helps support FSF activities.</p>
+
+<p>(This page generated by the <a href="%%SCRIPTURL%%">%%SCRIPTNAME%%
+script</a>.)</p>
+
+<!-- If needed, change the copyright block at the bottom. In general,
+ all pages on the GNU web server should have the section about
+ verbatim copying. Please do NOT remove this without talking
+ with the webmasters first.
+ Please make sure the copyright date is consistent with the document
+ and that it is like this: "2001, 2002", not this: "2001-2002". -->
+</div><!-- for id="content", starts in the include above -->
+<!--#include virtual="/server/footer.html" -->
+<div id="footer">
+<div class="unprintable">
+
+<p>Please send general FSF &amp; GNU inquiries to
+<a href="mailto:gnu@gnu.org">&lt;gnu@gnu.org&gt;</a>.
+There are also <a href="/contact/">other ways to contact</a>
+the FSF. Broken links and other corrections or suggestions can be sent
+to <a href="mailto:%%EMAIL%%">&lt;%%EMAIL%%&gt;</a>.</p>
+</div>
+
+<p>Copyright &copy; 2017 Free Software Foundation, Inc.</p>
+
+<p>This page is licensed under a <a rel="license"
+href="https://creativecommons.org/licenses/by-nd/3.0/us/">Creative
+Commons Attribution-NoDerivs 3.0 United States License</a>.</p>
+
+<!--#include virtual="/server/bottom-notes.html" -->
+
+</div>
+</div>
+</body>
+</html>
diff --git a/lib/gitlog-to-changelog b/lib/gitlog-to-changelog
new file mode 100755
index 000000000..3c94bd56a
--- /dev/null
+++ b/lib/gitlog-to-changelog
@@ -0,0 +1,499 @@
+eval '(exit $?0)' && eval 'exec perl -wS "$0" "$@"'
+ & eval 'exec perl -wS "$0" $argv:q'
+ if 0;
+# Convert git log output to ChangeLog format.
+
+my $VERSION = '2017-09-13 06:45'; # UTC
+# The definition above must lie within the first 8 lines in order
+# for the Emacs time-stamp write hook (at end) to update it.
+# If you change this file with Emacs, please let the write hook
+# do its job. Otherwise, update this string manually.
+
+# Copyright (C) 2008-2017 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 3 of the License, 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 <https://www.gnu.org/licenses/>.
+
+# Written by Jim Meyering
+
+use strict;
+use warnings;
+use Getopt::Long;
+use POSIX qw(strftime);
+
+(my $ME = $0) =~ s|.*/||;
+
+# use File::Coda; # https://meyering.net/code/Coda/
+END {
+ defined fileno STDOUT or return;
+ close STDOUT and return;
+ warn "$ME: failed to close standard output: $!\n";
+ $? ||= 1;
+}
+
+sub usage ($)
+{
+ my ($exit_code) = @_;
+ my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR);
+ if ($exit_code != 0)
+ {
+ print $STREAM "Try '$ME --help' for more information.\n";
+ }
+ else
+ {
+ print $STREAM <<EOF;
+Usage: $ME [OPTIONS] [ARGS]
+
+Convert git log output to ChangeLog format. If present, any ARGS
+are passed to "git log". To avoid ARGS being parsed as options to
+$ME, they may be preceded by '--'.
+
+OPTIONS:
+
+ --amend=FILE FILE maps from an SHA1 to perl code (i.e., s/old/new/) that
+ makes a change to SHA1's commit log text or metadata.
+ --append-dot append a dot to the first line of each commit message if
+ there is no other punctuation or blank at the end.
+ --no-cluster never cluster commit messages under the same date/author
+ header; the default is to cluster adjacent commit messages
+ if their headers are the same and neither commit message
+ contains multiple paragraphs.
+ --srcdir=DIR the root of the source tree, from which the .git/
+ directory can be derived.
+ --since=DATE convert only the logs since DATE;
+ the default is to convert all log entries.
+ --until=DATE convert only the logs older than DATE.
+ --ignore-matching=PAT ignore commit messages whose first lines match PAT.
+ --ignore-line=PAT ignore lines of commit messages that match PAT.
+ --format=FMT set format string for commit subject and body;
+ see 'man git-log' for the list of format metacharacters;
+ the default is '%s%n%b%n'
+ --strip-tab remove one additional leading TAB from commit message lines.
+ --strip-cherry-pick remove data inserted by "git cherry-pick";
+ this includes the "cherry picked from commit ..." line,
+ and the possible final "Conflicts:" paragraph.
+ --help display this help and exit
+ --version output version information and exit
+
+EXAMPLE:
+
+ $ME --since=2008-01-01 > ChangeLog
+ $ME -- -n 5 foo > last-5-commits-to-branch-foo
+
+SPECIAL SYNTAX:
+
+The following types of strings are interpreted specially when they appear
+at the beginning of a log message line. They are not copied to the output.
+
+ Copyright-paperwork-exempt: Yes
+ Append the "(tiny change)" notation to the usual "date name email"
+ ChangeLog header to mark a change that does not require a copyright
+ assignment.
+ Co-authored-by: Joe User <user\@example.com>
+ List the specified name and email address on a second
+ ChangeLog header, denoting a co-author.
+ Signed-off-by: Joe User <user\@example.com>
+ These lines are simply elided.
+
+In a FILE specified via --amend, comment lines (starting with "#") are ignored.
+FILE must consist of <SHA,CODE+> pairs where SHA is a 40-byte SHA1 (alone on
+a line) referring to a commit in the current project, and CODE refers to one
+or more consecutive lines of Perl code. Pairs must be separated by one or
+more blank line.
+
+Here is sample input for use with --amend=FILE, from coreutils:
+
+3a169f4c5d9159283548178668d2fae6fced3030
+# fix typo in title:
+s/all tile types/all file types/
+
+1379ed974f1fa39b12e2ffab18b3f7a607082202
+# Due to a bug in vc-dwim, I mis-attributed a patch by Paul to myself.
+# Change the author to be Paul. Note the escaped "@":
+s,Jim .*>,Paul Eggert <eggert\\\@cs.ucla.edu>,
+
+EOF
+ }
+ exit $exit_code;
+}
+
+# If the string $S is a well-behaved file name, simply return it.
+# If it contains white space, quotes, etc., quote it, and return the new string.
+sub shell_quote($)
+{
+ my ($s) = @_;
+ if ($s =~ m![^\w+/.,-]!)
+ {
+ # Convert each single quote to '\''
+ $s =~ s/\'/\'\\\'\'/g;
+ # Then single quote the string.
+ $s = "'$s'";
+ }
+ return $s;
+}
+
+sub quoted_cmd(@)
+{
+ return join (' ', map {shell_quote $_} @_);
+}
+
+# Parse file F.
+# Comment lines (starting with "#") are ignored.
+# F must consist of <SHA,CODE+> pairs where SHA is a 40-byte SHA1
+# (alone on a line) referring to a commit in the current project, and
+# CODE refers to one or more consecutive lines of Perl code.
+# Pairs must be separated by one or more blank line.
+sub parse_amend_file($)
+{
+ my ($f) = @_;
+
+ open F, '<', $f
+ or die "$ME: $f: failed to open for reading: $!\n";
+
+ my $fail;
+ my $h = {};
+ my $in_code = 0;
+ my $sha;
+ while (defined (my $line = <F>))
+ {
+ $line =~ /^\#/
+ and next;
+ chomp $line;
+ $line eq ''
+ and $in_code = 0, next;
+
+ if (!$in_code)
+ {
+ $line =~ /^([0-9a-fA-F]{40})$/
+ or (warn "$ME: $f:$.: invalid line; expected an SHA1\n"),
+ $fail = 1, next;
+ $sha = lc $1;
+ $in_code = 1;
+ exists $h->{$sha}
+ and (warn "$ME: $f:$.: duplicate SHA1\n"),
+ $fail = 1, next;
+ }
+ else
+ {
+ $h->{$sha} ||= '';
+ $h->{$sha} .= "$line\n";
+ }
+ }
+ close F;
+
+ $fail
+ and exit 1;
+
+ return $h;
+}
+
+# git_dir_option $SRCDIR
+#
+# From $SRCDIR, the --git-dir option to pass to git (none if $SRCDIR
+# is undef). Return as a list (0 or 1 element).
+sub git_dir_option($)
+{
+ my ($srcdir) = @_;
+ my @res = ();
+ if (defined $srcdir)
+ {
+ my $qdir = shell_quote $srcdir;
+ my $cmd = "cd $qdir && git rev-parse --show-toplevel";
+ my $qcmd = shell_quote $cmd;
+ my $git_dir = qx($cmd);
+ defined $git_dir
+ or die "$ME: cannot run $qcmd: $!\n";
+ $? == 0
+ or die "$ME: $qcmd had unexpected exit code or signal ($?)\n";
+ chomp $git_dir;
+ push @res, "--git-dir=$git_dir/.git";
+ }
+ @res;
+}
+
+{
+ my $since_date;
+ my $until_date;
+ my $format_string = '%s%n%b%n';
+ my $amend_file;
+ my $append_dot = 0;
+ my $cluster = 1;
+ my $ignore_matching;
+ my $ignore_line;
+ my $strip_tab = 0;
+ my $strip_cherry_pick = 0;
+ my $srcdir;
+ GetOptions
+ (
+ help => sub { usage 0 },
+ version => sub { print "$ME version $VERSION\n"; exit },
+ 'since=s' => \$since_date,
+ 'until=s' => \$until_date,
+ 'format=s' => \$format_string,
+ 'amend=s' => \$amend_file,
+ 'append-dot' => \$append_dot,
+ 'cluster!' => \$cluster,
+ 'ignore-matching=s' => \$ignore_matching,
+ 'ignore-line=s' => \$ignore_line,
+ 'strip-tab' => \$strip_tab,
+ 'strip-cherry-pick' => \$strip_cherry_pick,
+ 'srcdir=s' => \$srcdir,
+ ) or usage 1;
+
+ defined $since_date
+ and unshift @ARGV, "--since=$since_date";
+ defined $until_date
+ and unshift @ARGV, "--until=$until_date";
+
+ # This is a hash that maps an SHA1 to perl code (i.e., s/old/new/)
+ # that makes a correction in the log or attribution of that commit.
+ my $amend_code = defined $amend_file ? parse_amend_file $amend_file : {};
+
+ my @cmd = ('git',
+ git_dir_option $srcdir,
+ qw(log --log-size),
+ '--pretty=format:%H:%ct %an <%ae>%n%n'.$format_string, @ARGV);
+ open PIPE, '-|', @cmd
+ or die ("$ME: failed to run '". quoted_cmd (@cmd) ."': $!\n"
+ . "(Is your Git too old? Version 1.5.1 or later is required.)\n");
+
+ my $prev_multi_paragraph;
+ my $prev_date_line = '';
+ my @prev_coauthors = ();
+ my @skipshas = ();
+ while (1)
+ {
+ defined (my $in = <PIPE>)
+ or last;
+ $in =~ /^log size (\d+)$/
+ or die "$ME:$.: Invalid line (expected log size):\n$in";
+ my $log_nbytes = $1;
+
+ my $log;
+ my $n_read = read PIPE, $log, $log_nbytes;
+ $n_read == $log_nbytes
+ or die "$ME:$.: unexpected EOF\n";
+
+ # Extract leading hash.
+ my ($sha, $rest) = split ':', $log, 2;
+ defined $sha
+ or die "$ME:$.: malformed log entry\n";
+ $sha =~ /^[0-9a-fA-F]{40}$/
+ or die "$ME:$.: invalid SHA1: $sha\n";
+
+ my $skipflag = 0;
+ if (@skipshas)
+ {
+ foreach(@skipshas)
+ {
+ if ($sha =~ /^$_/)
+ {
+ $skipflag = $_;
+ last;
+ }
+ }
+ }
+
+ # If this commit's log requires any transformation, do it now.
+ my $code = $amend_code->{$sha};
+ if (defined $code)
+ {
+ eval 'use Safe';
+ my $s = new Safe;
+ # Put the unpreprocessed entry into "$_".
+ $_ = $rest;
+
+ # Let $code operate on it, safely.
+ my $r = $s->reval("$code")
+ or die "$ME:$.:$sha: failed to eval \"$code\":\n$@\n";
+
+ # Note that we've used this entry.
+ delete $amend_code->{$sha};
+
+ # Update $rest upon success.
+ $rest = $_;
+ }
+
+ # Remove lines inserted by "git cherry-pick".
+ if ($strip_cherry_pick)
+ {
+ $rest =~ s/^\s*Conflicts:\n.*//sm;
+ $rest =~ s/^\s*\(cherry picked from commit [\da-f]+\)\n//m;
+ }
+
+ my @line = split /[ \t]*\n/, $rest;
+ my $author_line = shift @line;
+ defined $author_line
+ or die "$ME:$.: unexpected EOF\n";
+ $author_line =~ /^(\d+) (.*>)$/
+ or die "$ME:$.: Invalid line "
+ . "(expected date/author/email):\n$author_line\n";
+
+ # Format 'Copyright-paperwork-exempt: Yes' as a standard ChangeLog
+ # `(tiny change)' annotation.
+ my $tiny = (grep (/^(?:Copyright-paperwork-exempt|Tiny-change):\s+[Yy]es$/, @line)
+ ? ' (tiny change)' : '');
+
+ my $date_line = sprintf "%s %s$tiny\n",
+ strftime ("%Y-%m-%d", localtime ($1)), $2;
+
+ my @coauthors = grep /^Co-authored-by:.*$/, @line;
+ # Omit meta-data lines we've already interpreted.
+ @line = grep !/^(?:Signed-off-by:[ ].*>$
+ |Co-authored-by:[ ]
+ |Copyright-paperwork-exempt:[ ]
+ |Tiny-change:[ ]
+ )/x, @line;
+
+ # Remove leading and trailing blank lines.
+ if (@line)
+ {
+ while ($line[0] =~ /^\s*$/) { shift @line; }
+ while ($line[$#line] =~ /^\s*$/) { pop @line; }
+ }
+
+ # Handle Emacs gitmerge.el "skipped" commits.
+ # Yes, this should be controlled by an option. So sue me.
+ if ( grep /^(; )?Merge from /, @line )
+ {
+ my $found = 0;
+ foreach (@line)
+ {
+ if (grep /^The following commit.*skipped:$/, $_)
+ {
+ $found = 1;
+ ## Reset at each merge to reduce chance of false matches.
+ @skipshas = ();
+ next;
+ }
+ if ($found && $_ =~ /^([0-9a-fA-F]{7,}) [^ ]/)
+ {
+ push ( @skipshas, $1 );
+ }
+ }
+ }
+
+ # Ignore commits that match the --ignore-matching pattern, if specified.
+ if (defined $ignore_matching && @line && $line[0] =~ /$ignore_matching/)
+ {
+ $skipflag = 1;
+ }
+ elsif ($skipflag)
+ {
+ ## Perhaps only warn if a pattern matches more than once?
+ warn "$ME: warning: skipping $sha due to $skipflag\n";
+ }
+
+ if (! $skipflag)
+ {
+ if (defined $ignore_line && @line)
+ {
+ @line = grep ! /$ignore_line/, @line;
+ while ($line[$#line] =~ /^\s*$/) { pop @line; }
+ }
+
+ # Record whether there are two or more paragraphs.
+ my $multi_paragraph = grep /^\s*$/, @line;
+
+ # Format 'Co-authored-by: A U Thor <email@example.com>' lines in
+ # standard multi-author ChangeLog format.
+ for (@coauthors)
+ {
+ s/^Co-authored-by:\s*/\t /;
+ s/\s*</ </;
+
+ /<.*?@.*\..*>/
+ or warn "$ME: warning: missing email address for "
+ . substr ($_, 5) . "\n";
+ }
+
+ # If clustering of commit messages has been disabled, if this header
+ # would be different from the previous date/name/etc. header,
+ # or if this or the previous entry consists of two or more paragraphs,
+ # then print the header.
+ if ( ! $cluster
+ || $date_line ne $prev_date_line
+ || "@coauthors" ne "@prev_coauthors"
+ || $multi_paragraph
+ || $prev_multi_paragraph)
+ {
+ $prev_date_line eq ''
+ or print "\n";
+ print $date_line;
+ @coauthors
+ and print join ("\n", @coauthors), "\n";
+ }
+ $prev_date_line = $date_line;
+ @prev_coauthors = @coauthors;
+ $prev_multi_paragraph = $multi_paragraph;
+
+ # If there were any lines
+ if (@line == 0)
+ {
+ warn "$ME: warning: empty commit message:\n $date_line\n";
+ }
+ else
+ {
+ if ($append_dot)
+ {
+ # If the first line of the message has enough room, then
+ if (length $line[0] < 72)
+ {
+ # append a dot if there is no other punctuation or blank
+ # at the end.
+ $line[0] =~ /[[:punct:]\s]$/
+ or $line[0] .= '.';
+ }
+ }
+
+ # Remove one additional leading TAB from each line.
+ $strip_tab
+ and map { s/^\t// } @line;
+
+ # Prefix each non-empty line with a TAB.
+ @line = map { length $_ ? "\t$_" : '' } @line;
+
+ print "\n", join ("\n", @line), "\n";
+ }
+ }
+
+ defined ($in = <PIPE>)
+ or last;
+ $in ne "\n"
+ and die "$ME:$.: unexpected line:\n$in";
+ }
+
+ close PIPE
+ or die "$ME: error closing pipe from " . quoted_cmd (@cmd) . "\n";
+ # FIXME-someday: include $PROCESS_STATUS in the diagnostic
+
+ # Complain about any unused entry in the --amend=F specified file.
+ my $fail = 0;
+ foreach my $sha (keys %$amend_code)
+ {
+ warn "$ME:$amend_file: unused entry: $sha\n";
+ $fail = 1;
+ }
+
+ exit $fail;
+}
+
+# Local Variables:
+# mode: perl
+# indent-tabs-mode: nil
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "my $VERSION = '"
+# time-stamp-format: "%:y-%02m-%02d %02H:%02M"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "'; # UTC"
+# End:
diff --git a/lib/gnupload b/lib/gnupload
new file mode 100755
index 000000000..ba781a16a
--- /dev/null
+++ b/lib/gnupload
@@ -0,0 +1,440 @@
+#!/bin/sh
+# Sign files and upload them.
+
+scriptversion=2017-09-13.06; # UTC
+
+# Copyright (C) 2004-2017 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 <https://www.gnu.org/licenses/>.
+
+# Originally written by Alexandre Duret-Lutz <adl@gnu.org>.
+# The master copy of this file is maintained in the gnulib Git repository.
+# Please send bug reports and feature requests to bug-gnulib@gnu.org.
+
+set -e
+
+GPG='gpg --batch --no-tty'
+conffile=.gnuploadrc
+to=
+dry_run=false
+replace=
+symlink_files=
+delete_files=
+delete_symlinks=
+collect_var=
+dbg=
+nl='
+'
+
+usage="Usage: $0 [OPTION]... [CMD] FILE... [[CMD] FILE...]
+
+Sign all FILES, and process them at the destinations specified with --to.
+If CMD is not given, it defaults to uploading. See examples below.
+
+Commands:
+ --delete delete FILES from destination
+ --symlink create symbolic links
+ --rmsymlink remove symbolic links
+ -- treat the remaining arguments as files to upload
+
+Options:
+ --to DEST specify a destination DEST for FILES
+ (multiple --to options are allowed)
+ --user NAME sign with key NAME
+ --replace allow replacements of existing files
+ --symlink-regex[=EXPR] use sed script EXPR to compute symbolic link names
+ --dry-run do nothing, show what would have been done
+ (including the constructed directive file)
+ --version output version information and exit
+ --help print this help text and exit
+
+If --symlink-regex is given without EXPR, then the link target name
+is created by replacing the version information with '-latest', e.g.:
+ foo-1.3.4.tar.gz -> foo-latest.tar.gz
+
+Recognized destinations are:
+ alpha.gnu.org:DIRECTORY
+ savannah.gnu.org:DIRECTORY
+ savannah.nongnu.org:DIRECTORY
+ ftp.gnu.org:DIRECTORY
+ build directive files and upload files by FTP
+ download.gnu.org.ua:{alpha|ftp}/DIRECTORY
+ build directive files and upload files by SFTP
+ [user@]host:DIRECTORY upload files with scp
+
+Options and commands are applied in order. If the file $conffile exists
+in the current working directory, its contents are prepended to the
+actual command line options. Use this to keep your defaults. Comments
+(#) and empty lines in $conffile are allowed.
+
+<https://www.gnu.org/prep/maintain/html_node/Automated-FTP-Uploads.html>
+gives some further background.
+
+Examples:
+1. Upload foobar-1.0.tar.gz to ftp.gnu.org:
+ gnupload --to ftp.gnu.org:foobar foobar-1.0.tar.gz
+
+2. Upload foobar-1.0.tar.gz and foobar-1.0.tar.xz to ftp.gnu.org:
+ gnupload --to ftp.gnu.org:foobar foobar-1.0.tar.gz foobar-1.0.tar.xz
+
+3. Same as above, and also create symbolic links to foobar-latest.tar.*:
+ gnupload --to ftp.gnu.org:foobar \\
+ --symlink-regex \\
+ foobar-1.0.tar.gz foobar-1.0.tar.xz
+
+4. Upload foobar-0.9.90.tar.gz to two sites:
+ gnupload --to alpha.gnu.org:foobar \\
+ --to sources.redhat.com:~ftp/pub/foobar \\
+ foobar-0.9.90.tar.gz
+
+5. Delete oopsbar-0.9.91.tar.gz and upload foobar-0.9.91.tar.gz
+ (the -- terminates the list of files to delete):
+ gnupload --to alpha.gnu.org:foobar \\
+ --to sources.redhat.com:~ftp/pub/foobar \\
+ --delete oopsbar-0.9.91.tar.gz \\
+ -- foobar-0.9.91.tar.gz
+
+gnupload executes a program ncftpput to do the transfers; if you don't
+happen to have an ncftp package installed, the ncftpput-ftp script in
+the build-aux/ directory of the gnulib package
+(https://savannah.gnu.org/projects/gnulib) may serve as a replacement.
+
+Send patches and bug reports to <bug-gnulib@gnu.org>."
+
+# Read local configuration file
+if test -r "$conffile"; then
+ echo "$0: Reading configuration file $conffile"
+ conf=`sed 's/#.*$//;/^$/d' "$conffile" | tr "\015$nl" ' '`
+ eval set x "$conf \"\$@\""
+ shift
+fi
+
+while test -n "$1"; do
+ case $1 in
+ -*)
+ collect_var=
+ case $1 in
+ --help)
+ echo "$usage"
+ exit $?
+ ;;
+ --to)
+ if test -z "$2"; then
+ echo "$0: Missing argument for --to" 1>&2
+ exit 1
+ elif echo "$2" | grep 'ftp-upload\.gnu\.org' >/dev/null; then
+ echo "$0: Use ftp.gnu.org:PKGNAME or alpha.gnu.org:PKGNAME" >&2
+ echo "$0: for the destination, not ftp-upload.gnu.org (which" >&2
+ echo "$0: is used for direct ftp uploads, not with gnupload)." >&2
+ echo "$0: See --help and its examples if need be." >&2
+ exit 1
+ else
+ to="$to $2"
+ shift
+ fi
+ ;;
+ --user)
+ if test -z "$2"; then
+ echo "$0: Missing argument for --user" 1>&2
+ exit 1
+ else
+ GPG="$GPG --local-user $2"
+ shift
+ fi
+ ;;
+ --delete)
+ collect_var=delete_files
+ ;;
+ --replace)
+ replace="replace: true"
+ ;;
+ --rmsymlink)
+ collect_var=delete_symlinks
+ ;;
+ --symlink-regex=*)
+ symlink_expr=`expr "$1" : '[^=]*=\(.*\)'`
+ ;;
+ --symlink-regex)
+ symlink_expr='s|-[0-9][0-9\.]*\(-[0-9][0-9]*\)\{0,1\}\.|-latest.|'
+ ;;
+ --symlink)
+ collect_var=symlink_files
+ ;;
+ --dry-run|-n)
+ dry_run=:
+ ;;
+ --version)
+ echo "gnupload $scriptversion"
+ exit $?
+ ;;
+ --)
+ shift
+ break
+ ;;
+ -*)
+ echo "$0: Unknown option '$1', try '$0 --help'" 1>&2
+ exit 1
+ ;;
+ esac
+ ;;
+ *)
+ if test -z "$collect_var"; then
+ break
+ else
+ eval "$collect_var=\"\$$collect_var $1\""
+ fi
+ ;;
+ esac
+ shift
+done
+
+dprint()
+{
+ echo "Running $* ..."
+}
+
+if $dry_run; then
+ dbg=dprint
+fi
+
+if test -z "$to"; then
+ echo "$0: Missing destination sites" >&2
+ exit 1
+fi
+
+if test -n "$symlink_files"; then
+ x=`echo "$symlink_files" | sed 's/[^ ]//g;s/ //g'`
+ if test -n "$x"; then
+ echo "$0: Odd number of symlink arguments" >&2
+ exit 1
+ fi
+fi
+
+if test $# = 0; then
+ if test -z "${symlink_files}${delete_files}${delete_symlinks}"; then
+ echo "$0: No file to upload" 1>&2
+ exit 1
+ fi
+else
+ # Make sure all files exist. We don't want to ask
+ # for the passphrase if the script will fail.
+ for file
+ do
+ if test ! -f $file; then
+ echo "$0: Cannot find '$file'" 1>&2
+ exit 1
+ elif test -n "$symlink_expr"; then
+ linkname=`echo $file | sed "$symlink_expr"`
+ if test -z "$linkname"; then
+ echo "$0: symlink expression produces empty results" >&2
+ exit 1
+ elif test "$linkname" = $file; then
+ echo "$0: symlink expression does not alter file name" >&2
+ exit 1
+ fi
+ fi
+ done
+fi
+
+# Make sure passphrase is not exported in the environment.
+unset passphrase
+unset passphrase_fd_0
+GNUPGHOME=${GNUPGHOME:-$HOME/.gnupg}
+
+# Reset PATH to be sure that echo is a built-in. We will later use
+# 'echo $passphrase' to output the passphrase, so it is important that
+# it is a built-in (third-party programs tend to appear in 'ps'
+# listings with their arguments...).
+# Remember this script runs with 'set -e', so if echo is not built-in
+# it will exit now.
+if $dry_run || grep -q "^use-agent" $GNUPGHOME/gpg.conf; then :; else
+ PATH=/empty echo -n "Enter GPG passphrase: "
+ stty -echo
+ read -r passphrase
+ stty echo
+ echo
+ passphrase_fd_0="--passphrase-fd 0"
+fi
+
+if test $# -ne 0; then
+ for file
+ do
+ echo "Signing $file ..."
+ rm -f $file.sig
+ echo "$passphrase" | $dbg $GPG $passphrase_fd_0 -ba -o $file.sig $file
+ done
+fi
+
+
+# mkdirective DESTDIR BASE FILE STMT
+# Arguments: See upload, below
+mkdirective ()
+{
+ stmt="$4"
+ if test -n "$3"; then
+ stmt="
+filename: $3$stmt"
+ fi
+
+ cat >${2}.directive<<EOF
+version: 1.2
+directory: $1
+comment: gnupload v. $scriptversion$stmt
+EOF
+ if $dry_run; then
+ echo "File ${2}.directive:"
+ cat ${2}.directive
+ echo "File ${2}.directive:" | sed 's/./-/g'
+ fi
+}
+
+mksymlink ()
+{
+ while test $# -ne 0
+ do
+ echo "symlink: $1 $2"
+ shift
+ shift
+ done
+}
+
+# upload DEST DESTDIR BASE FILE STMT FILES
+# Arguments:
+# DEST Destination site;
+# DESTDIR Destination directory;
+# BASE Base name for the directive file;
+# FILE Name of the file to distribute (may be empty);
+# STMT Additional statements for the directive file;
+# FILES List of files to upload.
+upload ()
+{
+ dest=$1
+ destdir=$2
+ base=$3
+ file=$4
+ stmt=$5
+ files=$6
+
+ rm -f $base.directive $base.directive.asc
+ case $dest in
+ alpha.gnu.org:*)
+ mkdirective "$destdir" "$base" "$file" "$stmt"
+ echo "$passphrase" | $dbg $GPG $passphrase_fd_0 --clearsign $base.directive
+ $dbg ncftpput ftp-upload.gnu.org /incoming/alpha $files $base.directive.asc
+ ;;
+ ftp.gnu.org:*)
+ mkdirective "$destdir" "$base" "$file" "$stmt"
+ echo "$passphrase" | $dbg $GPG $passphrase_fd_0 --clearsign $base.directive
+ $dbg ncftpput ftp-upload.gnu.org /incoming/ftp $files $base.directive.asc
+ ;;
+ savannah.gnu.org:*)
+ if test -z "$files"; then
+ echo "$0: warning: standalone directives not applicable for $dest" >&2
+ fi
+ $dbg ncftpput savannah.gnu.org /incoming/savannah/$destdir $files
+ ;;
+ savannah.nongnu.org:*)
+ if test -z "$files"; then
+ echo "$0: warning: standalone directives not applicable for $dest" >&2
+ fi
+ $dbg ncftpput savannah.nongnu.org /incoming/savannah/$destdir $files
+ ;;
+ download.gnu.org.ua:alpha/*|download.gnu.org.ua:ftp/*)
+ destdir_p1=`echo "$destdir" | sed 's,^[^/]*/,,'`
+ destdir_topdir=`echo "$destdir" | sed 's,/.*,,'`
+ mkdirective "$destdir_p1" "$base" "$file" "$stmt"
+ echo "$passphrase" | $dbg $GPG $passphrase_fd_0 --clearsign $base.directive
+ for f in $files $base.directive.asc
+ do
+ echo put $f
+ done | $dbg sftp -b - puszcza.gnu.org.ua:/incoming/$destdir_topdir
+ ;;
+ /*)
+ dest_host=`echo "$dest" | sed 's,:.*,,'`
+ mkdirective "$destdir" "$base" "$file" "$stmt"
+ echo "$passphrase" | $dbg $GPG $passphrase_fd_0 --clearsign $base.directive
+ $dbg cp $files $base.directive.asc $dest_host
+ ;;
+ *)
+ if test -z "$files"; then
+ echo "$0: warning: standalone directives not applicable for $dest" >&2
+ fi
+ $dbg scp $files $dest
+ ;;
+ esac
+ rm -f $base.directive $base.directive.asc
+}
+
+#####
+# Process any standalone directives
+stmt=
+if test -n "$symlink_files"; then
+ stmt="$stmt
+`mksymlink $symlink_files`"
+fi
+
+for file in $delete_files
+do
+ stmt="$stmt
+archive: $file"
+done
+
+for file in $delete_symlinks
+do
+ stmt="$stmt
+rmsymlink: $file"
+done
+
+if test -n "$stmt"; then
+ for dest in $to
+ do
+ destdir=`echo $dest | sed 's/[^:]*://'`
+ upload "$dest" "$destdir" "`hostname`-$$" "" "$stmt"
+ done
+fi
+
+# Process actual uploads
+for dest in $to
+do
+ for file
+ do
+ echo "Uploading $file to $dest ..."
+ stmt=
+ #
+ # allowing file replacement is all or nothing.
+ if test -n "$replace"; then stmt="$stmt
+$replace"
+ fi
+ #
+ files="$file $file.sig"
+ destdir=`echo $dest | sed 's/[^:]*://'`
+ if test -n "$symlink_expr"; then
+ linkname=`echo $file | sed "$symlink_expr"`
+ stmt="$stmt
+symlink: $file $linkname
+symlink: $file.sig $linkname.sig"
+ fi
+ upload "$dest" "$destdir" "$file" "$file" "$stmt" "$files"
+ done
+done
+
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/lib/install-sh b/lib/install-sh
new file mode 100755
index 000000000..0360b79e7
--- /dev/null
+++ b/lib/install-sh
@@ -0,0 +1,501 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2016-01-11.22; # UTC
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# 'make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+
+tab=' '
+nl='
+'
+IFS=" $tab$nl"
+
+# Set DOITPROG to "echo" to test this script.
+
+doit=${DOITPROG-}
+doit_exec=${doit:-exec}
+
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+chgrpprog=${CHGRPPROG-chgrp}
+chmodprog=${CHMODPROG-chmod}
+chownprog=${CHOWNPROG-chown}
+cmpprog=${CMPPROG-cmp}
+cpprog=${CPPROG-cp}
+mkdirprog=${MKDIRPROG-mkdir}
+mvprog=${MVPROG-mv}
+rmprog=${RMPROG-rm}
+stripprog=${STRIPPROG-strip}
+
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+chgrpcmd=
+chmodcmd=$chmodprog
+chowncmd=
+mvcmd=$mvprog
+rmcmd="$rmprog -f"
+stripcmd=
+
+src=
+dst=
+dir_arg=
+dst_arg=
+
+copy_on_change=false
+is_target_a_directory=possibly
+
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+ or: $0 [OPTION]... SRCFILES... DIRECTORY
+ or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+ or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+ --help display this help and exit.
+ --version display version info and exit.
+
+ -c (ignored)
+ -C install only if different (preserve the last data modification time)
+ -d create directories instead of installing files.
+ -g GROUP $chgrpprog installed files to GROUP.
+ -m MODE $chmodprog installed files to MODE.
+ -o USER $chownprog installed files to USER.
+ -s $stripprog installed files.
+ -t DIRECTORY install into DIRECTORY.
+ -T report an error if DSTFILE is a directory.
+
+Environment variables override the default commands:
+ CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+ RMPROG STRIPPROG
+"
+
+while test $# -ne 0; do
+ case $1 in
+ -c) ;;
+
+ -C) copy_on_change=true;;
+
+ -d) dir_arg=true;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+ shift;;
+
+ --help) echo "$usage"; exit $?;;
+
+ -m) mode=$2
+ case $mode in
+ *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
+ echo "$0: invalid mode: $mode" >&2
+ exit 1;;
+ esac
+ shift;;
+
+ -o) chowncmd="$chownprog $2"
+ shift;;
+
+ -s) stripcmd=$stripprog;;
+
+ -t)
+ is_target_a_directory=always
+ dst_arg=$2
+ # Protect names problematic for 'test' and other utilities.
+ case $dst_arg in
+ -* | [=\(\)!]) dst_arg=./$dst_arg;;
+ esac
+ shift;;
+
+ -T) is_target_a_directory=never;;
+
+ --version) echo "$0 $scriptversion"; exit $?;;
+
+ --) shift
+ break;;
+
+ -*) echo "$0: invalid option: $1" >&2
+ exit 1;;
+
+ *) break;;
+ esac
+ shift
+done
+
+# We allow the use of options -d and -T together, by making -d
+# take the precedence; this is for compatibility with GNU install.
+
+if test -n "$dir_arg"; then
+ if test -n "$dst_arg"; then
+ echo "$0: target directory not allowed when installing a directory." >&2
+ exit 1
+ fi
+fi
+
+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
+ # When -d is used, all remaining arguments are directories to create.
+ # When -t is used, the destination is already specified.
+ # Otherwise, the last argument is the destination. Remove it from $@.
+ for arg
+ do
+ if test -n "$dst_arg"; then
+ # $@ is not empty: it contains at least $arg.
+ set fnord "$@" "$dst_arg"
+ shift # fnord
+ fi
+ shift # arg
+ dst_arg=$arg
+ # Protect names problematic for 'test' and other utilities.
+ case $dst_arg in
+ -* | [=\(\)!]) dst_arg=./$dst_arg;;
+ esac
+ done
+fi
+
+if test $# -eq 0; then
+ if test -z "$dir_arg"; then
+ echo "$0: no input file specified." >&2
+ exit 1
+ fi
+ # It's OK to call 'install-sh -d' without argument.
+ # This can happen when creating conditional directories.
+ exit 0
+fi
+
+if test -z "$dir_arg"; then
+ if test $# -gt 1 || test "$is_target_a_directory" = always; then
+ if test ! -d "$dst_arg"; then
+ echo "$0: $dst_arg: Is not a directory." >&2
+ exit 1
+ fi
+ fi
+fi
+
+if test -z "$dir_arg"; then
+ do_exit='(exit $ret); exit $ret'
+ trap "ret=129; $do_exit" 1
+ trap "ret=130; $do_exit" 2
+ trap "ret=141; $do_exit" 13
+ trap "ret=143; $do_exit" 15
+
+ # Set umask so as not to create temps with too-generous modes.
+ # However, 'strip' requires both read and write access to temps.
+ case $mode in
+ # Optimize common cases.
+ *644) cp_umask=133;;
+ *755) cp_umask=22;;
+
+ *[0-7])
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw='% 200'
+ fi
+ cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+ *)
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw=,u+rw
+ fi
+ cp_umask=$mode$u_plus_rw;;
+ esac
+fi
+
+for src
+do
+ # Protect names problematic for 'test' and other utilities.
+ case $src in
+ -* | [=\(\)!]) src=./$src;;
+ esac
+
+ if test -n "$dir_arg"; then
+ dst=$src
+ dstdir=$dst
+ test -d "$dstdir"
+ dstdir_status=$?
+ else
+
+ # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+ # might cause directories to be created, which would be especially bad
+ # if $src (and thus $dsttmp) contains '*'.
+ if test ! -f "$src" && test ! -d "$src"; then
+ echo "$0: $src does not exist." >&2
+ exit 1
+ fi
+
+ if test -z "$dst_arg"; then
+ echo "$0: no destination specified." >&2
+ exit 1
+ fi
+ dst=$dst_arg
+
+ # If destination is a directory, append the input filename; won't work
+ # if double slashes aren't ignored.
+ if test -d "$dst"; then
+ if test "$is_target_a_directory" = never; then
+ echo "$0: $dst_arg: Is a directory" >&2
+ exit 1
+ fi
+ dstdir=$dst
+ dst=$dstdir/`basename "$src"`
+ dstdir_status=0
+ else
+ dstdir=`dirname "$dst"`
+ test -d "$dstdir"
+ dstdir_status=$?
+ fi
+ fi
+
+ obsolete_mkdir_used=false
+
+ if test $dstdir_status != 0; then
+ case $posix_mkdir in
+ '')
+ # Create intermediate dirs using mode 755 as modified by the umask.
+ # This is like FreeBSD 'install' as of 1997-10-28.
+ umask=`umask`
+ case $stripcmd.$umask in
+ # Optimize common cases.
+ *[2367][2367]) mkdir_umask=$umask;;
+ .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+ *[0-7])
+ mkdir_umask=`expr $umask + 22 \
+ - $umask % 100 % 40 + $umask % 20 \
+ - $umask % 10 % 4 + $umask % 2
+ `;;
+ *) mkdir_umask=$umask,go-w;;
+ esac
+
+ # With -d, create the new directory with the user-specified mode.
+ # Otherwise, rely on $mkdir_umask.
+ if test -n "$dir_arg"; then
+ mkdir_mode=-m$mode
+ else
+ mkdir_mode=
+ fi
+
+ posix_mkdir=false
+ case $umask in
+ *[123567][0-7][0-7])
+ # POSIX mkdir -p sets u+wx bits regardless of umask, which
+ # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+ ;;
+ *)
+ tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+ if (umask $mkdir_umask &&
+ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+ then
+ if test -z "$dir_arg" || {
+ # Check for POSIX incompatibilities with -m.
+ # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+ # other-writable bit of parent directory when it shouldn't.
+ # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+ ls_ld_tmpdir=`ls -ld "$tmpdir"`
+ case $ls_ld_tmpdir in
+ d????-?r-*) different_mode=700;;
+ d????-?--*) different_mode=755;;
+ *) false;;
+ esac &&
+ $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+ ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+ test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+ }
+ }
+ then posix_mkdir=:
+ fi
+ rmdir "$tmpdir/d" "$tmpdir"
+ else
+ # Remove any dirs left behind by ancient mkdir implementations.
+ rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+ fi
+ trap '' 0;;
+ esac;;
+ esac
+
+ if
+ $posix_mkdir && (
+ umask $mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+ )
+ then :
+ else
+
+ # The umask is ridiculous, or mkdir does not conform to POSIX,
+ # or it failed possibly due to a race condition. Create the
+ # directory the slow way, step by step, checking for races as we go.
+
+ case $dstdir in
+ /*) prefix='/';;
+ [-=\(\)!]*) prefix='./';;
+ *) prefix='';;
+ esac
+
+ oIFS=$IFS
+ IFS=/
+ set -f
+ set fnord $dstdir
+ shift
+ set +f
+ IFS=$oIFS
+
+ prefixes=
+
+ for d
+ do
+ test X"$d" = X && continue
+
+ prefix=$prefix$d
+ if test -d "$prefix"; then
+ prefixes=
+ else
+ if $posix_mkdir; then
+ (umask=$mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+ # Don't fail if two instances are running concurrently.
+ test -d "$prefix" || exit 1
+ else
+ case $prefix in
+ *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) qprefix=$prefix;;
+ esac
+ prefixes="$prefixes '$qprefix'"
+ fi
+ fi
+ prefix=$prefix/
+ done
+
+ if test -n "$prefixes"; then
+ # Don't fail if two instances are running concurrently.
+ (umask $mkdir_umask &&
+ eval "\$doit_exec \$mkdirprog $prefixes") ||
+ test -d "$dstdir" || exit 1
+ obsolete_mkdir_used=true
+ fi
+ fi
+ fi
+
+ if test -n "$dir_arg"; then
+ { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+ { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+ else
+
+ # Make a couple of temp file names in the proper directory.
+ dsttmp=$dstdir/_inst.$$_
+ rmtmp=$dstdir/_rm.$$_
+
+ # Trap to clean up those temp files at exit.
+ trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+
+ # Copy the file name to the temp name.
+ (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+
+ # and set any options; do chmod last to preserve setuid bits.
+ #
+ # If any of these fail, we abort the whole thing. If we want to
+ # ignore errors from any of these, just make sure not to ignore
+ # errors from the above "$doit $cpprog $src $dsttmp" command.
+ #
+ { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+ { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+ { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+ # If -C, don't bother to copy if it wouldn't change the file.
+ if $copy_on_change &&
+ old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
+ new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
+ set -f &&
+ set X $old && old=:$2:$4:$5:$6 &&
+ set X $new && new=:$2:$4:$5:$6 &&
+ set +f &&
+ test "$old" = "$new" &&
+ $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+ then
+ rm -f "$dsttmp"
+ else
+ # Rename the file to the real destination.
+ $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+
+ # The rename failed, perhaps because mv can't rename something else
+ # to itself, or perhaps because mv is so ancient that it does not
+ # support -f.
+ {
+ # Now remove or move aside any old file at destination location.
+ # We try this two ways since rm can't unlink itself on some
+ # systems and the destination file might be busy for other
+ # reasons. In this case, the final cleanup might fail but the new
+ # file should still install successfully.
+ {
+ test ! -f "$dst" ||
+ $doit $rmcmd -f "$dst" 2>/dev/null ||
+ { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+ { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+ } ||
+ { echo "$0: cannot unlink or rename $dst" >&2
+ (exit 1); exit 1
+ }
+ } &&
+
+ # Now rename the file to the real destination.
+ $doit $mvcmd "$dsttmp" "$dst"
+ }
+ fi || exit 1
+
+ trap '' 0
+ fi
+done
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/lib/local.mk b/lib/local.mk
new file mode 100644
index 000000000..5aae1cfb6
--- /dev/null
+++ b/lib/local.mk
@@ -0,0 +1,67 @@
+## Included by top-level Makefile for Automake.
+
+## Copyright (C) 1995-2017 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 <https://www.gnu.org/licenses/>.
+
+## -------------------------------------------------------------------- ##
+## Auxiliary scripts and files for use with "automake --add-missing". ##
+## -------------------------------------------------------------------- ##
+
+dist_pkgvdata_DATA = \
+ %D%/COPYING \
+ %D%/INSTALL \
+ %D%/texinfo.tex
+
+# These must all be executable when installed. However, if we use
+# _SCRIPTS, then the program transform will be applied, which is not
+# what we want. So we make them executable by hand.
+dist_script_DATA = \
+ %D%/config.guess \
+ %D%/config.sub \
+ %D%/install-sh \
+ %D%/mdate-sh \
+ %D%/missing \
+ %D%/mkinstalldirs \
+ %D%/ylwrap \
+ %D%/depcomp \
+ %D%/compile \
+ %D%/py-compile \
+ %D%/ar-lib \
+ %D%/test-driver \
+ %D%/tap-driver.sh
+
+install-data-hook:
+ @$(POST_INSTALL)
+ @for f in $(dist_script_DATA); do echo $$f; done \
+ | sed 's,^%D%/,,' \
+ | ( st=0; \
+ while read f; do \
+ echo " chmod +x '$(DESTDIR)$(scriptdir)/$$f'"; \
+ chmod +x "$(DESTDIR)$(scriptdir)/$$f" || st=1; \
+ done; \
+ exit $$st )
+
+installcheck-local: installcheck-executable-scripts
+installcheck-executable-scripts:
+ @for f in $(dist_script_DATA); do echo $$f; done \
+ | sed 's,^%D%/,,' \
+ | while read f; do \
+ path="$(pkgvdatadir)/$$f"; \
+ test -x "$$path" || echo $$path; \
+ done \
+ | sed 's/$$/: not executable/' \
+ | grep . 1>&2 && exit 1; exit 0
+
+# vim: ft=automake noet
diff --git a/lib/mdate-sh b/lib/mdate-sh
new file mode 100755
index 000000000..6dd5b21e7
--- /dev/null
+++ b/lib/mdate-sh
@@ -0,0 +1,228 @@
+#!/bin/sh
+# Get modification time of a file or directory and pretty-print it.
+
+scriptversion=2017-09-19.11; # UTC
+
+# Copyright (C) 1995-2017 Free Software Foundation, Inc.
+# written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, June 1995
+#
+# 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 <https://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+fi
+
+case $1 in
+ '')
+ echo "$0: No file. Try '$0 --help' for more information." 1>&2
+ exit 1;
+ ;;
+ -h | --h*)
+ cat <<\EOF
+Usage: mdate-sh [--help] [--version] FILE
+
+Pretty-print the modification day of FILE, in the format:
+1 January 1970
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v | --v*)
+ echo "mdate-sh $scriptversion"
+ exit $?
+ ;;
+esac
+
+error ()
+{
+ echo "$0: $1" >&2
+ exit 1
+}
+
+
+# Prevent date giving response in another language.
+LANG=C
+export LANG
+LC_ALL=C
+export LC_ALL
+LC_TIME=C
+export LC_TIME
+
+# Use UTC to get reproducible result.
+TZ=UTC
+export TZ
+
+# GNU ls changes its time format in response to the TIME_STYLE
+# variable. Since we cannot assume 'unset' works, revert this
+# variable to its documented default.
+if test "${TIME_STYLE+set}" = set; then
+ TIME_STYLE=posix-long-iso
+ export TIME_STYLE
+fi
+
+save_arg1=$1
+
+# Find out how to get the extended ls output of a file or directory.
+if ls -L /dev/null 1>/dev/null 2>&1; then
+ ls_command='ls -L -l -d'
+else
+ ls_command='ls -l -d'
+fi
+# Avoid user/group names that might have spaces, when possible.
+if ls -n /dev/null 1>/dev/null 2>&1; then
+ ls_command="$ls_command -n"
+fi
+
+# A 'ls -l' line looks as follows on OS/2.
+# drwxrwx--- 0 Aug 11 2001 foo
+# This differs from Unix, which adds ownership information.
+# drwxrwx--- 2 root root 4096 Aug 11 2001 foo
+#
+# To find the date, we split the line on spaces and iterate on words
+# until we find a month. This cannot work with files whose owner is a
+# user named "Jan", or "Feb", etc. However, it's unlikely that '/'
+# will be owned by a user whose name is a month. So we first look at
+# the extended ls output of the root directory to decide how many
+# words should be skipped to get the date.
+
+# On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below.
+set x`$ls_command /`
+
+# Find which argument is the month.
+month=
+command=
+until test $month
+do
+ test $# -gt 0 || error "failed parsing '$ls_command /' output"
+ shift
+ # Add another shift to the command.
+ command="$command shift;"
+ case $1 in
+ Jan) month=January; nummonth=1;;
+ Feb) month=February; nummonth=2;;
+ Mar) month=March; nummonth=3;;
+ Apr) month=April; nummonth=4;;
+ May) month=May; nummonth=5;;
+ Jun) month=June; nummonth=6;;
+ Jul) month=July; nummonth=7;;
+ Aug) month=August; nummonth=8;;
+ Sep) month=September; nummonth=9;;
+ Oct) month=October; nummonth=10;;
+ Nov) month=November; nummonth=11;;
+ Dec) month=December; nummonth=12;;
+ esac
+done
+
+test -n "$month" || error "failed parsing '$ls_command /' output"
+
+# Get the extended ls output of the file or directory.
+set dummy x`eval "$ls_command \"\\\$save_arg1\""`
+
+# Remove all preceding arguments
+eval $command
+
+# Because of the dummy argument above, month is in $2.
+#
+# On a POSIX system, we should have
+#
+# $# = 5
+# $1 = file size
+# $2 = month
+# $3 = day
+# $4 = year or time
+# $5 = filename
+#
+# On Darwin 7.7.0 and 7.6.0, we have
+#
+# $# = 4
+# $1 = day
+# $2 = month
+# $3 = year or time
+# $4 = filename
+
+# Get the month.
+case $2 in
+ Jan) month=January; nummonth=1;;
+ Feb) month=February; nummonth=2;;
+ Mar) month=March; nummonth=3;;
+ Apr) month=April; nummonth=4;;
+ May) month=May; nummonth=5;;
+ Jun) month=June; nummonth=6;;
+ Jul) month=July; nummonth=7;;
+ Aug) month=August; nummonth=8;;
+ Sep) month=September; nummonth=9;;
+ Oct) month=October; nummonth=10;;
+ Nov) month=November; nummonth=11;;
+ Dec) month=December; nummonth=12;;
+esac
+
+case $3 in
+ ???*) day=$1;;
+ *) day=$3; shift;;
+esac
+
+# Here we have to deal with the problem that the ls output gives either
+# the time of day or the year.
+case $3 in
+ *:*) set `date`; eval year=\$$#
+ case $2 in
+ Jan) nummonthtod=1;;
+ Feb) nummonthtod=2;;
+ Mar) nummonthtod=3;;
+ Apr) nummonthtod=4;;
+ May) nummonthtod=5;;
+ Jun) nummonthtod=6;;
+ Jul) nummonthtod=7;;
+ Aug) nummonthtod=8;;
+ Sep) nummonthtod=9;;
+ Oct) nummonthtod=10;;
+ Nov) nummonthtod=11;;
+ Dec) nummonthtod=12;;
+ esac
+ # For the first six month of the year the time notation can also
+ # be used for files modified in the last year.
+ if (expr $nummonth \> $nummonthtod) > /dev/null;
+ then
+ year=`expr $year - 1`
+ fi;;
+ *) year=$3;;
+esac
+
+# The result.
+echo $day $month $year
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/lib/missing b/lib/missing
new file mode 100755
index 000000000..46d7c7e23
--- /dev/null
+++ b/lib/missing
@@ -0,0 +1,215 @@
+#! /bin/sh
+# Common wrapper for a few potentially missing GNU programs.
+
+scriptversion=2017-09-16.17; # UTC
+
+# Copyright (C) 1996-2017 Free Software Foundation, Inc.
+# Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
+
+# 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 <https://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+ echo 1>&2 "Try '$0 --help' for more information"
+ exit 1
+fi
+
+case $1 in
+
+ --is-lightweight)
+ # Used by our autoconf macros to check whether the available missing
+ # script is modern enough.
+ exit 0
+ ;;
+
+ --run)
+ # Back-compat with the calling convention used by older automake.
+ shift
+ ;;
+
+ -h|--h|--he|--hel|--help)
+ echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due
+to PROGRAM being missing or too old.
+
+Options:
+ -h, --help display this help and exit
+ -v, --version output version information and exit
+
+Supported PROGRAM values:
+ aclocal autoconf autoheader autom4te automake makeinfo
+ bison yacc flex lex help2man
+
+Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
+'g' are ignored when checking the name.
+
+Send bug reports to <bug-automake@gnu.org>."
+ exit $?
+ ;;
+
+ -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+ echo "missing $scriptversion (GNU Automake)"
+ exit $?
+ ;;
+
+ -*)
+ echo 1>&2 "$0: unknown '$1' option"
+ echo 1>&2 "Try '$0 --help' for more information"
+ exit 1
+ ;;
+
+esac
+
+# Run the given program, remember its exit status.
+"$@"; st=$?
+
+# If it succeeded, we are done.
+test $st -eq 0 && exit 0
+
+# Also exit now if we it failed (or wasn't found), and '--version' was
+# passed; such an option is passed most likely to detect whether the
+# program is present and works.
+case $2 in --version|--help) exit $st;; esac
+
+# Exit code 63 means version mismatch. This often happens when the user
+# tries to use an ancient version of a tool on a file that requires a
+# minimum version.
+if test $st -eq 63; then
+ msg="probably too old"
+elif test $st -eq 127; then
+ # Program was missing.
+ msg="missing on your system"
+else
+ # Program was found and executed, but failed. Give up.
+ exit $st
+fi
+
+perl_URL=http://www.perl.org/
+flex_URL=http://flex.sourceforge.net/
+gnu_software_URL=https://www.gnu.org/software
+
+program_details ()
+{
+ case $1 in
+ aclocal|automake)
+ echo "The '$1' program is part of the GNU Automake package:"
+ echo "<$gnu_software_URL/automake>"
+ echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:"
+ echo "<$gnu_software_URL/autoconf>"
+ echo "<$gnu_software_URL/m4/>"
+ echo "<$perl_URL>"
+ ;;
+ autoconf|autom4te|autoheader)
+ echo "The '$1' program is part of the GNU Autoconf package:"
+ echo "<$gnu_software_URL/autoconf/>"
+ echo "It also requires GNU m4 and Perl in order to run:"
+ echo "<$gnu_software_URL/m4/>"
+ echo "<$perl_URL>"
+ ;;
+ esac
+}
+
+give_advice ()
+{
+ # Normalize program name to check for.
+ normalized_program=`echo "$1" | sed '
+ s/^gnu-//; t
+ s/^gnu//; t
+ s/^g//; t'`
+
+ printf '%s\n' "'$1' is $msg."
+
+ configure_deps="'configure.ac' or m4 files included by 'configure.ac'"
+ case $normalized_program in
+ autoconf*)
+ echo "You should only need it if you modified 'configure.ac',"
+ echo "or m4 files included by it."
+ program_details 'autoconf'
+ ;;
+ autoheader*)
+ echo "You should only need it if you modified 'acconfig.h' or"
+ echo "$configure_deps."
+ program_details 'autoheader'
+ ;;
+ automake*)
+ echo "You should only need it if you modified 'Makefile.am' or"
+ echo "$configure_deps."
+ program_details 'automake'
+ ;;
+ aclocal*)
+ echo "You should only need it if you modified 'acinclude.m4' or"
+ echo "$configure_deps."
+ program_details 'aclocal'
+ ;;
+ autom4te*)
+ echo "You might have modified some maintainer files that require"
+ echo "the 'autom4te' program to be rebuilt."
+ program_details 'autom4te'
+ ;;
+ bison*|yacc*)
+ echo "You should only need it if you modified a '.y' file."
+ echo "You may want to install the GNU Bison package:"
+ echo "<$gnu_software_URL/bison/>"
+ ;;
+ lex*|flex*)
+ echo "You should only need it if you modified a '.l' file."
+ echo "You may want to install the Fast Lexical Analyzer package:"
+ echo "<$flex_URL>"
+ ;;
+ help2man*)
+ echo "You should only need it if you modified a dependency" \
+ "of a man page."
+ echo "You may want to install the GNU Help2man package:"
+ echo "<$gnu_software_URL/help2man/>"
+ ;;
+ makeinfo*)
+ echo "You should only need it if you modified a '.texi' file, or"
+ echo "any other file indirectly affecting the aspect of the manual."
+ echo "You might want to install the Texinfo package:"
+ echo "<$gnu_software_URL/texinfo/>"
+ echo "The spurious makeinfo call might also be the consequence of"
+ echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might"
+ echo "want to install GNU make:"
+ echo "<$gnu_software_URL/make/>"
+ ;;
+ *)
+ echo "You might have modified some files without having the proper"
+ echo "tools for further handling them. Check the 'README' file, it"
+ echo "often tells you about the needed prerequisites for installing"
+ echo "this package. You may also peek at any GNU archive site, in"
+ echo "case some other package contains this missing '$1' program."
+ ;;
+ esac
+}
+
+give_advice "$1" | sed -e '1s/^/WARNING: /' \
+ -e '2,$s/^/ /' >&2
+
+# Propagate the correct exit status (expected to be 127 for a program
+# not found, 63 for a program that failed due to version mismatch).
+exit $st
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/lib/mkinstalldirs b/lib/mkinstalldirs
new file mode 100755
index 000000000..a31ce6d02
--- /dev/null
+++ b/lib/mkinstalldirs
@@ -0,0 +1,162 @@
+#! /bin/sh
+# mkinstalldirs --- make directory hierarchy
+
+scriptversion=2016-01-11.22; # UTC
+
+# Original author: Noah Friedman <friedman@prep.ai.mit.edu>
+# Created: 1993-05-16
+# Public domain.
+#
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+nl='
+'
+IFS=" "" $nl"
+errstatus=0
+dirmode=
+
+usage="\
+Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ...
+
+Create each directory DIR (with mode MODE, if specified), including all
+leading file name components.
+
+Report bugs to <bug-automake@gnu.org>."
+
+# process command line arguments
+while test $# -gt 0 ; do
+ case $1 in
+ -h | --help | --h*) # -h for help
+ echo "$usage"
+ exit $?
+ ;;
+ -m) # -m PERM arg
+ shift
+ test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
+ dirmode=$1
+ shift
+ ;;
+ --version)
+ echo "$0 $scriptversion"
+ exit $?
+ ;;
+ --) # stop option processing
+ shift
+ break
+ ;;
+ -*) # unknown option
+ echo "$usage" 1>&2
+ exit 1
+ ;;
+ *) # first non-opt arg
+ break
+ ;;
+ esac
+done
+
+for file
+do
+ if test -d "$file"; then
+ shift
+ else
+ break
+ fi
+done
+
+case $# in
+ 0) exit 0 ;;
+esac
+
+# Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and
+# mkdir -p a/c at the same time, both will detect that a is missing,
+# one will create a, then the other will try to create a and die with
+# a "File exists" error. This is a problem when calling mkinstalldirs
+# from a parallel make. We use --version in the probe to restrict
+# ourselves to GNU mkdir, which is thread-safe.
+case $dirmode in
+ '')
+ if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
+ echo "mkdir -p -- $*"
+ exec mkdir -p -- "$@"
+ else
+ # On NextStep and OpenStep, the 'mkdir' command does not
+ # recognize any option. It will interpret all options as
+ # directories to create, and then abort because '.' already
+ # exists.
+ test -d ./-p && rmdir ./-p
+ test -d ./--version && rmdir ./--version
+ fi
+ ;;
+ *)
+ if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 &&
+ test ! -d ./--version; then
+ echo "mkdir -m $dirmode -p -- $*"
+ exec mkdir -m "$dirmode" -p -- "$@"
+ else
+ # Clean up after NextStep and OpenStep mkdir.
+ for d in ./-m ./-p ./--version "./$dirmode";
+ do
+ test -d $d && rmdir $d
+ done
+ fi
+ ;;
+esac
+
+for file
+do
+ case $file in
+ /*) pathcomp=/ ;;
+ *) pathcomp= ;;
+ esac
+ oIFS=$IFS
+ IFS=/
+ set fnord $file
+ shift
+ IFS=$oIFS
+
+ for d
+ do
+ test "x$d" = x && continue
+
+ pathcomp=$pathcomp$d
+ case $pathcomp in
+ -*) pathcomp=./$pathcomp ;;
+ esac
+
+ if test ! -d "$pathcomp"; then
+ echo "mkdir $pathcomp"
+
+ mkdir "$pathcomp" || lasterr=$?
+
+ if test ! -d "$pathcomp"; then
+ errstatus=$lasterr
+ else
+ if test ! -z "$dirmode"; then
+ echo "chmod $dirmode $pathcomp"
+ lasterr=
+ chmod "$dirmode" "$pathcomp" || lasterr=$?
+
+ if test ! -z "$lasterr"; then
+ errstatus=$lasterr
+ fi
+ fi
+ fi
+ fi
+
+ pathcomp=$pathcomp/
+ done
+done
+
+exit $errstatus
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/lib/py-compile b/lib/py-compile
new file mode 100755
index 000000000..b44214004
--- /dev/null
+++ b/lib/py-compile
@@ -0,0 +1,170 @@
+#!/bin/sh
+# py-compile - Compile a Python program
+
+scriptversion=2017-09-16.17; # UTC
+
+# Copyright (C) 2000-2017 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 <https://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+if [ -z "$PYTHON" ]; then
+ PYTHON=python
+fi
+
+me=py-compile
+
+usage_error ()
+{
+ echo "$me: $*" >&2
+ echo "Try '$me --help' for more information." >&2
+ exit 1
+}
+
+basedir=
+destdir=
+while test $# -ne 0; do
+ case "$1" in
+ --basedir)
+ if test $# -lt 2; then
+ usage_error "option '--basedir' requires an argument"
+ else
+ basedir=$2
+ fi
+ shift
+ ;;
+ --destdir)
+ if test $# -lt 2; then
+ usage_error "option '--destdir' requires an argument"
+ else
+ destdir=$2
+ fi
+ shift
+ ;;
+ -h|--help)
+ cat <<\EOF
+Usage: py-compile [--help] [--version] [--basedir DIR] [--destdir DIR] FILES..."
+
+Byte compile some python scripts FILES. Use --destdir to specify any
+leading directory path to the FILES that you don't want to include in the
+byte compiled file. Specify --basedir for any additional path information you
+do want to be shown in the byte compiled file.
+
+Example:
+ py-compile --destdir /tmp/pkg-root --basedir /usr/share/test test.py test2.py
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v|--version)
+ echo "$me $scriptversion"
+ exit $?
+ ;;
+ --)
+ shift
+ break
+ ;;
+ -*)
+ usage_error "unrecognized option '$1'"
+ ;;
+ *)
+ break
+ ;;
+ esac
+ shift
+done
+
+files=$*
+if test -z "$files"; then
+ usage_error "no files given"
+fi
+
+# if basedir was given, then it should be prepended to filenames before
+# byte compilation.
+if [ -z "$basedir" ]; then
+ pathtrans="path = file"
+else
+ pathtrans="path = os.path.join('$basedir', file)"
+fi
+
+# if destdir was given, then it needs to be prepended to the filename to
+# byte compile but not go into the compiled file.
+if [ -z "$destdir" ]; then
+ filetrans="filepath = path"
+else
+ filetrans="filepath = os.path.normpath('$destdir' + os.sep + path)"
+fi
+
+$PYTHON -c "
+import sys, os, py_compile, imp
+
+files = '''$files'''
+
+sys.stdout.write('Byte-compiling python modules...\n')
+for file in files.split():
+ $pathtrans
+ $filetrans
+ if not os.path.exists(filepath) or not (len(filepath) >= 3
+ and filepath[-3:] == '.py'):
+ continue
+ sys.stdout.write(file)
+ sys.stdout.flush()
+ if hasattr(imp, 'get_tag'):
+ py_compile.compile(filepath, imp.cache_from_source(filepath), path)
+ else:
+ py_compile.compile(filepath, filepath + 'c', path)
+sys.stdout.write('\n')" || exit $?
+
+# this will fail for python < 1.5, but that doesn't matter ...
+$PYTHON -O -c "
+import sys, os, py_compile, imp
+
+# pypy does not use .pyo optimization
+if hasattr(sys, 'pypy_translation_info'):
+ sys.exit(0)
+
+files = '''$files'''
+sys.stdout.write('Byte-compiling python modules (optimized versions) ...\n')
+for file in files.split():
+ $pathtrans
+ $filetrans
+ if not os.path.exists(filepath) or not (len(filepath) >= 3
+ and filepath[-3:] == '.py'):
+ continue
+ sys.stdout.write(file)
+ sys.stdout.flush()
+ if hasattr(imp, 'get_tag'):
+ py_compile.compile(filepath, imp.cache_from_source(filepath, False), path)
+ else:
+ py_compile.compile(filepath, filepath + 'o', path)
+sys.stdout.write('\n')" 2>/dev/null || :
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/lib/tap-driver.sh b/lib/tap-driver.sh
new file mode 100755
index 000000000..a6219472a
--- /dev/null
+++ b/lib/tap-driver.sh
@@ -0,0 +1,651 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+scriptversion=2013-12-23.17; # UTC
+
+# Make unconditional expansion of undefined variables an error. This
+# helps a lot in preventing typo-related bugs.
+set -u
+
+me=tap-driver.sh
+
+fatal ()
+{
+ echo "$me: fatal: $*" >&2
+ exit 1
+}
+
+usage_error ()
+{
+ echo "$me: $*" >&2
+ print_usage >&2
+ exit 2
+}
+
+print_usage ()
+{
+ cat <<END
+Usage:
+ tap-driver.sh --test-name=NAME --log-file=PATH --trs-file=PATH
+ [--expect-failure={yes|no}] [--color-tests={yes|no}]
+ [--enable-hard-errors={yes|no}] [--ignore-exit]
+ [--diagnostic-string=STRING] [--merge|--no-merge]
+ [--comments|--no-comments] [--] TEST-COMMAND
+The '--test-name', '-log-file' and '--trs-file' options are mandatory.
+END
+}
+
+# TODO: better error handling in option parsing (in particular, ensure
+# TODO: $log_file, $trs_file and $test_name are defined).
+test_name= # Used for reporting.
+log_file= # Where to save the result and output of the test script.
+trs_file= # Where to save the metadata of the test run.
+expect_failure=0
+color_tests=0
+merge=0
+ignore_exit=0
+comments=0
+diag_string='#'
+while test $# -gt 0; do
+ case $1 in
+ --help) print_usage; exit $?;;
+ --version) echo "$me $scriptversion"; exit $?;;
+ --test-name) test_name=$2; shift;;
+ --log-file) log_file=$2; shift;;
+ --trs-file) trs_file=$2; shift;;
+ --color-tests) color_tests=$2; shift;;
+ --expect-failure) expect_failure=$2; shift;;
+ --enable-hard-errors) shift;; # No-op.
+ --merge) merge=1;;
+ --no-merge) merge=0;;
+ --ignore-exit) ignore_exit=1;;
+ --comments) comments=1;;
+ --no-comments) comments=0;;
+ --diagnostic-string) diag_string=$2; shift;;
+ --) shift; break;;
+ -*) usage_error "invalid option: '$1'";;
+ esac
+ shift
+done
+
+test $# -gt 0 || usage_error "missing test command"
+
+case $expect_failure in
+ yes) expect_failure=1;;
+ *) expect_failure=0;;
+esac
+
+if test $color_tests = yes; then
+ init_colors='
+ color_map["red"]="" # Red.
+ color_map["grn"]="" # Green.
+ color_map["lgn"]="" # Light green.
+ color_map["blu"]="" # Blue.
+ color_map["mgn"]="" # Magenta.
+ color_map["std"]="" # No color.
+ color_for_result["ERROR"] = "mgn"
+ color_for_result["PASS"] = "grn"
+ color_for_result["XPASS"] = "red"
+ color_for_result["FAIL"] = "red"
+ color_for_result["XFAIL"] = "lgn"
+ color_for_result["SKIP"] = "blu"'
+else
+ init_colors=''
+fi
+
+# :; is there to work around a bug in bash 3.2 (and earlier) which
+# does not always set '$?' properly on redirection failure.
+# See the Autoconf manual for more details.
+:;{
+ (
+ # Ignore common signals (in this subshell only!), to avoid potential
+ # problems with Korn shells. Some Korn shells are known to propagate
+ # to themselves signals that have killed a child process they were
+ # waiting for; this is done at least for SIGINT (and usually only for
+ # it, in truth). Without the `trap' below, such a behaviour could
+ # cause a premature exit in the current subshell, e.g., in case the
+ # test command it runs gets terminated by a SIGINT. Thus, the awk
+ # script we are piping into would never seen the exit status it
+ # expects on its last input line (which is displayed below by the
+ # last `echo $?' statement), and would thus die reporting an internal
+ # error.
+ # For more information, see the Autoconf manual and the threads:
+ # <https://lists.gnu.org/archive/html/bug-autoconf/2011-09/msg00004.html>
+ # <http://mail.opensolaris.org/pipermail/ksh93-integration-discuss/2009-February/004121.html>
+ trap : 1 3 2 13 15
+ if test $merge -gt 0; then
+ exec 2>&1
+ else
+ exec 2>&3
+ fi
+ "$@"
+ echo $?
+ ) | LC_ALL=C ${AM_TAP_AWK-awk} \
+ -v me="$me" \
+ -v test_script_name="$test_name" \
+ -v log_file="$log_file" \
+ -v trs_file="$trs_file" \
+ -v expect_failure="$expect_failure" \
+ -v merge="$merge" \
+ -v ignore_exit="$ignore_exit" \
+ -v comments="$comments" \
+ -v diag_string="$diag_string" \
+'
+# TODO: the usages of "cat >&3" below could be optimized when using
+# GNU awk, and/on on systems that supports /dev/fd/.
+
+# Implementation note: in what follows, `result_obj` will be an
+# associative array that (partly) simulates a TAP result object
+# from the `TAP::Parser` perl module.
+
+## ----------- ##
+## FUNCTIONS ##
+## ----------- ##
+
+function fatal(msg)
+{
+ print me ": " msg | "cat >&2"
+ exit 1
+}
+
+function abort(where)
+{
+ fatal("internal error " where)
+}
+
+# Convert a boolean to a "yes"/"no" string.
+function yn(bool)
+{
+ return bool ? "yes" : "no";
+}
+
+function add_test_result(result)
+{
+ if (!test_results_index)
+ test_results_index = 0
+ test_results_list[test_results_index] = result
+ test_results_index += 1
+ test_results_seen[result] = 1;
+}
+
+# Whether the test script should be re-run by "make recheck".
+function must_recheck()
+{
+ for (k in test_results_seen)
+ if (k != "XFAIL" && k != "PASS" && k != "SKIP")
+ return 1
+ return 0
+}
+
+# Whether the content of the log file associated to this test should
+# be copied into the "global" test-suite.log.
+function copy_in_global_log()
+{
+ for (k in test_results_seen)
+ if (k != "PASS")
+ return 1
+ return 0
+}
+
+function get_global_test_result()
+{
+ if ("ERROR" in test_results_seen)
+ return "ERROR"
+ if ("FAIL" in test_results_seen || "XPASS" in test_results_seen)
+ return "FAIL"
+ all_skipped = 1
+ for (k in test_results_seen)
+ if (k != "SKIP")
+ all_skipped = 0
+ if (all_skipped)
+ return "SKIP"
+ return "PASS";
+}
+
+function stringify_result_obj(result_obj)
+{
+ if (result_obj["is_unplanned"] || result_obj["number"] != testno)
+ return "ERROR"
+
+ if (plan_seen == LATE_PLAN)
+ return "ERROR"
+
+ if (result_obj["directive"] == "TODO")
+ return result_obj["is_ok"] ? "XPASS" : "XFAIL"
+
+ if (result_obj["directive"] == "SKIP")
+ return result_obj["is_ok"] ? "SKIP" : COOKED_FAIL;
+
+ if (length(result_obj["directive"]))
+ abort("in function stringify_result_obj()")
+
+ return result_obj["is_ok"] ? COOKED_PASS : COOKED_FAIL
+}
+
+function decorate_result(result)
+{
+ color_name = color_for_result[result]
+ if (color_name)
+ return color_map[color_name] "" result "" color_map["std"]
+ # If we are not using colorized output, or if we do not know how
+ # to colorize the given result, we should return it unchanged.
+ return result
+}
+
+function report(result, details)
+{
+ if (result ~ /^(X?(PASS|FAIL)|SKIP|ERROR)/)
+ {
+ msg = ": " test_script_name
+ add_test_result(result)
+ }
+ else if (result == "#")
+ {
+ msg = " " test_script_name ":"
+ }
+ else
+ {
+ abort("in function report()")
+ }
+ if (length(details))
+ msg = msg " " details
+ # Output on console might be colorized.
+ print decorate_result(result) msg
+ # Log the result in the log file too, to help debugging (this is
+ # especially true when said result is a TAP error or "Bail out!").
+ print result msg | "cat >&3";
+}
+
+function testsuite_error(error_message)
+{
+ report("ERROR", "- " error_message)
+}
+
+function handle_tap_result()
+{
+ details = result_obj["number"];
+ if (length(result_obj["description"]))
+ details = details " " result_obj["description"]
+
+ if (plan_seen == LATE_PLAN)
+ {
+ details = details " # AFTER LATE PLAN";
+ }
+ else if (result_obj["is_unplanned"])
+ {
+ details = details " # UNPLANNED";
+ }
+ else if (result_obj["number"] != testno)
+ {
+ details = sprintf("%s # OUT-OF-ORDER (expecting %d)",
+ details, testno);
+ }
+ else if (result_obj["directive"])
+ {
+ details = details " # " result_obj["directive"];
+ if (length(result_obj["explanation"]))
+ details = details " " result_obj["explanation"]
+ }
+
+ report(stringify_result_obj(result_obj), details)
+}
+
+# `skip_reason` should be empty whenever planned > 0.
+function handle_tap_plan(planned, skip_reason)
+{
+ planned += 0 # Avoid getting confused if, say, `planned` is "00"
+ if (length(skip_reason) && planned > 0)
+ abort("in function handle_tap_plan()")
+ if (plan_seen)
+ {
+ # Error, only one plan per stream is acceptable.
+ testsuite_error("multiple test plans")
+ return;
+ }
+ planned_tests = planned
+ # The TAP plan can come before or after *all* the TAP results; we speak
+ # respectively of an "early" or a "late" plan. If we see the plan line
+ # after at least one TAP result has been seen, assume we have a late
+ # plan; in this case, any further test result seen after the plan will
+ # be flagged as an error.
+ plan_seen = (testno >= 1 ? LATE_PLAN : EARLY_PLAN)
+ # If testno > 0, we have an error ("too many tests run") that will be
+ # automatically dealt with later, so do not worry about it here. If
+ # $plan_seen is true, we have an error due to a repeated plan, and that
+ # has already been dealt with above. Otherwise, we have a valid "plan
+ # with SKIP" specification, and should report it as a particular kind
+ # of SKIP result.
+ if (planned == 0 && testno == 0)
+ {
+ if (length(skip_reason))
+ skip_reason = "- " skip_reason;
+ report("SKIP", skip_reason);
+ }
+}
+
+function extract_tap_comment(line)
+{
+ if (index(line, diag_string) == 1)
+ {
+ # Strip leading `diag_string` from `line`.
+ line = substr(line, length(diag_string) + 1)
+ # And strip any leading and trailing whitespace left.
+ sub("^[ \t]*", "", line)
+ sub("[ \t]*$", "", line)
+ # Return what is left (if any).
+ return line;
+ }
+ return "";
+}
+
+# When this function is called, we know that line is a TAP result line,
+# so that it matches the (perl) RE "^(not )?ok\b".
+function setup_result_obj(line)
+{
+ # Get the result, and remove it from the line.
+ result_obj["is_ok"] = (substr(line, 1, 2) == "ok" ? 1 : 0)
+ sub("^(not )?ok[ \t]*", "", line)
+
+ # If the result has an explicit number, get it and strip it; otherwise,
+ # automatically assing the next progresive number to it.
+ if (line ~ /^[0-9]+$/ || line ~ /^[0-9]+[^a-zA-Z0-9_]/)
+ {
+ match(line, "^[0-9]+")
+ # The final `+ 0` is to normalize numbers with leading zeros.
+ result_obj["number"] = substr(line, 1, RLENGTH) + 0
+ line = substr(line, RLENGTH + 1)
+ }
+ else
+ {
+ result_obj["number"] = testno
+ }
+
+ if (plan_seen == LATE_PLAN)
+ # No further test results are acceptable after a "late" TAP plan
+ # has been seen.
+ result_obj["is_unplanned"] = 1
+ else if (plan_seen && testno > planned_tests)
+ result_obj["is_unplanned"] = 1
+ else
+ result_obj["is_unplanned"] = 0
+
+ # Strip trailing and leading whitespace.
+ sub("^[ \t]*", "", line)
+ sub("[ \t]*$", "", line)
+
+ # This will have to be corrected if we have a "TODO"/"SKIP" directive.
+ result_obj["description"] = line
+ result_obj["directive"] = ""
+ result_obj["explanation"] = ""
+
+ if (index(line, "#") == 0)
+ return # No possible directive, nothing more to do.
+
+ # Directives are case-insensitive.
+ rx = "[ \t]*#[ \t]*([tT][oO][dD][oO]|[sS][kK][iI][pP])[ \t]*"
+
+ # See whether we have the directive, and if yes, where.
+ pos = match(line, rx "$")
+ if (!pos)
+ pos = match(line, rx "[^a-zA-Z0-9_]")
+
+ # If there was no TAP directive, we have nothing more to do.
+ if (!pos)
+ return
+
+ # Let`s now see if the TAP directive has been escaped. For example:
+ # escaped: ok \# SKIP
+ # not escaped: ok \\# SKIP
+ # escaped: ok \\\\\# SKIP
+ # not escaped: ok \ # SKIP
+ if (substr(line, pos, 1) == "#")
+ {
+ bslash_count = 0
+ for (i = pos; i > 1 && substr(line, i - 1, 1) == "\\"; i--)
+ bslash_count += 1
+ if (bslash_count % 2)
+ return # Directive was escaped.
+ }
+
+ # Strip the directive and its explanation (if any) from the test
+ # description.
+ result_obj["description"] = substr(line, 1, pos - 1)
+ # Now remove the test description from the line, that has been dealt
+ # with already.
+ line = substr(line, pos)
+ # Strip the directive, and save its value (normalized to upper case).
+ sub("^[ \t]*#[ \t]*", "", line)
+ result_obj["directive"] = toupper(substr(line, 1, 4))
+ line = substr(line, 5)
+ # Now get the explanation for the directive (if any), with leading
+ # and trailing whitespace removed.
+ sub("^[ \t]*", "", line)
+ sub("[ \t]*$", "", line)
+ result_obj["explanation"] = line
+}
+
+function get_test_exit_message(status)
+{
+ if (status == 0)
+ return ""
+ if (status !~ /^[1-9][0-9]*$/)
+ abort("getting exit status")
+ if (status < 127)
+ exit_details = ""
+ else if (status == 127)
+ exit_details = " (command not found?)"
+ else if (status >= 128 && status <= 255)
+ exit_details = sprintf(" (terminated by signal %d?)", status - 128)
+ else if (status > 256 && status <= 384)
+ # We used to report an "abnormal termination" here, but some Korn
+ # shells, when a child process die due to signal number n, can leave
+ # in $? an exit status of 256+n instead of the more standard 128+n.
+ # Apparently, both behaviours are allowed by POSIX (2008), so be
+ # prepared to handle them both. See also Austing Group report ID
+ # 0000051 <http://www.austingroupbugs.net/view.php?id=51>
+ exit_details = sprintf(" (terminated by signal %d?)", status - 256)
+ else
+ # Never seen in practice.
+ exit_details = " (abnormal termination)"
+ return sprintf("exited with status %d%s", status, exit_details)
+}
+
+function write_test_results()
+{
+ print ":global-test-result: " get_global_test_result() > trs_file
+ print ":recheck: " yn(must_recheck()) > trs_file
+ print ":copy-in-global-log: " yn(copy_in_global_log()) > trs_file
+ for (i = 0; i < test_results_index; i += 1)
+ print ":test-result: " test_results_list[i] > trs_file
+ close(trs_file);
+}
+
+BEGIN {
+
+## ------- ##
+## SETUP ##
+## ------- ##
+
+'"$init_colors"'
+
+# Properly initialized once the TAP plan is seen.
+planned_tests = 0
+
+COOKED_PASS = expect_failure ? "XPASS": "PASS";
+COOKED_FAIL = expect_failure ? "XFAIL": "FAIL";
+
+# Enumeration-like constants to remember which kind of plan (if any)
+# has been seen. It is important that NO_PLAN evaluates "false" as
+# a boolean.
+NO_PLAN = 0
+EARLY_PLAN = 1
+LATE_PLAN = 2
+
+testno = 0 # Number of test results seen so far.
+bailed_out = 0 # Whether a "Bail out!" directive has been seen.
+
+# Whether the TAP plan has been seen or not, and if yes, which kind
+# it is ("early" is seen before any test result, "late" otherwise).
+plan_seen = NO_PLAN
+
+## --------- ##
+## PARSING ##
+## --------- ##
+
+is_first_read = 1
+
+while (1)
+ {
+ # Involutions required so that we are able to read the exit status
+ # from the last input line.
+ st = getline
+ if (st < 0) # I/O error.
+ fatal("I/O error while reading from input stream")
+ else if (st == 0) # End-of-input
+ {
+ if (is_first_read)
+ abort("in input loop: only one input line")
+ break
+ }
+ if (is_first_read)
+ {
+ is_first_read = 0
+ nextline = $0
+ continue
+ }
+ else
+ {
+ curline = nextline
+ nextline = $0
+ $0 = curline
+ }
+ # Copy any input line verbatim into the log file.
+ print | "cat >&3"
+ # Parsing of TAP input should stop after a "Bail out!" directive.
+ if (bailed_out)
+ continue
+
+ # TAP test result.
+ if ($0 ~ /^(not )?ok$/ || $0 ~ /^(not )?ok[^a-zA-Z0-9_]/)
+ {
+ testno += 1
+ setup_result_obj($0)
+ handle_tap_result()
+ }
+ # TAP plan (normal or "SKIP" without explanation).
+ else if ($0 ~ /^1\.\.[0-9]+[ \t]*$/)
+ {
+ # The next two lines will put the number of planned tests in $0.
+ sub("^1\\.\\.", "")
+ sub("[^0-9]*$", "")
+ handle_tap_plan($0, "")
+ continue
+ }
+ # TAP "SKIP" plan, with an explanation.
+ else if ($0 ~ /^1\.\.0+[ \t]*#/)
+ {
+ # The next lines will put the skip explanation in $0, stripping
+ # any leading and trailing whitespace. This is a little more
+ # tricky in truth, since we want to also strip a potential leading
+ # "SKIP" string from the message.
+ sub("^[^#]*#[ \t]*(SKIP[: \t][ \t]*)?", "")
+ sub("[ \t]*$", "");
+ handle_tap_plan(0, $0)
+ }
+ # "Bail out!" magic.
+ # Older versions of prove and TAP::Harness (e.g., 3.17) did not
+ # recognize a "Bail out!" directive when preceded by leading
+ # whitespace, but more modern versions (e.g., 3.23) do. So we
+ # emulate the latter, "more modern" behaviour.
+ else if ($0 ~ /^[ \t]*Bail out!/)
+ {
+ bailed_out = 1
+ # Get the bailout message (if any), with leading and trailing
+ # whitespace stripped. The message remains stored in `$0`.
+ sub("^[ \t]*Bail out![ \t]*", "");
+ sub("[ \t]*$", "");
+ # Format the error message for the
+ bailout_message = "Bail out!"
+ if (length($0))
+ bailout_message = bailout_message " " $0
+ testsuite_error(bailout_message)
+ }
+ # Maybe we have too look for dianogtic comments too.
+ else if (comments != 0)
+ {
+ comment = extract_tap_comment($0);
+ if (length(comment))
+ report("#", comment);
+ }
+ }
+
+## -------- ##
+## FINISH ##
+## -------- ##
+
+# A "Bail out!" directive should cause us to ignore any following TAP
+# error, as well as a non-zero exit status from the TAP producer.
+if (!bailed_out)
+ {
+ if (!plan_seen)
+ {
+ testsuite_error("missing test plan")
+ }
+ else if (planned_tests != testno)
+ {
+ bad_amount = testno > planned_tests ? "many" : "few"
+ testsuite_error(sprintf("too %s tests run (expected %d, got %d)",
+ bad_amount, planned_tests, testno))
+ }
+ if (!ignore_exit)
+ {
+ # Fetch exit status from the last line.
+ exit_message = get_test_exit_message(nextline)
+ if (exit_message)
+ testsuite_error(exit_message)
+ }
+ }
+
+write_test_results()
+
+exit 0
+
+} # End of "BEGIN" block.
+'
+
+# TODO: document that we consume the file descriptor 3 :-(
+} 3>"$log_file"
+
+test $? -eq 0 || fatal "I/O or internal error"
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/lib/test-driver b/lib/test-driver
new file mode 100755
index 000000000..4783bd990
--- /dev/null
+++ b/lib/test-driver
@@ -0,0 +1,148 @@
+#! /bin/sh
+# test-driver - basic testsuite driver script.
+
+scriptversion=2017-09-16.17; # UTC
+
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+# Make unconditional expansion of undefined variables an error. This
+# helps a lot in preventing typo-related bugs.
+set -u
+
+usage_error ()
+{
+ echo "$0: $*" >&2
+ print_usage >&2
+ exit 2
+}
+
+print_usage ()
+{
+ cat <<END
+Usage:
+ test-driver --test-name=NAME --log-file=PATH --trs-file=PATH
+ [--expect-failure={yes|no}] [--color-tests={yes|no}]
+ [--enable-hard-errors={yes|no}] [--]
+ TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS]
+The '--test-name', '--log-file' and '--trs-file' options are mandatory.
+END
+}
+
+test_name= # Used for reporting.
+log_file= # Where to save the output of the test script.
+trs_file= # Where to save the metadata of the test run.
+expect_failure=no
+color_tests=no
+enable_hard_errors=yes
+while test $# -gt 0; do
+ case $1 in
+ --help) print_usage; exit $?;;
+ --version) echo "test-driver $scriptversion"; exit $?;;
+ --test-name) test_name=$2; shift;;
+ --log-file) log_file=$2; shift;;
+ --trs-file) trs_file=$2; shift;;
+ --color-tests) color_tests=$2; shift;;
+ --expect-failure) expect_failure=$2; shift;;
+ --enable-hard-errors) enable_hard_errors=$2; shift;;
+ --) shift; break;;
+ -*) usage_error "invalid option: '$1'";;
+ *) break;;
+ esac
+ shift
+done
+
+missing_opts=
+test x"$test_name" = x && missing_opts="$missing_opts --test-name"
+test x"$log_file" = x && missing_opts="$missing_opts --log-file"
+test x"$trs_file" = x && missing_opts="$missing_opts --trs-file"
+if test x"$missing_opts" != x; then
+ usage_error "the following mandatory options are missing:$missing_opts"
+fi
+
+if test $# -eq 0; then
+ usage_error "missing argument"
+fi
+
+if test $color_tests = yes; then
+ # Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'.
+ red='' # Red.
+ grn='' # Green.
+ lgn='' # Light green.
+ blu='' # Blue.
+ mgn='' # Magenta.
+ std='' # No color.
+else
+ red= grn= lgn= blu= mgn= std=
+fi
+
+do_exit='rm -f $log_file $trs_file; (exit $st); exit $st'
+trap "st=129; $do_exit" 1
+trap "st=130; $do_exit" 2
+trap "st=141; $do_exit" 13
+trap "st=143; $do_exit" 15
+
+# Test script is run here.
+"$@" >$log_file 2>&1
+estatus=$?
+
+if test $enable_hard_errors = no && test $estatus -eq 99; then
+ tweaked_estatus=1
+else
+ tweaked_estatus=$estatus
+fi
+
+case $tweaked_estatus:$expect_failure in
+ 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;;
+ 0:*) col=$grn res=PASS recheck=no gcopy=no;;
+ 77:*) col=$blu res=SKIP recheck=no gcopy=yes;;
+ 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;;
+ *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;;
+ *:*) col=$red res=FAIL recheck=yes gcopy=yes;;
+esac
+
+# Report the test outcome and exit status in the logs, so that one can
+# know whether the test passed or failed simply by looking at the '.log'
+# file, without the need of also peaking into the corresponding '.trs'
+# file (automake bug#11814).
+echo "$res $test_name (exit status: $estatus)" >>$log_file
+
+# Report outcome to console.
+echo "${col}${res}${std}: $test_name"
+
+# Register the test result, and other relevant metadata.
+echo ":test-result: $res" > $trs_file
+echo ":global-test-result: $res" >> $trs_file
+echo ":recheck: $recheck" >> $trs_file
+echo ":copy-in-global-log: $gcopy" >> $trs_file
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/lib/texinfo.tex b/lib/texinfo.tex
new file mode 100644
index 000000000..2982a8f5d
--- /dev/null
+++ b/lib/texinfo.tex
@@ -0,0 +1,11687 @@
+% texinfo.tex -- TeX macros to handle Texinfo files.
+%
+% Load plain if necessary, i.e., if running under initex.
+\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
+%
+\def\texinfoversion{2017-09-19.13}
+%
+% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
+% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+% 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017
+% Free Software Foundation, Inc.
+%
+% This texinfo.tex file 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 3 of the
+% License, or (at your option) any later version.
+%
+% This texinfo.tex file 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 <https://www.gnu.org/licenses/>.
+%
+% As a special exception, when this file is read by TeX when processing
+% a Texinfo source document, you may use the result without
+% restriction. This Exception is an additional permission under section 7
+% of the GNU General Public License, version 3 ("GPLv3").
+%
+% Please try the latest version of texinfo.tex before submitting bug
+% reports; you can get the latest version from:
+% https://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or
+% https://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or
+% https://www.gnu.org/software/texinfo/ (the Texinfo home page)
+% The texinfo.tex in any given distribution could well be out
+% of date, so if that's what you're using, please check.
+%
+% Send bug reports to bug-texinfo@gnu.org. Please include including a
+% complete document in each bug report with which we can reproduce the
+% problem. Patches are, of course, greatly appreciated.
+%
+% To process a Texinfo manual with TeX, it's most reliable to use the
+% texi2dvi shell script that comes with the distribution. For a simple
+% manual foo.texi, however, you can get away with this:
+% tex foo.texi
+% texindex foo.??
+% tex foo.texi
+% tex foo.texi
+% dvips foo.dvi -o # or whatever; this makes foo.ps.
+% The extra TeX runs get the cross-reference information correct.
+% Sometimes one run after texindex suffices, and sometimes you need more
+% than two; texi2dvi does it as many times as necessary.
+%
+% It is possible to adapt texinfo.tex for other languages, to some
+% extent. You can get the existing language-specific files from the
+% full Texinfo distribution.
+%
+% The GNU Texinfo home page is https://www.gnu.org/software/texinfo.
+
+
+\message{Loading texinfo [version \texinfoversion]:}
+
+% If in a .fmt file, print the version number
+% and turn on active characters that we couldn't do earlier because
+% they might have appeared in the input file name.
+\everyjob{\message{[Texinfo version \texinfoversion]}%
+ \catcode`+=\active \catcode`\_=\active}
+
+% LaTeX's \typeout. This ensures that the messages it is used for
+% are identical in format to the corresponding ones from latex/pdflatex.
+\def\typeout{\immediate\write17}%
+
+\chardef\other=12
+
+% We never want plain's \outer definition of \+ in Texinfo.
+% For @tex, we can use \tabalign.
+\let\+ = \relax
+
+% Save some plain tex macros whose names we will redefine.
+\let\ptexb=\b
+\let\ptexbullet=\bullet
+\let\ptexc=\c
+\let\ptexcomma=\,
+\let\ptexdot=\.
+\let\ptexdots=\dots
+\let\ptexend=\end
+\let\ptexequiv=\equiv
+\let\ptexexclam=\!
+\let\ptexfootnote=\footnote
+\let\ptexgtr=>
+\let\ptexhat=^
+\let\ptexi=\i
+\let\ptexindent=\indent
+\let\ptexinsert=\insert
+\let\ptexlbrace=\{
+\let\ptexless=<
+\let\ptexnewwrite\newwrite
+\let\ptexnoindent=\noindent
+\let\ptexplus=+
+\let\ptexraggedright=\raggedright
+\let\ptexrbrace=\}
+\let\ptexslash=\/
+\let\ptexsp=\sp
+\let\ptexstar=\*
+\let\ptexsup=\sup
+\let\ptext=\t
+\let\ptextop=\top
+{\catcode`\'=\active \global\let\ptexquoteright'}% active in plain's math mode
+
+% If this character appears in an error message or help string, it
+% starts a new line in the output.
+\newlinechar = `^^J
+
+% Use TeX 3.0's \inputlineno to get the line number, for better error
+% messages, but if we're using an old version of TeX, don't do anything.
+%
+\ifx\inputlineno\thisisundefined
+ \let\linenumber = \empty % Pre-3.0.
+\else
+ \def\linenumber{l.\the\inputlineno:\space}
+\fi
+
+% Set up fixed words for English if not already set.
+\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi
+\ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi
+\ifx\putworderror\undefined \gdef\putworderror{error}\fi
+\ifx\putwordfile\undefined \gdef\putwordfile{file}\fi
+\ifx\putwordin\undefined \gdef\putwordin{in}\fi
+\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi
+\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi
+\ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi
+\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi
+\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi
+\ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi
+\ifx\putwordof\undefined \gdef\putwordof{of}\fi
+\ifx\putwordon\undefined \gdef\putwordon{on}\fi
+\ifx\putwordpage\undefined \gdef\putwordpage{page}\fi
+\ifx\putwordsection\undefined \gdef\putwordsection{section}\fi
+\ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi
+\ifx\putwordsee\undefined \gdef\putwordsee{see}\fi
+\ifx\putwordSee\undefined \gdef\putwordSee{See}\fi
+\ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi
+\ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi
+%
+\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi
+\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi
+\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi
+\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi
+\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi
+\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi
+\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi
+\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi
+\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi
+\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi
+\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi
+\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi
+%
+\ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi
+\ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi
+\ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi
+\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi
+\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi
+
+% Give the space character the catcode for a space.
+\def\spaceisspace{\catcode`\ =10\relax}
+
+% Likewise for ^^M, the end of line character.
+\def\endlineisspace{\catcode13=10\relax}
+
+\chardef\dashChar = `\-
+\chardef\slashChar = `\/
+\chardef\underChar = `\_
+
+% Ignore a token.
+%
+\def\gobble#1{}
+
+% The following is used inside several \edef's.
+\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname}
+
+% Hyphenation fixes.
+\hyphenation{
+ Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script
+ ap-pen-dix bit-map bit-maps
+ data-base data-bases eshell fall-ing half-way long-est man-u-script
+ man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm
+ par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces
+ spell-ing spell-ings
+ stand-alone strong-est time-stamp time-stamps which-ever white-space
+ wide-spread wrap-around
+}
+
+% Sometimes it is convenient to have everything in the transcript file
+% and nothing on the terminal. We don't just call \tracingall here,
+% since that produces some useless output on the terminal. We also make
+% some effort to order the tracing commands to reduce output in the log
+% file; cf. trace.sty in LaTeX.
+%
+\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
+\def\loggingall{%
+ \tracingstats2
+ \tracingpages1
+ \tracinglostchars2 % 2 gives us more in etex
+ \tracingparagraphs1
+ \tracingoutput1
+ \tracingmacros2
+ \tracingrestores1
+ \showboxbreadth\maxdimen \showboxdepth\maxdimen
+ \ifx\eTeXversion\thisisundefined\else % etex gives us more logging
+ \tracingscantokens1
+ \tracingifs1
+ \tracinggroups1
+ \tracingnesting2
+ \tracingassigns1
+ \fi
+ \tracingcommands3 % 3 gives us more in etex
+ \errorcontextlines16
+}%
+
+% @errormsg{MSG}. Do the index-like expansions on MSG, but if things
+% aren't perfect, it's not the end of the world, being an error message,
+% after all.
+%
+\def\errormsg{\begingroup \indexnofonts \doerrormsg}
+\def\doerrormsg#1{\errmessage{#1}}
+
+% add check for \lastpenalty to plain's definitions. If the last thing
+% we did was a \nobreak, we don't want to insert more space.
+%
+\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount
+ \removelastskip\penalty-50\smallskip\fi\fi}
+\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount
+ \removelastskip\penalty-100\medskip\fi\fi}
+\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount
+ \removelastskip\penalty-200\bigskip\fi\fi}
+
+% Output routine
+%
+
+% For a final copy, take out the rectangles
+% that mark overfull boxes (in case you have decided
+% that the text looks ok even though it passes the margin).
+%
+\def\finalout{\overfullrule=0pt }
+
+% Do @cropmarks to get crop marks.
+%
+\newif\ifcropmarks
+\let\cropmarks = \cropmarkstrue
+%
+% Dimensions to add cropmarks at corners.
+% Added by P. A. MacKay, 12 Nov. 1986
+%
+\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines
+\newdimen\cornerlong \cornerlong=1pc
+\newdimen\cornerthick \cornerthick=.3pt
+\newdimen\topandbottommargin \topandbottommargin=.75in
+
+% Output a mark which sets \thischapter, \thissection and \thiscolor.
+% We dump everything together because we only have one kind of mark.
+% This works because we only use \botmark / \topmark, not \firstmark.
+%
+% A mark contains a subexpression of the \ifcase ... \fi construct.
+% \get*marks macros below extract the needed part using \ifcase.
+%
+% Another complication is to let the user choose whether \thischapter
+% (\thissection) refers to the chapter (section) in effect at the top
+% of a page, or that at the bottom of a page.
+
+% \domark is called twice inside \chapmacro, to add one
+% mark before the section break, and one after.
+% In the second call \prevchapterdefs is the same as \lastchapterdefs,
+% and \prevsectiondefs is the same as \lastsectiondefs.
+% Then if the page is not broken at the mark, some of the previous
+% section appears on the page, and we can get the name of this section
+% from \firstmark for @everyheadingmarks top.
+% @everyheadingmarks bottom uses \botmark.
+%
+% See page 260 of The TeXbook.
+\def\domark{%
+ \toks0=\expandafter{\lastchapterdefs}%
+ \toks2=\expandafter{\lastsectiondefs}%
+ \toks4=\expandafter{\prevchapterdefs}%
+ \toks6=\expandafter{\prevsectiondefs}%
+ \toks8=\expandafter{\lastcolordefs}%
+ \mark{%
+ \the\toks0 \the\toks2 % 0: marks for @everyheadingmarks top
+ \noexpand\or \the\toks4 \the\toks6 % 1: for @everyheadingmarks bottom
+ \noexpand\else \the\toks8 % 2: color marks
+ }%
+}
+
+% \gettopheadingmarks, \getbottomheadingmarks,
+% \getcolormarks - extract needed part of mark.
+%
+% \topmark doesn't work for the very first chapter (after the title
+% page or the contents), so we use \firstmark there -- this gets us
+% the mark with the chapter defs, unless the user sneaks in, e.g.,
+% @setcolor (or @url, or @link, etc.) between @contents and the very
+% first @chapter.
+\def\gettopheadingmarks{%
+ \ifcase0\topmark\fi
+ \ifx\thischapter\empty \ifcase0\firstmark\fi \fi
+}
+\def\getbottomheadingmarks{\ifcase1\botmark\fi}
+\def\getcolormarks{\ifcase2\topmark\fi}
+
+% Avoid "undefined control sequence" errors.
+\def\lastchapterdefs{}
+\def\lastsectiondefs{}
+\def\lastsection{}
+\def\prevchapterdefs{}
+\def\prevsectiondefs{}
+\def\lastcolordefs{}
+
+% Margin to add to right of even pages, to left of odd pages.
+\newdimen\bindingoffset
+\newdimen\normaloffset
+\newdimen\txipagewidth \newdimen\txipageheight
+
+% Main output routine.
+%
+\chardef\PAGE = 255
+\output = {\onepageout{\pagecontents\PAGE}}
+
+\newbox\headlinebox
+\newbox\footlinebox
+
+% \onepageout takes a vbox as an argument.
+% \shipout a vbox for a single page, adding an optional header, footer,
+% cropmarks, and footnote. This also causes index entries for this page
+% to be written to the auxiliary files.
+%
+\def\onepageout#1{%
+ \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi
+ %
+ \ifodd\pageno \advance\hoffset by \bindingoffset
+ \else \advance\hoffset by -\bindingoffset\fi
+ %
+ % Common context changes for both heading and footing.
+ % Do this outside of the \shipout so @code etc. will be expanded in
+ % the headline as they should be, not taken literally (outputting ''code).
+ \def\commmonheadfootline{\let\hsize=\txipagewidth \texinfochars}
+ %
+ % Retrieve the information for the headings from the marks in the page,
+ % and call Plain TeX's \makeheadline and \makefootline, which use the
+ % values in \headline and \footline.
+ %
+ % This is used to check if we are on the first page of a chapter.
+ \ifcase1\topmark\fi
+ \let\prevchaptername\thischaptername
+ \ifcase0\firstmark\fi
+ \let\curchaptername\thischaptername
+ %
+ \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi
+ \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi
+ %
+ \ifx\curchaptername\prevchaptername
+ \let\thischapterheading\thischapter
+ \else
+ % \thischapterheading is the same as \thischapter except it is blank
+ % for the first page of a chapter. This is to prevent the chapter name
+ % being shown twice.
+ \def\thischapterheading{}%
+ \fi
+ %
+ \global\setbox\headlinebox = \vbox{\commmonheadfootline \makeheadline}%
+ \global\setbox\footlinebox = \vbox{\commmonheadfootline \makefootline}%
+ %
+ {%
+ % Set context for writing to auxiliary files like index files.
+ % Have to do this stuff outside the \shipout because we want it to
+ % take effect in \write's, yet the group defined by the \vbox ends
+ % before the \shipout runs.
+ %
+ \indexdummies % don't expand commands in the output.
+ \normalturnoffactive % \ in index entries must not stay \, e.g., if
+ % the page break happens to be in the middle of an example.
+ % We don't want .vr (or whatever) entries like this:
+ % \entry{{\indexbackslash }acronym}{32}{\code {\acronym}}
+ % "\acronym" won't work when it's read back in;
+ % it needs to be
+ % {\code {{\backslashcurfont }acronym}
+ \shipout\vbox{%
+ % Do this early so pdf references go to the beginning of the page.
+ \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi
+ %
+ \ifcropmarks \vbox to \outervsize\bgroup
+ \hsize = \outerhsize
+ \vskip-\topandbottommargin
+ \vtop to0pt{%
+ \line{\ewtop\hfil\ewtop}%
+ \nointerlineskip
+ \line{%
+ \vbox{\moveleft\cornerthick\nstop}%
+ \hfill
+ \vbox{\moveright\cornerthick\nstop}%
+ }%
+ \vss}%
+ \vskip\topandbottommargin
+ \line\bgroup
+ \hfil % center the page within the outer (page) hsize.
+ \ifodd\pageno\hskip\bindingoffset\fi
+ \vbox\bgroup
+ \fi
+ %
+ \unvbox\headlinebox
+ \pagebody{#1}%
+ \ifdim\ht\footlinebox > 0pt
+ % Only leave this space if the footline is nonempty.
+ % (We lessened \vsize for it in \oddfootingyyy.)
+ % The \baselineskip=24pt in plain's \makefootline has no effect.
+ \vskip 24pt
+ \unvbox\footlinebox
+ \fi
+ %
+ \ifcropmarks
+ \egroup % end of \vbox\bgroup
+ \hfil\egroup % end of (centering) \line\bgroup
+ \vskip\topandbottommargin plus1fill minus1fill
+ \boxmaxdepth = \cornerthick
+ \vbox to0pt{\vss
+ \line{%
+ \vbox{\moveleft\cornerthick\nsbot}%
+ \hfill
+ \vbox{\moveright\cornerthick\nsbot}%
+ }%
+ \nointerlineskip
+ \line{\ewbot\hfil\ewbot}%
+ }%
+ \egroup % \vbox from first cropmarks clause
+ \fi
+ }% end of \shipout\vbox
+ }% end of group with \indexdummies
+ \advancepageno
+ \ifnum\outputpenalty>-20000 \else\dosupereject\fi
+}
+
+\newinsert\margin \dimen\margin=\maxdimen
+
+% Main part of page, including any footnotes
+\def\pagebody#1{\vbox to\txipageheight{\boxmaxdepth=\maxdepth #1}}
+{\catcode`\@ =11
+\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi
+% marginal hacks, juha@viisa.uucp (Juha Takala)
+\ifvoid\margin\else % marginal info is present
+ \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi
+\dimen@=\dp#1\relax \unvbox#1\relax
+\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
+\ifr@ggedbottom \kern-\dimen@ \vfil \fi}
+}
+
+% Here are the rules for the cropmarks. Note that they are
+% offset so that the space between them is truly \outerhsize or \outervsize
+% (P. A. MacKay, 12 November, 1986)
+%
+\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong}
+\def\nstop{\vbox
+ {\hrule height\cornerthick depth\cornerlong width\cornerthick}}
+\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong}
+\def\nsbot{\vbox
+ {\hrule height\cornerlong depth\cornerthick width\cornerthick}}
+
+
+% Argument parsing
+
+% Parse an argument, then pass it to #1. The argument is the rest of
+% the input line (except we remove a trailing comment). #1 should be a
+% macro which expects an ordinary undelimited TeX argument.
+% For example, \def\foo{\parsearg\fooxxx}.
+%
+\def\parsearg{\parseargusing{}}
+\def\parseargusing#1#2{%
+ \def\argtorun{#2}%
+ \begingroup
+ \obeylines
+ \spaceisspace
+ #1%
+ \parseargline\empty% Insert the \empty token, see \finishparsearg below.
+}
+
+{\obeylines %
+ \gdef\parseargline#1^^M{%
+ \endgroup % End of the group started in \parsearg.
+ \argremovecomment #1\comment\ArgTerm%
+ }%
+}
+
+% First remove any @comment, then any @c comment. Also remove a @texinfoc
+% comment (see \scanmacro for details). Pass the result on to \argcheckspaces.
+\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm}
+\def\argremovec#1\c#2\ArgTerm{\argremovetexinfoc #1\texinfoc\ArgTerm}
+\def\argremovetexinfoc#1\texinfoc#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm}
+
+% Each occurrence of `\^^M' or `<space>\^^M' is replaced by a single space.
+%
+% \argremovec might leave us with trailing space, e.g.,
+% @end itemize @c foo
+% This space token undergoes the same procedure and is eventually removed
+% by \finishparsearg.
+%
+\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M}
+\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M}
+\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{%
+ \def\temp{#3}%
+ \ifx\temp\empty
+ % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp:
+ \let\temp\finishparsearg
+ \else
+ \let\temp\argcheckspaces
+ \fi
+ % Put the space token in:
+ \temp#1 #3\ArgTerm
+}
+
+% If a _delimited_ argument is enclosed in braces, they get stripped; so
+% to get _exactly_ the rest of the line, we had to prevent such situation.
+% We prepended an \empty token at the very beginning and we expand it now,
+% just before passing the control to \argtorun.
+% (Similarly, we have to think about #3 of \argcheckspacesY above: it is
+% either the null string, or it ends with \^^M---thus there is no danger
+% that a pair of braces would be stripped.
+%
+% But first, we have to remove the trailing space token.
+%
+\def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}}
+
+
+% \parseargdef - define a command taking an argument on the line
+%
+% \parseargdef\foo{...}
+% is roughly equivalent to
+% \def\foo{\parsearg\Xfoo}
+% \def\Xfoo#1{...}
+\def\parseargdef#1{%
+ \expandafter \doparseargdef \csname\string#1\endcsname #1%
+}
+\def\doparseargdef#1#2{%
+ \def#2{\parsearg#1}%
+ \def#1##1%
+}
+
+% Several utility definitions with active space:
+{
+ \obeyspaces
+ \gdef\obeyedspace{ }
+
+ % Make each space character in the input produce a normal interword
+ % space in the output. Don't allow a line break at this space, as this
+ % is used only in environments like @example, where each line of input
+ % should produce a line of output anyway.
+ %
+ \gdef\sepspaces{\obeyspaces\let =\tie}
+
+ % If an index command is used in an @example environment, any spaces
+ % therein should become regular spaces in the raw index file, not the
+ % expansion of \tie (\leavevmode \penalty \@M \ ).
+ \gdef\unsepspaces{\let =\space}
+}
+
+
+\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}
+
+% Define the framework for environments in texinfo.tex. It's used like this:
+%
+% \envdef\foo{...}
+% \def\Efoo{...}
+%
+% It's the responsibility of \envdef to insert \begingroup before the
+% actual body; @end closes the group after calling \Efoo. \envdef also
+% defines \thisenv, so the current environment is known; @end checks
+% whether the environment name matches. The \checkenv macro can also be
+% used to check whether the current environment is the one expected.
+%
+% Non-false conditionals (@iftex, @ifset) don't fit into this, so they
+% are not treated as environments; they don't open a group. (The
+% implementation of @end takes care not to call \endgroup in this
+% special case.)
+
+
+% At run-time, environments start with this:
+\def\startenvironment#1{\begingroup\def\thisenv{#1}}
+% initialize
+\let\thisenv\empty
+
+% ... but they get defined via ``\envdef\foo{...}'':
+\long\def\envdef#1#2{\def#1{\startenvironment#1#2}}
+\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}}
+
+% Check whether we're in the right environment:
+\def\checkenv#1{%
+ \def\temp{#1}%
+ \ifx\thisenv\temp
+ \else
+ \badenverr
+ \fi
+}
+
+% Environment mismatch, #1 expected:
+\def\badenverr{%
+ \errhelp = \EMsimple
+ \errmessage{This command can appear only \inenvironment\temp,
+ not \inenvironment\thisenv}%
+}
+\def\inenvironment#1{%
+ \ifx#1\empty
+ outside of any environment%
+ \else
+ in environment \expandafter\string#1%
+ \fi
+}
+
+% @end foo executes the definition of \Efoo.
+% But first, it executes a specialized version of \checkenv
+%
+\parseargdef\end{%
+ \if 1\csname iscond.#1\endcsname
+ \else
+ % The general wording of \badenverr may not be ideal.
+ \expandafter\checkenv\csname#1\endcsname
+ \csname E#1\endcsname
+ \endgroup
+ \fi
+}
+
+\newhelp\EMsimple{Press RETURN to continue.}
+
+
+% Be sure we're in horizontal mode when doing a tie, since we make space
+% equivalent to this in @example-like environments. Otherwise, a space
+% at the beginning of a line will start with \penalty -- and
+% since \penalty is valid in vertical mode, we'd end up putting the
+% penalty on the vertical list instead of in the new paragraph.
+{\catcode`@ = 11
+ % Avoid using \@M directly, because that causes trouble
+ % if the definition is written into an index file.
+ \global\let\tiepenalty = \@M
+ \gdef\tie{\leavevmode\penalty\tiepenalty\ }
+}
+
+% @: forces normal size whitespace following.
+\def\:{\spacefactor=1000 }
+
+% @* forces a line break.
+\def\*{\unskip\hfil\break\hbox{}\ignorespaces}
+
+% @/ allows a line break.
+\let\/=\allowbreak
+
+% @. is an end-of-sentence period.
+\def\.{.\spacefactor=\endofsentencespacefactor\space}
+
+% @! is an end-of-sentence bang.
+\def\!{!\spacefactor=\endofsentencespacefactor\space}
+
+% @? is an end-of-sentence query.
+\def\?{?\spacefactor=\endofsentencespacefactor\space}
+
+% @frenchspacing on|off says whether to put extra space after punctuation.
+%
+\def\onword{on}
+\def\offword{off}
+%
+\parseargdef\frenchspacing{%
+ \def\temp{#1}%
+ \ifx\temp\onword \plainfrenchspacing
+ \else\ifx\temp\offword \plainnonfrenchspacing
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @frenchspacing option `\temp', must be on|off}%
+ \fi\fi
+}
+
+% @w prevents a word break. Without the \leavevmode, @w at the
+% beginning of a paragraph, when TeX is still in vertical mode, would
+% produce a whole line of output instead of starting the paragraph.
+\def\w#1{\leavevmode\hbox{#1}}
+
+% @group ... @end group forces ... to be all on one page, by enclosing
+% it in a TeX vbox. We use \vtop instead of \vbox to construct the box
+% to keep its height that of a normal line. According to the rules for
+% \topskip (p.114 of the TeXbook), the glue inserted is
+% max (\topskip - \ht (first item), 0). If that height is large,
+% therefore, no glue is inserted, and the space between the headline and
+% the text is small, which looks bad.
+%
+% Another complication is that the group might be very large. This can
+% cause the glue on the previous page to be unduly stretched, because it
+% does not have much material. In this case, it's better to add an
+% explicit \vfill so that the extra space is at the bottom. The
+% threshold for doing this is if the group is more than \vfilllimit
+% percent of a page (\vfilllimit can be changed inside of @tex).
+%
+\newbox\groupbox
+\def\vfilllimit{0.7}
+%
+\envdef\group{%
+ \ifnum\catcode`\^^M=\active \else
+ \errhelp = \groupinvalidhelp
+ \errmessage{@group invalid in context where filling is enabled}%
+ \fi
+ \startsavinginserts
+ %
+ \setbox\groupbox = \vtop\bgroup
+ % Do @comment since we are called inside an environment such as
+ % @example, where each end-of-line in the input causes an
+ % end-of-line in the output. We don't want the end-of-line after
+ % the `@group' to put extra space in the output. Since @group
+ % should appear on a line by itself (according to the Texinfo
+ % manual), we don't worry about eating any user text.
+ \comment
+}
+%
+% The \vtop produces a box with normal height and large depth; thus, TeX puts
+% \baselineskip glue before it, and (when the next line of text is done)
+% \lineskip glue after it. Thus, space below is not quite equal to space
+% above. But it's pretty close.
+\def\Egroup{%
+ % To get correct interline space between the last line of the group
+ % and the first line afterwards, we have to propagate \prevdepth.
+ \endgraf % Not \par, as it may have been set to \lisppar.
+ \global\dimen1 = \prevdepth
+ \egroup % End the \vtop.
+ \addgroupbox
+ \prevdepth = \dimen1
+ \checkinserts
+}
+
+\def\addgroupbox{
+ % \dimen0 is the vertical size of the group's box.
+ \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox
+ % \dimen2 is how much space is left on the page (more or less).
+ \dimen2 = \txipageheight \advance\dimen2 by -\pagetotal
+ % if the group doesn't fit on the current page, and it's a big big
+ % group, force a page break.
+ \ifdim \dimen0 > \dimen2
+ \ifdim \pagetotal < \vfilllimit\txipageheight
+ \page
+ \fi
+ \fi
+ \box\groupbox
+}
+
+%
+% TeX puts in an \escapechar (i.e., `@') at the beginning of the help
+% message, so this ends up printing `@group can only ...'.
+%
+\newhelp\groupinvalidhelp{%
+group can only be used in environments such as @example,^^J%
+where each line of input produces a line of output.}
+
+% @need space-in-mils
+% forces a page break if there is not space-in-mils remaining.
+
+\newdimen\mil \mil=0.001in
+
+\parseargdef\need{%
+ % Ensure vertical mode, so we don't make a big box in the middle of a
+ % paragraph.
+ \par
+ %
+ % If the @need value is less than one line space, it's useless.
+ \dimen0 = #1\mil
+ \dimen2 = \ht\strutbox
+ \advance\dimen2 by \dp\strutbox
+ \ifdim\dimen0 > \dimen2
+ %
+ % Do a \strut just to make the height of this box be normal, so the
+ % normal leading is inserted relative to the preceding line.
+ % And a page break here is fine.
+ \vtop to #1\mil{\strut\vfil}%
+ %
+ % TeX does not even consider page breaks if a penalty added to the
+ % main vertical list is 10000 or more. But in order to see if the
+ % empty box we just added fits on the page, we must make it consider
+ % page breaks. On the other hand, we don't want to actually break the
+ % page after the empty box. So we use a penalty of 9999.
+ %
+ % There is an extremely small chance that TeX will actually break the
+ % page at this \penalty, if there are no other feasible breakpoints in
+ % sight. (If the user is using lots of big @group commands, which
+ % almost-but-not-quite fill up a page, TeX will have a hard time doing
+ % good page breaking, for example.) However, I could not construct an
+ % example where a page broke at this \penalty; if it happens in a real
+ % document, then we can reconsider our strategy.
+ \penalty9999
+ %
+ % Back up by the size of the box, whether we did a page break or not.
+ \kern -#1\mil
+ %
+ % Do not allow a page break right after this kern.
+ \nobreak
+ \fi
+}
+
+% @br forces paragraph break (and is undocumented).
+
+\let\br = \par
+
+% @page forces the start of a new page.
+%
+\def\page{\par\vfill\supereject}
+
+% @exdent text....
+% outputs text on separate line in roman font, starting at standard page margin
+
+% This records the amount of indent in the innermost environment.
+% That's how much \exdent should take out.
+\newskip\exdentamount
+
+% This defn is used inside fill environments such as @defun.
+\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}
+
+% This defn is used inside nofill environments such as @example.
+\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount
+ \leftline{\hskip\leftskip{\rm#1}}}}
+
+% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current
+% paragraph. For more general purposes, use the \margin insertion
+% class. WHICH is `l' or `r'. Not documented, written for gawk manual.
+%
+\newskip\inmarginspacing \inmarginspacing=1cm
+\def\strutdepth{\dp\strutbox}
+%
+\def\doinmargin#1#2{\strut\vadjust{%
+ \nobreak
+ \kern-\strutdepth
+ \vtop to \strutdepth{%
+ \baselineskip=\strutdepth
+ \vss
+ % if you have multiple lines of stuff to put here, you'll need to
+ % make the vbox yourself of the appropriate size.
+ \ifx#1l%
+ \llap{\ignorespaces #2\hskip\inmarginspacing}%
+ \else
+ \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}%
+ \fi
+ \null
+ }%
+}}
+\def\inleftmargin{\doinmargin l}
+\def\inrightmargin{\doinmargin r}
+%
+% @inmargin{TEXT [, RIGHT-TEXT]}
+% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right;
+% else use TEXT for both).
+%
+\def\inmargin#1{\parseinmargin #1,,\finish}
+\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing.
+ \setbox0 = \hbox{\ignorespaces #2}%
+ \ifdim\wd0 > 0pt
+ \def\lefttext{#1}% have both texts
+ \def\righttext{#2}%
+ \else
+ \def\lefttext{#1}% have only one text
+ \def\righttext{#1}%
+ \fi
+ %
+ \ifodd\pageno
+ \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin
+ \else
+ \def\temp{\inleftmargin\lefttext}%
+ \fi
+ \temp
+}
+
+% @include FILE -- \input text of FILE.
+%
+\def\include{\parseargusing\filenamecatcodes\includezzz}
+\def\includezzz#1{%
+ \pushthisfilestack
+ \def\thisfile{#1}%
+ {%
+ \makevalueexpandable % we want to expand any @value in FILE.
+ \turnoffactive % and allow special characters in the expansion
+ \indexnofonts % Allow `@@' and other weird things in file names.
+ \wlog{texinfo.tex: doing @include of #1^^J}%
+ \edef\temp{\noexpand\input #1 }%
+ %
+ % This trickery is to read FILE outside of a group, in case it makes
+ % definitions, etc.
+ \expandafter
+ }\temp
+ \popthisfilestack
+}
+\def\filenamecatcodes{%
+ \catcode`\\=\other
+ \catcode`~=\other
+ \catcode`^=\other
+ \catcode`_=\other
+ \catcode`|=\other
+ \catcode`<=\other
+ \catcode`>=\other
+ \catcode`+=\other
+ \catcode`-=\other
+ \catcode`\`=\other
+ \catcode`\'=\other
+}
+
+\def\pushthisfilestack{%
+ \expandafter\pushthisfilestackX\popthisfilestack\StackTerm
+}
+\def\pushthisfilestackX{%
+ \expandafter\pushthisfilestackY\thisfile\StackTerm
+}
+\def\pushthisfilestackY #1\StackTerm #2\StackTerm {%
+ \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}%
+}
+
+\def\popthisfilestack{\errthisfilestackempty}
+\def\errthisfilestackempty{\errmessage{Internal error:
+ the stack of filenames is empty.}}
+%
+\def\thisfile{}
+
+% @center line
+% outputs that line, centered.
+%
+\parseargdef\center{%
+ \ifhmode
+ \let\centersub\centerH
+ \else
+ \let\centersub\centerV
+ \fi
+ \centersub{\hfil \ignorespaces#1\unskip \hfil}%
+ \let\centersub\relax % don't let the definition persist, just in case
+}
+\def\centerH#1{{%
+ \hfil\break
+ \advance\hsize by -\leftskip
+ \advance\hsize by -\rightskip
+ \line{#1}%
+ \break
+}}
+%
+\newcount\centerpenalty
+\def\centerV#1{%
+ % The idea here is the same as in \startdefun, \cartouche, etc.: if
+ % @center is the first thing after a section heading, we need to wipe
+ % out the negative parskip inserted by \sectionheading, but still
+ % prevent a page break here.
+ \centerpenalty = \lastpenalty
+ \ifnum\centerpenalty>10000 \vskip\parskip \fi
+ \ifnum\centerpenalty>9999 \penalty\centerpenalty \fi
+ \line{\kern\leftskip #1\kern\rightskip}%
+}
+
+% @sp n outputs n lines of vertical space
+%
+\parseargdef\sp{\vskip #1\baselineskip}
+
+% @comment ...line which is ignored...
+% @c is the same as @comment
+% @ignore ... @end ignore is another way to write a comment
+
+
+\def\c{\begingroup \catcode`\^^M=\active%
+\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other%
+\cxxx}
+{\catcode`\^^M=\active \gdef\cxxx#1^^M{\endgroup}}
+%
+\let\comment\c
+
+% @paragraphindent NCHARS
+% We'll use ems for NCHARS, close enough.
+% NCHARS can also be the word `asis' or `none'.
+% We cannot feasibly implement @paragraphindent asis, though.
+%
+\def\asisword{asis} % no translation, these are keywords
+\def\noneword{none}
+%
+\parseargdef\paragraphindent{%
+ \def\temp{#1}%
+ \ifx\temp\asisword
+ \else
+ \ifx\temp\noneword
+ \defaultparindent = 0pt
+ \else
+ \defaultparindent = #1em
+ \fi
+ \fi
+ \parindent = \defaultparindent
+}
+
+% @exampleindent NCHARS
+% We'll use ems for NCHARS like @paragraphindent.
+% It seems @exampleindent asis isn't necessary, but
+% I preserve it to make it similar to @paragraphindent.
+\parseargdef\exampleindent{%
+ \def\temp{#1}%
+ \ifx\temp\asisword
+ \else
+ \ifx\temp\noneword
+ \lispnarrowing = 0pt
+ \else
+ \lispnarrowing = #1em
+ \fi
+ \fi
+}
+
+% @firstparagraphindent WORD
+% If WORD is `none', then suppress indentation of the first paragraph
+% after a section heading. If WORD is `insert', then do indent at such
+% paragraphs.
+%
+% The paragraph indentation is suppressed or not by calling
+% \suppressfirstparagraphindent, which the sectioning commands do.
+% We switch the definition of this back and forth according to WORD.
+% By default, we suppress indentation.
+%
+\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent}
+\def\insertword{insert}
+%
+\parseargdef\firstparagraphindent{%
+ \def\temp{#1}%
+ \ifx\temp\noneword
+ \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent
+ \else\ifx\temp\insertword
+ \let\suppressfirstparagraphindent = \relax
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @firstparagraphindent option `\temp'}%
+ \fi\fi
+}
+
+% Here is how we actually suppress indentation. Redefine \everypar to
+% \kern backwards by \parindent, and then reset itself to empty.
+%
+% We also make \indent itself not actually do anything until the next
+% paragraph.
+%
+\gdef\dosuppressfirstparagraphindent{%
+ \gdef\indent {\restorefirstparagraphindent \indent}%
+ \gdef\noindent{\restorefirstparagraphindent \noindent}%
+ \global\everypar = {\kern -\parindent \restorefirstparagraphindent}%
+}
+%
+\gdef\restorefirstparagraphindent{%
+ \global\let\indent = \ptexindent
+ \global\let\noindent = \ptexnoindent
+ \global\everypar = {}%
+}
+
+
+% @refill is a no-op.
+\let\refill=\relax
+
+% @setfilename INFO-FILENAME - ignored
+\let\setfilename=\comment
+
+% @bye.
+\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
+
+
+\message{pdf,}
+% adobe `portable' document format
+\newcount\tempnum
+\newcount\lnkcount
+\newtoks\filename
+\newcount\filenamelength
+\newcount\pgn
+\newtoks\toksA
+\newtoks\toksB
+\newtoks\toksC
+\newtoks\toksD
+\newbox\boxA
+\newbox\boxB
+\newcount\countA
+\newif\ifpdf
+\newif\ifpdfmakepagedest
+
+%
+% For LuaTeX
+%
+
+\newif\iftxiuseunicodedestname
+\txiuseunicodedestnamefalse % For pdfTeX etc.
+
+\ifx\luatexversion\thisisundefined
+\else
+ % Use Unicode destination names
+ \txiuseunicodedestnametrue
+ % Escape PDF strings with converting UTF-16 from UTF-8
+ \begingroup
+ \catcode`\%=12
+ \directlua{
+ function UTF16oct(str)
+ tex.sprint(string.char(0x5c) .. '376' .. string.char(0x5c) .. '377')
+ for c in string.utfvalues(str) do
+ if c < 0x10000 then
+ tex.sprint(
+ string.format(string.char(0x5c) .. string.char(0x25) .. '03o' ..
+ string.char(0x5c) .. string.char(0x25) .. '03o',
+ (c / 256), (c % 256)))
+ else
+ c = c - 0x10000
+ local c_hi = c / 1024 + 0xd800
+ local c_lo = c % 1024 + 0xdc00
+ tex.sprint(
+ string.format(string.char(0x5c) .. string.char(0x25) .. '03o' ..
+ string.char(0x5c) .. string.char(0x25) .. '03o' ..
+ string.char(0x5c) .. string.char(0x25) .. '03o' ..
+ string.char(0x5c) .. string.char(0x25) .. '03o',
+ (c_hi / 256), (c_hi % 256),
+ (c_lo / 256), (c_lo % 256)))
+ end
+ end
+ end
+ }
+ \endgroup
+ \def\pdfescapestrutfsixteen#1{\directlua{UTF16oct('\luaescapestring{#1}')}}
+ % Escape PDF strings without converting
+ \begingroup
+ \directlua{
+ function PDFescstr(str)
+ for c in string.bytes(str) do
+ if c <= 0x20 or c >= 0x80 or c == 0x28 or c == 0x29 or c == 0x5c then
+ tex.sprint(
+ string.format(string.char(0x5c) .. string.char(0x25) .. '03o',
+ c))
+ else
+ tex.sprint(string.char(c))
+ end
+ end
+ end
+ }
+ \endgroup
+ \def\pdfescapestring#1{\directlua{PDFescstr('\luaescapestring{#1}')}}
+ \ifnum\luatexversion>84
+ % For LuaTeX >= 0.85
+ \def\pdfdest{\pdfextension dest}
+ \let\pdfoutput\outputmode
+ \def\pdfliteral{\pdfextension literal}
+ \def\pdfcatalog{\pdfextension catalog}
+ \def\pdftexversion{\numexpr\pdffeedback version\relax}
+ \let\pdfximage\saveimageresource
+ \let\pdfrefximage\useimageresource
+ \let\pdflastximage\lastsavedimageresourceindex
+ \def\pdfendlink{\pdfextension endlink\relax}
+ \def\pdfoutline{\pdfextension outline}
+ \def\pdfstartlink{\pdfextension startlink}
+ \def\pdffontattr{\pdfextension fontattr}
+ \def\pdfobj{\pdfextension obj}
+ \def\pdflastobj{\numexpr\pdffeedback lastobj\relax}
+ \let\pdfpagewidth\pagewidth
+ \let\pdfpageheight\pageheight
+ \edef\pdfhorigin{\pdfvariable horigin}
+ \edef\pdfvorigin{\pdfvariable vorigin}
+ \fi
+\fi
+
+% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1
+% can be set). So we test for \relax and 0 as well as being undefined.
+\ifx\pdfoutput\thisisundefined
+\else
+ \ifx\pdfoutput\relax
+ \else
+ \ifcase\pdfoutput
+ \else
+ \pdftrue
+ \fi
+ \fi
+\fi
+
+% PDF uses PostScript string constants for the names of xref targets,
+% for display in the outlines, and in other places. Thus, we have to
+% double any backslashes. Otherwise, a name like "\node" will be
+% interpreted as a newline (\n), followed by o, d, e. Not good.
+%
+% See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and
+% related messages. The final outcome is that it is up to the TeX user
+% to double the backslashes and otherwise make the string valid, so
+% that's what we do. pdftex 1.30.0 (ca.2005) introduced a primitive to
+% do this reliably, so we use it.
+
+% #1 is a control sequence in which to do the replacements,
+% which we \xdef.
+\def\txiescapepdf#1{%
+ \ifx\pdfescapestring\thisisundefined
+ % No primitive available; should we give a warning or log?
+ % Many times it won't matter.
+ \xdef#1{#1}%
+ \else
+ % The expandable \pdfescapestring primitive escapes parentheses,
+ % backslashes, and other special chars.
+ \xdef#1{\pdfescapestring{#1}}%
+ \fi
+}
+\def\txiescapepdfutfsixteen#1{%
+ \ifx\pdfescapestrutfsixteen\thisisundefined
+ % No UTF-16 converting macro available.
+ \txiescapepdf{#1}%
+ \else
+ \xdef#1{\pdfescapestrutfsixteen{#1}}%
+ \fi
+}
+
+\newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images
+with PDF output, and none of those formats could be found. (.eps cannot
+be supported due to the design of the PDF format; use regular TeX (DVI
+output) for that.)}
+
+\ifpdf
+ %
+ % Color manipulation macros using ideas from pdfcolor.tex,
+ % except using rgb instead of cmyk; the latter is said to render as a
+ % very dark gray on-screen and a very dark halftone in print, instead
+ % of actual black. The dark red here is dark enough to print on paper as
+ % nearly black, but still distinguishable for online viewing. We use
+ % black by default, though.
+ \def\rgbDarkRed{0.50 0.09 0.12}
+ \def\rgbBlack{0 0 0}
+ %
+ % rg sets the color for filling (usual text, etc.);
+ % RG sets the color for stroking (thin rules, e.g., normal _'s).
+ \def\pdfsetcolor#1{\pdfliteral{#1 rg #1 RG}}
+ %
+ % Set color, and create a mark which defines \thiscolor accordingly,
+ % so that \makeheadline knows which color to restore.
+ \def\setcolor#1{%
+ \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}%
+ \domark
+ \pdfsetcolor{#1}%
+ }
+ %
+ \def\maincolor{\rgbBlack}
+ \pdfsetcolor{\maincolor}
+ \edef\thiscolor{\maincolor}
+ \def\lastcolordefs{}
+ %
+ \def\makefootline{%
+ \baselineskip24pt
+ \line{\pdfsetcolor{\maincolor}\the\footline}%
+ }
+ %
+ \def\makeheadline{%
+ \vbox to 0pt{%
+ \vskip-22.5pt
+ \line{%
+ \vbox to8.5pt{}%
+ % Extract \thiscolor definition from the marks.
+ \getcolormarks
+ % Typeset the headline with \maincolor, then restore the color.
+ \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}%
+ }%
+ \vss
+ }%
+ \nointerlineskip
+ }
+ %
+ %
+ \pdfcatalog{/PageMode /UseOutlines}
+ %
+ % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto).
+ \def\dopdfimage#1#2#3{%
+ \def\pdfimagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}%
+ \def\pdfimageheight{#3}\setbox2 = \hbox{\ignorespaces #3}%
+ %
+ % pdftex (and the PDF format) support .pdf, .png, .jpg (among
+ % others). Let's try in that order, PDF first since if
+ % someone has a scalable image, presumably better to use that than a
+ % bitmap.
+ \let\pdfimgext=\empty
+ \begingroup
+ \openin 1 #1.pdf \ifeof 1
+ \openin 1 #1.PDF \ifeof 1
+ \openin 1 #1.png \ifeof 1
+ \openin 1 #1.jpg \ifeof 1
+ \openin 1 #1.jpeg \ifeof 1
+ \openin 1 #1.JPG \ifeof 1
+ \errhelp = \nopdfimagehelp
+ \errmessage{Could not find image file #1 for pdf}%
+ \else \gdef\pdfimgext{JPG}%
+ \fi
+ \else \gdef\pdfimgext{jpeg}%
+ \fi
+ \else \gdef\pdfimgext{jpg}%
+ \fi
+ \else \gdef\pdfimgext{png}%
+ \fi
+ \else \gdef\pdfimgext{PDF}%
+ \fi
+ \else \gdef\pdfimgext{pdf}%
+ \fi
+ \closein 1
+ \endgroup
+ %
+ % without \immediate, ancient pdftex seg faults when the same image is
+ % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.)
+ \ifnum\pdftexversion < 14
+ \immediate\pdfimage
+ \else
+ \immediate\pdfximage
+ \fi
+ \ifdim \wd0 >0pt width \pdfimagewidth \fi
+ \ifdim \wd2 >0pt height \pdfimageheight \fi
+ \ifnum\pdftexversion<13
+ #1.\pdfimgext
+ \else
+ {#1.\pdfimgext}%
+ \fi
+ \ifnum\pdftexversion < 14 \else
+ \pdfrefximage \pdflastximage
+ \fi}
+ %
+ \def\setpdfdestname#1{{%
+ % We have to set dummies so commands such as @code, and characters
+ % such as \, aren't expanded when present in a section title.
+ \indexnofonts
+ \makevalueexpandable
+ \turnoffactive
+ \iftxiuseunicodedestname
+ \ifx \declaredencoding \latone
+ % Pass through Latin-1 characters.
+ % LuaTeX with byte wise I/O converts Latin-1 characters to Unicode.
+ \else
+ \ifx \declaredencoding \utfeight
+ % Pass through Unicode characters.
+ \else
+ % Use ASCII approximations in destination names.
+ \passthroughcharsfalse
+ \fi
+ \fi
+ \else
+ % Use ASCII approximations in destination names.
+ \passthroughcharsfalse
+ \fi
+ \def\pdfdestname{#1}%
+ \txiescapepdf\pdfdestname
+ }}
+ %
+ \def\setpdfoutlinetext#1{{%
+ \indexnofonts
+ \makevalueexpandable
+ \turnoffactive
+ \ifx \declaredencoding \latone
+ % The PDF format can use an extended form of Latin-1 in bookmark
+ % strings. See Appendix D of the PDF Reference, Sixth Edition, for
+ % the "PDFDocEncoding".
+ \passthroughcharstrue
+ % Pass through Latin-1 characters.
+ % LuaTeX: Convert to Unicode
+ % pdfTeX: Use Latin-1 as PDFDocEncoding
+ \def\pdfoutlinetext{#1}%
+ \else
+ \ifx \declaredencoding \utfeight
+ \ifx\luatexversion\thisisundefined
+ % For pdfTeX with UTF-8.
+ % TODO: the PDF format can use UTF-16 in bookmark strings,
+ % but the code for this isn't done yet.
+ % Use ASCII approximations.
+ \passthroughcharsfalse
+ \def\pdfoutlinetext{#1}%
+ \else
+ % For LuaTeX with UTF-8.
+ % Pass through Unicode characters for title texts.
+ \passthroughcharstrue
+ \def\pdfoutlinetext{#1}%
+ \fi
+ \else
+ % For non-Latin-1 or non-UTF-8 encodings.
+ % Use ASCII approximations.
+ \passthroughcharsfalse
+ \def\pdfoutlinetext{#1}%
+ \fi
+ \fi
+ % LuaTeX: Convert to UTF-16
+ % pdfTeX: Use Latin-1 as PDFDocEncoding
+ \txiescapepdfutfsixteen\pdfoutlinetext
+ }}
+ %
+ \def\pdfmkdest#1{%
+ \setpdfdestname{#1}%
+ \safewhatsit{\pdfdest name{\pdfdestname} xyz}%
+ }
+ %
+ % used to mark target names; must be expandable.
+ \def\pdfmkpgn#1{#1}
+ %
+ % by default, use black for everything.
+ \def\urlcolor{\rgbBlack}
+ \def\linkcolor{\rgbBlack}
+ \def\endlink{\setcolor{\maincolor}\pdfendlink}
+ %
+ % Adding outlines to PDF; macros for calculating structure of outlines
+ % come from Petr Olsak
+ \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
+ \else \csname#1\endcsname \fi}
+ \def\advancenumber#1{\tempnum=\expnumber{#1}\relax
+ \advance\tempnum by 1
+ \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
+ %
+ % #1 is the section text, which is what will be displayed in the
+ % outline by the pdf viewer. #2 is the pdf expression for the number
+ % of subentries (or empty, for subsubsections). #3 is the node text,
+ % which might be empty if this toc entry had no corresponding node.
+ % #4 is the page number
+ %
+ \def\dopdfoutline#1#2#3#4{%
+ % Generate a link to the node text if that exists; else, use the
+ % page number. We could generate a destination for the section
+ % text in the case where a section has no node, but it doesn't
+ % seem worth the trouble, since most documents are normally structured.
+ \setpdfoutlinetext{#1}
+ \setpdfdestname{#3}
+ \ifx\pdfdestname\empty
+ \def\pdfdestname{#4}%
+ \fi
+ %
+ \pdfoutline goto name{\pdfmkpgn{\pdfdestname}}#2{\pdfoutlinetext}%
+ }
+ %
+ \def\pdfmakeoutlines{%
+ \begingroup
+ % Read toc silently, to get counts of subentries for \pdfoutline.
+ \def\partentry##1##2##3##4{}% ignore parts in the outlines
+ \def\numchapentry##1##2##3##4{%
+ \def\thischapnum{##2}%
+ \def\thissecnum{0}%
+ \def\thissubsecnum{0}%
+ }%
+ \def\numsecentry##1##2##3##4{%
+ \advancenumber{chap\thischapnum}%
+ \def\thissecnum{##2}%
+ \def\thissubsecnum{0}%
+ }%
+ \def\numsubsecentry##1##2##3##4{%
+ \advancenumber{sec\thissecnum}%
+ \def\thissubsecnum{##2}%
+ }%
+ \def\numsubsubsecentry##1##2##3##4{%
+ \advancenumber{subsec\thissubsecnum}%
+ }%
+ \def\thischapnum{0}%
+ \def\thissecnum{0}%
+ \def\thissubsecnum{0}%
+ %
+ % use \def rather than \let here because we redefine \chapentry et
+ % al. a second time, below.
+ \def\appentry{\numchapentry}%
+ \def\appsecentry{\numsecentry}%
+ \def\appsubsecentry{\numsubsecentry}%
+ \def\appsubsubsecentry{\numsubsubsecentry}%
+ \def\unnchapentry{\numchapentry}%
+ \def\unnsecentry{\numsecentry}%
+ \def\unnsubsecentry{\numsubsecentry}%
+ \def\unnsubsubsecentry{\numsubsubsecentry}%
+ \readdatafile{toc}%
+ %
+ % Read toc second time, this time actually producing the outlines.
+ % The `-' means take the \expnumber as the absolute number of
+ % subentries, which we calculated on our first read of the .toc above.
+ %
+ % We use the node names as the destinations.
+ \def\numchapentry##1##2##3##4{%
+ \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}%
+ \def\numsecentry##1##2##3##4{%
+ \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}%
+ \def\numsubsecentry##1##2##3##4{%
+ \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}%
+ \def\numsubsubsecentry##1##2##3##4{% count is always zero
+ \dopdfoutline{##1}{}{##3}{##4}}%
+ %
+ % PDF outlines are displayed using system fonts, instead of
+ % document fonts. Therefore we cannot use special characters,
+ % since the encoding is unknown. For example, the eogonek from
+ % Latin 2 (0xea) gets translated to a | character. Info from
+ % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100.
+ %
+ % TODO this right, we have to translate 8-bit characters to
+ % their "best" equivalent, based on the @documentencoding. Too
+ % much work for too little return. Just use the ASCII equivalents
+ % we use for the index sort strings.
+ %
+ \indexnofonts
+ \setupdatafile
+ % We can have normal brace characters in the PDF outlines, unlike
+ % Texinfo index files. So set that up.
+ \def\{{\lbracecharliteral}%
+ \def\}{\rbracecharliteral}%
+ \catcode`\\=\active \otherbackslash
+ \input \tocreadfilename
+ \endgroup
+ }
+ {\catcode`[=1 \catcode`]=2
+ \catcode`{=\other \catcode`}=\other
+ \gdef\lbracecharliteral[{]%
+ \gdef\rbracecharliteral[}]%
+ ]
+ %
+ \def\skipspaces#1{\def\PP{#1}\def\D{|}%
+ \ifx\PP\D\let\nextsp\relax
+ \else\let\nextsp\skipspaces
+ \addtokens{\filename}{\PP}%
+ \advance\filenamelength by 1
+ \fi
+ \nextsp}
+ \def\getfilename#1{%
+ \filenamelength=0
+ % If we don't expand the argument now, \skipspaces will get
+ % snagged on things like "@value{foo}".
+ \edef\temp{#1}%
+ \expandafter\skipspaces\temp|\relax
+ }
+ \ifnum\pdftexversion < 14
+ \let \startlink \pdfannotlink
+ \else
+ \let \startlink \pdfstartlink
+ \fi
+ % make a live url in pdf output.
+ \def\pdfurl#1{%
+ \begingroup
+ % it seems we really need yet another set of dummies; have not
+ % tried to figure out what each command should do in the context
+ % of @url. for now, just make @/ a no-op, that's the only one
+ % people have actually reported a problem with.
+ %
+ \normalturnoffactive
+ \def\@{@}%
+ \let\/=\empty
+ \makevalueexpandable
+ % do we want to go so far as to use \indexnofonts instead of just
+ % special-casing \var here?
+ \def\var##1{##1}%
+ %
+ \leavevmode\setcolor{\urlcolor}%
+ \startlink attr{/Border [0 0 0]}%
+ user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
+ \endgroup}
+ \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
+ \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
+ \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
+ \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
+ \def\maketoks{%
+ \expandafter\poptoks\the\toksA|ENDTOKS|\relax
+ \ifx\first0\adn0
+ \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
+ \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
+ \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
+ \else
+ \ifnum0=\countA\else\makelink\fi
+ \ifx\first.\let\next=\done\else
+ \let\next=\maketoks
+ \addtokens{\toksB}{\the\toksD}
+ \ifx\first,\addtokens{\toksB}{\space}\fi
+ \fi
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \next}
+ \def\makelink{\addtokens{\toksB}%
+ {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
+ \def\pdflink#1{%
+ \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}}
+ \setcolor{\linkcolor}#1\endlink}
+ \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
+\else
+ % non-pdf mode
+ \let\pdfmkdest = \gobble
+ \let\pdfurl = \gobble
+ \let\endlink = \relax
+ \let\setcolor = \gobble
+ \let\pdfsetcolor = \gobble
+ \let\pdfmakeoutlines = \relax
+\fi % \ifx\pdfoutput
+
+%
+% For XeTeX
+%
+\ifx\XeTeXrevision\thisisundefined
+\else
+ %
+ % XeTeX version check
+ %
+ \ifnum\strcmp{\the\XeTeXversion\XeTeXrevision}{0.99996}>-1
+ % TeX Live 2016 contains XeTeX 0.99996 and xdvipdfmx 20160307.
+ % It can use the `dvipdfmx:config' special (from TeX Live SVN r40941).
+ % For avoiding PDF destination name replacement, we use this special
+ % instead of xdvipdfmx's command line option `-C 0x0010'.
+ \special{dvipdfmx:config C 0x0010}
+ % XeTeX 0.99995+ comes with xdvipdfmx 20160307+.
+ % It can handle Unicode destination names for PDF.
+ \txiuseunicodedestnametrue
+ \else
+ % XeTeX < 0.99996 (TeX Live < 2016) cannot use the
+ % `dvipdfmx:config' special.
+ % So for avoiding PDF destination name replacement,
+ % xdvipdfmx's command line option `-C 0x0010' is necessary.
+ %
+ % XeTeX < 0.99995 can not handle Unicode destination names for PDF
+ % because xdvipdfmx 20150315 has a UTF-16 conversion issue.
+ % It is fixed by xdvipdfmx 20160106 (TeX Live SVN r39753).
+ \txiuseunicodedestnamefalse
+ \fi
+ %
+ % Color support
+ %
+ \def\rgbDarkRed{0.50 0.09 0.12}
+ \def\rgbBlack{0 0 0}
+ %
+ \def\pdfsetcolor#1{\special{pdf:scolor [#1]}}
+ %
+ % Set color, and create a mark which defines \thiscolor accordingly,
+ % so that \makeheadline knows which color to restore.
+ \def\setcolor#1{%
+ \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}%
+ \domark
+ \pdfsetcolor{#1}%
+ }
+ %
+ \def\maincolor{\rgbBlack}
+ \pdfsetcolor{\maincolor}
+ \edef\thiscolor{\maincolor}
+ \def\lastcolordefs{}
+ %
+ \def\makefootline{%
+ \baselineskip24pt
+ \line{\pdfsetcolor{\maincolor}\the\footline}%
+ }
+ %
+ \def\makeheadline{%
+ \vbox to 0pt{%
+ \vskip-22.5pt
+ \line{%
+ \vbox to8.5pt{}%
+ % Extract \thiscolor definition from the marks.
+ \getcolormarks
+ % Typeset the headline with \maincolor, then restore the color.
+ \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}%
+ }%
+ \vss
+ }%
+ \nointerlineskip
+ }
+ %
+ % PDF outline support
+ %
+ % Emulate pdfTeX primitive
+ \def\pdfdest name#1 xyz{%
+ \special{pdf:dest (#1) [@thispage /XYZ @xpos @ypos null]}%
+ }
+ %
+ \def\setpdfdestname#1{{%
+ % We have to set dummies so commands such as @code, and characters
+ % such as \, aren't expanded when present in a section title.
+ \indexnofonts
+ \makevalueexpandable
+ \turnoffactive
+ \iftxiuseunicodedestname
+ % Pass through Unicode characters.
+ \else
+ % Use ASCII approximations in destination names.
+ \passthroughcharsfalse
+ \fi
+ \def\pdfdestname{#1}%
+ \txiescapepdf\pdfdestname
+ }}
+ %
+ \def\setpdfoutlinetext#1{{%
+ \turnoffactive
+ % Always use Unicode characters in title texts.
+ \def\pdfoutlinetext{#1}%
+ % For XeTeX, xdvipdfmx converts to UTF-16.
+ % So we do not convert.
+ \txiescapepdf\pdfoutlinetext
+ }}
+ %
+ \def\pdfmkdest#1{%
+ \setpdfdestname{#1}%
+ \safewhatsit{\pdfdest name{\pdfdestname} xyz}%
+ }
+ %
+ % by default, use black for everything.
+ \def\urlcolor{\rgbBlack}
+ \def\linkcolor{\rgbBlack}
+ \def\endlink{\setcolor{\maincolor}\pdfendlink}
+ %
+ \def\dopdfoutline#1#2#3#4{%
+ \setpdfoutlinetext{#1}
+ \setpdfdestname{#3}
+ \ifx\pdfdestname\empty
+ \def\pdfdestname{#4}%
+ \fi
+ %
+ \special{pdf:out [-] #2 << /Title (\pdfoutlinetext) /A
+ << /S /GoTo /D (\pdfdestname) >> >> }%
+ }
+ %
+ \def\pdfmakeoutlines{%
+ \begingroup
+ %
+ % For XeTeX, counts of subentries are not necessary.
+ % Therefore, we read toc only once.
+ %
+ % We use node names as destinations.
+ \def\partentry##1##2##3##4{}% ignore parts in the outlines
+ \def\numchapentry##1##2##3##4{%
+ \dopdfoutline{##1}{1}{##3}{##4}}%
+ \def\numsecentry##1##2##3##4{%
+ \dopdfoutline{##1}{2}{##3}{##4}}%
+ \def\numsubsecentry##1##2##3##4{%
+ \dopdfoutline{##1}{3}{##3}{##4}}%
+ \def\numsubsubsecentry##1##2##3##4{%
+ \dopdfoutline{##1}{4}{##3}{##4}}%
+ %
+ \let\appentry\numchapentry%
+ \let\appsecentry\numsecentry%
+ \let\appsubsecentry\numsubsecentry%
+ \let\appsubsubsecentry\numsubsubsecentry%
+ \let\unnchapentry\numchapentry%
+ \let\unnsecentry\numsecentry%
+ \let\unnsubsecentry\numsubsecentry%
+ \let\unnsubsubsecentry\numsubsubsecentry%
+ %
+ % For XeTeX, xdvipdfmx converts strings to UTF-16.
+ % Therefore, the encoding and the language may not be considered.
+ %
+ \indexnofonts
+ \setupdatafile
+ % We can have normal brace characters in the PDF outlines, unlike
+ % Texinfo index files. So set that up.
+ \def\{{\lbracecharliteral}%
+ \def\}{\rbracecharliteral}%
+ \catcode`\\=\active \otherbackslash
+ \input \tocreadfilename
+ \endgroup
+ }
+ {\catcode`[=1 \catcode`]=2
+ \catcode`{=\other \catcode`}=\other
+ \gdef\lbracecharliteral[{]%
+ \gdef\rbracecharliteral[}]%
+ ]
+
+ \special{pdf:docview << /PageMode /UseOutlines >> }
+ % ``\special{pdf:tounicode ...}'' is not necessary
+ % because xdvipdfmx converts strings from UTF-8 to UTF-16 without it.
+ % However, due to a UTF-16 conversion issue of xdvipdfmx 20150315,
+ % ``\special{pdf:dest ...}'' cannot handle non-ASCII strings.
+ % It is fixed by xdvipdfmx 20160106 (TeX Live SVN r39753).
+%
+ \def\skipspaces#1{\def\PP{#1}\def\D{|}%
+ \ifx\PP\D\let\nextsp\relax
+ \else\let\nextsp\skipspaces
+ \addtokens{\filename}{\PP}%
+ \advance\filenamelength by 1
+ \fi
+ \nextsp}
+ \def\getfilename#1{%
+ \filenamelength=0
+ % If we don't expand the argument now, \skipspaces will get
+ % snagged on things like "@value{foo}".
+ \edef\temp{#1}%
+ \expandafter\skipspaces\temp|\relax
+ }
+ % make a live url in pdf output.
+ \def\pdfurl#1{%
+ \begingroup
+ % it seems we really need yet another set of dummies; have not
+ % tried to figure out what each command should do in the context
+ % of @url. for now, just make @/ a no-op, that's the only one
+ % people have actually reported a problem with.
+ %
+ \normalturnoffactive
+ \def\@{@}%
+ \let\/=\empty
+ \makevalueexpandable
+ % do we want to go so far as to use \indexnofonts instead of just
+ % special-casing \var here?
+ \def\var##1{##1}%
+ %
+ \leavevmode\setcolor{\urlcolor}%
+ \special{pdf:bann << /Border [0 0 0]
+ /Subtype /Link /A << /S /URI /URI (#1) >> >>}%
+ \endgroup}
+ \def\endlink{\setcolor{\maincolor}\special{pdf:eann}}
+ \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
+ \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
+ \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
+ \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
+ \def\maketoks{%
+ \expandafter\poptoks\the\toksA|ENDTOKS|\relax
+ \ifx\first0\adn0
+ \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
+ \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
+ \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
+ \else
+ \ifnum0=\countA\else\makelink\fi
+ \ifx\first.\let\next=\done\else
+ \let\next=\maketoks
+ \addtokens{\toksB}{\the\toksD}
+ \ifx\first,\addtokens{\toksB}{\space}\fi
+ \fi
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \next}
+ \def\makelink{\addtokens{\toksB}%
+ {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
+ \def\pdflink#1{%
+ \special{pdf:bann << /Border [0 0 0]
+ /Type /Annot /Subtype /Link /A << /S /GoTo /D (#1) >> >>}%
+ \setcolor{\linkcolor}#1\endlink}
+ \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
+%
+ %
+ % @image support
+ %
+ % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto).
+ \def\doxeteximage#1#2#3{%
+ \def\xeteximagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}%
+ \def\xeteximageheight{#3}\setbox2 = \hbox{\ignorespaces #3}%
+ %
+ % XeTeX (and the PDF format) supports .pdf, .png, .jpg (among
+ % others). Let's try in that order, PDF first since if
+ % someone has a scalable image, presumably better to use that than a
+ % bitmap.
+ \let\xeteximgext=\empty
+ \begingroup
+ \openin 1 #1.pdf \ifeof 1
+ \openin 1 #1.PDF \ifeof 1
+ \openin 1 #1.png \ifeof 1
+ \openin 1 #1.jpg \ifeof 1
+ \openin 1 #1.jpeg \ifeof 1
+ \openin 1 #1.JPG \ifeof 1
+ \errmessage{Could not find image file #1 for XeTeX}%
+ \else \gdef\xeteximgext{JPG}%
+ \fi
+ \else \gdef\xeteximgext{jpeg}%
+ \fi
+ \else \gdef\xeteximgext{jpg}%
+ \fi
+ \else \gdef\xeteximgext{png}%
+ \fi
+ \else \gdef\xeteximgext{PDF}%
+ \fi
+ \else \gdef\xeteximgext{pdf}%
+ \fi
+ \closein 1
+ \endgroup
+ %
+ \def\xetexpdfext{pdf}%
+ \ifx\xeteximgext\xetexpdfext
+ \XeTeXpdffile "#1".\xeteximgext ""
+ \else
+ \def\xetexpdfext{PDF}%
+ \ifx\xeteximgext\xetexpdfext
+ \XeTeXpdffile "#1".\xeteximgext ""
+ \else
+ \XeTeXpicfile "#1".\xeteximgext ""
+ \fi
+ \fi
+ \ifdim \wd0 >0pt width \xeteximagewidth \fi
+ \ifdim \wd2 >0pt height \xeteximageheight \fi \relax
+ }
+\fi
+
+
+%
+\message{fonts,}
+
+% Set the baselineskip to #1, and the lineskip and strut size
+% correspondingly. There is no deep meaning behind these magic numbers
+% used as factors; they just match (closely enough) what Knuth defined.
+%
+\def\lineskipfactor{.08333}
+\def\strutheightpercent{.70833}
+\def\strutdepthpercent {.29167}
+%
+% can get a sort of poor man's double spacing by redefining this.
+\def\baselinefactor{1}
+%
+\newdimen\textleading
+\def\setleading#1{%
+ \dimen0 = #1\relax
+ \normalbaselineskip = \baselinefactor\dimen0
+ \normallineskip = \lineskipfactor\normalbaselineskip
+ \normalbaselines
+ \setbox\strutbox =\hbox{%
+ \vrule width0pt height\strutheightpercent\baselineskip
+ depth \strutdepthpercent \baselineskip
+ }%
+}
+
+% PDF CMaps. See also LaTeX's t1.cmap.
+%
+% do nothing with this by default.
+\expandafter\let\csname cmapOT1\endcsname\gobble
+\expandafter\let\csname cmapOT1IT\endcsname\gobble
+\expandafter\let\csname cmapOT1TT\endcsname\gobble
+
+% if we are producing pdf, and we have \pdffontattr, then define cmaps.
+% (\pdffontattr was introduced many years ago, but people still run
+% older pdftex's; it's easy to conditionalize, so we do.)
+\ifpdf \ifx\pdffontattr\thisisundefined \else
+ \begingroup
+ \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
+ \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
+%%DocumentNeededResources: ProcSet (CIDInit)
+%%IncludeResource: ProcSet (CIDInit)
+%%BeginResource: CMap (TeX-OT1-0)
+%%Title: (TeX-OT1-0 TeX OT1 0)
+%%Version: 1.000
+%%EndComments
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (TeX)
+/Ordering (OT1)
+/Supplement 0
+>> def
+/CMapName /TeX-OT1-0 def
+/CMapType 2 def
+1 begincodespacerange
+<00> <7F>
+endcodespacerange
+8 beginbfrange
+<00> <01> <0393>
+<09> <0A> <03A8>
+<23> <26> <0023>
+<28> <3B> <0028>
+<3F> <5B> <003F>
+<5D> <5E> <005D>
+<61> <7A> <0061>
+<7B> <7C> <2013>
+endbfrange
+40 beginbfchar
+<02> <0398>
+<03> <039B>
+<04> <039E>
+<05> <03A0>
+<06> <03A3>
+<07> <03D2>
+<08> <03A6>
+<0B> <00660066>
+<0C> <00660069>
+<0D> <0066006C>
+<0E> <006600660069>
+<0F> <00660066006C>
+<10> <0131>
+<11> <0237>
+<12> <0060>
+<13> <00B4>
+<14> <02C7>
+<15> <02D8>
+<16> <00AF>
+<17> <02DA>
+<18> <00B8>
+<19> <00DF>
+<1A> <00E6>
+<1B> <0153>
+<1C> <00F8>
+<1D> <00C6>
+<1E> <0152>
+<1F> <00D8>
+<21> <0021>
+<22> <201D>
+<27> <2019>
+<3C> <00A1>
+<3D> <003D>
+<3E> <00BF>
+<5C> <201C>
+<5F> <02D9>
+<60> <2018>
+<7D> <02DD>
+<7E> <007E>
+<7F> <00A8>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+%%EndResource
+%%EOF
+ }\endgroup
+ \expandafter\edef\csname cmapOT1\endcsname#1{%
+ \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
+ }%
+%
+% \cmapOT1IT
+ \begingroup
+ \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
+ \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
+%%DocumentNeededResources: ProcSet (CIDInit)
+%%IncludeResource: ProcSet (CIDInit)
+%%BeginResource: CMap (TeX-OT1IT-0)
+%%Title: (TeX-OT1IT-0 TeX OT1IT 0)
+%%Version: 1.000
+%%EndComments
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (TeX)
+/Ordering (OT1IT)
+/Supplement 0
+>> def
+/CMapName /TeX-OT1IT-0 def
+/CMapType 2 def
+1 begincodespacerange
+<00> <7F>
+endcodespacerange
+8 beginbfrange
+<00> <01> <0393>
+<09> <0A> <03A8>
+<25> <26> <0025>
+<28> <3B> <0028>
+<3F> <5B> <003F>
+<5D> <5E> <005D>
+<61> <7A> <0061>
+<7B> <7C> <2013>
+endbfrange
+42 beginbfchar
+<02> <0398>
+<03> <039B>
+<04> <039E>
+<05> <03A0>
+<06> <03A3>
+<07> <03D2>
+<08> <03A6>
+<0B> <00660066>
+<0C> <00660069>
+<0D> <0066006C>
+<0E> <006600660069>
+<0F> <00660066006C>
+<10> <0131>
+<11> <0237>
+<12> <0060>
+<13> <00B4>
+<14> <02C7>
+<15> <02D8>
+<16> <00AF>
+<17> <02DA>
+<18> <00B8>
+<19> <00DF>
+<1A> <00E6>
+<1B> <0153>
+<1C> <00F8>
+<1D> <00C6>
+<1E> <0152>
+<1F> <00D8>
+<21> <0021>
+<22> <201D>
+<23> <0023>
+<24> <00A3>
+<27> <2019>
+<3C> <00A1>
+<3D> <003D>
+<3E> <00BF>
+<5C> <201C>
+<5F> <02D9>
+<60> <2018>
+<7D> <02DD>
+<7E> <007E>
+<7F> <00A8>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+%%EndResource
+%%EOF
+ }\endgroup
+ \expandafter\edef\csname cmapOT1IT\endcsname#1{%
+ \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
+ }%
+%
+% \cmapOT1TT
+ \begingroup
+ \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
+ \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
+%%DocumentNeededResources: ProcSet (CIDInit)
+%%IncludeResource: ProcSet (CIDInit)
+%%BeginResource: CMap (TeX-OT1TT-0)
+%%Title: (TeX-OT1TT-0 TeX OT1TT 0)
+%%Version: 1.000
+%%EndComments
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (TeX)
+/Ordering (OT1TT)
+/Supplement 0
+>> def
+/CMapName /TeX-OT1TT-0 def
+/CMapType 2 def
+1 begincodespacerange
+<00> <7F>
+endcodespacerange
+5 beginbfrange
+<00> <01> <0393>
+<09> <0A> <03A8>
+<21> <26> <0021>
+<28> <5F> <0028>
+<61> <7E> <0061>
+endbfrange
+32 beginbfchar
+<02> <0398>
+<03> <039B>
+<04> <039E>
+<05> <03A0>
+<06> <03A3>
+<07> <03D2>
+<08> <03A6>
+<0B> <2191>
+<0C> <2193>
+<0D> <0027>
+<0E> <00A1>
+<0F> <00BF>
+<10> <0131>
+<11> <0237>
+<12> <0060>
+<13> <00B4>
+<14> <02C7>
+<15> <02D8>
+<16> <00AF>
+<17> <02DA>
+<18> <00B8>
+<19> <00DF>
+<1A> <00E6>
+<1B> <0153>
+<1C> <00F8>
+<1D> <00C6>
+<1E> <0152>
+<1F> <00D8>
+<20> <2423>
+<27> <2019>
+<60> <2018>
+<7F> <00A8>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+%%EndResource
+%%EOF
+ }\endgroup
+ \expandafter\edef\csname cmapOT1TT\endcsname#1{%
+ \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
+ }%
+\fi\fi
+
+
+% Set the font macro #1 to the font named \fontprefix#2.
+% #3 is the font's design size, #4 is a scale factor, #5 is the CMap
+% encoding (only OT1, OT1IT and OT1TT are allowed, or empty to omit).
+% Example:
+% #1 = \textrm
+% #2 = \rmshape
+% #3 = 10
+% #4 = \mainmagstep
+% #5 = OT1
+%
+\def\setfont#1#2#3#4#5{%
+ \font#1=\fontprefix#2#3 scaled #4
+ \csname cmap#5\endcsname#1%
+}
+% This is what gets called when #5 of \setfont is empty.
+\let\cmap\gobble
+%
+% (end of cmaps)
+
+% Use cm as the default font prefix.
+% To specify the font prefix, you must define \fontprefix
+% before you read in texinfo.tex.
+\ifx\fontprefix\thisisundefined
+\def\fontprefix{cm}
+\fi
+% Support font families that don't use the same naming scheme as CM.
+\def\rmshape{r}
+\def\rmbshape{bx} % where the normal face is bold
+\def\bfshape{b}
+\def\bxshape{bx}
+\def\ttshape{tt}
+\def\ttbshape{tt}
+\def\ttslshape{sltt}
+\def\itshape{ti}
+\def\itbshape{bxti}
+\def\slshape{sl}
+\def\slbshape{bxsl}
+\def\sfshape{ss}
+\def\sfbshape{ss}
+\def\scshape{csc}
+\def\scbshape{csc}
+
+% Definitions for a main text size of 11pt. (The default in Texinfo.)
+%
+\def\definetextfontsizexi{%
+% Text fonts (11.2pt, magstep1).
+\def\textnominalsize{11pt}
+\edef\mainmagstep{\magstephalf}
+\setfont\textrm\rmshape{10}{\mainmagstep}{OT1}
+\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT}
+\setfont\textbf\bfshape{10}{\mainmagstep}{OT1}
+\setfont\textit\itshape{10}{\mainmagstep}{OT1IT}
+\setfont\textsl\slshape{10}{\mainmagstep}{OT1}
+\setfont\textsf\sfshape{10}{\mainmagstep}{OT1}
+\setfont\textsc\scshape{10}{\mainmagstep}{OT1}
+\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}
+\font\texti=cmmi10 scaled \mainmagstep
+\font\textsy=cmsy10 scaled \mainmagstep
+\def\textecsize{1095}
+
+% A few fonts for @defun names and args.
+\setfont\defbf\bfshape{10}{\magstep1}{OT1}
+\setfont\deftt\ttshape{10}{\magstep1}{OT1TT}
+\setfont\defsl\slshape{10}{\magstep1}{OT1TT}
+\setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT}
+\def\df{\let\ttfont=\deftt \let\bffont = \defbf
+\let\ttslfont=\defttsl \let\slfont=\defsl \bf}
+
+% Fonts for indices, footnotes, small examples (9pt).
+\def\smallnominalsize{9pt}
+\setfont\smallrm\rmshape{9}{1000}{OT1}
+\setfont\smalltt\ttshape{9}{1000}{OT1TT}
+\setfont\smallbf\bfshape{10}{900}{OT1}
+\setfont\smallit\itshape{9}{1000}{OT1IT}
+\setfont\smallsl\slshape{9}{1000}{OT1}
+\setfont\smallsf\sfshape{9}{1000}{OT1}
+\setfont\smallsc\scshape{10}{900}{OT1}
+\setfont\smallttsl\ttslshape{10}{900}{OT1TT}
+\font\smalli=cmmi9
+\font\smallsy=cmsy9
+\def\smallecsize{0900}
+
+% Fonts for small examples (8pt).
+\def\smallernominalsize{8pt}
+\setfont\smallerrm\rmshape{8}{1000}{OT1}
+\setfont\smallertt\ttshape{8}{1000}{OT1TT}
+\setfont\smallerbf\bfshape{10}{800}{OT1}
+\setfont\smallerit\itshape{8}{1000}{OT1IT}
+\setfont\smallersl\slshape{8}{1000}{OT1}
+\setfont\smallersf\sfshape{8}{1000}{OT1}
+\setfont\smallersc\scshape{10}{800}{OT1}
+\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}
+\font\smalleri=cmmi8
+\font\smallersy=cmsy8
+\def\smallerecsize{0800}
+
+% Fonts for title page (20.4pt):
+\def\titlenominalsize{20pt}
+\setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
+\setfont\titleit\itbshape{10}{\magstep4}{OT1IT}
+\setfont\titlesl\slbshape{10}{\magstep4}{OT1}
+\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT}
+\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT}
+\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}
+\let\titlebf=\titlerm
+\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
+\font\titlei=cmmi12 scaled \magstep3
+\font\titlesy=cmsy10 scaled \magstep4
+\def\titleecsize{2074}
+
+% Chapter (and unnumbered) fonts (17.28pt).
+\def\chapnominalsize{17pt}
+\setfont\chaprm\rmbshape{12}{\magstep2}{OT1}
+\setfont\chapit\itbshape{10}{\magstep3}{OT1IT}
+\setfont\chapsl\slbshape{10}{\magstep3}{OT1}
+\setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT}
+\setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT}
+\setfont\chapsf\sfbshape{17}{1000}{OT1}
+\let\chapbf=\chaprm
+\setfont\chapsc\scbshape{10}{\magstep3}{OT1}
+\font\chapi=cmmi12 scaled \magstep2
+\font\chapsy=cmsy10 scaled \magstep3
+\def\chapecsize{1728}
+
+% Section fonts (14.4pt).
+\def\secnominalsize{14pt}
+\setfont\secrm\rmbshape{12}{\magstep1}{OT1}
+\setfont\secrmnotbold\rmshape{12}{\magstep1}{OT1}
+\setfont\secit\itbshape{10}{\magstep2}{OT1IT}
+\setfont\secsl\slbshape{10}{\magstep2}{OT1}
+\setfont\sectt\ttbshape{12}{\magstep1}{OT1TT}
+\setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT}
+\setfont\secsf\sfbshape{12}{\magstep1}{OT1}
+\let\secbf\secrm
+\setfont\secsc\scbshape{10}{\magstep2}{OT1}
+\font\seci=cmmi12 scaled \magstep1
+\font\secsy=cmsy10 scaled \magstep2
+\def\sececsize{1440}
+
+% Subsection fonts (13.15pt).
+\def\ssecnominalsize{13pt}
+\setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1}
+\setfont\ssecit\itbshape{10}{1315}{OT1IT}
+\setfont\ssecsl\slbshape{10}{1315}{OT1}
+\setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT}
+\setfont\ssecttsl\ttslshape{10}{1315}{OT1TT}
+\setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1}
+\let\ssecbf\ssecrm
+\setfont\ssecsc\scbshape{10}{1315}{OT1}
+\font\sseci=cmmi12 scaled \magstephalf
+\font\ssecsy=cmsy10 scaled 1315
+\def\ssececsize{1200}
+
+% Reduced fonts for @acronym in text (10pt).
+\def\reducednominalsize{10pt}
+\setfont\reducedrm\rmshape{10}{1000}{OT1}
+\setfont\reducedtt\ttshape{10}{1000}{OT1TT}
+\setfont\reducedbf\bfshape{10}{1000}{OT1}
+\setfont\reducedit\itshape{10}{1000}{OT1IT}
+\setfont\reducedsl\slshape{10}{1000}{OT1}
+\setfont\reducedsf\sfshape{10}{1000}{OT1}
+\setfont\reducedsc\scshape{10}{1000}{OT1}
+\setfont\reducedttsl\ttslshape{10}{1000}{OT1TT}
+\font\reducedi=cmmi10
+\font\reducedsy=cmsy10
+\def\reducedecsize{1000}
+
+\textleading = 13.2pt % line spacing for 11pt CM
+\textfonts % reset the current fonts
+\rm
+} % end of 11pt text font size definitions, \definetextfontsizexi
+
+
+% Definitions to make the main text be 10pt Computer Modern, with
+% section, chapter, etc., sizes following suit. This is for the GNU
+% Press printing of the Emacs 22 manual. Maybe other manuals in the
+% future. Used with @smallbook, which sets the leading to 12pt.
+%
+\def\definetextfontsizex{%
+% Text fonts (10pt).
+\def\textnominalsize{10pt}
+\edef\mainmagstep{1000}
+\setfont\textrm\rmshape{10}{\mainmagstep}{OT1}
+\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT}
+\setfont\textbf\bfshape{10}{\mainmagstep}{OT1}
+\setfont\textit\itshape{10}{\mainmagstep}{OT1IT}
+\setfont\textsl\slshape{10}{\mainmagstep}{OT1}
+\setfont\textsf\sfshape{10}{\mainmagstep}{OT1}
+\setfont\textsc\scshape{10}{\mainmagstep}{OT1}
+\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}
+\font\texti=cmmi10 scaled \mainmagstep
+\font\textsy=cmsy10 scaled \mainmagstep
+\def\textecsize{1000}
+
+% A few fonts for @defun names and args.
+\setfont\defbf\bfshape{10}{\magstephalf}{OT1}
+\setfont\deftt\ttshape{10}{\magstephalf}{OT1TT}
+\setfont\defsl\slshape{10}{\magstephalf}{OT1TT}
+\setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT}
+\def\df{\let\ttfont=\deftt \let\bffont = \defbf
+\let\slfont=\defsl \let\ttslfont=\defttsl \bf}
+
+% Fonts for indices, footnotes, small examples (9pt).
+\def\smallnominalsize{9pt}
+\setfont\smallrm\rmshape{9}{1000}{OT1}
+\setfont\smalltt\ttshape{9}{1000}{OT1TT}
+\setfont\smallbf\bfshape{10}{900}{OT1}
+\setfont\smallit\itshape{9}{1000}{OT1IT}
+\setfont\smallsl\slshape{9}{1000}{OT1}
+\setfont\smallsf\sfshape{9}{1000}{OT1}
+\setfont\smallsc\scshape{10}{900}{OT1}
+\setfont\smallttsl\ttslshape{10}{900}{OT1TT}
+\font\smalli=cmmi9
+\font\smallsy=cmsy9
+\def\smallecsize{0900}
+
+% Fonts for small examples (8pt).
+\def\smallernominalsize{8pt}
+\setfont\smallerrm\rmshape{8}{1000}{OT1}
+\setfont\smallertt\ttshape{8}{1000}{OT1TT}
+\setfont\smallerbf\bfshape{10}{800}{OT1}
+\setfont\smallerit\itshape{8}{1000}{OT1IT}
+\setfont\smallersl\slshape{8}{1000}{OT1}
+\setfont\smallersf\sfshape{8}{1000}{OT1}
+\setfont\smallersc\scshape{10}{800}{OT1}
+\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}
+\font\smalleri=cmmi8
+\font\smallersy=cmsy8
+\def\smallerecsize{0800}
+
+% Fonts for title page (20.4pt):
+\def\titlenominalsize{20pt}
+\setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
+\setfont\titleit\itbshape{10}{\magstep4}{OT1IT}
+\setfont\titlesl\slbshape{10}{\magstep4}{OT1}
+\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT}
+\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT}
+\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}
+\let\titlebf=\titlerm
+\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
+\font\titlei=cmmi12 scaled \magstep3
+\font\titlesy=cmsy10 scaled \magstep4
+\def\titleecsize{2074}
+
+% Chapter fonts (14.4pt).
+\def\chapnominalsize{14pt}
+\setfont\chaprm\rmbshape{12}{\magstep1}{OT1}
+\setfont\chapit\itbshape{10}{\magstep2}{OT1IT}
+\setfont\chapsl\slbshape{10}{\magstep2}{OT1}
+\setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT}
+\setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT}
+\setfont\chapsf\sfbshape{12}{\magstep1}{OT1}
+\let\chapbf\chaprm
+\setfont\chapsc\scbshape{10}{\magstep2}{OT1}
+\font\chapi=cmmi12 scaled \magstep1
+\font\chapsy=cmsy10 scaled \magstep2
+\def\chapecsize{1440}
+
+% Section fonts (12pt).
+\def\secnominalsize{12pt}
+\setfont\secrm\rmbshape{12}{1000}{OT1}
+\setfont\secit\itbshape{10}{\magstep1}{OT1IT}
+\setfont\secsl\slbshape{10}{\magstep1}{OT1}
+\setfont\sectt\ttbshape{12}{1000}{OT1TT}
+\setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT}
+\setfont\secsf\sfbshape{12}{1000}{OT1}
+\let\secbf\secrm
+\setfont\secsc\scbshape{10}{\magstep1}{OT1}
+\font\seci=cmmi12
+\font\secsy=cmsy10 scaled \magstep1
+\def\sececsize{1200}
+
+% Subsection fonts (10pt).
+\def\ssecnominalsize{10pt}
+\setfont\ssecrm\rmbshape{10}{1000}{OT1}
+\setfont\ssecit\itbshape{10}{1000}{OT1IT}
+\setfont\ssecsl\slbshape{10}{1000}{OT1}
+\setfont\ssectt\ttbshape{10}{1000}{OT1TT}
+\setfont\ssecttsl\ttslshape{10}{1000}{OT1TT}
+\setfont\ssecsf\sfbshape{10}{1000}{OT1}
+\let\ssecbf\ssecrm
+\setfont\ssecsc\scbshape{10}{1000}{OT1}
+\font\sseci=cmmi10
+\font\ssecsy=cmsy10
+\def\ssececsize{1000}
+
+% Reduced fonts for @acronym in text (9pt).
+\def\reducednominalsize{9pt}
+\setfont\reducedrm\rmshape{9}{1000}{OT1}
+\setfont\reducedtt\ttshape{9}{1000}{OT1TT}
+\setfont\reducedbf\bfshape{10}{900}{OT1}
+\setfont\reducedit\itshape{9}{1000}{OT1IT}
+\setfont\reducedsl\slshape{9}{1000}{OT1}
+\setfont\reducedsf\sfshape{9}{1000}{OT1}
+\setfont\reducedsc\scshape{10}{900}{OT1}
+\setfont\reducedttsl\ttslshape{10}{900}{OT1TT}
+\font\reducedi=cmmi9
+\font\reducedsy=cmsy9
+\def\reducedecsize{0900}
+
+\divide\parskip by 2 % reduce space between paragraphs
+\textleading = 12pt % line spacing for 10pt CM
+\textfonts % reset the current fonts
+\rm
+} % end of 10pt text font size definitions, \definetextfontsizex
+
+% Fonts for short table of contents.
+\setfont\shortcontrm\rmshape{12}{1000}{OT1}
+\setfont\shortcontbf\bfshape{10}{\magstep1}{OT1} % no cmb12
+\setfont\shortcontsl\slshape{12}{1000}{OT1}
+\setfont\shortconttt\ttshape{12}{1000}{OT1TT}
+
+
+% We provide the user-level command
+% @fonttextsize 10
+% (or 11) to redefine the text font size. pt is assumed.
+%
+\def\xiword{11}
+\def\xword{10}
+\def\xwordpt{10pt}
+%
+\parseargdef\fonttextsize{%
+ \def\textsizearg{#1}%
+ %\wlog{doing @fonttextsize \textsizearg}%
+ %
+ % Set \globaldefs so that documents can use this inside @tex, since
+ % makeinfo 4.8 does not support it, but we need it nonetheless.
+ %
+ \begingroup \globaldefs=1
+ \ifx\textsizearg\xword \definetextfontsizex
+ \else \ifx\textsizearg\xiword \definetextfontsizexi
+ \else
+ \errhelp=\EMsimple
+ \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'}
+ \fi\fi
+ \endgroup
+}
+
+%
+% Change the current font style to #1, remembering it in \curfontstyle.
+% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in
+% italics, not bold italics.
+%
+\def\setfontstyle#1{%
+ \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd.
+ \csname #1font\endcsname % change the current font
+}
+
+\def\rm{\fam=0 \setfontstyle{rm}}
+\def\it{\fam=\itfam \setfontstyle{it}}
+\def\sl{\fam=\slfam \setfontstyle{sl}}
+\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf}
+\def\tt{\fam=\ttfam \setfontstyle{tt}}
+
+% Texinfo sort of supports the sans serif font style, which plain TeX does not.
+% So we set up a \sf.
+\newfam\sffam
+\def\sf{\fam=\sffam \setfontstyle{sf}}
+
+% We don't need math for this font style.
+\def\ttsl{\setfontstyle{ttsl}}
+
+
+% In order for the font changes to affect most math symbols and letters,
+% we have to define the \textfont of the standard families. We don't
+% bother to reset \scriptfont and \scriptscriptfont; awaiting user need.
+%
+\def\resetmathfonts{%
+ \textfont0=\rmfont \textfont1=\ifont \textfont2=\syfont
+ \textfont\itfam=\itfont \textfont\slfam=\slfont \textfont\bffam=\bffont
+ \textfont\ttfam=\ttfont \textfont\sffam=\sffont
+}
+
+%
+
+% The font-changing commands (all called \...fonts) redefine the meanings
+% of \STYLEfont, instead of just \STYLE. We do this because \STYLE needs
+% to also set the current \fam for math mode. Our \STYLE (e.g., \rm)
+% commands hardwire \STYLEfont to set the current font.
+%
+% Each font-changing command also sets the names \lsize (one size lower)
+% and \lllsize (three sizes lower). These relative commands are used
+% in, e.g., the LaTeX logo and acronyms.
+%
+% This all needs generalizing, badly.
+%
+
+\def\assignfonts#1{%
+ \expandafter\let\expandafter\rmfont\csname #1rm\endcsname
+ \expandafter\let\expandafter\itfont\csname #1it\endcsname
+ \expandafter\let\expandafter\slfont\csname #1sl\endcsname
+ \expandafter\let\expandafter\bffont\csname #1bf\endcsname
+ \expandafter\let\expandafter\ttfont\csname #1tt\endcsname
+ \expandafter\let\expandafter\smallcaps\csname #1sc\endcsname
+ \expandafter\let\expandafter\sffont \csname #1sf\endcsname
+ \expandafter\let\expandafter\ifont \csname #1i\endcsname
+ \expandafter\let\expandafter\syfont \csname #1sy\endcsname
+ \expandafter\let\expandafter\ttslfont\csname #1ttsl\endcsname
+}
+
+\newif\ifrmisbold
+
+% Select smaller font size with the current style. Used to change font size
+% in, e.g., the LaTeX logo and acronyms. If we are using bold fonts for
+% normal roman text, also use bold fonts for roman text in the smaller size.
+\def\switchtolllsize{%
+ \expandafter\assignfonts\expandafter{\lllsize}%
+ \ifrmisbold
+ \let\rmfont\bffont
+ \fi
+ \csname\curfontstyle\endcsname
+}%
+
+\def\switchtolsize{%
+ \expandafter\assignfonts\expandafter{\lsize}%
+ \ifrmisbold
+ \let\rmfont\bffont
+ \fi
+ \csname\curfontstyle\endcsname
+}%
+
+\def\definefontsetatsize#1#2#3#4#5{%
+\expandafter\def\csname #1fonts\endcsname{%
+ \def\curfontsize{#1}%
+ \def\lsize{#2}\def\lllsize{#3}%
+ \csname rmisbold#5\endcsname
+ \assignfonts{#1}%
+ \resetmathfonts
+ \setleading{#4}%
+}}
+
+\definefontsetatsize{text} {reduced}{smaller}{\textleading}{false}
+\definefontsetatsize{title} {chap} {subsec} {27pt} {true}
+\definefontsetatsize{chap} {sec} {text} {19pt} {true}
+\definefontsetatsize{sec} {subsec} {reduced}{17pt} {true}
+\definefontsetatsize{ssec} {text} {small} {15pt} {true}
+\definefontsetatsize{reduced}{small} {smaller}{10.5pt}{false}
+\definefontsetatsize{small} {smaller}{smaller}{10.5pt}{false}
+\definefontsetatsize{smaller}{smaller}{smaller}{9.5pt} {false}
+
+\def\titlefont#1{{\titlefonts\rm #1}}
+\let\subsecfonts = \ssecfonts
+\let\subsubsecfonts = \ssecfonts
+
+% Define these just so they can be easily changed for other fonts.
+\def\angleleft{$\langle$}
+\def\angleright{$\rangle$}
+
+% Set the fonts to use with the @small... environments.
+\let\smallexamplefonts = \smallfonts
+
+% About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample
+% can fit this many characters:
+% 8.5x11=86 smallbook=72 a4=90 a5=69
+% If we use \scriptfonts (8pt), then we can fit this many characters:
+% 8.5x11=90+ smallbook=80 a4=90+ a5=77
+% For me, subjectively, the few extra characters that fit aren't worth
+% the additional smallness of 8pt. So I'm making the default 9pt.
+%
+% By the way, for comparison, here's what fits with @example (10pt):
+% 8.5x11=71 smallbook=60 a4=75 a5=58
+% --karl, 24jan03.
+
+% Set up the default fonts, so we can use them for creating boxes.
+%
+\definetextfontsizexi
+
+
+\message{markup,}
+
+% Check if we are currently using a typewriter font. Since all the
+% Computer Modern typewriter fonts have zero interword stretch (and
+% shrink), and it is reasonable to expect all typewriter fonts to have
+% this property, we can check that font parameter.
+%
+\def\ifmonospace{\ifdim\fontdimen3\font=0pt }
+
+% Markup style infrastructure. \defmarkupstylesetup\INITMACRO will
+% define and register \INITMACRO to be called on markup style changes.
+% \INITMACRO can check \currentmarkupstyle for the innermost
+% style and the set of \ifmarkupSTYLE switches for all styles
+% currently in effect.
+\newif\ifmarkupvar
+\newif\ifmarkupsamp
+\newif\ifmarkupkey
+%\newif\ifmarkupfile % @file == @samp.
+%\newif\ifmarkupoption % @option == @samp.
+\newif\ifmarkupcode
+\newif\ifmarkupkbd
+%\newif\ifmarkupenv % @env == @code.
+%\newif\ifmarkupcommand % @command == @code.
+\newif\ifmarkuptex % @tex (and part of @math, for now).
+\newif\ifmarkupexample
+\newif\ifmarkupverb
+\newif\ifmarkupverbatim
+
+\let\currentmarkupstyle\empty
+
+\def\setupmarkupstyle#1{%
+ \csname markup#1true\endcsname
+ \def\currentmarkupstyle{#1}%
+ \markupstylesetup
+}
+
+\let\markupstylesetup\empty
+
+\def\defmarkupstylesetup#1{%
+ \expandafter\def\expandafter\markupstylesetup
+ \expandafter{\markupstylesetup #1}%
+ \def#1%
+}
+
+% Markup style setup for left and right quotes.
+\defmarkupstylesetup\markupsetuplq{%
+ \expandafter\let\expandafter \temp
+ \csname markupsetuplq\currentmarkupstyle\endcsname
+ \ifx\temp\relax \markupsetuplqdefault \else \temp \fi
+}
+
+\defmarkupstylesetup\markupsetuprq{%
+ \expandafter\let\expandafter \temp
+ \csname markupsetuprq\currentmarkupstyle\endcsname
+ \ifx\temp\relax \markupsetuprqdefault \else \temp \fi
+}
+
+{
+\catcode`\'=\active
+\catcode`\`=\active
+
+\gdef\markupsetuplqdefault{\let`\lq}
+\gdef\markupsetuprqdefault{\let'\rq}
+
+\gdef\markupsetcodequoteleft{\let`\codequoteleft}
+\gdef\markupsetcodequoteright{\let'\codequoteright}
+}
+
+\let\markupsetuplqcode \markupsetcodequoteleft
+\let\markupsetuprqcode \markupsetcodequoteright
+%
+\let\markupsetuplqexample \markupsetcodequoteleft
+\let\markupsetuprqexample \markupsetcodequoteright
+%
+\let\markupsetuplqkbd \markupsetcodequoteleft
+\let\markupsetuprqkbd \markupsetcodequoteright
+%
+\let\markupsetuplqsamp \markupsetcodequoteleft
+\let\markupsetuprqsamp \markupsetcodequoteright
+%
+\let\markupsetuplqverb \markupsetcodequoteleft
+\let\markupsetuprqverb \markupsetcodequoteright
+%
+\let\markupsetuplqverbatim \markupsetcodequoteleft
+\let\markupsetuprqverbatim \markupsetcodequoteright
+
+% Allow an option to not use regular directed right quote/apostrophe
+% (char 0x27), but instead the undirected quote from cmtt (char 0x0d).
+% The undirected quote is ugly, so don't make it the default, but it
+% works for pasting with more pdf viewers (at least evince), the
+% lilypond developers report. xpdf does work with the regular 0x27.
+%
+\def\codequoteright{%
+ \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax
+ \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax
+ '%
+ \else \char'15 \fi
+ \else \char'15 \fi
+}
+%
+% and a similar option for the left quote char vs. a grave accent.
+% Modern fonts display ASCII 0x60 as a grave accent, so some people like
+% the code environments to do likewise.
+%
+\def\codequoteleft{%
+ \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax
+ \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax
+ % [Knuth] pp. 380,381,391
+ % \relax disables Spanish ligatures ?` and !` of \tt font.
+ \relax`%
+ \else \char'22 \fi
+ \else \char'22 \fi
+}
+
+% Commands to set the quote options.
+%
+\parseargdef\codequoteundirected{%
+ \def\temp{#1}%
+ \ifx\temp\onword
+ \expandafter\let\csname SETtxicodequoteundirected\endcsname
+ = t%
+ \else\ifx\temp\offword
+ \expandafter\let\csname SETtxicodequoteundirected\endcsname
+ = \relax
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @codequoteundirected value `\temp', must be on|off}%
+ \fi\fi
+}
+%
+\parseargdef\codequotebacktick{%
+ \def\temp{#1}%
+ \ifx\temp\onword
+ \expandafter\let\csname SETtxicodequotebacktick\endcsname
+ = t%
+ \else\ifx\temp\offword
+ \expandafter\let\csname SETtxicodequotebacktick\endcsname
+ = \relax
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @codequotebacktick value `\temp', must be on|off}%
+ \fi\fi
+}
+
+% [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font.
+\def\noligaturesquoteleft{\relax\lq}
+
+% Count depth in font-changes, for error checks
+\newcount\fontdepth \fontdepth=0
+
+% Font commands.
+
+% #1 is the font command (\sl or \it), #2 is the text to slant.
+% If we are in a monospaced environment, however, 1) always use \ttsl,
+% and 2) do not add an italic correction.
+\def\dosmartslant#1#2{%
+ \ifusingtt
+ {{\ttsl #2}\let\next=\relax}%
+ {\def\next{{#1#2}\futurelet\next\smartitaliccorrection}}%
+ \next
+}
+\def\smartslanted{\dosmartslant\sl}
+\def\smartitalic{\dosmartslant\it}
+
+% Output an italic correction unless \next (presumed to be the following
+% character) is such as not to need one.
+\def\smartitaliccorrection{%
+ \ifx\next,%
+ \else\ifx\next-%
+ \else\ifx\next.%
+ \else\ifx\next\.%
+ \else\ifx\next\comma%
+ \else\ptexslash
+ \fi\fi\fi\fi\fi
+ \aftersmartic
+}
+
+% Unconditional use \ttsl, and no ic. @var is set to this for defuns.
+\def\ttslanted#1{{\ttsl #1}}
+
+% @cite is like \smartslanted except unconditionally use \sl. We never want
+% ttsl for book titles, do we?
+\def\cite#1{{\sl #1}\futurelet\next\smartitaliccorrection}
+
+\def\aftersmartic{}
+\def\var#1{%
+ \let\saveaftersmartic = \aftersmartic
+ \def\aftersmartic{\null\let\aftersmartic=\saveaftersmartic}%
+ \smartslanted{#1}%
+}
+
+\let\i=\smartitalic
+\let\slanted=\smartslanted
+\let\dfn=\smartslanted
+\let\emph=\smartitalic
+
+% Explicit font changes: @r, @sc, undocumented @ii.
+\def\r#1{{\rm #1}} % roman font
+\def\sc#1{{\smallcaps#1}} % smallcaps font
+\def\ii#1{{\it #1}} % italic font
+
+% @b, explicit bold. Also @strong.
+\def\b#1{{\bf #1}}
+\let\strong=\b
+
+% @sansserif, explicit sans.
+\def\sansserif#1{{\sf #1}}
+
+% We can't just use \exhyphenpenalty, because that only has effect at
+% the end of a paragraph. Restore normal hyphenation at the end of the
+% group within which \nohyphenation is presumably called.
+%
+\def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation}
+\def\restorehyphenation{\hyphenchar\font = `- }
+
+% Set sfcode to normal for the chars that usually have another value.
+% Can't use plain's \frenchspacing because it uses the `\x notation, and
+% sometimes \x has an active definition that messes things up.
+%
+\catcode`@=11
+ \def\plainfrenchspacing{%
+ \sfcode`\.=\@m \sfcode`\?=\@m \sfcode`\!=\@m
+ \sfcode`\:=\@m \sfcode`\;=\@m \sfcode`\,=\@m
+ \def\endofsentencespacefactor{1000}% for @. and friends
+ }
+ \def\plainnonfrenchspacing{%
+ \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000
+ \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250
+ \def\endofsentencespacefactor{3000}% for @. and friends
+ }
+\catcode`@=\other
+\def\endofsentencespacefactor{3000}% default
+
+% @t, explicit typewriter.
+\def\t#1{%
+ {\tt \rawbackslash \plainfrenchspacing #1}%
+ \null
+}
+
+% @samp.
+\def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}}
+
+% @indicateurl is \samp, that is, with quotes.
+\let\indicateurl=\samp
+
+% @code (and similar) prints in typewriter, but with spaces the same
+% size as normal in the surrounding text, without hyphenation, etc.
+% This is a subroutine for that.
+\def\tclose#1{%
+ {%
+ % Change normal interword space to be same as for the current font.
+ \spaceskip = \fontdimen2\font
+ %
+ % Switch to typewriter.
+ \tt
+ %
+ % But `\ ' produces the large typewriter interword space.
+ \def\ {{\spaceskip = 0pt{} }}%
+ %
+ % Turn off hyphenation.
+ \nohyphenation
+ %
+ \rawbackslash
+ \plainfrenchspacing
+ #1%
+ }%
+ \null % reset spacefactor to 1000
+}
+
+% We *must* turn on hyphenation at `-' and `_' in @code.
+% (But see \codedashfinish below.)
+% Otherwise, it is too hard to avoid overfull hboxes
+% in the Emacs manual, the Library manual, etc.
+%
+% Unfortunately, TeX uses one parameter (\hyphenchar) to control
+% both hyphenation at - and hyphenation within words.
+% We must therefore turn them both off (\tclose does that)
+% and arrange explicitly to hyphenate at a dash. -- rms.
+{
+ \catcode`\-=\active \catcode`\_=\active
+ \catcode`\'=\active \catcode`\`=\active
+ \global\let'=\rq \global\let`=\lq % default definitions
+ %
+ \global\def\code{\begingroup
+ \setupmarkupstyle{code}%
+ % The following should really be moved into \setupmarkupstyle handlers.
+ \catcode\dashChar=\active \catcode\underChar=\active
+ \ifallowcodebreaks
+ \let-\codedash
+ \let_\codeunder
+ \else
+ \let-\normaldash
+ \let_\realunder
+ \fi
+ % Given -foo (with a single dash), we do not want to allow a break
+ % after the hyphen.
+ \global\let\codedashprev=\codedash
+ %
+ \codex
+ }
+ %
+ \gdef\codedash{\futurelet\next\codedashfinish}
+ \gdef\codedashfinish{%
+ \normaldash % always output the dash character itself.
+ %
+ % Now, output a discretionary to allow a line break, unless
+ % (a) the next character is a -, or
+ % (b) the preceding character is a -.
+ % E.g., given --posix, we do not want to allow a break after either -.
+ % Given --foo-bar, we do want to allow a break between the - and the b.
+ \ifx\next\codedash \else
+ \ifx\codedashprev\codedash
+ \else \discretionary{}{}{}\fi
+ \fi
+ % we need the space after the = for the case when \next itself is a
+ % space token; it would get swallowed otherwise. As in @code{- a}.
+ \global\let\codedashprev= \next
+ }
+}
+\def\normaldash{-}
+%
+\def\codex #1{\tclose{#1}\endgroup}
+
+\def\codeunder{%
+ % this is all so @math{@code{var_name}+1} can work. In math mode, _
+ % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.)
+ % will therefore expand the active definition of _, which is us
+ % (inside @code that is), therefore an endless loop.
+ \ifusingtt{\ifmmode
+ \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_.
+ \else\normalunderscore \fi
+ \discretionary{}{}{}}%
+ {\_}%
+}
+
+% An additional complication: the above will allow breaks after, e.g.,
+% each of the four underscores in __typeof__. This is bad.
+% @allowcodebreaks provides a document-level way to turn breaking at -
+% and _ on and off.
+%
+\newif\ifallowcodebreaks \allowcodebreakstrue
+
+\def\keywordtrue{true}
+\def\keywordfalse{false}
+
+\parseargdef\allowcodebreaks{%
+ \def\txiarg{#1}%
+ \ifx\txiarg\keywordtrue
+ \allowcodebreakstrue
+ \else\ifx\txiarg\keywordfalse
+ \allowcodebreaksfalse
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @allowcodebreaks option `\txiarg', must be true|false}%
+ \fi\fi
+}
+
+% For @command, @env, @file, @option quotes seem unnecessary,
+% so use \code rather than \samp.
+\let\command=\code
+\let\env=\code
+\let\file=\code
+\let\option=\code
+
+% @uref (abbreviation for `urlref') aka @url takes an optional
+% (comma-separated) second argument specifying the text to display and
+% an optional third arg as text to display instead of (rather than in
+% addition to) the url itself. First (mandatory) arg is the url.
+
+% TeX-only option to allow changing PDF output to show only the second
+% arg (if given), and not the url (which is then just the link target).
+\newif\ifurefurlonlylink
+
+% The main macro is \urefbreak, which allows breaking at expected
+% places within the url. (There used to be another version, which
+% didn't support automatic breaking.)
+\def\urefbreak{\begingroup \urefcatcodes \dourefbreak}
+\let\uref=\urefbreak
+%
+\def\dourefbreak#1{\urefbreakfinish #1,,,\finish}
+\def\urefbreakfinish#1,#2,#3,#4\finish{% doesn't work in @example
+ \unsepspaces
+ \pdfurl{#1}%
+ \setbox0 = \hbox{\ignorespaces #3}%
+ \ifdim\wd0 > 0pt
+ \unhbox0 % third arg given, show only that
+ \else
+ \setbox0 = \hbox{\ignorespaces #2}% look for second arg
+ \ifdim\wd0 > 0pt
+ \ifpdf
+ % For pdfTeX and LuaTeX
+ \ifurefurlonlylink
+ % PDF plus option to not display url, show just arg
+ \unhbox0
+ \else
+ % PDF, normally display both arg and url for consistency,
+ % visibility, if the pdf is eventually used to print, etc.
+ \unhbox0\ (\urefcode{#1})%
+ \fi
+ \else
+ \ifx\XeTeXrevision\thisisundefined
+ \unhbox0\ (\urefcode{#1})% DVI, always show arg and url
+ \else
+ % For XeTeX
+ \ifurefurlonlylink
+ % PDF plus option to not display url, show just arg
+ \unhbox0
+ \else
+ % PDF, normally display both arg and url for consistency,
+ % visibility, if the pdf is eventually used to print, etc.
+ \unhbox0\ (\urefcode{#1})%
+ \fi
+ \fi
+ \fi
+ \else
+ \urefcode{#1}% only url given, so show it
+ \fi
+ \fi
+ \endlink
+\endgroup}
+
+% Allow line breaks around only a few characters (only).
+\def\urefcatcodes{%
+ \catcode`\&=\active \catcode`\.=\active
+ \catcode`\#=\active \catcode`\?=\active
+ \catcode`\/=\active
+}
+{
+ \urefcatcodes
+ %
+ \global\def\urefcode{\begingroup
+ \setupmarkupstyle{code}%
+ \urefcatcodes
+ \let&\urefcodeamp
+ \let.\urefcodedot
+ \let#\urefcodehash
+ \let?\urefcodequest
+ \let/\urefcodeslash
+ \codex
+ }
+ %
+ % By default, they are just regular characters.
+ \global\def&{\normalamp}
+ \global\def.{\normaldot}
+ \global\def#{\normalhash}
+ \global\def?{\normalquest}
+ \global\def/{\normalslash}
+}
+
+% we put a little stretch before and after the breakable chars, to help
+% line breaking of long url's. The unequal skips make look better in
+% cmtt at least, especially for dots.
+\def\urefprestretchamount{.13em}
+\def\urefpoststretchamount{.1em}
+\def\urefprestretch{\urefprebreak \hskip0pt plus\urefprestretchamount\relax}
+\def\urefpoststretch{\urefpostbreak \hskip0pt plus\urefprestretchamount\relax}
+%
+\def\urefcodeamp{\urefprestretch \&\urefpoststretch}
+\def\urefcodedot{\urefprestretch .\urefpoststretch}
+\def\urefcodehash{\urefprestretch \#\urefpoststretch}
+\def\urefcodequest{\urefprestretch ?\urefpoststretch}
+\def\urefcodeslash{\futurelet\next\urefcodeslashfinish}
+{
+ \catcode`\/=\active
+ \global\def\urefcodeslashfinish{%
+ \urefprestretch \slashChar
+ % Allow line break only after the final / in a sequence of
+ % slashes, to avoid line break between the slashes in http://.
+ \ifx\next/\else \urefpoststretch \fi
+ }
+}
+
+% One more complication: by default we'll break after the special
+% characters, but some people like to break before the special chars, so
+% allow that. Also allow no breaking at all, for manual control.
+%
+\parseargdef\urefbreakstyle{%
+ \def\txiarg{#1}%
+ \ifx\txiarg\wordnone
+ \def\urefprebreak{\nobreak}\def\urefpostbreak{\nobreak}
+ \else\ifx\txiarg\wordbefore
+ \def\urefprebreak{\allowbreak}\def\urefpostbreak{\nobreak}
+ \else\ifx\txiarg\wordafter
+ \def\urefprebreak{\nobreak}\def\urefpostbreak{\allowbreak}
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @urefbreakstyle setting `\txiarg'}%
+ \fi\fi\fi
+}
+\def\wordafter{after}
+\def\wordbefore{before}
+\def\wordnone{none}
+
+\urefbreakstyle after
+
+% @url synonym for @uref, since that's how everyone uses it.
+%
+\let\url=\uref
+
+% rms does not like angle brackets --karl, 17may97.
+% So now @email is just like @uref, unless we are pdf.
+%
+%\def\email#1{\angleleft{\tt #1}\angleright}
+\ifpdf
+ \def\email#1{\doemail#1,,\finish}
+ \def\doemail#1,#2,#3\finish{\begingroup
+ \unsepspaces
+ \pdfurl{mailto:#1}%
+ \setbox0 = \hbox{\ignorespaces #2}%
+ \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi
+ \endlink
+ \endgroup}
+\else
+ \ifx\XeTeXrevision\thisisundefined
+ \let\email=\uref
+ \else
+ \def\email#1{\doemail#1,,\finish}
+ \def\doemail#1,#2,#3\finish{\begingroup
+ \unsepspaces
+ \pdfurl{mailto:#1}%
+ \setbox0 = \hbox{\ignorespaces #2}%
+ \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi
+ \endlink
+ \endgroup}
+ \fi
+\fi
+
+% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
+% `example' (@kbd uses ttsl only inside of @example and friends),
+% or `code' (@kbd uses normal tty font always).
+\parseargdef\kbdinputstyle{%
+ \def\txiarg{#1}%
+ \ifx\txiarg\worddistinct
+ \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
+ \else\ifx\txiarg\wordexample
+ \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}%
+ \else\ifx\txiarg\wordcode
+ \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @kbdinputstyle setting `\txiarg'}%
+ \fi\fi\fi
+}
+\def\worddistinct{distinct}
+\def\wordexample{example}
+\def\wordcode{code}
+
+% Default is `distinct'.
+\kbdinputstyle distinct
+
+% @kbd is like @code, except that if the argument is just one @key command,
+% then @kbd has no effect.
+\def\kbd#1{{\def\look{#1}\expandafter\kbdsub\look??\par}}
+
+\def\xkey{\key}
+\def\kbdsub#1#2#3\par{%
+ \def\one{#1}\def\three{#3}\def\threex{??}%
+ \ifx\one\xkey\ifx\threex\three \key{#2}%
+ \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi
+ \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi
+}
+
+% definition of @key that produces a lozenge. Doesn't adjust to text size.
+%\setfont\keyrm\rmshape{8}{1000}{OT1}
+%\font\keysy=cmsy9
+%\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
+% \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
+% \vbox{\hrule\kern-0.4pt
+% \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
+% \kern-0.4pt\hrule}%
+% \kern-.06em\raise0.4pt\hbox{\angleright}}}}
+
+% definition of @key with no lozenge. If the current font is already
+% monospace, don't change it; that way, we respect @kbdinputstyle. But
+% if it isn't monospace, then use \tt.
+%
+\def\key#1{{\setupmarkupstyle{key}%
+ \nohyphenation
+ \ifmonospace\else\tt\fi
+ #1}\null}
+
+% @clicksequence{File @click{} Open ...}
+\def\clicksequence#1{\begingroup #1\endgroup}
+
+% @clickstyle @arrow (by default)
+\parseargdef\clickstyle{\def\click{#1}}
+\def\click{\arrow}
+
+% Typeset a dimension, e.g., `in' or `pt'. The only reason for the
+% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt.
+%
+\def\dmn#1{\thinspace #1}
+
+% @acronym for "FBI", "NATO", and the like.
+% We print this one point size smaller, since it's intended for
+% all-uppercase.
+%
+\def\acronym#1{\doacronym #1,,\finish}
+\def\doacronym#1,#2,#3\finish{%
+ {\switchtolsize #1}%
+ \def\temp{#2}%
+ \ifx\temp\empty \else
+ \space ({\unsepspaces \ignorespaces \temp \unskip})%
+ \fi
+ \null % reset \spacefactor=1000
+}
+
+% @abbr for "Comput. J." and the like.
+% No font change, but don't do end-of-sentence spacing.
+%
+\def\abbr#1{\doabbr #1,,\finish}
+\def\doabbr#1,#2,#3\finish{%
+ {\plainfrenchspacing #1}%
+ \def\temp{#2}%
+ \ifx\temp\empty \else
+ \space ({\unsepspaces \ignorespaces \temp \unskip})%
+ \fi
+ \null % reset \spacefactor=1000
+}
+
+% @asis just yields its argument. Used with @table, for example.
+%
+\def\asis#1{#1}
+
+% @math outputs its argument in math mode.
+%
+% One complication: _ usually means subscripts, but it could also mean
+% an actual _ character, as in @math{@var{some_variable} + 1}. So make
+% _ active, and distinguish by seeing if the current family is \slfam,
+% which is what @var uses.
+{
+ \catcode`\_ = \active
+ \gdef\mathunderscore{%
+ \catcode`\_=\active
+ \def_{\ifnum\fam=\slfam \_\else\sb\fi}%
+ }
+}
+% Another complication: we want \\ (and @\) to output a math (or tt) \.
+% FYI, plain.tex uses \\ as a temporary control sequence (for no
+% particular reason), but this is not advertised and we don't care.
+%
+% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\.
+\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi}
+%
+\def\math{%
+ \ifmmode\else % only go into math if not in math mode already
+ \tex
+ \mathunderscore
+ \let\\ = \mathbackslash
+ \mathactive
+ % make the texinfo accent commands work in math mode
+ \let\"=\ddot
+ \let\'=\acute
+ \let\==\bar
+ \let\^=\hat
+ \let\`=\grave
+ \let\u=\breve
+ \let\v=\check
+ \let\~=\tilde
+ \let\dotaccent=\dot
+ % have to provide another name for sup operator
+ \let\mathopsup=\sup
+ $\expandafter\finishmath\fi
+}
+\def\finishmath#1{#1$\endgroup} % Close the group opened by \tex.
+
+% Some active characters (such as <) are spaced differently in math.
+% We have to reset their definitions in case the @math was an argument
+% to a command which sets the catcodes (such as @item or @section).
+%
+{
+ \catcode`^ = \active
+ \catcode`< = \active
+ \catcode`> = \active
+ \catcode`+ = \active
+ \catcode`' = \active
+ \gdef\mathactive{%
+ \let^ = \ptexhat
+ \let< = \ptexless
+ \let> = \ptexgtr
+ \let+ = \ptexplus
+ \let' = \ptexquoteright
+ }
+}
+
+% for @sub and @sup, if in math mode, just do a normal sub/superscript.
+% If in text, use math to place as sub/superscript, but switch
+% into text mode, with smaller fonts. This is a different font than the
+% one used for real math sub/superscripts (8pt vs. 7pt), but let's not
+% fix it (significant additions to font machinery) until someone notices.
+%
+\def\sub{\ifmmode \expandafter\sb \else \expandafter\finishsub\fi}
+\def\finishsub#1{$\sb{\hbox{\switchtolllsize #1}}$}%
+%
+\def\sup{\ifmmode \expandafter\ptexsp \else \expandafter\finishsup\fi}
+\def\finishsup#1{$\ptexsp{\hbox{\switchtolllsize #1}}$}%
+
+% @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}.
+% Ignore unless FMTNAME == tex; then it is like @iftex and @tex,
+% except specified as a normal braced arg, so no newlines to worry about.
+%
+\def\outfmtnametex{tex}
+%
+\long\def\inlinefmt#1{\doinlinefmt #1,\finish}
+\long\def\doinlinefmt#1,#2,\finish{%
+ \def\inlinefmtname{#1}%
+ \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi
+}
+%
+% @inlinefmtifelse{FMTNAME,THEN-TEXT,ELSE-TEXT} expands THEN-TEXT if
+% FMTNAME is tex, else ELSE-TEXT.
+\long\def\inlinefmtifelse#1{\doinlinefmtifelse #1,,,\finish}
+\long\def\doinlinefmtifelse#1,#2,#3,#4,\finish{%
+ \def\inlinefmtname{#1}%
+ \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\else \ignorespaces #3\fi
+}
+%
+% For raw, must switch into @tex before parsing the argument, to avoid
+% setting catcodes prematurely. Doing it this way means that, for
+% example, @inlineraw{html, foo{bar} gets a parse error instead of being
+% ignored. But this isn't important because if people want a literal
+% *right* brace they would have to use a command anyway, so they may as
+% well use a command to get a left brace too. We could re-use the
+% delimiter character idea from \verb, but it seems like overkill.
+%
+\long\def\inlineraw{\tex \doinlineraw}
+\long\def\doinlineraw#1{\doinlinerawtwo #1,\finish}
+\def\doinlinerawtwo#1,#2,\finish{%
+ \def\inlinerawname{#1}%
+ \ifx\inlinerawname\outfmtnametex \ignorespaces #2\fi
+ \endgroup % close group opened by \tex.
+}
+
+% @inlineifset{VAR, TEXT} expands TEXT if VAR is @set.
+%
+\long\def\inlineifset#1{\doinlineifset #1,\finish}
+\long\def\doinlineifset#1,#2,\finish{%
+ \def\inlinevarname{#1}%
+ \expandafter\ifx\csname SET\inlinevarname\endcsname\relax
+ \else\ignorespaces#2\fi
+}
+
+% @inlineifclear{VAR, TEXT} expands TEXT if VAR is not @set.
+%
+\long\def\inlineifclear#1{\doinlineifclear #1,\finish}
+\long\def\doinlineifclear#1,#2,\finish{%
+ \def\inlinevarname{#1}%
+ \expandafter\ifx\csname SET\inlinevarname\endcsname\relax \ignorespaces#2\fi
+}
+
+
+\message{glyphs,}
+% and logos.
+
+% @@ prints an @, as does @atchar{}.
+\def\@{\char64 }
+\let\atchar=\@
+
+% @{ @} @lbracechar{} @rbracechar{} all generate brace characters.
+\def\lbracechar{{\ifmonospace\char123\else\ensuremath\lbrace\fi}}
+\def\rbracechar{{\ifmonospace\char125\else\ensuremath\rbrace\fi}}
+\let\{=\lbracechar
+\let\}=\rbracechar
+
+% @comma{} to avoid , parsing problems.
+\let\comma = ,
+
+% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent
+% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H.
+\let\, = \ptexc
+\let\dotaccent = \ptexdot
+\def\ringaccent#1{{\accent23 #1}}
+\let\tieaccent = \ptext
+\let\ubaraccent = \ptexb
+\let\udotaccent = \d
+
+% Other special characters: @questiondown @exclamdown @ordf @ordm
+% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss.
+\def\questiondown{?`}
+\def\exclamdown{!`}
+\def\ordf{\leavevmode\raise1ex\hbox{\switchtolllsize \underbar{a}}}
+\def\ordm{\leavevmode\raise1ex\hbox{\switchtolllsize \underbar{o}}}
+
+% Dotless i and dotless j, used for accents.
+\def\imacro{i}
+\def\jmacro{j}
+\def\dotless#1{%
+ \def\temp{#1}%
+ \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi
+ \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi
+ \else \errmessage{@dotless can be used only with i or j}%
+ \fi\fi
+}
+
+% The \TeX{} logo, as in plain, but resetting the spacing so that a
+% period following counts as ending a sentence. (Idea found in latex.)
+%
+\edef\TeX{\TeX \spacefactor=1000 }
+
+% @LaTeX{} logo. Not quite the same results as the definition in
+% latex.ltx, since we use a different font for the raised A; it's most
+% convenient for us to use an explicitly smaller font, rather than using
+% the \scriptstyle font (since we don't reset \scriptstyle and
+% \scriptscriptstyle).
+%
+\def\LaTeX{%
+ L\kern-.36em
+ {\setbox0=\hbox{T}%
+ \vbox to \ht0{\hbox{%
+ \ifx\textnominalsize\xwordpt
+ % for 10pt running text, lllsize (8pt) is too small for the A in LaTeX.
+ % Revert to plain's \scriptsize, which is 7pt.
+ \count255=\the\fam $\fam\count255 \scriptstyle A$%
+ \else
+ % For 11pt, we can use our lllsize.
+ \switchtolllsize A%
+ \fi
+ }%
+ \vss
+ }}%
+ \kern-.15em
+ \TeX
+}
+
+% Some math mode symbols. Define \ensuremath to switch into math mode
+% unless we are already there. Expansion tricks may not be needed here,
+% but safer, and can't hurt.
+\def\ensuremath{\ifmmode \expandafter\asis \else\expandafter\ensuredmath \fi}
+\def\ensuredmath#1{$\relax#1$}
+%
+\def\bullet{\ensuremath\ptexbullet}
+\def\geq{\ensuremath\ge}
+\def\leq{\ensuremath\le}
+\def\minus{\ensuremath-}
+
+% @dots{} outputs an ellipsis using the current font.
+% We do .5em per period so that it has the same spacing in the cm
+% typewriter fonts as three actual period characters; on the other hand,
+% in other typewriter fonts three periods are wider than 1.5em. So do
+% whichever is larger.
+%
+\def\dots{%
+ \leavevmode
+ \setbox0=\hbox{...}% get width of three periods
+ \ifdim\wd0 > 1.5em
+ \dimen0 = \wd0
+ \else
+ \dimen0 = 1.5em
+ \fi
+ \hbox to \dimen0{%
+ \hskip 0pt plus.25fil
+ .\hskip 0pt plus1fil
+ .\hskip 0pt plus1fil
+ .\hskip 0pt plus.5fil
+ }%
+}
+
+% @enddots{} is an end-of-sentence ellipsis.
+%
+\def\enddots{%
+ \dots
+ \spacefactor=\endofsentencespacefactor
+}
+
+% @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
+%
+% Since these characters are used in examples, they should be an even number of
+% \tt widths. Each \tt character is 1en, so two makes it 1em.
+%
+\def\point{$\star$}
+\def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}}
+\def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
+\def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}}
+\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
+\def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}}
+
+% The @error{} command.
+% Adapted from the TeXbook's \boxit.
+%
+\newbox\errorbox
+%
+{\ttfont \global\dimen0 = 3em}% Width of the box.
+\dimen2 = .55pt % Thickness of rules
+% The text. (`r' is open on the right, `e' somewhat less so on the left.)
+\setbox0 = \hbox{\kern-.75pt \reducedsf \putworderror\kern-1.5pt}
+%
+\setbox\errorbox=\hbox to \dimen0{\hfil
+ \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
+ \advance\hsize by -2\dimen2 % Rules.
+ \vbox{%
+ \hrule height\dimen2
+ \hbox{\vrule width\dimen2 \kern3pt % Space to left of text.
+ \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
+ \kern3pt\vrule width\dimen2}% Space to right.
+ \hrule height\dimen2}
+ \hfil}
+%
+\def\error{\leavevmode\lower.7ex\copy\errorbox}
+
+% @pounds{} is a sterling sign, which Knuth put in the CM italic font.
+%
+\def\pounds{{\it\$}}
+
+% @euro{} comes from a separate font, depending on the current style.
+% We use the free feym* fonts from the eurosym package by Henrik
+% Theiling, which support regular, slanted, bold and bold slanted (and
+% "outlined" (blackboard board, sort of) versions, which we don't need).
+% It is available from http://www.ctan.org/tex-archive/fonts/eurosym.
+%
+% Although only regular is the truly official Euro symbol, we ignore
+% that. The Euro is designed to be slightly taller than the regular
+% font height.
+%
+% feymr - regular
+% feymo - slanted
+% feybr - bold
+% feybo - bold slanted
+%
+% There is no good (free) typewriter version, to my knowledge.
+% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide.
+% Hmm.
+%
+% Also doesn't work in math. Do we need to do math with euro symbols?
+% Hope not.
+%
+%
+\def\euro{{\eurofont e}}
+\def\eurofont{%
+ % We set the font at each command, rather than predefining it in
+ % \textfonts and the other font-switching commands, so that
+ % installations which never need the symbol don't have to have the
+ % font installed.
+ %
+ % There is only one designed size (nominal 10pt), so we always scale
+ % that to the current nominal size.
+ %
+ % By the way, simply using "at 1em" works for cmr10 and the like, but
+ % does not work for cmbx10 and other extended/shrunken fonts.
+ %
+ \def\eurosize{\csname\curfontsize nominalsize\endcsname}%
+ %
+ \ifx\curfontstyle\bfstylename
+ % bold:
+ \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize
+ \else
+ % regular:
+ \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize
+ \fi
+ \thiseurofont
+}
+
+% Glyphs from the EC fonts. We don't use \let for the aliases, because
+% sometimes we redefine the original macro, and the alias should reflect
+% the redefinition.
+%
+% Use LaTeX names for the Icelandic letters.
+\def\DH{{\ecfont \char"D0}} % Eth
+\def\dh{{\ecfont \char"F0}} % eth
+\def\TH{{\ecfont \char"DE}} % Thorn
+\def\th{{\ecfont \char"FE}} % thorn
+%
+\def\guillemetleft{{\ecfont \char"13}}
+\def\guillemotleft{\guillemetleft}
+\def\guillemetright{{\ecfont \char"14}}
+\def\guillemotright{\guillemetright}
+\def\guilsinglleft{{\ecfont \char"0E}}
+\def\guilsinglright{{\ecfont \char"0F}}
+\def\quotedblbase{{\ecfont \char"12}}
+\def\quotesinglbase{{\ecfont \char"0D}}
+%
+% This positioning is not perfect (see the ogonek LaTeX package), but
+% we have the precomposed glyphs for the most common cases. We put the
+% tests to use those glyphs in the single \ogonek macro so we have fewer
+% dummy definitions to worry about for index entries, etc.
+%
+% ogonek is also used with other letters in Lithuanian (IOU), but using
+% the precomposed glyphs for those is not so easy since they aren't in
+% the same EC font.
+\def\ogonek#1{{%
+ \def\temp{#1}%
+ \ifx\temp\macrocharA\Aogonek
+ \else\ifx\temp\macrochara\aogonek
+ \else\ifx\temp\macrocharE\Eogonek
+ \else\ifx\temp\macrochare\eogonek
+ \else
+ \ecfont \setbox0=\hbox{#1}%
+ \ifdim\ht0=1ex\accent"0C #1%
+ \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}%
+ \fi
+ \fi\fi\fi\fi
+ }%
+}
+\def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A}
+\def\aogonek{{\ecfont \char"A1}}\def\macrochara{a}
+\def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E}
+\def\eogonek{{\ecfont \char"A6}}\def\macrochare{e}
+%
+% Use the European Computer Modern fonts (cm-super in outline format)
+% for non-CM glyphs. That is ec* for regular text and tc* for the text
+% companion symbols (LaTeX TS1 encoding). Both are part of the ec
+% package and follow the same conventions.
+%
+\def\ecfont{\etcfont{e}}
+\def\tcfont{\etcfont{t}}
+%
+\def\etcfont#1{%
+ % We can't distinguish serif/sans and italic/slanted, but this
+ % is used for crude hacks anyway (like adding French and German
+ % quotes to documents typeset with CM, where we lose kerning), so
+ % hopefully nobody will notice/care.
+ \edef\ecsize{\csname\curfontsize ecsize\endcsname}%
+ \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}%
+ \ifmonospace
+ % typewriter:
+ \font\thisecfont = #1ctt\ecsize \space at \nominalsize
+ \else
+ \ifx\curfontstyle\bfstylename
+ % bold:
+ \font\thisecfont = #1cb\ifusingit{i}{x}\ecsize \space at \nominalsize
+ \else
+ % regular:
+ \font\thisecfont = #1c\ifusingit{ti}{rm}\ecsize \space at \nominalsize
+ \fi
+ \fi
+ \thisecfont
+}
+
+% @registeredsymbol - R in a circle. The font for the R should really
+% be smaller yet, but lllsize is the best we can do for now.
+% Adapted from the plain.tex definition of \copyright.
+%
+\def\registeredsymbol{%
+ $^{{\ooalign{\hfil\raise.07ex\hbox{\switchtolllsize R}%
+ \hfil\crcr\Orb}}%
+ }$%
+}
+
+% @textdegree - the normal degrees sign.
+%
+\def\textdegree{$^\circ$}
+
+% Laurent Siebenmann reports \Orb undefined with:
+% Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38
+% so we'll define it if necessary.
+%
+\ifx\Orb\thisisundefined
+\def\Orb{\mathhexbox20D}
+\fi
+
+% Quotes.
+\chardef\quotedblleft="5C
+\chardef\quotedblright=`\"
+\chardef\quoteleft=`\`
+\chardef\quoteright=`\'
+
+
+\message{page headings,}
+
+\newskip\titlepagetopglue \titlepagetopglue = 1.5in
+\newskip\titlepagebottomglue \titlepagebottomglue = 2pc
+
+% First the title page. Must do @settitle before @titlepage.
+\newif\ifseenauthor
+\newif\iffinishedtitlepage
+
+% @setcontentsaftertitlepage used to do an implicit @contents or
+% @shortcontents after @end titlepage, but it is now obsolete.
+\def\setcontentsaftertitlepage{%
+ \errmessage{@setcontentsaftertitlepage has been removed as a Texinfo
+ command; move your @contents command if you want the contents
+ after the title page.}}%
+\def\setshortcontentsaftertitlepage{%
+ \errmessage{@setshortcontentsaftertitlepage has been removed as a Texinfo
+ command; move your @shortcontents and @contents commands if you
+ want the contents after the title page.}}%
+
+\parseargdef\shorttitlepage{%
+ \begingroup \hbox{}\vskip 1.5in \chaprm \centerline{#1}%
+ \endgroup\page\hbox{}\page}
+
+\envdef\titlepage{%
+ % Open one extra group, as we want to close it in the middle of \Etitlepage.
+ \begingroup
+ \parindent=0pt \textfonts
+ % Leave some space at the very top of the page.
+ \vglue\titlepagetopglue
+ % No rule at page bottom unless we print one at the top with @title.
+ \finishedtitlepagetrue
+ %
+ % Most title ``pages'' are actually two pages long, with space
+ % at the top of the second. We don't want the ragged left on the second.
+ \let\oldpage = \page
+ \def\page{%
+ \iffinishedtitlepage\else
+ \finishtitlepage
+ \fi
+ \let\page = \oldpage
+ \page
+ \null
+ }%
+}
+
+\def\Etitlepage{%
+ \iffinishedtitlepage\else
+ \finishtitlepage
+ \fi
+ % It is important to do the page break before ending the group,
+ % because the headline and footline are only empty inside the group.
+ % If we use the new definition of \page, we always get a blank page
+ % after the title page, which we certainly don't want.
+ \oldpage
+ \endgroup
+ %
+ % Need this before the \...aftertitlepage checks so that if they are
+ % in effect the toc pages will come out with page numbers.
+ \HEADINGSon
+}
+
+\def\finishtitlepage{%
+ \vskip4pt \hrule height 2pt width \hsize
+ \vskip\titlepagebottomglue
+ \finishedtitlepagetrue
+}
+
+% Settings used for typesetting titles: no hyphenation, no indentation,
+% don't worry much about spacing, ragged right. This should be used
+% inside a \vbox, and fonts need to be set appropriately first. \par should
+% be specified before the end of the \vbox, since a vbox is a group.
+%
+\def\raggedtitlesettings{%
+ \rm
+ \hyphenpenalty=10000
+ \parindent=0pt
+ \tolerance=5000
+ \ptexraggedright
+}
+
+% Macros to be used within @titlepage:
+
+\let\subtitlerm=\rmfont
+\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}
+
+\parseargdef\title{%
+ \checkenv\titlepage
+ \vbox{\titlefonts \raggedtitlesettings #1\par}%
+ % print a rule at the page bottom also.
+ \finishedtitlepagefalse
+ \vskip4pt \hrule height 4pt width \hsize \vskip4pt
+}
+
+\parseargdef\subtitle{%
+ \checkenv\titlepage
+ {\subtitlefont \rightline{#1}}%
+}
+
+% @author should come last, but may come many times.
+% It can also be used inside @quotation.
+%
+\parseargdef\author{%
+ \def\temp{\quotation}%
+ \ifx\thisenv\temp
+ \def\quotationauthor{#1}% printed in \Equotation.
+ \else
+ \checkenv\titlepage
+ \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi
+ {\secfonts\rm \leftline{#1}}%
+ \fi
+}
+
+
+% Set up page headings and footings.
+
+\let\thispage=\folio
+
+\newtoks\evenheadline % headline on even pages
+\newtoks\oddheadline % headline on odd pages
+\newtoks\evenfootline % footline on even pages
+\newtoks\oddfootline % footline on odd pages
+
+% Now make \makeheadline and \makefootline in Plain TeX use those variables
+\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
+ \else \the\evenheadline \fi}}
+\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline
+ \else \the\evenfootline \fi}\HEADINGShook}
+\let\HEADINGShook=\relax
+
+% Commands to set those variables.
+% For example, this is what @headings on does
+% @evenheading @thistitle|@thispage|@thischapter
+% @oddheading @thischapter|@thispage|@thistitle
+% @evenfooting @thisfile||
+% @oddfooting ||@thisfile
+
+
+\def\evenheading{\parsearg\evenheadingxxx}
+\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish}
+\def\evenheadingyyy #1\|#2\|#3\|#4\finish{%
+\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+
+\def\oddheading{\parsearg\oddheadingxxx}
+\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish}
+\def\oddheadingyyy #1\|#2\|#3\|#4\finish{%
+\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+
+\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}%
+
+\def\evenfooting{\parsearg\evenfootingxxx}
+\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish}
+\def\evenfootingyyy #1\|#2\|#3\|#4\finish{%
+\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+
+\def\oddfooting{\parsearg\oddfootingxxx}
+\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish}
+\def\oddfootingyyy #1\|#2\|#3\|#4\finish{%
+ \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}%
+ %
+ % Leave some space for the footline. Hopefully ok to assume
+ % @evenfooting will not be used by itself.
+ \global\advance\txipageheight by -12pt
+ \global\advance\vsize by -12pt
+}
+
+\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}}
+
+% @evenheadingmarks top \thischapter <- chapter at the top of a page
+% @evenheadingmarks bottom \thischapter <- chapter at the bottom of a page
+%
+% The same set of arguments for:
+%
+% @oddheadingmarks
+% @evenfootingmarks
+% @oddfootingmarks
+% @everyheadingmarks
+% @everyfootingmarks
+
+% These define \getoddheadingmarks, \getevenheadingmarks,
+% \getoddfootingmarks, and \getevenfootingmarks, each to one of
+% \gettopheadingmarks, \getbottomheadingmarks.
+%
+\def\evenheadingmarks{\headingmarks{even}{heading}}
+\def\oddheadingmarks{\headingmarks{odd}{heading}}
+\def\evenfootingmarks{\headingmarks{even}{footing}}
+\def\oddfootingmarks{\headingmarks{odd}{footing}}
+\parseargdef\everyheadingmarks{\headingmarks{even}{heading}{#1}
+ \headingmarks{odd}{heading}{#1} }
+\parseargdef\everyfootingmarks{\headingmarks{even}{footing}{#1}
+ \headingmarks{odd}{footing}{#1} }
+% #1 = even/odd, #2 = heading/footing, #3 = top/bottom.
+\def\headingmarks#1#2#3 {%
+ \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname
+ \global\expandafter\let\csname get#1#2marks\endcsname \temp
+}
+
+\everyheadingmarks bottom
+\everyfootingmarks bottom
+
+% @headings double turns headings on for double-sided printing.
+% @headings single turns headings on for single-sided printing.
+% @headings off turns them off.
+% @headings on same as @headings double, retained for compatibility.
+% @headings after turns on double-sided headings after this page.
+% @headings doubleafter turns on double-sided headings after this page.
+% @headings singleafter turns on single-sided headings after this page.
+% By default, they are off at the start of a document,
+% and turned `on' after @end titlepage.
+
+\parseargdef\headings{\csname HEADINGS#1\endcsname}
+
+\def\headingsoff{% non-global headings elimination
+ \evenheadline={\hfil}\evenfootline={\hfil}%
+ \oddheadline={\hfil}\oddfootline={\hfil}%
+}
+
+\def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting
+\HEADINGSoff % it's the default
+
+% When we turn headings on, set the page number to 1.
+% For double-sided printing, put current file name in lower left corner,
+% chapter name on inside top of right hand pages, document
+% title on inside top of left hand pages, and page numbers on outside top
+% edge of all pages.
+\def\HEADINGSdouble{%
+\global\pageno=1
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\folio\hfil\thistitle}}
+\global\oddheadline={\line{\thischapterheading\hfil\folio}}
+\global\let\contentsalignmacro = \chapoddpage
+}
+\let\contentsalignmacro = \chappager
+
+% For single-sided printing, chapter title goes across top left of page,
+% page number on top right.
+\def\HEADINGSsingle{%
+\global\pageno=1
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\thischapterheading\hfil\folio}}
+\global\oddheadline={\line{\thischapterheading\hfil\folio}}
+\global\let\contentsalignmacro = \chappager
+}
+\def\HEADINGSon{\HEADINGSdouble}
+
+\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex}
+\let\HEADINGSdoubleafter=\HEADINGSafter
+\def\HEADINGSdoublex{%
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\folio\hfil\thistitle}}
+\global\oddheadline={\line{\thischapterheading\hfil\folio}}
+\global\let\contentsalignmacro = \chapoddpage
+}
+
+\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex}
+\def\HEADINGSsinglex{%
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\thischapterheading\hfil\folio}}
+\global\oddheadline={\line{\thischapterheading\hfil\folio}}
+\global\let\contentsalignmacro = \chappager
+}
+
+% Subroutines used in generating headings
+% This produces Day Month Year style of output.
+% Only define if not already defined, in case a txi-??.tex file has set
+% up a different format (e.g., txi-cs.tex does this).
+\ifx\today\thisisundefined
+\def\today{%
+ \number\day\space
+ \ifcase\month
+ \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr
+ \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug
+ \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
+ \fi
+ \space\number\year}
+\fi
+
+% @settitle line... specifies the title of the document, for headings.
+% It generates no output of its own.
+\def\thistitle{\putwordNoTitle}
+\def\settitle{\parsearg{\gdef\thistitle}}
+
+
+\message{tables,}
+% Tables -- @table, @ftable, @vtable, @item(x).
+
+% default indentation of table text
+\newdimen\tableindent \tableindent=.8in
+% default indentation of @itemize and @enumerate text
+\newdimen\itemindent \itemindent=.3in
+% margin between end of table item and start of table text.
+\newdimen\itemmargin \itemmargin=.1in
+
+% used internally for \itemindent minus \itemmargin
+\newdimen\itemmax
+
+% Note @table, @ftable, and @vtable define @item, @itemx, etc., with
+% these defs.
+% They also define \itemindex
+% to index the item name in whatever manner is desired (perhaps none).
+
+\newif\ifitemxneedsnegativevskip
+
+\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi}
+
+\def\internalBitem{\smallbreak \parsearg\itemzzz}
+\def\internalBitemx{\itemxpar \parsearg\itemzzz}
+
+\def\itemzzz #1{\begingroup %
+ \advance\hsize by -\rightskip
+ \advance\hsize by -\tableindent
+ \setbox0=\hbox{\itemindicate{#1}}%
+ \itemindex{#1}%
+ \nobreak % This prevents a break before @itemx.
+ %
+ % If the item text does not fit in the space we have, put it on a line
+ % by itself, and do not allow a page break either before or after that
+ % line. We do not start a paragraph here because then if the next
+ % command is, e.g., @kindex, the whatsit would get put into the
+ % horizontal list on a line by itself, resulting in extra blank space.
+ \ifdim \wd0>\itemmax
+ %
+ % Make this a paragraph so we get the \parskip glue and wrapping,
+ % but leave it ragged-right.
+ \begingroup
+ \advance\leftskip by-\tableindent
+ \advance\hsize by\tableindent
+ \advance\rightskip by0pt plus1fil\relax
+ \leavevmode\unhbox0\par
+ \endgroup
+ %
+ % We're going to be starting a paragraph, but we don't want the
+ % \parskip glue -- logically it's part of the @item we just started.
+ \nobreak \vskip-\parskip
+ %
+ % Stop a page break at the \parskip glue coming up. However, if
+ % what follows is an environment such as @example, there will be no
+ % \parskip glue; then the negative vskip we just inserted would
+ % cause the example and the item to crash together. So we use this
+ % bizarre value of 10001 as a signal to \aboveenvbreak to insert
+ % \parskip glue after all. Section titles are handled this way also.
+ %
+ \penalty 10001
+ \endgroup
+ \itemxneedsnegativevskipfalse
+ \else
+ % The item text fits into the space. Start a paragraph, so that the
+ % following text (if any) will end up on the same line.
+ \noindent
+ % Do this with kerns and \unhbox so that if there is a footnote in
+ % the item text, it can migrate to the main vertical list and
+ % eventually be printed.
+ \nobreak\kern-\tableindent
+ \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0
+ \unhbox0
+ \nobreak\kern\dimen0
+ \endgroup
+ \itemxneedsnegativevskiptrue
+ \fi
+}
+
+\def\item{\errmessage{@item while not in a list environment}}
+\def\itemx{\errmessage{@itemx while not in a list environment}}
+
+% @table, @ftable, @vtable.
+\envdef\table{%
+ \let\itemindex\gobble
+ \tablecheck{table}%
+}
+\envdef\ftable{%
+ \def\itemindex ##1{\doind {fn}{\code{##1}}}%
+ \tablecheck{ftable}%
+}
+\envdef\vtable{%
+ \def\itemindex ##1{\doind {vr}{\code{##1}}}%
+ \tablecheck{vtable}%
+}
+\def\tablecheck#1{%
+ \ifnum \the\catcode`\^^M=\active
+ \endgroup
+ \errmessage{This command won't work in this context; perhaps the problem is
+ that we are \inenvironment\thisenv}%
+ \def\next{\doignore{#1}}%
+ \else
+ \let\next\tablex
+ \fi
+ \next
+}
+\def\tablex#1{%
+ \def\itemindicate{#1}%
+ \parsearg\tabley
+}
+\def\tabley#1{%
+ {%
+ \makevalueexpandable
+ \edef\temp{\noexpand\tablez #1\space\space\space}%
+ \expandafter
+ }\temp \endtablez
+}
+\def\tablez #1 #2 #3 #4\endtablez{%
+ \aboveenvbreak
+ \ifnum 0#1>0 \advance \leftskip by #1\mil \fi
+ \ifnum 0#2>0 \tableindent=#2\mil \fi
+ \ifnum 0#3>0 \advance \rightskip by #3\mil \fi
+ \itemmax=\tableindent
+ \advance \itemmax by -\itemmargin
+ \advance \leftskip by \tableindent
+ \exdentamount=\tableindent
+ \parindent = 0pt
+ \parskip = \smallskipamount
+ \ifdim \parskip=0pt \parskip=2pt \fi
+ \let\item = \internalBitem
+ \let\itemx = \internalBitemx
+}
+\def\Etable{\endgraf\afterenvbreak}
+\let\Eftable\Etable
+\let\Evtable\Etable
+\let\Eitemize\Etable
+\let\Eenumerate\Etable
+
+% This is the counter used by @enumerate, which is really @itemize
+
+\newcount \itemno
+
+\envdef\itemize{\parsearg\doitemize}
+
+\def\doitemize#1{%
+ \aboveenvbreak
+ \itemmax=\itemindent
+ \advance\itemmax by -\itemmargin
+ \advance\leftskip by \itemindent
+ \exdentamount=\itemindent
+ \parindent=0pt
+ \parskip=\smallskipamount
+ \ifdim\parskip=0pt \parskip=2pt \fi
+ %
+ % Try typesetting the item mark so that if the document erroneously says
+ % something like @itemize @samp (intending @table), there's an error
+ % right away at the @itemize. It's not the best error message in the
+ % world, but it's better than leaving it to the @item. This means if
+ % the user wants an empty mark, they have to say @w{} not just @w.
+ \def\itemcontents{#1}%
+ \setbox0 = \hbox{\itemcontents}%
+ %
+ % @itemize with no arg is equivalent to @itemize @bullet.
+ \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi
+ %
+ \let\item=\itemizeitem
+}
+
+% Definition of @item while inside @itemize and @enumerate.
+%
+\def\itemizeitem{%
+ \advance\itemno by 1 % for enumerations
+ {\let\par=\endgraf \smallbreak}% reasonable place to break
+ {%
+ % If the document has an @itemize directly after a section title, a
+ % \nobreak will be last on the list, and \sectionheading will have
+ % done a \vskip-\parskip. In that case, we don't want to zero
+ % parskip, or the item text will crash with the heading. On the
+ % other hand, when there is normal text preceding the item (as there
+ % usually is), we do want to zero parskip, or there would be too much
+ % space. In that case, we won't have a \nobreak before. At least
+ % that's the theory.
+ \ifnum\lastpenalty<10000 \parskip=0in \fi
+ \noindent
+ \hbox to 0pt{\hss \itemcontents \kern\itemmargin}%
+ %
+ \ifinner\else
+ \vadjust{\penalty 1200}% not good to break after first line of item.
+ \fi
+ % We can be in inner vertical mode in a footnote, although an
+ % @itemize looks awful there.
+ }%
+ \flushcr
+}
+
+% \splitoff TOKENS\endmark defines \first to be the first token in
+% TOKENS, and \rest to be the remainder.
+%
+\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}%
+
+% Allow an optional argument of an uppercase letter, lowercase letter,
+% or number, to specify the first label in the enumerated list. No
+% argument is the same as `1'.
+%
+\envparseargdef\enumerate{\enumeratey #1 \endenumeratey}
+\def\enumeratey #1 #2\endenumeratey{%
+ % If we were given no argument, pretend we were given `1'.
+ \def\thearg{#1}%
+ \ifx\thearg\empty \def\thearg{1}\fi
+ %
+ % Detect if the argument is a single token. If so, it might be a
+ % letter. Otherwise, the only valid thing it can be is a number.
+ % (We will always have one token, because of the test we just made.
+ % This is a good thing, since \splitoff doesn't work given nothing at
+ % all -- the first parameter is undelimited.)
+ \expandafter\splitoff\thearg\endmark
+ \ifx\rest\empty
+ % Only one token in the argument. It could still be anything.
+ % A ``lowercase letter'' is one whose \lccode is nonzero.
+ % An ``uppercase letter'' is one whose \lccode is both nonzero, and
+ % not equal to itself.
+ % Otherwise, we assume it's a number.
+ %
+ % We need the \relax at the end of the \ifnum lines to stop TeX from
+ % continuing to look for a <number>.
+ %
+ \ifnum\lccode\expandafter`\thearg=0\relax
+ \numericenumerate % a number (we hope)
+ \else
+ % It's a letter.
+ \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax
+ \lowercaseenumerate % lowercase letter
+ \else
+ \uppercaseenumerate % uppercase letter
+ \fi
+ \fi
+ \else
+ % Multiple tokens in the argument. We hope it's a number.
+ \numericenumerate
+ \fi
+}
+
+% An @enumerate whose labels are integers. The starting integer is
+% given in \thearg.
+%
+\def\numericenumerate{%
+ \itemno = \thearg
+ \startenumeration{\the\itemno}%
+}
+
+% The starting (lowercase) letter is in \thearg.
+\def\lowercaseenumerate{%
+ \itemno = \expandafter`\thearg
+ \startenumeration{%
+ % Be sure we're not beyond the end of the alphabet.
+ \ifnum\itemno=0
+ \errmessage{No more lowercase letters in @enumerate; get a bigger
+ alphabet}%
+ \fi
+ \char\lccode\itemno
+ }%
+}
+
+% The starting (uppercase) letter is in \thearg.
+\def\uppercaseenumerate{%
+ \itemno = \expandafter`\thearg
+ \startenumeration{%
+ % Be sure we're not beyond the end of the alphabet.
+ \ifnum\itemno=0
+ \errmessage{No more uppercase letters in @enumerate; get a bigger
+ alphabet}
+ \fi
+ \char\uccode\itemno
+ }%
+}
+
+% Call \doitemize, adding a period to the first argument and supplying the
+% common last two arguments. Also subtract one from the initial value in
+% \itemno, since @item increments \itemno.
+%
+\def\startenumeration#1{%
+ \advance\itemno by -1
+ \doitemize{#1.}\flushcr
+}
+
+% @alphaenumerate and @capsenumerate are abbreviations for giving an arg
+% to @enumerate.
+%
+\def\alphaenumerate{\enumerate{a}}
+\def\capsenumerate{\enumerate{A}}
+\def\Ealphaenumerate{\Eenumerate}
+\def\Ecapsenumerate{\Eenumerate}
+
+
+% @multitable macros
+% Amy Hendrickson, 8/18/94, 3/6/96
+%
+% @multitable ... @end multitable will make as many columns as desired.
+% Contents of each column will wrap at width given in preamble. Width
+% can be specified either with sample text given in a template line,
+% or in percent of \hsize, the current width of text on page.
+
+% Table can continue over pages but will only break between lines.
+
+% To make preamble:
+%
+% Either define widths of columns in terms of percent of \hsize:
+% @multitable @columnfractions .25 .3 .45
+% @item ...
+%
+% Numbers following @columnfractions are the percent of the total
+% current hsize to be used for each column. You may use as many
+% columns as desired.
+
+
+% Or use a template:
+% @multitable {Column 1 template} {Column 2 template} {Column 3 template}
+% @item ...
+% using the widest term desired in each column.
+
+% Each new table line starts with @item, each subsequent new column
+% starts with @tab. Empty columns may be produced by supplying @tab's
+% with nothing between them for as many times as empty columns are needed,
+% ie, @tab@tab@tab will produce two empty columns.
+
+% @item, @tab do not need to be on their own lines, but it will not hurt
+% if they are.
+
+% Sample multitable:
+
+% @multitable {Column 1 template} {Column 2 template} {Column 3 template}
+% @item first col stuff @tab second col stuff @tab third col
+% @item
+% first col stuff
+% @tab
+% second col stuff
+% @tab
+% third col
+% @item first col stuff @tab second col stuff
+% @tab Many paragraphs of text may be used in any column.
+%
+% They will wrap at the width determined by the template.
+% @item@tab@tab This will be in third column.
+% @end multitable
+
+% Default dimensions may be reset by user.
+% @multitableparskip is vertical space between paragraphs in table.
+% @multitableparindent is paragraph indent in table.
+% @multitablecolmargin is horizontal space to be left between columns.
+% @multitablelinespace is space to leave between table items, baseline
+% to baseline.
+% 0pt means it depends on current normal line spacing.
+%
+\newskip\multitableparskip
+\newskip\multitableparindent
+\newdimen\multitablecolspace
+\newskip\multitablelinespace
+\multitableparskip=0pt
+\multitableparindent=6pt
+\multitablecolspace=12pt
+\multitablelinespace=0pt
+
+% Macros used to set up halign preamble:
+%
+\let\endsetuptable\relax
+\def\xendsetuptable{\endsetuptable}
+\let\columnfractions\relax
+\def\xcolumnfractions{\columnfractions}
+\newif\ifsetpercent
+
+% #1 is the @columnfraction, usually a decimal number like .5, but might
+% be just 1. We just use it, whatever it is.
+%
+\def\pickupwholefraction#1 {%
+ \global\advance\colcount by 1
+ \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}%
+ \setuptable
+}
+
+\newcount\colcount
+\def\setuptable#1{%
+ \def\firstarg{#1}%
+ \ifx\firstarg\xendsetuptable
+ \let\go = \relax
+ \else
+ \ifx\firstarg\xcolumnfractions
+ \global\setpercenttrue
+ \else
+ \ifsetpercent
+ \let\go\pickupwholefraction
+ \else
+ \global\advance\colcount by 1
+ \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a
+ % separator; typically that is always in the input, anyway.
+ \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
+ \fi
+ \fi
+ \ifx\go\pickupwholefraction
+ % Put the argument back for the \pickupwholefraction call, so
+ % we'll always have a period there to be parsed.
+ \def\go{\pickupwholefraction#1}%
+ \else
+ \let\go = \setuptable
+ \fi%
+ \fi
+ \go
+}
+
+% multitable-only commands.
+%
+% @headitem starts a heading row, which we typeset in bold. Assignments
+% have to be global since we are inside the implicit group of an
+% alignment entry. \everycr below resets \everytab so we don't have to
+% undo it ourselves.
+\def\headitemfont{\b}% for people to use in the template row; not changeable
+\def\headitem{%
+ \checkenv\multitable
+ \crcr
+ \gdef\headitemcrhook{\nobreak}% attempt to avoid page break after headings
+ \global\everytab={\bf}% can't use \headitemfont since the parsing differs
+ \the\everytab % for the first item
+}%
+%
+% default for tables with no headings.
+\let\headitemcrhook=\relax
+%
+% A \tab used to include \hskip1sp. But then the space in a template
+% line is not enough. That is bad. So let's go back to just `&' until
+% we again encounter the problem the 1sp was intended to solve.
+% --karl, nathan@acm.org, 20apr99.
+\def\tab{\checkenv\multitable &\the\everytab}%
+
+% @multitable ... @end multitable definitions:
+%
+\newtoks\everytab % insert after every tab.
+%
+\envdef\multitable{%
+ \vskip\parskip
+ \startsavinginserts
+ %
+ % @item within a multitable starts a normal row.
+ % We use \def instead of \let so that if one of the multitable entries
+ % contains an @itemize, we don't choke on the \item (seen as \crcr aka
+ % \endtemplate) expanding \doitemize.
+ \def\item{\crcr}%
+ %
+ \tolerance=9500
+ \hbadness=9500
+ \setmultitablespacing
+ \parskip=\multitableparskip
+ \parindent=\multitableparindent
+ \overfullrule=0pt
+ \global\colcount=0
+ %
+ \everycr = {%
+ \noalign{%
+ \global\everytab={}% Reset from possible headitem.
+ \global\colcount=0 % Reset the column counter.
+ %
+ % Check for saved footnotes, etc.:
+ \checkinserts
+ %
+ % Perhaps a \nobreak, then reset:
+ \headitemcrhook
+ \global\let\headitemcrhook=\relax
+ }%
+ }%
+ %
+ \parsearg\domultitable
+}
+\def\domultitable#1{%
+ % To parse everything between @multitable and @item:
+ \setuptable#1 \endsetuptable
+ %
+ % This preamble sets up a generic column definition, which will
+ % be used as many times as user calls for columns.
+ % \vtop will set a single line and will also let text wrap and
+ % continue for many paragraphs if desired.
+ \halign\bgroup &%
+ \global\advance\colcount by 1
+ \multistrut
+ \vtop{%
+ % Use the current \colcount to find the correct column width:
+ \hsize=\expandafter\csname col\the\colcount\endcsname
+ %
+ % In order to keep entries from bumping into each other
+ % we will add a \leftskip of \multitablecolspace to all columns after
+ % the first one.
+ %
+ % If a template has been used, we will add \multitablecolspace
+ % to the width of each template entry.
+ %
+ % If the user has set preamble in terms of percent of \hsize we will
+ % use that dimension as the width of the column, and the \leftskip
+ % will keep entries from bumping into each other. Table will start at
+ % left margin and final column will justify at right margin.
+ %
+ % Make sure we don't inherit \rightskip from the outer environment.
+ \rightskip=0pt
+ \ifnum\colcount=1
+ % The first column will be indented with the surrounding text.
+ \advance\hsize by\leftskip
+ \else
+ \ifsetpercent \else
+ % If user has not set preamble in terms of percent of \hsize
+ % we will advance \hsize by \multitablecolspace.
+ \advance\hsize by \multitablecolspace
+ \fi
+ % In either case we will make \leftskip=\multitablecolspace:
+ \leftskip=\multitablecolspace
+ \fi
+ % Ignoring space at the beginning and end avoids an occasional spurious
+ % blank line, when TeX decides to break the line at the space before the
+ % box from the multistrut, so the strut ends up on a line by itself.
+ % For example:
+ % @multitable @columnfractions .11 .89
+ % @item @code{#}
+ % @tab Legal holiday which is valid in major parts of the whole country.
+ % Is automatically provided with highlighting sequences respectively
+ % marking characters.
+ \noindent\ignorespaces##\unskip\multistrut
+ }\cr
+}
+\def\Emultitable{%
+ \crcr
+ \egroup % end the \halign
+ \global\setpercentfalse
+}
+
+\def\setmultitablespacing{%
+ \def\multistrut{\strut}% just use the standard line spacing
+ %
+ % Compute \multitablelinespace (if not defined by user) for use in
+ % \multitableparskip calculation. We used define \multistrut based on
+ % this, but (ironically) that caused the spacing to be off.
+ % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100.
+\ifdim\multitablelinespace=0pt
+\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip
+\global\advance\multitablelinespace by-\ht0
+\fi
+% Test to see if parskip is larger than space between lines of
+% table. If not, do nothing.
+% If so, set to same dimension as multitablelinespace.
+\ifdim\multitableparskip>\multitablelinespace
+\global\multitableparskip=\multitablelinespace
+\global\advance\multitableparskip-7pt % to keep parskip somewhat smaller
+ % than skip between lines in the table.
+\fi%
+\ifdim\multitableparskip=0pt
+\global\multitableparskip=\multitablelinespace
+\global\advance\multitableparskip-7pt % to keep parskip somewhat smaller
+ % than skip between lines in the table.
+\fi}
+
+
+\message{conditionals,}
+
+% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext,
+% @ifnotxml always succeed. They currently do nothing; we don't
+% attempt to check whether the conditionals are properly nested. But we
+% have to remember that they are conditionals, so that @end doesn't
+% attempt to close an environment group.
+%
+\def\makecond#1{%
+ \expandafter\let\csname #1\endcsname = \relax
+ \expandafter\let\csname iscond.#1\endcsname = 1
+}
+\makecond{iftex}
+\makecond{ifnotdocbook}
+\makecond{ifnothtml}
+\makecond{ifnotinfo}
+\makecond{ifnotplaintext}
+\makecond{ifnotxml}
+
+% Ignore @ignore, @ifhtml, @ifinfo, and the like.
+%
+\def\direntry{\doignore{direntry}}
+\def\documentdescription{\doignore{documentdescription}}
+\def\docbook{\doignore{docbook}}
+\def\html{\doignore{html}}
+\def\ifdocbook{\doignore{ifdocbook}}
+\def\ifhtml{\doignore{ifhtml}}
+\def\ifinfo{\doignore{ifinfo}}
+\def\ifnottex{\doignore{ifnottex}}
+\def\ifplaintext{\doignore{ifplaintext}}
+\def\ifxml{\doignore{ifxml}}
+\def\ignore{\doignore{ignore}}
+\def\menu{\doignore{menu}}
+\def\xml{\doignore{xml}}
+
+% Ignore text until a line `@end #1', keeping track of nested conditionals.
+%
+% A count to remember the depth of nesting.
+\newcount\doignorecount
+
+\def\doignore#1{\begingroup
+ % Scan in ``verbatim'' mode:
+ \obeylines
+ \catcode`\@ = \other
+ \catcode`\{ = \other
+ \catcode`\} = \other
+ %
+ % Make sure that spaces turn into tokens that match what \doignoretext wants.
+ \spaceisspace
+ %
+ % Count number of #1's that we've seen.
+ \doignorecount = 0
+ %
+ % Swallow text until we reach the matching `@end #1'.
+ \dodoignore{#1}%
+}
+
+{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source.
+ \obeylines %
+ %
+ \gdef\dodoignore#1{%
+ % #1 contains the command name as a string, e.g., `ifinfo'.
+ %
+ % Define a command to find the next `@end #1'.
+ \long\def\doignoretext##1^^M@end #1{%
+ \doignoretextyyy##1^^M@#1\_STOP_}%
+ %
+ % And this command to find another #1 command, at the beginning of a
+ % line. (Otherwise, we would consider a line `@c @ifset', for
+ % example, to count as an @ifset for nesting.)
+ \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}%
+ %
+ % And now expand that command.
+ \doignoretext ^^M%
+ }%
+}
+
+\def\doignoreyyy#1{%
+ \def\temp{#1}%
+ \ifx\temp\empty % Nothing found.
+ \let\next\doignoretextzzz
+ \else % Found a nested condition, ...
+ \advance\doignorecount by 1
+ \let\next\doignoretextyyy % ..., look for another.
+ % If we're here, #1 ends with ^^M\ifinfo (for example).
+ \fi
+ \next #1% the token \_STOP_ is present just after this macro.
+}
+
+% We have to swallow the remaining "\_STOP_".
+%
+\def\doignoretextzzz#1{%
+ \ifnum\doignorecount = 0 % We have just found the outermost @end.
+ \let\next\enddoignore
+ \else % Still inside a nested condition.
+ \advance\doignorecount by -1
+ \let\next\doignoretext % Look for the next @end.
+ \fi
+ \next
+}
+
+% Finish off ignored text.
+{ \obeylines%
+ % Ignore anything after the last `@end #1'; this matters in verbatim
+ % environments, where otherwise the newline after an ignored conditional
+ % would result in a blank line in the output.
+ \gdef\enddoignore#1^^M{\endgroup\ignorespaces}%
+}
+
+
+% @set VAR sets the variable VAR to an empty value.
+% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
+%
+% Since we want to separate VAR from REST-OF-LINE (which might be
+% empty), we can't just use \parsearg; we have to insert a space of our
+% own to delimit the rest of the line, and then take it out again if we
+% didn't need it.
+% We rely on the fact that \parsearg sets \catcode`\ =10.
+%
+\parseargdef\set{\setyyy#1 \endsetyyy}
+\def\setyyy#1 #2\endsetyyy{%
+ {%
+ \makevalueexpandable
+ \def\temp{#2}%
+ \edef\next{\gdef\makecsname{SET#1}}%
+ \ifx\temp\empty
+ \next{}%
+ \else
+ \setzzz#2\endsetzzz
+ \fi
+ }%
+}
+% Remove the trailing space \setxxx inserted.
+\def\setzzz#1 \endsetzzz{\next{#1}}
+
+% @clear VAR clears (i.e., unsets) the variable VAR.
+%
+\parseargdef\clear{%
+ {%
+ \makevalueexpandable
+ \global\expandafter\let\csname SET#1\endcsname=\relax
+ }%
+}
+
+% @value{foo} gets the text saved in variable foo.
+\def\value{\begingroup\makevalueexpandable\valuexxx}
+\def\valuexxx#1{\expandablevalue{#1}\endgroup}
+{
+ \catcode`\-=\active \catcode`\_=\active
+ %
+ \gdef\makevalueexpandable{%
+ \let\value = \expandablevalue
+ % We don't want these characters active, ...
+ \catcode`\-=\other \catcode`\_=\other
+ % ..., but we might end up with active ones in the argument if
+ % we're called from @code, as @code{@value{foo-bar_}}, though.
+ % So \let them to their normal equivalents.
+ \let-\normaldash \let_\normalunderscore
+ }
+}
+
+% We have this subroutine so that we can handle at least some @value's
+% properly in indexes (we call \makevalueexpandable in \indexdummies).
+% The command has to be fully expandable (if the variable is set), since
+% the result winds up in the index file. This means that if the
+% variable's value contains other Texinfo commands, it's almost certain
+% it will fail (although perhaps we could fix that with sufficient work
+% to do a one-level expansion on the result, instead of complete).
+%
+% Unfortunately, this has the consequence that when _ is in the *value*
+% of an @set, it does not print properly in the roman fonts (get the cmr
+% dot accent at position 126 instead). No fix comes to mind, and it's
+% been this way since 2003 or earlier, so just ignore it.
+%
+\def\expandablevalue#1{%
+ \expandafter\ifx\csname SET#1\endcsname\relax
+ {[No value for ``#1'']}%
+ \message{Variable `#1', used in @value, is not set.}%
+ \else
+ \csname SET#1\endcsname
+ \fi
+}
+
+% Like \expandablevalue, but completely expandable (the \message in the
+% definition above operates at the execution level of TeX). Used when
+% writing to auxiliary files, due to the expansion that \write does.
+% If flag is undefined, pass through an unexpanded @value command: maybe it
+% will be set by the time it is read back in.
+%
+% NB flag names containing - or _ may not work here.
+\def\dummyvalue#1{%
+ \expandafter\ifx\csname SET#1\endcsname\relax
+ \noexpand\value{#1}%
+ \else
+ \csname SET#1\endcsname
+ \fi
+}
+
+% Used for @value's in index entries to form the sort key: expand the @value
+% if possible, otherwise sort late.
+\def\indexnofontsvalue#1{%
+ \expandafter\ifx\csname SET#1\endcsname\relax
+ ZZZZZZZ
+ \else
+ \csname SET#1\endcsname
+ \fi
+}
+
+% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
+% with @set.
+%
+% To get the special treatment we need for `@end ifset,' we call
+% \makecond and then redefine.
+%
+\makecond{ifset}
+\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}}
+\def\doifset#1#2{%
+ {%
+ \makevalueexpandable
+ \let\next=\empty
+ \expandafter\ifx\csname SET#2\endcsname\relax
+ #1% If not set, redefine \next.
+ \fi
+ \expandafter
+ }\next
+}
+\def\ifsetfail{\doignore{ifset}}
+
+% @ifclear VAR ... @end executes the `...' iff VAR has never been
+% defined with @set, or has been undefined with @clear.
+%
+% The `\else' inside the `\doifset' parameter is a trick to reuse the
+% above code: if the variable is not set, do nothing, if it is set,
+% then redefine \next to \ifclearfail.
+%
+\makecond{ifclear}
+\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}}
+\def\ifclearfail{\doignore{ifclear}}
+
+% @ifcommandisdefined CMD ... @end executes the `...' if CMD (written
+% without the @) is in fact defined. We can only feasibly check at the
+% TeX level, so something like `mathcode' is going to considered
+% defined even though it is not a Texinfo command.
+%
+\makecond{ifcommanddefined}
+\def\ifcommanddefined{\parsearg{\doifcmddefined{\let\next=\ifcmddefinedfail}}}
+%
+\def\doifcmddefined#1#2{{%
+ \makevalueexpandable
+ \let\next=\empty
+ \expandafter\ifx\csname #2\endcsname\relax
+ #1% If not defined, \let\next as above.
+ \fi
+ \expandafter
+ }\next
+}
+\def\ifcmddefinedfail{\doignore{ifcommanddefined}}
+
+% @ifcommandnotdefined CMD ... handled similar to @ifclear above.
+\makecond{ifcommandnotdefined}
+\def\ifcommandnotdefined{%
+ \parsearg{\doifcmddefined{\else \let\next=\ifcmdnotdefinedfail}}}
+\def\ifcmdnotdefinedfail{\doignore{ifcommandnotdefined}}
+
+% Set the `txicommandconditionals' variable, so documents have a way to
+% test if the @ifcommand...defined conditionals are available.
+\set txicommandconditionals
+
+% @dircategory CATEGORY -- specify a category of the dir file
+% which this file should belong to. Ignore this in TeX.
+\let\dircategory=\comment
+
+% @defininfoenclose.
+\let\definfoenclose=\comment
+
+
+\message{indexing,}
+% Index generation facilities
+
+% Define \newwrite to be identical to plain tex's \newwrite
+% except not \outer, so it can be used within macros and \if's.
+\edef\newwrite{\makecsname{ptexnewwrite}}
+
+% \newindex {foo} defines an index named IX.
+% It automatically defines \IXindex such that
+% \IXindex ...rest of line... puts an entry in the index IX.
+% It also defines \IXindfile to be the number of the output channel for
+% the file that accumulates this index. The file's extension is IX.
+% The name of an index should be no more than 2 characters long
+% for the sake of vms.
+%
+\def\newindex#1{%
+ \expandafter\chardef\csname#1indfile\endcsname=0
+ \expandafter\xdef\csname#1index\endcsname{% % Define @#1index
+ \noexpand\doindex{#1}}
+}
+
+% @defindex foo == \newindex{foo}
+%
+\def\defindex{\parsearg\newindex}
+
+% Define @defcodeindex, like @defindex except put all entries in @code.
+%
+\def\defcodeindex{\parsearg\newcodeindex}
+%
+\def\newcodeindex#1{%
+ \expandafter\chardef\csname#1indfile\endcsname=0
+ \expandafter\xdef\csname#1index\endcsname{%
+ \noexpand\docodeindex{#1}}%
+}
+
+% The default indices:
+\newindex{cp}% concepts,
+\newcodeindex{fn}% functions,
+\newcodeindex{vr}% variables,
+\newcodeindex{tp}% types,
+\newcodeindex{ky}% keys
+\newcodeindex{pg}% and programs.
+
+
+% @synindex foo bar makes index foo feed into index bar.
+% Do this instead of @defindex foo if you don't want it as a separate index.
+%
+% @syncodeindex foo bar similar, but put all entries made for index foo
+% inside @code.
+%
+\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}}
+\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}}
+
+% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo),
+% #3 the target index (bar).
+\def\dosynindex#1#2#3{%
+ \requireopenindexfile{#3}%
+ % redefine \fooindfile:
+ \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname
+ \expandafter\let\csname#2indfile\endcsname=\temp
+ % redefine \fooindex:
+ \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}%
+}
+
+% Define \doindex, the driver for all index macros.
+% Argument #1 is generated by the calling \fooindex macro,
+% and it is the two-letter name of the index.
+
+\def\doindex#1{\edef\indexname{#1}\parsearg\doindexxxx}
+\def\doindexxxx #1{\doind{\indexname}{#1}}
+
+% like the previous two, but they put @code around the argument.
+\def\docodeindex#1{\edef\indexname{#1}\parsearg\docodeindexxxx}
+\def\docodeindexxxx #1{\doind{\indexname}{\code{#1}}}
+
+
+% Used when writing an index entry out to an index file to prevent
+% expansion of Texinfo commands that can appear in an index entry.
+%
+\def\indexdummies{%
+ \escapechar = `\\ % use backslash in output files.
+ \definedummyletter\@%
+ \definedummyletter\ %
+ %
+ % For texindex which always views { and } as separators.
+ \def\{{\lbracechar{}}%
+ \def\}{\rbracechar{}}%
+ %
+ % Do the redefinitions.
+ \definedummies
+}
+
+% Used for the aux and toc files, where @ is the escape character.
+%
+\def\atdummies{%
+ \definedummyletter\@%
+ \definedummyletter\ %
+ \definedummyletter\{%
+ \definedummyletter\}%
+ %
+ % Do the redefinitions.
+ \definedummies
+ \otherbackslash
+}
+
+% \definedummyword defines \#1 as \string\#1\space, thus effectively
+% preventing its expansion. This is used only for control words,
+% not control letters, because the \space would be incorrect for
+% control characters, but is needed to separate the control word
+% from whatever follows.
+%
+% These can be used both for control words that take an argument and
+% those that do not. If it is followed by {arg} in the input, then
+% that will dutifully get written to the index (or wherever).
+%
+% For control letters, we have \definedummyletter, which omits the
+% space.
+%
+\def\definedummyword #1{\def#1{\string#1\space}}%
+\def\definedummyletter#1{\def#1{\string#1}}%
+\let\definedummyaccent\definedummyletter
+
+% Called from \indexdummies and \atdummies, to effectively prevent
+% the expansion of commands.
+%
+\def\definedummies{%
+ %
+ \let\commondummyword\definedummyword
+ \let\commondummyletter\definedummyletter
+ \let\commondummyaccent\definedummyaccent
+ \commondummiesnofonts
+ %
+ \definedummyletter\_%
+ \definedummyletter\-%
+ %
+ % Non-English letters.
+ \definedummyword\AA
+ \definedummyword\AE
+ \definedummyword\DH
+ \definedummyword\L
+ \definedummyword\O
+ \definedummyword\OE
+ \definedummyword\TH
+ \definedummyword\aa
+ \definedummyword\ae
+ \definedummyword\dh
+ \definedummyword\exclamdown
+ \definedummyword\l
+ \definedummyword\o
+ \definedummyword\oe
+ \definedummyword\ordf
+ \definedummyword\ordm
+ \definedummyword\questiondown
+ \definedummyword\ss
+ \definedummyword\th
+ %
+ % Although these internal commands shouldn't show up, sometimes they do.
+ \definedummyword\bf
+ \definedummyword\gtr
+ \definedummyword\hat
+ \definedummyword\less
+ \definedummyword\sf
+ \definedummyword\sl
+ \definedummyword\tclose
+ \definedummyword\tt
+ %
+ \definedummyword\LaTeX
+ \definedummyword\TeX
+ %
+ % Assorted special characters.
+ \definedummyword\atchar
+ \definedummyword\arrow
+ \definedummyword\bullet
+ \definedummyword\comma
+ \definedummyword\copyright
+ \definedummyword\registeredsymbol
+ \definedummyword\dots
+ \definedummyword\enddots
+ \definedummyword\entrybreak
+ \definedummyword\equiv
+ \definedummyword\error
+ \definedummyword\euro
+ \definedummyword\expansion
+ \definedummyword\geq
+ \definedummyword\guillemetleft
+ \definedummyword\guillemetright
+ \definedummyword\guilsinglleft
+ \definedummyword\guilsinglright
+ \definedummyword\lbracechar
+ \definedummyword\leq
+ \definedummyword\mathopsup
+ \definedummyword\minus
+ \definedummyword\ogonek
+ \definedummyword\pounds
+ \definedummyword\point
+ \definedummyword\print
+ \definedummyword\quotedblbase
+ \definedummyword\quotedblleft
+ \definedummyword\quotedblright
+ \definedummyword\quoteleft
+ \definedummyword\quoteright
+ \definedummyword\quotesinglbase
+ \definedummyword\rbracechar
+ \definedummyword\result
+ \definedummyword\sub
+ \definedummyword\sup
+ \definedummyword\textdegree
+ %
+ % We want to disable all macros so that they are not expanded by \write.
+ \macrolist
+ \let\value\dummyvalue
+ %
+ \normalturnoffactive
+}
+
+% \commondummiesnofonts: common to \definedummies and \indexnofonts.
+% Define \commondummyletter, \commondummyaccent and \commondummyword before
+% using. Used for accents, font commands, and various control letters.
+%
+\def\commondummiesnofonts{%
+ % Control letters and accents.
+ \commondummyletter\!%
+ \commondummyaccent\"%
+ \commondummyaccent\'%
+ \commondummyletter\*%
+ \commondummyaccent\,%
+ \commondummyletter\.%
+ \commondummyletter\/%
+ \commondummyletter\:%
+ \commondummyaccent\=%
+ \commondummyletter\?%
+ \commondummyaccent\^%
+ \commondummyaccent\`%
+ \commondummyaccent\~%
+ \commondummyword\u
+ \commondummyword\v
+ \commondummyword\H
+ \commondummyword\dotaccent
+ \commondummyword\ogonek
+ \commondummyword\ringaccent
+ \commondummyword\tieaccent
+ \commondummyword\ubaraccent
+ \commondummyword\udotaccent
+ \commondummyword\dotless
+ %
+ % Texinfo font commands.
+ \commondummyword\b
+ \commondummyword\i
+ \commondummyword\r
+ \commondummyword\sansserif
+ \commondummyword\sc
+ \commondummyword\slanted
+ \commondummyword\t
+ %
+ % Commands that take arguments.
+ \commondummyword\abbr
+ \commondummyword\acronym
+ \commondummyword\anchor
+ \commondummyword\cite
+ \commondummyword\code
+ \commondummyword\command
+ \commondummyword\dfn
+ \commondummyword\dmn
+ \commondummyword\email
+ \commondummyword\emph
+ \commondummyword\env
+ \commondummyword\file
+ \commondummyword\image
+ \commondummyword\indicateurl
+ \commondummyword\inforef
+ \commondummyword\kbd
+ \commondummyword\key
+ \commondummyword\math
+ \commondummyword\option
+ \commondummyword\pxref
+ \commondummyword\ref
+ \commondummyword\samp
+ \commondummyword\strong
+ \commondummyword\tie
+ \commondummyword\U
+ \commondummyword\uref
+ \commondummyword\url
+ \commondummyword\var
+ \commondummyword\verb
+ \commondummyword\w
+ \commondummyword\xref
+}
+
+% For testing: output @{ and @} in index sort strings as \{ and \}.
+\newif\ifusebracesinindexes
+
+\let\indexlbrace\relax
+\let\indexrbrace\relax
+
+{\catcode`\@=0
+\catcode`\\=13
+ @gdef@backslashdisappear{@def\{}}
+}
+
+{
+\catcode`\<=13
+\catcode`\-=13
+\catcode`\`=13
+ \gdef\indexnonalnumdisappear{%
+ \expandafter\ifx\csname SETtxiindexlquoteignore\endcsname\relax\else
+ % @set txiindexlquoteignore makes us ignore left quotes in the sort term.
+ % (Introduced for FSFS 2nd ed.)
+ \let`=\empty
+ \fi
+ %
+ \expandafter\ifx\csname SETtxiindexbackslashignore\endcsname\relax\else
+ \backslashdisappear
+ \fi
+ %
+ \expandafter\ifx\csname SETtxiindexhyphenignore\endcsname\relax\else
+ \def-{}%
+ \fi
+ \expandafter\ifx\csname SETtxiindexlessthanignore\endcsname\relax\else
+ \def<{}%
+ \fi
+ \expandafter\ifx\csname SETtxiindexatsignignore\endcsname\relax\else
+ \def\@{}%
+ \fi
+ }
+
+ \gdef\indexnonalnumreappear{%
+ \useindexbackslash
+ \let-\normaldash
+ \let<\normalless
+ \def\@{@}%
+ }
+}
+
+
+% \indexnofonts is used when outputting the strings to sort the index
+% by, and when constructing control sequence names. It eliminates all
+% control sequences and just writes whatever the best ASCII sort string
+% would be for a given command (usually its argument).
+%
+\def\indexnofonts{%
+ % Accent commands should become @asis.
+ \def\commondummyaccent##1{\let##1\asis}%
+ % We can just ignore other control letters.
+ \def\commondummyletter##1{\let##1\empty}%
+ % All control words become @asis by default; overrides below.
+ \let\commondummyword\commondummyaccent
+ \commondummiesnofonts
+ %
+ % Don't no-op \tt, since it isn't a user-level command
+ % and is used in the definitions of the active chars like <, >, |, etc.
+ % Likewise with the other plain tex font commands.
+ %\let\tt=\asis
+ %
+ \def\ { }%
+ \def\@{@}%
+ \def\_{\normalunderscore}%
+ \def\-{}% @- shouldn't affect sorting
+ %
+ \uccode`\1=`\{ \uppercase{\def\{{1}}%
+ \uccode`\1=`\} \uppercase{\def\}{1}}%
+ \let\lbracechar\{%
+ \let\rbracechar\}%
+ %
+ % Non-English letters.
+ \def\AA{AA}%
+ \def\AE{AE}%
+ \def\DH{DZZ}%
+ \def\L{L}%
+ \def\OE{OE}%
+ \def\O{O}%
+ \def\TH{TH}%
+ \def\aa{aa}%
+ \def\ae{ae}%
+ \def\dh{dzz}%
+ \def\exclamdown{!}%
+ \def\l{l}%
+ \def\oe{oe}%
+ \def\ordf{a}%
+ \def\ordm{o}%
+ \def\o{o}%
+ \def\questiondown{?}%
+ \def\ss{ss}%
+ \def\th{th}%
+ %
+ \def\LaTeX{LaTeX}%
+ \def\TeX{TeX}%
+ %
+ % Assorted special characters. \defglyph gives the control sequence a
+ % definition that removes the {} that follows its use.
+ \defglyph\atchar{@}%
+ \defglyph\arrow{->}%
+ \defglyph\bullet{bullet}%
+ \defglyph\comma{,}%
+ \defglyph\copyright{copyright}%
+ \defglyph\dots{...}%
+ \defglyph\enddots{...}%
+ \defglyph\equiv{==}%
+ \defglyph\error{error}%
+ \defglyph\euro{euro}%
+ \defglyph\expansion{==>}%
+ \defglyph\geq{>=}%
+ \defglyph\guillemetleft{<<}%
+ \defglyph\guillemetright{>>}%
+ \defglyph\guilsinglleft{<}%
+ \defglyph\guilsinglright{>}%
+ \defglyph\leq{<=}%
+ \defglyph\lbracechar{\{}%
+ \defglyph\minus{-}%
+ \defglyph\point{.}%
+ \defglyph\pounds{pounds}%
+ \defglyph\print{-|}%
+ \defglyph\quotedblbase{"}%
+ \defglyph\quotedblleft{"}%
+ \defglyph\quotedblright{"}%
+ \defglyph\quoteleft{`}%
+ \defglyph\quoteright{'}%
+ \defglyph\quotesinglbase{,}%
+ \defglyph\rbracechar{\}}%
+ \defglyph\registeredsymbol{R}%
+ \defglyph\result{=>}%
+ \defglyph\textdegree{o}%
+ %
+ % We need to get rid of all macros, leaving only the arguments (if present).
+ % Of course this is not nearly correct, but it is the best we can do for now.
+ % makeinfo does not expand macros in the argument to @deffn, which ends up
+ % writing an index entry, and texindex isn't prepared for an index sort entry
+ % that starts with \.
+ %
+ % Since macro invocations are followed by braces, we can just redefine them
+ % to take a single TeX argument. The case of a macro invocation that
+ % goes to end-of-line is not handled.
+ %
+ \macrolist
+ \let\value\indexnofontsvalue
+}
+\def\defglyph#1#2{\def#1##1{#2}} % see above
+
+
+
+
+\let\SETmarginindex=\relax % put index entries in margin (undocumented)?
+
+% Most index entries go through here, but \dosubind is the general case.
+% #1 is the index name, #2 is the entry text.
+\def\doind#1#2{\dosubind{#1}{#2}{}}
+
+% There is also \dosubind {index}{topic}{subtopic}
+% which makes an entry in a two-level index such as the operation index.
+% TODO: Two-level index? Operation index?
+
+% Workhorse for all indexes.
+% #1 is name of index, #2 is stuff to put there, #3 is subentry --
+% empty if called from \doind, as we usually are (the main exception
+% is with most defuns, which call us directly).
+%
+\def\dosubind#1#2#3{%
+ \iflinks
+ {%
+ \requireopenindexfile{#1}%
+ % Store the main index entry text (including the third arg).
+ \toks0 = {#2}%
+ % If third arg is present, precede it with a space.
+ \def\thirdarg{#3}%
+ \ifx\thirdarg\empty \else
+ \toks0 = \expandafter{\the\toks0 \space #3}%
+ \fi
+ %
+ \edef\writeto{\csname#1indfile\endcsname}%
+ %
+ \safewhatsit\dosubindwrite
+ }%
+ \fi
+}
+
+% Check if an index file has been opened, and if not, open it.
+\def\requireopenindexfile#1{%
+\ifnum\csname #1indfile\endcsname=0
+ \expandafter\newwrite \csname#1indfile\endcsname
+ \edef\suffix{#1}%
+ % A .fls suffix would conflict with the file extension for the output
+ % of -recorder, so use .f1s instead.
+ \ifx\suffix\indexisfl\def\suffix{f1}\fi
+ % Open the file
+ \immediate\openout\csname#1indfile\endcsname \jobname.\suffix
+ % Using \immediate above here prevents an object entering into the current
+ % box, which could confound checks such as those in \safewhatsit for
+ % preceding skips.
+ \typeout{Writing index file \jobname.\suffix}%
+\fi}
+\def\indexisfl{fl}
+
+% Output \ as {\indexbackslash}, because \ is an escape character in
+% the index files.
+\let\indexbackslash=\relax
+{\catcode`\@=0 \catcode`\\=\active
+ @gdef@useindexbackslash{@def\{{@indexbackslash}}}
+}
+
+% Definition for writing index entry text.
+\def\sortas#1{\ignorespaces}%
+
+% Definition for writing index entry sort key. Should occur at the at
+% the beginning of the index entry, like
+% @cindex @sortas{september} \september
+% The \ignorespaces takes care of following space, but there's no way
+% to remove space before it.
+{
+\catcode`\-=13
+\gdef\indexwritesortas{%
+ \begingroup
+ \indexnonalnumreappear
+ \indexwritesortasxxx}
+\gdef\indexwritesortasxxx#1{%
+ \xdef\indexsortkey{#1}\endgroup}
+}
+
+
+% Write the entry in \toks0 to the index file.
+%
+\def\dosubindwrite{%
+ % Put the index entry in the margin if desired.
+ \ifx\SETmarginindex\relax\else
+ \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}%
+ \fi
+ %
+ % Remember, we are within a group.
+ \indexdummies % Must do this here, since \bf, etc expand at this stage
+ \useindexbackslash % \indexbackslash isn't defined now so it will be output
+ % as is; and it will print as backslash.
+ % The braces around \indexbrace are recognized by texindex.
+ %
+ % Get the string to sort by, by processing the index entry with all
+ % font commands turned off.
+ {\indexnofonts
+ \def\lbracechar{{\indexlbrace}}%
+ \def\rbracechar{{\indexrbrace}}%
+ \let\{=\lbracechar
+ \let\}=\rbracechar
+ \indexnonalnumdisappear
+ \xdef\indexsortkey{}%
+ \let\sortas=\indexwritesortas
+ \edef\temp{\the\toks0}%
+ \setbox\dummybox = \hbox{\temp}% Make sure to execute any \sortas
+ \ifx\indexsortkey\empty
+ \xdef\indexsortkey{\temp}%
+ \ifx\indexsortkey\empty\xdef\indexsortkey{ }\fi
+ \fi
+ }%
+ %
+ % Set up the complete index entry, with both the sort key and
+ % the original text, including any font commands. We write
+ % three arguments to \entry to the .?? file (four in the
+ % subentry case), texindex reduces to two when writing the .??s
+ % sorted result.
+ \edef\temp{%
+ \write\writeto{%
+ \string\entry{\indexsortkey}{\noexpand\folio}{\the\toks0}}%
+ }%
+ \temp
+}
+\newbox\dummybox % used above
+
+% Take care of unwanted page breaks/skips around a whatsit:
+%
+% If a skip is the last thing on the list now, preserve it
+% by backing up by \lastskip, doing the \write, then inserting
+% the skip again. Otherwise, the whatsit generated by the
+% \write or \pdfdest will make \lastskip zero. The result is that
+% sequences like this:
+% @end defun
+% @tindex whatever
+% @defun ...
+% will have extra space inserted, because the \medbreak in the
+% start of the @defun won't see the skip inserted by the @end of
+% the previous defun.
+%
+% But don't do any of this if we're not in vertical mode. We
+% don't want to do a \vskip and prematurely end a paragraph.
+%
+% Avoid page breaks due to these extra skips, too.
+%
+% But wait, there is a catch there:
+% We'll have to check whether \lastskip is zero skip. \ifdim is not
+% sufficient for this purpose, as it ignores stretch and shrink parts
+% of the skip. The only way seems to be to check the textual
+% representation of the skip.
+%
+% The following is almost like \def\zeroskipmacro{0.0pt} except that
+% the ``p'' and ``t'' characters have catcode \other, not 11 (letter).
+%
+\edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname}
+%
+\newskip\whatsitskip
+\newcount\whatsitpenalty
+%
+% ..., ready, GO:
+%
+\def\safewhatsit#1{\ifhmode
+ #1%
+ \else
+ % \lastskip and \lastpenalty cannot both be nonzero simultaneously.
+ \whatsitskip = \lastskip
+ \edef\lastskipmacro{\the\lastskip}%
+ \whatsitpenalty = \lastpenalty
+ %
+ % If \lastskip is nonzero, that means the last item was a
+ % skip. And since a skip is discardable, that means this
+ % -\whatsitskip glue we're inserting is preceded by a
+ % non-discardable item, therefore it is not a potential
+ % breakpoint, therefore no \nobreak needed.
+ \ifx\lastskipmacro\zeroskipmacro
+ \else
+ \vskip-\whatsitskip
+ \fi
+ %
+ #1%
+ %
+ \ifx\lastskipmacro\zeroskipmacro
+ % If \lastskip was zero, perhaps the last item was a penalty, and
+ % perhaps it was >=10000, e.g., a \nobreak. In that case, we want
+ % to re-insert the same penalty (values >10000 are used for various
+ % signals); since we just inserted a non-discardable item, any
+ % following glue (such as a \parskip) would be a breakpoint. For example:
+ % @deffn deffn-whatever
+ % @vindex index-whatever
+ % Description.
+ % would allow a break between the index-whatever whatsit
+ % and the "Description." paragraph.
+ \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi
+ \else
+ % On the other hand, if we had a nonzero \lastskip,
+ % this make-up glue would be preceded by a non-discardable item
+ % (the whatsit from the \write), so we must insert a \nobreak.
+ \nobreak\vskip\whatsitskip
+ \fi
+\fi}
+
+% The index entry written in the file actually looks like
+% \entry {sortstring}{page}{topic}
+% or
+% \entry {sortstring}{page}{topic}{subtopic}
+% The texindex program reads in these files and writes files
+% containing these kinds of lines:
+% \initial {c}
+% before the first topic whose initial is c
+% \entry {topic}{pagelist}
+% for a topic that is used without subtopics
+% \primary {topic}
+% for the beginning of a topic that is used with subtopics
+% \secondary {subtopic}{pagelist}
+% for each subtopic.
+
+% Define the user-accessible indexing commands
+% @findex, @vindex, @kindex, @cindex.
+
+\def\findex {\fnindex}
+\def\kindex {\kyindex}
+\def\cindex {\cpindex}
+\def\vindex {\vrindex}
+\def\tindex {\tpindex}
+\def\pindex {\pgindex}
+
+\def\cindexsub {\begingroup\obeylines\cindexsub}
+{\obeylines %
+\gdef\cindexsub "#1" #2^^M{\endgroup %
+\dosubind{cp}{#2}{#1}}}
+
+% Define the macros used in formatting output of the sorted index material.
+
+% @printindex causes a particular index (the ??s file) to get printed.
+% It does not print any chapter heading (usually an @unnumbered).
+%
+\parseargdef\printindex{\begingroup
+ \dobreak \chapheadingskip{10000}%
+ %
+ \smallfonts \rm
+ \tolerance = 9500
+ \plainfrenchspacing
+ \everypar = {}% don't want the \kern\-parindent from indentation suppression.
+ %
+ % See if the index file exists and is nonempty.
+ % Change catcode of @ here so that if the index file contains
+ % \initial {@}
+ % as its first line, TeX doesn't complain about mismatched braces
+ % (because it thinks @} is a control sequence).
+ \catcode`\@ = 12
+ % See comment in \requireopenindexfile.
+ \def\indexname{#1}\ifx\indexname\indexisfl\def\indexname{f1}\fi
+ \openin 1 \jobname.\indexname s
+ \ifeof 1
+ % \enddoublecolumns gets confused if there is no text in the index,
+ % and it loses the chapter title and the aux file entries for the
+ % index. The easiest way to prevent this problem is to make sure
+ % there is some text.
+ \putwordIndexNonexistent
+ \typeout{No file \jobname.\indexname s.}%
+ \else
+ \catcode`\\ = 0
+ %
+ % If the index file exists but is empty, then \openin leaves \ifeof
+ % false. We have to make TeX try to read something from the file, so
+ % it can discover if there is anything in it.
+ \read 1 to \thisline
+ \ifeof 1
+ \putwordIndexIsEmpty
+ \else
+ % Index files are almost Texinfo source, but we use \ as the escape
+ % character. It would be better to use @, but that's too big a change
+ % to make right now.
+ \def\indexbackslash{\ttbackslash}%
+ \let\indexlbrace\{ % Likewise, set these sequences for braces
+ \let\indexrbrace\} % used in the sort key.
+ \begindoublecolumns
+ \let\dotheinsertentrybox\dotheinsertentryboxwithpenalty
+ %
+ % Read input from the index file line by line.
+ \loopdo
+ \ifeof1 \else
+ \read 1 to \nextline
+ \fi
+ %
+ \indexinputprocessing
+ \thisline
+ %
+ \ifeof1\else
+ \let\thisline\nextline
+ \repeat
+ %%
+ \enddoublecolumns
+ \fi
+ \fi
+ \closein 1
+\endgroup}
+\def\loopdo#1\repeat{\def\body{#1}\loopdoxxx}
+\def\loopdoxxx{\let\next=\relax\body\let\next=\loopdoxxx\fi\next}
+
+\def\indexinputprocessing{%
+ \ifeof1
+ \let\firsttoken\relax
+ \else
+ \edef\act{\gdef\noexpand\firsttoken{\getfirsttoken\nextline}}%
+ \act
+ \fi
+}
+\def\getfirsttoken#1{\expandafter\getfirsttokenx#1\endfirsttoken}
+\long\def\getfirsttokenx#1#2\endfirsttoken{\noexpand#1}
+
+
+% These macros are used by the sorted index file itself.
+% Change them to control the appearance of the index.
+
+{\catcode`\/=13 \catcode`\-=13 \catcode`\^=13 \catcode`\~=13 \catcode`\_=13
+\catcode`\|=13 \catcode`\<=13 \catcode`\>=13 \catcode`\+=13 \catcode`\"=13
+\catcode`\$=3
+\gdef\initialglyphs{%
+ % Some changes for non-alphabetic characters. Using the glyphs from the
+ % math fonts looks more consistent than the typewriter font used elsewhere
+ % for these characters.
+ \def\indexbackslash{\math{\backslash}}%
+ \let\\=\indexbackslash
+ %
+ % Can't get bold backslash so don't use bold forward slash
+ \catcode`\/=13
+ \def/{{\secrmnotbold \normalslash}}%
+ \def-{{\normaldash\normaldash}}% en dash `--'
+ \def^{{\chapbf \normalcaret}}%
+ \def~{{\chapbf \normaltilde}}%
+ \def\_{%
+ \leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }%
+ \def|{$\vert$}%
+ \def<{$\less$}%
+ \def>{$\gtr$}%
+ \def+{$\normalplus$}%
+}}
+
+\def\initial{%
+ \bgroup
+ \initialglyphs
+ \initialx
+}
+
+\def\initialx#1{%
+ % Remove any glue we may have, we'll be inserting our own.
+ \removelastskip
+ %
+ % We like breaks before the index initials, so insert a bonus.
+ % The glue before the bonus allows a little bit of space at the
+ % bottom of a column to reduce an increase in inter-line spacing.
+ \nobreak
+ \vskip 0pt plus 5\baselineskip
+ \penalty -300
+ \vskip 0pt plus -5\baselineskip
+ %
+ % Typeset the initial. Making this add up to a whole number of
+ % baselineskips increases the chance of the dots lining up from column
+ % to column. It still won't often be perfect, because of the stretch
+ % we need before each entry, but it's better.
+ %
+ % No shrink because it confuses \balancecolumns.
+ \vskip 1.67\baselineskip plus 1\baselineskip
+ \leftline{\secfonts \kern-0.05em \secbf #1}%
+ % \secfonts is inside the argument of \leftline so that the change of
+ % \baselineskip will not affect any glue inserted before the vbox that
+ % \leftline creates.
+ % Do our best not to break after the initial.
+ \nobreak
+ \vskip .33\baselineskip plus .1\baselineskip
+ \egroup % \initialglyphs
+}
+
+\newdimen\entryrightmargin
+\entryrightmargin=0pt
+
+% \entry typesets a paragraph consisting of the text (#1), dot leaders, and
+% then page number (#2) flushed to the right margin. It is used for index
+% and table of contents entries. The paragraph is indented by \leftskip.
+%
+\def\entry{%
+ \begingroup
+ %
+ % For pdfTeX and XeTeX.
+ % The redefinition of \domark stops marks being added in \pdflink to
+ % preserve coloured links across page boundaries. Otherwise the marks
+ % would get in the way of \lastbox in \insertentrybox.
+ \let\domark\relax
+ %
+ % Start a new paragraph if necessary, so our assignments below can't
+ % affect previous text.
+ \par
+ %
+ % No extra space above this paragraph.
+ \parskip = 0in
+ %
+ % When reading the text of entry, convert explicit line breaks
+ % from @* into spaces. The user might give these in long section
+ % titles, for instance.
+ \def\*{\unskip\space\ignorespaces}%
+ \def\entrybreak{\hfil\break}% An undocumented command
+ %
+ % Swallow the left brace of the text (first parameter):
+ \afterassignment\doentry
+ \let\temp =
+}
+\def\entrybreak{\unskip\space\ignorespaces}%
+\def\doentry{%
+ % Save the text of the entry
+ \global\setbox\boxA=\hbox\bgroup
+ \bgroup % Instead of the swallowed brace.
+ \noindent
+ \aftergroup\finishentry
+ % And now comes the text of the entry.
+ % Not absorbing as a macro argument reduces the chance of problems
+ % with catcodes occurring.
+}
+{\catcode`\@=11
+\gdef\finishentry#1{%
+ \egroup % end box A
+ \dimen@ = \wd\boxA % Length of text of entry
+ \global\setbox\boxA=\hbox\bgroup\unhbox\boxA
+ % #1 is the page number.
+ %
+ % Get the width of the page numbers, and only use
+ % leaders if they are present.
+ \global\setbox\boxB = \hbox{#1}%
+ \ifdim\wd\boxB = 0pt
+ \null\nobreak\hfill\ %
+ \else
+ %
+ \null\nobreak\indexdotfill % Have leaders before the page number.
+ %
+ \ifpdf
+ \pdfgettoks#1.%
+ \hskip\skip\thinshrinkable\the\toksA
+ \else
+ \ifx\XeTeXrevision\thisisundefined
+ \hskip\skip\thinshrinkable #1%
+ \else
+ \pdfgettoks#1.%
+ \hskip\skip\thinshrinkable\the\toksA
+ \fi
+ \fi
+ \fi
+ \egroup % end \boxA
+ \ifdim\wd\boxB = 0pt
+ \global\setbox\entrybox=\vbox{\unhbox\boxA}%
+ \else
+ \global\setbox\entrybox=\vbox\bgroup
+ % We want the text of the entries to be aligned to the left, and the
+ % page numbers to be aligned to the right.
+ %
+ \parindent = 0pt
+ \advance\leftskip by 0pt plus 1fil
+ \advance\leftskip by 0pt plus -1fill
+ \rightskip = 0pt plus -1fil
+ \advance\rightskip by 0pt plus 1fill
+ % Cause last line, which could consist of page numbers on their own
+ % if the list of page numbers is long, to be aligned to the right.
+ \parfillskip=0pt plus -1fill
+ %
+ \advance\rightskip by \entryrightmargin
+ % Determine how far we can stretch into the margin.
+ % This allows, e.g., "Appendix H GNU Free Documentation License" to
+ % fit on one line in @letterpaper format.
+ \ifdim\entryrightmargin>2.1em
+ \dimen@i=2.1em
+ \else
+ \dimen@i=0em
+ \fi
+ \advance \parfillskip by 0pt minus 1\dimen@i
+ %
+ \dimen@ii = \hsize
+ \advance\dimen@ii by -1\leftskip
+ \advance\dimen@ii by -1\entryrightmargin
+ \advance\dimen@ii by 1\dimen@i
+ \ifdim\wd\boxA > \dimen@ii % If the entry doesn't fit in one line
+ \ifdim\dimen@ > 0.8\dimen@ii % due to long index text
+ % Try to split the text roughly evenly. \dimen@ will be the length of
+ % the first line.
+ \dimen@ = 0.7\dimen@
+ \dimen@ii = \hsize
+ \ifnum\dimen@>\dimen@ii
+ % If the entry is too long (for example, if it needs more than
+ % two lines), use all the space in the first line.
+ \dimen@ = \dimen@ii
+ \fi
+ \advance\leftskip by 0pt plus 1fill % ragged right
+ \advance \dimen@ by 1\rightskip
+ \parshape = 2 0pt \dimen@ 0em \dimen@ii
+ % Ideally we'd add a finite glue at the end of the first line only,
+ % instead of using \parshape with explicit line lengths, but TeX
+ % doesn't seem to provide a way to do such a thing.
+ %
+ % Indent all lines but the first one.
+ \advance\leftskip by 1em
+ \advance\parindent by -1em
+ \fi\fi
+ \indent % start paragraph
+ \unhbox\boxA
+ %
+ % Do not prefer a separate line ending with a hyphen to fewer lines.
+ \finalhyphendemerits = 0
+ %
+ % Word spacing - no stretch
+ \spaceskip=\fontdimen2\font minus \fontdimen4\font
+ %
+ \linepenalty=1000 % Discourage line breaks.
+ \hyphenpenalty=5000 % Discourage hyphenation.
+ %
+ \par % format the paragraph
+ \egroup % The \vbox
+ \fi
+ \endgroup
+ \dotheinsertentrybox
+}}
+
+\newskip\thinshrinkable
+\skip\thinshrinkable=.15em minus .15em
+
+\newbox\entrybox
+\def\insertentrybox{%
+ \ourunvbox\entrybox
+}
+
+% default definition
+\let\dotheinsertentrybox\insertentrybox
+
+% Use \lastbox to take apart vbox box by box, and add each sub-box
+% to the current vertical list.
+\def\ourunvbox#1{%
+\bgroup % for local binding of \delayedbox
+ % Remove the last box from box #1
+ \global\setbox#1=\vbox{%
+ \unvbox#1%
+ \unskip % remove any glue
+ \unpenalty
+ \global\setbox\interbox=\lastbox
+ }%
+ \setbox\delayedbox=\box\interbox
+ \ifdim\ht#1=0pt\else
+ \ourunvbox#1 % Repeat on what's left of the box
+ \nobreak
+ \fi
+ \box\delayedbox
+\egroup
+}
+\newbox\delayedbox
+\newbox\interbox
+
+% Used from \printindex. \firsttoken should be the first token
+% after the \entry. If it's not another \entry, we are at the last
+% line of a group of index entries, so insert a penalty to discourage
+% widowed index entries.
+\def\dotheinsertentryboxwithpenalty{%
+ \ifx\firsttoken\isentry
+ \else
+ \penalty 9000
+ \fi
+ \insertentrybox
+}
+\def\isentry{\entry}%
+
+% Like plain.tex's \dotfill, except uses up at least 1 em.
+% The filll stretch here overpowers both the fil and fill stretch to push
+% the page number to the right.
+\def\indexdotfill{\cleaders
+ \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1filll}
+
+
+\def\primary #1{\line{#1\hfil}}
+
+\newskip\secondaryindent \secondaryindent=0.5cm
+\def\secondary#1#2{{%
+ \parfillskip=0in
+ \parskip=0in
+ \hangindent=1in
+ \hangafter=1
+ \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill
+ \ifpdf
+ \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
+ \else
+ \ifx\XeTeXrevision\thisisundefined
+ #2
+ \else
+ \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
+ \fi
+ \fi
+ \par
+}}
+
+% Define two-column mode, which we use to typeset indexes.
+% Adapted from the TeXbook, page 416, which is to say,
+% the manmac.tex format used to print the TeXbook itself.
+\catcode`\@=11 % private names
+
+\newbox\partialpage
+\newdimen\doublecolumnhsize
+
+% Use inside an output routine to save \topmark and \firstmark
+\def\savemarks{%
+ \global\savedtopmark=\expandafter{\topmark }%
+ \global\savedfirstmark=\expandafter{\firstmark }%
+}
+\newtoks\savedtopmark
+\newtoks\savedfirstmark
+
+% Set \topmark and \firstmark for next time \output runs.
+% Can't be run from withinside \output (because any material
+% added while an output routine is active, including
+% penalties, is saved for after it finishes). The page so far
+% should be empty, otherwise what's on it will be thrown away.
+\def\restoremarks{%
+ \mark{\the\savedtopmark}%
+ \bgroup\output = {%
+ \setbox\dummybox=\box\PAGE
+ }abc\eject\egroup
+ % "abc" because output routine doesn't fire for a completely empty page.
+ \mark{\the\savedfirstmark}%
+}
+
+\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
+ % If not much space left on page, start a new page.
+ \ifdim\pagetotal>0.8\vsize\vfill\eject\fi
+ %
+ % Grab any single-column material above us.
+ \output = {%
+ %
+ % Here is a possibility not foreseen in manmac: if we accumulate a
+ % whole lot of material, we might end up calling this \output
+ % routine twice in a row (see the doublecol-lose test, which is
+ % essentially a couple of indexes with @setchapternewpage off). In
+ % that case we just ship out what is in \partialpage with the normal
+ % output routine. Generally, \partialpage will be empty when this
+ % runs and this will be a no-op. See the indexspread.tex test case.
+ \ifvoid\partialpage \else
+ \onepageout{\pagecontents\partialpage}%
+ \fi
+ %
+ \global\setbox\partialpage = \vbox{%
+ % Unvbox the main output page.
+ \unvbox\PAGE
+ \kern-\topskip \kern\baselineskip
+ }%
+ \savemarks
+ }%
+ \eject % run that output routine to set \partialpage
+ \restoremarks
+ %
+ % We recover the two marks that the last output routine saved in order
+ % to propagate the information in marks added around a chapter heading,
+ % which could be otherwise be lost by the time the final page is output.
+ %
+ %
+ % Use the double-column output routine for subsequent pages.
+ \output = {\doublecolumnout}%
+ %
+ % Change the page size parameters. We could do this once outside this
+ % routine, in each of @smallbook, @afourpaper, and the default 8.5x11
+ % format, but then we repeat the same computation. Repeating a couple
+ % of assignments once per index is clearly meaningless for the
+ % execution time, so we may as well do it in one place.
+ %
+ % First we halve the line length, less a little for the gutter between
+ % the columns. We compute the gutter based on the line length, so it
+ % changes automatically with the paper format. The magic constant
+ % below is chosen so that the gutter has the same value (well, +-<1pt)
+ % as it did when we hard-coded it.
+ %
+ % We put the result in a separate register, \doublecolumhsize, so we
+ % can restore it in \pagesofar, after \hsize itself has (potentially)
+ % been clobbered.
+ %
+ \doublecolumnhsize = \hsize
+ \advance\doublecolumnhsize by -.04154\hsize
+ \divide\doublecolumnhsize by 2
+ \hsize = \doublecolumnhsize
+ %
+ % Double the \vsize as well.
+ \advance\vsize by -\ht\partialpage
+ \vsize = 2\vsize
+ %
+ % For the benefit of balancing columns
+ \advance\baselineskip by 0pt plus 0.5pt
+}
+
+% The double-column output routine for all double-column pages except
+% the last, which is done by \balancecolumns.
+%
+\def\doublecolumnout{%
+ %
+ \splittopskip=\topskip \splitmaxdepth=\maxdepth
+ % Get the available space for the double columns -- the normal
+ % (undoubled) page height minus any material left over from the
+ % previous page.
+ \dimen@ = \vsize
+ \divide\dimen@ by 2
+ %
+ % box0 will be the left-hand column, box2 the right.
+ \setbox0=\vsplit\PAGE to\dimen@ \setbox2=\vsplit\PAGE to\dimen@
+ \global\advance\vsize by 2\ht\partialpage
+ \onepageout\pagesofar
+ \unvbox\PAGE
+ \penalty\outputpenalty
+}
+%
+% Re-output the contents of the output page -- any previous material,
+% followed by the two boxes we just split, in box0 and box2.
+\def\pagesofar{%
+ \unvbox\partialpage
+ %
+ \hsize = \doublecolumnhsize
+ \wd0=\hsize \wd2=\hsize
+ \hbox to\txipagewidth{\box0\hfil\box2}%
+}
+
+
+% Finished with with double columns.
+\def\enddoublecolumns{%
+ % The following penalty ensures that the page builder is exercised
+ % _before_ we change the output routine. This is necessary in the
+ % following situation:
+ %
+ % The last section of the index consists only of a single entry.
+ % Before this section, \pagetotal is less than \pagegoal, so no
+ % break occurs before the last section starts. However, the last
+ % section, consisting of \initial and the single \entry, does not
+ % fit on the page and has to be broken off. Without the following
+ % penalty the page builder will not be exercised until \eject
+ % below, and by that time we'll already have changed the output
+ % routine to the \balancecolumns version, so the next-to-last
+ % double-column page will be processed with \balancecolumns, which
+ % is wrong: The two columns will go to the main vertical list, with
+ % the broken-off section in the recent contributions. As soon as
+ % the output routine finishes, TeX starts reconsidering the page
+ % break. The two columns and the broken-off section both fit on the
+ % page, because the two columns now take up only half of the page
+ % goal. When TeX sees \eject from below which follows the final
+ % section, it invokes the new output routine that we've set after
+ % \balancecolumns below; \onepageout will try to fit the two columns
+ % and the final section into the vbox of \txipageheight (see
+ % \pagebody), causing an overfull box.
+ %
+ % Note that glue won't work here, because glue does not exercise the
+ % page builder, unlike penalties (see The TeXbook, pp. 280-281).
+ \penalty0
+ %
+ \output = {%
+ % Split the last of the double-column material.
+ \savemarks
+ \balancecolumns
+ %
+ % Having called \balancecolumns once, we do not
+ % want to call it again. Therefore, reset \output to its normal
+ % definition right away.
+ \global\output = {\onepageout{\pagecontents\PAGE}}%
+ }%
+ \eject
+ \endgroup % started in \begindoublecolumns
+ \restoremarks
+ % Leave the double-column material on the current page, no automatic
+ % page break.
+ \box\balancedcolumns
+ %
+ % \pagegoal was set to the doubled \vsize above, since we restarted
+ % the current page. We're now back to normal single-column
+ % typesetting, so reset \pagegoal to the normal \vsize.
+ \global\vsize = \txipageheight %
+ \pagegoal = \txipageheight %
+}
+\newbox\balancedcolumns
+\setbox\balancedcolumns=\vbox{shouldnt see this}%
+%
+% Only called for the last of the double column material. \doublecolumnout
+% does the others.
+\def\balancecolumns{%
+ \setbox0 = \vbox{\unvbox\PAGE}% like \box255 but more efficient, see p.120.
+ \dimen@ = \ht0
+ \advance\dimen@ by \topskip
+ \advance\dimen@ by-\baselineskip
+ \ifdim\dimen@<5\baselineskip
+ % Don't split a short final column in two.
+ \setbox2=\vbox{}%
+ \else
+ \divide\dimen@ by 2 % target to split to
+ \dimen@ii = \dimen@
+ \splittopskip = \topskip
+ % Loop until left column is at least as high as the right column.
+ {%
+ \vbadness = 10000
+ \loop
+ \global\setbox3 = \copy0
+ \global\setbox1 = \vsplit3 to \dimen@
+ \ifdim\ht1<\ht3
+ \global\advance\dimen@ by 1pt
+ \repeat
+ }%
+ % Now the left column is in box 1, and the right column in box 3.
+ % Check whether the left column has come out higher than the page itself.
+ % (Note that we have doubled \vsize for the double columns, so
+ % the actual height of the page is 0.5\vsize).
+ \ifdim2\ht1>\vsize
+ % Just split the last of the double column material roughly in half.
+ \setbox2=\box0
+ \setbox0 = \vsplit2 to \dimen@ii
+ \setbox0=\vbox to \dimen@ii {\unvbox0\vfill}%
+ \setbox2=\vbox to \dimen@ii {\unvbox2\vfill}%
+ \else
+ % Compare the heights of the two columns.
+ \ifdim4\ht1>5\ht3
+ % Column heights are too different, so don't make their bottoms
+ % flush with each other.
+ \setbox2=\vbox to \ht1 {\unvbox3\vfill}%
+ \setbox0=\vbox to \ht1 {\unvbox1\vfill}%
+ \else
+ % Make column bottoms flush with each other.
+ \setbox2=\vbox to\ht1{\unvbox3\unskip}%
+ \setbox0=\vbox to\ht1{\unvbox1\unskip}%
+ \fi
+ \fi
+ \fi
+ %
+ \global\setbox\balancedcolumns=\vbox{\pagesofar}%
+}
+\catcode`\@ = \other
+
+
+\message{sectioning,}
+% Chapters, sections, etc.
+
+% Let's start with @part.
+\outer\parseargdef\part{\partzzz{#1}}
+\def\partzzz#1{%
+ \chapoddpage
+ \null
+ \vskip.3\vsize % move it down on the page a bit
+ \begingroup
+ \noindent \titlefonts\rm #1\par % the text
+ \let\lastnode=\empty % no node to associate with
+ \writetocentry{part}{#1}{}% but put it in the toc
+ \headingsoff % no headline or footline on the part page
+ % This outputs a mark at the end of the page that clears \thischapter
+ % and \thissection, as is done in \startcontents.
+ \let\pchapsepmacro\relax
+ \chapmacro{}{Yomitfromtoc}{}%
+ \chapoddpage
+ \endgroup
+}
+
+% \unnumberedno is an oxymoron. But we count the unnumbered
+% sections so that we can refer to them unambiguously in the pdf
+% outlines by their "section number". We avoid collisions with chapter
+% numbers by starting them at 10000. (If a document ever has 10000
+% chapters, we're in trouble anyway, I'm sure.)
+\newcount\unnumberedno \unnumberedno = 10000
+\newcount\chapno
+\newcount\secno \secno=0
+\newcount\subsecno \subsecno=0
+\newcount\subsubsecno \subsubsecno=0
+
+% This counter is funny since it counts through charcodes of letters A, B, ...
+\newcount\appendixno \appendixno = `\@
+%
+% \def\appendixletter{\char\the\appendixno}
+% We do the following ugly conditional instead of the above simple
+% construct for the sake of pdftex, which needs the actual
+% letter in the expansion, not just typeset.
+%
+\def\appendixletter{%
+ \ifnum\appendixno=`A A%
+ \else\ifnum\appendixno=`B B%
+ \else\ifnum\appendixno=`C C%
+ \else\ifnum\appendixno=`D D%
+ \else\ifnum\appendixno=`E E%
+ \else\ifnum\appendixno=`F F%
+ \else\ifnum\appendixno=`G G%
+ \else\ifnum\appendixno=`H H%
+ \else\ifnum\appendixno=`I I%
+ \else\ifnum\appendixno=`J J%
+ \else\ifnum\appendixno=`K K%
+ \else\ifnum\appendixno=`L L%
+ \else\ifnum\appendixno=`M M%
+ \else\ifnum\appendixno=`N N%
+ \else\ifnum\appendixno=`O O%
+ \else\ifnum\appendixno=`P P%
+ \else\ifnum\appendixno=`Q Q%
+ \else\ifnum\appendixno=`R R%
+ \else\ifnum\appendixno=`S S%
+ \else\ifnum\appendixno=`T T%
+ \else\ifnum\appendixno=`U U%
+ \else\ifnum\appendixno=`V V%
+ \else\ifnum\appendixno=`W W%
+ \else\ifnum\appendixno=`X X%
+ \else\ifnum\appendixno=`Y Y%
+ \else\ifnum\appendixno=`Z Z%
+ % The \the is necessary, despite appearances, because \appendixletter is
+ % expanded while writing the .toc file. \char\appendixno is not
+ % expandable, thus it is written literally, thus all appendixes come out
+ % with the same letter (or @) in the toc without it.
+ \else\char\the\appendixno
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
+
+% Each @chapter defines these (using marks) as the number+name, number
+% and name of the chapter. Page headings and footings can use
+% these. @section does likewise.
+\def\thischapter{}
+\def\thischapternum{}
+\def\thischaptername{}
+\def\thissection{}
+\def\thissectionnum{}
+\def\thissectionname{}
+
+\newcount\absseclevel % used to calculate proper heading level
+\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count
+
+% @raisesections: treat @section as chapter, @subsection as section, etc.
+\def\raisesections{\global\advance\secbase by -1}
+\let\up=\raisesections % original BFox name
+
+% @lowersections: treat @chapter as section, @section as subsection, etc.
+\def\lowersections{\global\advance\secbase by 1}
+\let\down=\lowersections % original BFox name
+
+% we only have subsub.
+\chardef\maxseclevel = 3
+%
+% A numbered section within an unnumbered changes to unnumbered too.
+% To achieve this, remember the "biggest" unnum. sec. we are currently in:
+\chardef\unnlevel = \maxseclevel
+%
+% Trace whether the current chapter is an appendix or not:
+% \chapheadtype is "N" or "A", unnumbered chapters are ignored.
+\def\chapheadtype{N}
+
+% Choose a heading macro
+% #1 is heading type
+% #2 is heading level
+% #3 is text for heading
+\def\genhead#1#2#3{%
+ % Compute the abs. sec. level:
+ \absseclevel=#2
+ \advance\absseclevel by \secbase
+ % Make sure \absseclevel doesn't fall outside the range:
+ \ifnum \absseclevel < 0
+ \absseclevel = 0
+ \else
+ \ifnum \absseclevel > 3
+ \absseclevel = 3
+ \fi
+ \fi
+ % The heading type:
+ \def\headtype{#1}%
+ \if \headtype U%
+ \ifnum \absseclevel < \unnlevel
+ \chardef\unnlevel = \absseclevel
+ \fi
+ \else
+ % Check for appendix sections:
+ \ifnum \absseclevel = 0
+ \edef\chapheadtype{\headtype}%
+ \else
+ \if \headtype A\if \chapheadtype N%
+ \errmessage{@appendix... within a non-appendix chapter}%
+ \fi\fi
+ \fi
+ % Check for numbered within unnumbered:
+ \ifnum \absseclevel > \unnlevel
+ \def\headtype{U}%
+ \else
+ \chardef\unnlevel = 3
+ \fi
+ \fi
+ % Now print the heading:
+ \if \headtype U%
+ \ifcase\absseclevel
+ \unnumberedzzz{#3}%
+ \or \unnumberedseczzz{#3}%
+ \or \unnumberedsubseczzz{#3}%
+ \or \unnumberedsubsubseczzz{#3}%
+ \fi
+ \else
+ \if \headtype A%
+ \ifcase\absseclevel
+ \appendixzzz{#3}%
+ \or \appendixsectionzzz{#3}%
+ \or \appendixsubseczzz{#3}%
+ \or \appendixsubsubseczzz{#3}%
+ \fi
+ \else
+ \ifcase\absseclevel
+ \chapterzzz{#3}%
+ \or \seczzz{#3}%
+ \or \numberedsubseczzz{#3}%
+ \or \numberedsubsubseczzz{#3}%
+ \fi
+ \fi
+ \fi
+ \suppressfirstparagraphindent
+}
+
+% an interface:
+\def\numhead{\genhead N}
+\def\apphead{\genhead A}
+\def\unnmhead{\genhead U}
+
+% @chapter, @appendix, @unnumbered. Increment top-level counter, reset
+% all lower-level sectioning counters to zero.
+%
+% Also set \chaplevelprefix, which we prepend to @float sequence numbers
+% (e.g., figures), q.v. By default (before any chapter), that is empty.
+\let\chaplevelprefix = \empty
+%
+\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz
+\def\chapterzzz#1{%
+ % section resetting is \global in case the chapter is in a group, such
+ % as an @include file.
+ \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+ \global\advance\chapno by 1
+ %
+ % Used for \float.
+ \gdef\chaplevelprefix{\the\chapno.}%
+ \resetallfloatnos
+ %
+ % \putwordChapter can contain complex things in translations.
+ \toks0=\expandafter{\putwordChapter}%
+ \message{\the\toks0 \space \the\chapno}%
+ %
+ % Write the actual heading.
+ \chapmacro{#1}{Ynumbered}{\the\chapno}%
+ %
+ % So @section and the like are numbered underneath this chapter.
+ \global\let\section = \numberedsec
+ \global\let\subsection = \numberedsubsec
+ \global\let\subsubsection = \numberedsubsubsec
+}
+
+\outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz
+%
+\def\appendixzzz#1{%
+ \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+ \global\advance\appendixno by 1
+ \gdef\chaplevelprefix{\appendixletter.}%
+ \resetallfloatnos
+ %
+ % \putwordAppendix can contain complex things in translations.
+ \toks0=\expandafter{\putwordAppendix}%
+ \message{\the\toks0 \space \appendixletter}%
+ %
+ \chapmacro{#1}{Yappendix}{\appendixletter}%
+ %
+ \global\let\section = \appendixsec
+ \global\let\subsection = \appendixsubsec
+ \global\let\subsubsection = \appendixsubsubsec
+}
+
+% normally unnmhead0 calls unnumberedzzz:
+\outer\parseargdef\unnumbered{\unnmhead0{#1}}
+\def\unnumberedzzz#1{%
+ \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+ \global\advance\unnumberedno by 1
+ %
+ % Since an unnumbered has no number, no prefix for figures.
+ \global\let\chaplevelprefix = \empty
+ \resetallfloatnos
+ %
+ % This used to be simply \message{#1}, but TeX fully expands the
+ % argument to \message. Therefore, if #1 contained @-commands, TeX
+ % expanded them. For example, in `@unnumbered The @cite{Book}', TeX
+ % expanded @cite (which turns out to cause errors because \cite is meant
+ % to be executed, not expanded).
+ %
+ % Anyway, we don't want the fully-expanded definition of @cite to appear
+ % as a result of the \message, we just want `@cite' itself. We use
+ % \the<toks register> to achieve this: TeX expands \the<toks> only once,
+ % simply yielding the contents of <toks register>. (We also do this for
+ % the toc entries.)
+ \toks0 = {#1}%
+ \message{(\the\toks0)}%
+ %
+ \chapmacro{#1}{Ynothing}{\the\unnumberedno}%
+ %
+ \global\let\section = \unnumberedsec
+ \global\let\subsection = \unnumberedsubsec
+ \global\let\subsubsection = \unnumberedsubsubsec
+}
+
+% @centerchap is like @unnumbered, but the heading is centered.
+\outer\parseargdef\centerchap{%
+ \let\centerparametersmaybe = \centerparameters
+ \unnmhead0{#1}%
+ \let\centerparametersmaybe = \relax
+}
+
+% @top is like @unnumbered.
+\let\top\unnumbered
+
+% Sections.
+%
+\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz
+\def\seczzz#1{%
+ \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
+ \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}%
+}
+
+% normally calls appendixsectionzzz:
+\outer\parseargdef\appendixsection{\apphead1{#1}}
+\def\appendixsectionzzz#1{%
+ \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
+ \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}%
+}
+\let\appendixsec\appendixsection
+
+% normally calls unnumberedseczzz:
+\outer\parseargdef\unnumberedsec{\unnmhead1{#1}}
+\def\unnumberedseczzz#1{%
+ \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
+ \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}%
+}
+
+% Subsections.
+%
+% normally calls numberedsubseczzz:
+\outer\parseargdef\numberedsubsec{\numhead2{#1}}
+\def\numberedsubseczzz#1{%
+ \global\subsubsecno=0 \global\advance\subsecno by 1
+ \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}%
+}
+
+% normally calls appendixsubseczzz:
+\outer\parseargdef\appendixsubsec{\apphead2{#1}}
+\def\appendixsubseczzz#1{%
+ \global\subsubsecno=0 \global\advance\subsecno by 1
+ \sectionheading{#1}{subsec}{Yappendix}%
+ {\appendixletter.\the\secno.\the\subsecno}%
+}
+
+% normally calls unnumberedsubseczzz:
+\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}}
+\def\unnumberedsubseczzz#1{%
+ \global\subsubsecno=0 \global\advance\subsecno by 1
+ \sectionheading{#1}{subsec}{Ynothing}%
+ {\the\unnumberedno.\the\secno.\the\subsecno}%
+}
+
+% Subsubsections.
+%
+% normally numberedsubsubseczzz:
+\outer\parseargdef\numberedsubsubsec{\numhead3{#1}}
+\def\numberedsubsubseczzz#1{%
+ \global\advance\subsubsecno by 1
+ \sectionheading{#1}{subsubsec}{Ynumbered}%
+ {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}%
+}
+
+% normally appendixsubsubseczzz:
+\outer\parseargdef\appendixsubsubsec{\apphead3{#1}}
+\def\appendixsubsubseczzz#1{%
+ \global\advance\subsubsecno by 1
+ \sectionheading{#1}{subsubsec}{Yappendix}%
+ {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}%
+}
+
+% normally unnumberedsubsubseczzz:
+\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}}
+\def\unnumberedsubsubseczzz#1{%
+ \global\advance\subsubsecno by 1
+ \sectionheading{#1}{subsubsec}{Ynothing}%
+ {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}%
+}
+
+% These macros control what the section commands do, according
+% to what kind of chapter we are in (ordinary, appendix, or unnumbered).
+% Define them by default for a numbered chapter.
+\let\section = \numberedsec
+\let\subsection = \numberedsubsec
+\let\subsubsection = \numberedsubsubsec
+
+% Define @majorheading, @heading and @subheading
+
+\def\majorheading{%
+ {\advance\chapheadingskip by 10pt \chapbreak }%
+ \parsearg\chapheadingzzz
+}
+
+\def\chapheading{\chapbreak \parsearg\chapheadingzzz}
+\def\chapheadingzzz#1{%
+ \vbox{\chapfonts \raggedtitlesettings #1\par}%
+ \nobreak\bigskip \nobreak
+ \suppressfirstparagraphindent
+}
+
+% @heading, @subheading, @subsubheading.
+\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{}
+ \suppressfirstparagraphindent}
+\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{}
+ \suppressfirstparagraphindent}
+\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{}
+ \suppressfirstparagraphindent}
+
+% These macros generate a chapter, section, etc. heading only
+% (including whitespace, linebreaking, etc. around it),
+% given all the information in convenient, parsed form.
+
+% Args are the skip and penalty (usually negative)
+\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}
+
+% Parameter controlling skip before chapter headings (if needed)
+\newskip\chapheadingskip
+
+% Define plain chapter starts, and page on/off switching for it.
+\def\chapbreak{\dobreak \chapheadingskip {-4000}}
+
+% Start a new page
+\def\chappager{\par\vfill\supereject}
+
+% \chapoddpage - start on an odd page for a new chapter
+% Because \domark is called before \chapoddpage, the filler page will
+% get the headings for the next chapter, which is wrong. But we don't
+% care -- we just disable all headings on the filler page.
+\def\chapoddpage{%
+ \chappager
+ \ifodd\pageno \else
+ \begingroup
+ \headingsoff
+ \null
+ \chappager
+ \endgroup
+ \fi
+}
+
+\parseargdef\setchapternewpage{\csname CHAPPAG#1\endcsname}
+
+\def\CHAPPAGoff{%
+\global\let\contentsalignmacro = \chappager
+\global\let\pchapsepmacro=\chapbreak
+\global\let\pagealignmacro=\chappager}
+
+\def\CHAPPAGon{%
+\global\let\contentsalignmacro = \chappager
+\global\let\pchapsepmacro=\chappager
+\global\let\pagealignmacro=\chappager
+\global\def\HEADINGSon{\HEADINGSsingle}}
+
+\def\CHAPPAGodd{%
+\global\let\contentsalignmacro = \chapoddpage
+\global\let\pchapsepmacro=\chapoddpage
+\global\let\pagealignmacro=\chapoddpage
+\global\def\HEADINGSon{\HEADINGSdouble}}
+
+\CHAPPAGon
+
+% \chapmacro - Chapter opening.
+%
+% #1 is the text, #2 is the section type (Ynumbered, Ynothing,
+% Yappendix, Yomitfromtoc), #3 the chapter number.
+% Not used for @heading series.
+%
+% To test against our argument.
+\def\Ynothingkeyword{Ynothing}
+\def\Yappendixkeyword{Yappendix}
+\def\Yomitfromtockeyword{Yomitfromtoc}
+%
+\def\chapmacro#1#2#3{%
+ \expandafter\ifx\thisenv\titlepage\else
+ \checkenv{}% chapters, etc., should not start inside an environment.
+ \fi
+ % FIXME: \chapmacro is currently called from inside \titlepage when
+ % \setcontentsaftertitlepage to print the "Table of Contents" heading, but
+ % this should probably be done by \sectionheading with an option to print
+ % in chapter size.
+ %
+ % Insert the first mark before the heading break (see notes for \domark).
+ \let\prevchapterdefs=\lastchapterdefs
+ \let\prevsectiondefs=\lastsectiondefs
+ \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}%
+ \gdef\thissection{}}%
+ %
+ \def\temptype{#2}%
+ \ifx\temptype\Ynothingkeyword
+ \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
+ \gdef\thischapter{\thischaptername}}%
+ \else\ifx\temptype\Yomitfromtockeyword
+ \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
+ \gdef\thischapter{}}%
+ \else\ifx\temptype\Yappendixkeyword
+ \toks0={#1}%
+ \xdef\lastchapterdefs{%
+ \gdef\noexpand\thischaptername{\the\toks0}%
+ \gdef\noexpand\thischapternum{\appendixletter}%
+ % \noexpand\putwordAppendix avoids expanding indigestible
+ % commands in some of the translations.
+ \gdef\noexpand\thischapter{\noexpand\putwordAppendix{}
+ \noexpand\thischapternum:
+ \noexpand\thischaptername}%
+ }%
+ \else
+ \toks0={#1}%
+ \xdef\lastchapterdefs{%
+ \gdef\noexpand\thischaptername{\the\toks0}%
+ \gdef\noexpand\thischapternum{\the\chapno}%
+ % \noexpand\putwordChapter avoids expanding indigestible
+ % commands in some of the translations.
+ \gdef\noexpand\thischapter{\noexpand\putwordChapter{}
+ \noexpand\thischapternum:
+ \noexpand\thischaptername}%
+ }%
+ \fi\fi\fi
+ %
+ % Output the mark. Pass it through \safewhatsit, to take care of
+ % the preceding space.
+ \safewhatsit\domark
+ %
+ % Insert the chapter heading break.
+ \pchapsepmacro
+ %
+ % Now the second mark, after the heading break. No break points
+ % between here and the heading.
+ \let\prevchapterdefs=\lastchapterdefs
+ \let\prevsectiondefs=\lastsectiondefs
+ \domark
+ %
+ {%
+ \chapfonts \rm
+ \let\footnote=\errfootnoteheading % give better error message
+ %
+ % Have to define \lastsection before calling \donoderef, because the
+ % xref code eventually uses it. On the other hand, it has to be called
+ % after \pchapsepmacro, or the headline will change too soon.
+ \gdef\lastsection{#1}%
+ %
+ % Only insert the separating space if we have a chapter/appendix
+ % number, and don't print the unnumbered ``number''.
+ \ifx\temptype\Ynothingkeyword
+ \setbox0 = \hbox{}%
+ \def\toctype{unnchap}%
+ \else\ifx\temptype\Yomitfromtockeyword
+ \setbox0 = \hbox{}% contents like unnumbered, but no toc entry
+ \def\toctype{omit}%
+ \else\ifx\temptype\Yappendixkeyword
+ \setbox0 = \hbox{\putwordAppendix{} #3\enspace}%
+ \def\toctype{app}%
+ \else
+ \setbox0 = \hbox{#3\enspace}%
+ \def\toctype{numchap}%
+ \fi\fi\fi
+ %
+ % Write the toc entry for this chapter. Must come before the
+ % \donoderef, because we include the current node name in the toc
+ % entry, and \donoderef resets it to empty.
+ \writetocentry{\toctype}{#1}{#3}%
+ %
+ % For pdftex, we have to write out the node definition (aka, make
+ % the pdfdest) after any page break, but before the actual text has
+ % been typeset. If the destination for the pdf outline is after the
+ % text, then jumping from the outline may wind up with the text not
+ % being visible, for instance under high magnification.
+ \donoderef{#2}%
+ %
+ % Typeset the actual heading.
+ \nobreak % Avoid page breaks at the interline glue.
+ \vbox{\raggedtitlesettings \hangindent=\wd0 \centerparametersmaybe
+ \unhbox0 #1\par}%
+ }%
+ \nobreak\bigskip % no page break after a chapter title
+ \nobreak
+}
+
+% @centerchap -- centered and unnumbered.
+\let\centerparametersmaybe = \relax
+\def\centerparameters{%
+ \advance\rightskip by 3\rightskip
+ \leftskip = \rightskip
+ \parfillskip = 0pt
+}
+
+
+% Section titles. These macros combine the section number parts and
+% call the generic \sectionheading to do the printing.
+%
+\newskip\secheadingskip
+\def\secheadingbreak{\dobreak \secheadingskip{-1000}}
+
+% Subsection titles.
+\newskip\subsecheadingskip
+\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}}
+
+% Subsubsection titles.
+\def\subsubsecheadingskip{\subsecheadingskip}
+\def\subsubsecheadingbreak{\subsecheadingbreak}
+
+
+% Print any size, any type, section title.
+%
+% #1 is the text of the title,
+% #2 is the section level (sec/subsec/subsubsec),
+% #3 is the section type (Ynumbered, Ynothing, Yappendix, Yomitfromtoc),
+% #4 is the section number.
+%
+\def\seckeyword{sec}
+%
+\def\sectionheading#1#2#3#4{%
+ {%
+ \def\sectionlevel{#2}%
+ \def\temptype{#3}%
+ %
+ % It is ok for the @heading series commands to appear inside an
+ % environment (it's been historically allowed, though the logic is
+ % dubious), but not the others.
+ \ifx\temptype\Yomitfromtockeyword\else
+ \checkenv{}% non-@*heading should not be in an environment.
+ \fi
+ \let\footnote=\errfootnoteheading
+ %
+ % Switch to the right set of fonts.
+ \csname #2fonts\endcsname \rm
+ %
+ % Insert first mark before the heading break (see notes for \domark).
+ \let\prevsectiondefs=\lastsectiondefs
+ \ifx\temptype\Ynothingkeyword
+ \ifx\sectionlevel\seckeyword
+ \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}%
+ \gdef\thissection{\thissectionname}}%
+ \fi
+ \else\ifx\temptype\Yomitfromtockeyword
+ % Don't redefine \thissection.
+ \else\ifx\temptype\Yappendixkeyword
+ \ifx\sectionlevel\seckeyword
+ \toks0={#1}%
+ \xdef\lastsectiondefs{%
+ \gdef\noexpand\thissectionname{\the\toks0}%
+ \gdef\noexpand\thissectionnum{#4}%
+ % \noexpand\putwordSection avoids expanding indigestible
+ % commands in some of the translations.
+ \gdef\noexpand\thissection{\noexpand\putwordSection{}
+ \noexpand\thissectionnum:
+ \noexpand\thissectionname}%
+ }%
+ \fi
+ \else
+ \ifx\sectionlevel\seckeyword
+ \toks0={#1}%
+ \xdef\lastsectiondefs{%
+ \gdef\noexpand\thissectionname{\the\toks0}%
+ \gdef\noexpand\thissectionnum{#4}%
+ % \noexpand\putwordSection avoids expanding indigestible
+ % commands in some of the translations.
+ \gdef\noexpand\thissection{\noexpand\putwordSection{}
+ \noexpand\thissectionnum:
+ \noexpand\thissectionname}%
+ }%
+ \fi
+ \fi\fi\fi
+ %
+ % Go into vertical mode. Usually we'll already be there, but we
+ % don't want the following whatsit to end up in a preceding paragraph
+ % if the document didn't happen to have a blank line.
+ \par
+ %
+ % Output the mark. Pass it through \safewhatsit, to take care of
+ % the preceding space.
+ \safewhatsit\domark
+ %
+ % Insert space above the heading.
+ \csname #2headingbreak\endcsname
+ %
+ % Now the second mark, after the heading break. No break points
+ % between here and the heading.
+ \global\let\prevsectiondefs=\lastsectiondefs
+ \domark
+ %
+ % Only insert the space after the number if we have a section number.
+ \ifx\temptype\Ynothingkeyword
+ \setbox0 = \hbox{}%
+ \def\toctype{unn}%
+ \gdef\lastsection{#1}%
+ \else\ifx\temptype\Yomitfromtockeyword
+ % for @headings -- no section number, don't include in toc,
+ % and don't redefine \lastsection.
+ \setbox0 = \hbox{}%
+ \def\toctype{omit}%
+ \let\sectionlevel=\empty
+ \else\ifx\temptype\Yappendixkeyword
+ \setbox0 = \hbox{#4\enspace}%
+ \def\toctype{app}%
+ \gdef\lastsection{#1}%
+ \else
+ \setbox0 = \hbox{#4\enspace}%
+ \def\toctype{num}%
+ \gdef\lastsection{#1}%
+ \fi\fi\fi
+ %
+ % Write the toc entry (before \donoderef). See comments in \chapmacro.
+ \writetocentry{\toctype\sectionlevel}{#1}{#4}%
+ %
+ % Write the node reference (= pdf destination for pdftex).
+ % Again, see comments in \chapmacro.
+ \donoderef{#3}%
+ %
+ % Interline glue will be inserted when the vbox is completed.
+ % That glue will be a valid breakpoint for the page, since it'll be
+ % preceded by a whatsit (usually from the \donoderef, or from the
+ % \writetocentry if there was no node). We don't want to allow that
+ % break, since then the whatsits could end up on page n while the
+ % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000.
+ \nobreak
+ %
+ % Output the actual section heading.
+ \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright
+ \hangindent=\wd0 % zero if no section number
+ \unhbox0 #1}%
+ }%
+ % Add extra space after the heading -- half of whatever came above it.
+ % Don't allow stretch, though.
+ \kern .5 \csname #2headingskip\endcsname
+ %
+ % Do not let the kern be a potential breakpoint, as it would be if it
+ % was followed by glue.
+ \nobreak
+ %
+ % We'll almost certainly start a paragraph next, so don't let that
+ % glue accumulate. (Not a breakpoint because it's preceded by a
+ % discardable item.) However, when a paragraph is not started next
+ % (\startdefun, \cartouche, \center, etc.), this needs to be wiped out
+ % or the negative glue will cause weirdly wrong output, typically
+ % obscuring the section heading with something else.
+ \vskip-\parskip
+ %
+ % This is so the last item on the main vertical list is a known
+ % \penalty > 10000, so \startdefun, etc., can recognize the situation
+ % and do the needful.
+ \penalty 10001
+}
+
+
+\message{toc,}
+% Table of contents.
+\newwrite\tocfile
+
+% Write an entry to the toc file, opening it if necessary.
+% Called from @chapter, etc.
+%
+% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno}
+% We append the current node name (if any) and page number as additional
+% arguments for the \{chap,sec,...}entry macros which will eventually
+% read this. The node name is used in the pdf outlines as the
+% destination to jump to.
+%
+% We open the .toc file for writing here instead of at @setfilename (or
+% any other fixed time) so that @contents can be anywhere in the document.
+% But if #1 is `omit', then we don't do anything. This is used for the
+% table of contents chapter openings themselves.
+%
+\newif\iftocfileopened
+\def\omitkeyword{omit}%
+%
+\def\writetocentry#1#2#3{%
+ \edef\writetoctype{#1}%
+ \ifx\writetoctype\omitkeyword \else
+ \iftocfileopened\else
+ \immediate\openout\tocfile = \jobname.toc
+ \global\tocfileopenedtrue
+ \fi
+ %
+ \iflinks
+ {\atdummies
+ \edef\temp{%
+ \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}%
+ \temp
+ }%
+ \fi
+ \fi
+ %
+ % Tell \shipout to create a pdf destination on each page, if we're
+ % writing pdf. These are used in the table of contents. We can't
+ % just write one on every page because the title pages are numbered
+ % 1 and 2 (the page numbers aren't printed), and so are the first
+ % two pages of the document. Thus, we'd have two destinations named
+ % `1', and two named `2'.
+ \ifpdf
+ \global\pdfmakepagedesttrue
+ \else
+ \ifx\XeTeXrevision\thisisundefined
+ \else
+ \global\pdfmakepagedesttrue
+ \fi
+ \fi
+}
+
+
+% These characters do not print properly in the Computer Modern roman
+% fonts, so we must take special care. This is more or less redundant
+% with the Texinfo input format setup at the end of this file.
+%
+\def\activecatcodes{%
+ \catcode`\"=\active
+ \catcode`\$=\active
+ \catcode`\<=\active
+ \catcode`\>=\active
+ \catcode`\\=\active
+ \catcode`\^=\active
+ \catcode`\_=\active
+ \catcode`\|=\active
+ \catcode`\~=\active
+}
+
+
+% Read the toc file, which is essentially Texinfo input.
+\def\readtocfile{%
+ \setupdatafile
+ \activecatcodes
+ \input \tocreadfilename
+}
+
+\newskip\contentsrightmargin \contentsrightmargin=1in
+\newcount\savepageno
+\newcount\lastnegativepageno \lastnegativepageno = -1
+
+% Prepare to read what we've written to \tocfile.
+%
+\def\startcontents#1{%
+ % If @setchapternewpage on, and @headings double, the contents should
+ % start on an odd page, unlike chapters. Thus, we maintain
+ % \contentsalignmacro in parallel with \pagealignmacro.
+ % From: Torbjorn Granlund <tege@matematik.su.se>
+ \contentsalignmacro
+ \immediate\closeout\tocfile
+ %
+ % Don't need to put `Contents' or `Short Contents' in the headline.
+ % It is abundantly clear what they are.
+ \chapmacro{#1}{Yomitfromtoc}{}%
+ %
+ \savepageno = \pageno
+ \begingroup % Set up to handle contents files properly.
+ \raggedbottom % Worry more about breakpoints than the bottom.
+ \entryrightmargin=\contentsrightmargin % Don't use the full line length.
+ %
+ % Roman numerals for page numbers.
+ \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi
+}
+
+% redefined for the two-volume lispref. We always output on
+% \jobname.toc even if this is redefined.
+%
+\def\tocreadfilename{\jobname.toc}
+
+% Normal (long) toc.
+%
+\def\contents{%
+ \startcontents{\putwordTOC}%
+ \openin 1 \tocreadfilename\space
+ \ifeof 1 \else
+ \readtocfile
+ \fi
+ \vfill \eject
+ \contentsalignmacro % in case @setchapternewpage odd is in effect
+ \ifeof 1 \else
+ \pdfmakeoutlines
+ \fi
+ \closein 1
+ \endgroup
+ \lastnegativepageno = \pageno
+ \global\pageno = \savepageno
+}
+
+% And just the chapters.
+\def\summarycontents{%
+ \startcontents{\putwordShortTOC}%
+ %
+ \let\partentry = \shortpartentry
+ \let\numchapentry = \shortchapentry
+ \let\appentry = \shortchapentry
+ \let\unnchapentry = \shortunnchapentry
+ % We want a true roman here for the page numbers.
+ \secfonts
+ \let\rm=\shortcontrm \let\bf=\shortcontbf
+ \let\sl=\shortcontsl \let\tt=\shortconttt
+ \rm
+ \hyphenpenalty = 10000
+ \advance\baselineskip by 1pt % Open it up a little.
+ \def\numsecentry##1##2##3##4{}
+ \let\appsecentry = \numsecentry
+ \let\unnsecentry = \numsecentry
+ \let\numsubsecentry = \numsecentry
+ \let\appsubsecentry = \numsecentry
+ \let\unnsubsecentry = \numsecentry
+ \let\numsubsubsecentry = \numsecentry
+ \let\appsubsubsecentry = \numsecentry
+ \let\unnsubsubsecentry = \numsecentry
+ \openin 1 \tocreadfilename\space
+ \ifeof 1 \else
+ \readtocfile
+ \fi
+ \closein 1
+ \vfill \eject
+ \contentsalignmacro % in case @setchapternewpage odd is in effect
+ \endgroup
+ \lastnegativepageno = \pageno
+ \global\pageno = \savepageno
+}
+\let\shortcontents = \summarycontents
+
+% Typeset the label for a chapter or appendix for the short contents.
+% The arg is, e.g., `A' for an appendix, or `3' for a chapter.
+%
+\def\shortchaplabel#1{%
+ % This space should be enough, since a single number is .5em, and the
+ % widest letter (M) is 1em, at least in the Computer Modern fonts.
+ % But use \hss just in case.
+ % (This space doesn't include the extra space that gets added after
+ % the label; that gets put in by \shortchapentry above.)
+ %
+ % We'd like to right-justify chapter numbers, but that looks strange
+ % with appendix letters. And right-justifying numbers and
+ % left-justifying letters looks strange when there is less than 10
+ % chapters. Have to read the whole toc once to know how many chapters
+ % there are before deciding ...
+ \hbox to 1em{#1\hss}%
+}
+
+% These macros generate individual entries in the table of contents.
+% The first argument is the chapter or section name.
+% The last argument is the page number.
+% The arguments in between are the chapter number, section number, ...
+
+% Parts, in the main contents. Replace the part number, which doesn't
+% exist, with an empty box. Let's hope all the numbers have the same width.
+% Also ignore the page number, which is conventionally not printed.
+\def\numeralbox{\setbox0=\hbox{8}\hbox to \wd0{\hfil}}
+\def\partentry#1#2#3#4{%
+ % Add stretch and a bonus for breaking the page before the part heading.
+ % This reduces the chance of the page being broken immediately after the
+ % part heading, before a following chapter heading.
+ \vskip 0pt plus 5\baselineskip
+ \penalty-300
+ \vskip 0pt plus -5\baselineskip
+ \dochapentry{\numeralbox\labelspace#1}{}%
+}
+%
+% Parts, in the short toc.
+\def\shortpartentry#1#2#3#4{%
+ \penalty-300
+ \vskip.5\baselineskip plus.15\baselineskip minus.1\baselineskip
+ \shortchapentry{{\bf #1}}{\numeralbox}{}{}%
+}
+
+% Chapters, in the main contents.
+\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}}
+
+% Chapters, in the short toc.
+% See comments in \dochapentry re vbox and related settings.
+\def\shortchapentry#1#2#3#4{%
+ \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}%
+}
+
+% Appendices, in the main contents.
+% Need the word Appendix, and a fixed-size box.
+%
+\def\appendixbox#1{%
+ % We use M since it's probably the widest letter.
+ \setbox0 = \hbox{\putwordAppendix{} M}%
+ \hbox to \wd0{\putwordAppendix{} #1\hss}}
+%
+\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\hskip.7em#1}{#4}}
+
+% Unnumbered chapters.
+\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}}
+\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}}
+
+% Sections.
+\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}}
+\let\appsecentry=\numsecentry
+\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}}
+
+% Subsections.
+\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}}
+\let\appsubsecentry=\numsubsecentry
+\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}}
+
+% And subsubsections.
+\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}}
+\let\appsubsubsecentry=\numsubsubsecentry
+\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}}
+
+% This parameter controls the indentation of the various levels.
+% Same as \defaultparindent.
+\newdimen\tocindent \tocindent = 15pt
+
+% Now for the actual typesetting. In all these, #1 is the text and #2 is the
+% page number.
+%
+% If the toc has to be broken over pages, we want it to be at chapters
+% if at all possible; hence the \penalty.
+\def\dochapentry#1#2{%
+ \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
+ \begingroup
+ % Move the page numbers slightly to the right
+ \advance\entryrightmargin by -0.05em
+ \chapentryfonts
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+ \endgroup
+ \nobreak\vskip .25\baselineskip plus.1\baselineskip
+}
+
+\def\dosecentry#1#2{\begingroup
+ \secentryfonts \leftskip=\tocindent
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+\endgroup}
+
+\def\dosubsecentry#1#2{\begingroup
+ \subsecentryfonts \leftskip=2\tocindent
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+\endgroup}
+
+\def\dosubsubsecentry#1#2{\begingroup
+ \subsubsecentryfonts \leftskip=3\tocindent
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+\endgroup}
+
+% We use the same \entry macro as for the index entries.
+\let\tocentry = \entry
+
+% Space between chapter (or whatever) number and the title.
+\def\labelspace{\hskip1em \relax}
+
+\def\dopageno#1{{\rm #1}}
+\def\doshortpageno#1{{\rm #1}}
+
+\def\chapentryfonts{\secfonts \rm}
+\def\secentryfonts{\textfonts}
+\def\subsecentryfonts{\textfonts}
+\def\subsubsecentryfonts{\textfonts}
+
+
+\message{environments,}
+% @foo ... @end foo.
+
+% @tex ... @end tex escapes into raw TeX temporarily.
+% One exception: @ is still an escape character, so that @end tex works.
+% But \@ or @@ will get a plain @ character.
+
+\envdef\tex{%
+ \setupmarkupstyle{tex}%
+ \catcode `\\=0 \catcode `\{=1 \catcode `\}=2
+ \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
+ \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie
+ \catcode `\%=14
+ \catcode `\+=\other
+ \catcode `\"=\other
+ \catcode `\|=\other
+ \catcode `\<=\other
+ \catcode `\>=\other
+ \catcode `\`=\other
+ \catcode `\'=\other
+ %
+ % ' is active in math mode (mathcode"8000). So reset it, and all our
+ % other math active characters (just in case), to plain's definitions.
+ \mathactive
+ %
+ % Inverse of the list at the beginning of the file.
+ \let\b=\ptexb
+ \let\bullet=\ptexbullet
+ \let\c=\ptexc
+ \let\,=\ptexcomma
+ \let\.=\ptexdot
+ \let\dots=\ptexdots
+ \let\equiv=\ptexequiv
+ \let\!=\ptexexclam
+ \let\i=\ptexi
+ \let\indent=\ptexindent
+ \let\noindent=\ptexnoindent
+ \let\{=\ptexlbrace
+ \let\+=\tabalign
+ \let\}=\ptexrbrace
+ \let\/=\ptexslash
+ \let\sp=\ptexsp
+ \let\*=\ptexstar
+ %\let\sup=\ptexsup % do not redefine, we want @sup to work in math mode
+ \let\t=\ptext
+ \expandafter \let\csname top\endcsname=\ptextop % we've made it outer
+ \let\frenchspacing=\plainfrenchspacing
+ %
+ \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
+ \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
+ \def\@{@}%
+}
+% There is no need to define \Etex.
+
+% Define @lisp ... @end lisp.
+% @lisp environment forms a group so it can rebind things,
+% including the definition of @end lisp (which normally is erroneous).
+
+% Amount to narrow the margins by for @lisp.
+\newskip\lispnarrowing \lispnarrowing=0.4in
+
+% This is the definition that ^^M gets inside @lisp, @example, and other
+% such environments. \null is better than a space, since it doesn't
+% have any width.
+\def\lisppar{\null\endgraf}
+
+% This space is always present above and below environments.
+\newskip\envskipamount \envskipamount = 0pt
+
+% Make spacing and below environment symmetrical. We use \parskip here
+% to help in doing that, since in @example-like environments \parskip
+% is reset to zero; thus the \afterenvbreak inserts no space -- but the
+% start of the next paragraph will insert \parskip.
+%
+\def\aboveenvbreak{{%
+ % =10000 instead of <10000 because of a special case in \itemzzz and
+ % \sectionheading, q.v.
+ \ifnum \lastpenalty=10000 \else
+ \advance\envskipamount by \parskip
+ \endgraf
+ \ifdim\lastskip<\envskipamount
+ \removelastskip
+ \ifnum\lastpenalty<10000
+ % Penalize breaking before the environment, because preceding text
+ % often leads into it.
+ \penalty100
+ \fi
+ \vskip\envskipamount
+ \fi
+ \fi
+}}
+
+\def\afterenvbreak{{%
+ % =10000 instead of <10000 because of a special case in \itemzzz and
+ % \sectionheading, q.v.
+ \ifnum \lastpenalty=10000 \else
+ \advance\envskipamount by \parskip
+ \endgraf
+ \ifdim\lastskip<\envskipamount
+ \removelastskip
+ % it's not a good place to break if the last penalty was \nobreak
+ % or better ...
+ \ifnum\lastpenalty<10000 \penalty-50 \fi
+ \vskip\envskipamount
+ \fi
+ \fi
+}}
+
+% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will
+% also clear it, so that its embedded environments do the narrowing again.
+\let\nonarrowing=\relax
+
+% @cartouche ... @end cartouche: draw rectangle w/rounded corners around
+% environment contents.
+\font\circle=lcircle10
+\newdimen\circthick
+\newdimen\cartouter\newdimen\cartinner
+\newskip\normbskip\newskip\normpskip\newskip\normlskip
+\circthick=\fontdimen8\circle
+%
+\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth
+\def\ctr{{\hskip 6pt\circle\char'010}}
+\def\cbl{{\circle\char'012\hskip -6pt}}
+\def\cbr{{\hskip 6pt\circle\char'011}}
+\def\carttop{\hbox to \cartouter{\hskip\lskip
+ \ctl\leaders\hrule height\circthick\hfil\ctr
+ \hskip\rskip}}
+\def\cartbot{\hbox to \cartouter{\hskip\lskip
+ \cbl\leaders\hrule height\circthick\hfil\cbr
+ \hskip\rskip}}
+%
+\newskip\lskip\newskip\rskip
+
+\envdef\cartouche{%
+ \ifhmode\par\fi % can't be in the midst of a paragraph.
+ \startsavinginserts
+ \lskip=\leftskip \rskip=\rightskip
+ \leftskip=0pt\rightskip=0pt % we want these *outside*.
+ \cartinner=\hsize \advance\cartinner by-\lskip
+ \advance\cartinner by-\rskip
+ \cartouter=\hsize
+ \advance\cartouter by 18.4pt % allow for 3pt kerns on either
+ % side, and for 6pt waste from
+ % each corner char, and rule thickness
+ \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
+ %
+ % If this cartouche directly follows a sectioning command, we need the
+ % \parskip glue (backspaced over by default) or the cartouche can
+ % collide with the section heading.
+ \ifnum\lastpenalty>10000 \vskip\parskip \penalty\lastpenalty \fi
+ %
+ \setbox\groupbox=\vbox\bgroup
+ \baselineskip=0pt\parskip=0pt\lineskip=0pt
+ \carttop
+ \hbox\bgroup
+ \hskip\lskip
+ \vrule\kern3pt
+ \vbox\bgroup
+ \kern3pt
+ \hsize=\cartinner
+ \baselineskip=\normbskip
+ \lineskip=\normlskip
+ \parskip=\normpskip
+ \vskip -\parskip
+ \comment % For explanation, see the end of def\group.
+}
+\def\Ecartouche{%
+ \ifhmode\par\fi
+ \kern3pt
+ \egroup
+ \kern3pt\vrule
+ \hskip\rskip
+ \egroup
+ \cartbot
+ \egroup
+ \addgroupbox
+ \checkinserts
+}
+
+
+% This macro is called at the beginning of all the @example variants,
+% inside a group.
+\newdimen\nonfillparindent
+\def\nonfillstart{%
+ \aboveenvbreak
+ \ifdim\hfuzz < 12pt \hfuzz = 12pt \fi % Don't be fussy
+ \sepspaces % Make spaces be word-separators rather than space tokens.
+ \let\par = \lisppar % don't ignore blank lines
+ \obeylines % each line of input is a line of output
+ \parskip = 0pt
+ % Turn off paragraph indentation but redefine \indent to emulate
+ % the normal \indent.
+ \nonfillparindent=\parindent
+ \parindent = 0pt
+ \let\indent\nonfillindent
+ %
+ \emergencystretch = 0pt % don't try to avoid overfull boxes
+ \ifx\nonarrowing\relax
+ \advance \leftskip by \lispnarrowing
+ \exdentamount=\lispnarrowing
+ \else
+ \let\nonarrowing = \relax
+ \fi
+ \let\exdent=\nofillexdent
+}
+
+\begingroup
+\obeyspaces
+% We want to swallow spaces (but not other tokens) after the fake
+% @indent in our nonfill-environments, where spaces are normally
+% active and set to @tie, resulting in them not being ignored after
+% @indent.
+\gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}%
+\gdef\nonfillindentcheck{%
+\ifx\temp %
+\expandafter\nonfillindentgobble%
+\else%
+\leavevmode\nonfillindentbox%
+\fi%
+}%
+\endgroup
+\def\nonfillindentgobble#1{\nonfillindent}
+\def\nonfillindentbox{\hbox to \nonfillparindent{\hss}}
+
+% If you want all examples etc. small: @set dispenvsize small.
+% If you want even small examples the full size: @set dispenvsize nosmall.
+% This affects the following displayed environments:
+% @example, @display, @format, @lisp
+%
+\def\smallword{small}
+\def\nosmallword{nosmall}
+\let\SETdispenvsize\relax
+\def\setnormaldispenv{%
+ \ifx\SETdispenvsize\smallword
+ % end paragraph for sake of leading, in case document has no blank
+ % line. This is redundant with what happens in \aboveenvbreak, but
+ % we need to do it before changing the fonts, and it's inconvenient
+ % to change the fonts afterward.
+ \ifnum \lastpenalty=10000 \else \endgraf \fi
+ \smallexamplefonts \rm
+ \fi
+}
+\def\setsmalldispenv{%
+ \ifx\SETdispenvsize\nosmallword
+ \else
+ \ifnum \lastpenalty=10000 \else \endgraf \fi
+ \smallexamplefonts \rm
+ \fi
+}
+
+% We often define two environments, @foo and @smallfoo.
+% Let's do it in one command. #1 is the env name, #2 the definition.
+\def\makedispenvdef#1#2{%
+ \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}%
+ \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}%
+ \expandafter\let\csname E#1\endcsname \afterenvbreak
+ \expandafter\let\csname Esmall#1\endcsname \afterenvbreak
+}
+
+% Define two environment synonyms (#1 and #2) for an environment.
+\def\maketwodispenvdef#1#2#3{%
+ \makedispenvdef{#1}{#3}%
+ \makedispenvdef{#2}{#3}%
+}
+%
+% @lisp: indented, narrowed, typewriter font;
+% @example: same as @lisp.
+%
+% @smallexample and @smalllisp: use smaller fonts.
+% Originally contributed by Pavel@xerox.
+%
+\maketwodispenvdef{lisp}{example}{%
+ \nonfillstart
+ \tt\setupmarkupstyle{example}%
+ \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
+ \gobble % eat return
+}
+% @display/@smalldisplay: same as @lisp except keep current font.
+%
+\makedispenvdef{display}{%
+ \nonfillstart
+ \gobble
+}
+
+% @format/@smallformat: same as @display except don't narrow margins.
+%
+\makedispenvdef{format}{%
+ \let\nonarrowing = t%
+ \nonfillstart
+ \gobble
+}
+
+% @flushleft: same as @format, but doesn't obey \SETdispenvsize.
+\envdef\flushleft{%
+ \let\nonarrowing = t%
+ \nonfillstart
+ \gobble
+}
+\let\Eflushleft = \afterenvbreak
+
+% @flushright.
+%
+\envdef\flushright{%
+ \let\nonarrowing = t%
+ \nonfillstart
+ \advance\leftskip by 0pt plus 1fill\relax
+ \gobble
+}
+\let\Eflushright = \afterenvbreak
+
+
+% @raggedright does more-or-less normal line breaking but no right
+% justification. From plain.tex. Don't stretch around special
+% characters in urls in this environment, since the stretch at the right
+% should be enough.
+\envdef\raggedright{%
+ \rightskip0pt plus2.4em \spaceskip.3333em \xspaceskip.5em\relax
+ \def\urefprestretchamount{0pt}%
+ \def\urefpoststretchamount{0pt}%
+}
+\let\Eraggedright\par
+
+\envdef\raggedleft{%
+ \parindent=0pt \leftskip0pt plus2em
+ \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt
+ \hbadness=10000 % Last line will usually be underfull, so turn off
+ % badness reporting.
+}
+\let\Eraggedleft\par
+
+\envdef\raggedcenter{%
+ \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em
+ \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt
+ \hbadness=10000 % Last line will usually be underfull, so turn off
+ % badness reporting.
+}
+\let\Eraggedcenter\par
+
+
+% @quotation does normal linebreaking (hence we can't use \nonfillstart)
+% and narrows the margins. We keep \parskip nonzero in general, since
+% we're doing normal filling. So, when using \aboveenvbreak and
+% \afterenvbreak, temporarily make \parskip 0.
+%
+\makedispenvdef{quotation}{\quotationstart}
+%
+\def\quotationstart{%
+ \indentedblockstart % same as \indentedblock, but increase right margin too.
+ \ifx\nonarrowing\relax
+ \advance\rightskip by \lispnarrowing
+ \fi
+ \parsearg\quotationlabel
+}
+
+% We have retained a nonzero parskip for the environment, since we're
+% doing normal filling.
+%
+\def\Equotation{%
+ \par
+ \ifx\quotationauthor\thisisundefined\else
+ % indent a bit.
+ \leftline{\kern 2\leftskip \sl ---\quotationauthor}%
+ \fi
+ {\parskip=0pt \afterenvbreak}%
+}
+\def\Esmallquotation{\Equotation}
+
+% If we're given an argument, typeset it in bold with a colon after.
+\def\quotationlabel#1{%
+ \def\temp{#1}%
+ \ifx\temp\empty \else
+ {\bf #1: }%
+ \fi
+}
+
+% @indentedblock is like @quotation, but indents only on the left and
+% has no optional argument.
+%
+\makedispenvdef{indentedblock}{\indentedblockstart}
+%
+\def\indentedblockstart{%
+ {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip
+ \parindent=0pt
+ %
+ % @cartouche defines \nonarrowing to inhibit narrowing at next level down.
+ \ifx\nonarrowing\relax
+ \advance\leftskip by \lispnarrowing
+ \exdentamount = \lispnarrowing
+ \else
+ \let\nonarrowing = \relax
+ \fi
+}
+
+% Keep a nonzero parskip for the environment, since we're doing normal filling.
+%
+\def\Eindentedblock{%
+ \par
+ {\parskip=0pt \afterenvbreak}%
+}
+\def\Esmallindentedblock{\Eindentedblock}
+
+
+% LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>}
+% If we want to allow any <char> as delimiter,
+% we need the curly braces so that makeinfo sees the @verb command, eg:
+% `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org
+%
+% [Knuth]: Donald Ervin Knuth, 1996. The TeXbook.
+%
+% [Knuth] p.344; only we need to do the other characters Texinfo sets
+% active too. Otherwise, they get lost as the first character on a
+% verbatim line.
+\def\dospecials{%
+ \do\ \do\\\do\{\do\}\do\$\do\&%
+ \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~%
+ \do\<\do\>\do\|\do\@\do+\do\"%
+ % Don't do the quotes -- if we do, @set txicodequoteundirected and
+ % @set txicodequotebacktick will not have effect on @verb and
+ % @verbatim, and ?` and !` ligatures won't get disabled.
+ %\do\`\do\'%
+}
+%
+% [Knuth] p. 380
+\def\uncatcodespecials{%
+ \def\do##1{\catcode`##1=\other}\dospecials}
+%
+% Setup for the @verb command.
+%
+% Eight spaces for a tab
+\begingroup
+ \catcode`\^^I=\active
+ \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }}
+\endgroup
+%
+\def\setupverb{%
+ \tt % easiest (and conventionally used) font for verbatim
+ \def\par{\leavevmode\endgraf}%
+ \setupmarkupstyle{verb}%
+ \tabeightspaces
+ % Respect line breaks,
+ % print special symbols as themselves, and
+ % make each space count
+ % must do in this order:
+ \obeylines \uncatcodespecials \sepspaces
+}
+
+% Setup for the @verbatim environment
+%
+% Real tab expansion.
+\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount
+%
+% We typeset each line of the verbatim in an \hbox, so we can handle
+% tabs. The \global is in case the verbatim line starts with an accent,
+% or some other command that starts with a begin-group. Otherwise, the
+% entire \verbbox would disappear at the corresponding end-group, before
+% it is typeset. Meanwhile, we can't have nested verbatim commands
+% (can we?), so the \global won't be overwriting itself.
+\newbox\verbbox
+\def\starttabbox{\global\setbox\verbbox=\hbox\bgroup}
+%
+\begingroup
+ \catcode`\^^I=\active
+ \gdef\tabexpand{%
+ \catcode`\^^I=\active
+ \def^^I{\leavevmode\egroup
+ \dimen\verbbox=\wd\verbbox % the width so far, or since the previous tab
+ \divide\dimen\verbbox by\tabw
+ \multiply\dimen\verbbox by\tabw % compute previous multiple of \tabw
+ \advance\dimen\verbbox by\tabw % advance to next multiple of \tabw
+ \wd\verbbox=\dimen\verbbox \box\verbbox \starttabbox
+ }%
+ }
+\endgroup
+
+% start the verbatim environment.
+\def\setupverbatim{%
+ \let\nonarrowing = t%
+ \nonfillstart
+ \tt % easiest (and conventionally used) font for verbatim
+ % The \leavevmode here is for blank lines. Otherwise, we would
+ % never \starttabox and the \egroup would end verbatim mode.
+ \def\par{\leavevmode\egroup\box\verbbox\endgraf}%
+ \tabexpand
+ \setupmarkupstyle{verbatim}%
+ % Respect line breaks,
+ % print special symbols as themselves, and
+ % make each space count.
+ % Must do in this order:
+ \obeylines \uncatcodespecials \sepspaces
+ \everypar{\starttabbox}%
+}
+
+% Do the @verb magic: verbatim text is quoted by unique
+% delimiter characters. Before first delimiter expect a
+% right brace, after last delimiter expect closing brace:
+%
+% \def\doverb'{'<char>#1<char>'}'{#1}
+%
+% [Knuth] p. 382; only eat outer {}
+\begingroup
+ \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other
+ \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next]
+\endgroup
+%
+\def\verb{\begingroup\setupverb\doverb}
+%
+%
+% Do the @verbatim magic: define the macro \doverbatim so that
+% the (first) argument ends when '@end verbatim' is reached, ie:
+%
+% \def\doverbatim#1@end verbatim{#1}
+%
+% For Texinfo it's a lot easier than for LaTeX,
+% because texinfo's \verbatim doesn't stop at '\end{verbatim}':
+% we need not redefine '\', '{' and '}'.
+%
+% Inspired by LaTeX's verbatim command set [latex.ltx]
+%
+\begingroup
+ \catcode`\ =\active
+ \obeylines %
+ % ignore everything up to the first ^^M, that's the newline at the end
+ % of the @verbatim input line itself. Otherwise we get an extra blank
+ % line in the output.
+ \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}%
+ % We really want {...\end verbatim} in the body of the macro, but
+ % without the active space; thus we have to use \xdef and \gobble.
+\endgroup
+%
+\envdef\verbatim{%
+ \setupverbatim\doverbatim
+}
+\let\Everbatim = \afterenvbreak
+
+
+% @verbatiminclude FILE - insert text of file in verbatim environment.
+%
+\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude}
+%
+\def\doverbatiminclude#1{%
+ {%
+ \makevalueexpandable
+ \setupverbatim
+ \indexnofonts % Allow `@@' and other weird things in file names.
+ \wlog{texinfo.tex: doing @verbatiminclude of #1^^J}%
+ \input #1
+ \afterenvbreak
+ }%
+}
+
+% @copying ... @end copying.
+% Save the text away for @insertcopying later.
+%
+% We save the uninterpreted tokens, rather than creating a box.
+% Saving the text in a box would be much easier, but then all the
+% typesetting commands (@smallbook, font changes, etc.) have to be done
+% beforehand -- and a) we want @copying to be done first in the source
+% file; b) letting users define the frontmatter in as flexible order as
+% possible is desirable.
+%
+\def\copying{\checkenv{}\begingroup\scanargctxt\docopying}
+\def\docopying#1@end copying{\endgroup\def\copyingtext{#1}}
+%
+\def\insertcopying{%
+ \begingroup
+ \parindent = 0pt % paragraph indentation looks wrong on title page
+ \scanexp\copyingtext
+ \endgroup
+}
+
+
+\message{defuns,}
+% @defun etc.
+
+\newskip\defbodyindent \defbodyindent=.4in
+\newskip\defargsindent \defargsindent=50pt
+\newskip\deflastargmargin \deflastargmargin=18pt
+\newcount\defunpenalty
+
+% Start the processing of @deffn:
+\def\startdefun{%
+ \ifnum\lastpenalty<10000
+ \medbreak
+ \defunpenalty=10003 % Will keep this @deffn together with the
+ % following @def command, see below.
+ \else
+ % If there are two @def commands in a row, we'll have a \nobreak,
+ % which is there to keep the function description together with its
+ % header. But if there's nothing but headers, we need to allow a
+ % break somewhere. Check specifically for penalty 10002, inserted
+ % by \printdefunline, instead of 10000, since the sectioning
+ % commands also insert a nobreak penalty, and we don't want to allow
+ % a break between a section heading and a defun.
+ %
+ % As a further refinement, we avoid "club" headers by signalling
+ % with penalty of 10003 after the very first @deffn in the
+ % sequence (see above), and penalty of 10002 after any following
+ % @def command.
+ \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi
+ %
+ % Similarly, after a section heading, do not allow a break.
+ % But do insert the glue.
+ \medskip % preceded by discardable penalty, so not a breakpoint
+ \fi
+ %
+ \parindent=0in
+ \advance\leftskip by \defbodyindent
+ \exdentamount=\defbodyindent
+}
+
+\def\dodefunx#1{%
+ % First, check whether we are in the right environment:
+ \checkenv#1%
+ %
+ % As above, allow line break if we have multiple x headers in a row.
+ % It's not a great place, though.
+ \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi
+ %
+ % And now, it's time to reuse the body of the original defun:
+ \expandafter\gobbledefun#1%
+}
+\def\gobbledefun#1\startdefun{}
+
+% \printdefunline \deffnheader{text}
+%
+\def\printdefunline#1#2{%
+ \begingroup
+ % call \deffnheader:
+ #1#2 \endheader
+ % common ending:
+ \interlinepenalty = 10000
+ \advance\rightskip by 0pt plus 1fil\relax
+ \endgraf
+ \nobreak\vskip -\parskip
+ \penalty\defunpenalty % signal to \startdefun and \dodefunx
+ % Some of the @defun-type tags do not enable magic parentheses,
+ % rendering the following check redundant. But we don't optimize.
+ \checkparencounts
+ \endgroup
+}
+
+\def\Edefun{\endgraf\medbreak}
+
+% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn;
+% the only thing remaining is to define \deffnheader.
+%
+\def\makedefun#1{%
+ \expandafter\let\csname E#1\endcsname = \Edefun
+ \edef\temp{\noexpand\domakedefun
+ \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}%
+ \temp
+}
+
+% \domakedefun \deffn \deffnx \deffnheader { (defn. of \deffnheader) }
+%
+% Define \deffn and \deffnx, without parameters.
+% \deffnheader has to be defined explicitly.
+%
+\def\domakedefun#1#2#3{%
+ \envdef#1{%
+ \startdefun
+ \doingtypefnfalse % distinguish typed functions from all else
+ \parseargusing\activeparens{\printdefunline#3}%
+ }%
+ \def#2{\dodefunx#1}%
+ \def#3%
+}
+
+\newif\ifdoingtypefn % doing typed function?
+\newif\ifrettypeownline % typeset return type on its own line?
+
+% @deftypefnnewline on|off says whether the return type of typed functions
+% are printed on their own line. This affects @deftypefn, @deftypefun,
+% @deftypeop, and @deftypemethod.
+%
+\parseargdef\deftypefnnewline{%
+ \def\temp{#1}%
+ \ifx\temp\onword
+ \expandafter\let\csname SETtxideftypefnnl\endcsname
+ = \empty
+ \else\ifx\temp\offword
+ \expandafter\let\csname SETtxideftypefnnl\endcsname
+ = \relax
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @txideftypefnnl value `\temp',
+ must be on|off}%
+ \fi\fi
+}
+
+% Untyped functions:
+
+% @deffn category name args
+\makedefun{deffn}{\deffngeneral{}}
+
+% @deffn category class name args
+\makedefun{defop}#1 {\defopon{#1\ \putwordon}}
+
+% \defopon {category on}class name args
+\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
+
+% \deffngeneral {subind}category name args
+%
+\def\deffngeneral#1#2 #3 #4\endheader{%
+ % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}.
+ \dosubind{fn}{\code{#3}}{#1}%
+ \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}%
+}
+
+% Typed functions:
+
+% @deftypefn category type name args
+\makedefun{deftypefn}{\deftypefngeneral{}}
+
+% @deftypeop category class type name args
+\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}}
+
+% \deftypeopon {category on}class type name args
+\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
+
+% \deftypefngeneral {subind}category type name args
+%
+\def\deftypefngeneral#1#2 #3 #4 #5\endheader{%
+ \dosubind{fn}{\code{#4}}{#1}%
+ \doingtypefntrue
+ \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
+}
+
+% Typed variables:
+
+% @deftypevr category type var args
+\makedefun{deftypevr}{\deftypecvgeneral{}}
+
+% @deftypecv category class type var args
+\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}}
+
+% \deftypecvof {category of}class type var args
+\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} }
+
+% \deftypecvgeneral {subind}category type var args
+%
+\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{%
+ \dosubind{vr}{\code{#4}}{#1}%
+ \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
+}
+
+% Untyped variables:
+
+% @defvr category var args
+\makedefun{defvr}#1 {\deftypevrheader{#1} {} }
+
+% @defcv category class var args
+\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}}
+
+% \defcvof {category of}class var args
+\def\defcvof#1#2 {\deftypecvof{#1}#2 {} }
+
+% Types:
+
+% @deftp category name args
+\makedefun{deftp}#1 #2 #3\endheader{%
+ \doind{tp}{\code{#2}}%
+ \defname{#1}{}{#2}\defunargs{#3\unskip}%
+}
+
+% Remaining @defun-like shortcuts:
+\makedefun{defun}{\deffnheader{\putwordDeffunc} }
+\makedefun{defmac}{\deffnheader{\putwordDefmac} }
+\makedefun{defspec}{\deffnheader{\putwordDefspec} }
+\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} }
+\makedefun{defvar}{\defvrheader{\putwordDefvar} }
+\makedefun{defopt}{\defvrheader{\putwordDefopt} }
+\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} }
+\makedefun{defmethod}{\defopon\putwordMethodon}
+\makedefun{deftypemethod}{\deftypeopon\putwordMethodon}
+\makedefun{defivar}{\defcvof\putwordInstanceVariableof}
+\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof}
+
+% \defname, which formats the name of the @def (not the args).
+% #1 is the category, such as "Function".
+% #2 is the return type, if any.
+% #3 is the function name.
+%
+% We are followed by (but not passed) the arguments, if any.
+%
+\def\defname#1#2#3{%
+ \par
+ % Get the values of \leftskip and \rightskip as they were outside the @def...
+ \advance\leftskip by -\defbodyindent
+ %
+ % Determine if we are typesetting the return type of a typed function
+ % on a line by itself.
+ \rettypeownlinefalse
+ \ifdoingtypefn % doing a typed function specifically?
+ % then check user option for putting return type on its own line:
+ \expandafter\ifx\csname SETtxideftypefnnl\endcsname\relax \else
+ \rettypeownlinetrue
+ \fi
+ \fi
+ %
+ % How we'll format the category name. Putting it in brackets helps
+ % distinguish it from the body text that may end up on the next line
+ % just below it.
+ \def\temp{#1}%
+ \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi}
+ %
+ % Figure out line sizes for the paragraph shape. We'll always have at
+ % least two.
+ \tempnum = 2
+ %
+ % The first line needs space for \box0; but if \rightskip is nonzero,
+ % we need only space for the part of \box0 which exceeds it:
+ \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip
+ %
+ % If doing a return type on its own line, we'll have another line.
+ \ifrettypeownline
+ \advance\tempnum by 1
+ \def\maybeshapeline{0in \hsize}%
+ \else
+ \def\maybeshapeline{}%
+ \fi
+ %
+ % The continuations:
+ \dimen2=\hsize \advance\dimen2 by -\defargsindent
+ %
+ % The final paragraph shape:
+ \parshape \tempnum 0in \dimen0 \maybeshapeline \defargsindent \dimen2
+ %
+ % Put the category name at the right margin.
+ \noindent
+ \hbox to 0pt{%
+ \hfil\box0 \kern-\hsize
+ % \hsize has to be shortened this way:
+ \kern\leftskip
+ % Intentionally do not respect \rightskip, since we need the space.
+ }%
+ %
+ % Allow all lines to be underfull without complaint:
+ \tolerance=10000 \hbadness=10000
+ \exdentamount=\defbodyindent
+ {%
+ % defun fonts. We use typewriter by default (used to be bold) because:
+ % . we're printing identifiers, they should be in tt in principle.
+ % . in languages with many accents, such as Czech or French, it's
+ % common to leave accents off identifiers. The result looks ok in
+ % tt, but exceedingly strange in rm.
+ % . we don't want -- and --- to be treated as ligatures.
+ % . this still does not fix the ?` and !` ligatures, but so far no
+ % one has made identifiers using them :).
+ \df \tt
+ \def\temp{#2}% text of the return type
+ \ifx\temp\empty\else
+ \tclose{\temp}% typeset the return type
+ \ifrettypeownline
+ % put return type on its own line; prohibit line break following:
+ \hfil\vadjust{\nobreak}\break
+ \else
+ \space % type on same line, so just followed by a space
+ \fi
+ \fi % no return type
+ #3% output function name
+ }%
+ {\rm\enskip}% hskip 0.5 em of \rmfont
+ %
+ \boldbrax
+ % arguments will be output next, if any.
+}
+
+% Print arguments in slanted roman (not ttsl), inconsistently with using
+% tt for the name. This is because literal text is sometimes needed in
+% the argument list (groff manual), and ttsl and tt are not very
+% distinguishable. Prevent hyphenation at `-' chars.
+%
+\def\defunargs#1{%
+ % use sl by default (not ttsl),
+ % tt for the names.
+ \df \sl \hyphenchar\font=0
+ %
+ % On the other hand, if an argument has two dashes (for instance), we
+ % want a way to get ttsl. We used to recommend @var for that, so
+ % leave the code in, but it's strange for @var to lead to typewriter.
+ % Nowadays we recommend @code, since the difference between a ttsl hyphen
+ % and a tt hyphen is pretty tiny. @code also disables ?` !`.
+ \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}%
+ #1%
+ \sl\hyphenchar\font=45
+}
+
+% We want ()&[] to print specially on the defun line.
+%
+\def\activeparens{%
+ \catcode`\(=\active \catcode`\)=\active
+ \catcode`\[=\active \catcode`\]=\active
+ \catcode`\&=\active
+}
+
+% Make control sequences which act like normal parenthesis chars.
+\let\lparen = ( \let\rparen = )
+
+% Be sure that we always have a definition for `(', etc. For example,
+% if the fn name has parens in it, \boldbrax will not be in effect yet,
+% so TeX would otherwise complain about undefined control sequence.
+{
+ \activeparens
+ \global\let(=\lparen \global\let)=\rparen
+ \global\let[=\lbrack \global\let]=\rbrack
+ \global\let& = \&
+
+ \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
+ \gdef\magicamp{\let&=\amprm}
+}
+
+\newcount\parencount
+
+% If we encounter &foo, then turn on ()-hacking afterwards
+\newif\ifampseen
+\def\amprm#1 {\ampseentrue{\bf\&#1 }}
+
+\def\parenfont{%
+ \ifampseen
+ % At the first level, print parens in roman,
+ % otherwise use the default font.
+ \ifnum \parencount=1 \rm \fi
+ \else
+ % The \sf parens (in \boldbrax) actually are a little bolder than
+ % the contained text. This is especially needed for [ and ] .
+ \sf
+ \fi
+}
+\def\infirstlevel#1{%
+ \ifampseen
+ \ifnum\parencount=1
+ #1%
+ \fi
+ \fi
+}
+\def\bfafterword#1 {#1 \bf}
+
+\def\opnr{%
+ \global\advance\parencount by 1
+ {\parenfont(}%
+ \infirstlevel \bfafterword
+}
+\def\clnr{%
+ {\parenfont)}%
+ \infirstlevel \sl
+ \global\advance\parencount by -1
+}
+
+\newcount\brackcount
+\def\lbrb{%
+ \global\advance\brackcount by 1
+ {\bf[}%
+}
+\def\rbrb{%
+ {\bf]}%
+ \global\advance\brackcount by -1
+}
+
+\def\checkparencounts{%
+ \ifnum\parencount=0 \else \badparencount \fi
+ \ifnum\brackcount=0 \else \badbrackcount \fi
+}
+% these should not use \errmessage; the glibc manual, at least, actually
+% has such constructs (when documenting function pointers).
+\def\badparencount{%
+ \message{Warning: unbalanced parentheses in @def...}%
+ \global\parencount=0
+}
+\def\badbrackcount{%
+ \message{Warning: unbalanced square brackets in @def...}%
+ \global\brackcount=0
+}
+
+
+\message{macros,}
+% @macro.
+
+% To do this right we need a feature of e-TeX, \scantokens,
+% which we arrange to emulate with a temporary file in ordinary TeX.
+\ifx\eTeXversion\thisisundefined
+ \newwrite\macscribble
+ \def\scantokens#1{%
+ \toks0={#1}%
+ \immediate\openout\macscribble=\jobname.tmp
+ \immediate\write\macscribble{\the\toks0}%
+ \immediate\closeout\macscribble
+ \input \jobname.tmp
+ }
+\fi
+
+% alias because \c means cedilla in @tex or @math
+\let\texinfoc=\c
+
+\newcount\savedcatcodeone
+\newcount\savedcatcodetwo
+
+% Used at the time of macro expansion.
+% Argument is macro body with arguments substituted
+\def\scanmacro#1{%
+ \newlinechar`\^^M
+ \def\xeatspaces{\eatspaces}%
+ %
+ % Temporarily undo catcode changes of \printindex. Set catcode of @ to
+ % 0 so that @-commands in macro expansions aren't printed literally when
+ % formatting an index file, where \ is used as the escape character.
+ \savedcatcodeone=\catcode`\@
+ \savedcatcodetwo=\catcode`\\
+ \catcode`\@=0
+ \catcode`\\=\active
+ %
+ % Process the macro body under the current catcode regime.
+ \scantokens{#1@texinfoc}%
+ %
+ \catcode`\@=\savedcatcodeone
+ \catcode`\\=\savedcatcodetwo
+ %
+ % The \texinfoc is to remove the \newlinechar added by \scantokens, and
+ % can be noticed by \parsearg.
+ % We avoid surrounding the call to \scantokens with \bgroup and \egroup
+ % to allow macros to open or close groups themselves.
+}
+
+% Used for copying and captions
+\def\scanexp#1{%
+ \expandafter\scanmacro\expandafter{#1}%
+}
+
+\newcount\paramno % Count of parameters
+\newtoks\macname % Macro name
+\newif\ifrecursive % Is it recursive?
+
+% List of all defined macros in the form
+% \commondummyword\macro1\commondummyword\macro2...
+% Currently is also contains all @aliases; the list can be split
+% if there is a need.
+\def\macrolist{}
+
+% Add the macro to \macrolist
+\def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname}
+\def\addtomacrolistxxx#1{%
+ \toks0 = \expandafter{\macrolist\commondummyword#1}%
+ \xdef\macrolist{\the\toks0}%
+}
+
+% Utility routines.
+% This does \let #1 = #2, with \csnames; that is,
+% \let \csname#1\endcsname = \csname#2\endcsname
+% (except of course we have to play expansion games).
+%
+\def\cslet#1#2{%
+ \expandafter\let
+ \csname#1\expandafter\endcsname
+ \csname#2\endcsname
+}
+
+% Trim leading and trailing spaces off a string.
+% Concepts from aro-bend problem 15 (see CTAN).
+{\catcode`\@=11
+\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }}
+\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@}
+\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @}
+\def\unbrace#1{#1}
+\unbrace{\gdef\trim@@@ #1 } #2@{#1}
+}
+
+% Trim a single trailing ^^M off a string.
+{\catcode`\^^M=\other \catcode`\Q=3%
+\gdef\eatcr #1{\eatcra #1Q^^MQ}%
+\gdef\eatcra#1^^MQ{\eatcrb#1Q}%
+\gdef\eatcrb#1Q#2Q{#1}%
+}
+
+% Macro bodies are absorbed as an argument in a context where
+% all characters are catcode 10, 11 or 12, except \ which is active
+% (as in normal texinfo). It is necessary to change the definition of \
+% to recognize macro arguments; this is the job of \mbodybackslash.
+%
+% Non-ASCII encodings make 8-bit characters active, so un-activate
+% them to avoid their expansion. Must do this non-globally, to
+% confine the change to the current group.
+%
+% It's necessary to have hard CRs when the macro is executed. This is
+% done by making ^^M (\endlinechar) catcode 12 when reading the macro
+% body, and then making it the \newlinechar in \scanmacro.
+%
+\def\scanctxt{% used as subroutine
+ \catcode`\"=\other
+ \catcode`\+=\other
+ \catcode`\<=\other
+ \catcode`\>=\other
+ \catcode`\^=\other
+ \catcode`\_=\other
+ \catcode`\|=\other
+ \catcode`\~=\other
+ \passthroughcharstrue
+}
+
+\def\scanargctxt{% used for copying and captions, not macros.
+ \scanctxt
+ \catcode`\@=\other
+ \catcode`\\=\other
+ \catcode`\^^M=\other
+}
+
+\def\macrobodyctxt{% used for @macro definitions
+ \scanctxt
+ \catcode`\ =\other
+ \catcode`\@=\other
+ \catcode`\{=\other
+ \catcode`\}=\other
+ \catcode`\^^M=\other
+ \usembodybackslash
+}
+
+% Used when scanning braced macro arguments. Note, however, that catcode
+% changes here are ineffectual if the macro invocation was nested inside
+% an argument to another Texinfo command.
+\def\macroargctxt{%
+ \scanctxt
+ \catcode`\ =\active
+ \catcode`\^^M=\other
+ \catcode`\\=\active
+}
+
+\def\macrolineargctxt{% used for whole-line arguments without braces
+ \scanctxt
+ \catcode`\{=\other
+ \catcode`\}=\other
+}
+
+% \mbodybackslash is the definition of \ in @macro bodies.
+% It maps \foo\ => \csname macarg.foo\endcsname => #N
+% where N is the macro parameter number.
+% We define \csname macarg.\endcsname to be \realbackslash, so
+% \\ in macro replacement text gets you a backslash.
+%
+{\catcode`@=0 @catcode`@\=@active
+ @gdef@usembodybackslash{@let\=@mbodybackslash}
+ @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname}
+}
+\expandafter\def\csname macarg.\endcsname{\realbackslash}
+
+\def\margbackslash#1{\char`\#1 }
+
+\def\macro{\recursivefalse\parsearg\macroxxx}
+\def\rmacro{\recursivetrue\parsearg\macroxxx}
+
+\def\macroxxx#1{%
+ \getargs{#1}% now \macname is the macname and \argl the arglist
+ \ifx\argl\empty % no arguments
+ \paramno=0\relax
+ \else
+ \expandafter\parsemargdef \argl;%
+ \if\paramno>256\relax
+ \ifx\eTeXversion\thisisundefined
+ \errhelp = \EMsimple
+ \errmessage{You need eTeX to compile a file with macros with more than 256 arguments}
+ \fi
+ \fi
+ \fi
+ \if1\csname ismacro.\the\macname\endcsname
+ \message{Warning: redefining \the\macname}%
+ \else
+ \expandafter\ifx\csname \the\macname\endcsname \relax
+ \else \errmessage{Macro name \the\macname\space already defined}\fi
+ \global\cslet{macsave.\the\macname}{\the\macname}%
+ \global\expandafter\let\csname ismacro.\the\macname\endcsname=1%
+ \addtomacrolist{\the\macname}%
+ \fi
+ \begingroup \macrobodyctxt
+ \ifrecursive \expandafter\parsermacbody
+ \else \expandafter\parsemacbody
+ \fi}
+
+\parseargdef\unmacro{%
+ \if1\csname ismacro.#1\endcsname
+ \global\cslet{#1}{macsave.#1}%
+ \global\expandafter\let \csname ismacro.#1\endcsname=0%
+ % Remove the macro name from \macrolist:
+ \begingroup
+ \expandafter\let\csname#1\endcsname \relax
+ \let\commondummyword\unmacrodo
+ \xdef\macrolist{\macrolist}%
+ \endgroup
+ \else
+ \errmessage{Macro #1 not defined}%
+ \fi
+}
+
+% Called by \do from \dounmacro on each macro. The idea is to omit any
+% macro definitions that have been changed to \relax.
+%
+\def\unmacrodo#1{%
+ \ifx #1\relax
+ % remove this
+ \else
+ \noexpand\commondummyword \noexpand#1%
+ \fi
+}
+
+% \getargs -- Parse the arguments to a @macro line. Set \macname to
+% the name of the macro, and \argl to the braced argument list.
+\def\getargs#1{\getargsxxx#1{}}
+\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs}
+\def\getmacname#1 #2\relax{\macname={#1}}
+\def\getmacargs#1{\def\argl{#1}}
+% This made use of the feature that if the last token of a
+% <parameter list> is #, then the preceding argument is delimited by
+% an opening brace, and that opening brace is not consumed.
+
+% Parse the optional {params} list to @macro or @rmacro.
+% Set \paramno to the number of arguments,
+% and \paramlist to a parameter text for the macro (e.g. #1,#2,#3 for a
+% three-param macro.) Define \macarg.BLAH for each BLAH in the params
+% list to some hook where the argument is to be expanded. If there are
+% less than 10 arguments that hook is to be replaced by ##N where N
+% is the position in that list, that is to say the macro arguments are to be
+% defined `a la TeX in the macro body.
+%
+% That gets used by \mbodybackslash (above).
+%
+% If there are 10 or more arguments, a different technique is used: see
+% \parsemmanyargdef.
+%
+\def\parsemargdef#1;{%
+ \paramno=0\def\paramlist{}%
+ \let\hash\relax
+ % \hash is redefined to `#' later to get it into definitions
+ \let\xeatspaces\relax
+ \parsemargdefxxx#1,;,%
+ \ifnum\paramno<10\relax\else
+ \paramno0\relax
+ \parsemmanyargdef@@#1,;,% 10 or more arguments
+ \fi
+}
+\def\parsemargdefxxx#1,{%
+ \if#1;\let\next=\relax
+ \else \let\next=\parsemargdefxxx
+ \advance\paramno by 1
+ \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname
+ {\xeatspaces{\hash\the\paramno}}%
+ \edef\paramlist{\paramlist\hash\the\paramno,}%
+ \fi\next}
+
+% \parsemacbody, \parsermacbody
+%
+% Read recursive and nonrecursive macro bodies. (They're different since
+% rec and nonrec macros end differently.)
+%
+% We are in \macrobodyctxt, and the \xdef causes backslashshes in the macro
+% body to be transformed.
+% Set \macrobody to the body of the macro, and call \defmacro.
+%
+{\catcode`\ =\other\long\gdef\parsemacbody#1@end macro{%
+\xdef\macrobody{\eatcr{#1}}\endgroup\defmacro}}%
+{\catcode`\ =\other\long\gdef\parsermacbody#1@end rmacro{%
+\xdef\macrobody{\eatcr{#1}}\endgroup\defmacro}}%
+
+% Make @ a letter, so that we can make private-to-Texinfo macro names.
+\edef\texiatcatcode{\the\catcode`\@}
+\catcode `@=11\relax
+
+%%%%%%%%%%%%%% Code for > 10 arguments only %%%%%%%%%%%%%%%%%%
+
+% If there are 10 or more arguments, a different technique is used, where the
+% hook remains in the body, and when macro is to be expanded the body is
+% processed again to replace the arguments.
+%
+% In that case, the hook is \the\toks N-1, and we simply set \toks N-1 to the
+% argument N value and then \edef the body (nothing else will expand because of
+% the catcode regime under which the body was input).
+%
+% If you compile with TeX (not eTeX), and you have macros with 10 or more
+% arguments, no macro can have more than 256 arguments (else error).
+%
+% In case that there are 10 or more arguments we parse again the arguments
+% list to set new definitions for the \macarg.BLAH macros corresponding to
+% each BLAH argument. It was anyhow needed to parse already once this list
+% in order to count the arguments, and as macros with at most 9 arguments
+% are by far more frequent than macro with 10 or more arguments, defining
+% twice the \macarg.BLAH macros does not cost too much processing power.
+\def\parsemmanyargdef@@#1,{%
+ \if#1;\let\next=\relax
+ \else
+ \let\next=\parsemmanyargdef@@
+ \edef\tempb{\eatspaces{#1}}%
+ \expandafter\def\expandafter\tempa
+ \expandafter{\csname macarg.\tempb\endcsname}%
+ % Note that we need some extra \noexpand\noexpand, this is because we
+ % don't want \the to be expanded in the \parsermacbody as it uses an
+ % \xdef .
+ \expandafter\edef\tempa
+ {\noexpand\noexpand\noexpand\the\toks\the\paramno}%
+ \advance\paramno by 1\relax
+ \fi\next}
+
+
+\let\endargs@\relax
+\let\nil@\relax
+\def\nilm@{\nil@}%
+\long\def\nillm@{\nil@}%
+
+% This macro is expanded during the Texinfo macro expansion, not during its
+% definition. It gets all the arguments' values and assigns them to macros
+% macarg.ARGNAME
+%
+% #1 is the macro name
+% #2 is the list of argument names
+% #3 is the list of argument values
+\def\getargvals@#1#2#3{%
+ \def\macargdeflist@{}%
+ \def\saveparamlist@{#2}% Need to keep a copy for parameter expansion.
+ \def\paramlist{#2,\nil@}%
+ \def\macroname{#1}%
+ \begingroup
+ \macroargctxt
+ \def\argvaluelist{#3,\nil@}%
+ \def\@tempa{#3}%
+ \ifx\@tempa\empty
+ \setemptyargvalues@
+ \else
+ \getargvals@@
+ \fi
+}
+\def\getargvals@@{%
+ \ifx\paramlist\nilm@
+ % Some sanity check needed here that \argvaluelist is also empty.
+ \ifx\argvaluelist\nillm@
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Too many arguments in macro `\macroname'!}%
+ \fi
+ \let\next\macargexpandinbody@
+ \else
+ \ifx\argvaluelist\nillm@
+ % No more arguments values passed to macro. Set remaining named-arg
+ % macros to empty.
+ \let\next\setemptyargvalues@
+ \else
+ % pop current arg name into \@tempb
+ \def\@tempa##1{\pop@{\@tempb}{\paramlist}##1\endargs@}%
+ \expandafter\@tempa\expandafter{\paramlist}%
+ % pop current argument value into \@tempc
+ \def\@tempa##1{\longpop@{\@tempc}{\argvaluelist}##1\endargs@}%
+ \expandafter\@tempa\expandafter{\argvaluelist}%
+ % Here \@tempb is the current arg name and \@tempc is the current arg value.
+ % First place the new argument macro definition into \@tempd
+ \expandafter\macname\expandafter{\@tempc}%
+ \expandafter\let\csname macarg.\@tempb\endcsname\relax
+ \expandafter\def\expandafter\@tempe\expandafter{%
+ \csname macarg.\@tempb\endcsname}%
+ \edef\@tempd{\long\def\@tempe{\the\macname}}%
+ \push@\@tempd\macargdeflist@
+ \let\next\getargvals@@
+ \fi
+ \fi
+ \next
+}
+
+\def\push@#1#2{%
+ \expandafter\expandafter\expandafter\def
+ \expandafter\expandafter\expandafter#2%
+ \expandafter\expandafter\expandafter{%
+ \expandafter#1#2}%
+}
+
+% Replace arguments by their values in the macro body, and place the result
+% in macro \@tempa.
+%
+\def\macvalstoargs@{%
+ % To do this we use the property that token registers that are \the'ed
+ % within an \edef expand only once. So we are going to place all argument
+ % values into respective token registers.
+ %
+ % First we save the token context, and initialize argument numbering.
+ \begingroup
+ \paramno0\relax
+ % Then, for each argument number #N, we place the corresponding argument
+ % value into a new token list register \toks#N
+ \expandafter\putargsintokens@\saveparamlist@,;,%
+ % Then, we expand the body so that argument are replaced by their
+ % values. The trick for values not to be expanded themselves is that they
+ % are within tokens and that tokens expand only once in an \edef .
+ \edef\@tempc{\csname mac.\macroname .body\endcsname}%
+ % Now we restore the token stack pointer to free the token list registers
+ % which we have used, but we make sure that expanded body is saved after
+ % group.
+ \expandafter
+ \endgroup
+ \expandafter\def\expandafter\@tempa\expandafter{\@tempc}%
+ }
+
+% Define the named-macro outside of this group and then close this group.
+%
+\def\macargexpandinbody@{%
+ \expandafter
+ \endgroup
+ \macargdeflist@
+ % First the replace in body the macro arguments by their values, the result
+ % is in \@tempa .
+ \macvalstoargs@
+ % Then we point at the \norecurse or \gobble (for recursive) macro value
+ % with \@tempb .
+ \expandafter\let\expandafter\@tempb\csname mac.\macroname .recurse\endcsname
+ % Depending on whether it is recursive or not, we need some tailing
+ % \egroup .
+ \ifx\@tempb\gobble
+ \let\@tempc\relax
+ \else
+ \let\@tempc\egroup
+ \fi
+ % And now we do the real job:
+ \edef\@tempd{\noexpand\@tempb{\macroname}\noexpand\scanmacro{\@tempa}\@tempc}%
+ \@tempd
+}
+
+\def\putargsintokens@#1,{%
+ \if#1;\let\next\relax
+ \else
+ \let\next\putargsintokens@
+ % First we allocate the new token list register, and give it a temporary
+ % alias \@tempb .
+ \toksdef\@tempb\the\paramno
+ % Then we place the argument value into that token list register.
+ \expandafter\let\expandafter\@tempa\csname macarg.#1\endcsname
+ \expandafter\@tempb\expandafter{\@tempa}%
+ \advance\paramno by 1\relax
+ \fi
+ \next
+}
+
+% Trailing missing arguments are set to empty.
+%
+\def\setemptyargvalues@{%
+ \ifx\paramlist\nilm@
+ \let\next\macargexpandinbody@
+ \else
+ \expandafter\setemptyargvaluesparser@\paramlist\endargs@
+ \let\next\setemptyargvalues@
+ \fi
+ \next
+}
+
+\def\setemptyargvaluesparser@#1,#2\endargs@{%
+ \expandafter\def\expandafter\@tempa\expandafter{%
+ \expandafter\def\csname macarg.#1\endcsname{}}%
+ \push@\@tempa\macargdeflist@
+ \def\paramlist{#2}%
+}
+
+% #1 is the element target macro
+% #2 is the list macro
+% #3,#4\endargs@ is the list value
+\def\pop@#1#2#3,#4\endargs@{%
+ \def#1{#3}%
+ \def#2{#4}%
+}
+\long\def\longpop@#1#2#3,#4\endargs@{%
+ \long\def#1{#3}%
+ \long\def#2{#4}%
+}
+
+
+%%%%%%%%%%%%%% End of code for > 10 arguments %%%%%%%%%%%%%%%%%%
+
+
+% This defines a Texinfo @macro or @rmacro, called by \parsemacbody.
+% \macrobody has the body of the macro in it, with placeholders for
+% its parameters, looking like "\xeatspaces{\hash 1}".
+% \paramno is the number of parameters
+% \paramlist is a TeX parameter text, e.g. "#1,#2,#3,"
+% There are four cases: macros of zero, one, up to nine, and many arguments.
+% \xdef is used so that macro definitions will survive the file
+% they're defined in: @include reads the file inside a group.
+%
+\def\defmacro{%
+ \let\hash=##% convert placeholders to macro parameter chars
+ \ifnum\paramno=1
+ \def\xeatspaces##1{##1}%
+ % This removes the pair of braces around the argument. We don't
+ % use \eatspaces, because this can cause ends of lines to be lost
+ % when the argument to \eatspaces is read, leading to line-based
+ % commands like "@itemize" not being read correctly.
+ \else
+ \let\xeatspaces\relax % suppress expansion
+ \fi
+ \ifcase\paramno
+ % 0
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \bgroup
+ \noexpand\spaceisspace
+ \noexpand\endlineisspace
+ \noexpand\expandafter % skip any whitespace after the macro name.
+ \expandafter\noexpand\csname\the\macname @@@\endcsname}%
+ \expandafter\xdef\csname\the\macname @@@\endcsname{%
+ \egroup
+ \noexpand\scanmacro{\macrobody}}%
+ \or % 1
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \bgroup
+ \noexpand\braceorline
+ \expandafter\noexpand\csname\the\macname @@@\endcsname}%
+ \expandafter\xdef\csname\the\macname @@@\endcsname##1{%
+ \egroup
+ \noexpand\scanmacro{\macrobody}%
+ }%
+ \else % at most 9
+ \ifnum\paramno<10\relax
+ % @MACNAME sets the context for reading the macro argument
+ % @MACNAME@@ gets the argument, processes backslashes and appends a
+ % comma.
+ % @MACNAME@@@ removes braces surrounding the argument list.
+ % @MACNAME@@@@ scans the macro body with arguments substituted.
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \bgroup
+ \noexpand\expandafter % This \expandafter skip any spaces after the
+ \noexpand\macroargctxt % macro before we change the catcode of space.
+ \noexpand\expandafter
+ \expandafter\noexpand\csname\the\macname @@\endcsname}%
+ \expandafter\xdef\csname\the\macname @@\endcsname##1{%
+ \noexpand\passargtomacro
+ \expandafter\noexpand\csname\the\macname @@@\endcsname{##1,}}%
+ \expandafter\xdef\csname\the\macname @@@\endcsname##1{%
+ \expandafter\noexpand\csname\the\macname @@@@\endcsname ##1}%
+ \expandafter\expandafter
+ \expandafter\xdef
+ \expandafter\expandafter
+ \csname\the\macname @@@@\endcsname\paramlist{%
+ \egroup\noexpand\scanmacro{\macrobody}}%
+ \else % 10 or more:
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \noexpand\getargvals@{\the\macname}{\argl}%
+ }%
+ \global\expandafter\let\csname mac.\the\macname .body\endcsname\macrobody
+ \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\gobble
+ \fi
+ \fi}
+
+\catcode `\@\texiatcatcode\relax % end private-to-Texinfo catcodes
+
+\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+{\catcode`\@=0 \catcode`\\=13 % We need to manipulate \ so use @ as escape
+@catcode`@_=11 % private names
+@catcode`@!=11 % used as argument separator
+
+% \passargtomacro#1#2 -
+% Call #1 with a list of tokens #2, with any doubled backslashes in #2
+% compressed to one.
+%
+% This implementation works by expansion, and not execution (so we cannot use
+% \def or similar). This reduces the risk of this failing in contexts where
+% complete expansion is done with no execution (for example, in writing out to
+% an auxiliary file for an index entry).
+%
+% State is kept in the input stream: the argument passed to
+% @look_ahead, @gobble_and_check_finish and @add_segment is
+%
+% THE_MACRO ARG_RESULT ! {PENDING_BS} NEXT_TOKEN (... rest of input)
+%
+% where:
+% THE_MACRO - name of the macro we want to call
+% ARG_RESULT - argument list we build to pass to that macro
+% PENDING_BS - either a backslash or nothing
+% NEXT_TOKEN - used to look ahead in the input stream to see what's coming next
+
+@gdef@passargtomacro#1#2{%
+ @add_segment #1!{}@relax#2\@_finish\%
+}
+@gdef@_finish{@_finishx} @global@let@_finishx@relax
+
+% #1 - THE_MACRO ARG_RESULT
+% #2 - PENDING_BS
+% #3 - NEXT_TOKEN
+% #4 used to look ahead
+%
+% If the next token is not a backslash, process the rest of the argument;
+% otherwise, remove the next token.
+@gdef@look_ahead#1!#2#3#4{%
+ @ifx#4\%
+ @expandafter@gobble_and_check_finish
+ @else
+ @expandafter@add_segment
+ @fi#1!{#2}#4#4%
+}
+
+% #1 - THE_MACRO ARG_RESULT
+% #2 - PENDING_BS
+% #3 - NEXT_TOKEN
+% #4 should be a backslash, which is gobbled.
+% #5 looks ahead
+%
+% Double backslash found. Add a single backslash, and look ahead.
+@gdef@gobble_and_check_finish#1!#2#3#4#5{%
+ @add_segment#1\!{}#5#5%
+}
+
+@gdef@is_fi{@fi}
+
+% #1 - THE_MACRO ARG_RESULT
+% #2 - PENDING_BS
+% #3 - NEXT_TOKEN
+% #4 is input stream until next backslash
+%
+% Input stream is either at the start of the argument, or just after a
+% backslash sequence, either a lone backslash, or a doubled backslash.
+% NEXT_TOKEN contains the first token in the input stream: if it is \finish,
+% finish; otherwise, append to ARG_RESULT the segment of the argument up until
+% the next backslash. PENDING_BACKSLASH contains a backslash to represent
+% a backslash just before the start of the input stream that has not been
+% added to ARG_RESULT.
+@gdef@add_segment#1!#2#3#4\{%
+@ifx#3@_finish
+ @call_the_macro#1!%
+@else
+ % append the pending backslash to the result, followed by the next segment
+ @expandafter@is_fi@look_ahead#1#2#4!{\}@fi
+ % this @fi is discarded by @look_ahead.
+ % we can't get rid of it with \expandafter because we don't know how
+ % long #4 is.
+}
+
+% #1 - THE_MACRO
+% #2 - ARG_RESULT
+% #3 discards the res of the conditional in @add_segment, and @is_fi ends the
+% conditional.
+@gdef@call_the_macro#1#2!#3@fi{@is_fi #1{#2}}
+
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% \braceorline MAC is used for a one-argument macro MAC. It checks
+% whether the next non-whitespace character is a {. It sets the context
+% for reading the argument (slightly different in the two cases). Then,
+% to read the argument, in the whole-line case, it then calls the regular
+% \parsearg MAC; in the lbrace case, it calls \passargtomacro MAC.
+%
+\def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx}
+\def\braceorlinexxx{%
+ \ifx\nchar\bgroup
+ \macroargctxt
+ \expandafter\passargtomacro
+ \else
+ \macrolineargctxt\expandafter\parsearg
+ \fi \macnamexxx}
+
+
+% @alias.
+% We need some trickery to remove the optional spaces around the equal
+% sign. Make them active and then expand them all to nothing.
+%
+\def\alias{\parseargusing\obeyspaces\aliasxxx}
+\def\aliasxxx #1{\aliasyyy#1\relax}
+\def\aliasyyy #1=#2\relax{%
+ {%
+ \expandafter\let\obeyedspace=\empty
+ \addtomacrolist{#1}%
+ \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}%
+ }%
+ \next
+}
+
+
+\message{cross references,}
+
+\newwrite\auxfile
+\newif\ifhavexrefs % True if xref values are known.
+\newif\ifwarnedxrefs % True if we warned once that they aren't known.
+
+% @inforef is relatively simple.
+\def\inforef #1{\inforefzzz #1,,,,**}
+\def\inforefzzz #1,#2,#3,#4**{%
+ \putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
+ node \samp{\ignorespaces#1{}}}
+
+% @node's only job in TeX is to define \lastnode, which is used in
+% cross-references. The @node line might or might not have commas, and
+% might or might not have spaces before the first comma, like:
+% @node foo , bar , ...
+% We don't want such trailing spaces in the node name.
+%
+\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse}
+%
+% also remove a trailing comma, in case of something like this:
+% @node Help-Cross, , , Cross-refs
+\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse}
+\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}}
+
+\let\nwnode=\node
+\let\lastnode=\empty
+
+% Write a cross-reference definition for the current node. #1 is the
+% type (Ynumbered, Yappendix, Ynothing).
+%
+\def\donoderef#1{%
+ \ifx\lastnode\empty\else
+ \setref{\lastnode}{#1}%
+ \global\let\lastnode=\empty
+ \fi
+}
+
+% @anchor{NAME} -- define xref target at arbitrary point.
+%
+\newcount\savesfregister
+%
+\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi}
+\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi}
+\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces}
+
+% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an
+% anchor), which consists of three parts:
+% 1) NAME-title - the current sectioning name taken from \lastsection,
+% or the anchor name.
+% 2) NAME-snt - section number and type, passed as the SNT arg, or
+% empty for anchors.
+% 3) NAME-pg - the page number.
+%
+% This is called from \donoderef, \anchor, and \dofloat. In the case of
+% floats, there is an additional part, which is not written here:
+% 4) NAME-lof - the text as it should appear in a @listoffloats.
+%
+\def\setref#1#2{%
+ \pdfmkdest{#1}%
+ \iflinks
+ {%
+ \requireauxfile
+ \atdummies % preserve commands, but don't expand them
+ % match definition in \xrdef, \refx, \xrefX.
+ \def\value##1{##1}%
+ \edef\writexrdef##1##2{%
+ \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef
+ ##1}{##2}}% these are parameters of \writexrdef
+ }%
+ \toks0 = \expandafter{\lastsection}%
+ \immediate \writexrdef{title}{\the\toks0 }%
+ \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc.
+ \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout
+ }%
+ \fi
+}
+
+% @xrefautosectiontitle on|off says whether @section(ing) names are used
+% automatically in xrefs, if the third arg is not explicitly specified.
+% This was provided as a "secret" @set xref-automatic-section-title
+% variable, now it's official.
+%
+\parseargdef\xrefautomaticsectiontitle{%
+ \def\temp{#1}%
+ \ifx\temp\onword
+ \expandafter\let\csname SETxref-automatic-section-title\endcsname
+ = \empty
+ \else\ifx\temp\offword
+ \expandafter\let\csname SETxref-automatic-section-title\endcsname
+ = \relax
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @xrefautomaticsectiontitle value `\temp',
+ must be on|off}%
+ \fi\fi
+}
+
+%
+% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is
+% the node name, #2 the name of the Info cross-reference, #3 the printed
+% node name, #4 the name of the Info file, #5 the name of the printed
+% manual. All but the node name can be omitted.
+%
+\def\pxref{\putwordsee{} \xrefXX}
+\def\xref{\putwordSee{} \xrefXX}
+\def\ref{\xrefXX}
+
+\def\xrefXX#1{\def\xrefXXarg{#1}\futurelet\tokenafterxref\xrefXXX}
+\def\xrefXXX{\expandafter\xrefX\expandafter[\xrefXXarg,,,,,,,]}
+%
+\newbox\toprefbox
+\newbox\printedrefnamebox
+\newbox\infofilenamebox
+\newbox\printedmanualbox
+%
+\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
+ \unsepspaces
+ %
+ % Get args without leading/trailing spaces.
+ \def\printedrefname{\ignorespaces #3}%
+ \setbox\printedrefnamebox = \hbox{\printedrefname\unskip}%
+ %
+ \def\infofilename{\ignorespaces #4}%
+ \setbox\infofilenamebox = \hbox{\infofilename\unskip}%
+ %
+ \def\printedmanual{\ignorespaces #5}%
+ \setbox\printedmanualbox = \hbox{\printedmanual\unskip}%
+ %
+ % If the printed reference name (arg #3) was not explicitly given in
+ % the @xref, figure out what we want to use.
+ \ifdim \wd\printedrefnamebox = 0pt
+ % No printed node name was explicitly given.
+ \expandafter\ifx\csname SETxref-automatic-section-title\endcsname \relax
+ % Not auto section-title: use node name inside the square brackets.
+ \def\printedrefname{\ignorespaces #1}%
+ \else
+ % Auto section-title: use chapter/section title inside
+ % the square brackets if we have it.
+ \ifdim \wd\printedmanualbox > 0pt
+ % It is in another manual, so we don't have it; use node name.
+ \def\printedrefname{\ignorespaces #1}%
+ \else
+ \ifhavexrefs
+ % We (should) know the real title if we have the xref values.
+ \def\printedrefname{\refx{#1-title}{}}%
+ \else
+ % Otherwise just copy the Info node name.
+ \def\printedrefname{\ignorespaces #1}%
+ \fi%
+ \fi
+ \fi
+ \fi
+ %
+ % Make link in pdf output.
+ \ifpdf
+ % For pdfTeX and LuaTeX
+ {\indexnofonts
+ \makevalueexpandable
+ \turnoffactive
+ % This expands tokens, so do it after making catcode changes, so _
+ % etc. don't get their TeX definitions. This ignores all spaces in
+ % #4, including (wrongly) those in the middle of the filename.
+ \getfilename{#4}%
+ %
+ % This (wrongly) does not take account of leading or trailing
+ % spaces in #1, which should be ignored.
+ \setpdfdestname{#1}%
+ %
+ \ifx\pdfdestname\empty
+ \def\pdfdestname{Top}% no empty targets
+ \fi
+ %
+ \leavevmode
+ \startlink attr{/Border [0 0 0]}%
+ \ifnum\filenamelength>0
+ goto file{\the\filename.pdf} name{\pdfdestname}%
+ \else
+ goto name{\pdfmkpgn{\pdfdestname}}%
+ \fi
+ }%
+ \setcolor{\linkcolor}%
+ \else
+ \ifx\XeTeXrevision\thisisundefined
+ \else
+ % For XeTeX
+ {\indexnofonts
+ \makevalueexpandable
+ \turnoffactive
+ % This expands tokens, so do it after making catcode changes, so _
+ % etc. don't get their TeX definitions. This ignores all spaces in
+ % #4, including (wrongly) those in the middle of the filename.
+ \getfilename{#4}%
+ %
+ % This (wrongly) does not take account of leading or trailing
+ % spaces in #1, which should be ignored.
+ \setpdfdestname{#1}%
+ %
+ \ifx\pdfdestname\empty
+ \def\pdfdestname{Top}% no empty targets
+ \fi
+ %
+ \leavevmode
+ \ifnum\filenamelength>0
+ % With default settings,
+ % XeTeX (xdvipdfmx) replaces link destination names with integers.
+ % In this case, the replaced destination names of
+ % remote PDFs are no longer known. In order to avoid a replacement,
+ % you can use xdvipdfmx's command line option `-C 0x0010'.
+ % If you use XeTeX 0.99996+ (TeX Live 2016+),
+ % this command line option is no longer necessary
+ % because we can use the `dvipdfmx:config' special.
+ \special{pdf:bann << /Border [0 0 0] /Type /Annot /Subtype /Link /A
+ << /S /GoToR /F (\the\filename.pdf) /D (\pdfdestname) >> >>}%
+ \else
+ \special{pdf:bann << /Border [0 0 0] /Type /Annot /Subtype /Link /A
+ << /S /GoTo /D (\pdfdestname) >> >>}%
+ \fi
+ }%
+ \setcolor{\linkcolor}%
+ \fi
+ \fi
+ {%
+ % Have to otherify everything special to allow the \csname to
+ % include an _ in the xref name, etc.
+ \indexnofonts
+ \turnoffactive
+ \def\value##1{##1}%
+ \expandafter\global\expandafter\let\expandafter\Xthisreftitle
+ \csname XR#1-title\endcsname
+ }%
+ %
+ % Float references are printed completely differently: "Figure 1.2"
+ % instead of "[somenode], p.3". \iffloat distinguishes them by
+ % \Xthisreftitle being set to a magic string.
+ \iffloat\Xthisreftitle
+ % If the user specified the print name (third arg) to the ref,
+ % print it instead of our usual "Figure 1.2".
+ \ifdim\wd\printedrefnamebox = 0pt
+ \refx{#1-snt}{}%
+ \else
+ \printedrefname
+ \fi
+ %
+ % If the user also gave the printed manual name (fifth arg), append
+ % "in MANUALNAME".
+ \ifdim \wd\printedmanualbox > 0pt
+ \space \putwordin{} \cite{\printedmanual}%
+ \fi
+ \else
+ % node/anchor (non-float) references.
+ %
+ % If we use \unhbox to print the node names, TeX does not insert
+ % empty discretionaries after hyphens, which means that it will not
+ % find a line break at a hyphen in a node names. Since some manuals
+ % are best written with fairly long node names, containing hyphens,
+ % this is a loss. Therefore, we give the text of the node name
+ % again, so it is as if TeX is seeing it for the first time.
+ %
+ \ifdim \wd\printedmanualbox > 0pt
+ % Cross-manual reference with a printed manual name.
+ %
+ \crossmanualxref{\cite{\printedmanual\unskip}}%
+ %
+ \else\ifdim \wd\infofilenamebox > 0pt
+ % Cross-manual reference with only an info filename (arg 4), no
+ % printed manual name (arg 5). This is essentially the same as
+ % the case above; we output the filename, since we have nothing else.
+ %
+ \crossmanualxref{\code{\infofilename\unskip}}%
+ %
+ \else
+ % Reference within this manual.
+ %
+ % _ (for example) has to be the character _ for the purposes of the
+ % control sequence corresponding to the node, but it has to expand
+ % into the usual \leavevmode...\vrule stuff for purposes of
+ % printing. So we \turnoffactive for the \refx-snt, back on for the
+ % printing, back off for the \refx-pg.
+ {\turnoffactive
+ % Only output a following space if the -snt ref is nonempty; for
+ % @unnumbered and @anchor, it won't be.
+ \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
+ \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
+ }%
+ % output the `[mynode]' via the macro below so it can be overridden.
+ \xrefprintnodename\printedrefname
+ %
+ % But we always want a comma and a space:
+ ,\space
+ %
+ % output the `page 3'.
+ \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
+ % Add a , if xref followed by a space
+ \if\space\noexpand\tokenafterxref ,%
+ \else\ifx\ \tokenafterxref ,% @TAB
+ \else\ifx\*\tokenafterxref ,% @*
+ \else\ifx\ \tokenafterxref ,% @SPACE
+ \else\ifx\
+ \tokenafterxref ,% @NL
+ \else\ifx\tie\tokenafterxref ,% @tie
+ \fi\fi\fi\fi\fi\fi
+ \fi\fi
+ \fi
+ \endlink
+\endgroup}
+
+% Output a cross-manual xref to #1. Used just above (twice).
+%
+% Only include the text "Section ``foo'' in" if the foo is neither
+% missing or Top. Thus, @xref{,,,foo,The Foo Manual} outputs simply
+% "see The Foo Manual", the idea being to refer to the whole manual.
+%
+% But, this being TeX, we can't easily compare our node name against the
+% string "Top" while ignoring the possible spaces before and after in
+% the input. By adding the arbitrary 7sp below, we make it much less
+% likely that a real node name would have the same width as "Top" (e.g.,
+% in a monospaced font). Hopefully it will never happen in practice.
+%
+% For the same basic reason, we retypeset the "Top" at every
+% reference, since the current font is indeterminate.
+%
+\def\crossmanualxref#1{%
+ \setbox\toprefbox = \hbox{Top\kern7sp}%
+ \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}%
+ \ifdim \wd2 > 7sp % nonempty?
+ \ifdim \wd2 = \wd\toprefbox \else % same as Top?
+ \putwordSection{} ``\printedrefname'' \putwordin{}\space
+ \fi
+ \fi
+ #1%
+}
+
+% This macro is called from \xrefX for the `[nodename]' part of xref
+% output. It's a separate macro only so it can be changed more easily,
+% since square brackets don't work well in some documents. Particularly
+% one that Bob is working on :).
+%
+\def\xrefprintnodename#1{[#1]}
+
+% Things referred to by \setref.
+%
+\def\Ynothing{}
+\def\Yomitfromtoc{}
+\def\Ynumbered{%
+ \ifnum\secno=0
+ \putwordChapter@tie \the\chapno
+ \else \ifnum\subsecno=0
+ \putwordSection@tie \the\chapno.\the\secno
+ \else \ifnum\subsubsecno=0
+ \putwordSection@tie \the\chapno.\the\secno.\the\subsecno
+ \else
+ \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno
+ \fi\fi\fi
+}
+\def\Yappendix{%
+ \ifnum\secno=0
+ \putwordAppendix@tie @char\the\appendixno{}%
+ \else \ifnum\subsecno=0
+ \putwordSection@tie @char\the\appendixno.\the\secno
+ \else \ifnum\subsubsecno=0
+ \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno
+ \else
+ \putwordSection@tie
+ @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno
+ \fi\fi\fi
+}
+
+% \refx{NAME}{SUFFIX} - reference a cross-reference string named NAME. SUFFIX
+% is output afterwards if non-empty.
+\def\refx#1#2{%
+ \requireauxfile
+ {%
+ \indexnofonts
+ \otherbackslash
+ \def\value##1{##1}%
+ \expandafter\global\expandafter\let\expandafter\thisrefX
+ \csname XR#1\endcsname
+ }%
+ \ifx\thisrefX\relax
+ % If not defined, say something at least.
+ \angleleft un\-de\-fined\angleright
+ \iflinks
+ \ifhavexrefs
+ {\toks0 = {#1}% avoid expansion of possibly-complex value
+ \message{\linenumber Undefined cross reference `\the\toks0'.}}%
+ \else
+ \ifwarnedxrefs\else
+ \global\warnedxrefstrue
+ \message{Cross reference values unknown; you must run TeX again.}%
+ \fi
+ \fi
+ \fi
+ \else
+ % It's defined, so just use it.
+ \thisrefX
+ \fi
+ #2% Output the suffix in any case.
+}
+
+% This is the macro invoked by entries in the aux file. Define a control
+% sequence for a cross-reference target (we prepend XR to the control sequence
+% name to avoid collisions). The value is the page number. If this is a float
+% type, we have more work to do.
+%
+\def\xrdef#1#2{%
+ {% Expand the node or anchor name to remove control sequences.
+ % \turnoffactive stops 8-bit characters being changed to commands
+ % like @'e. \refx does the same to retrieve the value in the definition.
+ \indexnofonts
+ \turnoffactive
+ \def\value##1{##1}%
+ \xdef\safexrefname{#1}%
+ }%
+ %
+ \bgroup
+ \expandafter\gdef\csname XR\safexrefname\endcsname{#2}%
+ \egroup
+ % We put the \gdef inside a group to avoid the definitions building up on
+ % TeX's save stack, which can cause it to run out of space for aux files with
+ % thousands of lines. \gdef doesn't use the save stack, but \csname does
+ % when it defines an unknown control sequence as \relax.
+ %
+ % Was that xref control sequence that we just defined for a float?
+ \expandafter\iffloat\csname XR\safexrefname\endcsname
+ % it was a float, and we have the (safe) float type in \iffloattype.
+ \expandafter\let\expandafter\floatlist
+ \csname floatlist\iffloattype\endcsname
+ %
+ % Is this the first time we've seen this float type?
+ \expandafter\ifx\floatlist\relax
+ \toks0 = {\do}% yes, so just \do
+ \else
+ % had it before, so preserve previous elements in list.
+ \toks0 = \expandafter{\floatlist\do}%
+ \fi
+ %
+ % Remember this xref in the control sequence \floatlistFLOATTYPE,
+ % for later use in \listoffloats.
+ \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0
+ {\safexrefname}}%
+ \fi
+}
+
+% If working on a large document in chapters, it is convenient to
+% be able to disable indexing, cross-referencing, and contents, for test runs.
+% This is done with @novalidate at the beginning of the file.
+%
+\newif\iflinks \linkstrue % by default we want the aux files.
+\let\novalidate = \linksfalse
+
+% Used when writing to the aux file, or when using data from it.
+\def\requireauxfile{%
+ \iflinks
+ \tryauxfile
+ % Open the new aux file. TeX will close it automatically at exit.
+ \immediate\openout\auxfile=\jobname.aux
+ \fi
+ \global\let\requireauxfile=\relax % Only do this once.
+}
+
+% Read the last existing aux file, if any. No error if none exists.
+%
+\def\tryauxfile{%
+ \openin 1 \jobname.aux
+ \ifeof 1 \else
+ \readdatafile{aux}%
+ \global\havexrefstrue
+ \fi
+ \closein 1
+}
+
+\def\setupdatafile{%
+ \catcode`\^^@=\other
+ \catcode`\^^A=\other
+ \catcode`\^^B=\other
+ \catcode`\^^C=\other
+ \catcode`\^^D=\other
+ \catcode`\^^E=\other
+ \catcode`\^^F=\other
+ \catcode`\^^G=\other
+ \catcode`\^^H=\other
+ \catcode`\^^K=\other
+ \catcode`\^^L=\other
+ \catcode`\^^N=\other
+ \catcode`\^^P=\other
+ \catcode`\^^Q=\other
+ \catcode`\^^R=\other
+ \catcode`\^^S=\other
+ \catcode`\^^T=\other
+ \catcode`\^^U=\other
+ \catcode`\^^V=\other
+ \catcode`\^^W=\other
+ \catcode`\^^X=\other
+ \catcode`\^^Z=\other
+ \catcode`\^^[=\other
+ \catcode`\^^\=\other
+ \catcode`\^^]=\other
+ \catcode`\^^^=\other
+ \catcode`\^^_=\other
+ % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc.
+ % in xref tags, i.e., node names. But since ^^e4 notation isn't
+ % supported in the main text, it doesn't seem desirable. Furthermore,
+ % that is not enough: for node names that actually contain a ^
+ % character, we would end up writing a line like this: 'xrdef {'hat
+ % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first
+ % argument, and \hat is not an expandable control sequence. It could
+ % all be worked out, but why? Either we support ^^ or we don't.
+ %
+ % The other change necessary for this was to define \auxhat:
+ % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter
+ % and then to call \auxhat in \setq.
+ %
+ \catcode`\^=\other
+ %
+ % Special characters. Should be turned off anyway, but...
+ \catcode`\~=\other
+ \catcode`\[=\other
+ \catcode`\]=\other
+ \catcode`\"=\other
+ \catcode`\_=\other
+ \catcode`\|=\other
+ \catcode`\<=\other
+ \catcode`\>=\other
+ \catcode`\$=\other
+ \catcode`\#=\other
+ \catcode`\&=\other
+ \catcode`\%=\other
+ \catcode`+=\other % avoid \+ for paranoia even though we've turned it off
+ %
+ % This is to support \ in node names and titles, since the \
+ % characters end up in a \csname. It's easier than
+ % leaving it active and making its active definition an actual \
+ % character. What I don't understand is why it works in the *value*
+ % of the xrdef. Seems like it should be a catcode12 \, and that
+ % should not typeset properly. But it works, so I'm moving on for
+ % now. --karl, 15jan04.
+ \catcode`\\=\other
+ %
+ % @ is our escape character in .aux files, and we need braces.
+ \catcode`\{=1
+ \catcode`\}=2
+ \catcode`\@=0
+}
+
+\def\readdatafile#1{%
+\begingroup
+ \setupdatafile
+ \input\jobname.#1
+\endgroup}
+
+
+\message{insertions,}
+% including footnotes.
+
+\newcount \footnoteno
+
+% The trailing space in the following definition for supereject is
+% vital for proper filling; pages come out unaligned when you do a
+% pagealignmacro call if that space before the closing brace is
+% removed. (Generally, numeric constants should always be followed by a
+% space to prevent strange expansion errors.)
+\def\supereject{\par\penalty -20000\footnoteno =0 }
+
+% @footnotestyle is meaningful for Info output only.
+\let\footnotestyle=\comment
+
+{\catcode `\@=11
+%
+% Auto-number footnotes. Otherwise like plain.
+\gdef\footnote{%
+ \global\advance\footnoteno by \@ne
+ \edef\thisfootno{$^{\the\footnoteno}$}%
+ %
+ % In case the footnote comes at the end of a sentence, preserve the
+ % extra spacing after we do the footnote number.
+ \let\@sf\empty
+ \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi
+ %
+ % Remove inadvertent blank space before typesetting the footnote number.
+ \unskip
+ \thisfootno\@sf
+ \dofootnote
+}%
+
+% Don't bother with the trickery in plain.tex to not require the
+% footnote text as a parameter. Our footnotes don't need to be so general.
+%
+% Oh yes, they do; otherwise, @ifset (and anything else that uses
+% \parseargline) fails inside footnotes because the tokens are fixed when
+% the footnote is read. --karl, 16nov96.
+%
+\gdef\dofootnote{%
+ \insert\footins\bgroup
+ %
+ % Nested footnotes are not supported in TeX, that would take a lot
+ % more work. (\startsavinginserts does not suffice.)
+ \let\footnote=\errfootnotenest
+ %
+ % We want to typeset this text as a normal paragraph, even if the
+ % footnote reference occurs in (for example) a display environment.
+ % So reset some parameters.
+ \hsize=\txipagewidth
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\ht\strutbox % top baseline for broken footnotes
+ \splitmaxdepth\dp\strutbox
+ \floatingpenalty\@MM
+ \leftskip\z@skip
+ \rightskip\z@skip
+ \spaceskip\z@skip
+ \xspaceskip\z@skip
+ \parindent\defaultparindent
+ %
+ \smallfonts \rm
+ %
+ % Because we use hanging indentation in footnotes, a @noindent appears
+ % to exdent this text, so make it be a no-op. makeinfo does not use
+ % hanging indentation so @noindent can still be needed within footnote
+ % text after an @example or the like (not that this is good style).
+ \let\noindent = \relax
+ %
+ % Hang the footnote text off the number. Use \everypar in case the
+ % footnote extends for more than one paragraph.
+ \everypar = {\hang}%
+ \textindent{\thisfootno}%
+ %
+ % Don't crash into the line above the footnote text. Since this
+ % expands into a box, it must come within the paragraph, lest it
+ % provide a place where TeX can split the footnote.
+ \footstrut
+ %
+ % Invoke rest of plain TeX footnote routine.
+ \futurelet\next\fo@t
+}
+}%end \catcode `\@=11
+
+\def\errfootnotenest{%
+ \errhelp=\EMsimple
+ \errmessage{Nested footnotes not supported in texinfo.tex,
+ even though they work in makeinfo; sorry}
+}
+
+\def\errfootnoteheading{%
+ \errhelp=\EMsimple
+ \errmessage{Footnotes in chapters, sections, etc., are not supported}
+}
+
+% In case a @footnote appears in a vbox, save the footnote text and create
+% the real \insert just after the vbox finished. Otherwise, the insertion
+% would be lost.
+% Similarly, if a @footnote appears inside an alignment, save the footnote
+% text to a box and make the \insert when a row of the table is finished.
+% And the same can be done for other insert classes. --kasal, 16nov03.
+%
+% Replace the \insert primitive by a cheating macro.
+% Deeper inside, just make sure that the saved insertions are not spilled
+% out prematurely.
+%
+\def\startsavinginserts{%
+ \ifx \insert\ptexinsert
+ \let\insert\saveinsert
+ \else
+ \let\checkinserts\relax
+ \fi
+}
+
+% This \insert replacement works for both \insert\footins{foo} and
+% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}.
+%
+\def\saveinsert#1{%
+ \edef\next{\noexpand\savetobox \makeSAVEname#1}%
+ \afterassignment\next
+ % swallow the left brace
+ \let\temp =
+}
+\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}}
+\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1}
+
+\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi}
+
+\def\placesaveins#1{%
+ \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname
+ {\box#1}%
+}
+
+% eat @SAVE -- beware, all of them have catcode \other:
+{
+ \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-)
+ \gdef\gobblesave @SAVE{}
+}
+
+% initialization:
+\def\newsaveins #1{%
+ \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}%
+ \next
+}
+\def\newsaveinsX #1{%
+ \csname newbox\endcsname #1%
+ \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts
+ \checksaveins #1}%
+}
+
+% initialize:
+\let\checkinserts\empty
+\newsaveins\footins
+\newsaveins\margin
+
+
+% @image. We use the macros from epsf.tex to support this.
+% If epsf.tex is not installed and @image is used, we complain.
+%
+% Check for and read epsf.tex up front. If we read it only at @image
+% time, we might be inside a group, and then its definitions would get
+% undone and the next image would fail.
+\openin 1 = epsf.tex
+\ifeof 1 \else
+ % Do not bother showing banner with epsf.tex v2.7k (available in
+ % doc/epsf.tex and on ctan).
+ \def\epsfannounce{\toks0 = }%
+ \input epsf.tex
+\fi
+\closein 1
+%
+% We will only complain once about lack of epsf.tex.
+\newif\ifwarnednoepsf
+\newhelp\noepsfhelp{epsf.tex must be installed for images to
+ work. It is also included in the Texinfo distribution, or you can get
+ it from https://ctan.org/texarchive/macros/texinfo/texinfo/doc/epsf.tex.}
+%
+\def\image#1{%
+ \ifx\epsfbox\thisisundefined
+ \ifwarnednoepsf \else
+ \errhelp = \noepsfhelp
+ \errmessage{epsf.tex not found, images will be ignored}%
+ \global\warnednoepsftrue
+ \fi
+ \else
+ \imagexxx #1,,,,,\finish
+ \fi
+}
+%
+% Arguments to @image:
+% #1 is (mandatory) image filename; we tack on .eps extension.
+% #2 is (optional) width, #3 is (optional) height.
+% #4 is (ignored optional) html alt text.
+% #5 is (ignored optional) extension.
+% #6 is just the usual extra ignored arg for parsing stuff.
+\newif\ifimagevmode
+\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup
+ \catcode`\^^M = 5 % in case we're inside an example
+ \normalturnoffactive % allow _ et al. in names
+ \def\xprocessmacroarg{\eatspaces}% in case we are being used via a macro
+ % If the image is by itself, center it.
+ \ifvmode
+ \imagevmodetrue
+ \else \ifx\centersub\centerV
+ % for @center @image, we need a vbox so we can have our vertical space
+ \imagevmodetrue
+ \vbox\bgroup % vbox has better behavior than vtop herev
+ \fi\fi
+ %
+ \ifimagevmode
+ \nobreak\medskip
+ % Usually we'll have text after the image which will insert
+ % \parskip glue, so insert it here too to equalize the space
+ % above and below.
+ \nobreak\vskip\parskip
+ \nobreak
+ \fi
+ %
+ % Leave vertical mode so that indentation from an enclosing
+ % environment such as @quotation is respected.
+ % However, if we're at the top level, we don't want the
+ % normal paragraph indentation.
+ % On the other hand, if we are in the case of @center @image, we don't
+ % want to start a paragraph, which will create a hsize-width box and
+ % eradicate the centering.
+ \ifx\centersub\centerV\else \noindent \fi
+ %
+ % Output the image.
+ \ifpdf
+ % For pdfTeX and LuaTeX <= 0.80
+ \dopdfimage{#1}{#2}{#3}%
+ \else
+ \ifx\XeTeXrevision\thisisundefined
+ % For epsf.tex
+ % \epsfbox itself resets \epsf?size at each figure.
+ \setbox0 = \hbox{\ignorespaces #2}%
+ \ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
+ \setbox0 = \hbox{\ignorespaces #3}%
+ \ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
+ \epsfbox{#1.eps}%
+ \else
+ % For XeTeX
+ \doxeteximage{#1}{#2}{#3}%
+ \fi
+ \fi
+ %
+ \ifimagevmode
+ \medskip % space after a standalone image
+ \fi
+ \ifx\centersub\centerV \egroup \fi
+\endgroup}
+
+
+% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables,
+% etc. We don't actually implement floating yet, we always include the
+% float "here". But it seemed the best name for the future.
+%
+\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish}
+
+% There may be a space before second and/or third parameter; delete it.
+\def\eatcommaspace#1, {#1,}
+
+% #1 is the optional FLOATTYPE, the text label for this float, typically
+% "Figure", "Table", "Example", etc. Can't contain commas. If omitted,
+% this float will not be numbered and cannot be referred to.
+%
+% #2 is the optional xref label. Also must be present for the float to
+% be referable.
+%
+% #3 is the optional positioning argument; for now, it is ignored. It
+% will somehow specify the positions allowed to float to (here, top, bottom).
+%
+% We keep a separate counter for each FLOATTYPE, which we reset at each
+% chapter-level command.
+\let\resetallfloatnos=\empty
+%
+\def\dofloat#1,#2,#3,#4\finish{%
+ \let\thiscaption=\empty
+ \let\thisshortcaption=\empty
+ %
+ % don't lose footnotes inside @float.
+ %
+ % BEWARE: when the floats start float, we have to issue warning whenever an
+ % insert appears inside a float which could possibly float. --kasal, 26may04
+ %
+ \startsavinginserts
+ %
+ % We can't be used inside a paragraph.
+ \par
+ %
+ \vtop\bgroup
+ \def\floattype{#1}%
+ \def\floatlabel{#2}%
+ \def\floatloc{#3}% we do nothing with this yet.
+ %
+ \ifx\floattype\empty
+ \let\safefloattype=\empty
+ \else
+ {%
+ % the floattype might have accents or other special characters,
+ % but we need to use it in a control sequence name.
+ \indexnofonts
+ \turnoffactive
+ \xdef\safefloattype{\floattype}%
+ }%
+ \fi
+ %
+ % If label is given but no type, we handle that as the empty type.
+ \ifx\floatlabel\empty \else
+ % We want each FLOATTYPE to be numbered separately (Figure 1,
+ % Table 1, Figure 2, ...). (And if no label, no number.)
+ %
+ \expandafter\getfloatno\csname\safefloattype floatno\endcsname
+ \global\advance\floatno by 1
+ %
+ {%
+ % This magic value for \lastsection is output by \setref as the
+ % XREFLABEL-title value. \xrefX uses it to distinguish float
+ % labels (which have a completely different output format) from
+ % node and anchor labels. And \xrdef uses it to construct the
+ % lists of floats.
+ %
+ \edef\lastsection{\floatmagic=\safefloattype}%
+ \setref{\floatlabel}{Yfloat}%
+ }%
+ \fi
+ %
+ % start with \parskip glue, I guess.
+ \vskip\parskip
+ %
+ % Don't suppress indentation if a float happens to start a section.
+ \restorefirstparagraphindent
+}
+
+% we have these possibilities:
+% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap
+% @float Foo,lbl & no caption: Foo 1.1
+% @float Foo & @caption{Cap}: Foo: Cap
+% @float Foo & no caption: Foo
+% @float ,lbl & Caption{Cap}: 1.1: Cap
+% @float ,lbl & no caption: 1.1
+% @float & @caption{Cap}: Cap
+% @float & no caption:
+%
+\def\Efloat{%
+ \let\floatident = \empty
+ %
+ % In all cases, if we have a float type, it comes first.
+ \ifx\floattype\empty \else \def\floatident{\floattype}\fi
+ %
+ % If we have an xref label, the number comes next.
+ \ifx\floatlabel\empty \else
+ \ifx\floattype\empty \else % if also had float type, need tie first.
+ \appendtomacro\floatident{\tie}%
+ \fi
+ % the number.
+ \appendtomacro\floatident{\chaplevelprefix\the\floatno}%
+ \fi
+ %
+ % Start the printed caption with what we've constructed in
+ % \floatident, but keep it separate; we need \floatident again.
+ \let\captionline = \floatident
+ %
+ \ifx\thiscaption\empty \else
+ \ifx\floatident\empty \else
+ \appendtomacro\captionline{: }% had ident, so need a colon between
+ \fi
+ %
+ % caption text.
+ \appendtomacro\captionline{\scanexp\thiscaption}%
+ \fi
+ %
+ % If we have anything to print, print it, with space before.
+ % Eventually this needs to become an \insert.
+ \ifx\captionline\empty \else
+ \vskip.5\parskip
+ \captionline
+ %
+ % Space below caption.
+ \vskip\parskip
+ \fi
+ %
+ % If have an xref label, write the list of floats info. Do this
+ % after the caption, to avoid chance of it being a breakpoint.
+ \ifx\floatlabel\empty \else
+ % Write the text that goes in the lof to the aux file as
+ % \floatlabel-lof. Besides \floatident, we include the short
+ % caption if specified, else the full caption if specified, else nothing.
+ {%
+ \requireauxfile
+ \atdummies
+ %
+ \ifx\thisshortcaption\empty
+ \def\gtemp{\thiscaption}%
+ \else
+ \def\gtemp{\thisshortcaption}%
+ \fi
+ \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident
+ \ifx\gtemp\empty \else : \gtemp \fi}}%
+ }%
+ \fi
+ \egroup % end of \vtop
+ %
+ \checkinserts
+}
+
+% Append the tokens #2 to the definition of macro #1, not expanding either.
+%
+\def\appendtomacro#1#2{%
+ \expandafter\def\expandafter#1\expandafter{#1#2}%
+}
+
+% @caption, @shortcaption
+%
+\def\caption{\docaption\thiscaption}
+\def\shortcaption{\docaption\thisshortcaption}
+\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption}
+\def\defcaption#1#2{\egroup \def#1{#2}}
+
+% The parameter is the control sequence identifying the counter we are
+% going to use. Create it if it doesn't exist and assign it to \floatno.
+\def\getfloatno#1{%
+ \ifx#1\relax
+ % Haven't seen this figure type before.
+ \csname newcount\endcsname #1%
+ %
+ % Remember to reset this floatno at the next chap.
+ \expandafter\gdef\expandafter\resetallfloatnos
+ \expandafter{\resetallfloatnos #1=0 }%
+ \fi
+ \let\floatno#1%
+}
+
+% \setref calls this to get the XREFLABEL-snt value. We want an @xref
+% to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we
+% first read the @float command.
+%
+\def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}%
+
+% Magic string used for the XREFLABEL-title value, so \xrefX can
+% distinguish floats from other xref types.
+\def\floatmagic{!!float!!}
+
+% #1 is the control sequence we are passed; we expand into a conditional
+% which is true if #1 represents a float ref. That is, the magic
+% \lastsection value which we \setref above.
+%
+\def\iffloat#1{\expandafter\doiffloat#1==\finish}
+%
+% #1 is (maybe) the \floatmagic string. If so, #2 will be the
+% (safe) float type for this float. We set \iffloattype to #2.
+%
+\def\doiffloat#1=#2=#3\finish{%
+ \def\temp{#1}%
+ \def\iffloattype{#2}%
+ \ifx\temp\floatmagic
+}
+
+% @listoffloats FLOATTYPE - print a list of floats like a table of contents.
+%
+\parseargdef\listoffloats{%
+ \def\floattype{#1}% floattype
+ {%
+ % the floattype might have accents or other special characters,
+ % but we need to use it in a control sequence name.
+ \indexnofonts
+ \turnoffactive
+ \xdef\safefloattype{\floattype}%
+ }%
+ %
+ % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE.
+ \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax
+ \ifhavexrefs
+ % if the user said @listoffloats foo but never @float foo.
+ \message{\linenumber No `\safefloattype' floats to list.}%
+ \fi
+ \else
+ \begingroup
+ \leftskip=\tocindent % indent these entries like a toc
+ \let\do=\listoffloatsdo
+ \csname floatlist\safefloattype\endcsname
+ \endgroup
+ \fi
+}
+
+% This is called on each entry in a list of floats. We're passed the
+% xref label, in the form LABEL-title, which is how we save it in the
+% aux file. We strip off the -title and look up \XRLABEL-lof, which
+% has the text we're supposed to typeset here.
+%
+% Figures without xref labels will not be included in the list (since
+% they won't appear in the aux file).
+%
+\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish}
+\def\listoffloatsdoentry#1-title\finish{{%
+ % Can't fully expand XR#1-lof because it can contain anything. Just
+ % pass the control sequence. On the other hand, XR#1-pg is just the
+ % page number, and we want to fully expand that so we can get a link
+ % in pdf output.
+ \toksA = \expandafter{\csname XR#1-lof\endcsname}%
+ %
+ % use the same \entry macro we use to generate the TOC and index.
+ \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}%
+ \writeentry
+}}
+
+
+\message{localization,}
+
+% For single-language documents, @documentlanguage is usually given very
+% early, just after @documentencoding. Single argument is the language
+% (de) or locale (de_DE) abbreviation.
+%
+{
+ \catcode`\_ = \active
+ \globaldefs=1
+\parseargdef\documentlanguage{%
+ \tex % read txi-??.tex file in plain TeX.
+ % Read the file by the name they passed if it exists.
+ \let_ = \normalunderscore % normal _ character for filename test
+ \openin 1 txi-#1.tex
+ \ifeof 1
+ \documentlanguagetrywithoutunderscore #1_\finish
+ \else
+ \globaldefs = 1 % everything in the txi-LL files needs to persist
+ \input txi-#1.tex
+ \fi
+ \closein 1
+ \endgroup % end raw TeX
+}
+%
+% If they passed de_DE, and txi-de_DE.tex doesn't exist,
+% try txi-de.tex.
+%
+\gdef\documentlanguagetrywithoutunderscore#1_#2\finish{%
+ \openin 1 txi-#1.tex
+ \ifeof 1
+ \errhelp = \nolanghelp
+ \errmessage{Cannot read language file txi-#1.tex}%
+ \else
+ \globaldefs = 1 % everything in the txi-LL files needs to persist
+ \input txi-#1.tex
+ \fi
+ \closein 1
+}
+}% end of special _ catcode
+%
+\newhelp\nolanghelp{The given language definition file cannot be found or
+is empty. Maybe you need to install it? Putting it in the current
+directory should work if nowhere else does.}
+
+% This macro is called from txi-??.tex files; the first argument is the
+% \language name to set (without the "\lang@" prefix), the second and
+% third args are \{left,right}hyphenmin.
+%
+% The language names to pass are determined when the format is built.
+% See the etex.log file created at that time, e.g.,
+% /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log.
+%
+% With TeX Live 2008, etex now includes hyphenation patterns for all
+% available languages. This means we can support hyphenation in
+% Texinfo, at least to some extent. (This still doesn't solve the
+% accented characters problem.)
+%
+\catcode`@=11
+\def\txisetlanguage#1#2#3{%
+ % do not set the language if the name is undefined in the current TeX.
+ \expandafter\ifx\csname lang@#1\endcsname \relax
+ \message{no patterns for #1}%
+ \else
+ \global\language = \csname lang@#1\endcsname
+ \fi
+ % but there is no harm in adjusting the hyphenmin values regardless.
+ \global\lefthyphenmin = #2\relax
+ \global\righthyphenmin = #3\relax
+}
+
+% XeTeX and LuaTeX can handle Unicode natively.
+% Their default I/O uses UTF-8 sequences instead of a byte-wise operation.
+% Other TeX engines' I/O (pdfTeX, etc.) is byte-wise.
+%
+\newif\iftxinativeunicodecapable
+\newif\iftxiusebytewiseio
+
+\ifx\XeTeXrevision\thisisundefined
+ \ifx\luatexversion\thisisundefined
+ \txinativeunicodecapablefalse
+ \txiusebytewiseiotrue
+ \else
+ \txinativeunicodecapabletrue
+ \txiusebytewiseiofalse
+ \fi
+\else
+ \txinativeunicodecapabletrue
+ \txiusebytewiseiofalse
+\fi
+
+% Set I/O by bytes instead of UTF-8 sequence for XeTeX and LuaTex
+% for non-UTF-8 (byte-wise) encodings.
+%
+\def\setbytewiseio{%
+ \ifx\XeTeXrevision\thisisundefined
+ \else
+ \XeTeXdefaultencoding "bytes" % For subsequent files to be read
+ \XeTeXinputencoding "bytes" % For document root file
+ % Unfortunately, there seems to be no corresponding XeTeX command for
+ % output encoding. This is a problem for auxiliary index and TOC files.
+ % The only solution would be perhaps to write out @U{...} sequences in
+ % place of non-ASCII characters.
+ \fi
+
+ \ifx\luatexversion\thisisundefined
+ \else
+ \directlua{
+ local utf8_char, byte, gsub = unicode.utf8.char, string.byte, string.gsub
+ local function convert_char (char)
+ return utf8_char(byte(char))
+ end
+
+ local function convert_line (line)
+ return gsub(line, ".", convert_char)
+ end
+
+ callback.register("process_input_buffer", convert_line)
+
+ local function convert_line_out (line)
+ local line_out = ""
+ for c in string.utfvalues(line) do
+ line_out = line_out .. string.char(c)
+ end
+ return line_out
+ end
+
+ callback.register("process_output_buffer", convert_line_out)
+ }
+ \fi
+
+ \txiusebytewiseiotrue
+}
+
+
+% Helpers for encodings.
+% Set the catcode of characters 128 through 255 to the specified number.
+%
+\def\setnonasciicharscatcode#1{%
+ \count255=128
+ \loop\ifnum\count255<256
+ \global\catcode\count255=#1\relax
+ \advance\count255 by 1
+ \repeat
+}
+
+\def\setnonasciicharscatcodenonglobal#1{%
+ \count255=128
+ \loop\ifnum\count255<256
+ \catcode\count255=#1\relax
+ \advance\count255 by 1
+ \repeat
+}
+
+% @documentencoding sets the definition of non-ASCII characters
+% according to the specified encoding.
+%
+\def\documentencoding{\parseargusing\filenamecatcodes\documentencodingzzz}
+\def\documentencodingzzz#1{%
+ %
+ % Encoding being declared for the document.
+ \def\declaredencoding{\csname #1.enc\endcsname}%
+ %
+ % Supported encodings: names converted to tokens in order to be able
+ % to compare them with \ifx.
+ \def\ascii{\csname US-ASCII.enc\endcsname}%
+ \def\latnine{\csname ISO-8859-15.enc\endcsname}%
+ \def\latone{\csname ISO-8859-1.enc\endcsname}%
+ \def\lattwo{\csname ISO-8859-2.enc\endcsname}%
+ \def\utfeight{\csname UTF-8.enc\endcsname}%
+ %
+ \ifx \declaredencoding \ascii
+ \asciichardefs
+ %
+ \else \ifx \declaredencoding \lattwo
+ \iftxinativeunicodecapable
+ \setbytewiseio
+ \fi
+ \setnonasciicharscatcode\active
+ \lattwochardefs
+ %
+ \else \ifx \declaredencoding \latone
+ \iftxinativeunicodecapable
+ \setbytewiseio
+ \fi
+ \setnonasciicharscatcode\active
+ \latonechardefs
+ %
+ \else \ifx \declaredencoding \latnine
+ \iftxinativeunicodecapable
+ \setbytewiseio
+ \fi
+ \setnonasciicharscatcode\active
+ \latninechardefs
+ %
+ \else \ifx \declaredencoding \utfeight
+ \iftxinativeunicodecapable
+ % For native Unicode handling (XeTeX and LuaTeX)
+ \nativeunicodechardefs
+ \else
+ % For treating UTF-8 as byte sequences (TeX, eTeX and pdfTeX)
+ \setnonasciicharscatcode\active
+ % since we already invoked \utfeightchardefs at the top level
+ % (below), do not re-invoke it, otherwise our check for duplicated
+ % definitions gets triggered. Making non-ascii chars active is
+ % sufficient.
+ \fi
+ %
+ \else
+ \message{Ignoring unknown document encoding: #1.}%
+ %
+ \fi % utfeight
+ \fi % latnine
+ \fi % latone
+ \fi % lattwo
+ \fi % ascii
+ %
+ \ifx\XeTeXrevision\thisisundefined
+ \else
+ \ifx \declaredencoding \utfeight
+ \else
+ \ifx \declaredencoding \ascii
+ \else
+ \message{Warning: XeTeX with non-UTF-8 encodings cannot handle %
+ non-ASCII characters in auxiliary files.}%
+ \fi
+ \fi
+ \fi
+}
+
+% emacs-page
+% A message to be logged when using a character that isn't available
+% the default font encoding (OT1).
+%
+\def\missingcharmsg#1{\message{Character missing, sorry: #1.}}
+
+% Take account of \c (plain) vs. \, (Texinfo) difference.
+\def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi}
+
+% First, make active non-ASCII characters in order for them to be
+% correctly categorized when TeX reads the replacement text of
+% macros containing the character definitions.
+\setnonasciicharscatcode\active
+%
+
+\def\gdefchar#1#2{%
+\gdef#1{%
+ \ifpassthroughchars
+ \string#1%
+ \else
+ #2%
+ \fi
+}}
+
+% Latin1 (ISO-8859-1) character definitions.
+\def\latonechardefs{%
+ \gdefchar^^a0{\tie}
+ \gdefchar^^a1{\exclamdown}
+ \gdefchar^^a2{{\tcfont \char162}} % cent
+ \gdefchar^^a3{\pounds{}}
+ \gdefchar^^a4{{\tcfont \char164}} % currency
+ \gdefchar^^a5{{\tcfont \char165}} % yen
+ \gdefchar^^a6{{\tcfont \char166}} % broken bar
+ \gdefchar^^a7{\S}
+ \gdefchar^^a8{\"{}}
+ \gdefchar^^a9{\copyright{}}
+ \gdefchar^^aa{\ordf}
+ \gdefchar^^ab{\guillemetleft{}}
+ \gdefchar^^ac{\ensuremath\lnot}
+ \gdefchar^^ad{\-}
+ \gdefchar^^ae{\registeredsymbol{}}
+ \gdefchar^^af{\={}}
+ %
+ \gdefchar^^b0{\textdegree}
+ \gdefchar^^b1{$\pm$}
+ \gdefchar^^b2{$^2$}
+ \gdefchar^^b3{$^3$}
+ \gdefchar^^b4{\'{}}
+ \gdefchar^^b5{$\mu$}
+ \gdefchar^^b6{\P}
+ \gdefchar^^b7{\ensuremath\cdot}
+ \gdefchar^^b8{\cedilla\ }
+ \gdefchar^^b9{$^1$}
+ \gdefchar^^ba{\ordm}
+ \gdefchar^^bb{\guillemetright{}}
+ \gdefchar^^bc{$1\over4$}
+ \gdefchar^^bd{$1\over2$}
+ \gdefchar^^be{$3\over4$}
+ \gdefchar^^bf{\questiondown}
+ %
+ \gdefchar^^c0{\`A}
+ \gdefchar^^c1{\'A}
+ \gdefchar^^c2{\^A}
+ \gdefchar^^c3{\~A}
+ \gdefchar^^c4{\"A}
+ \gdefchar^^c5{\ringaccent A}
+ \gdefchar^^c6{\AE}
+ \gdefchar^^c7{\cedilla C}
+ \gdefchar^^c8{\`E}
+ \gdefchar^^c9{\'E}
+ \gdefchar^^ca{\^E}
+ \gdefchar^^cb{\"E}
+ \gdefchar^^cc{\`I}
+ \gdefchar^^cd{\'I}
+ \gdefchar^^ce{\^I}
+ \gdefchar^^cf{\"I}
+ %
+ \gdefchar^^d0{\DH}
+ \gdefchar^^d1{\~N}
+ \gdefchar^^d2{\`O}
+ \gdefchar^^d3{\'O}
+ \gdefchar^^d4{\^O}
+ \gdefchar^^d5{\~O}
+ \gdefchar^^d6{\"O}
+ \gdefchar^^d7{$\times$}
+ \gdefchar^^d8{\O}
+ \gdefchar^^d9{\`U}
+ \gdefchar^^da{\'U}
+ \gdefchar^^db{\^U}
+ \gdefchar^^dc{\"U}
+ \gdefchar^^dd{\'Y}
+ \gdefchar^^de{\TH}
+ \gdefchar^^df{\ss}
+ %
+ \gdefchar^^e0{\`a}
+ \gdefchar^^e1{\'a}
+ \gdefchar^^e2{\^a}
+ \gdefchar^^e3{\~a}
+ \gdefchar^^e4{\"a}
+ \gdefchar^^e5{\ringaccent a}
+ \gdefchar^^e6{\ae}
+ \gdefchar^^e7{\cedilla c}
+ \gdefchar^^e8{\`e}
+ \gdefchar^^e9{\'e}
+ \gdefchar^^ea{\^e}
+ \gdefchar^^eb{\"e}
+ \gdefchar^^ec{\`{\dotless i}}
+ \gdefchar^^ed{\'{\dotless i}}
+ \gdefchar^^ee{\^{\dotless i}}
+ \gdefchar^^ef{\"{\dotless i}}
+ %
+ \gdefchar^^f0{\dh}
+ \gdefchar^^f1{\~n}
+ \gdefchar^^f2{\`o}
+ \gdefchar^^f3{\'o}
+ \gdefchar^^f4{\^o}
+ \gdefchar^^f5{\~o}
+ \gdefchar^^f6{\"o}
+ \gdefchar^^f7{$\div$}
+ \gdefchar^^f8{\o}
+ \gdefchar^^f9{\`u}
+ \gdefchar^^fa{\'u}
+ \gdefchar^^fb{\^u}
+ \gdefchar^^fc{\"u}
+ \gdefchar^^fd{\'y}
+ \gdefchar^^fe{\th}
+ \gdefchar^^ff{\"y}
+}
+
+% Latin9 (ISO-8859-15) encoding character definitions.
+\def\latninechardefs{%
+ % Encoding is almost identical to Latin1.
+ \latonechardefs
+ %
+ \gdefchar^^a4{\euro{}}
+ \gdefchar^^a6{\v S}
+ \gdefchar^^a8{\v s}
+ \gdefchar^^b4{\v Z}
+ \gdefchar^^b8{\v z}
+ \gdefchar^^bc{\OE}
+ \gdefchar^^bd{\oe}
+ \gdefchar^^be{\"Y}
+}
+
+% Latin2 (ISO-8859-2) character definitions.
+\def\lattwochardefs{%
+ \gdefchar^^a0{\tie}
+ \gdefchar^^a1{\ogonek{A}}
+ \gdefchar^^a2{\u{}}
+ \gdefchar^^a3{\L}
+ \gdefchar^^a4{\missingcharmsg{CURRENCY SIGN}}
+ \gdefchar^^a5{\v L}
+ \gdefchar^^a6{\'S}
+ \gdefchar^^a7{\S}
+ \gdefchar^^a8{\"{}}
+ \gdefchar^^a9{\v S}
+ \gdefchar^^aa{\cedilla S}
+ \gdefchar^^ab{\v T}
+ \gdefchar^^ac{\'Z}
+ \gdefchar^^ad{\-}
+ \gdefchar^^ae{\v Z}
+ \gdefchar^^af{\dotaccent Z}
+ %
+ \gdefchar^^b0{\textdegree{}}
+ \gdefchar^^b1{\ogonek{a}}
+ \gdefchar^^b2{\ogonek{ }}
+ \gdefchar^^b3{\l}
+ \gdefchar^^b4{\'{}}
+ \gdefchar^^b5{\v l}
+ \gdefchar^^b6{\'s}
+ \gdefchar^^b7{\v{}}
+ \gdefchar^^b8{\cedilla\ }
+ \gdefchar^^b9{\v s}
+ \gdefchar^^ba{\cedilla s}
+ \gdefchar^^bb{\v t}
+ \gdefchar^^bc{\'z}
+ \gdefchar^^bd{\H{}}
+ \gdefchar^^be{\v z}
+ \gdefchar^^bf{\dotaccent z}
+ %
+ \gdefchar^^c0{\'R}
+ \gdefchar^^c1{\'A}
+ \gdefchar^^c2{\^A}
+ \gdefchar^^c3{\u A}
+ \gdefchar^^c4{\"A}
+ \gdefchar^^c5{\'L}
+ \gdefchar^^c6{\'C}
+ \gdefchar^^c7{\cedilla C}
+ \gdefchar^^c8{\v C}
+ \gdefchar^^c9{\'E}
+ \gdefchar^^ca{\ogonek{E}}
+ \gdefchar^^cb{\"E}
+ \gdefchar^^cc{\v E}
+ \gdefchar^^cd{\'I}
+ \gdefchar^^ce{\^I}
+ \gdefchar^^cf{\v D}
+ %
+ \gdefchar^^d0{\DH}
+ \gdefchar^^d1{\'N}
+ \gdefchar^^d2{\v N}
+ \gdefchar^^d3{\'O}
+ \gdefchar^^d4{\^O}
+ \gdefchar^^d5{\H O}
+ \gdefchar^^d6{\"O}
+ \gdefchar^^d7{$\times$}
+ \gdefchar^^d8{\v R}
+ \gdefchar^^d9{\ringaccent U}
+ \gdefchar^^da{\'U}
+ \gdefchar^^db{\H U}
+ \gdefchar^^dc{\"U}
+ \gdefchar^^dd{\'Y}
+ \gdefchar^^de{\cedilla T}
+ \gdefchar^^df{\ss}
+ %
+ \gdefchar^^e0{\'r}
+ \gdefchar^^e1{\'a}
+ \gdefchar^^e2{\^a}
+ \gdefchar^^e3{\u a}
+ \gdefchar^^e4{\"a}
+ \gdefchar^^e5{\'l}
+ \gdefchar^^e6{\'c}
+ \gdefchar^^e7{\cedilla c}
+ \gdefchar^^e8{\v c}
+ \gdefchar^^e9{\'e}
+ \gdefchar^^ea{\ogonek{e}}
+ \gdefchar^^eb{\"e}
+ \gdefchar^^ec{\v e}
+ \gdefchar^^ed{\'{\dotless{i}}}
+ \gdefchar^^ee{\^{\dotless{i}}}
+ \gdefchar^^ef{\v d}
+ %
+ \gdefchar^^f0{\dh}
+ \gdefchar^^f1{\'n}
+ \gdefchar^^f2{\v n}
+ \gdefchar^^f3{\'o}
+ \gdefchar^^f4{\^o}
+ \gdefchar^^f5{\H o}
+ \gdefchar^^f6{\"o}
+ \gdefchar^^f7{$\div$}
+ \gdefchar^^f8{\v r}
+ \gdefchar^^f9{\ringaccent u}
+ \gdefchar^^fa{\'u}
+ \gdefchar^^fb{\H u}
+ \gdefchar^^fc{\"u}
+ \gdefchar^^fd{\'y}
+ \gdefchar^^fe{\cedilla t}
+ \gdefchar^^ff{\dotaccent{}}
+}
+
+% UTF-8 character definitions.
+%
+% This code to support UTF-8 is based on LaTeX's utf8.def, with some
+% changes for Texinfo conventions. It is included here under the GPL by
+% permission from Frank Mittelbach and the LaTeX team.
+%
+\newcount\countUTFx
+\newcount\countUTFy
+\newcount\countUTFz
+
+\gdef\UTFviiiTwoOctets#1#2{\expandafter
+ \UTFviiiDefined\csname u8:#1\string #2\endcsname}
+%
+\gdef\UTFviiiThreeOctets#1#2#3{\expandafter
+ \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname}
+%
+\gdef\UTFviiiFourOctets#1#2#3#4{\expandafter
+ \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname}
+
+\gdef\UTFviiiDefined#1{%
+ \ifx #1\relax
+ \message{\linenumber Unicode char \string #1 not defined for Texinfo}%
+ \else
+ \expandafter #1%
+ \fi
+}
+
+% Give non-ASCII bytes the active definitions for processing UTF-8 sequences
+\begingroup
+ \catcode`\~13
+ \catcode`\$12
+ \catcode`\"12
+
+ % Loop from \countUTFx to \countUTFy, performing \UTFviiiTmp
+ % substituting ~ and $ with a character token of that value.
+ \def\UTFviiiLoop{%
+ \global\catcode\countUTFx\active
+ \uccode`\~\countUTFx
+ \uccode`\$\countUTFx
+ \uppercase\expandafter{\UTFviiiTmp}%
+ \advance\countUTFx by 1
+ \ifnum\countUTFx < \countUTFy
+ \expandafter\UTFviiiLoop
+ \fi}
+
+ % For bytes other than the first in a UTF-8 sequence. Not expected to
+ % be expanded except when writing to auxiliary files.
+ \countUTFx = "80
+ \countUTFy = "C2
+ \def\UTFviiiTmp{%
+ \gdef~{%
+ \ifpassthroughchars $\fi}}%
+ \UTFviiiLoop
+
+ \countUTFx = "C2
+ \countUTFy = "E0
+ \def\UTFviiiTmp{%
+ \gdef~{%
+ \ifpassthroughchars $%
+ \else\expandafter\UTFviiiTwoOctets\expandafter$\fi}}%
+ \UTFviiiLoop
+
+ \countUTFx = "E0
+ \countUTFy = "F0
+ \def\UTFviiiTmp{%
+ \gdef~{%
+ \ifpassthroughchars $%
+ \else\expandafter\UTFviiiThreeOctets\expandafter$\fi}}%
+ \UTFviiiLoop
+
+ \countUTFx = "F0
+ \countUTFy = "F4
+ \def\UTFviiiTmp{%
+ \gdef~{%
+ \ifpassthroughchars $%
+ \else\expandafter\UTFviiiFourOctets\expandafter$\fi
+ }}%
+ \UTFviiiLoop
+\endgroup
+
+\def\globallet{\global\let} % save some \expandafter's below
+
+% @U{xxxx} to produce U+xxxx, if we support it.
+\def\U#1{%
+ \expandafter\ifx\csname uni:#1\endcsname \relax
+ \iftxinativeunicodecapable
+ % All Unicode characters can be used if native Unicode handling is
+ % active. However, if the font does not have the glyph,
+ % letters are missing.
+ \begingroup
+ \uccode`\.="#1\relax
+ \uppercase{.}
+ \endgroup
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unicode character U+#1 not supported, sorry}%
+ \fi
+ \else
+ \csname uni:#1\endcsname
+ \fi
+}
+
+% These macros are used here to construct the name of a control
+% sequence to be defined.
+\def\UTFviiiTwoOctetsName#1#2{%
+ \csname u8:#1\string #2\endcsname}%
+\def\UTFviiiThreeOctetsName#1#2#3{%
+ \csname u8:#1\string #2\string #3\endcsname}%
+\def\UTFviiiFourOctetsName#1#2#3#4{%
+ \csname u8:#1\string #2\string #3\string #4\endcsname}%
+
+% For UTF-8 byte sequences (TeX, e-TeX and pdfTeX),
+% provide a definition macro to replace a Unicode character;
+% this gets used by the @U command
+%
+\begingroup
+ \catcode`\"=12
+ \catcode`\<=12
+ \catcode`\.=12
+ \catcode`\,=12
+ \catcode`\;=12
+ \catcode`\!=12
+ \catcode`\~=13
+ \gdef\DeclareUnicodeCharacterUTFviii#1#2{%
+ \countUTFz = "#1\relax
+ \begingroup
+ \parseXMLCharref
+
+ % Give \u8:... its definition. The sequence of seven \expandafter's
+ % expands after the \gdef three times, e.g.
+ %
+ % 1. \UTFviiTwoOctetsName B1 B2
+ % 2. \csname u8:B1 \string B2 \endcsname
+ % 3. \u8: B1 B2 (a single control sequence token)
+ %
+ \expandafter\expandafter
+ \expandafter\expandafter
+ \expandafter\expandafter
+ \expandafter\gdef \UTFviiiTmp{#2}%
+ %
+ \expandafter\ifx\csname uni:#1\endcsname \relax \else
+ \message{Internal error, already defined: #1}%
+ \fi
+ %
+ % define an additional control sequence for this code point.
+ \expandafter\globallet\csname uni:#1\endcsname \UTFviiiTmp
+ \endgroup}
+ %
+ % Given the value in \countUTFz as a Unicode code point, set \UTFviiiTmp
+ % to the corresponding UTF-8 sequence.
+ \gdef\parseXMLCharref{%
+ \ifnum\countUTFz < "A0\relax
+ \errhelp = \EMsimple
+ \errmessage{Cannot define Unicode char value < 00A0}%
+ \else\ifnum\countUTFz < "800\relax
+ \parseUTFviiiA,%
+ \parseUTFviiiB C\UTFviiiTwoOctetsName.,%
+ \else\ifnum\countUTFz < "10000\relax
+ \parseUTFviiiA;%
+ \parseUTFviiiA,%
+ \parseUTFviiiB E\UTFviiiThreeOctetsName.{,;}%
+ \else
+ \parseUTFviiiA;%
+ \parseUTFviiiA,%
+ \parseUTFviiiA!%
+ \parseUTFviiiB F\UTFviiiFourOctetsName.{!,;}%
+ \fi\fi\fi
+ }
+
+ % Extract a byte from the end of the UTF-8 representation of \countUTFx.
+ % It must be a non-initial byte in the sequence.
+ % Change \uccode of #1 for it to be used in \parseUTFviiiB as one
+ % of the bytes.
+ \gdef\parseUTFviiiA#1{%
+ \countUTFx = \countUTFz
+ \divide\countUTFz by 64
+ \countUTFy = \countUTFz % Save to be the future value of \countUTFz.
+ \multiply\countUTFz by 64
+
+ % \countUTFz is now \countUTFx with the last 5 bits cleared. Subtract
+ % in order to get the last five bits.
+ \advance\countUTFx by -\countUTFz
+
+ % Convert this to the byte in the UTF-8 sequence.
+ \advance\countUTFx by 128
+ \uccode `#1\countUTFx
+ \countUTFz = \countUTFy}
+
+ % Used to put a UTF-8 byte sequence into \UTFviiiTmp
+ % #1 is the increment for \countUTFz to yield a the first byte of the UTF-8
+ % sequence.
+ % #2 is one of the \UTFviii*OctetsName macros.
+ % #3 is always a full stop (.)
+ % #4 is a template for the other bytes in the sequence. The values for these
+ % bytes is substituted in here with \uppercase using the \uccode's.
+ \gdef\parseUTFviiiB#1#2#3#4{%
+ \advance\countUTFz by "#10\relax
+ \uccode `#3\countUTFz
+ \uppercase{\gdef\UTFviiiTmp{#2#3#4}}}
+\endgroup
+
+% For native Unicode handling (XeTeX and LuaTeX),
+% provide a definition macro that sets a catcode to `other' non-globally
+%
+\def\DeclareUnicodeCharacterNativeOther#1#2{%
+ \catcode"#1=\other
+}
+
+% https://en.wikipedia.org/wiki/Plane_(Unicode)#Basic_M
+% U+0000..U+007F = https://en.wikipedia.org/wiki/Basic_Latin_(Unicode_block)
+% U+0080..U+00FF = https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)
+% U+0100..U+017F = https://en.wikipedia.org/wiki/Latin_Extended-A
+% U+0180..U+024F = https://en.wikipedia.org/wiki/Latin_Extended-B
+%
+% Many of our renditions are less than wonderful, and all the missing
+% characters are available somewhere. Loading the necessary fonts
+% awaits user request. We can't truly support Unicode without
+% reimplementing everything that's been done in LaTeX for many years,
+% plus probably using luatex or xetex, and who knows what else.
+% We won't be doing that here in this simple file. But we can try to at
+% least make most of the characters not bomb out.
+%
+\def\unicodechardefs{%
+ \DeclareUnicodeCharacter{00A0}{\tie}%
+ \DeclareUnicodeCharacter{00A1}{\exclamdown}%
+ \DeclareUnicodeCharacter{00A2}{{\tcfont \char162}}% 0242=cent
+ \DeclareUnicodeCharacter{00A3}{\pounds{}}%
+ \DeclareUnicodeCharacter{00A4}{{\tcfont \char164}}% 0244=currency
+ \DeclareUnicodeCharacter{00A5}{{\tcfont \char165}}% 0245=yen
+ \DeclareUnicodeCharacter{00A6}{{\tcfont \char166}}% 0246=brokenbar
+ \DeclareUnicodeCharacter{00A7}{\S}%
+ \DeclareUnicodeCharacter{00A8}{\"{ }}%
+ \DeclareUnicodeCharacter{00A9}{\copyright{}}%
+ \DeclareUnicodeCharacter{00AA}{\ordf}%
+ \DeclareUnicodeCharacter{00AB}{\guillemetleft{}}%
+ \DeclareUnicodeCharacter{00AC}{\ensuremath\lnot}%
+ \DeclareUnicodeCharacter{00AD}{\-}%
+ \DeclareUnicodeCharacter{00AE}{\registeredsymbol{}}%
+ \DeclareUnicodeCharacter{00AF}{\={ }}%
+ %
+ \DeclareUnicodeCharacter{00B0}{\ringaccent{ }}%
+ \DeclareUnicodeCharacter{00B1}{\ensuremath\pm}%
+ \DeclareUnicodeCharacter{00B2}{$^2$}%
+ \DeclareUnicodeCharacter{00B3}{$^3$}%
+ \DeclareUnicodeCharacter{00B4}{\'{ }}%
+ \DeclareUnicodeCharacter{00B5}{$\mu$}%
+ \DeclareUnicodeCharacter{00B6}{\P}%
+ \DeclareUnicodeCharacter{00B7}{\ensuremath\cdot}%
+ \DeclareUnicodeCharacter{00B8}{\cedilla{ }}%
+ \DeclareUnicodeCharacter{00B9}{$^1$}%
+ \DeclareUnicodeCharacter{00BA}{\ordm}%
+ \DeclareUnicodeCharacter{00BB}{\guillemetright{}}%
+ \DeclareUnicodeCharacter{00BC}{$1\over4$}%
+ \DeclareUnicodeCharacter{00BD}{$1\over2$}%
+ \DeclareUnicodeCharacter{00BE}{$3\over4$}%
+ \DeclareUnicodeCharacter{00BF}{\questiondown}%
+ %
+ \DeclareUnicodeCharacter{00C0}{\`A}%
+ \DeclareUnicodeCharacter{00C1}{\'A}%
+ \DeclareUnicodeCharacter{00C2}{\^A}%
+ \DeclareUnicodeCharacter{00C3}{\~A}%
+ \DeclareUnicodeCharacter{00C4}{\"A}%
+ \DeclareUnicodeCharacter{00C5}{\AA}%
+ \DeclareUnicodeCharacter{00C6}{\AE}%
+ \DeclareUnicodeCharacter{00C7}{\cedilla{C}}%
+ \DeclareUnicodeCharacter{00C8}{\`E}%
+ \DeclareUnicodeCharacter{00C9}{\'E}%
+ \DeclareUnicodeCharacter{00CA}{\^E}%
+ \DeclareUnicodeCharacter{00CB}{\"E}%
+ \DeclareUnicodeCharacter{00CC}{\`I}%
+ \DeclareUnicodeCharacter{00CD}{\'I}%
+ \DeclareUnicodeCharacter{00CE}{\^I}%
+ \DeclareUnicodeCharacter{00CF}{\"I}%
+ %
+ \DeclareUnicodeCharacter{00D0}{\DH}%
+ \DeclareUnicodeCharacter{00D1}{\~N}%
+ \DeclareUnicodeCharacter{00D2}{\`O}%
+ \DeclareUnicodeCharacter{00D3}{\'O}%
+ \DeclareUnicodeCharacter{00D4}{\^O}%
+ \DeclareUnicodeCharacter{00D5}{\~O}%
+ \DeclareUnicodeCharacter{00D6}{\"O}%
+ \DeclareUnicodeCharacter{00D7}{\ensuremath\times}%
+ \DeclareUnicodeCharacter{00D8}{\O}%
+ \DeclareUnicodeCharacter{00D9}{\`U}%
+ \DeclareUnicodeCharacter{00DA}{\'U}%
+ \DeclareUnicodeCharacter{00DB}{\^U}%
+ \DeclareUnicodeCharacter{00DC}{\"U}%
+ \DeclareUnicodeCharacter{00DD}{\'Y}%
+ \DeclareUnicodeCharacter{00DE}{\TH}%
+ \DeclareUnicodeCharacter{00DF}{\ss}%
+ %
+ \DeclareUnicodeCharacter{00E0}{\`a}%
+ \DeclareUnicodeCharacter{00E1}{\'a}%
+ \DeclareUnicodeCharacter{00E2}{\^a}%
+ \DeclareUnicodeCharacter{00E3}{\~a}%
+ \DeclareUnicodeCharacter{00E4}{\"a}%
+ \DeclareUnicodeCharacter{00E5}{\aa}%
+ \DeclareUnicodeCharacter{00E6}{\ae}%
+ \DeclareUnicodeCharacter{00E7}{\cedilla{c}}%
+ \DeclareUnicodeCharacter{00E8}{\`e}%
+ \DeclareUnicodeCharacter{00E9}{\'e}%
+ \DeclareUnicodeCharacter{00EA}{\^e}%
+ \DeclareUnicodeCharacter{00EB}{\"e}%
+ \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}}%
+ \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}}%
+ \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}}%
+ \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}}%
+ %
+ \DeclareUnicodeCharacter{00F0}{\dh}%
+ \DeclareUnicodeCharacter{00F1}{\~n}%
+ \DeclareUnicodeCharacter{00F2}{\`o}%
+ \DeclareUnicodeCharacter{00F3}{\'o}%
+ \DeclareUnicodeCharacter{00F4}{\^o}%
+ \DeclareUnicodeCharacter{00F5}{\~o}%
+ \DeclareUnicodeCharacter{00F6}{\"o}%
+ \DeclareUnicodeCharacter{00F7}{\ensuremath\div}%
+ \DeclareUnicodeCharacter{00F8}{\o}%
+ \DeclareUnicodeCharacter{00F9}{\`u}%
+ \DeclareUnicodeCharacter{00FA}{\'u}%
+ \DeclareUnicodeCharacter{00FB}{\^u}%
+ \DeclareUnicodeCharacter{00FC}{\"u}%
+ \DeclareUnicodeCharacter{00FD}{\'y}%
+ \DeclareUnicodeCharacter{00FE}{\th}%
+ \DeclareUnicodeCharacter{00FF}{\"y}%
+ %
+ \DeclareUnicodeCharacter{0100}{\=A}%
+ \DeclareUnicodeCharacter{0101}{\=a}%
+ \DeclareUnicodeCharacter{0102}{\u{A}}%
+ \DeclareUnicodeCharacter{0103}{\u{a}}%
+ \DeclareUnicodeCharacter{0104}{\ogonek{A}}%
+ \DeclareUnicodeCharacter{0105}{\ogonek{a}}%
+ \DeclareUnicodeCharacter{0106}{\'C}%
+ \DeclareUnicodeCharacter{0107}{\'c}%
+ \DeclareUnicodeCharacter{0108}{\^C}%
+ \DeclareUnicodeCharacter{0109}{\^c}%
+ \DeclareUnicodeCharacter{010A}{\dotaccent{C}}%
+ \DeclareUnicodeCharacter{010B}{\dotaccent{c}}%
+ \DeclareUnicodeCharacter{010C}{\v{C}}%
+ \DeclareUnicodeCharacter{010D}{\v{c}}%
+ \DeclareUnicodeCharacter{010E}{\v{D}}%
+ \DeclareUnicodeCharacter{010F}{d'}%
+ %
+ \DeclareUnicodeCharacter{0110}{\DH}%
+ \DeclareUnicodeCharacter{0111}{\dh}%
+ \DeclareUnicodeCharacter{0112}{\=E}%
+ \DeclareUnicodeCharacter{0113}{\=e}%
+ \DeclareUnicodeCharacter{0114}{\u{E}}%
+ \DeclareUnicodeCharacter{0115}{\u{e}}%
+ \DeclareUnicodeCharacter{0116}{\dotaccent{E}}%
+ \DeclareUnicodeCharacter{0117}{\dotaccent{e}}%
+ \DeclareUnicodeCharacter{0118}{\ogonek{E}}%
+ \DeclareUnicodeCharacter{0119}{\ogonek{e}}%
+ \DeclareUnicodeCharacter{011A}{\v{E}}%
+ \DeclareUnicodeCharacter{011B}{\v{e}}%
+ \DeclareUnicodeCharacter{011C}{\^G}%
+ \DeclareUnicodeCharacter{011D}{\^g}%
+ \DeclareUnicodeCharacter{011E}{\u{G}}%
+ \DeclareUnicodeCharacter{011F}{\u{g}}%
+ %
+ \DeclareUnicodeCharacter{0120}{\dotaccent{G}}%
+ \DeclareUnicodeCharacter{0121}{\dotaccent{g}}%
+ \DeclareUnicodeCharacter{0122}{\cedilla{G}}%
+ \DeclareUnicodeCharacter{0123}{\cedilla{g}}%
+ \DeclareUnicodeCharacter{0124}{\^H}%
+ \DeclareUnicodeCharacter{0125}{\^h}%
+ \DeclareUnicodeCharacter{0126}{\missingcharmsg{H WITH STROKE}}%
+ \DeclareUnicodeCharacter{0127}{\missingcharmsg{h WITH STROKE}}%
+ \DeclareUnicodeCharacter{0128}{\~I}%
+ \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}}%
+ \DeclareUnicodeCharacter{012A}{\=I}%
+ \DeclareUnicodeCharacter{012B}{\={\dotless{i}}}%
+ \DeclareUnicodeCharacter{012C}{\u{I}}%
+ \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}}%
+ \DeclareUnicodeCharacter{012E}{\ogonek{I}}%
+ \DeclareUnicodeCharacter{012F}{\ogonek{i}}%
+ %
+ \DeclareUnicodeCharacter{0130}{\dotaccent{I}}%
+ \DeclareUnicodeCharacter{0131}{\dotless{i}}%
+ \DeclareUnicodeCharacter{0132}{IJ}%
+ \DeclareUnicodeCharacter{0133}{ij}%
+ \DeclareUnicodeCharacter{0134}{\^J}%
+ \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}}%
+ \DeclareUnicodeCharacter{0136}{\cedilla{K}}%
+ \DeclareUnicodeCharacter{0137}{\cedilla{k}}%
+ \DeclareUnicodeCharacter{0138}{\ensuremath\kappa}%
+ \DeclareUnicodeCharacter{0139}{\'L}%
+ \DeclareUnicodeCharacter{013A}{\'l}%
+ \DeclareUnicodeCharacter{013B}{\cedilla{L}}%
+ \DeclareUnicodeCharacter{013C}{\cedilla{l}}%
+ \DeclareUnicodeCharacter{013D}{L'}% should kern
+ \DeclareUnicodeCharacter{013E}{l'}% should kern
+ \DeclareUnicodeCharacter{013F}{L\U{00B7}}%
+ %
+ \DeclareUnicodeCharacter{0140}{l\U{00B7}}%
+ \DeclareUnicodeCharacter{0141}{\L}%
+ \DeclareUnicodeCharacter{0142}{\l}%
+ \DeclareUnicodeCharacter{0143}{\'N}%
+ \DeclareUnicodeCharacter{0144}{\'n}%
+ \DeclareUnicodeCharacter{0145}{\cedilla{N}}%
+ \DeclareUnicodeCharacter{0146}{\cedilla{n}}%
+ \DeclareUnicodeCharacter{0147}{\v{N}}%
+ \DeclareUnicodeCharacter{0148}{\v{n}}%
+ \DeclareUnicodeCharacter{0149}{'n}%
+ \DeclareUnicodeCharacter{014A}{\missingcharmsg{ENG}}%
+ \DeclareUnicodeCharacter{014B}{\missingcharmsg{eng}}%
+ \DeclareUnicodeCharacter{014C}{\=O}%
+ \DeclareUnicodeCharacter{014D}{\=o}%
+ \DeclareUnicodeCharacter{014E}{\u{O}}%
+ \DeclareUnicodeCharacter{014F}{\u{o}}%
+ %
+ \DeclareUnicodeCharacter{0150}{\H{O}}%
+ \DeclareUnicodeCharacter{0151}{\H{o}}%
+ \DeclareUnicodeCharacter{0152}{\OE}%
+ \DeclareUnicodeCharacter{0153}{\oe}%
+ \DeclareUnicodeCharacter{0154}{\'R}%
+ \DeclareUnicodeCharacter{0155}{\'r}%
+ \DeclareUnicodeCharacter{0156}{\cedilla{R}}%
+ \DeclareUnicodeCharacter{0157}{\cedilla{r}}%
+ \DeclareUnicodeCharacter{0158}{\v{R}}%
+ \DeclareUnicodeCharacter{0159}{\v{r}}%
+ \DeclareUnicodeCharacter{015A}{\'S}%
+ \DeclareUnicodeCharacter{015B}{\'s}%
+ \DeclareUnicodeCharacter{015C}{\^S}%
+ \DeclareUnicodeCharacter{015D}{\^s}%
+ \DeclareUnicodeCharacter{015E}{\cedilla{S}}%
+ \DeclareUnicodeCharacter{015F}{\cedilla{s}}%
+ %
+ \DeclareUnicodeCharacter{0160}{\v{S}}%
+ \DeclareUnicodeCharacter{0161}{\v{s}}%
+ \DeclareUnicodeCharacter{0162}{\cedilla{T}}%
+ \DeclareUnicodeCharacter{0163}{\cedilla{t}}%
+ \DeclareUnicodeCharacter{0164}{\v{T}}%
+ \DeclareUnicodeCharacter{0165}{\v{t}}%
+ \DeclareUnicodeCharacter{0166}{\missingcharmsg{H WITH STROKE}}%
+ \DeclareUnicodeCharacter{0167}{\missingcharmsg{h WITH STROKE}}%
+ \DeclareUnicodeCharacter{0168}{\~U}%
+ \DeclareUnicodeCharacter{0169}{\~u}%
+ \DeclareUnicodeCharacter{016A}{\=U}%
+ \DeclareUnicodeCharacter{016B}{\=u}%
+ \DeclareUnicodeCharacter{016C}{\u{U}}%
+ \DeclareUnicodeCharacter{016D}{\u{u}}%
+ \DeclareUnicodeCharacter{016E}{\ringaccent{U}}%
+ \DeclareUnicodeCharacter{016F}{\ringaccent{u}}%
+ %
+ \DeclareUnicodeCharacter{0170}{\H{U}}%
+ \DeclareUnicodeCharacter{0171}{\H{u}}%
+ \DeclareUnicodeCharacter{0172}{\ogonek{U}}%
+ \DeclareUnicodeCharacter{0173}{\ogonek{u}}%
+ \DeclareUnicodeCharacter{0174}{\^W}%
+ \DeclareUnicodeCharacter{0175}{\^w}%
+ \DeclareUnicodeCharacter{0176}{\^Y}%
+ \DeclareUnicodeCharacter{0177}{\^y}%
+ \DeclareUnicodeCharacter{0178}{\"Y}%
+ \DeclareUnicodeCharacter{0179}{\'Z}%
+ \DeclareUnicodeCharacter{017A}{\'z}%
+ \DeclareUnicodeCharacter{017B}{\dotaccent{Z}}%
+ \DeclareUnicodeCharacter{017C}{\dotaccent{z}}%
+ \DeclareUnicodeCharacter{017D}{\v{Z}}%
+ \DeclareUnicodeCharacter{017E}{\v{z}}%
+ \DeclareUnicodeCharacter{017F}{\missingcharmsg{LONG S}}%
+ %
+ \DeclareUnicodeCharacter{01C4}{D\v{Z}}%
+ \DeclareUnicodeCharacter{01C5}{D\v{z}}%
+ \DeclareUnicodeCharacter{01C6}{d\v{z}}%
+ \DeclareUnicodeCharacter{01C7}{LJ}%
+ \DeclareUnicodeCharacter{01C8}{Lj}%
+ \DeclareUnicodeCharacter{01C9}{lj}%
+ \DeclareUnicodeCharacter{01CA}{NJ}%
+ \DeclareUnicodeCharacter{01CB}{Nj}%
+ \DeclareUnicodeCharacter{01CC}{nj}%
+ \DeclareUnicodeCharacter{01CD}{\v{A}}%
+ \DeclareUnicodeCharacter{01CE}{\v{a}}%
+ \DeclareUnicodeCharacter{01CF}{\v{I}}%
+ %
+ \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}}%
+ \DeclareUnicodeCharacter{01D1}{\v{O}}%
+ \DeclareUnicodeCharacter{01D2}{\v{o}}%
+ \DeclareUnicodeCharacter{01D3}{\v{U}}%
+ \DeclareUnicodeCharacter{01D4}{\v{u}}%
+ %
+ \DeclareUnicodeCharacter{01E2}{\={\AE}}%
+ \DeclareUnicodeCharacter{01E3}{\={\ae}}%
+ \DeclareUnicodeCharacter{01E6}{\v{G}}%
+ \DeclareUnicodeCharacter{01E7}{\v{g}}%
+ \DeclareUnicodeCharacter{01E8}{\v{K}}%
+ \DeclareUnicodeCharacter{01E9}{\v{k}}%
+ %
+ \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}}%
+ \DeclareUnicodeCharacter{01F1}{DZ}%
+ \DeclareUnicodeCharacter{01F2}{Dz}%
+ \DeclareUnicodeCharacter{01F3}{dz}%
+ \DeclareUnicodeCharacter{01F4}{\'G}%
+ \DeclareUnicodeCharacter{01F5}{\'g}%
+ \DeclareUnicodeCharacter{01F8}{\`N}%
+ \DeclareUnicodeCharacter{01F9}{\`n}%
+ \DeclareUnicodeCharacter{01FC}{\'{\AE}}%
+ \DeclareUnicodeCharacter{01FD}{\'{\ae}}%
+ \DeclareUnicodeCharacter{01FE}{\'{\O}}%
+ \DeclareUnicodeCharacter{01FF}{\'{\o}}%
+ %
+ \DeclareUnicodeCharacter{021E}{\v{H}}%
+ \DeclareUnicodeCharacter{021F}{\v{h}}%
+ %
+ \DeclareUnicodeCharacter{0226}{\dotaccent{A}}%
+ \DeclareUnicodeCharacter{0227}{\dotaccent{a}}%
+ \DeclareUnicodeCharacter{0228}{\cedilla{E}}%
+ \DeclareUnicodeCharacter{0229}{\cedilla{e}}%
+ \DeclareUnicodeCharacter{022E}{\dotaccent{O}}%
+ \DeclareUnicodeCharacter{022F}{\dotaccent{o}}%
+ %
+ \DeclareUnicodeCharacter{0232}{\=Y}%
+ \DeclareUnicodeCharacter{0233}{\=y}%
+ \DeclareUnicodeCharacter{0237}{\dotless{j}}%
+ %
+ \DeclareUnicodeCharacter{02DB}{\ogonek{ }}%
+ %
+ % Greek letters upper case
+ \DeclareUnicodeCharacter{0391}{{\it A}}%
+ \DeclareUnicodeCharacter{0392}{{\it B}}%
+ \DeclareUnicodeCharacter{0393}{\ensuremath{\mit\Gamma}}%
+ \DeclareUnicodeCharacter{0394}{\ensuremath{\mit\Delta}}%
+ \DeclareUnicodeCharacter{0395}{{\it E}}%
+ \DeclareUnicodeCharacter{0396}{{\it Z}}%
+ \DeclareUnicodeCharacter{0397}{{\it H}}%
+ \DeclareUnicodeCharacter{0398}{\ensuremath{\mit\Theta}}%
+ \DeclareUnicodeCharacter{0399}{{\it I}}%
+ \DeclareUnicodeCharacter{039A}{{\it K}}%
+ \DeclareUnicodeCharacter{039B}{\ensuremath{\mit\Lambda}}%
+ \DeclareUnicodeCharacter{039C}{{\it M}}%
+ \DeclareUnicodeCharacter{039D}{{\it N}}%
+ \DeclareUnicodeCharacter{039E}{\ensuremath{\mit\Xi}}%
+ \DeclareUnicodeCharacter{039F}{{\it O}}%
+ \DeclareUnicodeCharacter{03A0}{\ensuremath{\mit\Pi}}%
+ \DeclareUnicodeCharacter{03A1}{{\it P}}%
+ %\DeclareUnicodeCharacter{03A2}{} % none - corresponds to final sigma
+ \DeclareUnicodeCharacter{03A3}{\ensuremath{\mit\Sigma}}%
+ \DeclareUnicodeCharacter{03A4}{{\it T}}%
+ \DeclareUnicodeCharacter{03A5}{\ensuremath{\mit\Upsilon}}%
+ \DeclareUnicodeCharacter{03A6}{\ensuremath{\mit\Phi}}%
+ \DeclareUnicodeCharacter{03A7}{{\it X}}%
+ \DeclareUnicodeCharacter{03A8}{\ensuremath{\mit\Psi}}%
+ \DeclareUnicodeCharacter{03A9}{\ensuremath{\mit\Omega}}%
+ %
+ % Vowels with accents
+ \DeclareUnicodeCharacter{0390}{\ensuremath{\ddot{\acute\iota}}}%
+ \DeclareUnicodeCharacter{03AC}{\ensuremath{\acute\alpha}}%
+ \DeclareUnicodeCharacter{03AD}{\ensuremath{\acute\epsilon}}%
+ \DeclareUnicodeCharacter{03AE}{\ensuremath{\acute\eta}}%
+ \DeclareUnicodeCharacter{03AF}{\ensuremath{\acute\iota}}%
+ \DeclareUnicodeCharacter{03B0}{\ensuremath{\acute{\ddot\upsilon}}}%
+ %
+ % Standalone accent
+ \DeclareUnicodeCharacter{0384}{\ensuremath{\acute{\ }}}%
+ %
+ % Greek letters lower case
+ \DeclareUnicodeCharacter{03B1}{\ensuremath\alpha}%
+ \DeclareUnicodeCharacter{03B2}{\ensuremath\beta}%
+ \DeclareUnicodeCharacter{03B3}{\ensuremath\gamma}%
+ \DeclareUnicodeCharacter{03B4}{\ensuremath\delta}%
+ \DeclareUnicodeCharacter{03B5}{\ensuremath\epsilon}%
+ \DeclareUnicodeCharacter{03B6}{\ensuremath\zeta}%
+ \DeclareUnicodeCharacter{03B7}{\ensuremath\eta}%
+ \DeclareUnicodeCharacter{03B8}{\ensuremath\theta}%
+ \DeclareUnicodeCharacter{03B9}{\ensuremath\iota}%
+ \DeclareUnicodeCharacter{03BA}{\ensuremath\kappa}%
+ \DeclareUnicodeCharacter{03BB}{\ensuremath\lambda}%
+ \DeclareUnicodeCharacter{03BC}{\ensuremath\mu}%
+ \DeclareUnicodeCharacter{03BD}{\ensuremath\nu}%
+ \DeclareUnicodeCharacter{03BE}{\ensuremath\xi}%
+ \DeclareUnicodeCharacter{03BF}{{\it o}}% omicron
+ \DeclareUnicodeCharacter{03C0}{\ensuremath\pi}%
+ \DeclareUnicodeCharacter{03C1}{\ensuremath\rho}%
+ \DeclareUnicodeCharacter{03C2}{\ensuremath\varsigma}%
+ \DeclareUnicodeCharacter{03C3}{\ensuremath\sigma}%
+ \DeclareUnicodeCharacter{03C4}{\ensuremath\tau}%
+ \DeclareUnicodeCharacter{03C5}{\ensuremath\upsilon}%
+ \DeclareUnicodeCharacter{03C6}{\ensuremath\phi}%
+ \DeclareUnicodeCharacter{03C7}{\ensuremath\chi}%
+ \DeclareUnicodeCharacter{03C8}{\ensuremath\psi}%
+ \DeclareUnicodeCharacter{03C9}{\ensuremath\omega}%
+ %
+ % More Greek vowels with accents
+ \DeclareUnicodeCharacter{03CA}{\ensuremath{\ddot\iota}}%
+ \DeclareUnicodeCharacter{03CB}{\ensuremath{\ddot\upsilon}}%
+ \DeclareUnicodeCharacter{03CC}{\ensuremath{\acute o}}%
+ \DeclareUnicodeCharacter{03CD}{\ensuremath{\acute\upsilon}}%
+ \DeclareUnicodeCharacter{03CE}{\ensuremath{\acute\omega}}%
+ %
+ % Variant Greek letters
+ \DeclareUnicodeCharacter{03D1}{\ensuremath\vartheta}%
+ \DeclareUnicodeCharacter{03D6}{\ensuremath\varpi}%
+ \DeclareUnicodeCharacter{03F1}{\ensuremath\varrho}%
+ %
+ \DeclareUnicodeCharacter{1E02}{\dotaccent{B}}%
+ \DeclareUnicodeCharacter{1E03}{\dotaccent{b}}%
+ \DeclareUnicodeCharacter{1E04}{\udotaccent{B}}%
+ \DeclareUnicodeCharacter{1E05}{\udotaccent{b}}%
+ \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}}%
+ \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}}%
+ \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}}%
+ \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}}%
+ \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}}%
+ \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}}%
+ \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}}%
+ \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}}%
+ %
+ \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}}%
+ \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}}%
+ %
+ \DeclareUnicodeCharacter{1E20}{\=G}%
+ \DeclareUnicodeCharacter{1E21}{\=g}%
+ \DeclareUnicodeCharacter{1E22}{\dotaccent{H}}%
+ \DeclareUnicodeCharacter{1E23}{\dotaccent{h}}%
+ \DeclareUnicodeCharacter{1E24}{\udotaccent{H}}%
+ \DeclareUnicodeCharacter{1E25}{\udotaccent{h}}%
+ \DeclareUnicodeCharacter{1E26}{\"H}%
+ \DeclareUnicodeCharacter{1E27}{\"h}%
+ %
+ \DeclareUnicodeCharacter{1E30}{\'K}%
+ \DeclareUnicodeCharacter{1E31}{\'k}%
+ \DeclareUnicodeCharacter{1E32}{\udotaccent{K}}%
+ \DeclareUnicodeCharacter{1E33}{\udotaccent{k}}%
+ \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}}%
+ \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}}%
+ \DeclareUnicodeCharacter{1E36}{\udotaccent{L}}%
+ \DeclareUnicodeCharacter{1E37}{\udotaccent{l}}%
+ \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}}%
+ \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}}%
+ \DeclareUnicodeCharacter{1E3E}{\'M}%
+ \DeclareUnicodeCharacter{1E3F}{\'m}%
+ %
+ \DeclareUnicodeCharacter{1E40}{\dotaccent{M}}%
+ \DeclareUnicodeCharacter{1E41}{\dotaccent{m}}%
+ \DeclareUnicodeCharacter{1E42}{\udotaccent{M}}%
+ \DeclareUnicodeCharacter{1E43}{\udotaccent{m}}%
+ \DeclareUnicodeCharacter{1E44}{\dotaccent{N}}%
+ \DeclareUnicodeCharacter{1E45}{\dotaccent{n}}%
+ \DeclareUnicodeCharacter{1E46}{\udotaccent{N}}%
+ \DeclareUnicodeCharacter{1E47}{\udotaccent{n}}%
+ \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}}%
+ \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}}%
+ %
+ \DeclareUnicodeCharacter{1E54}{\'P}%
+ \DeclareUnicodeCharacter{1E55}{\'p}%
+ \DeclareUnicodeCharacter{1E56}{\dotaccent{P}}%
+ \DeclareUnicodeCharacter{1E57}{\dotaccent{p}}%
+ \DeclareUnicodeCharacter{1E58}{\dotaccent{R}}%
+ \DeclareUnicodeCharacter{1E59}{\dotaccent{r}}%
+ \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}}%
+ \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}}%
+ \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}}%
+ \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}}%
+ %
+ \DeclareUnicodeCharacter{1E60}{\dotaccent{S}}%
+ \DeclareUnicodeCharacter{1E61}{\dotaccent{s}}%
+ \DeclareUnicodeCharacter{1E62}{\udotaccent{S}}%
+ \DeclareUnicodeCharacter{1E63}{\udotaccent{s}}%
+ \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}}%
+ \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}}%
+ \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}}%
+ \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}}%
+ \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}}%
+ \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}}%
+ %
+ \DeclareUnicodeCharacter{1E7C}{\~V}%
+ \DeclareUnicodeCharacter{1E7D}{\~v}%
+ \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}}%
+ \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}}%
+ %
+ \DeclareUnicodeCharacter{1E80}{\`W}%
+ \DeclareUnicodeCharacter{1E81}{\`w}%
+ \DeclareUnicodeCharacter{1E82}{\'W}%
+ \DeclareUnicodeCharacter{1E83}{\'w}%
+ \DeclareUnicodeCharacter{1E84}{\"W}%
+ \DeclareUnicodeCharacter{1E85}{\"w}%
+ \DeclareUnicodeCharacter{1E86}{\dotaccent{W}}%
+ \DeclareUnicodeCharacter{1E87}{\dotaccent{w}}%
+ \DeclareUnicodeCharacter{1E88}{\udotaccent{W}}%
+ \DeclareUnicodeCharacter{1E89}{\udotaccent{w}}%
+ \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}}%
+ \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}}%
+ \DeclareUnicodeCharacter{1E8C}{\"X}%
+ \DeclareUnicodeCharacter{1E8D}{\"x}%
+ \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}}%
+ \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}}%
+ %
+ \DeclareUnicodeCharacter{1E90}{\^Z}%
+ \DeclareUnicodeCharacter{1E91}{\^z}%
+ \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}}%
+ \DeclareUnicodeCharacter{1E93}{\udotaccent{z}}%
+ \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}}%
+ \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}}%
+ \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}}%
+ \DeclareUnicodeCharacter{1E97}{\"t}%
+ \DeclareUnicodeCharacter{1E98}{\ringaccent{w}}%
+ \DeclareUnicodeCharacter{1E99}{\ringaccent{y}}%
+ %
+ \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}}%
+ \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}}%
+ %
+ \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}}%
+ \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}}%
+ \DeclareUnicodeCharacter{1EBC}{\~E}%
+ \DeclareUnicodeCharacter{1EBD}{\~e}%
+ %
+ \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}}%
+ \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}}%
+ \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}}%
+ \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}}%
+ %
+ \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}}%
+ \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}}%
+ %
+ \DeclareUnicodeCharacter{1EF2}{\`Y}%
+ \DeclareUnicodeCharacter{1EF3}{\`y}%
+ \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}}%
+ %
+ \DeclareUnicodeCharacter{1EF8}{\~Y}%
+ \DeclareUnicodeCharacter{1EF9}{\~y}%
+ %
+ % Punctuation
+ \DeclareUnicodeCharacter{2013}{--}%
+ \DeclareUnicodeCharacter{2014}{---}%
+ \DeclareUnicodeCharacter{2018}{\quoteleft{}}%
+ \DeclareUnicodeCharacter{2019}{\quoteright{}}%
+ \DeclareUnicodeCharacter{201A}{\quotesinglbase{}}%
+ \DeclareUnicodeCharacter{201C}{\quotedblleft{}}%
+ \DeclareUnicodeCharacter{201D}{\quotedblright{}}%
+ \DeclareUnicodeCharacter{201E}{\quotedblbase{}}%
+ \DeclareUnicodeCharacter{2020}{\ensuremath\dagger}%
+ \DeclareUnicodeCharacter{2021}{\ensuremath\ddagger}%
+ \DeclareUnicodeCharacter{2022}{\bullet{}}%
+ \DeclareUnicodeCharacter{202F}{\thinspace}%
+ \DeclareUnicodeCharacter{2026}{\dots{}}%
+ \DeclareUnicodeCharacter{2039}{\guilsinglleft{}}%
+ \DeclareUnicodeCharacter{203A}{\guilsinglright{}}%
+ %
+ \DeclareUnicodeCharacter{20AC}{\euro{}}%
+ %
+ \DeclareUnicodeCharacter{2192}{\expansion{}}%
+ \DeclareUnicodeCharacter{21D2}{\result{}}%
+ %
+ % Mathematical symbols
+ \DeclareUnicodeCharacter{2200}{\ensuremath\forall}%
+ \DeclareUnicodeCharacter{2203}{\ensuremath\exists}%
+ \DeclareUnicodeCharacter{2208}{\ensuremath\in}%
+ \DeclareUnicodeCharacter{2212}{\minus{}}%
+ \DeclareUnicodeCharacter{2217}{\ast}%
+ \DeclareUnicodeCharacter{221E}{\ensuremath\infty}%
+ \DeclareUnicodeCharacter{2225}{\ensuremath\parallel}%
+ \DeclareUnicodeCharacter{2227}{\ensuremath\wedge}%
+ \DeclareUnicodeCharacter{2229}{\ensuremath\cap}%
+ \DeclareUnicodeCharacter{2261}{\equiv{}}%
+ \DeclareUnicodeCharacter{2264}{\ensuremath\leq}%
+ \DeclareUnicodeCharacter{2265}{\ensuremath\geq}%
+ \DeclareUnicodeCharacter{2282}{\ensuremath\subset}%
+ \DeclareUnicodeCharacter{2287}{\ensuremath\supseteq}%
+ %
+ \DeclareUnicodeCharacter{2016}{\ensuremath\Vert}%
+ \DeclareUnicodeCharacter{2032}{\ensuremath\prime}%
+ \DeclareUnicodeCharacter{210F}{\ensuremath\hbar}%
+ \DeclareUnicodeCharacter{2111}{\ensuremath\Im}%
+ \DeclareUnicodeCharacter{2113}{\ensuremath\ell}%
+ \DeclareUnicodeCharacter{2118}{\ensuremath\wp}%
+ \DeclareUnicodeCharacter{211C}{\ensuremath\Re}%
+ \DeclareUnicodeCharacter{2135}{\ensuremath\aleph}%
+ \DeclareUnicodeCharacter{2190}{\ensuremath\leftarrow}%
+ \DeclareUnicodeCharacter{2191}{\ensuremath\uparrow}%
+ \DeclareUnicodeCharacter{2193}{\ensuremath\downarrow}%
+ \DeclareUnicodeCharacter{2194}{\ensuremath\leftrightarrow}%
+ \DeclareUnicodeCharacter{2195}{\ensuremath\updownarrow}%
+ \DeclareUnicodeCharacter{2196}{\ensuremath\nwarrow}%
+ \DeclareUnicodeCharacter{2197}{\ensuremath\nearrow}%
+ \DeclareUnicodeCharacter{2198}{\ensuremath\searrow}%
+ \DeclareUnicodeCharacter{2199}{\ensuremath\swarrow}%
+ \DeclareUnicodeCharacter{21A6}{\ensuremath\mapsto}%
+ \DeclareUnicodeCharacter{21A9}{\ensuremath\hookleftarrow}%
+ \DeclareUnicodeCharacter{21AA}{\ensuremath\hookrightarrow}%
+ \DeclareUnicodeCharacter{21BC}{\ensuremath\leftharpoonup}%
+ \DeclareUnicodeCharacter{21BD}{\ensuremath\leftharpoondown}%
+ \DeclareUnicodeCharacter{21C0}{\ensuremath\rightharpoonup}%
+ \DeclareUnicodeCharacter{21C1}{\ensuremath\rightharpoondown}%
+ \DeclareUnicodeCharacter{21CC}{\ensuremath\rightleftharpoons}%
+ \DeclareUnicodeCharacter{21D0}{\ensuremath\Leftarrow}%
+ \DeclareUnicodeCharacter{21D1}{\ensuremath\Uparrow}%
+ \DeclareUnicodeCharacter{21D3}{\ensuremath\Downarrow}%
+ \DeclareUnicodeCharacter{21D4}{\ensuremath\Leftrightarrow}%
+ \DeclareUnicodeCharacter{21D5}{\ensuremath\Updownarrow}%
+ \DeclareUnicodeCharacter{2202}{\ensuremath\partial}%
+ \DeclareUnicodeCharacter{2205}{\ensuremath\emptyset}%
+ \DeclareUnicodeCharacter{2207}{\ensuremath\nabla}%
+ \DeclareUnicodeCharacter{2209}{\ensuremath\notin}%
+ \DeclareUnicodeCharacter{220B}{\ensuremath\owns}%
+ \DeclareUnicodeCharacter{220F}{\ensuremath\prod}%
+ \DeclareUnicodeCharacter{2210}{\ensuremath\coprod}%
+ \DeclareUnicodeCharacter{2211}{\ensuremath\sum}%
+ \DeclareUnicodeCharacter{2213}{\ensuremath\mp}%
+ \DeclareUnicodeCharacter{2218}{\ensuremath\circ}%
+ \DeclareUnicodeCharacter{221A}{\ensuremath\surd}%
+ \DeclareUnicodeCharacter{221D}{\ensuremath\propto}%
+ \DeclareUnicodeCharacter{2220}{\ensuremath\angle}%
+ \DeclareUnicodeCharacter{2223}{\ensuremath\mid}%
+ \DeclareUnicodeCharacter{2228}{\ensuremath\vee}%
+ \DeclareUnicodeCharacter{222A}{\ensuremath\cup}%
+ \DeclareUnicodeCharacter{222B}{\ensuremath\smallint}%
+ \DeclareUnicodeCharacter{222E}{\ensuremath\oint}%
+ \DeclareUnicodeCharacter{223C}{\ensuremath\sim}%
+ \DeclareUnicodeCharacter{2240}{\ensuremath\wr}%
+ \DeclareUnicodeCharacter{2243}{\ensuremath\simeq}%
+ \DeclareUnicodeCharacter{2245}{\ensuremath\cong}%
+ \DeclareUnicodeCharacter{2248}{\ensuremath\approx}%
+ \DeclareUnicodeCharacter{224D}{\ensuremath\asymp}%
+ \DeclareUnicodeCharacter{2250}{\ensuremath\doteq}%
+ \DeclareUnicodeCharacter{2260}{\ensuremath\neq}%
+ \DeclareUnicodeCharacter{226A}{\ensuremath\ll}%
+ \DeclareUnicodeCharacter{226B}{\ensuremath\gg}%
+ \DeclareUnicodeCharacter{227A}{\ensuremath\prec}%
+ \DeclareUnicodeCharacter{227B}{\ensuremath\succ}%
+ \DeclareUnicodeCharacter{2283}{\ensuremath\supset}%
+ \DeclareUnicodeCharacter{2286}{\ensuremath\subseteq}%
+ \DeclareUnicodeCharacter{228E}{\ensuremath\uplus}%
+ \DeclareUnicodeCharacter{2291}{\ensuremath\sqsubseteq}%
+ \DeclareUnicodeCharacter{2292}{\ensuremath\sqsupseteq}%
+ \DeclareUnicodeCharacter{2293}{\ensuremath\sqcap}%
+ \DeclareUnicodeCharacter{2294}{\ensuremath\sqcup}%
+ \DeclareUnicodeCharacter{2295}{\ensuremath\oplus}%
+ \DeclareUnicodeCharacter{2296}{\ensuremath\ominus}%
+ \DeclareUnicodeCharacter{2297}{\ensuremath\otimes}%
+ \DeclareUnicodeCharacter{2298}{\ensuremath\oslash}%
+ \DeclareUnicodeCharacter{2299}{\ensuremath\odot}%
+ \DeclareUnicodeCharacter{22A2}{\ensuremath\vdash}%
+ \DeclareUnicodeCharacter{22A3}{\ensuremath\dashv}%
+ \DeclareUnicodeCharacter{22A4}{\ensuremath\ptextop}%
+ \DeclareUnicodeCharacter{22A5}{\ensuremath\bot}%
+ \DeclareUnicodeCharacter{22A8}{\ensuremath\models}%
+ \DeclareUnicodeCharacter{22C0}{\ensuremath\bigwedge}%
+ \DeclareUnicodeCharacter{22C1}{\ensuremath\bigvee}%
+ \DeclareUnicodeCharacter{22C2}{\ensuremath\bigcap}%
+ \DeclareUnicodeCharacter{22C3}{\ensuremath\bigcup}%
+ \DeclareUnicodeCharacter{22C4}{\ensuremath\diamond}%
+ \DeclareUnicodeCharacter{22C5}{\ensuremath\cdot}%
+ \DeclareUnicodeCharacter{22C6}{\ensuremath\star}%
+ \DeclareUnicodeCharacter{22C8}{\ensuremath\bowtie}%
+ \DeclareUnicodeCharacter{2308}{\ensuremath\lceil}%
+ \DeclareUnicodeCharacter{2309}{\ensuremath\rceil}%
+ \DeclareUnicodeCharacter{230A}{\ensuremath\lfloor}%
+ \DeclareUnicodeCharacter{230B}{\ensuremath\rfloor}%
+ \DeclareUnicodeCharacter{2322}{\ensuremath\frown}%
+ \DeclareUnicodeCharacter{2323}{\ensuremath\smile}%
+ %
+ \DeclareUnicodeCharacter{25B3}{\ensuremath\triangle}%
+ \DeclareUnicodeCharacter{25B7}{\ensuremath\triangleright}%
+ \DeclareUnicodeCharacter{25BD}{\ensuremath\bigtriangledown}%
+ \DeclareUnicodeCharacter{25C1}{\ensuremath\triangleleft}%
+ \DeclareUnicodeCharacter{25C7}{\ensuremath\diamond}%
+ \DeclareUnicodeCharacter{2660}{\ensuremath\spadesuit}%
+ \DeclareUnicodeCharacter{2661}{\ensuremath\heartsuit}%
+ \DeclareUnicodeCharacter{2662}{\ensuremath\diamondsuit}%
+ \DeclareUnicodeCharacter{2663}{\ensuremath\clubsuit}%
+ \DeclareUnicodeCharacter{266D}{\ensuremath\flat}%
+ \DeclareUnicodeCharacter{266E}{\ensuremath\natural}%
+ \DeclareUnicodeCharacter{266F}{\ensuremath\sharp}%
+ \DeclareUnicodeCharacter{26AA}{\ensuremath\bigcirc}%
+ \DeclareUnicodeCharacter{27B9}{\ensuremath\rangle}%
+ \DeclareUnicodeCharacter{27C2}{\ensuremath\perp}%
+ \DeclareUnicodeCharacter{27E8}{\ensuremath\langle}%
+ \DeclareUnicodeCharacter{27F5}{\ensuremath\longleftarrow}%
+ \DeclareUnicodeCharacter{27F6}{\ensuremath\longrightarrow}%
+ \DeclareUnicodeCharacter{27F7}{\ensuremath\longleftrightarrow}%
+ \DeclareUnicodeCharacter{27FC}{\ensuremath\longmapsto}%
+ \DeclareUnicodeCharacter{29F5}{\ensuremath\setminus}%
+ \DeclareUnicodeCharacter{2A00}{\ensuremath\bigodot}%
+ \DeclareUnicodeCharacter{2A01}{\ensuremath\bigoplus}%
+ \DeclareUnicodeCharacter{2A02}{\ensuremath\bigotimes}%
+ \DeclareUnicodeCharacter{2A04}{\ensuremath\biguplus}%
+ \DeclareUnicodeCharacter{2A06}{\ensuremath\bigsqcup}%
+ \DeclareUnicodeCharacter{2A3F}{\ensuremath\amalg}%
+ \DeclareUnicodeCharacter{2AAF}{\ensuremath\preceq}%
+ \DeclareUnicodeCharacter{2AB0}{\ensuremath\succeq}%
+ %
+ \global\mathchardef\checkmark="1370% actually the square root sign
+ \DeclareUnicodeCharacter{2713}{\ensuremath\checkmark}%
+}% end of \unicodechardefs
+
+% UTF-8 byte sequence (pdfTeX) definitions (replacing and @U command)
+% It makes the setting that replace UTF-8 byte sequence.
+\def\utfeightchardefs{%
+ \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterUTFviii
+ \unicodechardefs
+}
+
+% Whether the active definitions of non-ASCII characters expand to
+% non-active tokens with the same character code. This is used to
+% write characters literally, instead of using active definitions for
+% printing the correct glyphs.
+\newif\ifpassthroughchars
+\passthroughcharsfalse
+
+% For native Unicode handling (XeTeX and LuaTeX),
+% provide a definition macro to replace/pass-through a Unicode character
+%
+\def\DeclareUnicodeCharacterNative#1#2{%
+ \catcode"#1=\active
+ \def\dodeclareunicodecharacternative##1##2##3{%
+ \begingroup
+ \uccode`\~="##2\relax
+ \uppercase{\gdef~}{%
+ \ifpassthroughchars
+ ##1%
+ \else
+ ##3%
+ \fi
+ }
+ \endgroup
+ }
+ \begingroup
+ \uccode`\.="#1\relax
+ \uppercase{\def\UTFNativeTmp{.}}%
+ \expandafter\dodeclareunicodecharacternative\UTFNativeTmp{#1}{#2}%
+ \endgroup
+}
+
+% Native Unicode handling (XeTeX and LuaTeX) character replacing definition.
+% It activates the setting that replaces Unicode characters.
+\def\nativeunicodechardefs{%
+ \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterNative
+ \unicodechardefs
+}
+
+% For native Unicode handling (XeTeX and LuaTeX),
+% make the character token expand
+% to the sequences given in \unicodechardefs for printing.
+\def\DeclareUnicodeCharacterNativeAtU#1#2{%
+ \def\UTFAtUTmp{#2}
+ \expandafter\globallet\csname uni:#1\endcsname \UTFAtUTmp
+}
+
+% @U command definitions for native Unicode handling (XeTeX and LuaTeX).
+\def\nativeunicodechardefsatu{%
+ \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterNativeAtU
+ \unicodechardefs
+}
+
+% US-ASCII character definitions.
+\def\asciichardefs{% nothing need be done
+ \relax
+}
+
+% define all Unicode characters we know about, for the sake of @U.
+\iftxinativeunicodecapable
+ \nativeunicodechardefsatu
+\else
+ \utfeightchardefs
+\fi
+
+
+% Make non-ASCII characters printable again for compatibility with
+% existing Texinfo documents that may use them, even without declaring a
+% document encoding.
+%
+\setnonasciicharscatcode \other
+
+
+\message{formatting,}
+
+\newdimen\defaultparindent \defaultparindent = 15pt
+
+\chapheadingskip = 15pt plus 4pt minus 2pt
+\secheadingskip = 12pt plus 3pt minus 2pt
+\subsecheadingskip = 9pt plus 2pt minus 2pt
+
+% Prevent underfull vbox error messages.
+\vbadness = 10000
+
+% Don't be very finicky about underfull hboxes, either.
+\hbadness = 6666
+
+% Following George Bush, get rid of widows and orphans.
+\widowpenalty=10000
+\clubpenalty=10000
+
+% Use TeX 3.0's \emergencystretch to help line breaking, but if we're
+% using an old version of TeX, don't do anything. We want the amount of
+% stretch added to depend on the line length, hence the dependence on
+% \hsize. We call this whenever the paper size is set.
+%
+\def\setemergencystretch{%
+ \ifx\emergencystretch\thisisundefined
+ % Allow us to assign to \emergencystretch anyway.
+ \def\emergencystretch{\dimen0}%
+ \else
+ \emergencystretch = .15\hsize
+ \fi
+}
+
+% Parameters in order: 1) textheight; 2) textwidth;
+% 3) voffset; 4) hoffset; 5) binding offset; 6) topskip;
+% 7) physical page height; 8) physical page width.
+%
+% We also call \setleading{\textleading}, so the caller should define
+% \textleading. The caller should also set \parskip.
+%
+\def\internalpagesizes#1#2#3#4#5#6#7#8{%
+ \voffset = #3\relax
+ \topskip = #6\relax
+ \splittopskip = \topskip
+ %
+ \vsize = #1\relax
+ \advance\vsize by \topskip
+ \outervsize = \vsize
+ \advance\outervsize by 2\topandbottommargin
+ \txipageheight = \vsize
+ %
+ \hsize = #2\relax
+ \outerhsize = \hsize
+ \advance\outerhsize by 0.5in
+ \txipagewidth = \hsize
+ %
+ \normaloffset = #4\relax
+ \bindingoffset = #5\relax
+ %
+ \ifpdf
+ \pdfpageheight #7\relax
+ \pdfpagewidth #8\relax
+ % if we don't reset these, they will remain at "1 true in" of
+ % whatever layout pdftex was dumped with.
+ \pdfhorigin = 1 true in
+ \pdfvorigin = 1 true in
+ \else
+ \ifx\XeTeXrevision\thisisundefined
+ \special{papersize=#8,#7}%
+ \else
+ \pdfpageheight #7\relax
+ \pdfpagewidth #8\relax
+ % XeTeX does not have \pdfhorigin and \pdfvorigin.
+ \fi
+ \fi
+ %
+ \setleading{\textleading}
+ %
+ \parindent = \defaultparindent
+ \setemergencystretch
+}
+
+% @letterpaper (the default).
+\def\letterpaper{{\globaldefs = 1
+ \parskip = 3pt plus 2pt minus 1pt
+ \textleading = 13.2pt
+ %
+ % If page is nothing but text, make it come out even.
+ \internalpagesizes{607.2pt}{6in}% that's 46 lines
+ {\voffset}{.25in}%
+ {\bindingoffset}{36pt}%
+ {11in}{8.5in}%
+}}
+
+% Use @smallbook to reset parameters for 7x9.25 trim size.
+\def\smallbook{{\globaldefs = 1
+ \parskip = 2pt plus 1pt
+ \textleading = 12pt
+ %
+ \internalpagesizes{7.5in}{5in}%
+ {-.2in}{0in}%
+ {\bindingoffset}{16pt}%
+ {9.25in}{7in}%
+ %
+ \lispnarrowing = 0.3in
+ \tolerance = 700
+ \contentsrightmargin = 0pt
+ \defbodyindent = .5cm
+}}
+
+% Use @smallerbook to reset parameters for 6x9 trim size.
+% (Just testing, parameters still in flux.)
+\def\smallerbook{{\globaldefs = 1
+ \parskip = 1.5pt plus 1pt
+ \textleading = 12pt
+ %
+ \internalpagesizes{7.4in}{4.8in}%
+ {-.2in}{-.4in}%
+ {0pt}{14pt}%
+ {9in}{6in}%
+ %
+ \lispnarrowing = 0.25in
+ \tolerance = 700
+ \contentsrightmargin = 0pt
+ \defbodyindent = .4cm
+}}
+
+% Use @afourpaper to print on European A4 paper.
+\def\afourpaper{{\globaldefs = 1
+ \parskip = 3pt plus 2pt minus 1pt
+ \textleading = 13.2pt
+ %
+ % Double-side printing via postscript on Laserjet 4050
+ % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm.
+ % To change the settings for a different printer or situation, adjust
+ % \normaloffset until the front-side and back-side texts align. Then
+ % do the same for \bindingoffset. You can set these for testing in
+ % your texinfo source file like this:
+ % @tex
+ % \global\normaloffset = -6mm
+ % \global\bindingoffset = 10mm
+ % @end tex
+ \internalpagesizes{673.2pt}{160mm}% that's 51 lines
+ {\voffset}{\hoffset}%
+ {\bindingoffset}{44pt}%
+ {297mm}{210mm}%
+ %
+ \tolerance = 700
+ \contentsrightmargin = 0pt
+ \defbodyindent = 5mm
+}}
+
+% Use @afivepaper to print on European A5 paper.
+% From romildo@urano.iceb.ufop.br, 2 July 2000.
+% He also recommends making @example and @lisp be small.
+\def\afivepaper{{\globaldefs = 1
+ \parskip = 2pt plus 1pt minus 0.1pt
+ \textleading = 12.5pt
+ %
+ \internalpagesizes{160mm}{120mm}%
+ {\voffset}{\hoffset}%
+ {\bindingoffset}{8pt}%
+ {210mm}{148mm}%
+ %
+ \lispnarrowing = 0.2in
+ \tolerance = 800
+ \contentsrightmargin = 0pt
+ \defbodyindent = 2mm
+ \tableindent = 12mm
+}}
+
+% A specific text layout, 24x15cm overall, intended for A4 paper.
+\def\afourlatex{{\globaldefs = 1
+ \afourpaper
+ \internalpagesizes{237mm}{150mm}%
+ {\voffset}{4.6mm}%
+ {\bindingoffset}{7mm}%
+ {297mm}{210mm}%
+ %
+ % Must explicitly reset to 0 because we call \afourpaper.
+ \globaldefs = 0
+}}
+
+% Use @afourwide to print on A4 paper in landscape format.
+\def\afourwide{{\globaldefs = 1
+ \afourpaper
+ \internalpagesizes{241mm}{165mm}%
+ {\voffset}{-2.95mm}%
+ {\bindingoffset}{7mm}%
+ {297mm}{210mm}%
+ \globaldefs = 0
+}}
+
+% @pagesizes TEXTHEIGHT[,TEXTWIDTH]
+% Perhaps we should allow setting the margins, \topskip, \parskip,
+% and/or leading, also. Or perhaps we should compute them somehow.
+%
+\parseargdef\pagesizes{\pagesizesyyy #1,,\finish}
+\def\pagesizesyyy#1,#2,#3\finish{{%
+ \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi
+ \globaldefs = 1
+ %
+ \parskip = 3pt plus 2pt minus 1pt
+ \setleading{\textleading}%
+ %
+ \dimen0 = #1\relax
+ \advance\dimen0 by \voffset
+ %
+ \dimen2 = \hsize
+ \advance\dimen2 by \normaloffset
+ %
+ \internalpagesizes{#1}{\hsize}%
+ {\voffset}{\normaloffset}%
+ {\bindingoffset}{44pt}%
+ {\dimen0}{\dimen2}%
+}}
+
+% Set default to letter.
+%
+\letterpaper
+
+% Default value of \hfuzz, for suppressing warnings about overfull hboxes.
+\hfuzz = 1pt
+
+
+\message{and turning on texinfo input format.}
+
+\def^^L{\par} % remove \outer, so ^L can appear in an @comment
+
+% DEL is a comment character, in case @c does not suffice.
+\catcode`\^^? = 14
+
+% Define macros to output various characters with catcode for normal text.
+\catcode`\"=\other \def\normaldoublequote{"}
+\catcode`\$=\other \def\normaldollar{$}%$ font-lock fix
+\catcode`\+=\other \def\normalplus{+}
+\catcode`\<=\other \def\normalless{<}
+\catcode`\>=\other \def\normalgreater{>}
+\catcode`\^=\other \def\normalcaret{^}
+\catcode`\_=\other \def\normalunderscore{_}
+\catcode`\|=\other \def\normalverticalbar{|}
+\catcode`\~=\other \def\normaltilde{~}
+
+% This macro is used to make a character print one way in \tt
+% (where it can probably be output as-is), and another way in other fonts,
+% where something hairier probably needs to be done.
+%
+% #1 is what to print if we are indeed using \tt; #2 is what to print
+% otherwise. Since all the Computer Modern typewriter fonts have zero
+% interword stretch (and shrink), and it is reasonable to expect all
+% typewriter fonts to have this, we can check that font parameter.
+%
+\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi}
+
+% Same as above, but check for italic font. Actually this also catches
+% non-italic slanted fonts since it is impossible to distinguish them from
+% italic fonts. But since this is only used by $ and it uses \sl anyway
+% this is not a problem.
+\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi}
+
+% Set catcodes for Texinfo file
+
+% Active characters for printing the wanted glyph.
+% Most of these we simply print from the \tt font, but for some, we can
+% use math or other variants that look better in normal text.
+%
+\catcode`\"=\active
+\def\activedoublequote{{\tt\char34}}
+\let"=\activedoublequote
+\catcode`\~=\active \def\activetilde{{\tt\char126}} \let~ = \activetilde
+\chardef\hatchar=`\^
+\catcode`\^=\active \def\activehat{{\tt \hatchar}} \let^ = \activehat
+
+\catcode`\_=\active
+\def_{\ifusingtt\normalunderscore\_}
+\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }
+\let\realunder=_
+
+\catcode`\|=\active \def|{{\tt\char124}}
+
+\chardef \less=`\<
+\catcode`\<=\active \def\activeless{{\tt \less}}\let< = \activeless
+\chardef \gtr=`\>
+\catcode`\>=\active \def\activegtr{{\tt \gtr}}\let> = \activegtr
+\catcode`\+=\active \def+{{\tt \char 43}}
+\catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix
+\catcode`\-=\active \let-=\normaldash
+
+
+% used for headline/footline in the output routine, in case the page
+% breaks in the middle of an @tex block.
+\def\texinfochars{%
+ \let< = \activeless
+ \let> = \activegtr
+ \let~ = \activetilde
+ \let^ = \activehat
+ \markupsetuplqdefault \markupsetuprqdefault
+ \let\b = \strong
+ \let\i = \smartitalic
+ % in principle, all other definitions in \tex have to be undone too.
+}
+
+% Used sometimes to turn off (effectively) the active characters even after
+% parsing them.
+\def\turnoffactive{%
+ \normalturnoffactive
+ \otherbackslash
+}
+
+\catcode`\@=0
+
+% \backslashcurfont outputs one backslash character in current font,
+% as in \char`\\.
+\global\chardef\backslashcurfont=`\\
+\global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work
+
+% \realbackslash is an actual character `\' with catcode other, and
+% \doublebackslash is two of them (for the pdf outlines).
+{\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}}
+
+% In Texinfo, backslash is an active character; it prints the backslash
+% in fixed width font.
+\catcode`\\=\active % @ for escape char from now on.
+
+% Print a typewriter backslash. For math mode, we can't simply use
+% \backslashcurfont: the story here is that in math mode, the \char
+% of \backslashcurfont ends up printing the roman \ from the math symbol
+% font (because \char in math mode uses the \mathcode, and plain.tex
+% sets \mathcode`\\="026E). Hence we use an explicit \mathchar,
+% which is the decimal equivalent of "715c (class 7, e.g., use \fam;
+% ignored family value; char position "5C). We can't use " for the
+% usual hex value because it has already been made active.
+
+@def@ttbackslash{{@tt @ifmmode @mathchar29020 @else @backslashcurfont @fi}}
+@let@backslashchar = @ttbackslash % @backslashchar{} is for user documents.
+
+% \rawbackslash defines an active \ to do \backslashcurfont.
+% \otherbackslash defines an active \ to be a literal `\' character with
+% catcode other. We switch back and forth between these.
+@gdef@rawbackslash{@let\=@backslashcurfont}
+@gdef@otherbackslash{@let\=@realbackslash}
+
+% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
+% the literal character `\'.
+%
+{@catcode`- = @active
+ @gdef@normalturnoffactive{%
+ @passthroughcharstrue
+ @let-=@normaldash
+ @let"=@normaldoublequote
+ @let$=@normaldollar %$ font-lock fix
+ @let+=@normalplus
+ @let<=@normalless
+ @let>=@normalgreater
+ @let^=@normalcaret
+ @let_=@normalunderscore
+ @let|=@normalverticalbar
+ @let~=@normaltilde
+ @let\=@ttbackslash
+ @markupsetuplqdefault
+ @markupsetuprqdefault
+ @unsepspaces
+ }
+}
+
+% If a .fmt file is being used, characters that might appear in a file
+% name cannot be active until we have parsed the command line.
+% So turn them off again, and have @fixbackslash turn them back on.
+@catcode`+=@other @catcode`@_=@other
+
+% \enablebackslashhack - allow file to begin `\input texinfo'
+%
+% If a .fmt file is being used, we don't want the `\input texinfo' to show up.
+% That is what \eatinput is for; after that, the `\' should revert to printing
+% a backslash.
+% If the file did not have a `\input texinfo', then it is turned off after
+% the first line; otherwise the first `\' in the file would cause an error.
+% This is used on the very last line of this file, texinfo.tex.
+% We also use @c to call @fixbackslash, in case ends of lines are hidden.
+{
+@catcode`@^=7
+@catcode`@^^M=13@gdef@enablebackslashhack{%
+ @global@let\ = @eatinput%
+ @catcode`@^^M=13%
+ @def@c{@fixbackslash@c}%
+ % Definition for the newline at the end of this file.
+ @def ^^M{@let^^M@secondlinenl}%
+ % Definition for a newline in the main Texinfo file.
+ @gdef @secondlinenl{@fixbackslash}%
+ % In case the first line has a whole-line command on it
+ @let@originalparsearg@parsearg
+ @def@parsearg{@fixbackslash@originalparsearg}
+}}
+
+{@catcode`@^=7 @catcode`@^^M=13%
+@gdef@eatinput input texinfo#1^^M{@fixbackslash}}
+
+% Emergency active definition of newline, in case an active newline token
+% appears by mistake.
+{@catcode`@^=7 @catcode13=13%
+@gdef@enableemergencynewline{%
+ @gdef^^M{%
+ @par%
+ %<warning: active newline>@par%
+}}}
+
+
+@gdef@fixbackslash{%
+ @ifx\@eatinput @let\ = @ttbackslash @fi
+ @catcode13=5 % regular end of line
+ @enableemergencynewline
+ @let@c=@texinfoc
+ @let@parsearg@originalparsearg
+ % Also turn back on active characters that might appear in the input
+ % file name, in case not using a pre-dumped format.
+ @catcode`+=@active
+ @catcode`@_=@active
+ %
+ % If texinfo.cnf is present on the system, read it.
+ % Useful for site-wide @afourpaper, etc. This macro, @fixbackslash, gets
+ % called at the beginning of every Texinfo file. Not opening texinfo.cnf
+ % directly in this file, texinfo.tex, makes it possible to make a format
+ % file for Texinfo.
+ %
+ @openin 1 texinfo.cnf
+ @ifeof 1 @else @input texinfo.cnf @fi
+ @closein 1
+}
+
+
+% Say @foo, not \foo, in error messages.
+@escapechar = `@@
+
+% These (along with & and #) are made active for url-breaking, so need
+% active definitions as the normal characters.
+@def@normaldot{.}
+@def@normalquest{?}
+@def@normalslash{/}
+
+% These look ok in all fonts, so just make them not special.
+% @hashchar{} gets its own user-level command, because of #line.
+@catcode`@& = @other @def@normalamp{&}
+@catcode`@# = @other @def@normalhash{#}
+@catcode`@% = @other @def@normalpercent{%}
+
+@let @hashchar = @normalhash
+
+@c Finally, make ` and ' active, so that txicodequoteundirected and
+@c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}. If we
+@c don't make ` and ' active, @code will not get them as active chars.
+@c Do this last of all since we use ` in the previous @catcode assignments.
+@catcode`@'=@active
+@catcode`@`=@active
+@markupsetuplqdefault
+@markupsetuprqdefault
+
+@c Local variables:
+@c eval: (add-hook 'write-file-hooks 'time-stamp)
+@c page-delimiter: "^\\\\message\\|emacs-page"
+@c time-stamp-start: "def\\\\texinfoversion{"
+@c time-stamp-format: "%:y-%02m-%02d.%02H"
+@c time-stamp-end: "}"
+@c End:
+
+@c vim:sw=2:
+
+@enablebackslashhack
diff --git a/lib/update-copyright b/lib/update-copyright
new file mode 100755
index 000000000..63455c379
--- /dev/null
+++ b/lib/update-copyright
@@ -0,0 +1,274 @@
+eval '(exit $?0)' && eval 'exec perl -wS -0777 -pi "$0" "$@"'
+ & eval 'exec perl -wS -0777 -pi "$0" $argv:q'
+ if 0;
+# Update an FSF copyright year list to include the current year.
+
+my $VERSION = '2017-09-13.06:45'; # UTC
+
+# Copyright (C) 2009-2017 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 3, 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 <https://www.gnu.org/licenses/>.
+
+# Written by Jim Meyering and Joel E. Denny
+
+# The arguments to this script should be names of files that contain
+# copyright statements to be updated. The copyright holder's name
+# defaults to "Free Software Foundation, Inc." but may be changed to
+# any other name by using the "UPDATE_COPYRIGHT_HOLDER" environment
+# variable.
+#
+# For example, you might wish to use the update-copyright target rule
+# in maint.mk from gnulib's maintainer-makefile module.
+#
+# Iff a copyright statement is recognized in a file and the final
+# year is not the current year, then the statement is updated for the
+# new year and it is reformatted to:
+#
+# 1. Fit within 72 columns.
+# 2. Convert 2-digit years to 4-digit years by prepending "19".
+# 3. Expand copyright year intervals. (See "Environment variables"
+# below.)
+#
+# A warning is printed for every file for which no copyright
+# statement is recognized.
+#
+# Each file's copyright statement must be formatted correctly in
+# order to be recognized. For example, each of these is fine:
+#
+# Copyright @copyright{} 1990-2005, 2007-2009 Free Software
+# Foundation, Inc.
+#
+# # Copyright (C) 1990-2005, 2007-2009 Free Software
+# # Foundation, Inc.
+#
+# /*
+# * Copyright &copy; 90,2005,2007-2009
+# * Free Software Foundation, Inc.
+# */
+#
+# However, the following format is not recognized because the line
+# prefix changes after the first line:
+#
+# ## Copyright (C) 1990-2005, 2007-2009 Free Software
+# # Foundation, Inc.
+#
+# However, any correctly formatted copyright statement following
+# a non-matching copyright statements would be recognized.
+#
+# The exact conditions that a file's copyright statement must meet
+# to be recognized are:
+#
+# 1. It is the first copyright statement that meets all of the
+# following conditions. Subsequent copyright statements are
+# ignored.
+# 2. Its format is "Copyright (C)", then a list of copyright years,
+# and then the name of the copyright holder.
+# 3. The "(C)" takes one of the following forms or is omitted
+# entirely:
+#
+# A. (C)
+# B. (c)
+# C. @copyright{}
+# D. &copy;
+#
+# 4. The "Copyright" appears at the beginning of a line, except that it
+# may be prefixed by any sequence (e.g., a comment) of no more than
+# 5 characters -- including white space.
+# 5. Iff such a prefix is present, the same prefix appears at the
+# beginning of each remaining line within the FSF copyright
+# statement. There is one exception in order to support C-style
+# comments: if the first line's prefix contains nothing but
+# whitespace surrounding a "/*", then the prefix for all subsequent
+# lines is the same as the first line's prefix except with each of
+# "/" and possibly "*" replaced by a " ". The replacement of "*"
+# by " " is consistent throughout all subsequent lines.
+# 6. Blank lines, even if preceded by the prefix, do not appear
+# within the FSF copyright statement.
+# 7. Each copyright year is 2 or 4 digits, and years are separated by
+# commas or dashes. Whitespace may appear after commas.
+#
+# Environment variables:
+#
+# 1. If UPDATE_COPYRIGHT_FORCE=1, a recognized FSF copyright statement
+# is reformatted even if it does not need updating for the new
+# year. If unset or set to 0, only updated FSF copyright
+# statements are reformatted.
+# 2. If UPDATE_COPYRIGHT_USE_INTERVALS=1, every series of consecutive
+# copyright years (such as 90, 1991, 1992-2007, 2008) in a
+# reformatted FSF copyright statement is collapsed to a single
+# interval (such as 1990-2008). If unset or set to 0, all existing
+# copyright year intervals in a reformatted FSF copyright statement
+# are expanded instead.
+# If UPDATE_COPYRIGHT_USE_INTERVALS=2, convert a sequence with gaps
+# to the minimal containing range. For example, convert
+# 2000, 2004-2007, 2009 to 2000-2009.
+# 3. For testing purposes, you can set the assumed current year in
+# UPDATE_COPYRIGHT_YEAR.
+# 4. The default maximum line length for a copyright line is 72.
+# Set UPDATE_COPYRIGHT_MAX_LINE_LENGTH to use a different length.
+# 5. Set UPDATE_COPYRIGHT_HOLDER if the copyright holder is other
+# than "Free Software Foundation, Inc.".
+
+use strict;
+use warnings;
+
+my $copyright_re = 'Copyright';
+my $circle_c_re = '(?:\([cC]\)|@copyright\{}|\\\\\(co|&copy;)';
+my $holder = $ENV{UPDATE_COPYRIGHT_HOLDER};
+$holder ||= 'Free Software Foundation, Inc.';
+my $prefix_max = 5;
+my $margin = $ENV{UPDATE_COPYRIGHT_MAX_LINE_LENGTH};
+!$margin || $margin !~ m/^\d+$/
+ and $margin = 72;
+
+my $tab_width = 8;
+
+my $this_year = $ENV{UPDATE_COPYRIGHT_YEAR};
+if (!$this_year || $this_year !~ m/^\d{4}$/)
+ {
+ my ($sec, $min, $hour, $mday, $month, $year) = localtime (time ());
+ $this_year = $year + 1900;
+ }
+
+# Unless the file consistently uses "\r\n" as the EOL, use "\n" instead.
+my $eol = /(?:^|[^\r])\n/ ? "\n" : "\r\n";
+
+my $leading;
+my $prefix;
+my $ws_re;
+my $stmt_re;
+while (/(^|\n)(.{0,$prefix_max})$copyright_re/g)
+ {
+ $leading = "$1$2";
+ $prefix = $2;
+ if ($prefix =~ /^(\s*\/)\*(\s*)$/)
+ {
+ $prefix =~ s,/, ,;
+ my $prefix_ws = $prefix;
+ $prefix_ws =~ s/\*/ /; # Only whitespace.
+ if (/\G(?:[^*\n]|\*[^\/\n])*\*?\n$prefix_ws/)
+ {
+ $prefix = $prefix_ws;
+ }
+ }
+ $ws_re = '[ \t\r\f]'; # \s without \n
+ $ws_re =
+ "(?:$ws_re*(?:$ws_re|\\n" . quotemeta($prefix) . ")$ws_re*)";
+ my $holder_re = $holder;
+ $holder_re =~ s/\s/$ws_re/g;
+ my $stmt_remainder_re =
+ "(?:$ws_re$circle_c_re)?"
+ . "$ws_re(?:(?:\\d\\d)?\\d\\d(?:,$ws_re?|-))*"
+ . "((?:\\d\\d)?\\d\\d)$ws_re$holder_re";
+ if (/\G$stmt_remainder_re/)
+ {
+ $stmt_re =
+ quotemeta($leading) . "($copyright_re$stmt_remainder_re)";
+ last;
+ }
+ }
+if (defined $stmt_re)
+ {
+ /$stmt_re/ or die; # Should never die.
+ my $stmt = $1;
+ my $final_year_orig = $2;
+
+ # Handle two-digit year numbers like "98" and "99".
+ my $final_year = $final_year_orig;
+ $final_year <= 99
+ and $final_year += 1900;
+
+ if ($final_year != $this_year)
+ {
+ # Update the year.
+ $stmt =~ s/\b$final_year_orig\b/$final_year, $this_year/;
+ }
+ if ($final_year != $this_year || $ENV{'UPDATE_COPYRIGHT_FORCE'})
+ {
+ # Normalize all whitespace including newline-prefix sequences.
+ $stmt =~ s/$ws_re/ /g;
+
+ # Put spaces after commas.
+ $stmt =~ s/, ?/, /g;
+
+ # Convert 2-digit to 4-digit years.
+ $stmt =~ s/(\b\d\d\b)/19$1/g;
+
+ # Make the use of intervals consistent.
+ if (!$ENV{UPDATE_COPYRIGHT_USE_INTERVALS})
+ {
+ $stmt =~ s/(\d{4})-(\d{4})/join(', ', $1..$2)/eg;
+ }
+ else
+ {
+ $stmt =~
+ s/
+ (\d{4})
+ (?:
+ (,\ |-)
+ ((??{
+ if ($2 eq '-') { '\d{4}'; }
+ elsif (!$3) { $1 + 1; }
+ else { $3 + 1; }
+ }))
+ )+
+ /$1-$3/gx;
+
+ # When it's 2, emit a single range encompassing all year numbers.
+ $ENV{UPDATE_COPYRIGHT_USE_INTERVALS} == 2
+ and $stmt =~ s/\b(\d{4})\b.*\b(\d{4})\b/$1-$2/;
+ }
+
+ # Format within margin.
+ my $stmt_wrapped;
+ my $text_margin = $margin - length($prefix);
+ if ($prefix =~ /^(\t+)/)
+ {
+ $text_margin -= length($1) * ($tab_width - 1);
+ }
+ while (length $stmt)
+ {
+ if (($stmt =~ s/^(.{1,$text_margin})(?: |$)//)
+ || ($stmt =~ s/^([\S]+)(?: |$)//))
+ {
+ my $line = $1;
+ $stmt_wrapped .= $stmt_wrapped ? "$eol$prefix" : $leading;
+ $stmt_wrapped .= $line;
+ }
+ else
+ {
+ # Should be unreachable, but we don't want an infinite
+ # loop if it can be reached.
+ die;
+ }
+ }
+
+ # Replace the old copyright statement.
+ s/$stmt_re/$stmt_wrapped/;
+ }
+ }
+else
+ {
+ print STDERR "$ARGV: warning: copyright statement not found\n";
+ }
+
+# Local variables:
+# mode: perl
+# indent-tabs-mode: nil
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "my $VERSION = '"
+# time-stamp-format: "%:y-%02m-%02d.%02H:%02M"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "'; # UTC"
+# End:
diff --git a/lib/ylwrap b/lib/ylwrap
new file mode 100755
index 000000000..5ca021feb
--- /dev/null
+++ b/lib/ylwrap
@@ -0,0 +1,247 @@
+#! /bin/sh
+# ylwrap - wrapper for lex/yacc invocations.
+
+scriptversion=2017-09-16.17; # UTC
+
+# Copyright (C) 1996-2017 Free Software Foundation, Inc.
+#
+# Written by Tom Tromey <tromey@cygnus.com>.
+#
+# 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 <https://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+get_dirname ()
+{
+ case $1 in
+ */*|*\\*) printf '%s\n' "$1" | sed -e 's|\([\\/]\)[^\\/]*$|\1|';;
+ # Otherwise, we want the empty string (not ".").
+ esac
+}
+
+# guard FILE
+# ----------
+# The CPP macro used to guard inclusion of FILE.
+guard ()
+{
+ printf '%s\n' "$1" \
+ | sed \
+ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \
+ -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g' \
+ -e 's/__*/_/g'
+}
+
+# quote_for_sed [STRING]
+# ----------------------
+# Return STRING (or stdin) quoted to be used as a sed pattern.
+quote_for_sed ()
+{
+ case $# in
+ 0) cat;;
+ 1) printf '%s\n' "$1";;
+ esac \
+ | sed -e 's|[][\\.*]|\\&|g'
+}
+
+case "$1" in
+ '')
+ echo "$0: No files given. Try '$0 --help' for more information." 1>&2
+ exit 1
+ ;;
+ --basedir)
+ basedir=$2
+ shift 2
+ ;;
+ -h|--h*)
+ cat <<\EOF
+Usage: ylwrap [--help|--version] INPUT [OUTPUT DESIRED]... -- PROGRAM [ARGS]...
+
+Wrapper for lex/yacc invocations, renaming files as desired.
+
+ INPUT is the input file
+ OUTPUT is one file PROG generates
+ DESIRED is the file we actually want instead of OUTPUT
+ PROGRAM is program to run
+ ARGS are passed to PROG
+
+Any number of OUTPUT,DESIRED pairs may be used.
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v|--v*)
+ echo "ylwrap $scriptversion"
+ exit $?
+ ;;
+esac
+
+
+# The input.
+input=$1
+shift
+# We'll later need for a correct munging of "#line" directives.
+input_sub_rx=`get_dirname "$input" | quote_for_sed`
+case $input in
+ [\\/]* | ?:[\\/]*)
+ # Absolute path; do nothing.
+ ;;
+ *)
+ # Relative path. Make it absolute.
+ input=`pwd`/$input
+ ;;
+esac
+input_rx=`get_dirname "$input" | quote_for_sed`
+
+# Since DOS filename conventions don't allow two dots,
+# the DOS version of Bison writes out y_tab.c instead of y.tab.c
+# and y_tab.h instead of y.tab.h. Test to see if this is the case.
+y_tab_nodot=false
+if test -f y_tab.c || test -f y_tab.h; then
+ y_tab_nodot=true
+fi
+
+# The parser itself, the first file, is the destination of the .y.c
+# rule in the Makefile.
+parser=$1
+
+# A sed program to s/FROM/TO/g for all the FROM/TO so that, for
+# instance, we rename #include "y.tab.h" into #include "parse.h"
+# during the conversion from y.tab.c to parse.c.
+sed_fix_filenames=
+
+# Also rename header guards, as Bison 2.7 for instance uses its header
+# guard in its implementation file.
+sed_fix_header_guards=
+
+while test $# -ne 0; do
+ if test x"$1" = x"--"; then
+ shift
+ break
+ fi
+ from=$1
+ # Handle y_tab.c and y_tab.h output by DOS
+ if $y_tab_nodot; then
+ case $from in
+ "y.tab.c") from=y_tab.c;;
+ "y.tab.h") from=y_tab.h;;
+ esac
+ fi
+ shift
+ to=$1
+ shift
+ sed_fix_filenames="${sed_fix_filenames}s|"`quote_for_sed "$from"`"|$to|g;"
+ sed_fix_header_guards="${sed_fix_header_guards}s|"`guard "$from"`"|"`guard "$to"`"|g;"
+done
+
+# The program to run.
+prog=$1
+shift
+# Make any relative path in $prog absolute.
+case $prog in
+ [\\/]* | ?:[\\/]*) ;;
+ *[\\/]*) prog=`pwd`/$prog ;;
+esac
+
+dirname=ylwrap$$
+do_exit="cd '`pwd`' && rm -rf $dirname > /dev/null 2>&1;"' (exit $ret); exit $ret'
+trap "ret=129; $do_exit" 1
+trap "ret=130; $do_exit" 2
+trap "ret=141; $do_exit" 13
+trap "ret=143; $do_exit" 15
+mkdir $dirname || exit 1
+
+cd $dirname
+
+case $# in
+ 0) "$prog" "$input" ;;
+ *) "$prog" "$@" "$input" ;;
+esac
+ret=$?
+
+if test $ret -eq 0; then
+ for from in *
+ do
+ to=`printf '%s\n' "$from" | sed "$sed_fix_filenames"`
+ if test -f "$from"; then
+ # If $2 is an absolute path name, then just use that,
+ # otherwise prepend '../'.
+ case $to in
+ [\\/]* | ?:[\\/]*) target=$to;;
+ *) target=../$to;;
+ esac
+
+ # Do not overwrite unchanged header files to avoid useless
+ # recompilations. Always update the parser itself: it is the
+ # destination of the .y.c rule in the Makefile. Divert the
+ # output of all other files to a temporary file so we can
+ # compare them to existing versions.
+ if test $from != $parser; then
+ realtarget=$target
+ target=tmp-`printf '%s\n' "$target" | sed 's|.*[\\/]||g'`
+ fi
+
+ # Munge "#line" or "#" directives. Don't let the resulting
+ # debug information point at an absolute srcdir. Use the real
+ # output file name, not yy.lex.c for instance. Adjust the
+ # include guards too.
+ sed -e "/^#/!b" \
+ -e "s|$input_rx|$input_sub_rx|" \
+ -e "$sed_fix_filenames" \
+ -e "$sed_fix_header_guards" \
+ "$from" >"$target" || ret=$?
+
+ # Check whether files must be updated.
+ if test "$from" != "$parser"; then
+ if test -f "$realtarget" && cmp -s "$realtarget" "$target"; then
+ echo "$to is unchanged"
+ rm -f "$target"
+ else
+ echo "updating $to"
+ mv -f "$target" "$realtarget"
+ fi
+ fi
+ else
+ # A missing file is only an error for the parser. This is a
+ # blatant hack to let us support using "yacc -d". If -d is not
+ # specified, don't fail when the header file is "missing".
+ if test "$from" = "$parser"; then
+ ret=1
+ fi
+ fi
+ done
+fi
+
+# Remove the directory.
+cd ..
+rm -rf $dirname
+
+exit $ret
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/m4/acdir/README b/m4/acdir/README
new file mode 100644
index 000000000..7c6f48776
--- /dev/null
+++ b/m4/acdir/README
@@ -0,0 +1,9 @@
+This directory is where .m4 files providing third-party autoconf
+macros can be placed to be automatically found by the aclocal(1)
+program.
+
+The .m4 files placed here could be shared among different versions
+of aclocal, so be careful.
+
+Even if no actual .m4 files are present, this directory is required
+in order for aclocal to work properly. Please do not remove it.
diff --git a/m4/amversion.in b/m4/amversion.in
new file mode 100644
index 000000000..4b845d888
--- /dev/null
+++ b/m4/amversion.in
@@ -0,0 +1,37 @@
+## -*- Autoconf -*-
+## @configure_input@
+# Copyright (C) 2002-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='@APIVERSION@'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version. Point them to the right macro.
+m4_if([$1], [@VERSION@], [],
+ [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too. Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([@VERSION@])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
diff --git a/m4/amversion.m4 b/m4/amversion.m4
new file mode 100644
index 000000000..a843427a4
--- /dev/null
+++ b/m4/amversion.m4
@@ -0,0 +1,37 @@
+## -*- Autoconf -*-
+## Generated from amversion.in; do not edit by hand.
+# Copyright (C) 2002-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.15a'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version. Point them to the right macro.
+m4_if([$1], [1.15a], [],
+ [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too. Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.15a])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
diff --git a/m4/ar-lib.m4 b/m4/ar-lib.m4
new file mode 100644
index 000000000..4fe6fb34b
--- /dev/null
+++ b/m4/ar-lib.m4
@@ -0,0 +1,60 @@
+## -*- Autoconf -*-
+# Copyright (C) 2011-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_AR([ACT-IF-FAIL])
+# -------------------------
+# Try to determine the archiver interface, and trigger the ar-lib wrapper
+# if it is needed. If the detection of archiver interface fails, run
+# ACT-IF-FAIL (default is to abort configure with a proper error message).
+AC_DEFUN([AM_PROG_AR],
+[AC_BEFORE([$0], [LT_INIT])dnl
+AC_BEFORE([$0], [AC_PROG_LIBTOOL])dnl
+AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([ar-lib])dnl
+AC_CHECK_TOOLS([AR], [ar lib "link -lib"], [false])
+: ${AR=ar}
+
+AC_CACHE_CHECK([the archiver ($AR) interface], [am_cv_ar_interface],
+ [AC_LANG_PUSH([C])
+ am_cv_ar_interface=ar
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int some_variable = 0;]])],
+ [am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&AS_MESSAGE_LOG_FD'
+ AC_TRY_EVAL([am_ar_try])
+ if test "$ac_status" -eq 0; then
+ am_cv_ar_interface=ar
+ else
+ am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&AS_MESSAGE_LOG_FD'
+ AC_TRY_EVAL([am_ar_try])
+ if test "$ac_status" -eq 0; then
+ am_cv_ar_interface=lib
+ else
+ am_cv_ar_interface=unknown
+ fi
+ fi
+ rm -f conftest.lib libconftest.a
+ ])
+ AC_LANG_POP([C])])
+
+case $am_cv_ar_interface in
+ar)
+ ;;
+lib)
+ # Microsoft lib, so override with the ar-lib wrapper script.
+ # FIXME: It is wrong to rewrite AR.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__AR in this case,
+ # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something
+ # similar.
+ AR="$am_aux_dir/ar-lib $AR"
+ ;;
+unknown)
+ m4_default([$1],
+ [AC_MSG_ERROR([could not determine $AR interface])])
+ ;;
+esac
+AC_SUBST([AR])dnl
+])
diff --git a/m4/as.m4 b/m4/as.m4
new file mode 100644
index 000000000..70ffc2e25
--- /dev/null
+++ b/m4/as.m4
@@ -0,0 +1,19 @@
+# Figure out how to run the assembler. -*- Autoconf -*-
+
+# Copyright (C) 2001-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_AS
+# ----------
+AC_DEFUN([AM_PROG_AS],
+[# By default we simply use the C compiler to build assembly code.
+AC_REQUIRE([AC_PROG_CC])
+test "${CCAS+set}" = set || CCAS=$CC
+test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS
+AC_ARG_VAR([CCAS], [assembler compiler command (defaults to CC)])
+AC_ARG_VAR([CCASFLAGS], [assembler compiler flags (defaults to CFLAGS)])
+_AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES([CCAS])])dnl
+])
diff --git a/m4/auxdir.m4 b/m4/auxdir.m4
new file mode 100644
index 000000000..ae4327de2
--- /dev/null
+++ b/m4/auxdir.m4
@@ -0,0 +1,51 @@
+# AM_AUX_DIR_EXPAND -*- Autoconf -*-
+
+# Copyright (C) 2001-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to
+# '$srcdir', '$srcdir/..', or '$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory. The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run. This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+# fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+# fails if $ac_aux_dir is absolute,
+# fails when called from a subdirectory in a VPATH build with
+# a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir. In an in-source build this is usually
+# harmless because $srcdir is '.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
+# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+# MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH. The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
+])
diff --git a/m4/cond-if.m4 b/m4/cond-if.m4
new file mode 100644
index 000000000..2c62bd33b
--- /dev/null
+++ b/m4/cond-if.m4
@@ -0,0 +1,36 @@
+# AM_COND_IF -*- Autoconf -*-
+
+# Copyright (C) 2008-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_COND_IF
+# _AM_COND_ELSE
+# _AM_COND_ENDIF
+# --------------
+# These macros are only used for tracing.
+m4_define([_AM_COND_IF])
+m4_define([_AM_COND_ELSE])
+m4_define([_AM_COND_ENDIF])
+
+# AM_COND_IF(COND, [IF-TRUE], [IF-FALSE])
+# ---------------------------------------
+# If the shell condition COND is true, execute IF-TRUE, otherwise execute
+# IF-FALSE. Allow automake to learn about conditional instantiating macros
+# (the AC_CONFIG_FOOS).
+AC_DEFUN([AM_COND_IF],
+[m4_ifndef([_AM_COND_VALUE_$1],
+ [m4_fatal([$0: no such condition "$1"])])dnl
+_AM_COND_IF([$1])dnl
+if test -z "$$1_TRUE"; then :
+ m4_n([$2])[]dnl
+m4_ifval([$3],
+[_AM_COND_ELSE([$1])dnl
+else
+ $3
+])dnl
+_AM_COND_ENDIF([$1])dnl
+fi[]dnl
+])
diff --git a/m4/cond.m4 b/m4/cond.m4
new file mode 100644
index 000000000..2a889d466
--- /dev/null
+++ b/m4/cond.m4
@@ -0,0 +1,32 @@
+# AM_CONDITIONAL -*- Autoconf -*-
+
+# Copyright (C) 1997-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ([2.52])dnl
+ m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
+ [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
+if $2; then
+ $1_TRUE=
+ $1_FALSE='#'
+else
+ $1_TRUE='#'
+ $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+ AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
diff --git a/m4/depend.m4 b/m4/depend.m4
new file mode 100644
index 000000000..3b1d4b889
--- /dev/null
+++ b/m4/depend.m4
@@ -0,0 +1,189 @@
+## -*- Autoconf -*-
+# Copyright (C) 1999-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+
+# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery. Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+m4_if([$1], [CC], [depcc="$CC" am_compiler_list=],
+ [$1], [CXX], [depcc="$CXX" am_compiler_list=],
+ [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+ [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'],
+ [$1], [UPC], [depcc="$UPC" am_compiler_list=],
+ [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
+ [depcc="$$1" am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+ [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_$1_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+ fi
+ am__universal=false
+ m4_case([$1], [CC],
+ [case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac],
+ [CXX],
+ [case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac])
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+ # This compiler won't grok '-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_$1_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES.
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE([dependency-tracking], [dnl
+AS_HELP_STRING(
+ [--enable-dependency-tracking],
+ [do not reject slow dependency extractors])
+AS_HELP_STRING(
+ [--disable-dependency-tracking],
+ [speeds up one-time build])])
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+ am__nodep='_no'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+AC_SUBST([am__nodep])dnl
+_AM_SUBST_NOTMAKE([am__nodep])dnl
+])
diff --git a/m4/depout.m4 b/m4/depout.m4
new file mode 100644
index 000000000..204d47989
--- /dev/null
+++ b/m4/depout.m4
@@ -0,0 +1,65 @@
+# Generate code to set up dependency tracking. -*- Autoconf -*-
+
+# Copyright (C) 1999-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[{
+ # Older Autoconf quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+ # TODO: see whether this extra hack can be removed once we start
+ # requiring Autoconf 2.70 or later.
+ AS_CASE([$CONFIG_FILES],
+ [*\'*], [eval set x "$CONFIG_FILES"],
+ [*], [set x $CONFIG_FILES])
+ shift
+ # Used to flag and report bootstrapping failures.
+ am_rc=0
+ for am_mf
+ do
+ # Strip MF so we end up with the name of the file.
+ am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile which includes
+ # dependency-tracking related rules and includes.
+ # Grep'ing the whole file directly is not great: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \
+ || continue
+ am_dirpart=`AS_DIRNAME(["$am_mf"])`
+ am_filepart=`AS_BASENAME(["$am_mf"])`
+ AM_RUN_LOG([cd "$am_dirpart" \
+ && sed -e '/# am--include-marker/d' "$am_filepart" \
+ | $MAKE -f - am--depfiles]) || am_rc=$?
+ done
+ if test $am_rc -ne 0; then
+ AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments
+ for automatic dependency tracking. Try re-running configure with the
+ '--disable-dependency-tracking' option to at least be able to build
+ the package (albeit without support for automatic dependency tracking).])
+ fi
+ AS_UNSET([am_dirpart])
+ AS_UNSET([am_filepart])
+ AS_UNSET([am_mf])
+ AS_UNSET([am_rc])
+ rm -f conftest-deps.mk
+}
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking is enabled.
+# This creates each '.Po' and '.Plo' makefile fragment that we'll need in
+# order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+ [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+ [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])])
diff --git a/m4/dmalloc.m4 b/m4/dmalloc.m4
new file mode 100644
index 000000000..0b9f8d4f4
--- /dev/null
+++ b/m4/dmalloc.m4
@@ -0,0 +1,26 @@
+## ----------------------------------- ## -*- Autoconf -*-
+## Check if --with-dmalloc was given. ##
+## From Franc,ois Pinard ##
+## ----------------------------------- ##
+
+# Copyright (C) 1996-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([AM_WITH_DMALLOC],
+[AC_MSG_CHECKING([if malloc debugging is wanted])
+AC_ARG_WITH([dmalloc],
+[AS_HELP_STRING([--with-dmalloc],
+ [use dmalloc, as in http://www.dmalloc.com])],
+[if test "$withval" = yes; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE([WITH_DMALLOC], [1],
+ [Define if using the dmalloc debugging malloc package])
+ LIBS="$LIBS -ldmalloc"
+ LDFLAGS="$LDFLAGS -g"
+else
+ AC_MSG_RESULT([no])
+fi], [AC_MSG_RESULT([no])])
+])
diff --git a/m4/extra-recurs.m4 b/m4/extra-recurs.m4
new file mode 100644
index 000000000..ac7df8eab
--- /dev/null
+++ b/m4/extra-recurs.m4
@@ -0,0 +1,16 @@
+# AM_EXTRA_RECURSIVE_TARGETS -*- Autoconf -*-
+
+# Copyright (C) 2012-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_EXTRA_RECURSIVE_TARGETS
+# --------------------------
+# Define the list of user recursive targets. This macro exists only to
+# be traced by Automake, which will ensure that a proper definition of
+# user-defined recursive targets (and associated rules) is propagated
+# into all the generated Makefiles.
+# TODO: We should really reject non-literal arguments here...
+AC_DEFUN([AM_EXTRA_RECURSIVE_TARGETS], [])
diff --git a/m4/gcj.m4 b/m4/gcj.m4
new file mode 100644
index 000000000..413971174
--- /dev/null
+++ b/m4/gcj.m4
@@ -0,0 +1,18 @@
+# Check for Java compiler. -*- Autoconf -*-
+# For now we only handle the GNU compiler.
+
+# Copyright (C) 1999-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([AM_PROG_GCJ],
+[AC_CHECK_TOOLS([GCJ], [gcj], [gcj])
+test -z "$GCJ" && AC_MSG_ERROR([no acceptable gcj found in \$PATH])
+if test "x${GCJFLAGS-unset}" = xunset; then
+ GCJFLAGS="-g -O2"
+fi
+AC_SUBST([GCJFLAGS])
+_AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES(GCJ)])
+])
diff --git a/m4/init.m4 b/m4/init.m4
new file mode 100644
index 000000000..f788134a1
--- /dev/null
+++ b/m4/init.m4
@@ -0,0 +1,198 @@
+# Do all the work for Automake. -*- Autoconf -*-
+
+# Copyright (C) 1996-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This macro actually does too much. Some checks are only needed if
+# your package does certain things. But this isn't really a big deal.
+
+dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O.
+m4_define([AC_PROG_CC],
+m4_defn([AC_PROG_CC])
+[_AM_PROG_CC_C_O
+])
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out. PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition. After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.65])dnl
+dnl Autoconf wants to disallow AM_ names. We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[AC_DIAGNOSE([obsolete],
+ [$0: two- and three-arguments forms are deprecated.])
+m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(
+ m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]),
+ [ok:ok],,
+ [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package])
+ AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}])
+AM_MISSING_PROG([AUTOCONF], [autoconf])
+AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}])
+AM_MISSING_PROG([AUTOHEADER], [autoheader])
+AM_MISSING_PROG([MAKEINFO], [makeinfo])
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+# For better backward compatibility. To be removed once Automake 1.9.x
+# dies out for good. For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
+# We need awk for the "check" target (and possibly the TAP driver). The
+# system "awk" is bad on some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+ [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+ [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+ [_AM_DEPENDENCIES([CC])],
+ [m4_define([AC_PROG_CC],
+ m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [_AM_DEPENDENCIES([CXX])],
+ [m4_define([AC_PROG_CXX],
+ m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+ [_AM_DEPENDENCIES([OBJC])],
+ [m4_define([AC_PROG_OBJC],
+ m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
+ [_AM_DEPENDENCIES([OBJCXX])],
+ [m4_define([AC_PROG_OBJCXX],
+ m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl
+])
+AC_REQUIRE([AM_SILENT_RULES])dnl
+dnl The testsuite driver may need to know about EXEEXT, so add the
+dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This
+dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+ [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes. So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+ cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present. This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake@gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message. This
+can help us improve future automake versions.
+
+END
+ if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+ echo 'Configuration will proceed anyway, since you have set the' >&2
+ echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+ echo >&2
+ else
+ cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <https://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+ AC_MSG_ERROR([Your 'rm' program is bad, sorry.])
+ fi
+fi
+dnl The trailing newline in this macro's definition is deliberate, for
+dnl backward compatibility and to allow trailing 'dnl'-style comments
+dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841.
+])
+
+dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not
+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+dnl mangled by Autoconf and run in a shell conditional statement.
+m4_define([_AC_COMPILER_EXEEXT],
+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated. The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $_am_arg | $_am_arg:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
diff --git a/m4/install-sh.m4 b/m4/install-sh.m4
new file mode 100644
index 000000000..94b886a2a
--- /dev/null
+++ b/m4/install-sh.m4
@@ -0,0 +1,21 @@
+## -*- Autoconf -*-
+# Copyright (C) 2001-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+if test x"${install_sh+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+AC_SUBST([install_sh])])
diff --git a/m4/internal/ac-config-macro-dirs.m4 b/m4/internal/ac-config-macro-dirs.m4
new file mode 100644
index 000000000..cc05bbec5
--- /dev/null
+++ b/m4/internal/ac-config-macro-dirs.m4
@@ -0,0 +1,15 @@
+# Support AC_CONFIG_MACRO_DIRS with older autoconf. -*- Autoconf -*-
+# FIXME: To be removed in Automake 2.0, once we can assume autoconf
+# 2.70 or later.
+# FIXME: keep in sync with the contents of the variable
+# '$ac_config_macro_dirs_fallback' in aclocal.in.
+
+# Copyright (C) 2012-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+m4_ifndef([AC_CONFIG_MACRO_DIRS],
+[m4_defun([_AM_CONFIG_MACRO_DIRS],[])]dnl
+[m4_defun([AC_CONFIG_MACRO_DIRS],[_AM_CONFIG_MACRO_DIRS($@)])])
diff --git a/m4/lead-dot.m4 b/m4/lead-dot.m4
new file mode 100644
index 000000000..a82932169
--- /dev/null
+++ b/m4/lead-dot.m4
@@ -0,0 +1,19 @@
+## -*- Autoconf -*-
+# Copyright (C) 2003-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot. For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
diff --git a/m4/lex.m4 b/m4/lex.m4
new file mode 100644
index 000000000..d729c3107
--- /dev/null
+++ b/m4/lex.m4
@@ -0,0 +1,19 @@
+## Replacement for AC_PROG_LEX. -*- Autoconf -*-
+## by Alexandre Oliva <oliva@dcc.unicamp.br>
+# Copyright (C) 1998-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_LEX
+# -----------
+# Autoconf leaves LEX=: if lex or flex can't be found. Change that to a
+# "missing" invocation, for better error output.
+AC_DEFUN([AM_PROG_LEX],
+[AC_PREREQ([2.50])dnl
+AC_REQUIRE([AM_MISSING_HAS_RUN])dnl
+AC_REQUIRE([AC_PROG_LEX])dnl
+if test "$LEX" = :; then
+ LEX=${am_missing_run}flex
+fi])
diff --git a/m4/lispdir.m4 b/m4/lispdir.m4
new file mode 100644
index 000000000..846ef3f0e
--- /dev/null
+++ b/m4/lispdir.m4
@@ -0,0 +1,51 @@
+## ------------------------ -*- Autoconf -*-
+## Emacs LISP file handling
+## From Ulrich Drepper
+## Almost entirely rewritten by Alexandre Oliva
+## ------------------------
+# Copyright (C) 1996-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PATH_LISPDIR
+# ---------------
+AC_DEFUN([AM_PATH_LISPDIR],
+[AC_PREREQ([2.60])dnl
+ # If set to t, that means we are running in a shell under Emacs.
+ # If you have an Emacs named "t", then use the full path.
+ test x"$EMACS" = xt && EMACS=
+ AC_CHECK_PROGS([EMACS], [emacs xemacs], [no])
+ AC_ARG_VAR([EMACS], [the Emacs editor command])
+ AC_ARG_VAR([EMACSLOADPATH], [the Emacs library search path])
+ AC_ARG_WITH([lispdir],
+ [AS_HELP_STRING([--with-lispdir],
+ [override the default lisp directory])],
+ [ lispdir="$withval"
+ AC_MSG_CHECKING([where .elc files should go])
+ AC_MSG_RESULT([$lispdir])],
+ [
+ AC_CACHE_CHECK([where .elc files should go], [am_cv_lispdir], [
+ if test $EMACS != "no"; then
+ if test x${lispdir+set} != xset; then
+ # If $EMACS isn't GNU Emacs or XEmacs, this can blow up pretty badly
+ # Some emacsen will start up in interactive mode, requiring C-x C-c to exit,
+ # which is non-obvious for non-emacs users.
+ # Redirecting /dev/null should help a bit; pity we can't detect "broken"
+ # emacsen earlier and avoid running this altogether.
+ AC_RUN_LOG([$EMACS -batch -Q -eval '(while load-path (princ (concat (car load-path) "\n")) (setq load-path (cdr load-path)))' </dev/null >conftest.out])
+ am_cv_lispdir=`sed -n \
+ -e 's,/$,,' \
+ -e '/.*\/lib\/x*emacs\/site-lisp$/{s,.*/lib/\(x*emacs/site-lisp\)$,${libdir}/\1,;p;q;}' \
+ -e '/.*\/share\/x*emacs\/site-lisp$/{s,.*/share/\(x*emacs/site-lisp\),${datarootdir}/\1,;p;q;}' \
+ conftest.out`
+ rm conftest.out
+ fi
+ fi
+ test -z "$am_cv_lispdir" && am_cv_lispdir='${datadir}/emacs/site-lisp'
+ ])
+ lispdir="$am_cv_lispdir"
+])
+AC_SUBST([lispdir])
+])# AM_PATH_LISPDIR
diff --git a/m4/local.mk b/m4/local.mk
new file mode 100644
index 000000000..e56d6a211
--- /dev/null
+++ b/m4/local.mk
@@ -0,0 +1,79 @@
+## Included by top-level Makefile for Automake.
+
+## Copyright (C) 1995-2017 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 <https://www.gnu.org/licenses/>.
+
+## ------------------------------ ##
+## Automake-provided m4 macros. ##
+## ------------------------------ ##
+
+system_acdir = @system_acdir@
+automake_acdir = @automake_acdir@
+
+dist_automake_ac_DATA = \
+ %D%/amversion.m4 \
+ %D%/ar-lib.m4 \
+ %D%/as.m4 \
+ %D%/auxdir.m4 \
+ %D%/cond.m4 \
+ %D%/cond-if.m4 \
+ %D%/depend.m4 \
+ %D%/depout.m4 \
+ %D%/dmalloc.m4 \
+ %D%/extra-recurs.m4 \
+ %D%/gcj.m4 \
+ %D%/init.m4 \
+ %D%/install-sh.m4 \
+ %D%/lead-dot.m4 \
+ %D%/lex.m4 \
+ %D%/lispdir.m4 \
+ %D%/maintainer.m4 \
+ %D%/make.m4 \
+ %D%/missing.m4 \
+ %D%/mkdirp.m4 \
+ %D%/obsolete.m4 \
+ %D%/options.m4 \
+ %D%/python.m4 \
+ %D%/prog-cc-c-o.m4 \
+ %D%/runlog.m4 \
+ %D%/sanity.m4 \
+ %D%/silent.m4 \
+ %D%/strip.m4 \
+ %D%/substnot.m4 \
+ %D%/tar.m4 \
+ %D%/upc.m4 \
+ %D%/vala.m4
+
+dist_system_ac_DATA = %D%/acdir/README
+
+automake_internal_acdir = $(automake_acdir)/internal
+dist_automake_internal_ac_DATA = %D%/internal/ac-config-macro-dirs.m4
+
+# We build amversion.m4 here, instead of from config.status,
+# because config.status is rerun each time one of configure's
+# dependencies change and amversion.m4 happens to be a configure
+# dependency. configure and amversion.m4 would be rebuilt in
+# loop otherwise.
+# Use '$(top_srcdir)' for the benefit of non-GNU makes: this is
+# how amversion.m4 appears in our dependencies.
+$(top_srcdir)/%D%/amversion.m4: $(srcdir)/configure.ac \
+ $(srcdir)/%D%/amversion.in
+ $(AM_V_at)rm -f $@-t $@
+ $(AM_V_GEN)in=amversion.in \
+ && $(do_subst) <$(srcdir)/%D%/amversion.in >$@-t
+ $(generated_file_finalize)
+EXTRA_DIST += %D%/amversion.in
+
+# vim: ft=automake noet
diff --git a/m4/maintainer.m4 b/m4/maintainer.m4
new file mode 100644
index 000000000..33cb24ecc
--- /dev/null
+++ b/m4/maintainer.m4
@@ -0,0 +1,35 @@
+# Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
+# From Jim Meyering
+
+# Copyright (C) 1996-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_MAINTAINER_MODE([DEFAULT-MODE])
+# ----------------------------------
+# Control maintainer-specific portions of Makefiles.
+# Default is to disable them, unless 'enable' is passed literally.
+# For symmetry, 'disable' may be passed as well. Anyway, the user
+# can override the default with the --enable/--disable switch.
+AC_DEFUN([AM_MAINTAINER_MODE],
+[m4_case(m4_default([$1], [disable]),
+ [enable], [m4_define([am_maintainer_other], [disable])],
+ [disable], [m4_define([am_maintainer_other], [enable])],
+ [m4_define([am_maintainer_other], [enable])
+ m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])])
+AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+ dnl maintainer-mode's default is 'disable' unless 'enable' is passed
+ AC_ARG_ENABLE([maintainer-mode],
+ [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode],
+ am_maintainer_other[ make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer])],
+ [USE_MAINTAINER_MODE=$enableval],
+ [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))
+ AC_MSG_RESULT([$USE_MAINTAINER_MODE])
+ AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])
+ MAINT=$MAINTAINER_MODE_TRUE
+ AC_SUBST([MAINT])dnl
+]
+)
diff --git a/m4/make.m4 b/m4/make.m4
new file mode 100644
index 000000000..d62dcfb22
--- /dev/null
+++ b/m4/make.m4
@@ -0,0 +1,42 @@
+# Check to see how 'make' treats includes. -*- Autoconf -*-
+
+# Copyright (C) 2001-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check whether make has an 'include' directive that can support all
+# the idioms we need for our automatic dependency tracking code.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive])
+cat > confinc.mk << 'END'
+am__doit:
+ @echo this is the am__doit target >confinc.out
+.PHONY: am__doit
+END
+am__include="#"
+am__quote=
+# BSD make does it like this.
+echo '.include "confinc.mk" # ignored' > confmf.BSD
+# Other make implementations (GNU, Solaris 10, AIX) do it like this.
+echo 'include confinc.mk # ignored' > confmf.GNU
+_am_result=no
+for s in GNU BSD; do
+ AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out])
+ AS_CASE([$?:`cat confinc.out 2>/dev/null`],
+ ['0:this is the am__doit target'],
+ [AS_CASE([$s],
+ [BSD], [am__include='.include' am__quote='"'],
+ [am__include='include' am__quote=''])])
+ if test "$am__include" != "#"; then
+ _am_result="yes ($s style)"
+ break
+ fi
+done
+rm -f confinc.* confmf.*
+AC_MSG_RESULT([${_am_result}])
+AC_SUBST([am__include])])
+AC_SUBST([am__quote])])
diff --git a/m4/missing.m4 b/m4/missing.m4
new file mode 100644
index 000000000..20be2a5e4
--- /dev/null
+++ b/m4/missing.m4
@@ -0,0 +1,38 @@
+# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
+
+# Copyright (C) 1997-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it is modern enough.
+# If it is, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+if test x"${MISSING+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+ *)
+ MISSING="\${SHELL} $am_aux_dir/missing" ;;
+ esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --is-lightweight"; then
+ am_missing_run="$MISSING "
+else
+ am_missing_run=
+ AC_MSG_WARN(['missing' script is too old or missing])
+fi
+])
diff --git a/m4/mkdirp.m4 b/m4/mkdirp.m4
new file mode 100644
index 000000000..511f52675
--- /dev/null
+++ b/m4/mkdirp.m4
@@ -0,0 +1,32 @@
+## -*- Autoconf -*-
+# Copyright (C) 2003-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check for 'mkdir -p'.
+AC_DEFUN([AM_PROG_MKDIR_P],
+[AC_PREREQ([2.60])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+dnl FIXME we are no longer going to remove this! adjust warning
+dnl FIXME message accordingly.
+AC_DIAGNOSE([obsolete],
+[$0: this macro is deprecated, and will soon be removed.
+You should use the Autoconf-provided 'AC][_PROG_MKDIR_P' macro instead,
+and use '$(MKDIR_P)' instead of '$(mkdir_p)'in your Makefile.am files.])
+dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P,
+dnl while keeping a definition of mkdir_p for backward compatibility.
+dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
+dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
+dnl Makefile.ins that do not define MKDIR_P, so we do our own
+dnl adjustment using top_builddir (which is defined more often than
+dnl MKDIR_P).
+AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+case $mkdir_p in
+ [[\\/$]]* | ?:[[\\/]]*) ;;
+ */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+])
diff --git a/m4/obsolete.m4 b/m4/obsolete.m4
new file mode 100644
index 000000000..46e067d89
--- /dev/null
+++ b/m4/obsolete.m4
@@ -0,0 +1,28 @@
+# -*- Autoconf -*-
+# Obsolete and "removed" macros, that must however still report explicit
+# error messages when used, to smooth transition.
+#
+# Copyright (C) 1996-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([AM_CONFIG_HEADER],
+[AC_DIAGNOSE([obsolete],
+['$0': this macro is obsolete.
+You should use the 'AC][_CONFIG_HEADERS' macro instead.])dnl
+AC_CONFIG_HEADERS($@)])
+
+AC_DEFUN([AM_PROG_CC_STDC],
+[AC_PROG_CC
+am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc
+AC_DIAGNOSE([obsolete],
+['$0': this macro is obsolete.
+You should simply use the 'AC][_PROG_CC' macro instead.
+Also, your code should no longer depend upon 'am_cv_prog_cc_stdc',
+but upon 'ac_cv_prog_cc_stdc'.])])
+
+AC_DEFUN([AM_C_PROTOTYPES],
+ [AC_FATAL([automatic de-ANSI-fication support has been removed])])
+AU_DEFUN([fp_C_PROTOTYPES], [AM_C_PROTOTYPES])
diff --git a/m4/options.m4 b/m4/options.m4
new file mode 100644
index 000000000..45cfa546a
--- /dev/null
+++ b/m4/options.m4
@@ -0,0 +1,30 @@
+# Helper functions for option handling. -*- Autoconf -*-
+
+# Copyright (C) 2001-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# --------------------
+# Set option NAME. Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), [1])])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
diff --git a/m4/prog-cc-c-o.m4 b/m4/prog-cc-c-o.m4
new file mode 100644
index 000000000..c366078f5
--- /dev/null
+++ b/m4/prog-cc-c-o.m4
@@ -0,0 +1,47 @@
+## -*- Autoconf -*-
+# Copyright (C) 1999-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_PROG_CC_C_O
+# ---------------
+# Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC
+# to automatically call this.
+AC_DEFUN([_AM_PROG_CC_C_O],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([compile])dnl
+AC_LANG_PUSH([C])dnl
+AC_CACHE_CHECK(
+ [whether $CC understands -c and -o together],
+ [am_cv_prog_cc_c_o],
+ [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])])
+ # Make sure it works both with $CC and with simple cc.
+ # Following AC_PROG_CC_C_O, we do the test twice because some
+ # compilers refuse to overwrite an existing .o file with -o,
+ # though they will create one.
+ am_cv_prog_cc_c_o=yes
+ for am_i in 1 2; do
+ if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \
+ && test -f conftest2.$ac_objext; then
+ : OK
+ else
+ am_cv_prog_cc_c_o=no
+ break
+ fi
+ done
+ rm -f core conftest*
+ unset am_i])
+if test "$am_cv_prog_cc_c_o" != yes; then
+ # Losing compiler, so override with the script.
+ # FIXME: It is wrong to rewrite CC.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__CC in this case,
+ # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+ CC="$am_aux_dir/compile $CC"
+fi
+AC_LANG_POP([C])])
+
+# For backward compatibility.
+AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
diff --git a/m4/python.m4 b/m4/python.m4
new file mode 100644
index 000000000..bd66aae46
--- /dev/null
+++ b/m4/python.m4
@@ -0,0 +1,241 @@
+## ------------------------ -*- Autoconf -*-
+## Python file handling
+## From Andrew Dalke
+## Updated by James Henstridge
+## ------------------------
+# Copyright (C) 1999-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+
+# AM_PATH_PYTHON([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+# ---------------------------------------------------------------------------
+# Adds support for distributing Python modules and packages. To
+# install modules, copy them to $(pythondir), using the python_PYTHON
+# automake variable. To install a package with the same name as the
+# automake package, install to $(pkgpythondir), or use the
+# pkgpython_PYTHON automake variable.
+#
+# The variables $(pyexecdir) and $(pkgpyexecdir) are provided as
+# locations to install python extension modules (shared libraries).
+# Another macro is required to find the appropriate flags to compile
+# extension modules.
+#
+# If your package is configured with a different prefix to python,
+# users will have to add the install directory to the PYTHONPATH
+# environment variable, or create a .pth file (see the python
+# documentation for details).
+#
+# If the MINIMUM-VERSION argument is passed, AM_PATH_PYTHON will
+# cause an error if the version of python installed on the system
+# doesn't meet the requirement. MINIMUM-VERSION should consist of
+# numbers and dots only.
+AC_DEFUN([AM_PATH_PYTHON],
+ [
+ dnl Find a Python interpreter. Python versions prior to 2.0 are not
+ dnl supported. (2.0 was released on October 16, 2000).
+ dnl FIXME: Remove the need to hard-code Python versions here.
+ m4_define_default([_AM_PYTHON_INTERPRETER_LIST],
+[python python2 python3 python3.6 python3.5 python3.4 python3.3 python3.2 dnl
+ python3.1 python3.0 python2.7 python2.6 python2.5 python2.4 python2.3 dnl
+ python2.2 python2.1 python2.0])
+
+ AC_ARG_VAR([PYTHON], [the Python interpreter])
+
+ m4_if([$1],[],[
+ dnl No version check is needed.
+ # Find any Python interpreter.
+ if test -z "$PYTHON"; then
+ AC_PATH_PROGS([PYTHON], _AM_PYTHON_INTERPRETER_LIST, :)
+ fi
+ am_display_PYTHON=python
+ ], [
+ dnl A version check is needed.
+ if test -n "$PYTHON"; then
+ # If the user set $PYTHON, use it and don't search something else.
+ AC_MSG_CHECKING([whether $PYTHON version is >= $1])
+ AM_PYTHON_CHECK_VERSION([$PYTHON], [$1],
+ [AC_MSG_RESULT([yes])],
+ [AC_MSG_RESULT([no])
+ AC_MSG_ERROR([Python interpreter is too old])])
+ am_display_PYTHON=$PYTHON
+ else
+ # Otherwise, try each interpreter until we find one that satisfies
+ # VERSION.
+ AC_CACHE_CHECK([for a Python interpreter with version >= $1],
+ [am_cv_pathless_PYTHON],[
+ for am_cv_pathless_PYTHON in _AM_PYTHON_INTERPRETER_LIST none; do
+ test "$am_cv_pathless_PYTHON" = none && break
+ AM_PYTHON_CHECK_VERSION([$am_cv_pathless_PYTHON], [$1], [break])
+ done])
+ # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON.
+ if test "$am_cv_pathless_PYTHON" = none; then
+ PYTHON=:
+ else
+ AC_PATH_PROG([PYTHON], [$am_cv_pathless_PYTHON])
+ fi
+ am_display_PYTHON=$am_cv_pathless_PYTHON
+ fi
+ ])
+
+ if test "$PYTHON" = :; then
+ dnl Run any user-specified action, or abort.
+ m4_default([$3], [AC_MSG_ERROR([no suitable Python interpreter found])])
+ else
+
+ dnl Query Python for its version number. Getting [:3] seems to be
+ dnl the best way to do this; it's what "site.py" does in the standard
+ dnl library.
+
+ AC_CACHE_CHECK([for $am_display_PYTHON version], [am_cv_python_version],
+ [am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[[:3]])"`])
+ AC_SUBST([PYTHON_VERSION], [$am_cv_python_version])
+
+ dnl Use the values of $prefix and $exec_prefix for the corresponding
+ dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX. These are made
+ dnl distinct variables so they can be overridden if need be. However,
+ dnl general consensus is that you shouldn't need this ability.
+
+ AC_SUBST([PYTHON_PREFIX], ['${prefix}'])
+ AC_SUBST([PYTHON_EXEC_PREFIX], ['${exec_prefix}'])
+
+ dnl At times (like when building shared libraries) you may want
+ dnl to know which OS platform Python thinks this is.
+
+ AC_CACHE_CHECK([for $am_display_PYTHON platform], [am_cv_python_platform],
+ [am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"`])
+ AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform])
+
+ # Just factor out some code duplication.
+ am_python_setup_sysconfig="\
+import sys
+# Prefer sysconfig over distutils.sysconfig, for better compatibility
+# with python 3.x. See automake bug#10227.
+try:
+ import sysconfig
+except ImportError:
+ can_use_sysconfig = 0
+else:
+ can_use_sysconfig = 1
+# Can't use sysconfig in CPython 2.7, since it's broken in virtualenvs:
+# <https://github.com/pypa/virtualenv/issues/118>
+try:
+ from platform import python_implementation
+ if python_implementation() == 'CPython' and sys.version[[:3]] == '2.7':
+ can_use_sysconfig = 0
+except ImportError:
+ pass"
+
+ dnl Set up 4 directories:
+
+ dnl pythondir -- where to install python scripts. This is the
+ dnl site-packages directory, not the python standard library
+ dnl directory like in previous automake betas. This behavior
+ dnl is more consistent with lispdir.m4 for example.
+ dnl Query distutils for this directory.
+ AC_CACHE_CHECK([for $am_display_PYTHON script directory],
+ [am_cv_python_pythondir],
+ [if test "x$prefix" = xNONE
+ then
+ am_py_prefix=$ac_default_prefix
+ else
+ am_py_prefix=$prefix
+ fi
+ am_cv_python_pythondir=`$PYTHON -c "
+$am_python_setup_sysconfig
+if can_use_sysconfig:
+ sitedir = sysconfig.get_path('purelib', vars={'base':'$am_py_prefix'})
+else:
+ from distutils import sysconfig
+ sitedir = sysconfig.get_python_lib(0, 0, prefix='$am_py_prefix')
+sys.stdout.write(sitedir)"`
+ case $am_cv_python_pythondir in
+ $am_py_prefix*)
+ am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'`
+ am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"`
+ ;;
+ *)
+ case $am_py_prefix in
+ /usr|/System*) ;;
+ *)
+ am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages
+ ;;
+ esac
+ ;;
+ esac
+ ])
+ AC_SUBST([pythondir], [$am_cv_python_pythondir])
+
+ dnl pkgpythondir -- $PACKAGE directory under pythondir. Was
+ dnl PYTHON_SITE_PACKAGE in previous betas, but this naming is
+ dnl more consistent with the rest of automake.
+
+ AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE])
+
+ dnl pyexecdir -- directory for installing python extension modules
+ dnl (shared libraries)
+ dnl Query distutils for this directory.
+ AC_CACHE_CHECK([for $am_display_PYTHON extension module directory],
+ [am_cv_python_pyexecdir],
+ [if test "x$exec_prefix" = xNONE
+ then
+ am_py_exec_prefix=$am_py_prefix
+ else
+ am_py_exec_prefix=$exec_prefix
+ fi
+ am_cv_python_pyexecdir=`$PYTHON -c "
+$am_python_setup_sysconfig
+if can_use_sysconfig:
+ sitedir = sysconfig.get_path('platlib', vars={'platbase':'$am_py_prefix'})
+else:
+ from distutils import sysconfig
+ sitedir = sysconfig.get_python_lib(1, 0, prefix='$am_py_prefix')
+sys.stdout.write(sitedir)"`
+ case $am_cv_python_pyexecdir in
+ $am_py_exec_prefix*)
+ am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'`
+ am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"`
+ ;;
+ *)
+ case $am_py_exec_prefix in
+ /usr|/System*) ;;
+ *)
+ am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages
+ ;;
+ esac
+ ;;
+ esac
+ ])
+ AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir])
+
+ dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE)
+
+ AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE])
+
+ dnl Run any user-specified action.
+ $2
+ fi
+
+])
+
+
+# AM_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
+# ---------------------------------------------------------------------------
+# Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION.
+# Run ACTION-IF-FALSE otherwise.
+# This test uses sys.hexversion instead of the string equivalent (first
+# word of sys.version), in order to cope with versions such as 2.2c1.
+# This supports Python 2.0 or higher. (2.0 was released on October 16, 2000).
+AC_DEFUN([AM_PYTHON_CHECK_VERSION],
+ [prog="import sys
+# split strings by '.' and convert to numeric. Append some zeros
+# because we need at least 4 digits for the hex conversion.
+# map returns an iterator in Python 3.0 and a list in 2.x
+minver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]]
+minverhex = 0
+# xrange is not present in Python 3.0 and range returns an iterator
+for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[[i]]
+sys.exit(sys.hexversion < minverhex)"
+ AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])])
diff --git a/m4/runlog.m4 b/m4/runlog.m4
new file mode 100644
index 000000000..a56b02757
--- /dev/null
+++ b/m4/runlog.m4
@@ -0,0 +1,17 @@
+## -*- Autoconf -*-
+# Copyright (C) 2001-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_RUN_LOG(COMMAND)
+# -------------------
+# Run COMMAND, save the exit status in ac_status, and log it.
+# (This has been adapted from Autoconf's _AC_RUN_LOG macro.)
+AC_DEFUN([AM_RUN_LOG],
+[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD
+ ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ (exit $ac_status); }])
diff --git a/m4/sanity.m4 b/m4/sanity.m4
new file mode 100644
index 000000000..2dbdd213a
--- /dev/null
+++ b/m4/sanity.m4
@@ -0,0 +1,82 @@
+# Check to make sure that the build environment is sane. -*- Autoconf -*-
+
+# Copyright (C) 1996-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[[\\\"\#\$\&\'\`$am_lf]]*)
+ AC_MSG_ERROR([unsafe absolute working directory name]);;
+esac
+case $srcdir in
+ *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*)
+ AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);;
+esac
+
+# Do 'set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ am_has_slept=no
+ for am_try in 1 2; do
+ echo "timestamp, slept: $am_has_slept" > conftest.file
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$[*]" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ if test "$[*]" != "X $srcdir/configure conftest.file" \
+ && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
+ alias in your environment])
+ fi
+ if test "$[2]" = conftest.file || test $am_try -eq 2; then
+ break
+ fi
+ # Just in case.
+ sleep 1
+ am_has_slept=yes
+ done
+ test "$[2]" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT([yes])
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+ ( sleep 1 ) &
+ am_sleep_pid=$!
+fi
+AC_CONFIG_COMMANDS_PRE(
+ [AC_MSG_CHECKING([that generated files are newer than configure])
+ if test -n "$am_sleep_pid"; then
+ # Hide warnings about reused PIDs.
+ wait $am_sleep_pid 2>/dev/null
+ fi
+ AC_MSG_RESULT([done])])
+rm -f conftest.file
+])
diff --git a/m4/silent.m4 b/m4/silent.m4
new file mode 100644
index 000000000..6549ae39f
--- /dev/null
+++ b/m4/silent.m4
@@ -0,0 +1,60 @@
+## -*- Autoconf -*-
+# Copyright (C) 2009-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_SILENT_RULES([DEFAULT])
+# --------------------------
+# Enable less verbose build rules; with the default set to DEFAULT
+# ("yes" being less verbose, "no" or empty being verbose).
+AC_DEFUN([AM_SILENT_RULES],
+[AC_ARG_ENABLE([silent-rules], [dnl
+AS_HELP_STRING(
+ [--enable-silent-rules],
+ [less verbose build output (undo: "make V=1")])
+AS_HELP_STRING(
+ [--disable-silent-rules],
+ [verbose build output (undo: "make V=0")])dnl
+])
+case $enable_silent_rules in @%:@ (((
+ yes) AM_DEFAULT_VERBOSITY=0;;
+ no) AM_DEFAULT_VERBOSITY=1;;
+ *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;
+esac
+dnl
+dnl A few 'make' implementations (e.g., NonStop OS and NextStep)
+dnl do not support nested variable expansions.
+dnl See automake bug#9928 and bug#10237.
+am_make=${MAKE-make}
+AC_CACHE_CHECK([whether $am_make supports nested variables],
+ [am_cv_make_support_nested_variables],
+ [if AS_ECHO([['TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+ @$(TRUE)
+.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then
+ am_cv_make_support_nested_variables=yes
+else
+ am_cv_make_support_nested_variables=no
+fi])
+if test $am_cv_make_support_nested_variables = yes; then
+ dnl Using '$V' instead of '$(V)' breaks IRIX make.
+ AM_V='$(V)'
+ AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+ AM_V=$AM_DEFAULT_VERBOSITY
+ AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AC_SUBST([AM_V])dnl
+AM_SUBST_NOTMAKE([AM_V])dnl
+AC_SUBST([AM_DEFAULT_V])dnl
+AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl
+AC_SUBST([AM_DEFAULT_VERBOSITY])dnl
+AM_BACKSLASH='\'
+AC_SUBST([AM_BACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
+])
diff --git a/m4/strip.m4 b/m4/strip.m4
new file mode 100644
index 000000000..23b822006
--- /dev/null
+++ b/m4/strip.m4
@@ -0,0 +1,28 @@
+## -*- Autoconf -*-
+# Copyright (C) 2001-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor 'install' (even GNU) is that you can't
+# specify the program used to strip binaries. This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in "make install-strip", and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip". However 'strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the 'STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be 'maybe'.
+if test "$cross_compiling" != no; then
+ AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
diff --git a/m4/substnot.m4 b/m4/substnot.m4
new file mode 100644
index 000000000..f781aa0b8
--- /dev/null
+++ b/m4/substnot.m4
@@ -0,0 +1,17 @@
+## -*- Autoconf -*-
+# Copyright (C) 2006-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# AM_SUBST_NOTMAKE(VARIABLE)
+# --------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
diff --git a/m4/tar.m4 b/m4/tar.m4
new file mode 100644
index 000000000..ba4704f47
--- /dev/null
+++ b/m4/tar.m4
@@ -0,0 +1,132 @@
+# Check how to create a tarball. -*- Autoconf -*-
+
+# Copyright (C) 2004-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of 'v7', 'ustar', or 'pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+# tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+# $(am__untar) < result.tar
+#
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility. Yes, it's still used
+# in the wild :-( We should find a proper way to deprecate it ...
+AC_SUBST([AMTAR], ['$${TAR-tar}'])
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+
+m4_if([$1], [v7],
+ [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
+
+ [m4_case([$1],
+ [ustar],
+ [# The POSIX 1988 'ustar' format is defined with fixed-size fields.
+ # There is notably a 21 bits limit for the UID and the GID. In fact,
+ # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343
+ # and bug#13588).
+ am_max_uid=2097151 # 2^21 - 1
+ am_max_gid=$am_max_uid
+ # The $UID and $GID variables are not portable, so we need to resort
+ # to the POSIX-mandated id(1) utility. Errors in the 'id' calls
+ # below are definitely unexpected, so allow the users to see them
+ # (that is, avoid stderr redirection).
+ am_uid=`id -u || echo unknown`
+ am_gid=`id -g || echo unknown`
+ AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format])
+ if test $am_uid -le $am_max_uid; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ _am_tools=none
+ fi
+ AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format])
+ if test $am_gid -le $am_max_gid; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ _am_tools=none
+ fi],
+
+ [pax],
+ [],
+
+ [m4_fatal([Unknown tar format])])
+
+ AC_MSG_CHECKING([how to create a $1 tar archive])
+
+ # Go ahead even if we have the value already cached. We do so because we
+ # need to set the values for the 'am__tar' and 'am__untar' variables.
+ _am_tools=${am_cv_prog_tar_$1-$_am_tools}
+
+ for _am_tool in $_am_tools; do
+ case $_am_tool in
+ gnutar)
+ for _am_tar in tar gnutar gtar; do
+ AM_RUN_LOG([$_am_tar --version]) && break
+ done
+ am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+ am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+ am__untar="$_am_tar -xf -"
+ ;;
+ plaintar)
+ # Must skip GNU tar: if it does not support --format= it doesn't create
+ # ustar tarball either.
+ (tar --version) >/dev/null 2>&1 && continue
+ am__tar='tar chf - "$$tardir"'
+ am__tar_='tar chf - "$tardir"'
+ am__untar='tar xf -'
+ ;;
+ pax)
+ am__tar='pax -L -x $1 -w "$$tardir"'
+ am__tar_='pax -L -x $1 -w "$tardir"'
+ am__untar='pax -r'
+ ;;
+ cpio)
+ am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+ am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+ am__untar='cpio -i -H $1 -d'
+ ;;
+ none)
+ am__tar=false
+ am__tar_=false
+ am__untar=false
+ ;;
+ esac
+
+ # If the value was cached, stop now. We just wanted to have am__tar
+ # and am__untar set.
+ test -n "${am_cv_prog_tar_$1}" && break
+
+ # tar/untar a dummy directory, and stop if the command works.
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ echo GrepMe > conftest.dir/file
+ AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+ rm -rf conftest.dir
+ if test -s conftest.tar; then
+ AM_RUN_LOG([$am__untar <conftest.tar])
+ AM_RUN_LOG([cat conftest.dir/file])
+ grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+ fi
+ done
+ rm -rf conftest.dir
+
+ AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+ AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
diff --git a/m4/upc.m4 b/m4/upc.m4
new file mode 100644
index 000000000..60e05ff1b
--- /dev/null
+++ b/m4/upc.m4
@@ -0,0 +1,20 @@
+# Find a compiler for Unified Parallel C. -*- Autoconf -*-
+
+# Copyright (C) 2006-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([AM_PROG_UPC],
+[dnl We need OBJEXT and EXEEXT, but Autoconf doesn't offer any public
+dnl macro to compute them. Use AC_PROG_CC instead.
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_ARG_VAR([UPC], [Unified Parallel C compiler command])dnl
+AC_ARG_VAR([UPCFLAGS], [Unified Parallel C compiler flags])dnl
+AC_CHECK_TOOLS([UPC], [m4_default([$1], [upcc upc])], [:])
+if test "$UPC" = :; then
+ AC_MSG_ERROR([no Unified Parallel C compiler was found], [77])
+fi
+_AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES([UPC])])dnl
+])
diff --git a/m4/vala.m4 b/m4/vala.m4
new file mode 100644
index 000000000..8b742d1c5
--- /dev/null
+++ b/m4/vala.m4
@@ -0,0 +1,37 @@
+# Autoconf support for the Vala compiler
+
+# Copyright (C) 2008-2017 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# Check whether the Vala compiler exists in $PATH. If it is found, the
+# variable VALAC is set pointing to its absolute path. Otherwise, it is
+# simply set to 'valac'.
+# Optionally a minimum release number of the compiler can be requested.
+# If the ACTION-IF-FOUND parameter is given, it will be run if a proper
+# Vala compiler is found.
+# Similarly, if the ACTION-IF-FOUND is given, it will be run if no proper
+# Vala compiler is found. It defaults to simply print a warning about the
+# situation, but otherwise proceeding with the configuration.
+#
+# AM_PROG_VALAC([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+# --------------------------------------------------------------------------
+AC_DEFUN([AM_PROG_VALAC],
+ [AC_PATH_PROG([VALAC], [valac], [valac])
+ AS_IF([test "$VALAC" != valac && test -n "$1"],
+ [AC_MSG_CHECKING([whether $VALAC is at least version $1])
+ am__vala_version=`$VALAC --version | sed 's/Vala *//'`
+ AS_VERSION_COMPARE([$1], ["$am__vala_version"],
+ [AC_MSG_RESULT([yes])],
+ [AC_MSG_RESULT([yes])],
+ [AC_MSG_RESULT([no])
+ VALAC=valac])])
+ if test "$VALAC" = valac; then
+ m4_default([$3],
+ [AC_MSG_WARN([no proper vala compiler found])
+ AC_MSG_WARN([you will not be able to compile vala source files])])
+ else
+ m4_default([$2], [:])
+ fi])
diff --git a/maintainer/am-ft b/maintainer/am-ft
new file mode 100755
index 000000000..48eb5ba54
--- /dev/null
+++ b/maintainer/am-ft
@@ -0,0 +1,131 @@
+#!/usr/bin/env bash
+# Remote testing of Automake tarballs made easy.
+# This script requires Bash 4.x or later.
+
+# Copyright (C) 2013-2017 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 <https://www.gnu.org/licenses/>.
+
+# TODO: some documentation would be nice ...
+
+set -u
+me=${0##*/}
+
+fatal () { echo "$me: $*" >&2; exit 1; }
+
+cmd='
+ test_script=$HOME/.am-test/run
+ if test -f "$test_script" && test -x "$test_script"; then
+ "$test_script" "$@"
+ else
+ nice -n19 ./configure && nice -n19 make -j10 check
+ fi
+'
+
+remote=
+interactive=1
+maybe_sleep=:
+while test $# -gt 0; do
+ case $1 in
+ -b|--batch) interactive=0;;
+ -c|--command) cmd=${2-}; shift;;
+ # Useful to avoid spurious errors due to skewed clocks between
+ # the system where the tarball is built and the target system.
+ -S|--sleep) maybe_sleep="sleep ${2-}"; shift;;
+ -*) fatal "'$1': invalid option";;
+ *) remote=$1; shift; break;;
+ esac
+ shift
+done
+[[ -n $remote ]] || fatal "no remote given"
+
+if ((interactive)); then
+ do_on_error='{
+ AM_TESTSUITE_FAILED=yes
+ export AM_TESTSUITE_FAILED
+ # We should not modify the environment with which the failed
+ # tests have run, hence do not read ".profile", ".bashrc", and
+ # company.
+ exec bash --noprofile --norc -i
+ }'
+else
+ do_on_error='exit $?'
+fi
+
+tarball=$(echo automake*.tar.xz)
+
+case $tarball in
+ *' '*) fatal "too many automake tarballs: $tarball";;
+esac
+
+test -f $tarball || fatal "no automake tarball found"
+
+distdir=${tarball%%.tar.xz}
+
+env='PATH=$HOME/bin:$PATH'
+if test -t 1; then
+ env+=" TERM='$TERM' AM_COLOR_TESTS=always"
+fi
+
+# This is tempting:
+# $ ssh "command" arg-1 ... arg-2
+# but doesn't work as expected. So we need the following hack
+# to propagate the command line arguments to the remote shell.
+quoted_args=--
+while (($# > 0)); do
+ case $1 in
+ *\'*) quoted_args+=" "$(printf '%s\n' "$1" | sed "s/'/'\\''/g");;
+ *) quoted_args+=" '$1'";;
+ esac
+ shift
+done
+
+set -e
+set -x
+
+scp $tarball $remote:tmp/
+
+$maybe_sleep
+
+# Multiple '-t' to force tty allocation.
+ssh -t -t $remote "
+ set -x; set -e; set -u;
+ set $quoted_args
+ cd tmp
+ if test -e $distdir; then
+ # Use 'perl', not only 'rm -rf', to correctly handle read-only
+ # files or directory. Fall back to 'rm' if something goes awry.
+ perl -e 'use File::Path qw/rmtree/; rmtree(\"$distdir\")' \
+ || rm -rf $distdir || exit 1
+ test ! -e $distdir
+ fi
+ export $env
+ "'
+ am_extra_acdir=$HOME/.am-test/extra-aclocal
+ am_extra_bindir=$HOME/.am-test/extra-bin
+ am_extra_setup=$HOME/.am-test/extra-setup.sh
+ if test -d "$am_extra_acdir"; then
+ export ACLOCAL_PATH=$am_extra_acdir${ACLOCAL_PATH+":$ACLOCAL_PATH"}
+ fi
+ if test -d "$am_extra_bindir"; then
+ export PATH=$am_extra_bindir:$PATH
+ fi
+ '"
+ xz -dc $tarball | tar xf -
+ cd $distdir
+ if test -f \"\$am_extra_setup\"; then
+ . \"\$am_extra_setup\"
+ fi
+ ($cmd) || $do_on_error
+"
diff --git a/maintainer/am-xft b/maintainer/am-xft
new file mode 100755
index 000000000..958a21a96
--- /dev/null
+++ b/maintainer/am-xft
@@ -0,0 +1,18 @@
+#!/bin/sh
+# Copyright (C) 2013-2017 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 <https://www.gnu.org/licenses/>.
+
+MAKE=${MAKE-make} GIT=${GIT-git}
+$GIT clean -fdx && $MAKE bootstrap && $MAKE dist && exec am-ft "$@"
diff --git a/maintainer/check-perl-protos b/maintainer/check-perl-protos
new file mode 100755
index 000000000..649aafb34
--- /dev/null
+++ b/maintainer/check-perl-protos
@@ -0,0 +1,50 @@
+#!/usr/bin/env perl
+#
+# Copyright (C) 2017 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 3, 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 <https://www.gnu.org/licenses/>.
+
+use warnings;
+use strict;
+
+my @lines = <>;
+my %forwards = map { /^sub (\w+)\s*\((.*)\);$/ ? ("$1" => "$2") : () } @lines;
+my %subs = map { /^sub (\w+)\s*\((.*)\)$/ ? ("$1" => "$2") : () } @lines;
+my $error_count = 0;
+
+# $subs{"foo"} = "$$";
+# $subs{"bar"} = "@";
+# $forwards{"bar"} = "\$";
+
+# Check that every subroutine has a matching forward declaration with
+# the same prototype.
+foreach my $sub (keys (%subs))
+ {
+ # XXX: The location of the subroutine is not reported.
+ if (grep { $sub eq $_ } keys (%forwards))
+ {
+ if ($forwards{$sub} ne $subs{$sub})
+ {
+ $error_count += 1;
+ warn ("prototype mismatch for \"$sub\" subroutine\n");
+ }
+ }
+ else
+ {
+ $error_count += 1;
+ warn ("missing prototype for \"$sub\" subroutine\n");
+ }
+ }
+
+exit (($error_count == 0) ? 0 : 1);
diff --git a/maintainer/maint.mk b/maintainer/maint.mk
new file mode 100644
index 000000000..51907193c
--- /dev/null
+++ b/maintainer/maint.mk
@@ -0,0 +1,658 @@
+# Maintainer makefile rules for Automake.
+#
+# Copyright (C) 1995-2017 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 <https://www.gnu.org/licenses/>.
+
+# Avoid CDPATH issues.
+unexport CDPATH
+
+# Program to use to fetch files from the Net.
+WGET = wget
+
+# --------------------------------------------------------- #
+# Automatic generation of the ChangeLog from git history. #
+# --------------------------------------------------------- #
+
+gitlog_to_changelog_command = $(PERL) $(srcdir)/lib/gitlog-to-changelog
+gitlog_to_changelog_fixes = $(srcdir)/.git-log-fix
+gitlog_to_changelog_options = --amend=$(gitlog_to_changelog_fixes) \
+ --since='2011-12-28 00:00:00' \
+ --no-cluster --format '%s%n%n%b'
+
+EXTRA_DIST += lib/gitlog-to-changelog
+EXTRA_DIST += $(gitlog_to_changelog_fixes)
+
+# When executed from a git checkout, generate the ChangeLog from the git
+# history. When executed from an extracted distribution tarball, just
+# copy the distributed ChangeLog in the build directory (and if this
+# fails, or if no distributed ChangeLog file is present, complain and
+# give an error).
+#
+# The ChangeLog should be regenerated unconditionally when working from
+# checked-out sources; otherwise, if we're working from a distribution
+# tarball, we expect the ChangeLog to be distributed, so check that it
+# is indeed present in the source directory.
+ChangeLog:
+ $(AM_V_GEN)set -e; set -u; \
+ if test -d $(srcdir)/.git; then \
+ rm -f $@-t \
+ && $(gitlog_to_changelog_command) \
+ $(gitlog_to_changelog_options) >$@-t \
+ && chmod a-w $@-t \
+ && mv -f $@-t $@ \
+ || exit 1; \
+ elif test ! -f $(srcdir)/$@; then \
+ echo "Source tree is not a git checkout, and no pre-existent" \
+ "$@ file has been found there" >&2; \
+ exit 1; \
+ fi
+.PHONY: ChangeLog
+
+
+# --------------------------- #
+# 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
+
+check-coverage-run recheck-coverage-run: %-coverage-run: all
+ $(MKDIR_P) $(PERL_COVERAGE_DB)
+ PERL5OPT="$$PERL5OPT $(PERL_COVERAGE_FLAGS)"; export PERL5OPT; \
+ WANT_NO_THREADS=yes; export WANT_NO_THREADS; unset AUTOMAKE_JOBS; \
+ $(MAKE) $*
+
+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)"
+
+# 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) check-coverage-report
+
+recheck-coverage: recheck-coverage-run
+ $(MAKE) check-coverage-report
+
+clean-coverage:
+ rm -rf "$(PERL_COVERAGE_DB)"
+clean-local: clean-coverage
+
+.PHONY: check-coverage recheck-coverage check-coverage-run \
+ recheck-coverage-run check-coverage-report clean-coverage
+
+
+# ---------------------------------------------------- #
+# Tagging and/or uploading stable and beta releases. #
+# ---------------------------------------------------- #
+
+GIT = git
+
+EXTRA_DIST += lib/gnupload
+
+# First component of a version number (mandatory).
+rx-0 = ^[1-9][0-9]*
+# Later components of a version number (optional).
+rx-1 = \.[0-9][0-9]*
+# Used in recipes to decide which kind of release we are.
+stable_major_version_rx = $(rx-0)\.0$$
+stable_minor_version_rx = $(rx-0)$(rx-1)$$
+stable_micro_version_rx = $(rx-0)$(rx-1)$(rx-1)$$
+beta_version_rx = $(rx-0)($(rx-1)){1,2}[bdfhjlnprtvxz]$$
+alpha_version_rx = $(rx-0)($(rx-1)){1,2}[acegikmoqsuwy]$$
+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 \
+ || { echo "$@: you have uncommitted or unstaged changes" >&2; exit 1; }
+
+determine_release_type = \
+ if $(match_version) '$(stable_major_version_rx)'; then \
+ release_type='Major release'; \
+ announcement_type='major release'; \
+ dest=ftp; \
+ elif $(match_version) '$(stable_minor_version_rx)'; then \
+ release_type='Minor release'; \
+ announcement_type='minor release'; \
+ dest=ftp; \
+ elif $(match_version) '$(stable_micro_version_rx)'; then \
+ release_type='Micro release'; \
+ announcement_type='maintenance release'; \
+ dest=ftp; \
+ elif $(match_version) '$(beta_version_rx)'; then \
+ release_type='Beta release'; \
+ announcement_type='test release'; \
+ dest=alpha; \
+ elif $(match_version) '$(alpha_version_rx)'; then \
+ echo "$@: improper version '$(VERSION)' for a release" >&2; \
+ if test -n '$(strip $(DEVEL_SNAPSHOT))'; then \
+ echo "$@: continuing anyway since DEVEL_SNAPSHOT is set" >&2; \
+ release_type='Development snapshot'; \
+ announcement_type='development snapshot'; \
+ dest=alpha; \
+ else \
+ exit 1; \
+ fi; \
+ else \
+ echo "$@: invalid version number '$(VERSION)'" >&2; \
+ exit 1; \
+ fi
+
+# Help the debugging of $(determine_release_type) and related code.
+print-release-type:
+ @$(determine_release_type); \
+ echo "$$release_type $(VERSION);" \
+ "it will be announced as a \"$$announcement_type\""
+
+git-tag-release: maintainer-check
+ @set -e -u; \
+ case '$(AM_TAG_DRYRUN)' in \
+ ""|[nN]|[nN]o|NO) run="";; \
+ *) run="echo Running:";; \
+ esac; \
+ $(git_must_have_clean_workdir); \
+ $$run $(GIT) tag -s "v$(VERSION)" -m "$(PACKAGE) $(VERSION)"
+
+git-upload-release:
+ @# Check this is a version we can cut a release (either test
+ @# or stable) from.
+ @$(determine_release_type)
+ @# The repository must be clean.
+ @$(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 \
+ || { echo "$@: you can only create a release from a tagged" \
+ "version" >&2; \
+ exit 1; }
+ @# Build the distribution tarball(s).
+ $(MAKE) dist
+ @# Upload it to the correct FTP repository.
+ @$(determine_release_type) \
+ && dest=$$dest.gnu.org:automake \
+ && echo "Will upload to $$dest: $(DIST_ARCHIVES)" \
+ && $(srcdir)/lib/gnupload $(GNUPLOADFLAGS) --to $$dest \
+ $(DIST_ARCHIVES)
+
+.PHONY: print-release-type git-upload-release git-tag-release
+
+
+# ------------------------------------------------------------------ #
+# Explore differences of autogenerated files in different commits. #
+# ------------------------------------------------------------------ #
+
+# Visually comparing differences between the Makefile.in files in
+# automake's own build system as generated in two different branches
+# might help to catch bugs and blunders. This has already happened a
+# few times in the past, when we used to version-control Makefile.in.
+autodiffs:
+ @set -u; \
+ NEW_COMMIT=$${NEW_COMMIT-"HEAD"}; \
+ OLD_COMMIT=$${OLD_COMMIT-"HEAD~1"}; \
+ am_gitdir='$(abs_top_srcdir)/.git'; \
+ get_autofiles_from_rev () \
+ { \
+ rev=$$1 dir=$$2 \
+ && echo "$@: will get files from revision $$rev" \
+ && $(GIT) clone -q --depth 1 "$$am_gitdir" tmp \
+ && cd tmp \
+ && $(GIT) checkout -q "$$rev" \
+ && echo "$@: bootstrapping $$rev" \
+ && $(SHELL) ./bootstrap \
+ && echo "$@: copying files from $$rev" \
+ && makefile_ins=`find . -name Makefile.in` \
+ && (tar cf - configure aclocal.m4 $$makefile_ins) | \
+ (cd .. && cd "$$dir" && tar xf -) \
+ && cd .. \
+ && rm -rf tmp; \
+ }; \
+ outdir=$@.dir \
+ && : Before proceeding, ensure the specified revisions truly exist. \
+ && $(GIT) --git-dir="$$am_gitdir" describe $$OLD_COMMIT >/dev/null \
+ && $(GIT) --git-dir="$$am_gitdir" describe $$NEW_COMMIT >/dev/null \
+ && rm -rf $$outdir \
+ && mkdir $$outdir \
+ && cd $$outdir \
+ && mkdir new old \
+ && get_autofiles_from_rev $$OLD_COMMIT old \
+ && get_autofiles_from_rev $$NEW_COMMIT new \
+ && exit 0
+
+# With lots of eye candy; we like our developers pampered and spoiled :-)
+compare-autodiffs: autodiffs
+ @set -u; \
+ : $${COLORDIFF=colordiff} $${DIFF=diff}; \
+ dir=autodiffs.dir; \
+ if test ! -d "$$dir"; then \
+ echo "$@: $$dir: Not a directory" >&2; \
+ exit 1; \
+ fi; \
+ mydiff=false mypager=false; \
+ if test -t 1; then \
+ if ($$COLORDIFF -r . .) </dev/null >/dev/null 2>&1; then \
+ mydiff=$$COLORDIFF; \
+ mypager="less -R"; \
+ else \
+ mypager=less; \
+ fi; \
+ else \
+ mypager=cat; \
+ fi; \
+ if test "$$mydiff" = false; then \
+ if ($$DIFF -r -u . .); then \
+ mydiff=$$DIFF; \
+ else \
+ echo "$@: no good-enough diff program specified" >&2; \
+ exit 1; \
+ fi; \
+ fi; \
+ st=0; $$mydiff -r -u $$dir/old $$dir/new | $$mypager || st=$$?; \
+ rm -rf $$dir; \
+ exit $$st
+.PHONY: autodiffs compare-autodiffs
+
+# ---------------------------------------------- #
+# Help writing the announcement for a release. #
+# ---------------------------------------------- #
+
+PACKAGE_MAILINGLIST = automake@gnu.org
+
+announcement: DEVEL_SNAPSHOT = yes
+announcement: NEWS
+ $(AM_V_GEN): \
+ && rm -f $@ $@-t \
+ && $(determine_release_type) \
+ && ftp_base="https://$$dest.gnu.org/gnu/$(PACKAGE)" \
+ && X () { printf '%s\n' "$$*" >> $@-t; } \
+ && X "We are pleased to announce the $(PACKAGE_NAME) $(VERSION)" \
+ "$$announcement_type." \
+ && X \
+ && X "**TODO** Brief description of the release here." \
+ && X \
+ && X "**TODO** This description can span multiple paragraphs." \
+ && X \
+ && X "See below for the detailed list of changes since the" \
+ && X "previous version, as summarized by the NEWS file." \
+ && X \
+ && X "Download here:" \
+ && X \
+ && X " $$ftp_base/$(PACKAGE)-$(VERSION).tar.gz" \
+ && X " $$ftp_base/$(PACKAGE)-$(VERSION).tar.xz" \
+ && X \
+ && X "Please report bugs and problems to" \
+ "<$(PACKAGE_BUGREPORT)>," \
+ && X "and send general comments and feedback to" \
+ "<$(PACKAGE_MAILINGLIST)>." \
+ && X \
+ && X "Thanks to everyone who has reported problems, contributed" \
+ && X "patches, and helped testing Automake!" \
+ && X \
+ && X "-*-*-*-" \
+ && X \
+ && $(AWK) '\
+ ($$0 ~ /^New in .*:/) { wait_for_end=1; } \
+ (/^~~~/ && wait_for_end) { print; exit(0) } \
+ { print } \
+ ' <$(srcdir)/NEWS >> $@-t \
+ && mv -f $@-t $@
+.PHONY: announcement
+CLEANFILES += announcement
+
+# --------------------------------------------------------------------- #
+# Synchronize third-party files that are committed in our repository. #
+# --------------------------------------------------------------------- #
+
+# Git repositories on Savannah.
+git-sv-host = git.savannah.gnu.org
+
+# Some repositories we sync files from.
+SV_GIT_CF = 'https://$(git-sv-host)/gitweb/?p=config.git;a=blob_plain;hb=HEAD;f='
+SV_GIT_GL = 'https://$(git-sv-host)/gitweb/?p=gnulib.git;a=blob_plain;hb=HEAD;f='
+
+# Files that we fetch and which we compare against.
+# Note that the 'lib/COPYING' file must still be synced by hand.
+FETCHFILES = \
+ $(SV_GIT_CF)config.guess \
+ $(SV_GIT_CF)config.sub \
+ $(SV_GIT_GL)build-aux/texinfo.tex \
+ $(SV_GIT_GL)build-aux/gendocs.sh \
+ $(SV_GIT_GL)build-aux/gitlog-to-changelog \
+ $(SV_GIT_GL)build-aux/gnupload \
+ $(SV_GIT_GL)build-aux/update-copyright \
+ $(SV_GIT_GL)doc/gendocs_template \
+ $(SV_GIT_GL)doc/INSTALL
+
+# Fetch the latest versions of few scripts and files we care about.
+# A retrieval failure or a copying failure usually mean serious problems,
+# so we'll just bail out if 'wget' or 'cp' fail.
+fetch:
+ $(AM_V_at)rm -rf Fetchdir
+ $(AM_V_at)mkdir Fetchdir
+ $(AM_V_GEN)set -e; \
+ if $(AM_V_P); then wget_opts=; else wget_opts=-nv; fi; \
+ for url in $(FETCHFILES); do \
+ file=`printf '%s\n' "$$url" | sed 's|^.*/||; s|^.*=||'`; \
+ $(WGET) $$wget_opts "$$url" -O Fetchdir/$$file || exit 1; \
+ if cmp Fetchdir/$$file $(srcdir)/lib/$$file >/dev/null; then \
+ : Nothing to do; \
+ else \
+ echo "$@: updating file $$file"; \
+ cp Fetchdir/$$file $(srcdir)/lib/$$file || exit 1; \
+ fi; \
+ done
+ $(AM_V_at)rm -rf Fetchdir
+.PHONY: fetch
+
+# ---------------------------------------------------------------------- #
+# Generate and upload manuals in several formats, for the GNU website. #
+# ---------------------------------------------------------------------- #
+
+web_manual_dir = doc/web-manual
+
+RSYNC = rsync
+CVS = cvs
+CVSU = cvsu
+CVS_USER = $${USER}
+WEBCVS_ROOT = cvs.savannah.gnu.org:/web
+CVS_RSH = ssh
+export CVS_RSH
+
+.PHONY: web-manual web-manual-update
+web-manual web-manual-update: t = $@.dir
+
+# Build manual in several formats. Note to the recipe:
+# 1. The symlinking of automake.texi into the temporary directory is
+# required to pacify extra checks from gendocs.sh.
+# 2. The redirection to /dev/null before the invocation of gendocs.sh
+# is done to better respect silent rules.
+web-manual:
+ $(AM_V_at)rm -rf $(web_manual_dir) $t
+ $(AM_V_at)mkdir $t
+ $(AM_V_at)$(LN_S) '$(abs_srcdir)/doc/$(PACKAGE).texi' '$t/'
+ $(AM_V_GEN)cd $t \
+ && GENDOCS_TEMPLATE_DIR='$(abs_srcdir)/lib' \
+ && export GENDOCS_TEMPLATE_DIR \
+ && if $(AM_V_P); then :; else exec >/dev/null 2>&1; fi \
+ && $(SHELL) '$(abs_srcdir)/lib/gendocs.sh' \
+ -I '$(abs_srcdir)/doc' --email $(PACKAGE_BUGREPORT) \
+ $(PACKAGE) '$(PACKAGE_NAME)'
+ $(AM_V_at)mkdir $(web_manual_dir)
+ $(AM_V_at)mv -f $t/manual/* $(web_manual_dir)
+ $(AM_V_at)rm -rf $t
+ @! $(AM_V_P) || ls -l $(web_manual_dir)
+
+# Upload manual to www.gnu.org, using CVS (sigh!)
+web-manual-update:
+ $(AM_V_at)$(determine_release_type); \
+ case $$release_type in \
+ [Mm]ajor\ release|[Mm]inor\ release|[Mm]icro\ release);; \
+ *) echo "Cannot upload manuals from a \"$$release_type\"" >&2; \
+ exit 1;; \
+ esac
+ $(AM_V_at)test -f $(web_manual_dir)/$(PACKAGE).html || { \
+ echo 'You have to run "$(MAKE) web-manual" before' \
+ 'invoking "$(MAKE) $@"' >&2; \
+ exit 1; \
+ }
+ $(AM_V_at)rm -rf $t
+ $(AM_V_at)mkdir $t
+ $(AM_V_at)cd $t \
+ && $(CVS) -z3 -d :ext:$(CVS_USER)@$(WEBCVS_ROOT)/$(PACKAGE) \
+ co $(PACKAGE)
+ @# According to the rsync manpage, "a trailing slash on the
+ @# source [...] avoids creating an additional directory
+ @# level at the destination". So the trailing '/' after
+ @# '$(web_manual_dir)' below is intended.
+ $(AM_V_at)$(RSYNC) -avP $(web_manual_dir)/ $t/$(PACKAGE)/manual
+ $(AM_V_GEN): \
+ && cd $t/$(PACKAGE)/manual \
+ && new_files=`$(CVSU) --types='?'` \
+ && new_files=`echo "$$new_files" | sed s/^..//` \
+ && { test -z "$$new_files" || $(CVS) add -ko $$new_files; } \
+ && $(CVS) ci -m $(VERSION)
+ $(AM_V_at)rm -rf $t
+.PHONY: web-manual-update
+
+clean-web-manual:
+ $(AM_V_at)rm -rf $(web_manual_dir)
+.PHONY: clean-web-manual
+clean-local: clean-web-manual
+
+EXTRA_DIST += lib/gendocs.sh lib/gendocs_template
+
+# ------------------------------------------------ #
+# Update copyright years of all committed files. #
+# ------------------------------------------------ #
+
+EXTRA_DIST += lib/update-copyright
+
+update_copyright_env = \
+ UPDATE_COPYRIGHT_FORCE=1 \
+ UPDATE_COPYRIGHT_USE_INTERVALS=2
+
+# In addition to the several README files, these as well are
+# not expected to have a copyright notice.
+files_without_copyright = \
+ .autom4te.cfg \
+ .git-log-fix \
+ .gitattributes \
+ .gitignore \
+ INSTALL \
+ COPYING \
+ AUTHORS \
+ THANKS \
+ lib/INSTALL \
+ lib/COPYING
+
+# This script is in the public domain.
+files_without_copyright += lib/mkinstalldirs
+
+# This script has an MIT-style license
+files_without_copyright += lib/install-sh
+
+# The UPDATE_COPYRIGHT_YEAR environment variable is honoured by the
+# 'lib/update-copyright' script.
+.PHONY: update-copyright
+update-copyright:
+ $(AM_V_GEN)set -e; \
+ if test -n "$$UPDATE_COPYRIGHT_YEAR"; then \
+ current_year=$$UPDATE_COPYRIGHT_YEAR; \
+ else \
+ current_year=`date +%Y` && test -n "$$current_year" \
+ || { echo "$@: cannot get current year" >&2; exit 1; }; \
+ fi; \
+ sed -i "/^RELEASE_YEAR=/s/=.*$$/=$$current_year/" \
+ bootstrap configure.ac; \
+ excluded_re=`( \
+ for url in $(FETCHFILES); do echo "$$url"; done \
+ | sed -e 's!^.*/!!' -e 's!^.*=!!' -e 's!^!lib/!' \
+ && for f in $(files_without_copyright); do echo $$f; done \
+ ) | sed -e '$$!s,$$,|,' | tr -d '\012\015'`; \
+ $(GIT) ls-files \
+ | grep -Ev '(^|/)README$$' \
+ | grep -Ev '^PLANS(/|$$)' \
+ | grep -Ev "^($$excluded_re)$$" \
+ | $(update_copyright_env) xargs $(srcdir)/lib/$@
+
+# -------------------------------------------------------------- #
+# Run the testsuite with the least supported autoconf version. #
+# -------------------------------------------------------------- #
+
+gnu-ftp = https://ftp.gnu.org/gnu
+
+# Various shorthands: version, name, package name, tarball name,
+# tarball location, installation directory.
+ac-v = $(required_autoconf_version)
+ac-n = autoconf
+ac-p = $(ac-n)-$(ac-v)
+ac-t = $(ac-p).tar.gz
+ac-l = maintainer/$(ac-t)
+ac-d = maintainer/$(ac-p)
+
+fetch-minimal-autoconf: o = $(ac-l)
+fetch-minimal-autoconf:
+ $(AM_V_at)$(MKDIR_P) $(dir $o)
+ $(AM_V_at)rm -f $o $o-t
+ $(AM_V_GEN)$(WGET) -O $o-t $(gnu-ftp)/$(ac-n)/$(ac-t)
+ $(AM_V_at)chmod a-w $o-t && mv -f $o-t $o && ls -l $o
+.PHONY: fetch-minimal-autoconf
+
+build-minimal-autoconf:
+ $(AM_V_GEN):; \
+ test -f $(ac-l) || { \
+ echo "$@: tarball $(ac-l) seems missing." >&2; \
+ echo "$@: have you run '$(MAKE) fetch-minimal-autoconf'?" >&2; \
+ exit 1; \
+ }; \
+ set -x \
+ && $(PERL) $(srcdir)/t/ax/deltree.pl $(ac-d) \
+ && $(MKDIR_P) $(ac-d) \
+ && cd $(ac-d) \
+ && tar xzf '$(CURDIR)/$(ac-l)' \
+ && mv $(ac-p) src \
+ && mkdir build \
+ && cd build \
+ && env CONFIG_SHELL='$(SHELL)' $(SHELL) ../src/configure \
+ --prefix='$(CURDIR)/$(ac-d)' CONFIG_SHELL='$(SHELL)' \
+ && $(MAKE) install
+ $(AM_V_at)echo ' ======' && $(ac-d)/bin/autoconf --version
+.PHONY: build-minimal-autoconf
+
+check-minimal-autoconf:
+ $(AM_V_at)p='$(ac-d)/bin/autoconf'; \
+ if test ! -f "$$p" || test ! -x "$$p"; then \
+ echo "$@: program '$$p' seems missing." >&2; \
+ echo "$@: have you run '$(MAKE) build-minimal-autoconf'?" >&2; \
+ exit 1; \
+ fi
+ $(AM_V_GEN): \
+ && PATH='$(CURDIR)/$(ac-d)/bin$(PATH_SEPARATOR)'$$PATH \
+ && export PATH \
+ && AUTOCONF=autoconf \
+ && AUTOHEADER=autoheader \
+ && AUTORECONF=autoreconf \
+ && AUTOM4TE=autom4te \
+ && AUTOUPDATE=autoupdate \
+ && export AUTOCONF AUTOHEADER AUTORECONF AUTOM4TE AUTOUPDATE \
+ && echo === check autoconf version '(must be = $(ac-v))' \
+ && autoconf --version \
+ && autoconf --version | sed -e 's/^/ /; s/$$/ /' -e 1q \
+ | $(FGREP) '$(ac-v)' >/dev/null \
+ && echo === configure \
+ && $(srcdir)/configure $(shell ./config.status --config) \
+ && echo === build and test \
+ && $(MAKE) check
+.PHONY: check-minimal-autoconf
+
+
+# --------------------------------------------------------------- #
+# Testing on real-world packages can help us avoid regressions. #
+# --------------------------------------------------------------- #
+
+#
+# NOTE (from Stefano Lattarini):
+#
+# This section is mostly hacky and ad-hoc, but works for me and
+# on my system. And while far from clean, it should help catching
+# real regressions on real world packages, which is important.
+# Ideas about how to improve this and make it more generic, portable,
+# clean, etc., are welcome.
+#
+
+# Tiny sample package.
+FEW_PACKAGES += hello
+# Smallish package using recursive make setup.
+FEW_PACKAGES += make
+# Medium-size package using non-recursive make setup.
+FEW_PACKAGES += coreutils
+
+ALL_PACKAGES = \
+ $(FEW_PACKAGES) \
+ autoconf \
+ bison \
+ grep \
+ tar \
+ diffutils \
+ smalltalk
+
+pkg-targets = check dist
+
+# Note: "ttp" stays for "Third Party Package".
+
+ttp-check ttp-check-all: do-clone = $(GIT) clone --verbose
+ttp-check: ttp-packages = $(FEW_PACKAGES)
+ttp-check-all: ttp-packages = $(ALL_PACKAGES)
+
+# Note: some packages depend on pkg-config, and its provided macros.
+ttp-check ttp-check-all: t/pkg-config-macros.log
+ @set -e; \
+ $(setup_autotools_paths); \
+ skip_all_ () \
+ { \
+ echo "***" >&2; \
+ echo "*** $@: WARNING: $$@" >&2; \
+ echo "*** $@: WARNING: some packages might fail to bootstrap" >&2; \
+ echo "***" >&2; \
+ }; \
+ . t/pkg-config-macros.dir/get.sh || exit 1; \
+ mkdir $@.d && cd $@.d || exit 1; \
+ for p in $(ttp-packages); do \
+ echo; \
+ echo ======== BEGIN TTP $$p =========; \
+ echo; \
+ set -x; \
+ $(do-clone) git://$(git-sv-host)/$$p.git || exit 1; \
+ ( \
+ cd $$p \
+ && ls -l \
+ && if test -f bootstrap; then \
+ ./bootstrap --no-git; \
+ else \
+ $$AUTORECONF -fvi; \
+ fi \
+ && ./configure \
+ && if test $$p = make; then \
+ $(MAKE) update; \
+ else :; fi \
+ && for t in $(pkg-targets); do \
+ $(MAKE) $$t WERROR_CFLAGS= || exit 1; \
+ done \
+ ) || exit 1; \
+ set +x; \
+ echo; \
+ echo ======== END TTP $$p =========; \
+ echo; \
+ done
+ifndef keep-ttp-dir
+ rm -rf $@.d
+endif
+
+# Alias for lazy typists.
+ttp: ttp-check
+ttp-all: ttp-check-all
+
+.PHONY: ttp ttp-check ttp-all ttp-check-all
diff --git a/maintainer/rename-tests b/maintainer/rename-tests
new file mode 100755
index 000000000..b933016f3
--- /dev/null
+++ b/maintainer/rename-tests
@@ -0,0 +1,75 @@
+#!/usr/bin/env bash
+# Convenience script to rename test cases in Automake.
+
+# Copyright (C) 2013-2017 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 <https://www.gnu.org/licenses/>.
+
+set -e -u
+
+me=${0##*/}
+msg_file=$me.git-msg
+
+fatal () { echo "$me: $*" >&2; exit 1; }
+
+case $# in
+ 0) input=$(cat);;
+ 1) input=$(cat -- "$1");;
+ *) fatal "too many arguments";;
+esac
+
+AWK=${AWK-awk}
+SED=${SED-sed}
+
+[[ -f bin/automake.in && -d lib/Automake ]] \
+ || fatal "can only be run from the top-level of the Automake source tree"
+
+$SED --version 2>&1 | grep GNU >/dev/null 2>&1 \
+ || fatal "GNU sed is required by this script"
+
+# Input validation and cleanup.
+input=$(
+ $AWK -v me="$me" '
+ /^#/ { next; }
+ (NF == 0) { next; }
+ (NF != 2) { print me ": wrong number of fields at line " NR;
+ exit(1); }
+ { printf ("t/%s t/%s\n", $1, $2); }
+ ' <<<"$input"
+) || exit $?
+
+# Prepare git commit message.
+exec 5>"$msg_file"
+echo "tests: more significant names for some tests" >&5
+echo >&5
+$AWK >&5 <<<"$input" \
+ '{ printf ("* %s: Rename...\n* %s: ... like this.\n", $1, $2) }'
+exec 5>&-
+
+# Rename tests.
+eval "$($AWK '{ printf ("git mv %s %s\n", $1, $2) }' <<<"$input")"
+
+# Adjust the list of tests (do this conditionally, since such a
+# list is not required nor used in Automake-NG).
+if test -f t/list-of-tests.mk; then
+ $SED -e "$($AWK '{ printf ("s|^%s |%s |\n", $1, $2) }' <<<"$input")" \
+ -i t/list-of-tests.mk
+ git add t/list-of-tests.mk
+fi
+
+git status
+echo
+echo "NOTICE: pre-filled commit message is in file '$msg_file'"
+
+exit 0
diff --git a/maintainer/syntax-checks.mk b/maintainer/syntax-checks.mk
new file mode 100644
index 000000000..411f995ec
--- /dev/null
+++ b/maintainer/syntax-checks.mk
@@ -0,0 +1,549 @@
+# Maintainer checks for Automake. Requires GNU make.
+
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# We also have to take into account VPATH builds (where some generated
+# tests might be in '$(builddir)' rather than in '$(srcdir)'), TAP-based
+# tests script (which have a '.tap' extension) and helper scripts used
+# by other test cases (which have a '.sh' extension).
+xtests := $(shell \
+ if test $(srcdir) = .; then \
+ dirs=.; \
+ else \
+ dirs='$(srcdir) .'; \
+ fi; \
+ for d in $$dirs; do \
+ for s in tap sh; do \
+ ls $$d/t/ax/*.$$s $$d/t/*.$$s $$d/contrib/t/*.$$s 2>/dev/null; \
+ done; \
+ done | sort)
+
+xdefs = \
+ $(srcdir)/t/ax/am-test-lib.sh \
+ $(srcdir)/t/ax/test-lib.sh \
+ $(srcdir)/t/ax/test-defs.in
+
+ams := $(shell find $(srcdir) -name '*.dir' -prune -o -name '*.am' -print)
+
+# Some simple checks, and then ordinary check. These are only really
+# guaranteed to work on my machine.
+syntax_check_rules = \
+$(sc_tests_plain_check_rules) \
+sc_diff_automake \
+sc_diff_aclocal \
+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_perl_protos \
+sc_cd_in_backquotes \
+sc_cd_relative_dir \
+sc_perl_at_uscore_in_scalar_context \
+sc_perl_local \
+sc_AMDEP_TRUE_in_automake_in \
+sc_make_without_am_makeflags \
+sc_tests_no_source_defs \
+sc_tests_obsolete_variables \
+sc_tests_here_document_format \
+sc_tests_command_subst \
+sc_tests_no_run_make_redirect \
+sc_tests_exit_not_Exit \
+sc_tests_automake_fails \
+sc_tests_overriding_macros_on_cmdline \
+sc_tests_no_make_e \
+sc_tests_plain_sleep \
+sc_tests_ls_t \
+sc_m4_am_plain_egrep_fgrep \
+sc_tests_no_configure_in \
+sc_tests_PATH_SEPARATOR \
+sc_tests_logs_duplicate_prefixes \
+sc_tests_makefile_variable_order \
+sc_perl_at_substs \
+sc_unquoted_DESTDIR \
+sc_tabs_in_texi \
+sc_at_in_texi
+
+$(syntax_check_rules): bin/automake bin/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.
+maintainer-check: maintainer-check-list-of-tests
+
+# I'm a lazy typist.
+lint: maintainer-check
+.PHONY: lint
+
+# The recipes of syntax checks require a modern GNU grep.
+sc_sanity_gnu_grep:
+ $(AM_V_GEN)grep --version | grep 'GNU grep' >/dev/null 2>&1 \
+ && ab=$$(printf 'a\nb') \
+ && test "$$(printf 'xa\nb\nc' | grep -Pzo 'a\nb')" = "$$ab" \
+ || { \
+ echo "Syntax checks recipes require a modern GNU grep" >&2; \
+ exit 1; \
+ }
+.PHONY: sc_sanity_gnu_grep
+$(syntax_check_rules): sc_sanity_gnu_grep
+
+# Check that every subroutine in perl scripts has a corresponding
+# prototype
+sc_perl_protos:
+ $(AM_V_GEN)$(srcdir)/maintainer/check-perl-protos \
+ <$(srcdir)/bin/aclocal.in && \
+ $(srcdir)/maintainer/check-perl-protos <$(srcdir)/bin/automake.in
+
+# These check avoids accidental configure substitutions in the source.
+# There are exactly 8 lines that should be modified from automake.in to
+# automake, and 9 lines that should be modified from aclocal.in to
+# aclocal.
+automake_diff_no = 8
+aclocal_diff_no = 9
+sc_diff_automake sc_diff_aclocal: in=$($*_in)
+sc_diff_automake sc_diff_aclocal: out=$($*_script)
+sc_diff_automake sc_diff_aclocal: sc_diff_% :
+ @set +e; \
+ in=$*-in.tmp out=$*-out.tmp diffs=$*-diffs.tmp \
+ && sed '/^#!.*[pP]rototypes/d' $(in) > $$in \
+ && sed '/^# BEGIN.* PROTO/,/^# END.* PROTO/d' $(out) > $$out \
+ && { diff -u $$in $$out > $$diffs; test $$? -eq 1; } \
+ && added=`grep -v '^+++ ' $$diffs | grep -c '^+'` \
+ && removed=`grep -v '^--- ' $$diffs | grep -c '^-'` \
+ && test $$added,$$removed = $($*_diff_no),$($*_diff_no) \
+ || { \
+ echo "Found unexpected diffs between $(in) and $(out)"; \
+ echo "Lines added: $$added" ; \
+ echo "Lines removed: $$removed"; \
+ cat $$diffs; \
+ exit 1; \
+ } >&2; \
+ rm -f $$in $$out $$diffs
+
+# Expect no instances of '${...}'. However, $${...} is ok, since that
+# is a shell construct, not a Makefile construct.
+sc_no_brace_variable_expansions:
+ @if grep -v '^ *#' $(ams) | grep -F '$${' | 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 '^#' $(ams) $(xtests) \
+ | grep -vE '/(rm-f-probe\.sh|spy-rm\.tap|subobj-clean.*-pr10697\.sh):' \
+ | grep -E '\<rm ([^-]|\-[^f ]*\>)'; \
+ 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 \$$(' $(ams) | grep -v '/Makefile\.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' $(ams) \
+ | grep -F -v '$$(mkinstalldirs)' \
+ | grep -v '^\./Makefile.am:[0-9][0-9]*: *lib/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\)' $(ams) | \
+ 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 ' $(automake_in) | \
+ grep -F -v 'undef $$/'; then \
+ echo "Found 'undef' in the lines above; use 'delete' instead" 1>&2; \
+ exit 1; \
+ fi
+
+# We never want split (/ /,...), only split (' ', ...).
+sc_perl_no_split_regex_space:
+ @if grep -n 'split (/ /' $(automake_in) $(acloca_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 ' $(automake_in) $(ams); 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 ' $(automake_in) $(ams) | \
+ 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]*[^) ] *= *@_' \
+ $(automake_in) $(aclocal_in); then \
+ echo "Using @_ in a scalar context in the lines above." 1>&2; \
+ exit 1; \
+ fi
+
+## Allow only few variables to be localized in automake and aclocal.
+sc_perl_local:
+ @if egrep -v '^[ \t]*local \$$[_~]( *=|;)' \
+ $(automake_in) $(aclocal_in) | \
+ grep '^[ \t]*local [^*]'; then \
+ echo "Please avoid 'local'." 1>&2; \
+ exit 1; \
+ fi
+
+# Don't let AMDEP_TRUE substitution appear in automake.in.
+sc_AMDEP_TRUE_in_automake_in:
+ @if grep '@AMDEP''_TRUE@' $(automake_in); then \
+ echo "Don't put AMDEP_TRUE substitution in automake.in" 1>&2; \
+ exit 1; \
+ fi
+
+# 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) ' $(ams) $(automake_in) \
+ | grep -Fv '$$(AM_MAKEFLAGS)'; \
+ then \
+ echo 'Use $$(MAKE) $$(AM_MAKEFLAGS).' 1>&2; \
+ exit 1; \
+ fi
+
+# Look out for some obsolete variables.
+sc_tests_obsolete_variables:
+ @vars=" \
+ using_tap \
+ am_using_tap \
+ test_prefer_config_shell \
+ original_AUTOMAKE \
+ original_ACLOCAL \
+ parallel_tests \
+ am_parallel_tests \
+ "; \
+ seen=""; \
+ for v in $$vars; do \
+ if grep -E "\b$$v\b" $(xtests) $(xdefs); then \
+ seen="$$seen $$v"; \
+ fi; \
+ done; \
+ if test -n "$$seen"; then \
+ for v in $$seen; do \
+ case $$v in \
+ parallel_tests|am_parallel_tests) v2=am_serial_tests;; \
+ *) v2=am_$$v;; \
+ esac; \
+ echo "Variable '$$v' is obsolete, use '$$v2' instead." 1>&2; \
+ done; \
+ exit 1; \
+ else :; fi
+
+# Tests should never call some programs directly, but only through the
+# corresponding variable (e.g., '$MAKE', not 'make'). This will allow
+# the programs to be overridden at configure time (for less brittleness)
+# or by the user at make time (to allow better testsuite coverage).
+sc_tests_plain_check_rules = \
+ sc_tests_plain_egrep \
+ sc_tests_plain_fgrep \
+ sc_tests_plain_make \
+ sc_tests_plain_perl \
+ sc_tests_plain_automake \
+ sc_tests_plain_aclocal \
+ sc_tests_plain_autoconf \
+ sc_tests_plain_autoupdate \
+ sc_tests_plain_autom4te \
+ sc_tests_plain_autoheader \
+ sc_tests_plain_autoreconf
+
+toupper = $(shell echo $(1) | LC_ALL=C tr '[a-z]' '[A-Z]')
+
+$(sc_tests_plain_check_rules): sc_tests_plain_% :
+ @# The leading ':' in the grep below is what is printed by the
+ @# preceding 'grep -v' after the file name.
+ @# It works here as a poor man's substitute for beginning-of-line
+ @# marker.
+ @if grep -v '^[ ]*#' $(xtests) \
+ | $(EGREP) '(:|\bif|\bnot|[;!{\|\(]|&&|\|\|)[ ]*?$*\b'; \
+ then \
+ echo 'Do not run "$*" in the above tests.' \
+ 'Use "$$$(call toupper,$*)" 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 '<<' $(xtests) | grep -Ev '\b(END|EOF)\b|\bcout <<'; then \
+ echo 'Use here documents with "END" and "EOF" only, for greppability.' 1>&2; \
+ exit 1; \
+ fi
+
+# Our test case should use the $(...) POSIX form for command substitution,
+# rather than the older `...` form.
+# The point of ignoring text on here-documents is that we want to exempt
+# Makefile.am rules, configure.ac code and helper shell script created and
+# used by out shell scripts, because Autoconf (as of version 2.69) does not
+# yet ensure that $CONFIG_SHELL will be set to a proper POSIX shell.
+sc_tests_command_subst:
+ @found=false; \
+ scan () { \
+ sed -n -e '/^#/d' \
+ -e '/<<.*END/,/^END/b' -e '/<<.*EOF/,/^EOF/b' \
+ -e 's/\\`/\\{backtick}/' \
+ -e "s/[^\\]'\([^']*\`[^']*\)*'/'{quoted-text}'/g" \
+ -e '/`/p' $$*; \
+ }; \
+ for file in $(xtests); do \
+ res=`scan $$file`; \
+ if test -n "$$res"; then \
+ echo "$$file:$$res"; \
+ found=true; \
+ fi; \
+ done; \
+ if $$found; then \
+ echo 'Use $$(...), not `...`, for command substitutions.' >&2; \
+ exit 1; \
+ fi
+
+# Tests should no longer call 'Exit', just 'exit'. That's because we
+# now have in place a better workaround to ensure the exit status is
+# transported correctly across the exit trap.
+sc_tests_exit_not_Exit:
+ @if grep 'Exit' $(xtests) $(xdefs) | grep -Ev '^[^:]+: *#' | grep .; then \
+ echo "Use 'exit', not 'Exit'; it's obsolete now." 1>&2; \
+ exit 1; \
+ fi
+
+# Guard against obsolescent uses of ./defs in tests. Now,
+# 'test-init.sh' should be used instead.
+sc_tests_no_source_defs:
+ @if grep -E '\. .*defs($$| )' $(xtests); then \
+ echo "Source 'test-init.sh', not './defs'." 1>&2; \
+ exit 1; \
+ fi
+
+# Invocation of 'run_make' should not have output redirections.
+sc_tests_no_run_make_redirect:
+ @if grep -Pzo '.*(\$$MAKE|\brun_make)\b(.*(\\\n))*.*>.*' $(xtests); \
+ then \
+ echo 'Do not redirect stdout/stderr in "run_make" or "$$MAKE"' \
+ 'invocations,' >&2; \
+ echo 'use "run_make {-E|-O|-M}" instead.' >&2; \
+ exit 1; \
+ fi
+
+# Use AUTOMAKE_fails when appropriate
+sc_tests_automake_fails:
+ @if grep -v '^#' $(xtests) | grep '\$$AUTOMAKE.*&&.*exit'; then \
+ echo 'Use AUTOMAKE_fails + grep to catch automake failures in the above tests.' 1>&2; \
+ exit 1; \
+ fi
+
+# "make -e" is brittle and unsafe, since it let *all* the environment
+# win over the macro definitions in the Makefiles. Since we offer
+# AM_MAKEFLAGS to allow the user to portably override macro definitions
+# from the command line in a safe way, we should encourage users to use
+# it.
+sc_tests_no_make_e:
+ @if grep -E '\$$MAKE\b.* -[a-zA-Z0-9]*e' $(xtests); then \
+ echo '"make -e" is brittle, use "run_make" instead.' 1>&2; \
+ exit 1; \
+ fi
+
+# 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.
+# Finally, 'exp' is used by some ad-hoc checks, where we ensure it's
+# ok to override it from the command line.
+sc_tests_overriding_macros_on_cmdline:
+# The first s/// tries to account for usages like "$MAKE || st=$?".
+# 'DISTCHECK_CONFIGURE_FLAGS' and 'exp' are allowed to contain whitespace in
+# their definitions, hence the more complex last three substitutions below.
+ @if sed -e 's/ || .*//' -e 's/ && .*//' \
+ -e 's/ DESTDIR=[^ ]*/ /' -e 's/ SHELL=[^ ]*/ /' \
+ -e 's/ V=[^ ]*/ /' -e 's/ DISABLE_HARD_ERRORS=[^ ]*/ /' \
+ -e "s/ DISTCHECK_CONFIGURE_FLAGS='[^']*'/ /" \
+ -e 's/ DISTCHECK_CONFIGURE_FLAGS="[^"]*"/ /' \
+ -e 's/ DISTCHECK_CONFIGURE_FLAGS=[^ ]/ /' \
+ -e "s/ exp='[^']*'/ /" \
+ -e 's/ exp="[^"]*"/ /' \
+ -e 's/ exp=[^ ]/ /' \
+ $(filter-out %/am-test-lib.sh,$(xtests)) \
+ | grep '\$$MAKE .*='; then \
+ echo 'Rewrite "$$MAKE foo=bar" as "run_make foo=bar" in the lines above,'; \
+ echo 'it is more portable.'; \
+ exit 1; \
+ fi >&2
+ @if grep 'SHELL=.*\$$MAKE' $(xtests); then \
+ echo '$$MAKE ignores the SHELL envvar, use "run_make SHELL=$$SHELL"'; \
+ echo 'in the above lines.'; \
+ exit 1; \
+ fi >&2
+
+# Prefer use of our 'is_newest' auxiliary script over the more hacky
+# idiom "test $(ls -1t new old | sed 1q) = new", which is both more
+# cumbersome and more fragile.
+sc_tests_ls_t:
+ @if LC_ALL=C grep -E '\bls(\s+-[a-zA-Z0-9]+)*\s+-[a-zA-Z0-9]*t' \
+ $(xtests); then \
+ echo "Use 'is_newest' rather than hacks based on 'ls -t'" 1>&2; \
+ exit 1; \
+ fi
+
+# Never use 'sleep 1' to create files with different timestamps.
+# Use '$sleep' instead. Some file systems (e.g., Windows) have only
+# a 2sec resolution.
+sc_tests_plain_sleep:
+ @if grep -E '\bsleep +[12345]\b' $(xtests); 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_m4_am_plain_egrep_fgrep:
+ @if grep -E '\b[ef]grep\b' $(ams) $(srcdir)/m4/*.m4; then \
+ echo 'Do not use egrep or fgrep in the above files,' \
+ 'they are not portable.' 1>&2; \
+ exit 1; \
+ fi
+
+# Prefer 'configure.ac' over the obsolescent 'configure.in' as the name
+# for configure input files in our testsuite. The latter has been
+# deprecated for several years (at least since autoconf 2.50).
+sc_tests_no_configure_in:
+ @if grep -E '\bconfigure\\*\.in\b' $(xtests) $(xdefs) \
+ | grep -Ev '/backcompat.*\.(sh|tap):' \
+ | grep -Ev '/autodist-configure-no-subdir\.sh:' \
+ | grep -Ev '/(configure|help)\.sh:' \
+ | grep .; \
+ then \
+ echo "Use 'configure.ac', not 'configure.in', as the name" >&2; \
+ echo "for configure input files in the test cases above." >&2; \
+ exit 1; \
+ fi
+
+# Rule to ensure that the testsuite has been run before. We don't depend
+# on 'check' here, because that would be very wasteful in the common case.
+# We could run "make check RECHECK_LOGS=" and avoid toplevel races with
+# AM_RECURSIVE_TARGETS. Suggest keeping test directories around for
+# greppability of the Makefile.in files.
+sc_ensure_testsuite_has_run:
+ @if test ! -f '$(TEST_SUITE_LOG)'; then \
+ echo 'Run "env keep_testdirs=yes make check" before' \
+ 'running "make maintainer-check"' >&2; \
+ exit 1; \
+ fi
+.PHONY: sc_ensure_testsuite_has_run
+
+# Ensure our warning and error messages do not contain duplicate 'warning:' prefixes.
+# This test actually depends on the testsuite having been run before.
+sc_tests_logs_duplicate_prefixes: sc_ensure_testsuite_has_run
+ @if grep -E '(warning|error):.*(warning|error):' t/*.log; then \
+ echo 'Duplicate warning/error message prefixes seen in above tests.' >&2; \
+ exit 1; \
+ fi
+
+# Ensure variables are listed before rules in Makefile.in files we generate.
+sc_tests_makefile_variable_order: sc_ensure_testsuite_has_run
+ @st=0; \
+ for file in `find t -name Makefile.in -print`; do \
+ latevars=`sed -n \
+ -e :x -e 's/#.*//' \
+ -e '/\\\\$$/{' -e N -e 'b x' -e '}' \
+ -e '# Literal TAB.' \
+ -e '1,/^ /d' \
+ -e '# Allow @ so we match conditionals.' \
+ -e '/^ *[a-zA-Z_@]\{1,\} *=/p' $$file`; \
+ if test -n "$$latevars"; then \
+ echo "Variables are expanded too late in $$file:" >&2; \
+ echo "$$latevars" | sed 's/^/ /' >&2; \
+ st=1; \
+ fi; \
+ done; \
+ test $$st -eq 0 || { \
+ echo 'Ensure variables are expanded before rules' >&2; \
+ exit 1; \
+ }
+
+# Using ':' as a PATH separator is not portable.
+sc_tests_PATH_SEPARATOR:
+ @if grep -E '\bPATH=.*:.*' $(xtests) ; then \
+ echo "Use '\$$PATH_SEPARATOR', not ':', in PATH definitions" \
+ "above." 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]+@' bin/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]+@' bin/automake | wc -l` -ne 0; then \
+ echo "Unresolved @...@ substitution in automake" 1>&2; \
+ exit 1; \
+ fi
+
+sc_unquoted_DESTDIR:
+ @if grep -E "[^\'\"]\\\$$\(DESTDIR" $(ams); 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
diff --git a/old/ChangeLog-tests b/old/ChangeLog-tests
new file mode 100644
index 000000000..24f76e02d
--- /dev/null
+++ b/old/ChangeLog-tests
@@ -0,0 +1,1448 @@
+2001-02-07 Tom Tromey <tromey@redhat.com>
+
+ * Makefile.am (XFAIL_TESTS): Removed remake3.test,
+ distcommon.test.
+
+ * Makefile.am (XFAIL_TESTS): Added new files.
+
+ * remake3.test: New file.
+ * Makefile.am (TESTS): Added new file.
+
+ * distcommon.test: New file.
+ * Makefile.am (TESTS): Added new file.
+
+2001-02-04 Tom Tromey <tromey@redhat.com>
+
+ * exsource.test: Updated for new include code.
+
+2001-02-03 Tom Tromey <tromey@redhat.com>
+
+ * Makefile.am (XFAIL_TESTS): Removed colon7.test.
+
+2001-01-29 Akim Demaille <akim@epita.fr>
+
+ * check.test: New.
+
+2001-01-28 Tom Tromey <tromey@redhat.com>
+
+ * listval.test: New file.
+ * Makefile.am (TESTS): Added listval.test.
+
+2001-01-26 Tom Tromey <tromey@redhat.com>
+
+ * makevars.test: Fail if automake fails.
+
+2001-01-26 Pavel Roskin <proski@gnu.org>
+
+ * Makefile.am (XFAIL_TESTS): Added colon7.test.
+
+2001-01-26 Akim Demaille <akim@epita.fr>
+
+ * vtexi.test (info_TEXINFOS): Check that the path to mdate-sh is
+ already correct.
+
+ * defs (AUTOCONF, has_autoconf, needs_autoconf): New.
+ * ansi3.test, cond9.test, depacl2.test, install2.test, pr19.test,
+ * pr87.test, pr9.test, subobj3.test, target-cflags.test: Use them.
+
+2001-01-25 Pavel Roskin <proski@gnu.org>
+
+ * makevars.test: Disable shell tracing.
+
+2001-01-25 Akim Demaille <akim@epita.fr>
+
+ * makevars.test: New.
+
+2001-01-24 Akim Demaille <akim@epita.fr>
+
+ * vtexi.test (info_TEXINFOS): Escape a $ in egrep pattern.
+
+2001-01-23 Akim Demaille <akim@epita.fr>
+
+ * vtexi.test: Also check that stamp-vti properly depends upon
+ configure.in and the Texinfo source file.
+
+2001-01-21 Kevin Ryde <user42@zip.com.au>
+
+ * colon7.test: Grep for a couple of AC_OUTPUT problems.
+
+2001-01-15 Tom Tromey <tromey@redhat.com>
+
+ * subdir3.test: Allow any number of dependencies.
+
+ * subobj4.test: Fixed test case.
+
+ * amassign.test: New file.
+ * Makefile.am (TESTS): Added new file.
+
+2001-01-12 Tom Tromey <tromey@redhat.com>
+
+ * subobj4.test: New file.
+ * Makefile.am (TESTS): Added subobj4.test.
+
+ * cxxansi.test: New file.
+ * Makefile.am (TESTS): Added cxxansi.test.
+
+2000-12-21 Tom Tromey <tromey@redhat.com>
+
+ * vtexi.test: Fixed to reflect new rules.
+
+2000-12-17 Tom Tromey <tromey@redhat.com>
+
+ * Makefile.am (XFAIL_TESTS): Don't mention ldflags.test.
+
+2000-11-25 Tom Tromey <tromey@cygnus.com>
+
+ * space.test: New file.
+ * Makefile.am (TESTS): Added space.test.
+
+2000-11-23 Pavel Roskin <proski@gnu.org>
+
+ * pr87.test: Prevent automake from looking into .. and ../..
+ by using AC_CONFIG_AUX_DIR(.) in configure.in.
+
+2000-11-23 Tom Tromey <tromey@cygnus.com>
+
+ * pr87.test: New file. From PR automake/87.
+ * Makefile.am (TESTS): Added pr87.test.
+
+2000-10-17 Pavel Roskin <proski@gnu.org>
+
+ * Makefile.am (TESTS): Added aclocali1.test.
+ * aclocali1.test: New file.
+
+2000-08-30 Tom Tromey <tromey@cygnus.com>
+
+ * Makefile.am (XFAIL_TESTS): Removed pr72.test.
+
+ For PR automake/72:
+ * Makefile.am (TESTS): Added pr72.test.
+ (XFAIL_TESTS): Likewise.
+ * pr72.test: New file.
+
+2000-08-28 Tom Tromey <tromey@cygnus.com>
+
+ * Makefile.am (XFAIL_TESTS): Added ldflags.test.
+
+2000-08-27 Tom Tromey <tromey@cygnus.com>
+
+ For PR automake/75:
+ * Makefile.am (TESTS): Added fortdep.test.
+ * fortdep.test: New file.
+
+ For PR automake/68:
+ * Makefile.am (TESTS): Added header.test.
+ * header.test: New file.
+
+2000-08-26 Tom Tromey <tromey@cygnus.com>
+
+ For PR automake/73:
+ * Makefile.am (TESTS): Added instman2.test.
+ * instman2.test: New file.
+
+ For PR automake/77:
+ * Makefile.am (TESTS): Added ldflags.test.
+ * ldflags.test: New file.
+
+2000-08-06 Jim Meyering <meyering@lucent.com>
+
+ * Makefile.am (TESTS): Add subdir4.test.
+ * subdir4.test: New test for the just-fixed depcomp failure.
+
+2000-08-02 Akim Demaille <akim@epita.fr>
+
+ * depacl.test: Weaken the regexp looking for AM_PROG_CC_C_STDC in
+ aclocal.m4.
+
+2000-05-01 Pavel Roskin <pavel_roskin@geocities.com>
+
+ * install2.test: Prevent automake from looking into .. and ../..
+ by using AC_CONFIG_AUX_DIR(.) in configure.in
+ * pr19.test: Likewise
+ * subobj3.test: Likewise
+
+2000-03-19 Tom Tromey <tromey@cygnus.com>
+
+ * libobj2.test: Put depcomp into subdir.
+ * confsub.test: Put depcomp into subdir.
+ * defs: Always copy `depcomp'.
+
+ * defs: Correctly create `depcomp'.
+ * nodepcomp.test: Remove depcomp.
+
+ More for PR automake/38:
+ * symlink3.test: New file.
+ * Makefile.am (TESTS): Added symlink3.test.
+
+ For PR automake/38:
+ * symlink2.test: New file.
+ * Makefile.am (TESTS): Added symlink2.test.
+
+ For PR automake/45:
+ * defs, acoutnoq.test, texinfo8.test, tagsub.test, subdir2.test,
+ subdir.test, scripts.test, remake2.test, remake.test, pr2.test,
+ parse.test, output4.test, output3.test, output2.test, output.test,
+ libobj10.test, libobj9.test, libobj8.test, libobj7.test,
+ libobj6.test, libobj2.test, libobj.test, fpinstall.test,
+ fpinst2.test, depend3.test, confsub.test, config.test,
+ confh4.test, confh3.test, confh2.test, confh.test, conf2.test,
+ colon7.test, colon6.test, colon5.test, colon4.test, colon3.test,
+ colon2.test, colon.test, acouttbs.test, acoutqnl.test,
+ acoutput.test: Put AM_INIT_AUTOMAKE into configure.in.
+
+ * install2.test: Expect a `dist' failure.
+
+2000-03-19 Tom Tromey <tromey@cygnus.com>
+
+ * nodepcomp.test: New file.
+ * Makefile.am (TESTS): Added nodepcomp.test.
+
+2000-02-02 Assar Westerlund <assar@sics.se>
+
+ * target-cflags.test: new test case to target-specific CFLAGS
+
+2000-01-08 Tom Tromey <tromey@cygnus.com>
+
+ * ansi.test, texinfo.test, empty.test, insh2.test, texinfo8.test:
+ Remove @SET_MAKE@ before using Makefile.
+ * backsl2.test: Don't add AC_PROG_MAKE_SET in configure.in;
+ already done.
+ * defs: Put AC_PROG_MAKE_SET in configure.in.
+ * acoutnoq.test, acoutput.test, acoutqnl.test, acouttbs.test,
+ acouttbs2.test, colon.test, colon2.test, colon3.test, colon4.test,
+ colon5.test, colon6.test, colon7.test, conf2.test, confh.test,
+ confh2.test, confh3.test, confh4.test, config.test, depend3.test,
+ discover.test, fpinst2.test, gnits.test, ldadd.test, libobj.test,
+ libobj10.test, libobj2.test, libobj6.test, libobj7.test,
+ libobj8.test, libobj9.test, output.test, output2.test,
+ output3.test, output4.test, output5.test, package.test,
+ parse.test, pr2.test, remake.test, remake2.test, scripts.test,
+ stamph.test, texinfo8.test: Likewise.
+
+1999-12-26 Tom Tromey <tromey@cygnus.com>
+
+ * subobj3.test: Remove depcomp.
+ * pr9.test: Remove depcomp.
+ Remove opportunistic check.
+ * pr19.test: Remove depcomp.
+
+1999-12-25 Tom Tromey <tromey@cygnus.com>
+
+ * suffix2.test: Create config.guess and config.sub so user doesn't
+ need libtoolize. From Klaus Reichl.
+
+1999-12-19 Tom Tromey <tromey@cygnus.com>
+
+ Test for PR automake/9:
+ * pr9.test: New file.
+ * Makefile.am (TESTS): Added pr9.test.
+
+ * pr19.test: Fail gracefully if gzip missing.
+ * install2.test: Fail gracefully if gzip missing.
+
+1999-12-19 Pavel Roskin <pavel_roskin@geocities.com>
+
+ * tests/defs: add all permissions to testSubDir before
+ removing it.
+
+1999-12-19 Tom Tromey <tromey@cygnus.com>
+
+ * pr2.test: Use egrep, not grep.
+
+ Test for PR automake/2:
+ * pr2.test: New file.
+ * Makefile.am (TESTS): Added pr2.test.
+
+1999-12-15 Tom Tromey <tromey@cygnus.com>
+
+ * dup3.test: New file.
+ * Makefile.am (TESTS): Added dup3.test.
+
+1999-12-13 Tom Tromey <tromey@cygnus.com>
+
+ * pr19.test: New file. For PR automake/19.
+ * Makefile.am (TESTS): Added pr19.test.
+
+ * lex4.test: New file. For PR automake/6.
+ * Makefile.am (TESTS): Added lex4.test.
+
+ * suffix3.test: New file.
+ * Makefile.am (TESTS): Added suffix3.test.
+
+ * suffix2.test: Added `no-dependencies' to options in
+ Makefile.am. Removed trailing `exit 1'.
+
+ * nostdinc.test: New file.
+ * Makefile.am (TESTS): Added nostdinc.test.
+
+ * condincl2.test: New file.
+ * condincl.test: New file.
+ * Makefile.am (TESTS): Added condincl.test, condincl2.test.
+
+ * suffix2.test: New file.
+ * Makefile.am (TESTS): Added suffix2.test.
+
+ * subobj.test: Remove final test.
+
+1999-12-12 Tom Tromey <tromey@cygnus.com>
+
+ * Makefile.am (XFAIL_TESTS): Removed subobj3.test.
+
+1999-12-10 Tom Tromey <tromey@cygnus.com>
+
+ * install2.test: New file.
+ * Makefile.am (TESTS): Added install2.test.
+
+ * specflags5.test: New file.
+ * Makefile.am (TESTS): Added specflags5.test.
+
+1999-12-06 Tom Tromey <tromey@cygnus.com>
+
+ * confh4.test: Corrected final test.
+
+ * confh4.test: New file. PR automake/34.
+ * Makefile.am (TESTS): Mention confh4.test.
+
+1999-11-22 Tom Tromey <tromey@cygnus.com>
+
+ * defs: Never hard link `depcomp'. From Pavel Roskin
+
+ * exsource.test: Don't use configure substitution in _SOURCES.
+ * depend.test: Don't use configure substitution in _SOURCES.
+ * cygwin32.test: Don't use configure substitution in _SOURCES.
+
+ * subobj.test: Check for another bug.
+
+ * Makefile.am (XFAIL_TESTS): Removed sourcesub.test,
+ ltlibobjs.test.
+
+1999-11-21 Tom Tromey <tromey@cygnus.com>
+
+ * specflags3.test: Updated test for new dependency
+ implementation.
+
+1999-10-02 Alexandre Oliva <oliva@lsd.ic.unicamp.br>
+
+ * defs: Set CDPATH to avoid verbose cd.
+
+1999-09-14 Alexandre Oliva <oliva@lsd.ic.unicamp.br>
+
+ * defs: Avoid printing the full pathname of testSubDir.
+
+ * exsource.test: Update.
+
+1999-06-01 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * exsource.test: sed @AMDEP@ away from `include' line.
+
+ * compile_f_c_cxx.test: depcomp is no longer in the same line.
+
+1999-04-25 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * compile_f_c_cxx.test: Look for $(depcomp) for C and C++.
+ * suffix.test: We no longer emit % rules.
+
+1999-04-10 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * defs: Create link or copy of depcomp.
+ * depend2.test: Removed, no more disted dependencies.
+ * Makefile.am (TESTS): Likewise.
+ * exsource.test: Adjust dependency filenames.
+ * mdate3.test: Adjust for depcomp.
+
+1999-11-07 Tom Tromey <tromey@cygnus.com>
+
+ * dash.test: New file.
+ * Makefile.am (TESTS): Added dash.test.
+
+1999-08-26 Tom Tromey <tromey@cygnus.com>
+
+ * texinfo8.test: Use directory named `sub'.
+
+ * symlink.test: Use directory named `sub' (just in case; for
+ Windows).
+
+1999-08-15 Tom Tromey <tromey@cygnus.com>
+
+ * ansi4.test: New file.
+ * Makefile.am (TESTS): Added ansi4.test.
+
+1999-07-30 Tom Tromey <tromey@cygnus.com>
+
+ * double.test (bin_PROGRAMS): New file.
+ * Makefile.am (TESTS): Added double.test.
+
+1999-07-27 Tom Tromey <tromey@cygnus.com>
+
+ * empty4.test: New file.
+ * Makefile.am (TESTS): Added empty4.test.
+
+1999-07-13 Tom Tromey <tromey@cygnus.com>
+
+ * empty3.test: New file.
+ * Makefile.am (TESTS): Added empty3.test.
+
+ * empty2.test: Also look for `pavel.o'.
+
+ * empty2.test: New file.
+ * Makefile.am (TESTS): Added empty2.test.
+
+1999-05-27 Tom Tromey <tromey@cygnus.com>
+
+ * subobj3.test: New file.
+ * Makefile.am (TESTS): Added subobj3.test.
+ (XFAIL_TESTS): Likewise.
+
+ * ltlibobjs.test: New file.
+ * Makefile.am (TESTS): Added ltlibobjs.test.
+ (XFAIL_TESTS): Added ltlibobjs.test.
+
+ * Makefile.am (XFAIL_TESTS): Added sourcesub.test.
+
+1999-05-19 Tom Tromey <tromey@cygnus.com>
+
+ * specflags4.test: Typo fix.
+
+ * specflags4.test: New file. From Pavel Roskin.
+ * Makefile.am (TESTS): Added specflags4.test.
+
+ * specflags.test: Added regression test for missing space.
+
+1999-05-13 Tom Tromey <tromey@cygnus.com>
+
+ * sourcesub.test: New file.
+ * Makefile.am (TESTS): Added sourcesub.test.
+
+1999-05-01 Tom Tromey <tromey@cygnus.com>
+
+ * libobj2.test: Reverted previous change; it is incorrect.
+
+ * libobj2.test: Error if libtu.a.P is mentioned.
+
+1999-04-27 Tom Tromey <tromey@cygnus.com>
+
+ * cond9.test: New file. From Raja R Harinath.
+ * Makefile.am (TESTS): Added cond9.test.
+
+ * pluseq8.test: New file.
+ * Makefile.am (TESTS): Added pluseq8.test.
+
+ * canon5.test: Updated to reflect change to MACRO_PATTERN.
+
+ * specflags3.test: New file.
+ * Makefile.am (TESTS): Added specflags3.test.
+ (TESTS): Now lists one file per line, for simpler maintenance.
+
+ * specflags2.test: New file.
+ * specflags.test: New file.
+ * Makefile.am (TESTS): Added specflags.test, specflags2.test.
+
+1999-04-27 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * canon5.test (bin_PROGRAMS): New file.
+ * Makefile.am (TESTS): Added canon5.test.
+
+1999-04-20 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * libobj10.test: New file.
+ * Makefile.am (TESTS): Added libobj10.test.
+
+1999-04-11 Tom Tromey <tromey@cygnus.com>
+
+ * subobj2.test: New file.
+ * Makefile.am (TESTS): Added subobj2.test.
+
+ * subobj.test: New file.
+ * Makefile.am (TESTS): Added subobj.test.
+
+ * confh.test: Use `sed' to extract full definition of
+ DIST_COMMON. Look for stamp-h.in rule in include/Makefile.in.
+ * Makefile.am (XFAIL_TESTS): Removed confh.test.
+
+1999-04-10 Tom Tromey <tromey@cygnus.com>
+
+ * defs: Ensure srcdir is always absolute.
+
+ * Makefile.am (XFAIL_TESTS): Removed cond8.test.
+
+ * gcj2.test: New file.
+ * Makefile.am (TESTS): Added gcj2.test.
+
+1999-04-10 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * suffix.test: New file.
+ * Makefile.am: Added suffix.test.
+
+ * Makefile.am (XFAIL_TESTS): Added cond8.test.
+
+ * cond3.test: Refer to am_targ_OBJECTS.
+
+ * yacc2.test, yacc3.test: New files.
+ * Makefile.am (TESTS): Added yacc2.test and yacc3.test.
+
+1999-04-09 Tom Tromey <tromey@cygnus.com>
+
+ * nodist.test: New file.
+ * Makefile.am (TESTS): Added nodist.test.
+
+ * gcj.test: New file.
+ * Makefile.am (TESTS): Added gcj.test.
+
+1999-04-08 Tom Tromey <tromey@cygnus.com>
+
+ * cond8.test: New file.
+ * Makefile.am (TESTS): Added cond8.test.
+
+1999-04-07 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * backsl2.test: New file.
+ * Makefile.am (TESTS): Added backsl2.test.
+
+ * texinfo8.test: texinfo.tex is only disted by aux/Makefile.
+
+ * texinfo8.test: New file.
+ * Makefile.am (TESTS): Added texinfo8.test.
+
+1999-03-31 Tom Tromey <tromey@cygnus.com>
+
+ * pluseq2.test, pluseq3.test: Updated for recent \-preservation
+ change.
+
+1999-03-31 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * Makefile.am (XFAIL_TESTS): add confh.test
+
+1999-03-30 Tom Tromey <tromey@cygnus.com>
+
+ * mclean.test: Fixed typo.
+
+ * mclean.test: New file.
+ * Makefile.am (TESTS): Added mclean.test.
+
+1999-03-30 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * confh.test: if include/Makefile.am is created, the test fails
+
+1999-03-27 Tom Tromey <tromey@cygnus.com>
+
+ * extra4.test: Allow EXTRA_DATA to be specified.
+
+1999-03-22 Tom Tromey <tromey@cygnus.com>
+
+ * ldadd.test: Use AC_PROG_LIBTOOL, not AM_PROG_LIBTOOL.
+
+ * pluseq7.test: New file.
+ * Makefile.am (TESTS): Added pluseq7.test.
+ * pluseq6.test: New file.
+ * Makefile.am (TESTS): Added pluseq6.test.
+
+1999-03-21 Tom Tromey <tromey@cygnus.com>
+
+ * nodep.test: New file.
+ * Makefile.am (TESTS): Added nodep.test.
+
+ * subdir3.test: Correctly mention _SOURCES in Makefile.am.
+
+ * subdir3.test: New file.
+ * Makefile.am (TESTS): Added subdir3.test.
+ * xsource.test: Changed to check whether multiple source files
+ with same object name cause failure.
+
+1999-03-11 Tom Tromey <tromey@cygnus.com>
+
+ * libobj9.test: New file.
+ * Makefile.am (TESTS): Added libobj9.test.
+
+ * insthook.test: Don't require GNU grep. From John Pierce.
+
+ * lex3.test: New file.
+ * Makefile.am (TESTS): Added lex3.test.
+
+1999-03-01 Tom Tromey <tromey@cygnus.com>
+
+ * ansi3.test: Use no-dependencies option to avoid GNU make
+ requirement. From Jerome Lovy.
+
+1999-02-27 Tom Tromey <tromey@cygnus.com>
+
+ * ext.test (foo_SOURCES): New file.
+ * Makefile.am (TESTS): Added ext.test.
+
+1999-02-11 Tom Tromey <tromey@cygnus.com>
+
+ * cygwin32.test: Use AC_EXEEXT, not AM_EXEEXT.
+
+ * obsolete2.test: New file.
+ * Makefile.am (TESTS): Added obsolete2.test.
+
+1999-02-01 Tom Tromey <tromey@cygnus.com>
+
+ * installsh.test (AUTOMAKE): Use $PERL. From Pavel Roskin.
+
+ * cond5.test: Sleep 15 seconds, not 5. Some people still run the
+ test on slow machines.
+
+1999-01-22 Tom Tromey <tromey@cygnus.com>
+
+ * copy.test: New file.
+ * Makefile.am (TESTS): Added copy.test.
+
+ * ppf77.test: New file.
+ * Makefile.am (TESTS): Added ppf77.test.
+
+1999-01-14 Tom Tromey <tromey@cygnus.com>
+
+ * confh3.test: New file.
+ * Makefile.am (TESTS): Added confh3.test.
+
+ * confh2.test: New file.
+ * Makefile.am (TESTS): Added confh2.test.
+
+ * confh.test: Run automake differently the second time.
+
+ * mdate3.test: New file.
+ * Makefile.am (TESTS): Added mdate3.test.
+
+1999-01-11 Tom Tromey <tromey@cygnus.com>
+
+ * confh.test: New file.
+ * Makefile.am (TESTS): Added confh.test.
+
+1999-01-10 Tom Tromey <tromey@cygnus.com>
+
+ * objc.test: Updated to account for new ObjC support.
+
+ * pluseq5.test: New file.
+ * Makefile.am (TESTS): Added pluseq5.test.
+
+ * all.test: Test all *-local targets, not just all-local.
+
+ * all.test: New file.
+ * Makefile.am (TESTS): Added all.test.
+
+1999-01-07 Tom Tromey <tromey@cygnus.com>
+
+ * include.test: New file.
+ * Makefile.am (TESTS): Added include.test.
+
+1998-12-21 Tom Tromey <tromey@cygnus.com>
+
+ * insthook.test: Updated to fail when it should.
+
+1998-12-11 Tom Tromey <tromey@cygnus.com>
+
+ * insthook.test: New file.
+ * Makefile.am (TESTS): Added insthook.test.
+
+1998-11-27 Tom Tromey <tromey@cygnus.com>
+
+ * cond7.test: New file. From Pavel Roskin.
+ * Makefile.am (TESTS): New file.
+
+1998-11-10 Tom Tromey <tromey@cygnus.com>
+
+ * pluseq4.test: New file.
+ * Makefile.am (TESTS): Added pluseq4.test.
+
+1998-11-09 Tom Tromey <tromey@cygnus.com>
+
+ * pluseq3.test: New file.
+ * Makefile.am (TESTS): Added pluseq3.test.
+
+ * pluseq2.test: New file.
+ * Makefile.am (TESTS): Added pluseq2.test.
+
+1998-10-30 Tom Tromey <tromey@cygnus.com>
+
+ * pluseq.test: New file.
+ * Makefile.am (TESTS): Added pluseq.test.
+
+1998-10-28 Tom Tromey <tromey@cygnus.com>
+
+ * Makefile.am (distclean-local): Typo fix.
+
+1998-10-20 Tom Tromey <tromey@cygnus.com>
+
+ * Makefile.am (TESTS): Sorted tests. From Jeff Garzik.
+
+1998-10-13 Tom Tromey <tromey@cygnus.com>
+
+ * libobj7.test: Updated to reflect minor change in automake (test
+ wasn't resilient enough).
+ * instman.test: Updated to reflect fact that mkinstalldirs will be
+ in distribution.
+
+ * cxxonly.test: Removed.
+
+Mon Aug 31 09:46:59 1998 Matthew D. Langston <langston@SLAC.Stanford.EDU>
+
+ * Makefile.am (TESTS): Added compile_f_c_cxx.test.
+ * compile_f_c_cxx.test: New file.
+
+Sat Aug 29 18:17:58 1998 Matthew D. Langston <langston@SLAC.Stanford.EDU>
+
+ * Makefile.am (TESTS): Added flink.test link_c_cxx.test
+ link_f_c.test link_f_c_cxx.test link_f_cxx.test link_f_only.test.
+ Removed flink.test.
+ * flibs.test: New File.
+ * link_c_cxx.test: New file.
+ * link_f_c.test: New file.
+ * link_f_c_cxx.test: New file.
+ * link_f_cxx.test: New file.
+ * link_f_only.test: New file.
+
+Tue Aug 11 10:46:36 1998 Matthew D. Langston <langston@SLAC.Stanford.EDU>
+
+ * Makefile.am (TESTS): Add cxxonly.test, fonly.test, flink.test,
+ fnoc.test and fo.test.
+ * cxxonly.test: New file.
+ * fonly.test: New file.
+ * flink.test: New file.
+ * fnoc.test: New file.
+ * fo.test: New file.
+
+1998-10-08 Tom Tromey <tromey@cygnus.com>
+
+ * confdist.test: New file.
+ * Makefile.am (TESTS): Added confdist.test.
+
+1998-10-07 Tom Tromey <tromey@cygnus.com>
+
+ * extra4.test: New file.
+ * extra3.test: New file.
+ * Makefile.am (TESTS): Added extra3.test, extra4.test.
+
+Mon Oct 5 12:47:32 1998 Tom Tromey <tromey@cygnus.com>
+
+ * badline.test: New file.
+ * Makefile.am (TESTS): Added badline.test.
+
+Thu Oct 1 00:03:39 1998 Tom Tromey <tromey@cygnus.com>
+
+ * seenc.test: Updated test to account for removed line numbers.
+
+ * xsource.test: Correctly fail if source in subdir.
+
+Wed Sep 30 12:17:34 1998 Tom Tromey <tromey@cygnus.com>
+
+ * colon7.test: New file.
+ * Makefile.am (TESTS): Added colon7.test.
+
+Tue Sep 29 02:09:11 1998 Tom Tromey <tromey@cygnus.com>
+
+ * config.test: New file.
+ * Makefile.am (TESTS): Added config.test.
+
+ * Makefile.am (TESTS): Reference clean.test, not clean.am.
+
+Mon Sep 28 01:46:34 1998 Tom Tromey <tromey@cygnus.com>
+
+ * recurs2.test: New file, from Jim Meyering.
+ * Makefile.am (TESTS): Added recurs2.test.
+
+ * Makefile.am (TESTS): Added clean.am.
+ * clean.test: New file.
+ * ansi2.test: Updated test for new SUBDIRS change.
+ * noinst.test: Updated test for new SUBDIRS change.
+ * checkall.test: Added check to make sure check-local is handled.
+ Updated test for new SUBDIRS change.
+ * java.test: Updated test for new SUBDIRS change.
+
+Sun Sep 27 20:01:20 1998 Tom Tromey <tromey@cygnus.com>
+
+ * Makefile.am (TESTS): Added else.test.
+ * else.test: New file.
+
+ * Makefile.am (TESTS): Added parse.test.
+ * parse.test: New file.
+
+Sat Sep 26 19:17:43 1998 Tom Tromey <tromey@cygnus.com>
+
+ * aclocal.test: Put AM_INIT_AUTOMAKE into configure.in.
+ * library.test: Use AC_EXEEXT.
+ * texinfo5.test: Use AC_EXEEXT.
+ * Many files: use AC_PROG_INSTALL, not AM_PROG_INSTALL.
+
+ Test suite updates for the @SHELL@ change:
+ * exsource.test: Set SHELL on `make' command line.
+ * ansi.test: Set SHELL on `make' command line.
+ * texinfo.test: Set SHELL on `make' command line.
+ * insh2.test: Set SHELL on `make' command line.
+ * empty.test: Rewrite @SHELL@ to /bin/sh.
+
+Tue Sep 22 01:20:00 1998 Tom Tromey <tromey@cygnus.com>
+
+ * ansi3.test: Use gcc and not gcc -traditional.
+
+Tue Sep 15 22:19:48 1998 Tom Tromey <tromey@cygnus.com>
+
+ * texinfo7.test: New file.
+
+Sun Aug 16 23:17:38 1998 Tom Tromey <tromey@cygnus.com>
+
+ * colon6.test: New file.
+
+Fri Aug 14 11:09:03 1998 Tom Tromey <tromey@cygnus.com>
+
+ * cond6.test: New file.
+
+Mon Aug 10 21:05:15 1998 Tom Tromey <tromey@cygnus.com>
+
+ * ansi3.test: New file.
+
+Sat Jul 18 00:27:26 1998 Tom Tromey <tromey@cygnus.com>
+
+ * recurs.test: New file.
+
+ * cond3.test: Changed to match recent fixes.
+
+Fri Jul 17 23:44:49 1998 Tom Tromey <tromey@cygnus.com>
+
+ * cond4.test, cond5.test: New files.
+
+Tue May 26 01:44:37 1998 Tom Tromey <tromey@cygnus.com>
+
+ * syntax.test: New file.
+
+Sun Apr 5 15:26:42 1998 Tom Tromey <tromey@cygnus.com>
+
+ * version3.test: Increased version number to ensure failure for a
+ long time to come.
+
+ * library.test: New file.
+
+ * lex2.test: Updated since lex error changed to warning.
+
+Fri Apr 3 13:04:50 1998 Tom Tromey <tromey@cygnus.com>
+
+ * colon5.test: New file.
+
+ * exdir2.test: New file.
+ * instdata.test: New file.
+
+Wed Mar 25 15:30:39 1998 Tom Tromey <tromey@cygnus.com>
+
+ * badopt.test: new file.
+ * version3.test: New file.
+
+Mon Mar 23 10:52:36 1998 Tom Tromey <tromey@cygnus.com>
+
+ * libobj8.test: New file.
+
+Fri Mar 20 00:32:16 1998 Tom Tromey <tromey@cygnus.com>
+
+ * lex2.test: New file.
+
+ * aclocalii.test: New file.
+
+ * javasubst.test: New file.
+
+Thu Mar 19 14:11:45 1998 Tom Tromey <tromey@cygnus.com>
+
+ * javaprim.test: New file.
+
+ * sinclude.test: New file.
+
+Wed Mar 18 17:15:22 1998 Tom Tromey <tromey@cygnus.com>
+
+ * java.test: New file.
+
+Sun Mar 8 15:35:14 1998 Tom Tromey <tromey@cygnus.com>
+
+ * colon4.test: New file.
+
+Fri Mar 6 21:17:10 1998 Tom Tromey <tromey@cygnus.com>
+
+ * colon3.test: Refined tests.
+
+Tue Feb 24 12:29:05 1998 Tom Tromey <tromey@cygnus.com>
+
+ * man.test: Removed.
+
+ * condman2.test: New file.
+
+Mon Feb 23 16:20:49 1998 Tom Tromey <tromey@cygnus.com>
+
+ * texinfo6.test: New file.
+
+Mon Feb 16 00:08:58 1998 Tom Tromey <tromey@cygnus.com>
+
+ * aclocali.test: New file.
+
+Fri Feb 13 00:36:38 1998 Tom Tromey <tromey@cygnus.com>
+
+ * texinfo5.test (info_TEXINFOS): New file.
+
+ * condman.test: New file.
+
+ * Makefile.am (distclean-local): Ignore rm return value.
+
+Thu Feb 12 21:00:34 1998 Tom Tromey <tromey@cygnus.com>
+
+ * unused.test: New file.
+
+ * whoami.test: New file.
+
+ * alpha.test: New file.
+
+Wed Feb 11 17:28:30 1998 Tom Tromey <tromey@cygnus.com>
+
+ * aclocal.test: New file.
+
+Thu Feb 5 13:22:17 1998 Tom Tromey <tromey@cygnus.com>
+
+ * cxxcpp.test: New file.
+
+Mon Dec 1 15:48:16 1997 Tom Tromey <tromey@cygnus.com>
+
+ * cond3.test: New file.
+
+Sat Nov 29 22:09:27 1997 Tom Tromey <tromey@cygnus.com>
+
+ * objc.test: New file.
+
+Sat Oct 25 00:04:04 1997 Tom Tromey <tromey@cygnus.com>
+
+ * libobj7.test: New file.
+
+Tue Oct 21 00:46:24 1997 Tom Tromey <tromey@cygnus.com>
+
+ * lex2.test: Removed; @LEXLIB@ no longer required.
+
+ * depacl2.test: Use -I, not --acdir.
+
+ * install.test: New file.
+ * ammissing.test: New file.
+
+Sun Sep 28 17:19:52 1997 Tom Tromey <tromey@cygnus.com>
+
+ * cxxnoc.test: Changed to reflect MKDEP change.
+
+Wed Sep 24 16:01:59 1997 Tom Tromey <tromey@cygnus.com>
+
+ * output5.test: New file.
+
+ * depend3.test: New file.
+
+Mon Aug 25 17:24:42 1997 Tom Tromey <tromey@cygnus.com>
+
+ * cygwin32.test: Use AM_EXEEXT, not AM_CYGWIN32.
+
+Tue Aug 5 20:33:33 1997 Tom Tromey <tromey@cygnus.com>
+
+ * libobj6.test: New file.
+
+Mon May 26 22:47:36 1997 Tom Tromey <tromey@cygnus.com>
+
+ * depend.test: Fixed test.
+
+Sat May 10 18:28:14 1997 Tom Tromey <tromey@cygnus.com>
+
+ * depend2.test: Fixed test; added another check.
+
+Sun May 4 15:47:24 1997 Tom Tromey <tromey@cygnus.com>
+
+ * xsource.test: New file.
+
+Tue Apr 29 19:08:47 1997 Tom Tromey <tromey@cygnus.com>
+
+ * cond.test, cond2.test: New files from Ian Taylor.
+
+Sun Apr 27 21:07:49 1997 Tom Tromey <tromey@cygnus.com>
+
+ * confsub.test: Fixed bug.
+
+Fri Apr 25 12:30:22 1997 Tom Tromey <tromey@cygnus.com>
+
+ * conf2.test: New file.
+
+Tue Apr 8 19:26:07 1997 Tom Tromey <tromey@cygnus.com>
+
+ * ansi.test, empty.test, exsource.test, insh2.test, man.test,
+ mkinst2.test, texinfo.test, texinfo2.test: Use $MAKE.
+
+ * defs (MAKE): Define.
+
+Mon Apr 7 17:35:49 1997 Tom Tromey <tromey@cygnus.com>
+
+ * version2.test: New file.
+
+Wed Apr 2 00:12:26 1997 Tom Tromey <tromey@cygnus.com>
+
+ * ldadd.test: New file.
+
+Fri Mar 28 23:36:04 1997 Tom Tromey <tromey@cygnus.com>
+
+ * stamph.test: New file.
+
+Thu Mar 27 18:10:47 1997 Tom Tromey <tromey@cygnus.com>
+
+ * lisp.test: New file.
+
+Sat Mar 22 01:14:03 1997 Tom Tromey <tromey@cygnus.com>
+
+ * cygwin32.test: New file.
+
+Thu Mar 20 00:34:33 1997 Tom Tromey <tromey@cygnus.com>
+
+ * exsource.test: Exit if not using GNU make.
+
+Tue Mar 18 22:36:34 1997 Tom Tromey <tromey@cygnus.com>
+
+ * remake2.test: Changed for `missing' support.
+
+Sun Mar 16 14:29:45 1997 Tom Tromey <tromey@cygnus.com>
+
+ * seenc.test: New file.
+
+ * checkall.test, noinst.test: Don't use bogus construct when
+ checking.
+
+ * libobj3.test, canon.test, target.test, spell2.test,
+ primary2.test, discover.test, lex2.test: Fixed to test what it
+ claims to test.
+
+Mon Mar 10 23:21:03 1997 Tom Tromey <tromey@cygnus.com>
+
+ * libobj.test, libobj2.test: Use AC_PROG_CC.
+
+ * confsub.test: Modified for definition of CONFIG_HEADER_FULL.
+
+ * cxxlibobj.test: New file.
+
+Wed Feb 26 13:05:42 1997 Tom Tromey <tromey@cygnus.com>
+
+ * tagsub.test: New file.
+
+Sun Feb 23 11:58:00 1997 Tom Tromey <tromey@cygnus.com>
+
+ * texinfo.test, texinfo2.test, texinfo3.test, info.test,
+ mdate.test, vtexi.test, canon2.test, mdate2.test, vtexi2.test:
+ Updated for new texinfo handling.
+
+ * texinfo4.test: New file.
+ * texinfo3.test: New file.
+
+Sat Feb 22 09:48:44 1997 Tom Tromey <tromey@cygnus.com>
+
+ * yaccpp.test: New file.
+
+Tue Feb 11 09:51:47 1997 Tom Tromey <tromey@cygnus.com>
+
+ * texinfo2.test: Fixed quoting bug. From Michael Brantley.
+
+Tue Feb 4 18:41:32 1997 Tom Tromey <tromey@cygnus.com>
+
+ * confsub.test: Check subdir/Makefile.in to make sure dependency
+ is correct.
+
+ * ansi2.test: ANSI2KNR dependency of all.
+
+Tue Dec 10 00:43:14 1996 Tom Tromey <tromey@cygnus.com>
+
+ * defun2.test: New file.
+ * subst.test: New file.
+
+Sun Dec 8 12:25:22 1996 Tom Tromey <tromey@cygnus.com>
+
+ * colneq2.test: New file.
+
+Sat Dec 7 12:52:45 1996 Tom Tromey <tromey@cygnus.com>
+
+ * output4.test: New file.
+ * output3.test: New file.
+ * remake2.test: New file.
+ * output2.test: New file.
+
+Fri Dec 6 19:00:31 1996 Tom Tromey <tromey@cygnus.com>
+
+ * output.test: New file.
+
+Thu Dec 5 18:23:17 1996 Tom Tromey <tromey@cygnus.com>
+
+ * remake.test: New file.
+ * colon3.test: New file.
+ * colon2.test: New file.
+ * cxxo.test: New file.
+
+Wed Dec 4 00:41:44 1996 Tom Tromey <tromey@cygnus.com>
+
+ * defs: Allow user to set interpreter via PERL environment
+ variable.
+
+ * Makefile.am (distclean-local): New target.
+
+Tue Dec 3 11:55:18 1996 Gordon Matzigkeit <gord@gnu.ai.mit.edu>
+
+ * dup.test, dup2.test: Modified, now that aclocal allows
+ acinclude.m4 to override any installed macro file.
+
+Mon Dec 2 22:44:16 1996 Gordon Matzigkeit <gord@gnu.ai.mit.edu>
+
+ * alllib.test: Removed from distribution, since LIBFILES are no
+ longer computed.
+
+Sun Nov 24 14:36:00 1996 Tom Tromey <tromey@cygnus.com>
+
+ * extra2.test: New file.
+
+Fri Nov 22 00:10:04 1996 Tom Tromey <tromey@cygnus.com>
+
+ * stdlib.test: New file.
+
+Thu Nov 21 22:51:35 1996 Tom Tromey <tromey@cygnus.com>
+
+ * confsub.test: Use AM_CONFIG_HEADER.
+
+Tue Nov 19 23:37:32 1996 Tom Tromey <tromey@cygnus.com>
+
+ * confvar2.test: New file.
+
+Fri Nov 15 00:09:18 1996 Tom Tromey <tromey@cygnus.com>
+
+ * ansi2.test: New file.
+
+ * libfiles.test: Removed (obsolete).
+
+ * libobj.test, canon4.test, libobj2.test, alllib.test,
+ ranlib.test: Fixed for Gord's changes to library handling.
+
+ * Many files: Use AC_PROG_CC to avoid error.
+
+Thu Oct 24 15:22:53 1996 Tom Tromey <tromey@cygnus.com>
+
+ * confvar.test: New file.
+ * ranlib.test: New file.
+
+Mon Oct 21 22:57:51 1996 Tom Tromey <tromey@cygnus.com>
+
+ * version.test: New file.
+
+Fri Oct 11 00:51:04 1996 Tom Tromey <tromey@cygnus.com>
+
+ * libobj5.test: New file.
+ * libobj4.test: New file.
+ * distdir.test: New file.
+ * lex2.test: New file.
+
+Sun Oct 6 11:00:44 1996 Tom Tromey <tromey@cygnus.com>
+
+ * acsilent.test: New file.
+ * req.test: New file.
+ * acinclude.test: New file.
+
+Sat Oct 5 11:31:38 1996 Tom Tromey <tromey@cygnus.com>
+
+ * discover.test: New file.
+
+ * mkinst2.test: Renamed from mkinstall2.test.
+
+ * symlink.test: New file.
+
+Thu Oct 3 19:55:23 1996 Tom Tromey <tromey@cygnus.com>
+
+ * vpath.test: New file.
+
+Mon Sep 30 08:34:07 1996 Tom Tromey <tromey@cygnus.com>
+
+ * comment2.test: New file.
+
+Mon Sep 23 00:23:34 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * spell3.test: New file.
+
+Sun Sep 22 14:42:09 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * depend2.test: New file.
+
+Sat Sep 21 14:01:10 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * primary2.test: New file.
+ * primary.test: New file.
+
+Fri Sep 20 09:39:27 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * confsub.test: New file.
+
+Mon Sep 16 00:05:52 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * spell2.test: New file.
+
+ * spell.test: New file.
+
+Thu Sep 12 14:57:49 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * implicit.test: New file.
+
+Wed Sep 11 13:57:10 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * colneq.test: New file.
+
+ * interp2.test: New file.
+
+Sun Sep 8 10:47:07 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * gnits.test: New file.
+
+Thu Sep 5 22:54:26 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * libobj3.test: New file.
+
+Tue Sep 3 20:57:38 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * block.test: New file.
+
+Mon Aug 26 23:04:01 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * alllib.test: New file.
+
+ * interp.test: New file.
+
+Mon Aug 12 13:58:55 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * libobj2.test: New file.
+
+ * order.test: New file.
+
+Sun Aug 11 00:10:42 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * cxxnoc.test: New file.
+
+ * cxxlink.test: Use AC_PROG_CXX.
+
+ * lex.test: Use AC_PROG_LEX, AC_DECL_YYTEXT.
+
+ * yacc.test: Use AC_PROG_YACC in configure.in.
+
+ * cxxlink.test: New file.
+
+ * yacc.test: Fixed test for new yacc code.
+
+Sat Aug 10 10:09:45 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * defun.test: New file.
+
+ * dup.test: New file.
+
+Fri Aug 9 09:18:07 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * canon4.test: New file.
+
+Thu Aug 8 10:47:45 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * exsource.test: New file.
+
+ * subdir2.test: New file.
+
+ * scripts.test: New file.
+
+Tue Aug 6 12:30:41 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * lex.test: New file.
+
+Mon Aug 5 01:03:03 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * obsolete.test: New file.
+
+ * Many files: Use AM_ macros, not fp_ macros.
+
+ * info.test: New file.
+
+Sun Aug 4 12:47:34 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * man.test: New file.
+
+ * acouttbs2.test: New file.
+
+ * libfiles.test: New file.
+
+ * comment.test: New file.
+
+ * tags.test: New file.
+
+ * vtexi2.test: New file.
+
+ * colon.test: New file.
+
+Sun Jul 28 11:43:00 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * defs (ACLOCAL): Added definition.
+
+ * depacl.test, depacl2.test, error.test: New tests for aclocal.
+
+Fri Jul 19 10:09:56 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * ansi.test: New file.
+
+Sun Jun 9 23:20:03 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * texinfo2.test: New file.
+
+Sat Jun 8 10:00:42 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * mkinstall2.test: New file.
+
+Fri Jun 7 18:17:11 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * yacc.test: New file.
+
+Sun Jun 2 09:04:52 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * dejagnu.test: New file.
+
+ * texinfo.test: New file.
+
+Thu May 23 09:58:48 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * fpinst2.test: New file.
+
+ * fpinstall.test: New file.
+
+Wed May 22 09:45:52 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * outdir.test: New file.
+
+Sat May 18 10:51:37 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * insh2.test: New file.
+
+Fri May 17 17:32:35 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * number.test: New file.
+
+ * defs, many .test files: Define PACKAGE and VERSION in
+ configure.in.
+
+ * package.test: New file.
+
+ * backsl.test: New file.
+
+Thu May 16 09:15:57 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * subdir.test: New file.
+
+Tue May 14 10:17:17 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * mdate2.test: New file, from report by Jim Meyering.
+
+ * canon3.test: New file.
+
+ * auxdir.test: New file.
+
+ * mkinstall.test: New file.
+
+ * extra.test: Reversed sense of test.
+
+Fri Apr 26 15:15:01 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * instman.test: New file.
+
+Thu Apr 25 17:12:30 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * noinst.test: New file
+
+ * exdir.test: Quoting change from Gord Matzigkeit.
+
+ * extra.test (EXTRA_PROGRAMS): New file.
+
+Tue Apr 9 22:55:07 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * target.test: New file.
+
+Wed Apr 3 15:10:54 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * canon2.test: New file
+
+ * insh.test: New file.
+
+Wed Mar 27 23:31:51 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * rulepat.test: New file.
+
+Sat Mar 16 08:37:36 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * empty.test: New file.
+
+Fri Mar 15 17:55:13 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * installsh.test: New file.
+
+Tue Mar 5 16:22:46 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * badprog.test: Rewrote.
+
+ * canon.test: New file.
+
+Mon Mar 4 21:08:37 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * exdir.test: New file.
+
+Fri Mar 1 17:23:53 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * depend.test: New file.
+
+ * badprog.test: New file.
+
+ * defs (AUTOMAKE): Pass --foreign.
+
+Thu Feb 29 20:23:42 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ More tests:
+ * prefix.test: New file.
+ * spelling.test: New file
+ * confincl.test: New file.
+ * Makefile.am (TESTS): Updated.
+
+Wed Feb 28 11:57:02 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * acoutqnl.test: New file.
+ * Makefile.am (TESTS): Include it.
+
+Tue Feb 27 10:52:58 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * Makefile.am (DIST_OTHER): Include "defs".
+
+ * defs (AUTOMAKE): Never relative to $srcdir.
+
+Mon Feb 26 23:14:08 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * libobj.test: Put AC_PROG_RANLIB in configure.in
+
+Mon Feb 19 08:22:22 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * proginst.test: New file.
+
+Tue Feb 13 18:54:39 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * libobj.test: New file.
+
+Mon Feb 12 17:05:48 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * acouttbs.test: New file.
+
+ * Makefile.am (DIST_OTHER): New variable.
+
+ * acoutnoq.test: New file.
+
+Sun Feb 11 16:39:14 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * checkall.test: Delay a little.
+
+ * Makefile.am (check-local): Print name of failing test.
+
+Sat Feb 10 17:08:39 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * checkall.test: New file.
+
+ * instexec.test: New file.
+
+ * mdate.test, vtexi.test, acoutput.test: New files.
+
+ * Started.
+
+-----
+
+Copyright 2012-2017 Free Software Foundation, Inc.
+
+Copying and distribution of this file, with or without modification, are
+permitted provided the copyright notice and this notice are preserved.
diff --git a/old/ChangeLog.00 b/old/ChangeLog.00
new file mode 100644
index 000000000..a15902f36
--- /dev/null
+++ b/old/ChangeLog.00
@@ -0,0 +1,2211 @@
+2000-12-29 Derek Price <derek.price@openavenue.com>
+
+ * automake.in (handle_dependencies): Switched the DEP_FILES
+ definition to be conditional on @AMDEP@.
+
+2001-02-03 Ville Laurikari <vlaurika@hutcs.cs.hut.fi>
+
+ * depcomp (aix): New side-effect dependency tracking mode, for
+ the C for AIX compiler.
+ * m4/depend.m4 (AM_DEPENDENCIES): Recreate `conftest.c' and
+ `conftest.h' for each test.
+
+2001-02-03 Tom Tromey <tromey@redhat.com>
+
+ * automake.texi (Dist): Updated to mention caveat of putting
+ directory in EXTRA_DIST and also providing a nice example of
+ removing the CVS dir.
+ From Ganesan Rajagopal.
+
+ * m4/depend.m4 (depcpp): Run tests in a subdir. Fixes report from
+ Bob Proulx.
+
+ * automake.in (scan_one_autoconf_file): Disable warning about
+ AM_PROG_LIBTOOL.
+
+ * automake.in (handle_configure): Don't modify variable which
+ aliases list element. Don't push @inputs onto the dist list.
+ Fixes colon7.test.
+ (initialize_per_input) [dist_dirs]: New variable.
+ (handle_dist_worker): Use global dist_dirs.
+ (handle_configure): Set dist_dirs entries at toplevel.
+
+2001-02-02 Gordon Sadler <gbsadler1@lcisp.com>
+
+ * automake.texi (Java Support): Added index, @section.
+
+2001-02-02 Pavel Roskin <proski@gnu.org>
+
+ * automake.in (scan_autoconf_traces): Restore trace messages.
+
+ * automake.in (handle_aclocal_m4): Fix stripping of the initial
+ "./" from the dependencies of aclocal.m4.
+ Reported by Ralf Corsepius.
+
+2001-02-01 Pavel Roskin <proski@gnu.org>
+
+ * aclocal.in: Rename "verbosity" to "verbose". Always prepend
+ "aclocal: " to the verbose output.
+
+ * automake.in: Remove all debugging messages.
+
+2001-01-31 Akim Demaille <akim@epita.fr>
+
+ * automake.in (add_depend2): Quote properly $obj and $source.
+
+2001-01-31 Akim Demaille <akim@epita.fr>
+
+ * depend2.am: Instead of replacing @PFX@ in $(@PFX@COMPILE), and
+ then replacing `$(@PFX@COMPILE)' for the files that need some
+ special flags, use only @COMPILE@. Similarly for @LTCOMPILE@.
+ Try to document this file.
+ * automake.in (add_depend2): Adjust to these changes.
+
+2001-01-31 Akim Demaille <akim@epita.fr>
+
+ * automake.in (%factored_dependencies): New.
+ (file_contents): Use it.
+ (handle_phony): Rename as...
+ (handle_factored_dependencies): this.
+ * subdirs.am: No need for convolved syntax to declare .PHONY.
+
+2001-01-31 Akim Demaille <akim@epita.fr>
+
+ * automake.in: maintainer-check fixes.
+
+2001-01-31 Akim Demaille <akim@epita.fr>
+
+ * automake.in (file_contents): Rewrite: instead of trying to parse
+ it line by line, first swallow it completely into $CONTENTS,
+ *then*, parse it *paragraph* by paragraph.
+
+2001-01-30 Akim Demaille <akim@epita.fr>
+
+ * automake.in (file_contents): Remove.
+ (file_contents_with_transform): Swap the order of the arguments,
+ and rename as...
+ (file_contents): this.
+ Adjust all uses.
+
+2001-01-30 Tom Tromey <tromey@redhat.com>
+
+ * automake.in (scan_one_autoconf_file): Don't mention
+ omit_dependencies.
+
+2001-01-29 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&scan_autoconf_config_files): Extract from
+ &scan_one_autoconf_file.
+ (&scan_one_autoconf_file): Use it.
+ (&scan_autoconf_traces): New.
+ ($scan_autoconf_files): Use it.
+
+2001-01-29 Akim Demaille <akim@epita.fr>
+
+ * texinfos.am, tags.am, subdirs.am, multilib.am, mans.am: Add a
+ .PHONY target.
+ * automake.in (handle_texinfo, handle_man_pages, handle_multilib)
+ (handle_etags, handle_subdirs): Don't push into @phony.
+
+2001-01-29 Akim Demaille <akim@epita.fr>
+
+ * automake.in (scan_one_autoconf_file): Correctly recognize
+ configure.ac.
+
+2001-01-29 Akim Demaille <akim@epita.fr>
+
+ * automake.in (handle_tests_dejagnu): New, extracted from...
+ (handle_tests): here. Use `.PHONY:'.
+
+2001-01-29 Akim Demaille <akim@epita.fr>
+
+ * automake.in (handle_phony): Sort.
+ (file_contents_with_transform): Catch `.PHONY:'.
+ (handle_tests): Instead dumping the hard coded target check-TESTS
+ and registering its .PHONYsm, get them from...
+ * check.am: here, new file.
+
+2001-01-29 Akim Demaille <akim@epita.fr>
+
+ * automake.in (add_depend2): Use &transform.
+
+2001-01-29 Akim Demaille <akim@epita.fr>
+
+ * automake.in (handle_tags): Use &transform.
+ (am_error, am_line_error, am_conf_error, read_am_file): Use
+ directly arrays in strings, no need for &join.
+ Require Perl 5.
+ * Makefile.am (maintainer-check): Use grep -w when looking for
+ words.
+
+2001-01-29 Akim Demaille <akim@epita.fr>
+
+ * automake.in (prog_error): New.
+ Spread its use.
+
+2001-01-29 Akim Demaille <akim@epita.fr>
+
+ * automake.in (handle_single_transform_list): if (@list) { foreach
+ (@list) ...} can be written as a simple `foreach' loop.
+
+2001-01-29 Akim Demaille <akim@epita.fr>
+
+ * automake.in (define_standard_variables): Use &transform instead
+ of build_rx.
+
+2001-01-29 Akim Demaille <akim@epita.fr>
+
+ * automake.in (handle_texinfo): Use the new $texinfodir instead of
+ the removed $texinfo_tex.
+
+2001-01-29 Akim Demaille <akim@epita.fr>
+
+ * automake.in (handle_libraries, handle_ltlibraries): Use
+ &transform.
+
+2001-01-29 Akim Demaille <akim@epita.fr>
+
+ * automake.in (handle_programs) <xexe>: Remove, replaced by
+ `exeext'.
+ Use it, and &transform.
+
+2001-01-29 Akim Demaille <akim@epita.fr>
+
+ * automake.in (get_object_extension) <$default_includes>: New.
+ Use it and &transform.
+
+2001-01-28 Tom Tromey <tromey@redhat.com>
+
+ * automake.in (variable_value_as_list_worker): Handle entries in
+ %am_var_defs. Fixes listval.test.
+
+2001-01-26 Akim Demaille <akim@epita.fr>
+
+ * automake.in (handle_texinfo): Don't use $conf_pat, just
+ $conf_dir to transform MDDIR since now &transform handles the
+ escaping of RE special characters by itself.
+
+2001-01-24 Akim Demaille <akim@epita.fr>
+
+ * m4/depend.m4 (AM_DEPENDENCIES): Don't leave `AC_PROG_CC' etc. in
+ clear.
+ * m4/init.m4: Likewise.
+ * m4/sanity.m4: s/conftestfile/conftest.file/.
+
+2001-01-24 Tom Tromey <tromey@redhat.com>
+
+ * automake.in (handle_libraries): Use $configure_ac; typo fix.
+
+ * automake.in (transform): Quote substitution.
+
+2001-01-21 Alexandre Duret-Lutz <duret_g@epita.fr>
+ Tom Tromey <tromey@redhat.com>
+
+ * automake.in (obsolete_rx): Match whole macro names, not
+ substrings.
+ * aclocal.in (obsolete_rx): Likewise.
+
+2001-01-21 Tom Tromey <tromey@redhat.com>
+
+ * automake.texi: Changed dir category.
+
+2001-01-18 Akim Demaille <akim@epita.fr>
+
+ * automake.in (handle_texinfo): Use &transform, and transform
+ CONFIGURE_AC.
+ Reported by Lars Hecking, and diagnosed by Raja R Harinath.
+
+2001-01-16 Akim Demaille <akim@epita.fr>
+
+ Let Automake support `configure.ac'.
+
+ * automake.in: In the comments, prefer `configure.ac' to
+ `configure.in'.
+ When using &am_conf_error, don't repeat `in configure.in', since
+ the function already reports it.
+ When referring to `configure.in' use `$configure_ac' instead.
+ (configure_ac): New global variable.
+ (scan_configure, scan_one_configure_file): Rename as...
+ (scan_autoconf_files, scan_one_autoconf_file): this.
+ (scan_autoconf_files): Compute $configure_ac.
+ (transform): New function.
+ (handle_configure): Use it to transform CONFIGURE_AC in
+ `remake.am' and in `remake-hdr.am'.
+ (common_files): Also consider `configure.ac'.
+ Use consistently single quotes.
+ * aclocal.in (configure_ac): New variable.
+ Use it.
+ * texi-vers.am: Depend on CONFIGURE_AC not configure.in.
+ * remake.am: Likewise.
+ * remake-hdr.am: Likewise.
+
+2001-01-16 Akim Demaille <akim@epita.fr>
+
+ * m4/multi.m4: Remove the hairy useless quotation of `$'.
+ Simplify `ifelse([$2],,,[$2])' into... `$2'!
+ * m4/minuso.m4: Don't use changequote!
+ * m4/cond.m4: Fix quotation.
+ * m4/sanity.m4: Follow the Autoconf coding style.
+ * m4/missing.m4 (AM_MISSING_INSTALL_SH): Use a for loop.
+ * m4/depend.m4 (AM_DEPENDENCIES): Fix quotation issues.
+ Use AC_CACHE_CHECK.
+
+2001-01-15 Tom Tromey <tromey@redhat.com>
+
+ * automake.in (handle_single_transform_list): Don't print rule
+ here when source is in subdir and object is not. Fixes
+ subobj4.test.
+
+ * automake.in (handle_single_transform_list): Correctly compute
+ $nonansi_obj. Fixes cxxansi.test.
+
+ * automake.texi (Man pages): Updated to account for man1_MANS,
+ etc.
+
+2001-01-13 Steve Robbins <smr@debian.org>
+ Tom Tromey <tromey@redhat.com>
+
+ * aclocal.in (scan_configure): Don't recognize macro assignments
+ or AC_SUBSTs.
+ (add_file): Likewise.
+
+2001-01-13 Kevin Ryde <user42@zip.com.au>
+
+ * automake.in (handle_ltlibraries): Omit -rpath from
+ check_LTLIBRARIES, as per noinst_LTLIBRARIES.
+
+2001-01-11 Tom Tromey <tromey@redhat.com>
+
+ * depcomp (case gcc3): Use -MD, not -M.
+
+2001-01-10 Tom Tromey <tromey@redhat.com>
+
+ * depcomp: Handle gcc 3.
+
+2000-12-23 Tom Tromey <tromey@redhat.com>
+
+ * configure.in: Updated to 1.4c for cvs.
+
+ * configure.in: Updated to 1.4b and released.
+
+ * config.guess, config.sub, texinfo.tex: New versions.
+
+ * automake.in (handle_dist_worker): Always define DIST_SUBDIRS.
+ Re-fixes pr87.test.
+
+ * subdirs.am (maintainer-clean-recursive): Use DIST_SUBDIRS for
+ distclean and maintainer-clean.
+ * automake.texi (Top level): Document use of DIST_SUBDIRS.
+
+ From Rusty Ballinger:
+ * automake.in (handle_java): Don't skip `noinst' prefix.
+
+ * automake.texi (Invoking aclocal): Mention ## comments.
+
+2000-12-22 Tom Tromey <tromey@redhat.com>
+
+ From Raja R Harinath:
+ * automake.in (libtoolize_sometimes): New global.
+ (initialize_global_constants): Added libtoolize_sometimes to
+ common_files.
+
+ * m4/depend.m4 (AM_SET_DEPDIR): Ignore errors when running rmdir.
+
+ * m4/depend.m4 (AM_SET_DEPDIR): Remove .deps directory when done.
+
+2000-12-21 Tom Tromey <tromey@redhat.com>
+
+ * automake.texi (Tags): Document GTAGS target.
+ * tags.am (GTAGS): New target.
+
+ * automake.in (libtoolize_files): Removed ltconfig.
+ (initialize_global_constants): Added ltconfig to common_files.
+
+2000-12-21 Kevin Ryde <user42@zip.com.au>
+
+ * automake.in (handle_footer): Generate .SUFFIXES target when user
+ defines suffixes but automake does not.
+
+2000-12-20 Marc Espie <espie@openbsd.org>
+
+ * automake.in (handle_texinfo): Make path of $vtexi explicit in
+ dependency.
+ * texi-vers.am: Likewise.
+
+2000-12-20 Tom Tromey <tromey@redhat.com>
+
+ From Kevin Ryde:
+ * automake.in (handle_footer): Always push user suffixes at the
+ start of .SUFFIXES:.
+ * automake.texi (Suffixes): Updated to reflect new suffix
+ handling.
+
+2000-12-18 Tom Tromey <tromey@redhat.com>
+
+ * automake.in (handle_built_sources): Removed.
+ (handle_merge_targets): Handle BUILT_SOURCES.
+ * automake.texi (Sources): Updated documentation of
+ BUILT_SOURCES.
+
+2000-12-17 Tom Tromey <tromey@redhat.com>
+
+ * m4/protos.m4: Always do header checks.
+
+ * automake.in (handle_ltlibraries): Check for LDFLAGS variables
+ before using values.
+
+ * automake.in (handle_ltlibraries): Allow _LDFLAGS to be
+ conditionally defined. Fixes PR automake/77 and ldflags.test.
+
+2000-11-25 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (file_contents_with_transform): Added file name and
+ line number to error report.
+ (MACRO_PATTERN, BOGUS_MACRO_PATTERN): Leading spaces are ok.
+
+2000-11-23 Pavel Roskin <proski@gnu.org>
+
+ * m4/regex.m4 (AM_WITH_REGEX): This macro was broken because
+ of M4 underquoting.
+ * m4/ccstdc.m4 (AC_PROG_CC_STDC): Added some M4 quotes.
+ * m4/dmalloc.m4 (AM_WITH_DMALLOC): Likewise.
+ * m4/lispdir.m4 (AM_PATH_LISPDIR): Likewise.
+ * m4/maintainer.m4 (AM_MAINTAINER_MODE): Likewise.
+ * m4/multi.m4 (AM_WITH_DMALLOC): Likewise.
+ * m4/python.m4 (AM_PATH_PYTHON): Likewise.
+ * m4/strtod.m4 (AM_FUNC_STRTOD): Likewise.
+
+2000-11-23 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (require_file_internal): Pass $file as second
+ argument to maybe_push_required_file. Fixes PR automake/87.
+
+2000-11-18 Tom Tromey <tromey@cygnus.com>
+
+ * m4/depend.m4 (AM_DEPENDENCIES): Redirect `$am_depcomp' stdout to
+ /dev/null. From Paul Martinolich.
+
+2000-11-16 Morten Eriksen <mortene@sim.no>
+
+ * aclocal.in (write_aclocal): Set ``binmode'' after file has been
+ opened, otherwise it has no effect.
+
+2000-10-23 Morten Eriksen <mortene@sim.no>
+
+ * aclocal.in (write_aclocal): Don't write aclocal.m4 with
+ CRLFs. This circumvents a bug in Cygwin bash.
+
+ * automake.in (generate_makefile): Don't write Makefile.in
+ files with CRLFs, as it causes problems for the dependency-file
+ extraction in AM_OUTPUT_DEPENDENCY_COMMANDS.
+
+2000-10-19 Alex Hornby <alex@anvil.co.uk>
+
+ * automake.in (handle_merge_targets): Allow parallel install
+ with forced relink.
+
+2000-10-19 Akim Demaille <akim@epita.fr>
+
+ * subdir4.test (depcomp): Don't create it, defs does.
+
+2000-10-17 Pavel Roskin <proski@gnu.org>
+
+ * automake.in (handle_aclocal_m4): exclude aclocal.m4 and
+ acinclude.m4 from the dependencies of aclocal.m4 to avoid
+ circular and duplicated dependencies. Strip "./" from the
+ dependencies.
+
+2000-10-17 Lars J. Aas <larsa@sim.no>
+
+ * aclocal.in (write_aclocal): Set up aclocal.m4 header with
+ normal comments (#) instead of m4 dnl-type comments.
+
+2000-10-17 Alex Hornby <alex@anvil.com>
+
+ * depcomp: Altered sed clause to strip of inclusion depth
+ numbers generated by cpp. Also output in gcc style.
+
+2000-10-16 Morten Eriksen <mortene@sim.no>
+
+ * depcomp (msvisualcpp): New dependency tracking mode, for
+ Microsoft Visual C++.
+
+2000-10-16 Morten Eriksen <mortene@sim.no>
+
+ * depcomp: Fix a bug in SGI dependency tracking mode with source
+ files which do not dependend on any other source files.
+
+2000-10-16 Rodney Brown <RodneyBrown@mynd.com>
+
+ * aclocal.in, aclocal.m4: Standardize FSF Copyright statements.
+ * automake.in, automake.texi: Likewise.
+ * clean-kr.am, clean.am: Likewise.
+ * comp-vars.am: Likewise.
+ * compile, compile.am: Likewise.
+ * data-clean.am: Likewise.
+ * data.am: Likewise.
+ * dejagnu.am: Likewise.
+ * depcomp: Likewise.
+ * depend.am, depend2.am: Likewise.
+ * dist-vars.am, dist.am: Likewise.
+ * elisp-comp: Likewise.
+ * footer.am: Likewise.
+ * header-vars.am, header.am: Likewise.
+ * java-clean.am java.am: Likewise.
+ * kr-extra.am: Likewise.
+ * library.am: Likewise.
+ * libs-clean.am, libs.am: Likewise.
+ * libtool.am: Likewise.
+ * lisp-clean.am lisp.am: Likewise.
+ * ltlib-clean.am ltlib.am: Likewise.
+ * ltlibrary.am: Likewise.
+ * m4/Makefile.in: Likewise.
+ * m4/strtod.m4: Likewise.
+ * mans-vars.am, mans.am: Likewise.
+ * mdate-sh: Likewise.
+ * missing: Likewise.
+ * multilib.am: Likewise.
+ * program.am: Likewise.
+ * progs-clean.am, progs.am: Likewise.
+ * python-clean.am, python.am: Likewise.
+ * remake-hdr.am, remake.am: Likewise.
+ * scripts.am: Likewise.
+ * subdirs.am: Likewise.
+ * tags-clean.am, tags.am: Likewise.
+ * texi-vers.am: Likewise.
+ * texinfos.am: Likewise.
+ * ylwrap: Likewise.
+
+2000-10-09 Pavel Roskin <proski@gnu.org>
+
+ * m4/init.m4 (AM_INIT_AUTOMAKE): Don't rely on variable
+ assignments changing $? - it's broken in ash-0.2.
+ * m4/missing.m4 (AM_MISSING_HAS_RUN): Likewise.
+
+ * automake.in (handle_aclocal_m4): If ACLOCAL_M4_SOURCES is
+ defined use it as the list of M4 files aclocal.m4 depends on.
+
+2000-10-06 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * aclocal.in (add_file): Strip comments while scanning for
+ macro dependencies.
+
+2000-09-15 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (initialize_global_constants): End the
+ result of dist-bzip2 with tar.bz2, not bz2.
+
+2000-08-30 Tom Tromey <tromey@cygnus.com>
+
+ Fix for PR automake/72:
+ * automake.in (initialize_per_input): Define `need_link'.
+ (finish_languages): Use need_link.
+ (handle_source_transform): Set need_link if required.
+
+2000-08-28 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (yacc, yaccxx, lex, lexxx): Set `derived-autodep'
+ key.
+ (register_language): Default the `derived-autodep' option.
+ (handle_single_transform_list): Add to %dep_files if language has
+ `derived-autodep' set. Re-fixes lex4.test.
+
+2000-08-27 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_single_transform_list): Only add to
+ %dep_files if language is found and supports automatic dependency
+ tracking. Fixes PR automake/75.
+
+ * automake.in (am_primary_prefixes): Don't set `valid' for
+ configure variables that don't satisfy the other constraints.
+ Fixes PR automake/68.
+
+2000-04-14 Victor V. Vengerov <vvv@oktet.ru>
+
+ Fix for PR automake/67.
+ * automake.in (handle_multilib): remove .am suffix in fragment
+ name passed to file_contents.
+ * m4/multi.m4: Add missing ')' in AC_ARG_ENABLE invocation.
+ Remove external quotes in first arg of AC_OUTPUT_COMMANDS.
+ Remove unnecessary "rel-to-top-srcdir" before config-ml.in.
+
+2000-08-26 Tom Tromey <tromey@cygnus.com>
+
+ * subdirs.am (maintainer-clean-recursive): Always run clean rules
+ in `.' after all subdirs. Fixes PR automake/3 and PR automake/24.
+
+ * automake.in (handle_man_pages): Generate install targets for man
+ even if man_MANS not defined. From `danpb'. Fixes PR automake/73.
+
+ * m4/depend.m4 (depcpp): Use `-o conftest.o'.
+ Fix for PR automake/74. From js pendry.
+
+2000-08-20 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * depcomp (gcc): Support DOS-style absolute file names with drive
+ letters.
+
+2000-08-06 Jim Meyering <meyering@lucent.com>
+
+ * automake.in (handle_dependencies): Set $require_file_found{'depcomp'}
+ if the depcomp file exists, before calling require_config_file on
+ `depcomp'. This makes require_file_internal skip its buggy existence
+ test that would make automake fail (with `required file `lib/depcomp'
+ not found') when AC_CONFIG_AUX_DIR is not set.
+
+ This change change does not fix the existing bug where, if `depcomp'
+ is not present in the build directory (at the top level), automake
+ still gives the inaccurate diagnostic about *lib*/depcomp rather
+ than ./depcomp.
+
+2000-08-05 Jim Meyering <meyering@lucent.com>
+
+ * m4/header.m4 (AM_CONFIG_HEADER): Fix typo in last change:
+ add missing closing bracket and closing parenthesis.
+ Don't quote the first argument to AC_OUTPUT_COMMANDS.
+ Backslash-escape the backquotes and `$' in `am_indx'-incrementing stmt.
+
+2000-08-04 Tom Tromey <tromey@cygnus.com>
+
+ Idea from Nicolas Thiery:
+ * automake.texi (Tests): Document DEJATOOL as a list.
+ * dejagnu.am (RUNTESTDEFAULTFLAGS): Use $$tool, not $(DEJATOOL).
+ (check-DEJAGNU): Run runtest in a loop.
+
+2000-08-02 Akim Demaille <akim@epita.fr>
+
+ * m4: Quote properly the name of the macros being defined.
+ Use `#' instead of `dnl' where appropriate.
+ * m4/header.m4 (AM_CONFIG_HEADER): Get rid of changequote, just
+ quote.
+ Don't quote passive characters.
+ Pull the AC_PREREQ outside the macro.
+ * m4/init.m4: Pull the AC_PREREQ outside the macro.
+
+2000-07-28 Tom Tromey <tromey@cygnus.com>
+
+ * lisp.am (uninstall-@DIR@LISP): Prefix file with $(DESTDIR).
+ From Bruno Haible.
+
+2000-07-13 Kevin Ryde <user42@zip.com.au>
+
+ * automake.in (am_install_var): Apply the $(EXEEXT) hack to
+ EXTRA_PROGRAMS as well as other _PROGRAMS.
+
+2000-07-02 Jim Meyering <meyering@lucent.com>
+
+ * automake.in (scan_one_configure_file): Recognize AC_LIBOBJ.
+
+2000-06-19 Paolo Bonzini <bonzini@gnu.org>
+
+ * texi-vers.am: define UPDATED-MONTH variable (for an example, see
+ GNU make's manual)
+
+2000-06-02 Morten Eriksen <mortene@sim.no>
+
+ * depcomp: workaround for problem with SGI IRIX sed (it can only
+ handle lines of up to 8192 characters, the rest of the line will
+ be mangled).
+
+2000-05-31 Morten Eriksen <mortene@sim.no>
+
+ * depcomp: tell SGI MIPSpro compilers to generate dependencies
+ through the pre-processor (only CVS libtool has the -Wc option
+ yet).
+
+2000-05-15 Brendan O'Dea <bod@compusol.com.au>
+
+ * missing: Add support for `help2man'.
+
+2000-05-11 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_tests): Work correctly if TESTS is empty;
+ print nothing if it is. From Kevin Ryde.
+
+2000-05-08 Tom Tromey <tromey@cygnus.com>
+
+ * automake.texi (Texinfo): Mention vers*.texi.
+
+2000-05-04 Akim Demaille <akim@epita.fr>
+
+ AM_INIT_AUTOMAKE is no longer optional, so don't look for
+ `VERSION=' and `PACKAGE='.
+ * automake.in (seen_package, seen_version): Remove initializations of
+ unnecessary variables.
+ (scan_one_configure_file): Don't set them.
+ (scan_configure): Don't use them.
+
+2000-05-01 Akim Demaille <akim@epita.fr>
+
+ * m4/init.m4 (AC_PROVIDE_IFELSE): If it is not defined, do it.
+ (AM_INIT_AUTOMAKE): Update the writing conventions.
+ Quote the arguments properly.
+ Add a few missing `dnl'.
+ Use AC_PROVIDE_IFELSE.
+
+2000-04-26 Jim Meyering <meyering@lucent.com>
+
+ * automake.in (scan_one_configure_file): Handle the AC_CONFIG_FILES
+ macro. Based on a patch from Harlan Stenn.
+
+2000-04-13 Akim Demaille <akim@epita.fr>
+
+ * compile: Remove unnecessary double quotes in assignments.
+
+2000-04-13 Akim Demaille <demaille@epita.fr>
+
+ * automake.in (scan_one_configure_file): Also recognize
+ AC_CONFIG_HEADERS.
+ Remove trailing blanks.
+
+2000-04-05 Tom Tromey <tromey@cygnus.com>
+
+ * header-vars.am (DESTDIR): Commented out definition.
+
+ * automake.in (require_file_internal): Pass --copy to libtoolize
+ if automake was run with `--copy'.
+
+2000-03-22 Tom Tromey <tromey@cygnus.com>
+
+ * automake.texi (Uniform): Fix definition of pkglibdir.
+ From thi <ttn@revel.glug.org>.
+
+2000-03-19 Tom Tromey <tromey@cygnus.com>
+
+ * aclocal.in (parse_arguments): Copyright 2000.
+ (write_aclocal): Likewise.
+ * automake.in (parse_arguments): Copyright 2000.
+ (initialize_global_constants): Likewise.
+
+ * automake.in (generate_makefile): Call handle_dist after
+ handle_dependencies and handle_tests. Fixes subobj3.test and
+ pr19.test regressions.
+
+2000-03-19 Gordon Matzigkeit <gord@fig.org>
+
+ * depend2.am (@EXT@.o): Look for the source file in srcdir as well
+ as the current directory.
+ (@EXT@.lo): Likewise.
+
+2000-03-19 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
+
+ * automake.in (handle_data): Pass -candist instead of
+ -defaultdist, for the compatibility.
+
+2000-03-19 Tom Tromey <tromey@cygnus.com>
+
+ Fix for test nodepcomp.test:
+ * automake.in (require_file_internal): Use readlink on symlinks.
+ Only unlink file if we are going to try to add it again.
+ (handle_dependencies): Require `depcomp' here.
+ (scan_configure): Don't require `depcomp'.
+
+2000-03-16 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
+
+ * automake.in (handle_configure): Remove $(BUILT_SOURCES) from
+ the rule to remake Makefile, whether $use_dependencies is true
+ or not. This was a historical one and doesn't make sense any
+ longer.
+
+2000-03-19 Tom Tromey <tromey@cygnus.com>
+
+ More for PR automake/38:
+ * automake.texi (Invoking Automake): Document --force-missing.
+ * automake.in (force_missing): New global.
+ (parse_arguments): Recognize --force-missing.
+ (initialize_global_constants): Document --force-missing.
+ (require_file_internal): Handle --force-missing.
+
+ Fix for PR automake/38:
+ * automake.in (require_file_internal): Check for and handle
+ dangling symlinks. Fixes symlink2.test.
+
+ Fix for PR automake/45:
+ * automake.texi (configure): Mention requirement to run
+ AM_INIT_AUTOMAKE.
+ (Requirements): Removed most text.
+ * automake.in (seen_init_automake): New global.
+ (scan_configure): Error if AM_INIT_AUTOMAKE not seen.
+ (scan_one_configure_file): Don't support AM_INIT_GUILE_MODULE.
+ Set seen_init_automake if needed.
+
+ Fix for PR automake/41:
+ * automake.in (require_file_found): New global.
+ (require_file_internal): Set require_file_found entry.
+ (handle_texinfo): Require file any number of times.
+
+ * automake.in (handle_dist_worker): Exit if `cp' fails. Fixes
+ install2.test.
+
+ * tags.am: Don't reference $$here. Report from Sven Verdoolaege.
+
+2000-03-13 Alexandre Oliva <oliva@lsd.ic.unicamp.br>
+
+ * m4/missing.m4: Print the backtick in a way that won't cause
+ autoconf CVS to emit any warnings.
+
+2000-03-01 Jim Meyering <meyering@lucent.com>
+
+ * automake.in (handle_dist_worker) [generating rules for distdir]:
+ Don't use `ln' (which was just a space optimization anyway) to
+ populate $(distdir). Otherwise, the dist rules that change
+ permissions would end up affecting the master sources.
+ * texinfos.am (dist-info): Likewise.
+
+2000-02-13 Jim Meyering <meyering@lucent.com>
+
+ * automake.in (generate_makefile): Detect write/close failure.
+
+2000-02-02 Assar Westerlund <assar@sics.se>
+
+ * automake.in (handle_single_transform_list): do not use $< which
+ is not handled by all non-GNU makes. Instead do explicit sh code
+ testing for the file in this directory and srcdir. Based on a
+ suggestion by Alexandre Oliva <oliva@lsd.ic.unicamp.br>
+
+2000-01-12 Tom Tromey <tromey@cygnus.com>
+
+ * m4/lispdir.m4: Added --with-lispdir argument processing.
+ From Kevin Dalley.
+
+2000-01-06 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_configure): Don't check for
+ AC_PROG_MAKE_SET.
+ (scan_configure): Check for AC_PROG_MAKE_SET.
+
+ * header-vars.am (@SET_MAKE@): Added.
+ * subdirs.am (@SET_MAKE@): Removed. Report from Motoyuki
+ Kasahara.
+
+1999-12-19 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_dist_worker): Expand DIST_COMMON under all
+ conditions.
+ (require_file_internal): Corrected arguments to second invocation
+ of maybe_push_required_file.
+
+ Fix for PR automake/9:
+ * automake.in (make_dirs, make_dirs_set): New globals.
+ (is_make_dir): New function.
+ (handle_configure): Use it.
+ (require_file_internal): Push file if there is no Makefile in its
+ directory.
+ (initialize_per_input): Initialize handle_dist_run.
+ (push_dist_common): Inspect handle_dist_run.
+ (handle_dist): Set handle_dist_run. Push items from
+ configure_dist_common onto dist_common if appropriate.
+ (configure_dist_common): New global.
+ (scan_configure): Set it.
+ (maybe_push_required_file): New function.
+ (require_file_internal): Use it.
+
+ * automake.in (handle_dist_worker): Scan DIST_COMMON to see if
+ more subdirs are defined. From Axel Belinfante. Fixes
+ PR automake/2.
+
+1999-12-18 Tom Tromey <tromey@cygnus.com>
+
+ Partial fix for PR automake/40:
+ * lisp.am (install-@DIR@LISP): Handle nobase_ case.
+ (uninstall-@DIR@LISP): Likewise.
+ * header.am (install-@DIR@HEADERS): Handle nobase_ case.
+ (uninstall-@DIR@HEADERS): Likewise.
+ * data.am (install-@DIR@DATA): Handle nobase_ case.
+ (uninstall-@DIR@DATA): Likewise.
+ * automake.in (am_primary_prefixes): Recognize `nobase_' prefix.
+ (am_install_var): Recognize and handle `nobase_' prefix.
+
+1999-12-17 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (get_object_extension): Added space before `-I.'.
+ Report from Ralf Corsepius.
+
+1999-12-15 Tom Tromey <tromey@cygnus.com>
+
+ * aclocal.in: Don't pass $acdir to scan_m4_files.
+ (parse_arguments): Push $acdir on end of dirlist.
+ (scan_file): Don't warn if duplicate macro seen.
+
+1999-12-13 Tom Tromey <tromey@cygnus.com>
+
+ Fix for PR automake/30 and PR automake/23. Fixes test
+ suffix3.test.
+ * automake.in (initialize_per_input): Initialize
+ source_suffix_pattern.
+ (derive_suffix): New function.
+ (handle_single_transform_list): Call it.
+
+ * automake.in (add_depend2): Handle the no-dependency-tracking
+ case. Fixes test suffix2.test.
+
+ * depcomp (tmpdepfile): [case sgi] Added missing `fi'.
+
+ * automake.in (get_object_extension): Fixed quoting on
+ -I$(srcdir).
+
+ * depend2.am: Removed erroneous comment.
+
+ * automake.texi (Program variables): Document nostdinc.
+ (Options): Likewise.
+ * automake.in (get_object_extension): Respect nostdinc option.
+ (handle_options): Recognize nostdinc.
+ * comp-vars.am (DEFS): Use @DEFAULT_INCLUDES@ as sole
+ substitution.
+
+ * automake.in (read_am_file): Allow conditional includes. Fixes
+ test condincl.test.
+
+ * depcomp: Handle case on SGI when libtool is `yes'.
+ * depend2.am (@EXT@.o): Set libtool.
+ (@EXT@.lo): Likewise.
+ (@EXT@.obj): Likewise.
+
+ * depcomp: Unify dashmstdout and dashXmstdout cases. Move hp case
+ after gcc case.
+
+1999-12-13 Pavel Roskin <pavel_roskin@geocities.com>
+
+ * automake.in (add_depend2): substitute $rule in the rules
+ for individual files. Fixes test specflags5.test.
+
+1999-12-12 Tom Tromey <tromey@cygnus.com>
+
+ * m4/depout.m4 (AM_OUTPUT_DEPENDENCY_COMMANDS): Run mkinstalldirs
+ to create directories. Fixes test subobj3.test.
+
+1999-12-10 Tom Tromey <tromey@cygnus.com>
+
+ * m4/depout.m4 (AM_OUTPUT_DEPENDENCY_COMMANDS): Don't print
+ message when creating .deps files.
+
+ * automake.in (initialize_global_constants): If unreadable by
+ owner, make it readable by owner regardless of number of links.
+ Fixes more of install2.test.
+
+ * missing: Try to see if gnutar or gtar exist before invoking
+ them.
+
+ * m4/missing.m4 (AM_MISSING_INSTALL_SH): Remove ${SHELL} from
+ install_sh value. Look for install-sh and install.sh in a
+ somewhat more sensible way. Fixes test install2.test. Partially
+ from Jim Meyering.
+
+1999-12-09 Pavel Roskin <pavel_roskin@geocities.com>
+
+ * m4/missing.m4: remove redundant backquote
+
+1999-11-23 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (initialize_global_constants): Use `bzip2 -9', not
+ `bzip --best' Report from Jim Meyering.
+
+1999-11-22 Tom Tromey <tromey@cygnus.com>
+
+ * m4/missing.m4 (AM_MISSING_INSTALL_SH): Don't take argument.
+ * m4/init.m4 (AM_INIT_AUTOMAKE): Don't pass argument to
+ AM_MISSING_INSTALL_SH.
+ * automake.in (scan_one_configure_file): Reverted previous
+ change.
+
+ * automake.in (scan_one_configure_file): Define `install_sh'
+ configure variable when AM_INIT_AUTOMAKE seen. Report from Jim
+ Meyering.
+
+ * automake.in (handle_single_transform_list): Generate explicit
+ rule for subdir objects. Fixes new addition to subobj.test.
+
+ * automake.in (handle_lib_objects_cond): Allow LIBOBJS to be
+ defined by AC_SUBST. Fixes ltlibobjs.test.
+
+ Fix for sourcesub.test:
+ * automake.in (handle_single_transform_list): Added `var'
+ argument. If config sub found, give error.
+ (handle_source_transform): Updated for new
+ handle_source_transform.
+
+ * py-compile: New file.
+ * m4/Makefile.am (m4data_DATA): Added python.m4.
+ * m4/python.m4: New file.
+ * automake.texi (Uniform): Mention PYTHON.
+ (Python): New node.
+ * Makefile.am (amfiles): Added python.am, python-clean.am.
+ (dist_script_DATA): Added py-compile.
+ * python.am: New file.
+ * python-clean.am: New file.
+ * automake.in (seen_pythondir): New global.
+ (generate_makefile): Call handle_python.
+ (handle_python): New function.
+ (scan_one_configure_file): Set seen_pythondir if AM_PATH_PYTHON
+ seen.
+ (am_install_var): Special-case PYTHON like JAVA.
+ (scan_configure): Check for py-compile.
+ (initialize_global_constants): Added py-compile to @common_files.
+
+ * ltlib.am (install-@DIR@LTLIBRARIES): Added missing space.
+
+1999-11-21 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (finish_languages): Only generate suffix rule when
+ not doing dependency tracking.
+
+ * m4/init.m4 (AM_INIT_AUTOMAKE): Use AM_MISSING_INSTALL_SH.
+ * m4/missing.m4 (AM_MISSING_INSTALL_SH): New macro.
+
+ * depend2.am: Use @SOURCE@, @OBJ@, @LTOBJ@, @OBJOBJ@, and @BASE@.
+ Always use `-o'.
+
+1999-11-19 Tom Tromey <tromey@cygnus.com>
+
+ * dist.am: Set `CDPATH=:' to avoid problems. Merged from
+ Alexandre's change on branch.
+
+1999-10-02 Alexandre Oliva <oliva@lsd.ic.unicamp.br>
+
+ * Makefile.am (maintainer-check): Look for occurrences of ``cd'
+ without `CDPATH'.
+ * dejagnu.am: Set CDPATH before cd.
+ * Makefile.in: Rebuilt.
+
+ * automake.in (handle_single_transform_list): Change `\1' for `$1'
+ in `s///' replacement.
+
+ * automake.in (handle_dist): Set CDPATH before cd.
+ * dejagnu.am (check-DEJAGNU): Likewise.
+ * texinfos.am (install-info-am, dist-info): Likewise.
+ * m4/init.m4 (AM_INIT_AUTOMAKE): Likewise.
+ * m4/missing.m4 (AM_MISSING_HAS_RUN): Likewise.
+ * aclocal.m4, configure, Makefile.in: Rebuilt.
+
+ * AUTHORS: Added myself.
+
+1999-09-14 Alexandre Oliva <oliva@lsd.ic.unicamp.br>
+
+ * m4/missing.m4: Support relative srcdir and ac_aux_dir.
+ Reported by Tim Wilkinson <tim@transvirtual.com>
+ * aclocal.m4, configure: Rebuilt.
+
+1999-08-17 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * m4/lex.m4 (AM_PROG_LEX): Require AM_MISSING_HAS_RUN and, if no
+ LEX program is found, use `${am_missing_run}flex'.
+
+1999-08-16 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * automake.in (handle_single_transform_list): Replace `$(OBJEXT)'
+ with `o' in depfile.
+
+ * automake.in (handle_lib_objects_cond): Remove second dot from
+ dependency file names.
+
+ * depend2.am (OBJEXT@EXT@.obj): Dependency file should be .Po,
+ regardless of OBJEXT.
+
+ * automake.in (handle_dependencies): Add blank line after depend2.
+ (handle_dependencies): Start DEP_FILES with `@AMDEP@'. Output
+ blank line before `include's, not after them.
+ (scan_one_configure_file): Do not special-case `DEP_' any more.
+
+ * m4/depout.m4 (AM_OUTPUT_DEPENDENCY_COMMANDS): Run for loop only
+ if AMDEP is empty.
+ * aclocal.m4, configure: Rebuilt.
+
+ * m4/depend.m4 (AMDEPBACKSLASH): Define.
+ * depend2.am (@EXT@.o, @EXT@.lo, @EXT@.obj): Use AMDEPBACKSLASH.
+
+ * automake.in (handle_dependencies): Generate `include's for
+ dependency files after `@AMDEP@'.
+
+ * m4/missing.m4: Use eval, instead of a sub-shell, to test for
+ --run support in the missing script, since SHELL is not exported.
+ Reported by job bogan <job@piquin.uchicago.edu>
+ * aclocal.m4, configure: Rebuilt.
+
+1999-08-15 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * aclocal.m4, configure: Rebuilt with itself.
+ * Makefile.in, m4/Makefile.in, tests/Makefile.in: Likewise.
+
+ * m4/missing.m4 (AM_MISSING_PROG): Remove DIRECTORY argument.
+ Require AM_MISSING_HAS_RUN. Use am_missing_run, defined by...
+ (AM_MISSING_HAS_RUN): New macro.
+ * m4/init.m4: Remove missing_dir from calls to AM_MISSING_PROG.
+ * automake.texi (Requirements): Likewise.
+ * version.texi, stamp-vti: Rebuilt.
+
+1999-07-28 Tom Tromey <tromey@cygnus.com>
+
+ * depcomp: Handle the `hp' mode.
+
+1999-07-06 Tom Tromey <tromey@cygnus.com>
+
+ * depcomp: Work around HP-UX 10.20 sed bug.
+
+1999-07-05 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_dependencies): Generate a separate include
+ for each dep file. Report from Alexandre Oliva.
+ * depend.am: Don't include DEP_FILES.
+
+1999-06-01 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * depend.am: Add @AMDEP@ before `include', so that dependency
+ tracking can be disabled.
+ * depend2.am: Ditto, before all lines related with dependency
+ tracking.
+ * m4/depend.m4 (AM_DEP_TRACK): New macro, that documents
+ --enable/disable-dependency-tracking and sets AMDEP accordingly.
+ It is implicitly disabled if depcomp is missing.
+ (AM_DEPENDENCIES): Disable dependency tracking unless it can be
+ generated by side-effect.
+ * m4/init.m4 (AM_INIT_AUTOMAKE): Require AM_DEP_TRACK.
+ * automake.in (handle_dependencies): Add @AMDEP@ before the value
+ of DEP_FILES.
+ * m4/depout.m4 (AM_OUTPUT_DEPENDENCY_COMMANDS): Handle DEP_FILES
+ starting with `#'.
+
+ * depcomp: Support -xM for dependency generation, for Sun CC.
+ Reported by Alex Hornby <alex@anvil.co.uk>
+ * m4/depend.m4: Extract the list of supported dependency-tracking
+ mechanisms from the depcomp script and use it to test each one.
+ * THANKS: Added Alex Hornby.
+
+ * depend2.am: Move $(depcomp) to the line of $(...DEPMODE), so as
+ to leave $(...COMPILE) in a line by itself.
+
+ * THANKS: Added Miles Bader.
+
+1999-06-01 Miles Bader <miles@ccs.mt.nec.co.jp>
+
+ * m4/depend.m4 (AM_DEPENDENCIES): Add check for `makedepend'.
+ Fix `dashmstdout' to ignore non-dependency-generating uses of the
+ -M flag.
+ * depcomp (makedepend): New dependency-generating method.
+
+1999-06-01 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * missing: If given `--run' as first argument, try to run the
+ given program before falling back to the ``emulated'' behavior.
+ Add support for `tar'.
+ * automake.in: Use new `tar' support for `dist'.
+ * m4/missing.m4 (AM_MISSING_PROG): Instead of checking for the
+ program, prepend `missing --run' to the given program name.
+ * m4/init.m4: Remove AMTAR-related stuff.
+ * NEWS: Updated.
+
+ * m4/depout.m4: Instead of `find'ing Makefiles, just iterate on
+ CONFIG_FILES. Do not use temporary variable for list of
+ dependency files, it breaks Cygwin.
+
+1999-04-27 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * depcomp (gcc): Imported comments removed from depend2.am, so
+ that we don't lose them.
+
+ * m4/depout.m4 (AM_OUTPUT_DEPENDENCY_COMMANDS): Avoid sed s/$U//
+ when not using ansi2knr.
+
+1999-04-26 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * m4/depend.m4 (AM_DEPENDENCIES): Test for depcc -E support.
+ * depcomp (cpp): Extract dependencies from `# nnn "..."' lines.
+
+1999-04-25 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * m4/depend.m4 (AM_DEPENDENCIES): Add a definition to conftest.h,
+ so as not to compile an empty source; some compilers fail on this.
+ Redirect stderr of depcc to /dev/null. Test for -M with -o,
+ because some compilers will output the rules to the output file.
+ * depcomp (dashmstdout): Add --silent before --mode=compile, so
+ that we don't get libtool output mixed up with make rules.
+
+ * m4/init.m4 (AM_INIT_AUTOMAKE): Require AM_SET_DEPDIR.
+ * depend2.am: Set tmpdepfile too, to speed up depcomp. Always use
+ -o for libtool, otherwise it may try to deduce the object name
+ from the dependency-generation flag.
+ * depcomp: Assume depdir exists. Preserve depfile on unsuccessful
+ compilations.
+
+ * libtool.am: Do not emit .c.lo here...
+ * depend2.am: ... emit .*.lo here, only when using libtool.
+ * automake.in (get_object_extension): No more @MINUSO@ here.
+ (handle_single_transform_list): Set $depfile from $object.
+ (handle_dependencies): Emit depend2.am for all used languages,
+ regardless of $use_dependencies; the setting of depcomp makes the
+ difference.
+ (lang_cxx_finish): Do not emit compilation rules.
+ (lang_objc_finish): Likewise.
+ (lang_java_finish): Likewise.
+
+1999-04-21 Tom Tromey <tromey@cygnus.com>
+
+ * m4/depout.m4 (AM_OUTPUT_DEPENDENCY_COMMANDS): Correctly
+ interpolate DEPDIR in DEP_FILES expansion.
+
+1999-04-20 Lee Iverson <leei@Canada.AI.SRI.COM>
+
+ * m4/depend.m4 (AM_DEPENDENCIES): Fix up test for SGI-style
+ dependency updating.
+ * m4/depout.m4 (AM_OUTPUT_DEPENDENCY_COMMANDS): Fix sed script to
+ handle multi-line dependency lists.
+
+1999-11-12 Tom Tromey <tromey@cygnus.com>
+
+ Fix for PR automake/14:
+ * aclocal.in: Added `ud_GNU_GETTEXT'. Updated to mention
+ AC_CYGWIN.
+ * automake.in: Mention AC_CYGWIN, not AC_CYGWIN32.
+
+ * m4/multi.m4: Added missing `]'. From Akim Demaille.
+
+ * Makefile.am (path-check): Make sure distdir is writeable before
+ removing it.
+ * automake.in (handle_texinfo): Added `cm' and `ov' extensions.
+ (handle_dist_worker): Make sure distdir is writeable before
+ removing it.
+ (initialize_global_constants [$dist_trailer]): Make sure distdir
+ is writeable before removing it.
+ * dist.am (distcheck): Make the new source tree read-only before
+ compiling. Idea from Karl Berry.
+
+ * automake.texi (Gnits): Allow COPYING.LIB again.
+ * automake.in (check_gnits_standards): Allow COPYING.LIB again.
+
+1999-11-11 Jim Meyering <meyering@ascend.com>
+
+ * dist.am (distcheck): Remove $(distdir).tar.gz before counting
+ files.
+
+1999-11-09 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_dist): Typo fix. From Jim Meyering.
+
+1999-11-09 Jim Meyering <meyering@ascend.com>
+
+ * automake.in (handle_dist): Remove the DISTHOOK and GETTEXT
+ markers, no matter what.
+
+1999-11-08 Tom Tromey <tromey@cygnus.com>
+
+ * dist.am (distcheck): Put `&&' at the start of the distcheck-hook
+ line.
+
+ * automake.in (handle_dist_worker): Use `cp -R', not `cp -r'.
+ From Jim Meyering. Also, don't mention file name in `cp'
+ destination. From Olly Betts.
+
+1999-10-27 Miodrag Vallat <miodrag@ifrance.com>
+
+ * texinfos.am (uninstall-info): Use installed info file, not one
+ from srcdir or builddir.
+
+1999-11-07 Tom Tromey <tromey@cygnus.com>
+
+ * clean.am (maintainer-clean-generic): Remove Makefile.in. From
+ Jeff Bailey
+
+ Fix for PR automake/18:
+ * automake.in (handle_dist): Add contents of dist.am to the output
+ rules.
+ * Makefile.am (amfiles): Added dist.am.
+ * dist.am: New file.
+ (distcheck): Added uninstall and distclean checks.
+
+ * automake.in (PATH_PATTERN): Added `-' as allowable character.
+ Fixes PR automake/20. From Matthew D. Langston.
+
+ * automake.in (SUFFIX_RULE_PATTERN): Add `0-9' as characters
+ allowed in suffixes. Fixes PR 22. From Matthias Clasen.
+
+1999-10-03 Alexandre Oliva <oliva@lsd.ic.unicamp.br>
+
+ * m4/lispdir.m4: -batch must come before -q.
+ * elisp-comp: Likewise.
+ Reported by Lars Hecking <lhecking@nmrc.ucc.ie>
+ * THANKS: Added Lars.
+
+1999-08-15 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (get_object_extension): Fixed quoting bug. Fixes
+ ansi4.test.
+
+1999-07-27 Tom Tromey <tromey@cygnus.com>
+
+ * config.guess, config.sub: New versions from autoconf.
+
+1999-07-13 Tom Tromey <tromey@cygnus.com>
+
+ Work around losing `awk'. Report from Harlan Stenn.
+ * m4/init.m4 (AM_INIT_AUTOMAKE): Require AC_PROG_AWK.
+ * tags.am (ID, TAGS): Use $(AWK), not `awk'.
+
+ * automake.in (handle_source_transform): Mark prefix as seen if
+ corresponding _SOURCES variable exists. Fixes empty2.test.
+
+1999-06-25 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
+
+ * configure.in (ACLOCAL): Do not prepend the variable SRCDIR to
+ m4.
+ (AUTOMAKE): Set --amdir to current directory.
+
+1999-06-20 Tom Tromey <tromey@cygnus.com>
+
+ * Makefile.am (TAGS_FILES): New macro.
+ (ETAGS_ARGS): Moved files into TAGS_FILES.
+ (TAGS_DEPENDENCIES): Likewise.
+ (ETAGS_ARGS): Removed.
+ (TAGS_DEPENDENCIES): Removed duplicate definition.
+
+ * tags.am (ID): Handle VPATH correctly. Use TAGS_FILES. Report
+ from Ganesan Rajagopal.
+ (TAGS): Likewise.
+
+1999-06-18 Thomas Tanner <tanner@ffii.org>
+
+ * automake.in (handle_ltlibraries): Check for -module in LDFLAGS,
+ too.
+
+1999-06-20 Mark Elbrecht <snowball3@bigfoot.com>
+
+ * ylwrap: Handle filenames output by the DOS version of Bison.
+
+1999-06-20 Tom Tromey <tromey@cygnus.com>
+
+ * ylwrap: Be less strict when recognizing DOS paths. From Mark
+ Elbrecht.
+
+1999-06-19 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_dist_worker): Remove redundant entries from
+ DIST_SUBDIRS.
+
+ * automake.in (handle_lib_objects_cond): Better error message when
+ unrecognized option passed in LDADD.
+
+1999-06-08 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * configure.in (ACLOCAL, AUTOMAKE): Use our own scripts, with
+ appropriate --acdir and --amdir arguments.
+
+1999-06-07 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * automake.in (dist_header): Avoid changing permissions of files
+ in the source tree, trying a complex `find/chmod' command before
+ falling back to plain chmod.
+ (handle_dist_worker): Do not create directories with mode 777, the
+ find above will take care of that.
+ * m4/init.m4: Set install_sh for find/chmod above.
+
+ * THANKS: Added Shuhei Amakawa.
+
+1999-06-07 Shuhei Amakawa <sa264@cam.ac.uk>
+
+ * mans.am: Strip dirname from given filename.
+
+1999-06-07 Jim Meyering <meyering@ascend.com>
+
+ * automake.in (handle_dist): Change emitted rules so that a failure
+ in `$(MAKE) distcheck-hook' propagates to the outer make.
+
+1999-05-27 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_single_transform_list): Replace AM_FLAG and
+ not FLAG in compilation rule.
+ (add_depend2): Likewise.
+
+ * ltlib.am (install-@DIR@LTLIBRARIES): Pass INSTALL_STRIP_FLAG to
+ libtool.
+
+ * m4/dmalloc.m4: Updated dmalloc site information.
+
+1999-05-19 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_single_transform_list): Push object name
+ without extension onto lang_specific_files. Fixes
+ specflags4.test.
+
+ * automake.in (handle_single_transform_list): Added missing
+ space. Fixes specflags.test.
+
+1999-05-05 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in: Disabled dependency tracking for Java.
+
+1999-05-04 Tom Tromey <tromey@cygnus.com>
+
+ * library.am (@LIBRARY@): Use $(@XLIBRARY@_AR).
+ * automake.in (handle_libraries): Recognize _AR variable.
+
+1999-04-30 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (finish_languages): Always use `-o $@' with
+ libtool. Define ltcompile and ltlink at outermost scope in
+ function.
+ * libtool.am (.c.lo): Removed.
+
+ * automake.in (finish_languages): Put `.' before extension in
+ suffix list, `.obj' rule, and `.lo' rule. Look at `-flags', not
+ `-flag'. From Pavel Roskin.
+
+1999-04-28 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (finish_languages): Fixed scoping of ltcompile and
+ ltlink. From Pavel Roskin.
+
+1999-04-27 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (read_main_am_file): Don't start macro definition
+ with backslash-newline. Instead, append newline at the end if
+ required.
+
+ * automake.in (read_am_file): Insert a backslash before a trailing
+ newline. Fixes pluseq8.test.
+
+ * automake.in (MACRO_PATTERN): Allow digits and `_' to start a
+ macro name.
+ (check_canonical_spelling): Don't insert `AM' before macro name
+ (reverts Alexandre's 1999-04-27 patch).
+ * automake.texi: Reverted documentation change for `AM' patch.
+
+ * automake.in (handle_lib_objects_cond): Prefer `$1' over `\1'.
+ Minor rewrite for clarity.
+ (check_canonical_spelling): Prefer `$1' over `\1'.
+
+ * depend2.am (@OBJ@): Renamed. Use @SOURCE@, @COMPILE@. Always
+ use `-o $@'.
+ (@LTOBJ@): Likewise.
+ * automake.in (handle_single_transform_list): Don't print rule if
+ doing dependency tracking and the file's language supports it.
+ (initialize_per_input): Initialize lang_specific_files.
+ (add_depend2): New function.
+ (handle_dependencies): Use it.
+
+ * automake.in (lang_ppf77_finish): Use lang_f77_finish.
+ ratfor compiler name is `RCOMPILE'. ppf77 compiler name changed
+ to `PPF77COMPILE' to allow use of f77 and ppf77 in the same
+ directory.
+ (lang_ratfor_finish): Use lang_f77_finish.
+
+ * compile.am (NOTDEPEND.c.o): Removed.
+ (OBJEXT.c.obj): Likewise.
+ * automake.in: Added `flags' attribute to all relevant languages.
+ (handle_single_transform_list): Handle per-derived-object flags.
+ Changed interface and all callers.
+ (handle_built_sources): Don't call handle_single_transform_list.
+ Added `compile' and `compiler-name' attribute to all relevant
+ languages.
+ (finish_languages): Define compiler variables here.
+ (lang_cxx_finish): Don't call define_compiler_variable. Don't
+ define flag variable or .o rules. Don't add to @suffixes.
+ (lang_f77_finish): Likewise.
+ (lang_ppf77_finish): Likewise.
+ (lang_objc_finish): Likewise.
+ (lang_java_finish): Likewise.
+ (finish_languages): Define flag variable here.
+ Added `output-arg' attribute to all relevant languages.
+ (finish_languages): Define `.o' rules here.
+ (finish_languages): Put extension on @suffixes.
+ (get_object_extension): Don't transform NOTDEPEND or MINUSO.
+
+1999-04-27 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * automake.in (initialize_global_constants): Invoke gzip for
+ dist-shar just like in plain dist, i.e., pass it GZIP_ENV and -c.
+
+ * automake.in (initialize_global_constants): Remove zip file
+ before re-creating it.
+ Reported by Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
+
+ * texinfos.am (uninstall-info): Look for info file in srcdir, just
+ like in install-info-am.
+ Reported by Tudor Hulubei <tudor@cs.unh.edu>
+
+ * automake.in (handle_lib_objects_cond): \Q doesn't work either.
+ Let's use the good ol' substitution, then.
+ Reported by Russ Allbery <rra@stanford.edu>
+
+ * automake.in (check_canonical_spelling): Insert AM before names
+ starting with non-letters.
+
+ * automake.texi: Document it.
+
+1999-04-26 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * automake.in (handle_lib_objects_cond): Do not use quotemeta, it
+ doesn't work on perl4. Maybe \Q and \E do.
+
+1999-04-24 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in: Treat `.zip' and `.jar' files as Java.
+
+ * automake.in (generate_makefile): Define `subdir' after reading
+ .am file.
+ (read_main_am_file): Give programming error if variable defined
+ before invocation.
+
+1999-04-22 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (generate_makefile): Define `subdir' variable.
+ (handle_dist): Don't define `subdir'.
+
+ * automake.in (handle_texinfo): Change numbering scheme for
+ stamp-vti files, to avoid problems with DOS.
+ From Michel de Ruiter.
+
+ * automake.texi: Don't mention AM_FUNC_MKTIME.
+ * aclocal.in (obsolete_macros): Mention AM_FUNC_MKTIME.
+ * automake.in (scan_one_configure_file): Recognize
+ AC_FUNC_MKTIME, not AM_FUNC_MKTIME.
+ (obsolete_macros): Mention AM_FUNC_MKTIME.
+ * m4/Makefile.am (m4data_DATA): Removed mktime.m4.
+ * m4/mktime.m4: Removed.
+
+1999-04-20 Tom Tromey <tromey@cygnus.com>
+
+ * automake.texi (Top level): Don't recommend substing SUBDIRS.
+
+1999-04-20 Brian Ford <ford@vss.fsi.com>
+
+ * scripts.am: Change else if's to elif.
+
+1999-04-20 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * automake.in (handle_lib_objects_cond): Only require the source
+ of a LIBOBJ if it's not in BUILT_SOURCES.
+ Reported by Erez Zadok.
+
+1999-04-19 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in: Treat `.class' files as Java source.
+ (lang_java_finish): Handle `.class' files.
+
+1999-04-18 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * m4/lispdir.m4: Match only `/(share|lib)/x?emacs/site-lisp/*$'.
+
+ * m4/lispdir.m4: Do not override lispdir if it's already defined.
+ Run some emacs-lisp to find out the site-lisp directory, but
+ relocate it into prefix.
+
+1999-04-17 Paul Eggert <eggert@twinsun.com>
+
+ * m4/mktime.m4 (bigtime_test, main): Move alarm from
+ bigtime_test to main, since Solaris 7 (64-bit) mktime loops
+ even outside of bigtime_test. Use a time limit of 60 seconds
+ for the whole test, not 10 seconds per iteration.
+
+1999-04-17 Erez Zadok <ezk@cs.columbia.edu>
+
+ * automake.in: Create stamps for headers in appropriate
+ directories, even if the input file lives in a different place.
+ * remake-hdr.am: Likewise.
+
+1999-04-16 Tom Tromey <tromey@cygnus.com>
+
+ From Brian Ford:
+ * progs.am (install-@DIR@PROGRAMS, uninstall-@DIR@PROGRAMS):
+ Invoke `sed' only once per program.
+ * scripts.am (install-@DIR@SCRIPTS, uninstall-@DIR@SCRIPTS):
+ Invoke `sed' only once per program.
+
+1999-04-13 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_subdirs): Make `install-recursive' phony.
+ From Michel de Ruiter.
+
+ * automake.in (handle_ltlibraries): Added missing `check'.
+
+1999-04-12 Tom Tromey <tromey@cygnus.com>
+
+ * ansi2knr.c: New version from Pavel Roskin (via ansi2knr.c
+ maintainer).
+
+1999-04-11 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_dist): Use AMTAR.
+ (initialize_global_constants): Likewise.
+ * m4/init.m4 (AM_INIT_AUTOMAKE): Use AMTAR, not TAR.
+
+ * automake.in (lang_sub_obj): New function.
+ (lang_cxx_rewrite): Use it.
+ (lang_asm_rewrite): Likewise.
+ (lang_objc_rewrite): Likewise.
+ (lang_cxx_finish): Add `-o $@' to all C++ rules.
+ (lang_asm_finish): Add `-o' to suffix rules when appropriate.
+ (lang_objc_finish): Add `-o $@' to all ObjC rules.
+ (lang_java_finish): Likewise.
+
+ * automake.in: Only register `asm' once.
+ (lang_asm_finish): Put assembly suffixes on @suffixes.
+
+ * libtool.am (.s.lo): Removed.
+ (.S.lo): Likewise.
+ * automake.in (lang_asm_finish): Handle libtool.
+
+ * libtool.am (.c.o): Always pass -c to libtool.
+
+ * automake.in (lang_yacc_rewrite): Handle sources in subdirs.
+ (lang_yaccxx_rewrite): Likewise.
+ (lang_lex_rewrite): Likewise.
+ (lang_lexxx_rewrite): Likewise.
+
+ Assembly code no longer included by default:
+ * compile.am (.s.o): Removed.
+ (.S.o): Likewise.
+ * automake.in: Register `asm' language.
+ (lang_asm_finish): Generate suffix rules for assembly.
+ (get_object_extension): Don't add `.s' or `.S' to suffix list.
+
+ * automake.in (get_object_extension): Substitute @MINUSO@ when
+ including compile.am.
+ * compile.am (.c.o): Added @MINUSO@.
+ (.c.obj): Likewise.
+
+ First cut at allowing objects in subdirectories:
+ * m4/Makefile.am (m4data_DATA): Added minuso.m4.
+ * Makefile.am (dist_script_DATA): Added compile.
+ * m4/minuso.m4: New file.
+ * automake.in (initialize_global_constants): Added compile to
+ common_files.
+ (seen_cc_c_o): New global.
+ (scan_one_configure_file): Set it when AM_PROG_CC_C_O seen.
+ (handle_options): Recognize `subdir-objects' option.
+ (lang_c_rewrite): Added directory argument.
+ (lang_yacc_rewrite): Likewise.
+ (lang_yaccxx_rewrite): Likewise.
+ (lang_lex_rewrite): Likewise.
+ (lang_lexxx_rewrite): Likewise.
+ (handle_single_transform_list): Pass directory to _rewrite
+ function. Generate dependencies for dirstamp files for each .o;
+ it is just the rules we want to create once.
+ (lang_c_rewrite): Handle `subdir-objects' option.
+ (lang_c_rewrite): Require `compile' program.
+ * compile: New file.
+
+ * automake.in (initialize_per_input): Initialize %directory_map.
+ (handle_single_transform_list): Only create .dirstamp rules once
+ per directory.
+
+ * m4/gcj.m4 (AM_PROG_GCJ): Use AC_CHECK_PROGS, not AC_CHECK_PROG.
+
+ Fix for confh.test:
+ * automake.in (configure_input_files): New global.
+ (scan_configure): Set it.
+ (handle_configure): Use configure_input_files when determining
+ which subdirs have a Makefile.am. Fixes confh.test.
+ (handle_configure): Only recognize acconfig.h in top srcdir.
+
+1999-04-10 Tom Tromey <tromey@cygnus.com>
+
+ * depend2.am (%.o): Use `$(*D)/$(*F)', not just `$(*F)'.
+ (%.lo): Likewise.
+
+ * automake.in (am_install_var): Remove redundancies from the
+ result. Fixes test cond8.test.
+
+ * automake.in (handle_single_transform_list): Handle dependency
+ tracking when files are created in subdirs. Error if object in
+ subdir has `..' component.
+
+ * automake.in (initialize_global_constants): Use $(TAR), not tar.
+
+ * automake.in (handle_ltlibraries): Allow check_LTLIBRARIES.
+
+ * automake.in (lang_yacc_finish): Added missing `&'.
+
+1999-04-10 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * automake.in (handle_configure): Replace multiple occurrences of
+ @STAMP@ in the same line; completes the patch for remake-hdr.am
+ below.
+
+ * automake.in (handle_dependencies): Fix test for `autodep'
+ support.
+
+ * automake.in (handle_source_transform): Add a pfx to used_pfx
+ only if it's conditional or non-empty, to reduce the number of
+ empty variables. Emit _OBJECS variable based on program name if
+ no SOURCES were explicitly specified.
+
+ * remake-hdr.am: Create the stamp file before the header file,
+ and just rename it after, so that the timestamps will be correct.
+ Reported by Marc Horowitz <marc@mit.edu>
+
+ * automake.in (lang_yacc_finish): Generate and dist a `.h' for a
+ `.y' iff YFLAGS or AM_YFLAGS contain `-d'.
+ Reported by Jim Meyering <meyering@ascend.com>
+
+ * automake.in (lang_yacc_finish): $hname must not contain a `.'.
+
+1999-04-10 Tom Tromey <tromey@cygnus.com>
+
+ * Makefile.am (EXTRA_DIST): New macro.
+ * ChangeLog.1996, ChangeLog.1998: New files.
+
+1999-04-09 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_source_transform): Handle dist and nodist
+ prefixes.
+ (initialize_per_input): Initialize dist_sources.
+ (check_libobjs_sources): Handle dist and nodist prefixes.
+ (generate_makefile): Define DIST_SOURCES.
+ * dist-vars.am (DISTFILES): Reference DIST_SOURCES, not SOURCES.
+
+ * automake.texi (Macros): Mention AM_PROG_GCJ.
+ (Java Support): New node.
+ (Dist): Documented dist_ and nodist_ prefixes.
+
+ * m4/gcj.m4 (AM_PROG_GCJ): Renamed from AC_PROG_GCJ.
+
+ * automake.in (lang_java_finish): Generate .lo rule for `.java'
+ files, not `.gcj' files.
+
+ * m4/gcj.m4: New file.
+ * m4/Makefile.am (m4data_DATA): Added gcj.m4.
+
+ * automake.in: Register the `java' language.
+ (resolve_linker): Handle GCJLINK.
+ (lang_java_rewrite): New function.
+ (LANG_IGNORE, LANG_PROCESS, LANG_SUBDIR): New constants.
+ (lang_c_rewrite): Use new constants.
+ (lang_cxx_rewrite): Likewise.
+ (lang_header_rewrite): Likewise.
+ (lang_yacc_rewrite): Likewise.
+ (lang_yaccxx_rewrite): Likewise.
+ (lang_lex_rewrite): Likewise.
+ (lang_lexxx_rewrite): Likewise.
+ (lang_asm_rewrite): Likewise.
+ (lang_f77_rewrite): Likewise.
+ (lang_ppf77_rewrite): Likewise.
+ (lang_ratfor_rewrite): Likewise.
+ (lang_objc_rewrite): Likewise.
+ (handle_single_transform_list): Likewise. Handle LANG_SUBDIR
+ return from rewrite function.
+ (lang_java_finish): New function.
+ (register_language): Changed interface and all calls. Added
+ `autodep' settings to various languages.
+ (handle_dependencies): Use `autodep' property of language when
+ including dependency-tracking code.
+
+1999-04-07 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_texinfo): Indentation fixes.
+
+1999-04-07 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * automake.in (value_to_list): Skip *only* trailing backslashes.
+
+1999-04-07 Pavel Roskin <pavel_roskin@geocities.com>
+
+ * automake.in (value_to_list): Skip trailing backslashes.
+
+1999-04-07 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * automake.in (handle_texinfo): Add texinfo.tex to config_aux_dir
+ when appropriate.
+ Reported by Per Cederqvist <ceder@lysator.liu.se>
+ (handle_texinfo): Do not define texinfo_tex='.', use
+ '$(srcdir)/texinfo.tex' instead; the directory name will be
+ properly extracted.
+ (require_conf_file_with_line): Fixed typo.
+
+1999-04-03 Raja R Harinath <harinath@cs.umn.edu>
+
+ * automake.in (handle_tests): Test `dir=./' before `dir=', so that
+ we do not depend on PATH starting with `.'.
+
+1999-03-31 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (quote_cond_val): Quote \n.
+ (unquote_cond_val): Unquote \n.
+ (read_am_file): If line ends with `\', preserve it and add a
+ newline.
+ (read_main_am_file): In conditional case, put conditional text at
+ beginning of each generated line.
+
+1999-03-31 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * automake.in (handle_tests): support XFAIL_TEST
+ * automake.texi: document it
+
+1999-04-12 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * End of merge from trunk.
+
+1999-04-12 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * automake.in (cmdline_use_dependencies): Reintroduce it.
+ (--ignore-deps): Set cmdline_use_dependencies again.
+ (handle_dependencies): If use_dependencies is not set, define
+ depcomp as empty.
+ (handle_configure): Pass --ignore-deps to generated Makefile.ins.
+ (scan_configure): Do not require depcomp when ignoring
+ dependencies.
+ (initialize_global_constants): Reintroduce --ignore-deps.
+
+1999-04-10 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * depcomp: New file.
+ * Makefile.am (dist_script_DATA): Added depcomp.
+ * automake.in (cmdline_use_dependencies, omit_dependencies,
+ dependency_macros): Removed.
+ (--ignore-deps): Just ignore.
+ (handle_single_transform_list, dep_files): Named dependency files
+ as \$(DEPDIR)/$base.P$obj
+ (handle_lib_objects_cond): Likewise.
+ (generate_dependency_code): Do not check for AM_*_DEPENDENCIES.
+ (scan_one_configure_file): Likewise.
+ (handle_dependencies): Always enable auto-dep. Define `depcomp'.
+ Ignore OMIT_DEPENDENCIES.
+ (handle_configure): Do not pass --ignore-deps.
+ (scan_configure): Require `depcomp'.
+ (initialize_global_constants): Make `depcomp' common. Remove
+ `--ignore-deps' from usage.
+ (get_object_extension): No more NOTDEPEND in compile nor libtool.
+ * compile.am: Remove rules for .c.o and .c.obj
+ * depend.am (distclean-depend): Wipe out $(DEPDIR)
+ * depend2.am (@FPFX@DEPMODE): Define from config.status.
+ Use it and depcomp in suffix rules.
+ * libtool.m4: Likewise.
+ * m4/ccdepend.m4, m4/cxxdepend.m4: Removed.
+ * m4/depvars.m4, m4/objcdepend.m4: Likewise.
+ * m4/Makefile.am (dist_m4data_DATA): Likewise.
+ * m4/depout.m4 (AM_OUTPUT_DEPENDENCY_COMMANDS): Extract DEPDIR
+ from the Makefile and subst it in deps. Report creation of deps
+ files (for now). Replace $U with `_' and the empty string. Write
+ a comment to each created file.
+ * m4/depend.m4 (AM_SET_DEPDIR): Select a valid deps dir name.
+ (AM_DEPENDENCIES): Accept CC, CXX and OBJC. Just determine the
+ dependency mode and AC_SUBST [$1]DEPMODE.
+ * m4/init.m4 (AM_INIT_AUTOMAKE): Automatically call
+ AM_DEPENDENCIES for CC and CXX, if the corresponding AC_PROG
+ appears in configure.in, before or after AM_INIT_AUTOMAKE.
+
+1999-04-02 Raja R Harinath <harinath@cs.umn.edu>
+
+ * depout.m4: Fix sed expression for extracting `dirpart'.
+
+1999-03-29 Tom Tromey <tromey@cygnus.com>
+
+ * depend2.am (DEP_@FPFX@COMPILE): Use `!=' and not `-ne'.
+
+ * compile.am (.c.obj): Also disabled when dependency tracking
+ enabled.
+ * depend2.am (@EXT@.obj): New target.
+ * automake.in (get_object_extension): Added explanatory comment.
+ (generate_dependency_code): Handle $seen_objext.
+
+ * depend.am: Removed obsolete comment.
+ * depend2.am: Minor formatting fix.
+
+1999-03-28 Tom Tromey <tromey@cygnus.com>
+
+ * m4/Makefile.am (dist_m4data_DATA): Renamed, and added new
+ files.
+ (EXTRA_DIST): Removed.
+ * automake.in (dependency_macros): New global.
+ (scan_one_configure_file): Recognize new dependency tracking
+ macros, and define new resulting configure variables.
+ (generate_dependency_code): New sub.
+ (handle_dependencies): Use it.
+ * depend2.am (DEP_@FPFX@COMPILE): New macro.
+ (@EXT@.o): Use it.
+ (@EXT@.lo): Likewise.
+ * m4/depvars.m4: New file.
+ * m4/objcdepend.m4: New file.
+ * m4/cxxdepend.m4: New file.
+ * m4/init.m4: Moved dependency handling code into depout.m4.
+ * m4/depout.m4: New file.
+ * m4/ccdepend.m4: New file.
+ * m4/depend.m4: New file.
+
+ * depend2.am (@EXT@.o): Renamed to be old-style suffix pattern.
+ (@EXT@.lo): Likewise.
+ * m4/init.m4 (AM_INIT_AUTOMAKE): Don't create `.deps/.P'; it is no
+ longer needed.
+
+ * m4/init.m4 (AM_INIT_AUTOMAKE): Add code to config.status which
+ will create the required .P files for dependency tracking.
+ * automake.in (scan_dependency_file): Removed.
+ (handle_dependencies): Never call scan_dependency_file.
+ (generate_deps): Removed.
+ (parse_arguments): Don't recognize --generate-deps, --build-dir,
+ --srcdir-name, or --include-deps. Do recognize --ignore-deps.
+ (srcdir_name): Removed.
+ (build_directory): Removed.
+ (initialize_global_constants): Changed $USAGE to reflect argument
+ parsing changes.
+ (handle_dist_worker): Never run automake in `dist' rule.
+ (handle_configure): Use --ignore-deps, not --include-deps.
+ * depend.am (DEPS_MAGIC): Removed.
+ (DEP_FILES): Unconditionally include.
+
+1999-03-27 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (saw_sources_p): Correctly count header extensions
+ seen.
+ (handle_headers): Fixed order of arguments to am_install_var.
+
+ * automake.in (am_install_var): Don't error if EXTRA_foo is
+ defined uselessly.
+
+ * scripts.am (install-@DIR@SCRIPTS): Use NDIR when appropriate.
+ (uninstall-@DIR@SCRIPTS): Likewise.
+ * progs.am (install-@DIR@PROGRAMS): Use NDIR when appropriate.
+ (uninstall-@DIR@PROGRAMS): Likewise.
+ * ltlib.am (install-@DIR@LTLIBRARIES): Use NDIR when appropriate.
+ (uninstall-@DIR@LTLIBRARIES): Likewise.
+ * lisp.am (install-@DIR@LISP): Use NDIR when appropriate.
+ (uninstall-@DIR@LISP): Likewise.
+ * libs.am (install-@DIR@LIBRARIES): Use NDIR when appropriate.
+ (uninstall-@DIR@LIBRARIES): Likewise.
+ * java.am (install-@DIR@JAVA): Use NDIR when appropriate.
+ (uninstall-@DIR@JAVA): Likewise.
+ * header.am (install-@DIR@HEADERS): Use NDIR when appropriate.
+ (uninstall-@DIR@HEADERS): Likewise.
+ * data.am (install-@DIR@DATA): Use NDIR when appropriate.
+ (uninstall-@DIR@DATA): Likewise.
+ * Makefile.in: Rebuilt.
+ * Makefile.am (dist_pkgdata_DATA): Renamed.
+ (EXTRA_DIST): Removed.
+ (install-data-hook): Added POST_INSTALL; print commands as they
+ are run; respect DESTDIR.
+ * dist-vars.am (DISTFILES): Removed $(HEADERS).
+ * automake.in (am_install_var): Accept `-candist' and
+ `-defaultdist' options. Handle `dist_' and `nodist_' prefixes.
+ (am_primary_prefixes): Added can_dist argument. Recognize `dist_'
+ and `nodist_' prefixes.
+ (handle_scripts): Pass -candist to am_install_var.
+ (handle_data): Pass -defaultdist to am_install_var.
+ (handle_headers): Likewise.
+ (handle_emacs_lisp): Pass -candist to am_install_var.
+ (handle_java): Pass -candist to am_install_var.
+
+1999-03-26 Tom Tromey <tromey@cygnus.com>
+
+ * m4/init.m4: Fixed typo when invoking SHELL.
+
+ * automake.in (lang_yacc_finish): Always use `.h' as suffix for
+ yacc header file. From Ralf Corsepius.
+
+ * Makefile.in: Rebuilt.
+ * Makefile.am: Updated to reflect removal of TAR subst.
+ * automake.texi (Options): Document dist-bzip2.
+ * automake.in (TAR): Removed global.
+ (initialize_global_constants): Changed `dist' to use pipe with
+ gzip; work with non-GNU tar.
+ (handle_dist): Handle non-GNU tar. Don't define TAR.
+ (initialize_global_constants): Added `dist-bzip2' entry.
+ (handle_options): Recognize dist-bzip2 option.
+ (handle_dist): Likewise.
+ * configure: Rebuilt.
+ * configure.in: Don't check for tar.
+ * m4/init.m4 (AM_INIT_AUTOMAKE): Check for `tar'. Substitute
+ AMTARFLAGS.
+
+ * automake.in (am_install_var): Removed obsolete comment.
+
+ * texinfos.am (uninstall-info): Don't print loop but instead print
+ commands. Simplified pre-uninstall loop.
+ * scripts.am (uninstall-@DIR@SCRIPTS): Don't print loop but
+ instead print commands.
+ * progs.am (uninstall-@DIR@PROGRAMS): Don't print loop but instead
+ print commands.
+ * ltlib.am (uninstall-@DIR@LTLIBRARIES): Don't print loop but
+ instead print commands.
+ * lisp.am (install-@DIR@LISP): Strip subdir from file name.
+ (uninstall-@DIR@LISP): Likewise. Also, don't print loop but
+ instead print commands.
+ * libs.am (uninstall-@DIR@LIBRARIES): Don't print loop but instead
+ print commands.
+ * java.am (uninstall-@DIR@JAVA): Don't print loop but instead
+ print commands.
+ * header.am (install-@DIR@HEADERS): Strip subdir from file name.
+ (uninstall-@DIR@HEADERS): Likewise. Also, don't print loop but
+ instead print commands.
+ * data.am (install-@DIR@DATA): Strip subdir from file name.
+ (uninstall-@DIR@DATA): Likewise. Also, don't print loop but
+ instead print commands.
+
+ * automake.in (handle_merge_targets): `install-strip' is a phony
+ target. From Michel de Ruiter.
+
+1999-03-25 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (define_compiler_variable): Don't define variable
+ with trailing `_'.
+
+1999-03-25 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * automake.in (LDADD): accept -dlopen and -dlpreopen here
+ * automake.texi: ditto
+
+1999-03-25 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * automake.in (TESTS): make from Solaris 7/x86 loses if srcdir
+ is absolute and != objdir. dir="" or "$(srcdir)/" fixes it
+
+1999-03-24 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (define_compiler_variable): New sub.
+ (finish_languages): Use it.
+ (lang_cxx_finish): Likewise.
+ (lang_f77_finish): Likewise.
+ (lang_ppf77_finish): Likewise.
+ (lang_ratfor_finish): Likewise.
+ (lang_objc_finish): Likewise.
+
+1999-03-23 Tom Tromey <tromey@cygnus.com>
+
+ * progs.am (install-@DIR@PROGRAMS): Use `-e' instead of multiple
+ sed invocations. From Elrond.
+ (uninstall-@DIR@PROGRAMS): Likewise.
+
+ * automake.in (lang_lex_finish): Rewrite `l', not `y', to `c'.
+ From Ralf Corsepius.
+
+1999-02-01 Thomas Tanner <tanner@gmx.de>
+
+ * automake.in: accept both A(C|M)_PROG_LIBTOOL, print a
+ warning when AM_PROG_LIBTOOL was found
+ * automake.texi: renamed AM_PROG_LIBTOOL to AC_PROG_LIBTOOL
+
+1999-03-22 Tom Tromey <tromey@cygnus.com>
+
+ Made `+=' more robust. Fixes pluseq6.test and pluseq7.test.
+ * automake.in (define_standard_variables): New sub.
+ (read_main_am_file): Use two passes to scan standard variables.
+ (read_am_file): Don't special-case configure variables with `+='.
+ (initialize_per_input): Initialize %var_was_plus_eq.
+ (read_am_file): Set var_was_plus_eq element correctly.
+ (define_variable): Give error if variable assigned with `+=' is
+ internally defined.
+ (initialize_per_input): Initialize %am_var_defs.
+ (file_contents_with_transform): Set element in %am_var_defs.
+ (read_am_file): Use %am_var_defs.
+
+1999-03-21 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (initialize_per_input): Initialize %object_map.
+ (handle_single_transform_list): Allow source files in
+ subdirectories.
+
+1999-03-21 Jim Meyering <meyering@na-net.ornl.gov>
+
+ * automake.in (handle_dist): Add missing newline after the first
+ semicolon.
+
+1999-03-11 Tom Tromey <tromey@cygnus.com>
+
+ * m4/error.m4, m4/mktime.m4, m4/obstack.m4, m4/regex.m4,
+ m4/strtod.m4: Use $ac_objext, not `.o'. From Jim Meyering.
+
+ From Jim Meyering:
+ * automake.in (handle_dist): Add `;\' to end of distcheck-hook
+ line.
+ (scan_one_configure_file): In LIBOBJS, recognize `$ac_objext' as
+ legitimate ending. Fixes libobj9.test.
+
+ From Ralf Corsepius. Fixes lex3.test.
+ * automake.in (lang_yacc_finish): Include `.' in name pushed onto
+ maintainer-clean list.
+ (lang_lex_finish): Likewise.
+
+1999-03-02 Tom Tromey <tromey@cygnus.com>
+
+ * subdirs.am (maintainer-clean-recursive): Changed "&&" into "if"
+ construct to work around FreeBSD make/sh problem. From Rich Wales.
+
+1999-03-01 Tom Tromey <tromey@cygnus.com>
+
+ Fixes from Pavel Roskin:
+ * automake.in (variable_conditions_sub): Sort list passed to
+ variable_conditions_permutations.
+ (variable_conditions): Sort list before returning.
+
+1999-02-27 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (lang_extensions): New sub.
+ (handle_dependencies): Use it.
+ (cxx_extensions): Removed.
+ (lang_cxx_finish): Use lang_extensions.
+ (f77_extensions): Removed.
+ (lang_f77_finish): Use lang_extensions.
+ (objc_extensions): Removed.
+ (lang_ppf77_finish): Put `.' before extension. Fixes ext.test.
+ Report from Dave Morrison.
+ (lang_ratfor_finish): Likewise.
+
+1999-02-26 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (finish_languages): Added AM_LDFLAGS.
+ (lang_cxx_finish): Likewise.
+ (lang_f77_finish): Likewise.
+ (lang_ppf77_finish): Likewise.
+ (lang_ratfor_finish): Likewise.
+ (lang_objc_finish): Likewise.
+
+1999-02-11 Tom Tromey <tromey@cygnus.com>
+
+ * aclocal.in (obsolete_macros): Copied from automake.in.
+ (obsolete_rx): Use only keys of obsolete_macros.
+ (scan_configure): Report replacement macro for an obsolete macro.
+ * automake.in (obsolete_macros): Added ud_GNU_GETTEXT.
+
+ * automake.in (obsolete_macros): Corrected typo in AM_EXEEXT
+ entry. Fixes obsolete2.test.
+
+ * automake.in (obsolete_macros): Use empty string to indicate no
+ substitution.
+ (scan_one_configure_file): Likewise.
+
+1999-02-07 Paul Eggert <eggert@twinsun.com>
+
+ * m4/ccstdc.m4 (AM_PROG_CC_STDC): Prefer -Ae to -Aa
+ -D_HPUX_SOURCE, since -Ae allows `long long' and this is
+ needed by some programs.
+
+1999-02-10 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_texinfo): Added `pgs' to list of
+ extensions. From NISHIDA Keisuke.
+
+1999-02-04 Akim Demaille <demaille@inf.enst.fr>
+
+ * automake.in (handle_texinfo): remove texinfo.tex from
+ TEXINFODIR.
+
+1999-02-02 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_merge_targets): Use INSTALL_STRIP_FLAG.
+ * progs.am (install-@DIR@PROGRAMS): Added INSTALL_STRIP_FLAG.
+ * header-vars.am (INSTALL_PROGRAM): Removed
+ AM_INSTALL_PROGRAM_FLAGS.
+ (INSTALL_STRIP_FLAG): New macro.
+
+ * automake.in: Handle `ypp' as C++ yacc source and `lpp' as C++
+ lex source.
+ (lang_yacc_finish): Likewise.
+ (lang_lex_finish): Likewise.
+
+1999-02-01 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_dist_worker): Correctly find find in $$d,
+ not $$. From Bill Davidson.
+
+ * automake.in (finish_languages): Use "&", not "do". From Pavel
+ Roskin.
+ (handle_single_transform_list): Likewise.
+
+1999-01-29 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_configure): Removed unused variable. From
+ Pavel Roskin.
+
+ * ansi2knr.c: New version from L. Peter Deutsch.
+
+1999-01-22 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (require_file_internal): Correctly examine return
+ value of `system'. From Andris Pavenis. Fixes copy.test.
+
+ * m4/init.m4 (AM_INIT_AUTOMAKE): Require autoconf 2.13.
+
+ * automake.in (lang_ppf77_rewrite): New function. From Jochen
+ Kuepper. Fixes ppf77.test.
+ (lang_ratfor_rewrite): New function
+
+ * automake.in (handle_configure): Use `&' before sub calls (Perl 4
+ fix). From Erez Zadok.
+
+1999-01-15 Tom Tromey <tromey@cygnus.com>
+
+ * configure.in: Version 1.4a (oops).
+
+ * configure.in: Updated version to 1.5a.
+
+1999-01-14 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_configure): Compute $header_dir based on
+ $one_name, not $one_hdr. Reported by Erez Zadok. Fixes
+ confh2.test.
+ (handle_configure): Compute relative path to input header
+ correctly in all cases.
+
+ * automake.in (handle_tests): Avoid error messages from dejagnu
+ test rules. From Karl Heuer.
+
+ * automake.in (handle_texinfo): Add `/' to end of $conf_dir.
+
+ * Makefile.am (AUTOMAKE_OPTIONS): Added `1.4'.
+
+ * texi-vers.am ($(srcdir)/stamp-@VTI@): Find @TEXI@ in srcdir.
+ From Alexandre Oliva and Erez Zadok.
+
+ * automake.in (create): Renamed from touch.
+ (handle_configure): Use create, not touch.
+
+ * config.sub, config.guess: New versions from autoconf.
+
+ * mkinstalldirs: New version from autoconf.
+
+1999-01-12 Tom Tromey <tromey@cygnus.com>
+
+ * config.sub, config.guess, COPYING, texinfo.tex: New versions
+ from FSF.
+
+1999-01-11 Marcus G. Daniels <mgd@chama.santafe.edu>
+
+ * automake.in (PATH_PATTERN): New variable:
+ (INCLUDE_PATTERN): Use it. Ignore all include commands using
+ symbols besides $(top_srcdir) and $(srcdir).
+
+1999-01-11 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * automake.in (handle_dist_worker): avoid failure in `make dist'
+ if last file is a builddir-only file
+
+1999-01-11 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * missing (autoheader): `s' was missing from sed script; grr
+
+1999-01-11 Tom Tromey <tromey@cygnus.com>
+
+ * remake-hdr.am (@STAMP@): Reverted timestamp change.
+ ($(srcdir)/@STAMP@.in): Likewise.
+
+1999-01-10 Tom Tromey <tromey@cygnus.com>
+
+ * Makefile.am (scriptdir): New macro.
+ (script_DATA): Likewise.
+ (install-data-hook): Use them.
+ (EXTRA_DIST): Added script_DATA.
+ (installcheck-local): Use script_DATA.
+
+ * Makefile.am (pkgdata_DATA): Removed duplicate definition.
+
+1999-01-10 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * missing (autoheader): accept multiple header files
+ (automake): simplify sed processing
+
+1999-01-10 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * automake.in (handle_configure, stamp_dir): create only one stamp
+ file per header, instead of one in the top-level directory and one
+ in the directory that contains the header.
+
+1999-01-10 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (lang_objc_finish): Formatting fix.
+
+ * automake.in (objc_extensions): New sub.
+ (handle_dependencies): Only generate dependency-tracking code for
+ ObjC when ObjC source seen.
+
+-----
+
+Copyright 1999-2017 Free Software Foundation, Inc.
+
+Copying and distribution of this file, with or without modification, are
+permitted provided the copyright notice and this notice are preserved.
diff --git a/old/ChangeLog.01 b/old/ChangeLog.01
new file mode 100644
index 000000000..a522ea76c
--- /dev/null
+++ b/old/ChangeLog.01
@@ -0,0 +1,4937 @@
+2001-12-31 Tom Tromey <tromey@redhat.com>
+
+ * automake.texi (Extending): Document installcheck-local. Added
+ installdirs-local index entry.
+ (Tests): Document installcheck-local.
+
+ * automake.in (handle_single_transform_list): Indentation fix.
+
+2001-12-31 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (common_files): Add COPYING.DOC.
+ Suggested by Karl Berry.
+
+2001-12-30 Tom Tromey <tromey@redhat.com>
+
+ * automake.in (define_configure_variable): Define a user macro,
+ not an automake macro.
+ * tests/Makefile.am (TESTS): Added ar.test.
+ * tests/ar.test: New file.
+
+ For PR automake/211:
+ * automake.in (object_compilation_map): New global.
+ (initialize_per_input): Initialize it.
+ (COMPILE_LIBTOOL): New constant.
+ (COMPILE_ORDINARY): Likewise.
+ * tests/Makefile.am (TESTS): Added pr211.test.
+ * tests/pr211.test: New file.
+
+ For PR automake/215:
+ * configure.in: Use AM_AUTOMAKE_OPTIONS.
+ * Makefile.am (AUTOMAKE_OPTIONS): Removed.
+ * automake.texi (Macros): Document AM_AUTOMAKE_OPTIONS.
+ (Options): Mention AM_AUTOMAKE_OPTIONS.
+ * automake.in (global_options): New global.
+ (global_options_line): Likewise.
+ (scan_autoconf_traces): Trace AM_AUTOMAKE_OPTIONS.
+ (scan_one_autoconf_file): Likewise.
+ (process_option_list): New function.
+ (handle_options): Use it. Also, handle global options.
+ * m4/Makefile.am (m4data_DATA): Added options.m4.
+ * m4/options.m4: New file.
+
+ * lib/am/install.am (?SUBDIRS?installdirs-am): Handle
+ installdirs-local.
+ (?!SUBDIRS?installdirs): Likewise.
+ * automake.in (handle_installdirs): Handle installdirs-local.
+ * automake.texi (Extending): Mention installdirs.
+ * tests/Makefile.am (TESTS): Added installdir.test.
+ * tests/installdir.test: New file.
+
+2001-12-30 Akim Demaille <akim@epita.fr>
+
+ * lib/am/yacc.am: Also rename the possible y.output file.
+ Remove the trailing y.tab.h.
+
+2001-12-30 Paolo Bonzini <bonzini@gnu.org>
+
+ * automake.texi (Install): Remove mention of nonexistent
+ uninstall-hook.
+
+2001-12-30 Alan Modra <amodra@bigpond.net.au>
+
+ * automake.in (generate_makefile): Unlink output file before
+ opening so that any hard links are not changed.
+
+2001-12-30 Tom Tromey <tromey@redhat.com>
+
+ * tests/pr220.test: Use `required' to pick up gcc.
+
+ For PR automake/243:
+ * m4/depout.m4 (_AM_OUTPUT_DEPENDENCY_COMMANDS): Strip everything
+ after `:'.
+ * tests/Makefile.am (TESTS): Added pr243.test.
+ * tests/pr243.test: New file.
+
+ For PR automake/220:
+ * tests/Makefile.am (TESTS): Added pr220.test.
+ * tests/pr220.test: New file.
+ * m4/cond.m4 (AM_CONDITIONAL): Cause creation of config.status to
+ fail if conditional was never run.
+
+ For PR automake/260:
+ * lib/depcomp (tru64): Correctly handle libtool case.
+ From doreille@smr.ch.
+
+2001-12-30 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * lib/am/distdir.am (distcleancheck_listfiles): Unquote.
+ Reported by Yann Droneaud.
+
+2001-12-29 Tom Tromey <tromey@redhat.com>
+
+ For PR automake/266:
+ * tests/Makefile.am (TESTS): Added pr266.test.
+ * tests/pr266.test: New file.
+ * m4/depout.m4 (_AM_OUTPUT_DEPENDENCY_COMMANDS): Handle
+ non-standard name for makefile.
+
+ For PR automake/279:
+ * automake.in (conditional_ambiguous_p): New sub.
+ (handle_lib_objects_cond): Use it.
+ (check_ambiguous_conditional): Use it.
+ * tests/Makefile.am (TESTS): Added pr279.test, pr279-2.test.
+ * tests/pr279.test: New file.
+ * tests/pr279-2.test: New file.
+
+2001-12-26 Tom Tromey <tromey@redhat.com>
+
+ For PR automake/249:
+ * tests/Makefile.am (TESTS): Added nodist2.test.
+ * tests/nodist2.test: New file
+
+2001-12-26 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
+
+ * m4/multi.m4: Fix quoting in AC_OUTPUT_COMMANDS.
+
+2001-12-26 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * configure.in: Test for Autoconf >= 2.52.
+ * tests/defs (needs_autoconf, has_autoconf): Delete definition.
+ * tests/ansi3.test, tests/ansi5.test, tests/ccnoco.test,
+ tests/cond4.test, tests/cond9.test, tests/cond16.test,
+ tests/cond18.test, tests/cond19.test, tests/cond20.test,
+ tests/confsub.test, tests/depcomp2.test, tests/depdist.test,
+ tests/depend2.test, tests/dirname.test, tests/distname.test,
+ tests/extra5.test, tests/install2.test, tests/lex3.test,
+ tests/make.test, tests/nobase.test, tests/pr9.test,
+ tests/pr87.test, tests/stamph2.test, tests/subdir5.test,
+ tests/subdirbuiltsources.test, tests/subobj3.test,
+ tests/subobj5.test, tests/subobj6.test, tests/substref.test,
+ tests/target-cflags.test, tests/yacc4.test, tests/yacc7.test,
+ tests/yaccvpath.test: Do not use $needs_autoconf.
+
+2001-12-14 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * configure.in: Bump version to 1.5c.
+
+2001-12-14 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * configure.in: Bump version to 1.5b.
+
+ * lib/config.sub, lib/config.guess: New versions from FSF.
+
+ * lib/am/lex.am, lib/am/yacc.am: Use `rm -f', not `rm'.
+
+2001-12-12 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (check_gnu_standards, check_gnits_standards): Pass
+ "$am_file.am" as WHERE argument to require_file.
+
+2001-12-12 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * m4/python.m4 (AM_PATH_PYTHON): Check all known Python interpreters
+ in loop until we find one the satisfies the user supplied version.
+ Add python2 to the list of known interpreters. Don't use
+ changequote. Cache the calculation of PYTHON_VERSION and
+ PYTHON_PLATFORM.
+ (AM_PYTHON_CHECK_VERSION): New function, extracted from
+ AM_PATH_PYTHON and modernized.
+ * m4/runlog.m4: New file.
+ * m4/Makefile.am (m4data_DATA): Add it.
+
+2001-12-06 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/confsub.test, tests/depdist.test, tests/extra5.test,
+ tests/nobase.test, tests/stamph2.test,
+ tests/subdirbuiltsources.test: Require Autoconf.
+
+2001-12-05 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.texi (Dist): Document $(DISTCHECK_CONFIGURE_FLAGS).
+ * lib/am/distdir.am (distcheck): Honnor $(DISTCHECK_CONFIGURE_FLAGS).
+ Suggested by Merijn de Jonge.
+
+2001-12-05 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * lib/am/tags.am (ID): Search $(LISP) files in $(srcdir),
+ like other ID dependencies.
+ Suggested by Christian Cornelssen.
+
+2001-12-05 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (handle_dist): Distribute common files which
+ do not exist but are target of a Makefile rule.
+ * automake.texi (Dist): Update.
+ * test/builtcommon3.test: New file.
+ * test/Makefile.am (TESTS): Add distcommon3.test.
+
+2001-12-04 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (macro_define): Fix misuse of chomp introduced on
+ 2001-11-28.
+
+2001-11-28 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (append_comments): New. Extracted from
+ read_am_file. Match '\n' with a regexp, don't use substr (the
+ perlport man page says '\n' is not always one byte wide).
+ (read_am_file): Use it. Always chomp $_.
+ (file_contents_internal): Use append_comments.
+ (macro_define): Don't treat the trailing '\n' with substr, use
+ a regexp or chomp.
+
+2001-11-28 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/defs: Turn on shell traces when VERBOSE=x.
+
+2001-11-26 Tom Tromey <tromey@redhat.com>
+
+ * automake.texi (Assembly Support): Mention .s and .S as only
+ suffixes.
+
+2001-11-26 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/subdirbuiltsources.test: Set -e after sourcing defs, not
+ before.
+
+2001-11-26 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/lex3.test: Require GNU Make.
+
+2001-11-26 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/defs (ACLOCAL): Add -I $srcdir/../m4 before any other
+ directory.
+
+2001-11-26 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * lib/am/tags.am (TAGS): Search %CONFIG% and $(LISP) files
+ in $(srcdir), like other TAGS dependencies.
+ Suggested by Christian Cornelssen.
+
+2001-11-26 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&macro_define): Use $where when reporting an error,
+ not the place where the macro was first defined since (i) if this
+ is the first definition, then obviously it was not defined before,
+ and (ii) anyway, the error is with the new definition, not the
+ first.
+
+2001-11-26 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * lib/am/distdir.am (distcheck): Call distcleancheck.
+ (distcleancheck_listfiles, distcleancheck): New, extracted from
+ distcheck.
+ * automake.texi (Checking the distribution): Document
+ distcleancheck_listfiles and distcleancheck.
+
+2001-11-25 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (scan_one_autoconf_file): Parenthesize qw// in
+ foreach invocation, otherwise Perl5.005_03 complains about a
+ syntax error. Reported by Yann Droneaud.
+
+2001-11-19 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (scan_texinfo_file): Suppress FIXME about strange
+ map behavior.
+
+2001-11-19 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/defs (aclocaldir): Check for existence of libtool.m4 and
+ gettext.m4 if required.
+
+2001-11-16 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (define_objects_from_sources,
+ handle_lib_objects_cond, value_to_list): Use quotemeta instead of
+ the equivalant substitution.
+
+2001-11-16 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (SUFFIX_RULE_PATTERN): Add '_(){}$@' to the
+ set of accepted characters in extensions.
+ (rule_define): Convert '.o' and '.obj' into '$(OBJEXT)' for
+ internall use.
+ * tests/suffix6.test: Ensure that `.o' is handled like `.$(OBJEXT)'.
+
+2001-11-16 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.texi (Suffixes): Don't require SUFFIXES, but document
+ its use for the "extreme" cases.
+
+2001-11-16 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (rule_define): Use $KNOWN_EXTENSIONS_PATTERN
+ to match suffix rules for known extensions, or call
+ accept_extensions on suffixe rules for unknown extensions.
+ (var_SUFFIXES_trigger): New function.
+ (macro_define): Call var_VAR_trigger when $VAR is updated.
+ * tests/suffix6.test, tests/suffix7.test: New files.
+ * tests/Makefile.am (TESTS): Add suffix6.test and suffix7.test.
+
+2001-11-16 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (KNOWN_EXTENSIONS_PATTERN, known_extensions_list):
+ New variables.
+ (handle_single_transform_list, lang_yacc_target_hook): Use
+ KNOWN_EXTENSIONS_PATTERN.
+ (accept_extension): New function.
+ (register_language): Call it.
+
+2001-11-16 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ At every place where an "$extension" is used, include the leading
+ dot in the extension, don't hardcode it when building the filename.
+ That will make any support for a dot-less extension easier to add.
+
+ * automake.in (SUFFIX_RULE_PATTERN): Include extension dots in
+ backref groups.
+ ("main"): Prepend a '.' to the supported extensions of all
+ languages (e.g. 'c' becomes '.c').
+ (handle_languages, handle_single_transform_list,
+ handle_lib_objects_cond, handle_headers, derive_suffix,
+ rule_define): Do not add a dot
+ before extensions, and include dots in matching groups.
+ * lib/am/depend2.am (.%EXT%.o, .%EXT%.obj, .%EXT%.lo): Rename as ...
+ (%EXT%.o, %EXT%.obj, %EXT%.lo): ... these.
+ * lib/am/lex.am (.%EXT%.%DERIVED-EXT%): Rename as ...
+ (%EXT%%DERIVED-EXT%): ... this.
+ * lib/am/yacc.am: Likewise.
+
+2001-11-12 Akim Demaille <akim@epita.fr>
+
+ * m4/make.m4 (AM_MAKE_INCLUDE): Serial 2.
+ Use `"#"' and `"\""', which
+ Autoconf mode prefers over `'#'' and `'"''.
+ * m4/missing.m4 (AM_MISSING_HAS_RUN): Serial 3.
+ Rely on AC_MSG 2.50's quotation.
+
+2001-11-09 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (scan_texinfo_file): Typo from 2001-11-05.
+
+2001-11-09 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * lib/am/distdir.am (distdir): Also look for directory in build
+ directory first. (See 2001-05-14.)
+ * tests/Makefile.am (TESTS): Add extra5.test.
+ * tests/extra5.test: New file.
+ From Dean Povey.
+
+2001-11-09 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ Fix for distcommon2.test:
+ * automake.in (automake_needs_to_reprocess_all_files): New
+ variable.
+ ("main"): Process all Makefiles a second time if
+ $automake_needs_to_reprocess_all_files is set.
+ (maybe_push_required_file): Return 1 or 0 whether the file is
+ pushed or not.
+ (require_file_internal): Set $automake_needs_to_reprocess_all_files
+ if an added file can't be pushed.
+
+ * test/distcommon2.test: New file.
+ * test/Makefile.am (TESTS): Add distcommon2.test.
+ From Pavel Roskin.
+
+2001-11-09 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (exec_dir_p): Remove. Replace by...
+ (EXEC_DIR_PATTERN):... this.
+ (am_install_var): Adjust to use EXEC_DIR_PATTERN.
+
+2001-11-09 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ Fix for nobase.test:
+ * lib/am/header-vars.am (install_sh_DATA): New.
+ * lib/am/data.am (install-%DIR%%PRIMARY%): Declare and use
+ %DIR%%PRIMARY%_INSTALL, and set it to $(install_sh_DATA) instead
+ of $(INSTALL_DATA) for nobase_ targets.
+ * lib/am/lisp.am (install-%DIR%LISP): Likewise.
+ * lib/am/python.am (install-%DIR%PYTHON): Likewise.
+ * tests/nobase.test (configure.in): Append AC_OUTPUT.
+ * tests/Makefile.am (XFAIL_TESTS): Remove nobase.test.
+
+2001-11-08 Akim Demaille <akim@epita.fr>
+
+ * automake.texi: Remove references to stamp-h.in, which no longer
+ exists.
+ * tests/stamph2.test: Formatting change.
+
+2001-11-08 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/suffix3.test: Check for foo.$(OBJEXT) in Makefile.in.
+ Don't use -Wno-error.
+
+2001-11-08 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/suffix4.test ($AUTOMAKE): Don't use -Wno-error.
+ * tests/suffix5.test ($AUTOMAKE): Likewise.
+
+2001-11-07 Akim Demaille <akim@epita.fr>
+
+ * m4/init.m4 (AM_INIT_AUTOMAKE): Don't escape quotes in
+ AC_MSG_ERROR.
+ Reported by Jim Meyering.
+
+2001-11-07 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * lib/am/distdir.am (am__remove_distdir): Define in topdir only.
+
+2001-11-05 Paul Eggert <eggert@twinsun.com>
+
+ * lib/am/distdir.am (am__remove_distdir):
+ New macro. Do not change permission of non-directories.
+ Change only user permission, as there's no point to changing group
+ or other permission.
+ (distdir, dist, dist-bzip2, dist-tarZ, dist-shar, dist-zip, dist-all,
+ distcheck): Use it.
+
+2001-11-05 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * lib/am/python.am: Cleanup the cleaning section.
+ * automake.texi (Python): Remove documentation for PYCFILES
+ and PYOFILES. Update the first paragraphes.
+
+2001-11-05 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (FOREIGN, GNU, GNITS, AC_CANONICAL_HOST,
+ AC_CANONICAL_SYSTEM, MOSTLY_CLEAN, DIST_CLEAN): Define as constants.
+ Adjust usage everywhere.
+
+2001-11-05 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (libtool_files, libtool_sometimes, common_files,
+ common_sometimes, config_aux_path): Use qw to simplify definition.
+ (scan_texinfo_file) <clean_suffixes, predefined_index,
+ hidden_index>: Likewise.
+ (scan_autoconf_traces) <traced>: Likewise.
+ (scan_one_autoconf_file, check_gnu_standards, resolve_linker):
+ Likewise.
+
+2001-11-05 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (handle_single_transform_list): Pass $nonansi_obj to
+ derive_suffix. Don't use an hardcoded 'o' for object extensions.
+ (derive_suffix): Accept $OBJ as a second argument, don't
+ hardcode 'o'.
+ * tests/suffix5.test: New test.
+ * tests/Makefile.am (TESTS): Add suffix5.test.
+ Reported by Arkadiusz Miskiewicz <misiek@pld.ORG.PL>.
+
+2001-11-05 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (handle_single_transform_list): Don't call
+ $lang->target_hook for undefinied langages.
+ * tests/suffix4.test: New test.
+ * tests/Makefile.am (TESTS): Add suffix4.test.
+ Reported by Dmitry Mikhin <dmitrym@acres.com.au>.
+
+2001-11-05 Akim Demaille <akim@epita.fr>
+
+ * automake.in (@common_sometimes, &handle_configure): No longer
+ use stamp-hin.
+ * lib/am/remake-hdr.am: Adjust.
+ * tests/confh.test: There is no stamp.hin.
+
+2001-11-01 Akim Demaille <akim@epita.fr>
+
+ * lib/am/lex.am, lib/am/yacc.am: Use the output file name in
+ `#line' and multiple inclusion guards.
+ * lib/ylwrap: Remove debugging code.
+ (input_dir, input_rx): Move where used.
+ Use the output file name in `#line'.
+
+2001-10-31 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (transform): Update documentation.
+
+2001-10-31 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * m4/gcj.m4 (AM_PROG_GCJ): Define GCJFLAGS if unset.
+ Reported by Olivier Louchart-Fletcher <olivier@zipworld.com.au>.
+
+2001-10-30 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&create): Reinstall.
+
+2001-10-30 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&append_exeext): Use macro_delete.
+
+2001-10-30 Akim Demaille <akim@epita.fr>
+
+ * automake.in ($verbose): Remove, inherited from
+ Automake::General.
+ (&variable_delete): Rename as...
+ (&macro_delete): this, for consistency.
+ (&variable_assert): New.
+ (&variable_value_as_list, &variable_value_as_list_recursive_worker):
+ Use it.
+
+2001-10-29 Akim Demaille <akim@epita.fr>
+
+ * m4/lispdir.m4 (AM_PATH_LISPDIR): Use AC_RUN_LOG to avoid
+ cluttering configure's stdout.
+
+2001-10-28 Akim Demaille <akim@epita.fr>
+
+ * automake.in: Various formatting changes.
+ (create): Remove, unused.
+
+2001-10-28 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&append_exeext): New.
+ (&am_primary_prefixes): Use it.
+
+2001-10-28 Akim Demaille <akim@epita.fr>
+
+ * automake.in (am_primary_prefixes): Now, in accordance with its
+ comment, return the list of prefixes actually used, not all the
+ possible prefixes for a primary.
+ (&handle_libraries, &handle_ltlibraries, &handle_java)
+ (&am_install_var): Adjust.
+ * Makefile.am (maintainer-check): Allow `local $_;'.
+
+2001-10-28 Akim Demaille <akim@epita.fr>
+
+ * automake.in: Various formatting changes.
+ (&variable_defined): Second argument is optional.
+
+2001-10-28 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&am_primary_prefixes): Now returns a list, not a
+ hash.
+ (&handle_libraries, &handle_ltlibraries, &handle_java)
+ (&am_install_var): Adjust.
+
+2001-10-28 Akim Demaille <akim@epita.fr>
+
+ * automake.in (@libtoolize_files, @libtoolize_sometimes): Rename
+ as...
+ (@libtool_files, @libtool_sometimes): these.
+ ($libtool_location): Remove, completely replaced by $seen_libtool.
+ (&require_file_internal): Do not run libtoolize, that's
+ autoreconf's job.
+
+2001-10-28 Akim Demaille <akim@epita.fr>
+
+ * tests/acoutnoq.test, tests/acoutput.test, tests/acoutqnl.test,
+ * tests/acouttbs.test, tests/auxdir.test, tests/colon.test,
+ * tests/colon2.test, tests/colon3.test, tests/colon4.test,
+ * tests/colon5.test, tests/colon6.test, tests/colon7.test,
+ * tests/conf2.test, tests/config.test, tests/depcomp.test,
+ * tests/depcomp2.test, tests/discover.test, tests/fpinst2.test,
+ * tests/fpinstall.test, tests/ldadd.test, tests/libobj7.test,
+ * tests/libobj8.test, tests/output.test, tests/output2.test,
+ * tests/output3.test, tests/output4.test, tests/output5.test,
+ * tests/pr2.test, tests/remake.test, tests/remake2.test,
+ * tests/remake3.test, tests/scripts.test, tests/stamph.test,
+ * tests/subdir.test, tests/subdir2.test, tests/subdir4.test,
+ * tests/tagsub.test, tests/texinfo8.test: Remove PACKAGE and VERSION
+ assignments.
+
+2001-10-28 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&scan_autoconf_traces): Use eq for equality.
+ Anchor regexps.
+ Remove dead comment.
+ (&initialize_per_input): Don't initialize several times the same
+ vars.
+
+2001-10-28 Akim Demaille <akim@epita.fr>
+
+ * automake.in (scan_one_autoconf_file): When using %generalize, be
+ sure to replace only words. AC_FUNC_OBSTACK was matching
+ M4_AC_FUNC_OBSTACK.
+
+2001-10-26 Akim Demaille <akim@epita.fr>
+
+ * tests/stamph2.test: Strengthen.
+ * tests/confh2.test, tests/confh3.test: Remove.
+ These are bad tests: they don't check the effects, but some
+ internal details in Makefile.
+ And they are covered by stamph2.test.
+
+2001-10-26 Akim Demaille <akim@epita.fr>
+
+ Now that stamp-h's are created by config.status, we don't need to
+ handle them in Makefile's.
+
+ * lib/am/remake-hdr.am (%STAMP%): Just run config.status.
+ * m4/header.m4 (_AM_STAMP): New.
+ (_AM_CONFIG_HEADER): Use it.
+
+2001-10-26 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&generate_makefile, &handle_texinfo_helper)
+ (&handle_man_pages, &handle_dist, &handle_configure, &handle_all)
+ (&define_pretty_variable, &read_am_file, &file_contents_internal)
+ (&am_install_var, &push_dist_common, &unquote_m4_arg): Simplify
+ `join (' ', @list)' into `"@list"'.
+
+2001-10-26 Akim Demaille <akim@epita.fr>
+
+ * automake.in (@config_fullnames, @config_names): Remove.
+ (@config_headers): Now contains the actual spec used in
+ AC_CONFIG_HEADERS.
+ (&split_config_file_spec): New.
+ (&handle_tags, &handle_configure, &handle_all, &scan_autoconf_traces)
+ (&scan_one_autoconf_file): Adjust.
+ (&scan_one_autoconf_file): Pff, don't think _AM_CONFIG_HEADER is
+ AM_CONFIG_HEADER.
+
+2001-10-26 Akim Demaille <akim@epita.fr>
+
+ * m4/header.m4 (_AM_CONFIG_HEADER): New.
+ (AM_CONFIG_HEADER): Use it.
+
+2001-10-26 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&handle_configure): Use the config.status 2.50
+ invocation syntax for config files and headers.
+ autoheader needs the name of the file to create, not from what it
+ must be created, hence CONFIG_HEADER_FULL is $one_name, not
+ $one_fullname.
+ * lib/am/configure.am, lib/am/remake-hdr.am: Likewise.
+ * tests/confsub.test (SUBDIRS): Adjust to the new config.status
+ invocation.
+ Strengthen: Use the non-default config.hin source.
+ Strengthen: Make sure config.h is properly updated when config.hin
+ is changed.
+
+2001-10-26 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&handle_configure): Seeing Automake files in
+ @other_input_files is a programming error, not merely something to
+ ignore.
+ Factor slightly the code.
+
+2001-10-26 Akim Demaille <akim@epita.fr>
+
+ * automake.in ($canonical_location): New.
+ Use it.
+ (&require_config_file, $line_error): Remove.
+
+2001-10-24 Akim Demaille <akim@epita.fr>
+
+ * automake.in: Use &verbose.
+ (&generate_makefile, &scan_texinfo_file, &scan_aclocal_m4): Use
+ Automake::XFile.
+
+2001-10-25 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * lib/am/python.am (install-%DIR%PYTHON, uninstall-%DIR%PYTHON):
+ Have the basename step optional and use %NDIR% instead of %DIR% in
+ filenames in order to support 'nobase_'.
+
+2001-10-24 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (handle_languages, handle_single_transform_list,
+ lang_c_rewrite): Use require_conf_file instead of
+ require_config_file to require depcomp or compile from
+ Makefile.am. (This is a part of my patch of 2001-10-15 which got
+ mistakenly reverted.)
+
+2001-10-24 Akim Demaille <akim@epita.fr>
+
+ * tests/confh.test: Since 2001-10-20 Kevin Ryde, stamp-h is
+ stamp-h1.
+
+2001-10-24 Akim Demaille <akim@epita.fr>
+
+ Since the ansi2knr patch from 2001-10-20 Kevin Ryde, `$U' can
+ appear in Makefile.in in the clean rule.
+
+ * tests/cxxansi.test: Adjust.
+
+2001-10-24 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&am_print_error, &am_file_error, &am_macro_error)
+ (&am_target_error, &am_line_error, &am_conf_error, &am_file_warning):
+ Rename as...
+ (&print_error, &file_error, &macro_error, &target_error, &line_error)
+ (&conf_error, &file_warning): these.
+ (&file_warning): Fix the prototype and argument handling.
+ (&am_line_warning): Remove, unused.
+
+ Also, repair the misapplication of previous patches.
+
+2001-10-21 Akim Demaille <akim@epita.fr>
+
+ * automake.in ($ac_output_location): Replace with...
+ ($ac_config_files_location): this.
+ (&scan_autoconf_traces): We don't need $file and $line, $here is
+ enough.
+ (&scan_one_autoconf_file): Use `$in_ac_output' to store the macro
+ name (AC_OUTPUT or AC_CONFIG_FILES) for error messages.
+
+2001-10-21 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&require_file_with_macro): Use &require_file.
+ (&read_am_file): Move the definition of $here at its proper place.
+
+2001-10-21 Akim Demaille <akim@epita.fr>
+
+ * automake.in ($libtool_line, $seen_pythondir): Replace with...
+ ($libtool_location, $pythondir_location): these.
+ (&require_conf_file_with_line, &require_conf_file_with_line):
+ Remove, unused.
+ (&require_file): Don't forget $where.
+ (&require_conf_file): Ahem... Fix the name.
+ (&require_config_file): Invoke &require_conf_file, not yourself.
+ (&am_line_error): Fix the default am_file_error invocation.
+
+2001-10-21 Akim Demaille <akim@epita.fr>
+
+ * automake.in ($seen_lispdir): Replace with...
+ ($am_lispdir_location): this.
+ (&require_conf_file): New.
+ (&require_config_file, &require_conf_file_with_line,
+ (&require_conf_file_with_conf_line): Use it.
+ (&require_conf_file_with_macro): New.
+
+2001-10-21 Akim Demaille <akim@epita.fr>
+
+ * automake.in ($config_header_line, $ac_output_line)
+ ($ac_gettext_line, $package_version_line): Replace with...
+ ($config_header_location, $ac_output_location)
+ ($ac_gettext_location, $package_version_location): these.
+ (&require_file_with_conf_line, &require_file_with_line): Remove,
+ no longer used.
+
+2001-10-21 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&require_file_internal): Instead of $file and $line,
+ take $where as first argument.
+ Adjust all callers.
+ (&require_file_with_macro): New.
+ Use it where internal black magic was used to recover the location
+ of a macro definition.
+
+2001-10-21 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&read_am_file): Define and use `$here'.
+ Avoid using am_line_error.
+
+2001-10-21 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&am_target_error): New.
+ Use it where appropriate instead of...
+ (&am_line_error): this.
+ Using it for a target is a croak error.
+
+2001-10-21 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&am_macro_error): New.
+ Use it where appropriate instead of...
+ (&am_line_error): this.
+ Using it for a macro is a croak error.
+
+2001-10-21 Akim Demaille <akim@epita.fr>
+
+ * tests/asm.test: s/AC_PROG_AS/AM_PROG_AS/.
+ AC_OUTPUT a Makefile.
+
+2001-10-21 Akim Demaille <akim@epita.fr>
+
+ * automake.in (%var_line): Rename as...
+ (%var_location): this.
+ Use it consistently as the location where the macro is defined,
+ file and line when possible, otherwise just file.
+ (&read_am_file): Rules have their own location tracking, don't
+ pollute %var_location.
+
+2001-10-21 Akim Demaille <akim@epita.fr>
+
+ * automake.in (am_line_error): Clarify.
+
+2001-10-21 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&am_print_error): Set $exit_status since all your
+ users do.
+ (&am_error, &am_file_error, &am_line_error, &am_conf_error):
+ Don't.
+ (&am_conf_line_error, &am_conf_line_warning): Remove.
+ Adjust callers to use &am_file_error and...
+ (&am_file_warning): new.
+
+2001-10-21 Akim Demaille <akim@epita.fr>
+
+ * m4/regex.m4: Use AC_LIBOBJ.
+ Require 2.50, and use AC_LIBSOURCES freely.
+ * tests/asm.tests: Formatting changes.
+ Exercise AM_PROG_AS.
+
+2001-10-21 Akim Demaille <akim@epita.fr>
+
+ * tests/install.test: This test is an empty shell, do not run
+ automake.
+ * tests/Makefile.am (TESTS): Don't run it.
+ * tests/defs (ACLOCAL): When using gettext, pass in the installed
+ aclocaldir.
+ * tests/subdircond.test (SUBDIRS): AM_GNU_GETTEXT needs automake
+ --add--missing.
+ * tests/obsolete2.test: Remove, merged into...
+ * tests/obsolete.test: here.
+ Both aclocal and automake should complain.
+
+2001-10-21 Akim Demaille <akim@epita.fr>
+
+ * automake.in (scan_autoconf_traces): Don't recognize AC_SUBSTs
+ for symbols which cannot be Make macro names.
+ (scan_one_autoconf_file): `$here' is new.
+ Use it consistently instead of `1' to remember a token was seen.
+
+2001-10-21 Akim Demaille <akim@epita.fr>
+
+ * tests/subdircond.test: Requires gettext.
+ * tests/libobj.test, tests/libobj10.test, tests/libobj2.test,
+ * tests/libobj6.test, tests/libobj9.test, tests/libtool.test,
+ * tests/libtool2.test, tests/ltdeps.test, tests/ltlibobjs.test,
+ * tests/nolink.test, tests/obsolete.test, tests/pr72.test,
+ * tests/sinclude.test, tests/subdircond.test, tests/subobj4.test:
+ Produce valid configure.in, use aclocal appropriately, declare
+ when libtool is required.
+
+2001-10-21 Akim Demaille <akim@epita.fr>
+
+ * m4/lex.m4: Don't run AC_DECL_YYTEXT, Autoconf does.
+ * automake.texi (Macros, Yacc and Lex): Adjust.
+ * automake.in ($seen_decl_yytext): Rename as...
+ ($seen_prog_lex): this.
+ (&scan_autoconf_traces): Add AC_PROG_LEX support.
+ (&scan_one_autoconf_file, &lang_lex_finish): Adjust.
+
+2001-10-21 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&scan_autoconf_traces): Add support for
+ AM_PATH_LISPDIR and AM_PATH_PYTHON.
+
+2001-10-21 Akim Demaille <akim@epita.fr>
+
+ * tests/defs (ACLOCAL): Point to the installed aclocaldir if
+ libtool is required.
+ * tests/lex.test: Run AC_INIT once.
+ * tests/ldflags.test, tests/listval.test, tests/suffix2.test:
+ Libtool is required.
+ * tests/header.test: Build a correct configure.in.
+ * tests/defun2.test (configure.in): Be a bit respectful with
+ Autoconf, close the macro invocations.
+ * tests/confdeps.test: Even when not using aclocal, aclocal.m4
+ must be correct.
+
+ * automake.in (scan_autoconf_traces): Add support for
+ AC_CANONICAL_HOST, AC_CANONICAL_SYSTEM, A[CM]_PROG_LIBTOOL,
+ AM_CONFIG_HEADER, AM_MAINTAINER_MODE.
+ * tests/condincl.test (target): Better pattern, to avoid matching
+ the definition of `target_alias' which is now properly discovered
+ as an AC_SUBST by traces.
+ * cond4.test: Better grep pattern: After all, why shouldn't
+ TWO_FALSE be AC_SUBST properly.
+ * tests/installsh.test (AUTOMAKE, ACLOCAL): Adjust.
+
+2001-10-20 Kevin Ryde <user42@zip.com.au>
+
+ * lib/am/ansi2knr.am (mostlyclean-kr): Only rm *_.c when
+ actually using ansi2knr.
+
+ * automake.in (handle_configure): Always put a number on $stamp_name,
+ to match AM_CONFIG_HEADER.
+
+2001-10-20 Tom Tromey <tromey@redhat.com>
+
+ * tests/Makefile.am (TESTS): Added condd.test.
+ (XFAIL_TESTS): Added condd.test.
+ * tests/condd.test: New file.
+
+2001-10-20 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&scan_autoconf_traces): Add support for
+ AM_C_PROTOTYPES, AM_GNU_GETTEXT, AM_PROG_CC_C_O, and
+ AC_CONFIG_AUX_DIR.
+ * tests/alpha.test (configure.in): Automake wants a Makefile.
+
+2001-10-20 Akim Demaille <akim@epita.fr>
+
+ * automake.in (scan_autoconf_traces): Use an unlikely to be used
+ separator between trace arguments, in particular not `:' as it is
+ within AC_CONFIG_FILES's $1.
+
+2001-10-20 Akim Demaille <akim@epita.fr>
+
+ * tests/alpha.test (configure.in): Create, don't append. A single
+ AC_INIT is enough.
+
+2001-10-20 Akim Demaille <akim@epita.fr>
+
+ * tests/acoutnoq.test, tests/acoutput.test, tests/acoutput2.test,
+ * tests/acoutqnl.test, tests/acouttbs.test, tests/all.test,
+ * tests/alpha.test, tests/ansi.test, tests/asm.test,
+ * tests/auxdir.test, tests/auxdir2.test, tests/backsl2.test,
+ * tests/badline.test, tests/block.test, tests/canon2.test,
+ * tests/check.test, tests/checkall.test, tests/clean.test,
+ * tests/colneq.test, tests/colneq2.test, tests/colon.test,
+ * tests/colon2.test, tests/colon3.test, tests/colon4.test,
+ * tests/colon5.test, tests/colon6.test, tests/colon7.test,
+ * tests/comment.test, tests/comment3.test, tests/cond.test,
+ * tests/cond2.test, tests/cond6.test, tests/cond7.test,
+ * tests/condincl.test, tests/condincl2.test, tests/condman.test,
+ * tests/condman2.test, tests/confdist.test, tests/confh.test,
+ * tests/confh2.test, tests/confh3.test, tests/confvar.test,
+ * tests/confvar2.test, tests/copy.test, tests/ctarget1.test,
+ * tests/cxxcpp.test, tests/dash.test, tests/dejagnu.test,
+ * tests/dejagnu2.test, tests/distcommon.test, tests/distdir.test,
+ * tests/else.test, tests/empty.test, tests/exdir.test,
+ * tests/exdir2.test, tests/extra3.test, tests/extra4.test,
+ * tests/flibs.test, tests/fnoc.test, tests/fo.test,
+ * tests/fonly.test, tests/fortdep.test, tests/fpinst2.test,
+ * tests/fpinstall.test, tests/gcj2.test, tests/gnits.test,
+ * tests/include.test, tests/info.test, tests/insh.test,
+ * tests/insh2.test, tests/install.test, tests/installsh.test,
+ * tests/instdata.test, tests/instdata2.test, tests/instexec.test,
+ * tests/insthook.test, tests/instman.test, tests/instman2.test,
+ * tests/java.test, tests/javaprim.test, tests/javasubst.test,
+ * tests/libobj3.test, tests/link_f_only.test, tests/lisp.test,
+ * tests/man.test, tests/mclean.test, tests/mdate.test,
+ * tests/mdate2.test, tests/mdate3.test, tests/mdate4.test,
+ * tests/mkinst2.test, tests/mkinstall.test, tests/nodepcomp.test,
+ * tests/noinst.test, tests/obsolete.test, tests/obsolete2.test,
+ * tests/outdir.test, tests/output.test, tests/output2.test,
+ * tests/output3.test, tests/output4.test, tests/output5.test,
+ * tests/package.test, tests/pluseq.test, tests/pluseq2.test,
+ * tests/pluseq3.test, tests/pluseq5.test, tests/pluseq6.test,
+ * tests/pluseq8.test, tests/ppf77.test, tests/pr2.test,
+ * tests/primary.test, tests/proginst.test, tests/python.test,
+ * tests/remake.test, tests/remake2.test, tests/remake3.test,
+ * tests/rulepat.test, tests/scripts.test, tests/seenc.test,
+ * tests/sinclude.test, tests/spell.test, tests/spell3.test,
+ * tests/spelling.test, tests/stamph.test, tests/subdir.test,
+ * tests/subdir2.test, tests/subdircond.test, tests/subst.test,
+ * tests/symlink.test, tests/symlink2.test, tests/symlink3.test,
+ * tests/syntax.test, tests/tags.test, tests/tagsub.test,
+ * tests/texinfo.test, tests/texinfo10.test, tests/texinfo2.test,
+ * tests/texinfo3.test, tests/texinfo4.test, tests/texinfo5.test,
+ * tests/texinfo6.test, tests/texinfo7.test, tests/texinfo8.test,
+ * tests/texinfo9.test, tests/vars.test, tests/vartar.test,
+ * tests/version.test, tests/version2.test, tests/version3.test,
+ * tests/version4.test, tests/vpath.test, tests/vtexi.test,
+ * tests/vtexi2.test, tests/werror.test: Run aclocal before automake.
+
+2001-10-20 Akim Demaille <akim@epita.fr>
+
+ * tests/acoutnoq.test, tests/acoutput.test, tests/acoutqnl.test,
+ * tests/acouttbs.test, tests/asm.test, tests/colon.test,
+ * tests/colon2.test, tests/colon3.test, tests/colon4.test,
+ * tests/colon5.test, tests/colon6.test, tests/colon7.test,
+ * tests/conf2.test, tests/confh.test, tests/confh2.test,
+ * tests/confh3.test, tests/confh4.test, tests/config.test,
+ * tests/confsub.test, tests/depend3.test, tests/discover.test,
+ * tests/fpinst2.test, tests/fpinstall.test, tests/gnits.test,
+ * tests/header.test, tests/ldadd.test, tests/ldflags.test,
+ * tests/libobj.test, tests/libobj10.test, tests/libobj2.test,
+ * tests/libobj6.test, tests/libobj7.test, tests/libobj8.test,
+ * tests/libobj9.test, tests/mdate4.test, tests/obsolete.test,
+ * tests/output.test, tests/output2.test, tests/output3.test,
+ * tests/output4.test, tests/output5.test, tests/package.test,
+ * tests/parse.test, tests/pr2.test, tests/remake.test,
+ * tests/remake2.test, tests/remake3.test, tests/scripts.test,
+ * tests/stamph.test, tests/subdir.test, tests/subdir2.test,
+ * tests/subdir4.test, tests/subdirbuiltsources.test,
+ * tests/subobj4.test, tests/tagsub.test, tests/texinfo8.test,
+ * tests/yacc5.test, tests/yacc6.test, tests/yacc7.test: Remove
+ AC_ARG_PROGRAM, AC_PROG_INSTALL and AC_PROG_MAKE_SET invocation
+ since AM_INIT_AUTOMAKE requires them.
+
+2001-10-20 Akim Demaille <akim@epita.fr>
+
+ * tests/defs (configure.in): Use credible AM_INIT_AUTOMAKE
+ arguments.
+ Don't run AC_ARG_PROGRAM another time, it is required by
+ AM_INIT_AUTOMAKE.
+ * tests/aclocal.test: Work on the default configure.in
+ * tests/config.test (configure.in): Don't AC_ARG_PROGRAM.
+ First AM_INIT_AUTOMAKE, then AM_CONFIG_HEADER.
+
+ Be realistic in testing: AC_INIT is required for Autoconf.
+ Broken so called optimized tests break trace handling.
+
+ * tests/aclibobj.test, tests/aclocal.test, tests/acoutnoq.test,
+ * tests/acoutput.test, tests/acoutput2.test, tests/acoutqnl.test,
+ * tests/acouttbs.test, tests/acsilent.test, tests/alpha.test,
+ * tests/colon.test, tests/colon2.test, tests/colon3.test,
+ * tests/colon4.test, tests/colon5.test, tests/colon6.test,
+ * tests/colon7.test, tests/cond.test, tests/cond2.test,
+ * tests/cond3.test, tests/cond5.test, tests/conf2.test,
+ * tests/confh.test, tests/confh2.test, tests/confh3.test,
+ * tests/confh4.test, tests/config.test, tests/confsub.test,
+ * tests/ctarget1.test, tests/depcomp.test, tests/depend3.test,
+ * tests/distcommon.test, tests/dup3.test, tests/fpinst2.test,
+ * tests/fpinstall.test, tests/header.test, tests/ldflags.test,
+ * tests/libobj.test, tests/libobj10.test, tests/libobj2.test,
+ * tests/libobj6.test, tests/libobj7.test, tests/libobj8.test,
+ * tests/libobj9.test, tests/output.test, tests/output2.test,
+ * tests/output3.test, tests/output4.test, tests/parse.test,
+ * tests/pr2.test, tests/recurs.test, tests/recurs2.test,
+ * tests/remake.test, tests/remake2.test, tests/remake3.test,
+ * tests/req.test, tests/scripts.test, tests/subdir.test,
+ * tests/subdir2.test, tests/subdir4.test, tests/subobj4.test,
+ * tests/tagsub.test, tests/texinfo8.test, tests/version.test,
+ * tests/version2.test: Add AC_INIT in `configure.in'.
+
+2001-10-20 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&scan_autoconf_traces): Add support for
+ AM_INIT_AUTOMAKE, AM_CONDITIONAL.
+ Let @args have a more natural M4 correspondence: $1 is args[1], no
+ args[0] etc.
+ (&scan_autoconf_files): Using autoconf traces is no longer a
+ complement of the previous ad hoc scheme: use either.
+
+2001-10-20 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&scan_one_autoconf_file): `%generalize' is new, and
+ factors dedicated $libsources assignments.
+
+2001-10-20 Akim Demaille <akim@epita.fr>
+
+ * m4/error.m4, m4/obstack.m4, m4/ptrdiff.m4, m4/strtod.m4:
+ Remove, since Autoconf 2.52 has them.
+ * automake.in, aclocal.in, automake.texi: Adjust.
+
+2001-10-19 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&read_main_am_file): s/generated automatically/
+ generated/.
+ Insert @configure_input@, since 2.50 no longer output this
+ automatically for Makefiles.
+
+2001-10-19 Kevin Ryde <user42@zip.com.au>
+
+ * lib/am/check.am (check-TESTS): Add an "else true" to work with
+ Ultrix 4.5 /bin/sh when $(TESTS) is empty.
+
+2001-10-16 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/Makefile.am (TESTS, XFAIL_TESTS): Add nobase.test.
+ * tests/nobase.test: New file. Based on a bug report
+ from Martin Frydl <martin@idoox.com>.
+
+2001-10-16 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (am_install_var): Don't strip nobase_ from $X, do
+ this with $nodir_name only. Use $nodir_name where appropriate.
+
+2001-10-15 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (handle_languages, handle_single_transform_list,
+ lang_c_rewrite): Use require_conf_file instead of
+ require_config_file to require depcomp or compile from Makefile.am.
+ (require_aux_file_with_line): New function, adapted from
+ require_conf_gile_with_line.
+ (require_conf_file_with_line, require_conf_file_with_conf_line):
+ Simplify using require_aux_file_with_line.
+ (require_config_file): Simplify using require_conf_file_with_conf_line.
+ (require_conf_file): New function.
+
+2001-10-15 Akim Demaille <akim@epita.fr>
+
+ * m4/depend.m4 (AM_DEP_TRACK): Use AC_SUBST([AMDEPBACKSLASH])
+ normally, what is wrong is that automake outputs a variable
+ definition for it, hence...
+ * automake.in (scan_one_autoconf_file): don't.
+
+ * m4/depout.m4 (_AM_OUTPUT_DEPENDENCY_COMMANDS): New, extracted
+ from...
+ (AM_OUTPUT_DEPENDENCY_COMMANDS): here. Adjust.
+ Use AC_CONFIG_COMMANDS.
+ (_AM_OUTPUT_DEPENDENCY_COMMANDS): Use AS_DIRNAME and AS_MKDIR_P.
+
+2001-10-15 Akim Demaille <akim@epita.fr>
+
+ * m4/header.m4 (AM_CONFIG_HEADER): Don't use m4_patsubst.
+
+2001-10-15 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&variable_conditions): Be deterministic and Perl
+ version independent: sort the result.
+ (&variable_output, &variable_pretty_output): Sort all the @conds,
+ not only when defaulted.
+ * tests/cond3.test: Adjust.
+
+2001-10-15 Akim Demaille <akim@epita.fr>
+
+ * automake.in: Formatting changes.
+
+2001-10-15 Akim Demaille <akim@epita.fr>
+
+ * aclocal.in: Use Automake::General and Automake::XFile.
+ Use find_configure_ac.
+ Output the Emacs tags for Autoconf mode selection.
+
+2001-10-10 Akim Demaille <akim@epita.fr>
+
+ * lib/COPYING, COPYING, lib/config.guess, lib/config.sub: Update
+ from master copies.
+
+2001-10-09 Akim Demaille <akim@epita.fr>
+
+ Do not use Autoconf internals.
+
+ * tests/dirname.test: Don't use AC_PLAIN_SCRIPT.
+ * m4/header.m4 (_AM_DIRNAME): Use regexp and patsubst, not
+ m4_regexp and m4_patsubst, since the latter are reserved for ERE
+ macro in GNU M4 1.5.
+
+2001-10-08 Akim Demaille <akim@epita.fr>
+
+ * m4/cond.m4 (AM_CONDITIONAL): Don't use m4_match as Autoconf
+ changed its name.
+
+2001-10-05 Akim Demaille <akim@epita.fr>
+
+ * automake.in (scan_autoconf_files): Use find_configure_ac from
+ General.
+
+2001-10-02 Akim Demaille <akim@epita.fr>
+
+ * lib/Automake/Struct.pm: Update from Autoconf.
+ * lib/Automake/General.pm, lib/Automake/XFile.pm: New, from CVS
+ Autoconf.
+ * automake.in: Use them.
+ (&uniq, $me): Remove, as they are provided by Automake::General.
+
+2001-10-02 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * Makefile.am (maintainer-check): Don't check for 'cd' calls in m4.
+ * lib/am/tags.am (GTAGS): Use $(am__cd) instead of 'CDPATH=: && cd'.
+ * lib/am/dejagnu.am (check-DEJAGNU): Likewise.
+ * lib/am/distdir.am (distcheck): Likewise.
+ * lib/am/texinfos.am (install-info-am, dist-info): Rewrite without
+ using cd so we don't have to fiddle with CDPATH.
+ * lib/am/header-vars.am (am__cd): Define so as to support Zsh and
+ DOSish path separator.
+
+2001-10-02 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * lib/am/python.am (install-%DIR%PYTHON,
+ uninstall-%DIR%PYTHON): Strip path of source file.
+ (clean-python): Comment out.
+
+2001-10-02 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (handle_python): Use require_conf_file_with_conf_line
+ instead of require_file_with_conf_line, so that elisp-comp and
+ py-compile are installed in the aux-directory.
+ (handle_emacs_lisp): Likewise. Define elisp_comp.
+ * lib/am/lisp.am (.el.elc): Use elisp_comp.
+
+2001-10-01 Akim Demaille <akim@epita.fr>
+
+ * lib/am/distdir.am (distcheck): Report the trailing files.
+ Run `dist-gzip', not `dist', as it may leave other distribution
+ flavors.
+
+2001-09-29 Paul Eggert <eggert@twinsun.com>
+
+ * lib/mkinstalldirs: Use "mkdir -p" if it works, as that fixes
+ bugs when making file names with unusual characters. Quote chmod
+ arg "$dirmode", in case it contains white space.
+
+ Incorporate the following change from autoconf mkinstalldirs:
+
+ 1999-04-10 Ben Elliston <bje@cygnus.com>
+
+ Add `-m' flag to specify the mode of a newly created
+ directory. Add command line usage and `-h', `--help' options.
+ Contributed by Jeff Garzik.
+
+2001-09-27 Akim Demaille <akim@epita.fr>
+
+ * m4/cond.m4, m4/init.m4, m4/header.m4: Remove Autoconf 2.13 code.
+
+2001-09-27 Akim Demaille <akim@epita.fr>
+
+ * lib/am/distdir.am (dist): Rename as...
+ (dist-gzip): this.
+ (dist): Additional name for dist-all.
+ * automake.texi (Options, Dist): Adjust.
+
+2001-09-25 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * aclocal.in (obsolete_macros): Update AM_EXEEXT message.
+ * automake.in (obsolete_macros): Likewise.
+ (seen_objext): Remove (unused).
+ (scan_one_autoconf_file): Don't handle AC_OBJEXT.
+ * lib/am/header-vars.am (EXEEXT, OBJEXT,
+ PATH_SEPARATOR): New variables.
+ * tests/obsolete2.test: Use AM_FUNC_FNMATCH instead of AM_EXEEXT.
+
+2001-09-23 Tim Van Holder <tim.van.holder@pandora.be>
+
+ * m4/auxdir.m4, m4/init.m4: Require autoconf 2.50 and rely on it to
+ neutralize CDPATH for us.
+ * m4/init.m4: Don't substitute EXEEXT or OBJEXT anymore.
+ * lib/am/texibuild.am: Use $(PATH_SEPARATOR), not ':' to build
+ TEXINPUTS.
+
+2001-09-22 Akim Demaille <akim@epita.fr>
+
+ * configure.in, NEWS: Bump to 1.5a.
+ Require 2.52.
+
+2001-09-22 Paul Eggert <eggert@twinsun.com>
+
+ * ChangeLog, ChangeLog.1996, ChangeLog.1998, ChangeLog.2000,
+ Makefile.am, NEWS, README, TODO, configure.in, lib/Makefile.am,
+ lib/acinstall, lib/am/Makefile.am, m4/Makefile.am, m4/as.m4,
+ m4/auxdir.m4, m4/ccstdc.m4, m4/cond.m4, m4/depend.m4,
+ m4/depout.m4, m4/dmalloc.m4, m4/error.m4, m4/gcj.m4, m4/header.m4,
+ m4/init.m4, m4/install-sh.m4, m4/lex.m4, m4/lispdir.m4,
+ m4/maintainer.m4, m4/make.m4, m4/minuso.m4, m4/missing.m4,
+ m4/multi.m4, m4/obstack.m4, m4/protos.m4, m4/ptrdiff.m4,
+ m4/python.m4, m4/regex.m4, m4/sanity.m4, m4/strip.m4,
+ m4/termios.m4, m4/winsz.m4: Add copyright notice.
+
+ * INSTALL, lib/INSTALL: Upgrade to latest autoconf version,
+ which has a copyright notice.
+
+ * m4/strtod.m4: Correct the dates on the copyright notice.
+
+2001-09-17 Akim Demaille <akim@epita.fr>
+
+ * lib/missing (autom4te): New.
+ (aclocal, autoconf, automake, autoheader, help2man): Propagate
+ actual failures.
+
+2001-08-27 Tom Tromey <tromey@redhat.com>
+
+ * automake.texi (A Shared Library): Clarify installation
+ requirement.
+ (Install): Typo. From Adrian Bunk.
+
+2001-08-27 Tom Tromey <tromey@redhat.com>
+
+ * automake.texi (Macros): Typo fix.
+ From Christian Cornelssen
+
+2001-08-27 Tom Tromey <tromey@redhat.com>
+
+ * tests/ansi3.test, tests/ansi5.test, tests/ccnoco.test,
+ tests/cond4.test, tests/cond16.test, tests/cond18.test,
+ tests/cond19.test, tests/depcomp2.test, tests/depend2.test,
+ tests/lex3.test, tests/pr87.test, tests/subobj3.test,
+ tests/substref.test: Clear CFLAGS.
+
+ * automake.texi (Yacc and Lex): Mention lex, not yacc.
+ From Alexey Mahotkin.
+
+2001-08-27 Tom Tromey <tromey@redhat.com>
+
+ * tests/yacc7.test: Use test -f, not test -e.
+
+2001-08-27 Adrian Bunk <bunk@fs.tum.de>
+
+ * automake.texi (etags): Typo fix.
+
+2001-08-27 Guido Draheim <guidod@gmx.de>
+
+ * automake.in : restrict ansi2knr option to be a filepath
+
+2001-08-23 Richard Boulton <richard@tartarus.org>
+
+ * tests/yacc7.test: Actually add this file: was accidentally omitted.
+
+2001-08-22 Tom Tromey <tromey@redhat.com>
+
+ * automake.texi (Conditionals): Mention that conditionals must
+ always be invoked. For PR automake/220.
+
+2001-08-22 Richard Boulton <richard@tartarus.org>
+ Tom Tromey <tromey@redhat.com>
+
+ * automake.in (lang_yacc_target_hook): Make header file depend on
+ .c file, not .y file.
+ * lib/am/yacc.am: Non-generic rule changed to depend on %OBJ% (the
+ .c file) rather than %SOURCE% (the .y file) Removed `.y.h' rule.
+ * tests/yacc7.test: New file.
+ * tests/Makefile.am (TESTS): Added yacc7.test.
+
+2001-08-22 Tim Van Holder <tim.van.holder@pandora.be>
+
+ * m4/missing.m4: Require AM_AUX_DIR_EXPAND and use $am_aux_dir.
+
+2001-08-18 Tom Tromey <tromey@redhat.com>
+
+ * automake.texi (Dist): Mention dist-all.
+
+2001-08-18 Tom Tromey <tromey@redhat.com>
+
+ * tests/cond3.test: Use portable sed expression.
+ From Richard Boulton.
+
+2001-08-13 Richard Boulton <richard@tartarus.org>
+
+ * automake.in (handle_source_transform): Call
+ define_objects_from_sources() instead of calling
+ variable_value_as_list(), handle_single_transform_list() and
+ define_pretty_variable() directly.
+ (handle_single_transform_list): Add $topparent parameter, used for
+ error messages. Improved error message.
+ (define_objects_from_sources): New function.
+ (subobjname): New function.
+ (variable_conditions_recursive): New name for variable conditions.
+ (variable_value_as_list_recursive): New name for variable_value_as_list.
+ (variable_value_as_list_worker): Renamed to ...
+ (variable_value_as_list_recursive_worker): ... this.
+ (variable_conditions_sub): Renamed to ...
+ (variable_conditions_recursive_sub): ... this.
+ (variable_conditions): Rewritten: now doesn't recurse subvariables.
+ (variable_value_as_list): Rewritten: now doesn't recurse subvariables.
+ (substfroms): New global.
+ (substtos): New global.
+ (substnums): New global.
+ * tests/cond3.test: Update to work with new method of defining _OBJECTS.
+ * tests/cond4.test: Update to work with new method of defining _OBJECTS.
+ * tests/sourcesub2.test: New test.
+ * tests/Makefile.am (TEST): Added sourcesub2.test.
+
+2001-08-11 Tom Tromey <tromey@redhat.com>
+
+ * configure.in: Upped to 1.4s.
+
+2001-08-09 Richard Boulton <richard@tartarus.org>
+
+ * automake.in (handle_single_transform_list): Use new global,
+ `%linkers_used', to store the linkers used, rather than an internal
+ variable. Enables correct linker to be calculated across a group
+ of calls to &handle_single_transform_list. Return only list of
+ objects, since linker to be used is now externally determined.
+ (handle_source_transform): adapted for new calling conventions of
+ handle_single_transform_list. Calls resolve_linker() on a set of
+ all the linkers used for any prefix, rather than for each prefix in
+ turn.
+ (linkers_used): New global.
+ * tests/link_dist.test: New test.
+ * tests/Makefile.am (TESTS): Added link_dist.test.
+
+2001-08-08 Raja R Harinath <harinath@cs.umn.edu>
+
+ Dissociate testsuite 'make' invocations from outer 'make'.
+ * tests/defs: Unset the MFLAGS, MAKEFLAGS and MAKELEVEL
+ environment variables.
+ * tests/cond16.test: Use '$MAKE -s', and avoid GNU make
+ dependency.
+ * tests/substref.test: Likewise.
+
+2001-08-08 Richard Boulton <richard@tartarus.org>
+
+ * tests/cond18.test: New file.
+ * tests/cond19.test: New file.
+ * tests/cond20.test: New file.
+ * tests/cond4.test: Updated to check the generated _OBJECTS more
+ thoroughly.
+ * tests/Makefile.am (TESTS): Added cond18.test, cond19.test and
+ cond20.test
+
+2001-08-08 Richard Boulton <richard@tartarus.org>
+
+ * automake.in (file_contents_internal): if a rule is conditionally
+ defined, define the standard automake definition for it for those
+ conditions which are not conditionally defined.
+ (invert_conditions): New function: invert a list of conditionals.
+
+ * tests/cond14.test: New file.
+ * tests/cond15.test: New file.
+ * tests/Makefile.am (TESTS): Added cond14.test and cond15.test.
+
+2001-08-05 Tom Tromey <tromey@redhat.com>
+
+ * tests/Makefile.am (TESTS): Added dejagnu2.test.
+ * tests/dejagnu2.test: New file.
+ * lib/am/dejagnu.am (site.exp): Don't conditionalize.
+ * automake.in (handle_scripts): Removed dead code.
+ (handle_tests_dejagnu): Don't handle site.exp generation
+ specially.
+
+2001-08-04 Richard Boulton <richard@tartarus.org>
+
+ * tests/cond17.test: New file: test for being able to define an
+ object to be generated in different ways according to a
+ conditional.
+ * tests/Makefile.am (XFAIL_TESTS): Add cond17.test.
+ (TESTS): Added cond17.test.
+
+2001-08-02 Richard Boulton <richard@tartarus.org>
+
+ * automake.in (variable_conditions_sub): Handle variable
+ substitution refs when computing conditions based on subvariable
+ conditions. Fixes substitution refs of system variables when sub
+ variable is conditional.
+ (SUBST_REF_PATTERN): New global.
+ * tests/cond16.test: New file: regression test for variable
+ substitution refs.
+ * test/Makefile.am (TESTS): Added cond16.test.
+
+2001-08-03 Tom Tromey <tromey@redhat.com>
+
+ * tests/substref.test: Require GNU make; backed out previous
+ change.
+
+ * tests/substref.test: Handle entering/leaving directory
+ messages.
+
+2001-08-03 Richard Boulton <richard@tartarus.org>
+
+ * automake.in (value_to_list): Check for whether $from is defined,
+ rather than whether it is true, so that empty $froms are allowed in
+ substitution reference patterns.
+
+ * tests/substref.test: New file: test behavior of substitution
+ references when the $from side of the substitution is empty.
+ * tests/Makefile.am (TESTS): Added substref.test.
+
+2001-08-03 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * m4/install-sh.m4: New file.
+ * m4/Makefile.am (m4data_DATA): Add install-sh.m4.
+ * m4/missing.m4 (AM_MISSING_INSTALL_SH): Move ...
+ * m4/install-sh.m4 (AM_PROG_INSTALL_SH): ... here. Don't check
+ for install.sh any longer, always use install-sh, don't even
+ fall back to missing. Use $am_aux_dir, making $install_sh absolute.
+ * m4/strip.m4 (AM_PROG_INSTALL_STRIP): Simplify, since $install_sh
+ is absolute.
+ * m4/init.m4: Adjust call to AM_PROG_INSTALL_SH.
+
+2001-08-02 Tim Van Holder <tim.van.holder@pandora.be>
+
+ * automake.texi (EXEEXT): Clarify.
+
+2001-08-01 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * m4/missing.m4 (AM_MISSING_HAS_RUN): Typo.
+
+ * m4/auxdir.m4: More comments.
+
+2001-07-31 Richard Boulton <richard@tartarus.org>
+ Raja R Harinath <harinath@cs.umn.edu>
+
+ * automake.in (variable_conditions_sub): Remove @parent_conds
+ argument. This was old logic - duplicate or impossible
+ conditionals are removed later by &variable_conditions_reduce().
+ Fixes tests/cond13.test.
+ (conditionals_true_when): Removed.
+ * tests/Makefile.am (XFAIL_TESTS): Removed cond13.test.
+
+2001-07-31 Tom Tromey <tromey@redhat.com>
+
+ * tests/Makefile.am (TESTS): Added cond13.test.
+ (XFAIL_TESTS): Likewise.
+ * tests/cond13.test: New file.
+
+ * configure.in: Upped to version 1.4k.
+
+ * configure.in: Released 1.4j.
+
+ * lib/config.guess: Updated from master sources.
+ * lib/config.sub: Likewise.
+
+2001-07-30 Tom Tromey <tromey@redhat.com>
+
+ * automake.texi (A Program): Typo. Added subsections and more
+ text about conditional compilation.
+ (A Shared Library): Moved earlier.
+ (Program variables): Updated LINK text. Added AM_CFLAGS.
+ (C++ Support): Added AM_CXXFLAGS.
+ (Fortran 77 Support): Added AM_FFLAGS and AM_RFLAGS.
+ (EXEEXT): New node.
+
+ * tests/Makefile.am (TESTS): Added aclibobj.test.
+ * tests/aclibobj.test: New file.
+ * automake.in (handle_lib_objects_cond): Avoid undefined variable
+ error.
+ (scan_one_autoconf_file): Handle AC_LIBSOURCE and AC_LIBSOURCES.
+
+ * automake.texi (Dist): Mention other distribution types.
+ (Install): Updates.
+
+2001-07-29 Tom Tromey <tromey@redhat.com>
+
+ * automake.texi (Program and Library Variables): Texinfo fix.
+ From Alexey Mahotkin.
+
+2001-07-28 Tom Tromey <tromey@redhat.com>
+
+ * automake.texi (Strictness): Mention Cygnus mode.
+ (Cygnus): Updated.
+ (Uniform): Likewise.
+ (Canonicalization): Likewise.
+ (Install): Add `nobase_' to example; typo fix.
+ (Clean): Typo.
+ (Dist): Expand on putting a directory into EXTRA_DIST. Insert
+ section markers.
+ (Options): Texinfo fixes; some text updates.
+ (Tags): Update.
+
+2001-07-27 Tom Tromey <tromey@redhat.com>
+
+ * automake.texi (Invoking Automake): Document --Werror and
+ --Wno-error.
+
+2001-07-26 Tom Tromey <tromey@redhat.com>
+
+ * tests/nolink.test: Added no-exeext.
+
+ * automake.in (check_variable_defined_unconditionally): Don't call
+ macro_dump.
+
+ * automake.texi (Optional): Don't mention ALL_LINGUAS.
+ (gettext): Likewise.
+ * automake.in (seen_linguas, all_linguas, all_linguas_line):
+ Removed.
+ (handle_gettext): Don't do any checking of the languages.
+ (scan_one_autoconf_file): Don't look for ALL_LINGUAS.
+
+ * automake.in (am_print_error): New function.
+ (am_error): Use it.
+ (am_file_error): Likewise.
+ (am_line_error): Likewise.
+ (am_conf_error): Likewise.
+ (am_conf_line_error): Likewise.
+
+ * automake.texi (Options): Document no-exeext.
+ * automake.in (handle_options): Recognize no-exeext.
+ (rule_define): Handle no-exeext.
+ * tests/Makefile.am (TESTS): Added new file.
+ * tests/exeext2.test: New file.
+
+ * automake.in (make_input_list): Removed.
+ (scan_autoconf_config_files): Don't add to make_input_list.
+ (scan_one_autoconf_file): Don't use make_input_list.
+ (scan_autoconf_files): Use make_list, not make_input_list.
+ (scan_autoconf_files): Likewise.
+
+ * automake.in (seen_exeext): Removed.
+ (generate_makefile): Don't define EXEEXT or OBJEXT.
+ (scan_one_autoconf_file): Don't check for AC_EXEEXT.
+ (am_install_var): Don't check $seen_exeext.
+ (handle_programs): Likewise.
+ (rule_define): Allow x to override x$(EXEEXT), for now.
+ (file_contents_internal): Only define rule if rule_define allows
+ us to.
+ * m4/init.m4 (AM_INIT_AUTOMAKE): Define EXEEXT and OBJEXT.
+
+2001-07-25 Tom Tromey <tromey@redhat.com>
+
+ From Nicolas Joly:
+ * tests/pr9.test: Require GNU make.
+ * tests/dirname.test: Don't use `-u'.
+
+2001-07-22 Tom Tromey <tromey@redhat.com>
+
+ * tests/Makefile.am (TESTS): Added auxdir2.test.
+ (XFAIL_TESTS): Likewise.
+ * tests/auxdir2.test: New file.
+
+ * tests/Makefile.am (XFAIL_TESTS): Removed substtarg.test.
+ * automake.in (TARGET_PATTERN): Add `@' as allowable character.
+
+ * tests/Makefile.am (XFAIL_TESTS): Removed exeext.test.
+ * automake.in (am_install_var): Add $(EXEEXT) even if program name
+ holds `.'. Don't add $(EXEEXT) if program name already has it.
+ (handle_programs): Don't add $(EXEEXT) if user already did.
+ (make_paragraphs): Don't compute EXEEXT.
+
+ * tests/Makefile.am (TESTS): Added exeext.test.
+ (XFAIL_TESTS): Likewise.
+ * tests/exeext.test: New file.
+
+2001-07-22 Tom Tromey <tromey@redhat.com>
+
+ * lib/am/progs.am (install-%DIR%PROGRAMS): Test for `prog', not
+ `prog.exe' on Cygwin with libtool. From Robert Collins.
+
+2001-07-21 Tim Van Holder <tim.van.holder@pandora.be>
+
+ * tests/dirname.test: Explicitly use $SHELL to run the
+ script; this avoids failures on DJGPP.
+ * tests/install2.test: Skip if 'chmod 000' doesn't make
+ a file unreadable.
+
+2001-07-21 Tom Tromey <tromey@redhat.com>
+
+ * tests/libtool2.test: Check for libtoolize.
+
+ * tests/Makefile.am (TESTS): Added substtarg.test.
+ (XFAIL_TESTS): Likewise.
+ * tests/substtarg.test: New file.
+
+ * automake.in (handle_dist): Handle case where aux dir doesn't
+ have a Makefile. Fixes depdist.test.
+ * tests/Makefile.am (XFAIL_TESTS): Removed depdist.test.
+ * tests/depdist.test: Look for config/depcomp.
+
+ * tests/Makefile.am (TESTS): Added depdist.test.
+ (XFAIL_TESTS): Likewise.
+ * tests/depdist.test: New file. From Eric Magnien.
+
+ * tests/ccnoco.test: Removed `configure.2' test; in autoconf 2.50
+ AC_PROG_CC_C_O does require AC_PROG_CC.
+
+ From Erik Lindahl:
+ * lib/depcomp (tru64): Some Tru64 compilers use `foo.d' and not
+ `foo.o.d'.
+ * m4/depend.m4 (_AM_DEPENDENCIES): Check to make sure compilation
+ output is suitable for make.
+
+ * automake.texi (Macros): Document AM_PROG_AS.
+ (Assembly Support): New node.
+ * m4/Makefile.am (m4data_DATA): Added as.m4.
+ * m4/as.m4: New file.
+
+ * automake.texi (Tags): Added uref to global tags.
+
+2001-07-21 Tim Van Holder <tim.van.holder@pandora.be>
+
+ * automake.in (handle_single_transform_list): Use $(DEPDIR)
+ instead of hardcoding '.deps'.
+ * m4/depend.m4 (AM_SET_DEPDIR): Sync with libtool's libdir check.
+
+2001-07-20 Derek Price <dprice@collab.net>
+
+ * m4/header.m4 (AM_CONFIG_HEADER): Create stamp-h files in the correct
+ locations.
+ * tests/dirname.test: New test.
+ * tests/stamph2.test: New test.
+ * tests/Makefile.am: Add new tests.
+ * tests/Makefile.in: Regenerated.
+
+2001-07-19 Tom Tromey <tromey@redhat.com>
+
+ * automake.texi (Tags): Document GTAGS_ARGS.
+ * lib/am/tags.am (GTAGS): Added GTAGS_ARGS. From Shigio Yamaguchi.
+
+2001-07-19 Tom Tromey <tromey@redhat.com>
+ Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ Fix for ccnoco.test, subobj8.test:
+ * m4/Makefile.am (m4data_DATA): Added auxdir.m4.
+ * tests/Makefile.am (XFAIL_TESTS): Removed ccnoco.test,
+ subobj8.test.
+ * m4/minuso.m4 (AM_PROG_CC_C_O): Use absolute path to compile.
+ Use AM_AUX_DIR_EXPAND.
+ * lib/compile: Handle case where `-o' argument is the name of an
+ executable, not an object file.
+ * m4/auxdir.m4: New file, from...
+ * m4/missing.m4: ... here. Moved AM_AUX_DIR_EXPAND.
+ * automake.in (handle_single_transform_list, lang_c_rewrite):
+ Require compile using `require_config_file'.
+
+2001-07-19 Tom Tromey <tromey@redhat.com>
+
+ * automake.texi (Program and Library Variables): Added X example
+ for _LDADD.
+
+2001-07-19 Tom Tromey <tromey@redhat.com>
+
+ * automake.texi (Distributing): Updated to reflect new license.
+
+2001-07-18 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (require_build_directory): New function, extracted
+ from ...
+ (handle_single_transform_list): ... here.
+ (require_build_directory_maybe): New function.
+ (handle_prograns, handle_libraries, handle_ltlibraries): Call
+ require_build_directory_maybe() to ensure the subdirectory
+ in which a target may lie will exist when the target is created.
+ (handle_libraries, handle_ltlibraries): Use basename before
+ checking library name.
+ * lib/am/library.am (%LIBRARY%): Depend on %DIRSTAMP%.
+ * lib/am/ltlibrary.am (%LTLIBRARY%): Likewise.
+ * lib/am/program.am (%PROGRAM%): Likewise.
+
+2001-07-18 Tim Van Holder <tim.van.holder@pandora.be>
+
+ * m4/missing.m4: Reword comment.
+
+2001-07-18 Pavel Roskin <proski@gnu.org>
+
+ * automake.texi: Rename AM_DEPENDENCIES to _AM_DEPENDENCIES.
+ * tests/gcj.test: Likewise.
+ * tests/gcj2.test: Likewise.
+ * tests/gcj3.test: Likewise.
+
+2001-07-18 Tom Tromey <tromey@redhat.com>
+
+ * lib/compile: Change how lockdir is computed. If linking or
+ compiling without `-o', just run the compiler.
+
+ * tests/Makefile.am (TESTS): Added ccnoco.test.
+ (XFAIL_TESTS): Likewise.
+ * tests/ccnoco.test: New file.
+
+2001-07-17 Tom Tromey <tromey@redhat.com>
+
+ * lib/ylwrap: Added special exception.
+ * lib/py-compile: Added license.
+ * lib/mdate-sh: Added special exception.
+ * lib/elisp-comp: Added special exception.
+ * lib/compile: Added special exception.
+ * lib/depcomp: Added special exception.
+
+ Report from Motoyuki Kasahara:
+ * tests/make.test: Use am__include.
+ * tests/exsource.test: Use am__include.
+ * m4/make.m4 (AM_MAKE_INCLUDE): Use am__include and am__quote.
+ * automake.in (handle_languages): Use am__include and am__quote.
+
+ * m4/depend.m4 (AM_DEPENDENCIES): Renamed to _AM_DEPENDENCIES.
+ * m4/init.m4: Updated callers.
+
+2001-06-10 Tim Mooney <mooney@dogbert.cc.ndsu.NoDak.edu>
+
+ * aclocal.in (parse_arguments, write_aclocal): Update Copyrights.
+ * aclocal.in (scan_configure, add_file): Handle the full macro
+ name even if it contains numbers, such as I18N.
+
+2001-07-16 Tom Tromey <tromey@redhat.com>
+
+ * automake.texi (Dependencies): Link to dependency tracking page.
+ (Data): Mention dist_.
+ (Clean): Mention clean heuristics.
+ (Install): Mention nobase_.
+
+ * automake.texi (Program and Library Variables): Document _LINK.
+
+2001-07-16 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (handle_libraries): Allow libraries to lie in
+ a subdirectory by constraining only the basename to start
+ with 'lib', not the whole path.
+
+2001-07-16 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/subobj8.test: New file.
+ * tests/Makefile.am (XFAIL_TESTS, TESTS): Add subobj8.test.
+
+2001-07-16 Tom Tromey <tromey@redhat.com>
+
+ Fix for PR automake/212:
+ * lib/am/lisp.am (install-%DIR%LISP): Added missing `\'.
+ (uninstall-%DIR%LISP): Likewise.
+
+2001-07-15 Tom Tromey <tromey@redhat.com>
+
+ * automake.in (usage): Rewrote code to handle columnization.
+ From Alexey Mahotkin and Maxim Sinev.
+
+ Report from Ralf Corsepius:
+ * automake.in (TARGET_PATTERN): Add `+' as valid character.
+ (SUFFIX_RULE_PATTERN): Likewise.
+ * tests/Makefile.am (TESTS): Added cxx.test.
+ * tests/cxx.test: New file.
+
+ * lib/am/tags.am (distclean-tags): Remove files for gtags.
+ From Shigio Yamaguchi.
+
+2001-07-14 Steve M. Robbins <steve@nyongwa.montreal.qc.ca>
+
+ * lib/am/distdir.am (distcheck): Emit diagnostic when files
+ remain after "make uninstall".
+
+2001-07-14 Tom Tromey <tromey@redhat.com>
+
+ * lib/am/tags.am (.PHONY): Depend on GTAGS. From Shigio Yamaguchi.
+
+ * lib/missing (makeinfo): Redirect stdout and stderr outside
+ subshell. From Alexandre Oliva.
+
+2001-07-14 Akim Demaille <akim@epita.fr>
+
+ * automake.in ($obsolete_rx): No need for `\b(foo\b|\bbar)\b',
+ `\b(foo|bar)\b' is what we want.
+ * aclocal.in: Likewise.
+
+2001-07-14 Akim Demaille <akim@epita.fr>
+
+ * m4/depend.m4 (AM_DEPENDENCIES): Don't define `depcpp' which is
+ not used.
+ Do not require the corresponding AC_PROG_CC as AC_PROG_CC is
+ actually modified to require AM_DEPENDENCIES.
+ Rename `confdir' as `conftest.dir' so that the configure trap
+ remove it.
+
+2001-07-04 Tom Tromey <tromey@redhat.com>
+
+ Fix for nolink.test:
+ * tests/Makefile.am (XFAIL_TESTS): Removed nolink.test.
+ * lib/am/program.am (%PROGRAM%%EXEEXT%): Use %EXEEXT%.
+ * automake.in (am_install_var): Only rewrite PROGRAMS if
+ $seen_exeext.
+ (make_paragraphs): Always define %EXEEXT%.
+
+2001-07-04 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/nolink.test: New file.
+ * tests/Makefile.am (TEST, XFAIL_TESTS): Add nolink.test.
+
+2001-07-04 OKUJI Yoshinori <okuji@gnu.org>
+
+ * automake.in (scan_texinfo_file): Add the second argument to
+ `@syncodeindex' into @CLEAN_SUFFIXES, because the combined index
+ itself may not be used directly.
+
+2001-07-04 Tom Tromey <tromey@redhat.com>
+
+ * missing: Updated.
+ * lib/missing (makeinfo): Use subshell, not explicit sh
+ invocation.
+
+ * automake.texi (Headers): Mention that we prefer uninstalled
+ headers in _SOURCES.
+ (ANSI): Mention cross-compilation limitation.
+
+2001-07-03 Tom Tromey <tromey@redhat.com>
+
+ * configure.in: Upped to 1.4i.
+
+ * configure.in: Released 1.4h.
+
+ * lib/config.guess, lib/config.sub: Updated.
+
+2001-07-02 Tom Tromey <tromey@redhat.com>
+
+ Fix for libtool2.test:
+ * tests/libtool2.test: Use `rm -f' to placate maintainer-check.
+ * lib/am/libtool.am (distclean-libtool): Conditional on TOPDIR.
+ * automake.in (generate_makefile): Call handle_libtool
+ unconditionally.
+ * tests/Makefile.am (XFAIL_TESTS): Removed libtool2.test.
+
+ * tests/libtool2.test: Look for `.lo' files to be removed.
+
+ * tests/Makefile.am (XFAIL_TESTS): Added libtool2.test.
+
+ * tests/Makefile.am (TESTS): Removed dup.test.
+ * tests/dup.test: Removed.
+ * aclocal.in (scan_file): Don't give error for duplicate macro.
+
+2001-07-01 Tom Tromey <tromey@redhat.com>
+
+ * automake.texi (Program and Library Variables): Document
+ subdir-objects. Document fact that per-object flags override AM_
+ flags.
+ (Options): Likewise.
+ (Yacc and Lex): Document YFLAGS, AM_YFLAGS, LFLAGS, AM_LFLAGS.
+ (Multilibs): New node.
+ (Macros): Documented missing macros.
+ (Auxiliary Programs): New node.
+
+ * lib/missing (makeinfo): If makeinfo exists, and we're in --run
+ mode, then simply fail.
+
+2001-07-01 Tim Van Holder <tim.van.holder@pandora.be>
+
+ * lib/ylwrap: Improve support for DOS paths (and paths
+ containing backslashes in general).
+
+2001-07-01 Tom Tromey <tromey@redhat.com>
+
+ * lib/missing: Added special exception to license.
+
+ * missing: Updated.
+ * lib/missing: Updated. Added comment explaining configure.ac
+ oddity.
+
+ * lib/depcomp: Reorder arguments to gcc3.
+ From Per Oyvind Hvidsten.
+
+ * tests/Makefile.am (TESTS): Added libtool2.test.
+ * tests/libtool2.test: New file.
+
+ * automake.texi (Program and Library Variables): Added example for
+ _AR.
+
+2001-06-29 Tom Tromey <tromey@redhat.com>
+
+ * tests/cond11.test: Use `=', not `=='.
+ * tests/cond12.test: Look for automake in build directory, not
+ source directory.
+
+2001-06-29 Richard Boulton <richard@tartarus.org>
+
+ * automake.in (conditionals_true_when): Pass first parameters by
+ reference, avoiding bug which put all parameters in @CONDS instead
+ of @WHENS. Report by Kalle Olavi Niemitalo.
+ Take a single WHEN instead of an array of WHENS.
+ Remove FIXME; can't now have an empty @WHENS.
+ (conditional_is_redundant): New sub.
+ (variable_conditions_reduce): Check whether each condition is
+ implied by any of the other conditions (other those already
+ discarded), rather than checking only against those already
+ considered (and kept). Also, fix sense of check: was keeping
+ tautologous terms instead of discarding them. Use
+ conditional_is_redundant instead of conditionals_true_when.
+ * tests/Makefile.am (TESTS): Added cond11.test and cond12.test.
+ * tests/cond11.test: New file.
+ * tests/cond12.test: New file.
+
+2001-06-29 Raja R Harinath <harinath@cs.umn.edu>
+
+ * automake.in (saw_sources_p): Work even if there are more
+ than one header files, and more than of one type of header.
+ * tests/Makefile.am (TESTS): Added new file.
+ * tests/depend4.test: New file.
+
+2001-06-28 Tom Tromey <tromey@redhat.com>
+
+ * lib/am/libs.am (RANLIB): Don't define.
+
+2001-06-28 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (am_install_var): Assign 1 to $first on
+ first interation.
+
+2001-06-23 Tom Tromey <tromey@redhat.com>
+
+ Fix for yacc5.test:
+ * lib/ylwrap: Changed usage.
+ * lib/am/yacc.am: Rewrote to use new substitutions.
+ * lib/am/lex.am: Likewise.
+ * automake.in (handle_languages): Skip files whose language
+ doesn't have a compiler. Handle `define_flag' attribute.
+ Changed '$' to "\$" to aid Emacs fontification.
+ (struct): Added `rule_file'. Removed `derived_autodep'. Added
+ `_target_hook' and `define_flag'.
+ (yacc, yaccxx, lex, lexxx): Set `rule_file', `flags', `compile',
+ and `compiler' attributes. Removed `linker', `derived_autodep',
+ and `ansi' attributes. Added `define_flag'.
+ (yacc, yaccxx): Added `_target_hook'.
+ (saw_extension): Count number of times extension seen.
+ (count_files_for_language): New sub.
+ (saw_sources_p): Use it.
+ (handle_single_transform_list): Allow language rewrite function
+ to return a new source extension. Call target_hook.
+ (yacc_sources, lex_sources): Removed.
+ (initialize_per_input): Don't initialize yacc_sources or
+ lex_sources.
+ (lang_yacc_rewrite): Rewrote.
+ (lang_yaccxx_rewrite): Likewise.
+ (lang_lex_rewrite): Likewise.
+ (lang_lexxx_rewrite): Likewise.
+ (output_yacc_build_rule): Removed.
+ (output_lex_build_rule): Removed.
+ (lang_yacc_finish): Removed build rule generation.
+ (lang_lex_finish): Likewise.
+ (DASH_D_PATTERN): New global.
+ (lang_yacc_target_hook): New function.
+ (_target_hook): New function.
+ (register_language): Default `define_flag'.
+ * tests/yacc5.test: Updated test.
+ * tests/yacc4.test: Exit with status 77 if bison doesn't work.
+ * tests/yacc3.test: Remove bogus `make' invocation. Added test
+ for all YFLAGS variables.
+
+2001-06-20 Tom Tromey <tromey@redhat.com>
+
+ * tests/yacc5.test: Check for per-executable YFLAGS.
+
+2001-06-19 Tom Tromey <tromey@redhat.com>
+
+ * tests/Makefile.am (TESTS): Added yacc5.test.
+ * tests/yacc5.test: New file.
+
+2001-06-17 Tom Tromey <tromey@redhat.com>
+
+ * automake.in (require_file_internal): Check for already-required
+ file after searching for it, and only if it is not found. Don't
+ use `readlink' when checking for dangling symlink. Work if
+ --force-missing specified.
+ * tests/acoutput2.test: Also test --force-missing.
+
+ Fix for libtool.test:
+ * automake.in (generate_makefile): Call handle_libtool.
+ (handle_libtool): New sub.
+ (handle_compile): Don't read `libtool' file.
+
+ * tests/acoutput2.test: New file.
+ * tests/Makefile.am (TESTS): Added acoutput2.test.
+
+2001-06-15 Tom Tromey <tromey@redhat.com>
+
+ * tests/Makefile.am (TESTS): Added libtool.test.
+ * tests/libtool.test: New file.
+
+2001-06-14 Tom Tromey <tromey@redhat.com>
+
+ Fix some lisp bugs reported by Bruno Haible:
+ * lib/am/lisp.am (uninstall-%DIR%LISP): Added DESTDIR to the
+ echo.
+ (install-%DIR%LISP): Handle case where lispdir is not defined.
+ (uninstall-%DIR%LISP): Likewise.
+ (.el.elc): Added `else' clause.
+
+ Fix for bug reported by Steve M. Robbins:
+ * automake.in (handle_single_transform_list): When building a file
+ from a subdirectory, continue to use `AM_' prefix.
+ * tests/Makefile.am (TESTS): Added subobj7.test.
+ * tests/subobj7.test: New file.
+
+ * lib/am/configure.am ($(top_builddir)/config.status): Added
+ $(top_builddir) prefix to work around problems with some vendor
+ makes. From Nicolas Joly.
+
+ * automake.in (yacc_lex_finish_helper): Find ylwrap in
+ top_srcdir. From Tim Van Holder.
+ * tests/Makefile.am (TESTS): Added yacc6.test.
+ * tests/yacc6.test: New file.
+
+2001-06-14 Tim Van Holder <tim.van.holder@pandora.be>
+
+ * tests/defs, tests/installsh.test: Properly support
+ DOS-style paths.
+
+2001-06-14 Tom Tromey <tromey@redhat.com>
+
+ * tests/Makefile.am (TESTS): Added mdate4.test.
+ * tests/mdate4.test: New file.
+
+ * aclocal.in (scan_m4_files): Removed unused variable.
+
+2001-06-14 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * aclocal.in (scan_m4_files): Tweak the building of &search so
+ that multiple macro names can be found on the same line. Ensure
+ we match whole macro name, not only substrings.
+
+2001-06-12 Tom Tromey <tromey@redhat.com>
+
+ * automake.texi (ANSI): Minor clarification.
+ (Other GNU Tools): Don't mention Guile.
+ (Guile): Removed.
+ (Java Support): Mention file extensions.
+ (Man pages): Mention dist_. Don't mention info pages.
+
+2001-06-11 Tom Tromey <tromey@redhat.com>
+
+ * automake.texi (Program variables): Document AM_CPPFLAGS.
+ Deprecate INCLUDES.
+ (Java Support): Document AM_GCJFLAGS.
+ (Support for Other Languages): Removed `fixme'; added link to
+ suffix rule handling.
+
+ * automake.texi (Program and Library Variables): Document _LIBADD,
+ _LDADD, _LDFLAGS, _AR, and _DEPENDENCIES.
+
+2001-06-11 Kevin Dalley <kevind@rahul.net>
+
+ * missing: Support configure.ac.
+
+2001-06-08 Tom Tromey <tromey@redhat.com>
+
+ * tests/version4.test: New file.
+ * automake.in (version_check): New sub.
+ (handle_options): Use it.
+ * tests/Makefile.am (AUTOMAKE_OPTIONS): Removed.
+ (TESTS): Added version4.test.
+ * m4/Makefile.am (AUTOMAKE_OPTIONS): Removed.
+ * Makefile.am (AUTOMAKE_OPTIONS): Remove `gnits'.
+
+2001-06-04 Kevin Dalley <kevind@rahul.net>
+
+ * lib/am/dejagnu.am (site.exp): Fix typo.
+
+2001-06-02 Tom Tromey <tromey@redhat.com>
+
+ * automake.in (variable_conditions_sub): Move parent-only code
+ from here...
+ (variable_conditions): ... to here.
+ (variable_conditions_sub): Include this variable's conditions in
+ the resulting condition list.
+ * tests/Makefile.am (XFAIL_TESTS): Removed ltdeps.test.
+
+2001-06-01 Tom Tromey <tromey@redhat.com>
+
+ * tests/Makefile.am (XFAIL_TESTS): Added ltdeps.test.
+ (TESTS): Likewise.
+ * tests/ltdeps.test: New file. Report from Lars J. Aas.
+
+2001-05-31 Tom Tromey <tromey@redhat.com>
+
+ * automake.texi (Alternative): New node.
+ (Macros): Use new name for gcc.
+ (Java Support): Likewise.
+ (Dependencies): Rewrote.
+ (Invoking Automake): (Re-)document -i, --ignore-deps, and
+ --include-deps.
+
+ * automake.texi (Top level): Removed erroneous spaces. Documented
+ MAKE and MAKEFLAGS.
+
+2001-05-29 Tom Tromey <tromey@redhat.com>
+
+ * m4/init.m4 (AM_INIT_AUTOMAKE): Allow any AM_*FLAGS variable.
+
+ * automake.texi (Include): Rewrote.
+ (Suffixes): Remove Java example.
+ (Java): Added more explanation. Document variables.
+ (Uniform): Mention JAVA as a primary.
+ (Python): Updated for new Python support.
+ (Sources): Added a weak example.
+
+ * lib/am/java.am (class%DIR%.stamp): Use AM_JAVACFLAGS.
+
+ * automake.texi (A Program): Mention `check' prefix.
+ (Program and Library Variables): New node.
+ (Texinfo): Document UPDATED-MONTH, MAKEINFOFLAGS, and
+ AM_MAKEINFOFLAGS.
+ (etags): Mention per-program flags.
+ (Tests): Document AM_RUNTESTFLAGS; added sectioning; more
+ updates.
+
+ * lib/am/texinfos.am (.PHONY): Always list uninstall-info-am and
+ install-info-am.
+
+2001-05-28 Tom Tromey <tromey@redhat.com>
+
+ * m4/Makefile.am (MAINT_CHARSET): Removed.
+ * Makefile.am (MAINT_CHARSET): Removed.
+ * automake.in (maint_charset, dist_charset): Removed.
+ (local_maint_charset): Removed.
+ (initialize_per_input): Don't use maint_charset.
+ (handle_dist): Don't compute maint_charset or check DIST_CHARSET.
+
+ * lib/am/texibuild.am (.%SUFFIX%.info): Use MAKEINFOFLAGS and
+ AM_MAKEINFOFLAGS.
+ (.%SUFFIX%.dvi): Likewise.
+ (.%SUFFIX%): Likewise.
+
+2001-05-27 Tom Tromey <tromey@redhat.com>
+
+ * automake.in (handle_multilib): Only add multilib support code at
+ top level.
+ * lib/am/multilib.am: Handle invocation of *-multi targets
+ differently for SUBDIRS and non-SUBDIRS Makefiles.
+ * m4/multi.m4 (AM_ENABLE_MULTILIB): Removed erroneous comment.
+ Only add multilib code when the Makefile in question is actually
+ rebuilt.
+
+ * lib/am/dejagnu.am (check-DEJAGNU): Added AM_RUNTESTFLAGS.
+
+2001-05-25 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (handle_single_transform_list): Skip unknown
+ extensions.
+
+2001-05-25 Tom Tromey <tromey@redhat.com>
+
+ * m4/init.m4 (AM_INIT_AUTOMAKE): Ignore AM_RUNTESTFLAGS.
+
+2001-05-24 Tom Tromey <tromey@redhat.com>
+
+ * automake.in (handle_texinfo_helper): Find mdate-sh in current
+ directory in some situations.
+
+ * automake.in (generate_makefile): Better explanation for ansi2knr
+ fix.
+
+2001-05-23 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (handle_languages): Skip unknown extensions.
+ (derive_suffix): Check whether $extension_map{$source_ext}
+ is undefined, not empty.
+
+2001-05-23 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (read_am_file): Ignore trailing backslash on
+ comment lines.
+
+2001-05-22 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (ASSIGNMENT_PATTERN): Forbid : and + in variable names.
+
+2001-05-21 Akim Demaille <akim@epita.fr>
+
+ * automake.texi (Macros): Explain the ``AC_PROG_LEX invoked
+ multiple times'' warning.
+
+2001-05-20 Tom Tromey <tromey@redhat.com>
+
+ * configure.in: Updated to 1.4g.
+
+ * configure.in: Updated to 1.4f.
+
+ * Makefile.am (EXTRA_DIST): Added ChangeLog.2000.
+
+ * lib/ansi2knr.c: New version.
+
+ * Makefile.am (FETCHFILES): Added ansi2knr.c.
+ (fetch): Likewise.
+
+2001-05-19 Tom Tromey <tromey@redhat.com>
+
+ * config.guess, config.sub: New versions from FSF.
+
+ * Makefile.am (fetch): Compare against files in srcdir.
+
+ For for ansi2knr report from Harlan Stenn:
+ * automake.in (generate_makefile): Run handle_compile before
+ handle_languages.
+
+2001-05-18 Tom Tromey <tromey@redhat.com>
+
+ * automake.in: Reverted erroneous checkin.
+
+2001-05-18 Akim Demaille <akim@epita.fr>
+
+ * lib/am/texinfos.am (install-info-am, uninstall-info-am): Be robust
+ to missing `install-info'.
+
+2001-05-17 Tom Tromey <tromey@redhat.com>
+
+ * automake.in (lang_c_finish): Use `rm -f'.
+
+ * automake.in (lang_c_finish): Remove _.c file if ansi2knr fails.
+ * tests/Makefile.am (TESTS): Added new file.
+ * tests/ansi5.test: New file.
+
+2001-05-17 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * lib/am/install.am (install-strip): Set INSTALL_PROGRAM_ENV if
+ STRIP is not empty.
+ * m4/strip.m4 (AM_PROG_INSTALL_STRIP): Set INSTALL_STRIP_PROGRAM
+ to install-sh unconditionally. Don't set INSTALL_STRIP_PROGRAM_ENV.
+ * automake.texi (Requirements): Document the use of the STRIP
+ variable in cross-compilation environments.
+
+2001-05-17 Tom Tromey <tromey@redhat.com>
+
+ * m4/depend.m4 (AM_DEPENDENCIES): If depcomp doesn't exist, revert
+ to no dependency tracking.
+ * tests/Makefile.am (TESTS): Added depcomp2.test.
+ * tests/depcomp2.test: New file. From Pavel Roskin.
+
+ * lib/depcomp (aix): Bug fix and simplification from Larry Jones.
+
+ * lib/depcomp (tru64): New dependency tracking mode.
+
+ Fix for PR automake/159:
+ * lib/depcomp (aix): Rewrote.
+ (sgi): Likewise.
+
+ Fix for PR automake/174:
+ * tests/Makefile.am (XFAIL_TESTS): Removed comment3.test.
+ * automake.in (read_am_file): Warn if `#' is at start of rule.
+
+2001-05-16 Tom Tromey <tromey@redhat.com>
+
+ For PR automake/174:
+ * tests/Makefile.am (TESTS): Added comment3.test.
+ (XFAIL_TESTS): Likewise.
+ * tests/comment3.test: New file.
+
+ Fix for PR automake/175:
+ * tests/Makefile.am (XFAIL_TESTS): Removed make.test.
+ * m4/make.m4 (AM_MAKE_INCLUDE): Omit `Entering directory' and
+ `Leaving directory' messages.
+
+ For PR automake/175:
+ * tests/Makefile.am (XFAIL_TESTS): Added make.test.
+ * tests/make.test: Run test with `make -w'.
+
+ * tests/Makefile.am (TESTS): Removed maintclean.test.
+ * lib/am/clean.am (maintainer-clean-generic): Don't remove
+ Makefile.in.
+ * lib/am/configure.am (maintainer-clean-am): Removed.
+ (maintainer-clean-conf): Removed.
+ * tests/maintclean.test: Removed.
+
+2001-05-15 Tom Tromey <tromey@redhat.com>
+
+ Fix for PR automake/177:
+ * Makefile.am (maintainer-clean): Set perllibdir before invoking
+ automake or aclocal.
+
+ Fix for maintclean.test:
+ * tests/Makefile.am (XFAIL_TESTS): Removed maintclean.test.
+ * lib/am/clean.am (distclean-generic): Don't remove config.cache
+ or config.log.
+ (distclean, maintainer-clean): Moved to...
+ * lib/am/configure.am: ... here.
+ (distclean): Remove config.cache and config.log.
+ (maintainer-clean): Removed.
+ (maintainer-clean-conf): New target.
+ (maintainer-clean-am): New target.
+
+ * tests/Makefile.am (TESTS): Added maintclean.test.
+ (XFAIL_TESTS): Likewise.
+ * tests/maintclean.test: New file.
+
+ Fixes PR automake/175:
+ * tests/target-cflags.test: Use $needs_gnu_make.
+ * tests/exsource.test: Use $needs_gnu_make.
+ * tests/make.test: Require GNU make.
+ * tests/defs (needs_gnu_make): Compute.
+
+2001-05-14 Tom Tromey <tromey@redhat.com>
+
+ * lib/ylwrap: Fixed quoting on regular expression. Fixes
+ yacc4.test.
+
+ Fix for texinfo10.test.
+ * tests/Makefile.am (XFAIL_TESTS): Remove texinfo10.test.
+ * lib/am/texinfos.am: Use LOCAL-TEXIS liberally.
+ * automake.in (handle_texinfo_helper): New sub.
+ (handle_texinfo): Rewrote. Now defines LOCAL-TEXIS.
+ * tests/texinfo10.test: Added more cases.
+
+ Fix for yaccvpath.test:
+ * tests/Makefile.am (XFAIL_TESTS): Removed yaccvpath.test.
+ * lib/am/distdir.am (distdir): Always look for file in build
+ directory first.
+ * lib/ylwrap: Quote the `#line' regular expression.
+ * lib/am/yacc.am (%YACC_SUFFIX%%C_SUFFIX%): Reverted earlier
+ change; don't run sed on the generated file.
+ * tests/yaccvpath.test: Create new parser in srcdir. Added test
+ to make sure parser will be rebuilt at dist time.
+
+2001-05-13 Pavel Roskin <proski@gnu.org>
+
+ * automake.in ($IGNORE_PATTERN): Allow spaces before comments
+ beginning with `##'.
+ * automake.texi (General Operation): Document it.
+
+2001-05-13 Tom Tromey <tromey@redhat.com>
+
+ Reported by Rainer Orth:
+ * lib/am/distdir.am (?DISTDIR?distdir): Define conditional on
+ TOPDIR_P.
+ * tests/Makefile.am (TESTS): Added distname.test.
+ * tests/distname.test: New file.
+
+ * Makefile.am (dist_pkgdata_DATA): Removed.
+
+ * tests/defs: Find files to copy in lib/.
+ * automake.in (perllibdir): Set to Automake directory.
+ * ansi2knr.c, ansi2knr.1: Removed.
+ * Makefile.am (dist_am_DATA): Removed.
+ (amdir): Removed.
+ (maintainer-check): Look for lib/am/*.am. Expect 28 lines of
+ diffs.
+ (scriptdir): Removed.
+ (dist_script_DATA): Likewise.
+ (install-data-hook): Likewise.
+ (installcheck-local): Likewise.
+ (TAGS_FILES): Removed amfiles.
+ (dist_pkgdata_DATA): Removed ansi2knr.c and ansi2knr.1.
+ * tests/installsh.test (AUTOMAKE): Use --libdir, not --amdir, and
+ point it to the right directory.
+ * ansi2knr.am, check.am, clean-hdr.am, clean.am, comp-vars.am,
+ compile.am, configure.am, data.am, dejagnu.am, depend.am,
+ depend2.am, distdir.am, footer.am, header-vars.am, header.am,
+ install.am, java.am, lang-compile.am, lex.am, library.am, libs.am,
+ libtool.am, lisp.am, ltlib.am, ltlibrary.am, mans-vars.am,
+ mans.am, multilib.am, program.am, progs.am, python.am,
+ remake-hdr.am, scripts.am, subdirs.am, tags.am, texi-vers.am,
+ texibuild.am, texinfos.am, yacc.am: Moved to lib/am/.
+ * configure.in (AC_OUTPUT): Added lib/am/Makefile.
+ (AUTOMAKE): Use --libdir, not --amdir.
+ Ues AC_CONFIG_AUX_DIR.
+ * lib/Makefile.am (SUBDIRS): Added `am'.
+ (scriptdir): New macro.
+ (dist_script_DATA): Likewise.
+ (dist_pkgdata_DATA): Likewise.
+ (install-data-hook): New target.
+ (installcheck-local): Likewise.
+ * lib/am/Makefile.in: New file.
+ * lib/am/Makefile.am: Removed everything except amdir and
+ dist_am_DATA.
+
+2001-05-13 Akim Demaille <akim@epita.fr>
+
+ * automake.in ($pkgdata_dir): Rename as...
+ ($libdir): this.
+ ($am_dir): Remove, replace its uses with $libdir.
+ (&parse_arguments): Replace --amdir with --libdir.
+ * automake.texi (Invoking Automake): Document --libdir, not
+ --amdir.
+ * tests/defs (AUTOMAKE): Use --libdir, not --amdir.
+
+2001-05-13 Tom Tromey <tromey@redhat.com>
+
+ * m4/depout.m4 (AM_OUTPUT_DEPENDENCY_COMMANDS): Use AMDEP_TRUE,
+ not AMDEP.
+ * m4/depend.m4 (AM_DEPENDENCIES): Require AM_DEP_TRACK.
+ Correctly look at AMDEP_TRUE, not AMDEP.
+
+ Report from Robert Boehne:
+ * tests/Makefile.am (TESTS): Added depend2.test.
+ * tests/depend2.test: New file.
+
+2001-05-13 James Henstridge <james@daa.com.au>
+
+ * m4/python.m4 (AM_PATH_PYTHON): Added more names for python.
+ Point pythondir at site-packages directory. Rename
+ PYTHON_SITE_PACKAGE to pkgpythondir. Rename PYTHON_SITE_EXEC to
+ pyexecdir. Removed package/module argument. Removed
+ PYTHON_SITE_INSTALL. Added version checking.
+
+2001-05-14 Jim Meyering <meyering@lucent.com>
+
+ * automake.in (macro_define): Change one remaining use of
+ `variable_dump' to `macro_dump'.
+
+2001-05-13 Tom Tromey <tromey@redhat.com>
+
+ * m4/depend.m4 (AM_DEPENDENCIES): Prefer gcc3 over gcc for objc
+ and gcj.
+
+2001-05-13 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&scan_texinfo_file, &handle_dist, &handle_gettext)
+ (&handle_footer, &handle_factored_dependencies, &handle_emacs_lisp)
+ (&am_primary_prefixes): Use `map' rather than `grep'.
+
+2001-05-13 Akim Demaille <akim@epita.fr>
+
+ * automake.in (Language): Set config_vars for yacc, yaccxx, lex,
+ lexxx, asm.
+ (&lang_c_finish, &lang_yacc_finish, &lang_lex_finish): Simplify.
+ (&lang_asm_finish): Remove, set asm's finisher to C's one.
+
+2001-05-13 Akim Demaille <akim@epita.fr>
+
+ * lang-compile.am: New file, loaded once per language.
+ * depend2.am: Move definitions loaded once per language in the
+ aforementioned file.
+ * automake.in (&handle_languages): Load it.
+ (&lang_ppf77_finish, &lang_ratfor_finish): Remove as it's now
+ handled by lang-compile.am.
+
+2001-05-13 Tom Tromey <tromey@redhat.com>
+
+ * tests/Makefile.am (TESTS): Added python.test.
+ * tests/python.test: New file.
+ * automake.in (handle_languages): Use
+ config_aux_dir_set_in_configure_in.
+ (handle_python): Correctly mention AM_PATH_PYTHON. Use
+ py-compile, not py_comp. Define py_compile macro.
+
+2001-05-13 Derek Price <dprice@openavenue.com>
+
+ * automake.in (require_file_with_conf_line,
+ require_file_with_line, require_file): Pass a @require_file_path
+ of $relative_dir instead of '.' to require_file_internal so that
+ all the special casing of '.' can be removed elsewhere.
+ (require_config_file, require_conf_file_with_line,
+ require_conf_file_with_conf_line): Remove special casing for '.'
+ and make sure $config_aux_dir is maintained properly.
+ (require_file_internal): Remove special casing of '.' and set
+ @require_file_path when missing files are added.
+ (maybe_push_required_file): Remove special casing of '.'
+ (handle_dependencies): Remove a workaround for a bug now fixed
+ and remove $config_aux_dir special casing.
+ (handle_configure): Remove special casing for $config_aux_dir
+ (handle_python): Ditto.
+ (yacc_lex_finish_helper): Change $config_aux_dir switch to
+ switch on the value of $config_aux_dir_set_in_configure_in.
+ (handle_texinfo): Ditto.
+ (scan_one_configure_file): Set $config_aux_dir and
+ $config_aux_dir_set_in_configure_in properly so special casing
+ on the value of $config_aux_dir can be removed elsewhere.
+ * tests/depcomp.test: New file.
+ * tests/confsub.test: Look for depcomp in $(top_srcdir) instead of the
+ first subdir containing a C file.
+ * tests/libobj2.test: Ditto.
+ * tests/Makefile.am (TESTS): Added 'depcomp.test'.
+
+2001-05-12 Tom Tromey <tromey@redhat.com>
+
+ * tests/gcj.test: Updated for gcj dependency tracking.
+ * tests/gcj2.test: Likewise.
+
+ Fixes PR automake/169.
+ * m4/depend.m4 (AM_DEPENDENCIES): Handle GCJ. Don't assume gcc
+ style for OBJC.
+ * automake.in (java): Added autodep entry.
+ * tests/Makefile.am (TESTS): Added gcj3.test.
+ * tests/gcj3.test: New file.
+
+2001-05-12 Raja R Harinath <harinath@cs.umn.edu>
+
+ * automake.in (ASSIGNMENT_PATTERN): Make variable-name pattern
+ stop at the first '='.
+ * tests/Makefile.am (TESTS): Added vars.test.
+ * tests/vars.test: New file.
+
+2001-05-12 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&handle_single_transform_list): Simplify
+ computation of $object and $this_obj_ext.
+ * tests/lex3.test: Merge into...
+ * tests/lex.test: here.
+ * tests/pr19.test: Improve and rename as...
+ * tests/lex3.test: this.
+
+2001-05-09 Tom Tromey <tromey@redhat.com>
+
+ * automake.in (read_am_file): Correctly compute $saw_bk.
+ (scan_autoconf_files): Ensure configure_dist_common is always
+ set.
+ * tests/defs (AUTOMAKE): Added --Werror.
+
+2001-05-09 Pavel Roskin <proski@gnu.org>
+
+ * automake.in (define_compiler_variable): Escape $(LIBTOOL) in
+ double quotes.
+
+2001-05-09 Tom Tromey <tromey@redhat.com>
+
+ * tests/werror.test: Use `rm -f'.
+
+2001-05-09 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&am_line_warning): Invoke `am_line_error', not itself.
+
+2001-05-09 Akim Demaille <akim@epita.fr>
+
+ * automake.in: Remove some code left from bad patches.
+ (&handle_dependency): Remove, for the same reason.
+
+2001-05-09 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&make_paragraphs): Transform BUILD, HOST and TARGET.
+ (&handle_tests_dejagnu, &define_standard_variables): Don't.
+ (&define_standard_variables): Don't transform %top_builddir% since...
+ * header-vars.am: Use %TOPDIR% instead.
+
+2001-05-09 Akim Demaille <akim@epita.fr>
+
+ * automake.in (@objects): Remove, unused.
+ Remove all the code related to it, and to former `$(OBJECTS)'.
+
+2001-05-08 Tom Tromey <tromey@redhat.com>
+
+ For PR automake/29:
+ * ylwrap: Handle arguments to program. Remove old code that tried
+ to avoid absolute paths and add new code to do it in all cases.
+ Removed ancient logic that tried to deal with relative path.
+ * tests/Makefile.am (TESTS): Added yacc4.test.
+ * tests/yacc4.test: New file.
+
+ Fix for PR automake/149 and werror.test:
+ * automake.in (require_file_internal): Use am_line_warning or
+ am_conf_line_warning when suppressing error.
+ (am_line_warning): New sub.
+ (am_conf_line_warning): Save and restore warning signal.
+ * tests/Makefile.am (XFAIL_TESTS): Removed werror.test.
+
+ Fix for PR automake/36:
+ * tests/Makefile.am (TESTS): Added asm.test.
+ * tests/asm.test: New file.
+ * automake.in (asm): Use ASFLAGS and AS.
+ (lang_asm_finish): New sub.
+
+ * automake.in (read_am_file): Removed debugging code.
+
+ For PR automake/149:
+ * tests/Makefile.am (TESTS): Added werror.test.
+ (XFAIL_TESTS): Likewise.
+ * tests/werror.test: New file.
+
+ * automake.in (conditional_true_when): Don't return if we see
+ `TRUE'.
+
+ * tests/objc.test: Removed.
+ * tests/Makefile.am (XFAIL_TESTS): Removed objc.test.
+ (TESTS): Likewise.
+
+ * automake.in (subst): New sub.
+ (handle_languages): Use it.
+ (output_lex_build_rule): Likewise; also use _am_quote.
+ (check_libobjs_sources): Likewise.
+ (make_paragraphs): Use subst.
+
+ * automake.in (check_libobjs_sources): Re-fixed AMDEP_TRUE
+ problem.
+
+ * automake.in (file_contents_internal): Prototype now `$$%'.
+ (register_language): Prototype now `%'.
+
+ Fixes test subobj6.test and PR automake/160:
+ * tests/Makefile.am (XFAIL_TESTS): Removed subobj6.test.
+ * compile.am (mostlyclean-compile): Added MOSTLYRMS.
+ (distclean-compile): Added DISTRMS.
+ * tests/subobj6.test (wish_SOURCES): Updated to reflect
+ `mostlyclean' use; added test for non-subdir case.
+ * automake.in (compile_clean_files): New global.
+ (MOSTLY_CLEAN, DIST_CLEAN): New constants.
+ (initialize_per_input): Initialize compile_clean_files.
+ (handle_single_transform_list): Set compile_clean_files entries.
+ (handle_compile): Handle compilation cleanups.
+
+2001-05-08 Lars J. Aas <larsa@sim.no>
+
+ * automake.texi (Canonicalizing Automake macros): Document not
+ canonicalizing strudels (@) anymore.
+
+2001-05-08 Akim Demaille <akim@epita.fr>
+
+ * distdir.am (dist-all): Build all the flavors using a single
+ distdir.
+
+2001-05-08 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&file_contents_internal): Apply the @cond_stack to
+ the rules and assignments.
+ Don't rely on `$.' as it's biased by &make_paragraphs.
+ Don't remove backslashes in variable values.
+
+2001-05-08 Akim Demaille <akim@epita.fr>
+
+ * automake.in ($IGNORE_PATTERN): Improve for multi-line matches.
+ ($RULE_PATTERN): Use that from `&make_paragraphs'.
+ ($MACRO_PATTERN): Just catch the name of a macro.
+ ($BOGUS_MACRO_PATTERN): Remove.
+ ($ASSIGNMENT_PATTERN): New.
+ (&file_contents_internal, &make_paragraphs): Adjust.
+ (&macro_define): Catch bad macro names.
+ (&cond_stack_endif): Better error message.
+ (&file_contents_internal): Don't remove backslashes in variable
+ values.
+ (&macro_define): Do it for `+=' user variables.
+ (&define_standard_variables): Use `undef' instead of a dummy
+ variable.
+ (&make_paragraph): Be sure not to chop the trail of hash only
+ lines: adjust the `##' regexp.
+ (&rule_define): Fix a bug: don't read $1 but $target.
+ * tests/condincl.test: Strengthen.
+
+2001-05-08 Akim Demaille <akim@epita.fr>
+
+ * automake.in (Language): Add attributes `Name' and `config_vars'.
+ (&finish): Work properly if there is no _finish.
+ (Automake): Register language Names and AC_SUBST dependencies.
+ Register Fortran 77 variables upon which ratfor and ppf77 depend.
+ (&handle_languages): Once per language, invoke
+ `define_linker_variables', and check its config_vars.
+ (&lang_cxx_finish, &lang_f77_finish, &lang_objc_finish)
+ (&lang_java_finish): Remove.
+ (&lang_ppf77_finish, &lang_ratfor_finish): Adjust.
+
+2001-05-08 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&file_contents_internal): Accept $IS_AM.
+ (&handle_compile, &define_standard_variables, &file_contents): Adjust.
+
+2001-05-08 Akim Demaille <akim@epita.fr>
+
+ * automake.in (am_install_var): Use `next' instead of `if' on the
+ body of $X loop.
+
+2001-05-08 Akim Demaille <akim@epita.fr>
+
+ * automake.in (Language): Add attributes `lder' and `ld'.
+ (&register_language): Specify for cxx, objc, f77, gcj.
+ (&define_linker_variable): New.
+ (&lang_cxx_finish, &lang_f77_finish, &lang_objc_finish)
+ (&lang_java_finish): Adjust.
+ (&libtool_compiler): Remove.
+
+2001-05-08 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&handle_lib_objects_cond): Don't take $LEX_SEEN as
+ argument, as you don't use it.
+ Hence...
+ (&handle_lib_objects): Don't take $LEX_SEEN as argument, as you
+ don't use it.
+ Hence...
+ (&handle_programs): Don't mess with %lex_sources, as you don't use
+ it.
+
+2001-05-08 Akim Demaille <akim@epita.fr>
+
+ * automake.in (Language): Add attribute `link'.
+ (&register_language): Specify for cxx, objc, f77, gcj.
+ (&lang_cxx_finish, &lang_f77_finish, &lang_objc_finish)
+ (&lang_java_finish): Adjust.
+
+2001-05-08 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&define_compiler_variables): Use only $LANG as
+ argument.
+ (&handle_languages): Adjust.
+
+2001-05-08 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&define_program_variable): Remove.
+ (&scan_one_autoconf_file): Skip MAKEINFO when found in an
+ AM_MISSING_PROG.
+ (&handle_texinfo): Don't define MAKEINFO and TEXI2DVI.
+ * texinfos.am: Do it.
+
+2001-05-08 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&handle_tests_dejagnu): Don't define EXPECT and
+ RUNTEST.
+ * dejagnu.am: Do it.
+ (site.exp): Use `if'.
+
+2001-05-08 Akim Demaille <akim@epita.fr>
+
+ * automake.in: Formatting changes.
+ (variable_dump, variables_dump): Rename as...
+ (macro_dump, macros_dump): these.
+
+2001-05-08 Akim Demaille <akim@epita.fr>
+
+ Support `if !COND', `else COND', `end COND'.
+
+ * automake.texi (Conditionals): Document it.
+ * automake.in ($WHITE_PATTERN, $MACRO_PATTERN, $BOGUS_MACRO_PATTERN)
+ ($GNITS_VERSION_PATTERN, $INCLUDE_PATTERN): Use `\d' and `\s'.
+ ($IF_PATTERN, $ELSE_PATTERN, $ENDIF_PATTERN): Likewise, and accept
+ a leading `!' before the condition.
+ (&handle_options): Use `\d'.
+ (&cond_stack_if, &cond_stack_else, &&cond_stack_endif): New.
+ (&read_am_file, &file_contents_internal): Use them.
+ (&transform): No longer substitute `%!COND%', forcing the use of
+ `! %?COND%'.
+ * ansi2knr.am, lex.am, tags.am, texinfos.am, yacc.am: Adjust.
+
+2001-05-08 Akim Demaille <akim@epita.fr>
+
+ Uniform handling of per-object compilation rules.
+ Note: Automake is repaired.
+
+ * automake.in (&handle_languages): Output per object rules for all
+ the objects, not only for those which language supports dependency
+ tracking.
+ Fix Automake: when outputting per-object rules, use `-o' if the
+ language has no `output_flag', as it's really needed.
+ (&handle_single_transform_list): Instead of special casing files
+ which need per object rules but which language don't support
+ dependency tracking, keep them in the queue for processing by
+ `&handle_languages'.
+
+2001-05-08 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&handle_languages): `ext-compile.am' and
+ `depend2.am' are now equivalent for generic rules: output only the
+ latter.
+ * ext-compile.am: Remove.
+
+2001-05-08 Akim Demaille <akim@epita.fr>
+
+ Note: This patch breaks Automake. Repaired within two patches.
+
+ * automake.in (Language): Replace the attribute `output_arg' with
+ `compile_flag' and `output_flag'.
+ (Automake): Adjust language registrations.
+ (&handle_languages): Transform `-c' and `-o' for both suffix and
+ per object rules, instead of `OUTARG' and `LTOUTARG' only for
+ generic rules.
+ (&handle_single_transform_list): Adjust to `compile_flag' and
+ `output_flag'.
+ * depend2.am, ext-compile.am: Use `%-c%' and `%-o%'.
+
+2001-05-08 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&handle_languages): Don't transform %COMPILER%.
+ Use `$lang->compiler' instead of `$pfx' to transform generic
+ %COMPILE% and %LTCOMPILE%.
+ * ext-compile.am: Use %COMPILE%, %LTCOMPILE% and %SOURCE% instead
+ of %COMPILER% and $<.
+
+2001-05-07 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&handle_languages): Use the same `%transform' for
+ both `depend2.am' and `ext-compile.am'.
+ Delay the definition of `$flag' so it is right before the first use,
+ and rename as `$flags'.
+
+2001-05-07 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&handle_languages): Compute `$ltoutarg' and
+ `$outarg' independently of dependency code.
+ There is no use looping on a language's possible extensions since
+ we loop over used extensions.
+ Therefore, there is no use for a local `%transform'.
+
+2001-05-07 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&handle_languages): Don't use $comp.
+
+2001-05-07 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&handle_languages): Merge the two loops over
+ %extension_seen/%languages into one and group code to be run once
+ per language together.
+
+2001-05-07 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&handle_languages): Move the `if
+ ($use_dependencies)' block so that loops over extensions and
+ languages are next to each other.
+
+2001-05-07 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&depend2): Remove, merged into...
+ (&handle_languages): here.
+
+2001-05-07 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&finish_languages): Rename as...
+ (&handle_languages): this.
+ Include the body of...
+ (&handle_dependency): this.
+ Remove.
+
+2001-05-06 Tom Tromey <tromey@redhat.com>
+
+ For PR automake/46:
+ * tests/Makefile.am (TESTS): Add subdir5.test.
+ (XFAIL_TESTS): Likewise.
+ * tests/subdir5.test: New file.
+
+ * tests/subobj6.test (wish_SOURCES): Use $MAKE.
+ * tests/subobj5.test (wish_SOURCES): Use $MAKE.
+
+ * automake.in (GNITS_VERSION_PATTERN): Document. Add `fork
+ identifier'.
+ (handle_options): Handle fork identifier in version number.
+
+ * automake.texi (Dist): Document distcheck-hook.
+
+ * tests/confh4.test: Update to reflect DEFS change.
+ For PR automake/132.
+
+ Fix for PR automake/132:
+ * automake.in (c, c++, objc, asm, ppf77): Add DEFAULT_INCLUDES to
+ compilation.
+ (java): Remove INCLUDES and DEFS from compilation.
+ (lang_c_finish): Add DEFAULT_INCLUDES to compilation.
+ * compile.am (DEFS): Don't include %DEFAULT_INCLUDES%.
+ (DEFAULT_INCLUDES): New macro.
+
+ * automake.in (usage): Re-align explanatory text.
+ Fixes PR automake/148.
+
+ * automake.texi (Uniform): Don't use @PROGRAMS@.
+ Fixes PR automake/154.
+
+ For PR automake/160:
+ * tests/Makefile.am (TESTS): Add subobj5.test and subobj6.test.
+ (XFAIL_TESTS): Add subobj6.test.
+ * tests/subobj6.test: New file.
+
+ * automake.texi (Uniform): Mention dist_, nodist_, and nobase_.
+ (Top level): Don't mention `flat'.
+ (Extending): Likewise.
+ (User Variables): New node.
+
+ * distdir.am (distdir): Make subdirectory for each file.
+ Fixes test subobj5.test.
+
+ * tests/Makefile.am (TESTS): Add new file.
+ (XFAIL_TESTS): Likewise.
+ * tests/texinfo10.test: New file.
+
+2001-05-05 Pavel Roskin <proski@gnu.org>
+
+ * automake.in (scan_texinfo_file): Treat @defindex and @synindex
+ in the same way as @defcodeindex and @syncodeindex respectively.
+
+2001-05-05 Tom Tromey <tromey@redhat.com>
+
+ * mans.am (install-man%SECTION%): Minor cleanup.
+ (uninstall-man%SECTION%): Likewise.
+
+ * tests/Makefile.am (XFAIL_TESTS): Removed man.test.
+ * mans.am (install-man%SECTION%): Handle dist_ and nodist_
+ prefixes.
+ (uninstall-man%SECTION%): Likewise.
+ * automake.in (handle_man_pages): Handle dist_ and nodist_
+ prefixes.
+
+ * automake.texi (Future): Removed.
+ (Depth): Removed.
+ (Hello): Don't mention `deep'.
+ (Top level): Likewise.
+
+ * automake.in (conditional_true_when): Use a hash, not index().
+ Also, a TRUE component always results in a true return.
+ Fixes test cond10.test. For PR automake/164.
+ * tests/Makefile.am (XFAIL_TESTS): Removed cond10.test.
+
+2001-05-05 Raja R Harinath <harinath@cs.umn.edu>
+
+ For PR automake/164:
+ * tests/Makefile.am (TESTS): Added new file.
+ (XFAIL_TESTS): Likewise.
+ * tests/cond10.test: New file.
+
+2001-05-05 Tom Tromey <tromey@redhat.com>
+
+ * texinfos.am (uninstall-info-am): Debian install-info v1.8.3
+ prints to stderr.
+ (install-info-am): Likewise.
+
+2001-05-05 Pavel Roskin <proski@gnu.org>
+
+ * automake.in (scan_texinfo_file): Don't push undefined values
+ to @clean_suffixes.
+
+2001-05-05 Richard Boulton <richard@tartarus.org>
+
+ * automake.in (handle_dist): Check for existence of DIST_SUBDIRS
+ first.
+
+2001-05-05 Robert Collins <robert.collins@itdomain.com.au>
+
+ * automake.in (required_targets): Added uninstall-am.
+
+2001-05-05 Tom Tromey <tromey@redhat.com>
+
+ Fix bug reported by Robert Boehne:
+ * automake.in (output_lex_build_rule): Don't let AMDEP_TRUE be
+ substituted.
+ (handle_dependencies): Likewise.
+ * Makefile.am (maintainer-check): Look for AMDEP_TRUE
+ substitution. Correct diff now has 30 lines. Look for space
+ after losing `undef'.
+
+2001-05-04 Peter Eisentraut <peter_e@gmx.net>
+
+ * m4/sanity.m4: Remove the temp file before possible error exits.
+
+2001-05-04 Akim Demaille <akim@epita.fr>
+
+ * configure.in: Set perllibdir.
+ From Dave Morrison.
+
+2001-05-04 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
+
+ * automake.in ($pkgdata_dir): New.
+ (&require_file_internal): Use it.
+
+2001-05-03 Akim Demaille <akim@epita.fr>
+
+ Case insensitive FS choke on Automake/ vs automake.
+ Reported by Tim Van Holder.
+
+ * Automake/: Move into...
+ * lib/: this new directory.
+
+2001-05-03 Raja R Harinath <harinath@cs.umn.edu>
+
+ * data.am (install-%DIR%%PRIMARY%): Execute the same command as
+ echoed.
+
+2001-04-30 Jim Meyering <meyering@lucent.com>
+
+ * automake.in: Remove `/lib' from include directory.
+
+2001-04-27 Akim Demaille <akim@epita.fr>
+
+ AM_INIT_AUTOMAKE is no longer optional.
+
+ * automake.in ($seen_make_set, $seen_prog_install)
+ ($seen_arg_prog): Remove.
+ (&handle_programs, &handle_scripts, &scan_one_autoconf_file):
+ Remove related code.
+
+2001-04-27 Akim Demaille <akim@epita.fr>
+
+ * tests/specflags4.test, tests/specflags5.test: Remove, merged
+ into...
+ * tests/specflags3.test: here.
+
+2001-04-27 Akim Demaille <akim@epita.fr>
+
+ * automake.in ($seen_path_xtra): Remove.
+ (&handle_compile): Don't handle `AC_PATH_XTRA' AC_SUBST variables.
+ (&scan_one_autoconf_file): Do it, instead of setting $seen_path_xtra.
+
+2001-04-27 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&file_contents_internal): Declare it.
+
+2001-04-27 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&read_am_file, &file_contents_internal): Don't
+ define macros when `FALSE', to avoid errors on doubly defined
+ variables but under condition `FALSE'. In order to allow...
+ (&am_install_var): When reading the associated file for the first
+ time, enable `%?FIRST%'.
+ (&handle_libraries): Let libs.am define $(AR) and $(RANLIB).
+ * libs.am: Do it when `%?FIRST%'.
+
+2001-04-27 Akim Demaille <akim@epita.fr>
+
+ * automake.in (handle_compile): Let ansi2knr.am define $(ANSI2KNR).
+ * ansi2knr.am: Do it.
+ Prefer `if %?FOO%' to `if %!FOO%'.
+
+2001-04-27 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&register_language, &finish_languages): Use `pure'
+ as a Boolean.
+ (&register_language): Use %done properly with objects, not names.
+ (&finish_languages): Replace `$non_c' with `$needs_c'.
+
+2001-04-27 Akim Demaille <akim@epita.fr>
+
+ Unify LISP, PYTHON and JAVA primaries.
+
+ * automake.in (&handle_emacs_lisp): Be like &handle_python, i.e.,
+ return if there are no files, hook elisp-comp on the Autoconf
+ macro, rely on lisp.am to define variables.
+ (&handle_python, &handle_java): Likewise.
+ (&scan_one_autoconf_file): Pseudo AC_SUBST of `pythondir' and
+ `PYTHON' must be handled here, not in `&handle_python'.
+ * java.am: Define needed variables and rules.
+
+2001-04-27 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&am_install_var): Transform `ONE_PRIMARY'.
+ * data.am: Use it.
+ * header.am: Include data.am.
+
+2001-04-27 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&am_install_var): Transform `PRIMARY'.
+ * data.am: Equip with %PRIMARY%.
+
+2001-04-27 Akim Demaille <akim@epita.fr>
+
+ * automake.in (@conditional_stack): Rename as...
+ (@cond_stack): this.
+ (&file_contents_internal): Support inclusion of files.
+
+2001-04-27 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&lang_extensions): Remove.
+ (&add_depend2, &saw_sources_p): Adjust.
+ * depend2.am: `%EXT%' no longer includes the dot.
+
+2001-04-27 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&finish_languages, &handle_single_transform_list)
+ (&add_depend2, &handle_dependencies): No longer use the language
+ name in `$lang'. Rename `$lang_obj' as `$lang'.
+
+2001-04-27 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&register_language): Use `new Language' with a hash.
+
+2001-04-27 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&register_language): Rename `output-arg' and
+ `derived-autodep' as `output_arg' and `derived_autodep' to match
+ the Language attribute.
+ Set the defaults in %option instead of $lang.
+
+2001-04-27 Akim Demaille <akim@epita.fr>
+
+ * Automake/: New directory.
+ * Automake/Struct.pm: New file, based on Perl 5.6's Class::Struct.
+ * automake.in (Language): Use Automake::Struct.
+ * tests/defs: Adjust to find Struct.
+
+2001-04-23 Pavel Roskin <proski@gnu.org>
+
+ * automake.in: Add forward declaration for register_language().
+ * tests/Makefile.am (XFAIL_TESTS): Remove installsh.test - it
+ passes now.
+
+2001-04-20 Akim Demaille <akim@epita.fr>
+
+ * automake.in (%required_targets): Add `uninstall'.
+ From Robert Collins.
+
+2001-04-12 Akim Demaille <akim@epita.fr>
+
+ * automake.in (Language): Add attribute `name'.
+ (&register_language): The name of the language is now given in the
+ hash.
+ No longer use `$lang' as the name of the language.
+ Rename `$lang_obj' as `$lang'.
+
+2001-04-12 Akim Demaille <akim@epita.fr>
+
+ * automake.in (Language): Add attribute `_finish'.
+ (&finish): New.
+ (Automake): Adjust.
+ (&lang_header_finish, &lang_yaccxx_finish, &lang_lexxx_finish)
+ (&lang_asm_finish): Remove.
+
+2001-04-12 Akim Demaille <akim@epita.fr>
+
+ * automake.in (Language): Add attribute `extensions'.
+ (Automake): Pass a hash to `&register_language' instead of a
+ list of pseudo assignments.
+ (&register_language): Adjust.
+ (&finish_languages): Initialize `$ltoutarg'.
+
+2001-04-12 Akim Demaille <akim@epita.fr>
+
+ * automake.in (Language): Add attribute `output_arg'.
+ (%language_map): Remove.
+ (&register_language): Build only the object, and store in
+ %languages only.
+ (&finish_languages, &handle_single_transform_list): Adjust.
+
+2001-04-12 Akim Demaille <akim@epita.fr>
+
+ * automake.in (Language): Add attributes `flags', `compile' and
+ `compiler'.
+ (&finish_languages, &handle_single_transform_list, &handle_dist)
+ (&add_depend2, &register_language): Use them and the `linker' and
+ `pure' attributes.
+
+2001-04-12 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&handle_single_transform_list, &finish_languages)
+ (&handle_dist, &handle_dependencies): Use the language object for
+ autodep and derived-autodep too.
+
+2001-04-12 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&macro_define): Ignore Automake definition for
+ ($var, $cond) if there is already a user definition for ($var, $cond).
+
+2001-04-12 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&scan_texinfo_file): Catch @cindex and the like,
+ but also @deffn and so on which push data in indexes.
+ Reported by Derek R. Price.
+
+2001-04-12 Akim Demaille <akim@epita.fr>
+
+ * automake.in (Language): New package, temporarily in this file.
+ Use Class::Struct.
+ (Automake): New package.
+ (%languages): New.
+ (&handle_single_transform_list): Use the language object's `ansi'
+ attribute instead of `$language_map{"$lang-ansi-p"}'.
+ (&register_language): Build and register the language too.
+
+2001-04-11 Tom Tromey <tromey@redhat.com>
+
+ Fixes report from Larry Jones:
+ * automake.in (handle_dependencies): Add `@_am_quote@' where
+ appropriate.
+ * m4/make.m4 (AM_MAKE_INCLUDE): Handle BSD-style make.
+
+2001-04-11 Akim Demaille <akim@epita.fr>
+
+ * depend2.am: Fix the `if' condition for Libtool.
+ Reported by Robert Boehne.
+
+2001-04-10 Robert Collins <robert.collins@itdomain.com.au>
+
+ * tests/subobj5.test: New file.
+
+2001-04-10 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
+
+ * m4/make.m4 (AM_MAKE_INCLUDE): Pass `-s' to make.
+ * tests/Makefile.am (TESTS): Added make.test.
+ * tests/make.test: New file.
+
+2001-04-10 Tom Tromey <tromey@redhat.com>
+
+ * tests/defs: Changed how ACLOCAL and AUTOMAKE are set.
+
+2001-04-10 Derek R. Price <dprice@collab.net>
+
+ * tests/defs: Allow user to override AUTOMAKE and ACLOCAL.
+
+2001-04-10 Akim Demaille <akim@epita.fr>
+
+ * distdir.am: Add a missing backslash.
+
+2001-04-10 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&scan_aclocal_m4): Handle $relative_dir and special
+ variables.
+ Specify to the caller whether $regen_aclocal_m4.
+ (&handle_configure): Adjust.
+ Transform `REGEN-ACLOCAL-M4'.
+ Reported by Tom.
+ * configure.am: Use it.
+ * tests/defs (me): New.
+ * tests/confdeps.test: New.
+
+2001-04-09 Tom Tromey <tromey@redhat.com>
+
+ * m4/missing.m4 (AM_MISSING_HAS_RUN): Use `true', not `:'.
+ Fixes report from Jim Meyering.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&handle_configure): Don't bother with optimizing
+ macro uses.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * tests/cond3.test (expected): Adjust.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&handle_single_transform_list): Remove $xbase,
+ unused.
+ (&handle_source_transform): All the variables have conditions now,
+ simplify.
+ (&variable_delete): Admit an argument @conds.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * automake.in ($source_suffix_pattern): Remove, unused.
+ %extension_map seems to have replaced it.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * ext-compile.am: New file.
+ * automake.in (&finish_languages): Output it.
+ Require a C linker if there are several registered source suffixes.
+ (&handle_compile): No longer push the `.c', `.o', `.obj', `.lo'
+ extensions, which are discovered in ext-compile.am.
+ With the help from Robert Boehne.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&handle_compile): Extract from...
+ (&get_object_extension): here.
+ (&read_am_file): Call it.
+ ($included_generic_compile, $included_knr_compile)
+ ($included_libtool_compile): Remove.
+ ($get_object_extension_was_run): New.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ Use AM_CONDITIONAL and if/endif for AMDEP.
+
+ * m4/depend.m4 (AM_DEP_TRACK): Use AM_CONDITIONAL to define AMDEP.
+ * automake.in (&add_depend2): Transform %AMDEP% into `AMDEP' (leading
+ to a configure time if/endif), or to `FALSE' (static removal of
+ the code).
+ (&handle_dependencies): Adjust to use `AMDEP_TRUE'.
+ * depend2.am: Use if/endif.
+
+ Adjust the 101 tests that use dependencies so that they
+ properly invoke aclocal before automake. They need to `see'
+ `AM_CONDITIONAL([AMDEP], ...)'.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * tags.am: Fix missing leading tabs.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * automake.in: Use simple quotes to define the _PATTERN variables
+ to unobfuscate the regexps.
+ ($AM_CONDITIONAL_PATTERN): Let the user quote the variable.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&rule_define): When you discover a suffix rules,
+ register the extensions for .SUFFIXES.
+ (&handle_texinfo): Don't register the suffixes.
+ (&get_object_extension): Don't register suffixes, let them be
+ discovered in depend2.am.
+ (&handle_emacs_lisp): Depend on your lisp.am.
+ * lisp.am: Include the rule &handle_emacs_lisp used to output.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * subdirs.am: Don't define info related recursive targets.
+ * texinfos.am: Do.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * subdirs.am (RECURSIVE_TARGETS): New variable.
+ Use it.
+ * automake.in (&handle_subdirs): Output it.
+ (&file_contents_internal): Support value spread on several lines.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&handle_man_pages): Rely on mans.am to define
+ man%SECTION%dir and MANS.
+ * mans.am: Do it.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&variable_dump): Use %var_type properly.
+ (&macro_define): Enforce better overriding rules.
+ Handle the special case that used to handle...
+ (&define_pretty_variable): this.
+ Hence, don't.
+ The variables you define are owned by Automake.
+ (&generate_makefile): PRE_INSTALL and co must not be defined *by
+ the user*.
+ (&variable_defined): Now independent of the owner.
+ (&variable_output, &variable_pretty_output): Adjust to %var_type.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * automake.in (%var_was_plus_eq): Rename as...
+ (%var_type): this.
+ (%def_type): Remove.
+ (&macro_define): %var_type may now hold `', `+', or `:'.
+ (%conditional, %am_vars, %content_lines): Rename as...
+ (%var_value, %var_comment, %var_line): these.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&variable_output): Admit a list of @CONDS.
+ (&variable_pretty_output): New.
+ (&define_pretty_variable): Use it.
+ (&read_am_file, &file_contents_internal): Prepend a separator to
+ $am_vars only if there is none yet.
+ (&file_contents_internal): Rename $separator as $spacing to
+ harmonize with &read_am_file.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&am_install_var): Transform DIST, and let the *.am
+ files handle DIST_COMMON.
+ * data.am, header.am, java.am, list.am, python.am, script.am: Set
+ DIST_COMMON.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * automake.in (%dist_common): Remove.
+ (%configure_dist_common): Replace with...
+ ($configure_dist_common): this.
+ (&generate_makefile): Read the user file before using
+ push_dist_common, as it sets DIST_COMMON, and read_am_file checks
+ that no variable is defined before it is run.
+ (&handle_texinfo): Don't handle DIST_COMMON, let your file do it.
+ (&dist_cmp): Rename as...
+ (&for_dist_common): this.
+ (&handle_dist): Don't handle DIST_COMMON, let `configure.am' do
+ it.
+ Adjust to $configure_dist_common.
+ * configure.am, texi-vers.am: Set DIST_COMMON.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&handle_aclocal_m4): Rename as...
+ (&scan_aclocal_m4): this.
+ Return the list of aclocal.m4 dependencies.
+ (&handle_configure): Invoke it, and use it when loading...
+ * configure.am: Template the rules to recreate aclocal.m4.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&get_object_extension): Use ansi2knr.am.
+ * clean-kr.am, kr-extra.am: Remove, merged into...
+ * ansi2knr.am: this new file.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&transform): Fix an incredible bug which was
+ breaking the if/endif system.
+ ($ELSE_PATTERN): Admit an optional argument.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * comp-vars.am: Remove, merged into...
+ * compile.am: here.
+ * automake.in (&get_object_extension): Adjust.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * remake.am: Merge into...
+ * configure.am: ... here.
+ * automake.in (&handle_configure): Adjust.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&output_lex_build_rule): Output this...
+ * lex.am: New file.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&condition_negate): New.
+ (&variable_conditions_permutations): Use it.
+ (&read_am_file, &file_contents): Use it on `else' clauses to
+ support `if FALSE'.
+ (&output_yacc_build_rule): Output this...
+ * yacc.am: New file.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&make_paragraphs): Transform TOPDIR_P and TOPDIR.
+ (&handle_dist): Don't.
+ (&handle_clean): Don't handle config.status here, let...
+ * clean.am: ... do it.
+ * distdir.am: Adjust.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * automake.in: Use strict vars and subs.
+ Declare `%require_file_found'.
+ (&handle_source_transform, &make_paragraphs): Declare my variables.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * data.am, header.am, java.am, libs.am, lisp.am, ltlib.am,
+ * progs.am, python.am: Use if/endif instead of ?INSTALL?.
+ * java.am (_am_installdirs): Be sure to set it.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&make_condition): Return '#' when FALSE.
+ (&conditional_string): Return FALSE, not '#' in the corresponding
+ cases.
+ (&file_contents_internal): Adjust.
+ (&check_variable_defined_unconditional): Dump the guilty variable.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * distdir.am: Use and abuse of if/endif.
+ * scripts.am: Using if/endif with variables is fine.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&make_paragraphs): Extract from &file_contents.
+ Make it more robust than the previous RE based scheme.
+ (&file_contents): Use it.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&make_paragraphs): Extract from &file_contents.
+ Make it more robust than the previous RE based scheme.
+ (&file_contents): Use it.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * tests/yacc2.test: Don't define several times a variable, as
+ automake complains.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&handle_source_transform): Fix pr72: don't define
+ $linker if there are no @files.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ Avoid reading twice header-vars.am as now macro_define
+ complains.
+
+ * automake.in (&define_standard_variables): Don't output the
+ variables.
+ (&read_main_am_file): Output first user variables, then Automake
+ variables.
+ Don't call twice &define_standard_variables.
+ Save variable comments in $am_vars.
+ (&variable_output): New.
+ (&file_contents_internal): New.
+ Save variable comments in $am_vars.
+ (&file_contents): Use it.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&macro_define): The user is allowed to override
+ a value if it was set by Automake, or if it was found in AC_SUBST.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&handle_source_transform): Better locality of the
+ variables.
+ Use `next' to skip nonexistent variables.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&variable_dump): If a variable is undefined, say
+ it.
+ (&check_ambiguous_conditional): Give finer error messages.
+ (&macro_define): Check that a `+=' variable is not set with `='.
+ Check for ambiguous definitions each time you _set_ (even with `+=')
+ a variable.
+ (&read_main_am_file): Perform a deep copy of %conditional.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&variable_defined): Some callers, e.g.,
+ &am_primary_prefixes, really want to know if the variable is
+ defined for any condition, not `TRUE' by default.
+ (&am_primary_prefixes): Give a more precise error message.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ (&variable_conditions): Don't include `FALSE' in the result.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&variable_conditions_reduce): FALSE is absorbent.
+ (&variable_conditions): Don't include `FALSE' in the result.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * tests/defs, tests/depend3.test: Remove useless code.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&handle_source_transform): Use
+ &variable_conditions, don't read $conditional{$var}.
+ (&variable_conditions_sub): When the call is the top level call,
+ generate all the permutations of the conditions.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * depend2.am (@AMDEP@%FPFX%DEPMODE): Define it when GENERIC so
+ that it does not get noticed twice by automake, which now
+ complains for multiple definitions.
+ * tests/vartar.test: s/INSTALL/install/g, automake now complains
+ because we defined INSTALL.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&generate_makefile) Use macro_define to define
+ SOURCES and OBJECTS.
+ (&variable_defined): Don't check for $conditional{VAR}{COND} as
+ this would make perl create $condition{VAR}, which we don't want.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&variable_defined, &define_pretty_variable):
+ Simplify code which used to handle the cases where not all
+ variables were in %conditional.
+ (&define_variable): Use &define_pretty_variable.
+ (&variable_conditions_sub, &variable_value_as_list_worker)
+ (&variable_value_as_list, &rule_define): Simplify syntax.
+ (&read_main_am_file): Dump the guilty predefined variables.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&variable_conditions_sub)
+ (&variable_value_as_list_worker): Remove dead code which used to
+ handle the cases where not all variables were in %conditional.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&handle_source_transform, &read_main_am_file):
+ Simplify loops which were split in two parts, conditional vs
+ unconditional variables.
+
+2001-04-09 Akim Demaille <akim@epita.fr>
+
+ Handle unconditional values of variables as conditioned by
+ `TRUE'.
+
+ * automake.in (%contents): Remove.
+ (&generate_makefile, &handle_ltlibraries, &macro_define)
+ (&read_am_file, &variable_defined, &variable_conditions_sub)
+ (&variable_value, &variable_value_as_list_worker)
+ (&variable_value_as_list, &define_pretty_variable)
+ (&read_main_am_file): Use
+ $conditional, not %contents.
+ (&variable_conditions_permutations): Don't return TRUE and FALSE.
+ (&variable_conditionally_defined): New.
+ (&handle_dist): Use it.
+ (&check_ambiguous_conditional): When multiply defined, specify
+ under which condition.
+ (&macro_define): Use it.
+ (&variable_delete): New.
+ (&read_am_file): Use it.
+ (&am_install_var): Simplify, as all the variables are in
+ %conditional now.
+
+2001-04-07 Tom Tromey <tromey@redhat.com>
+
+ * tests/Makefile.am (XFAIL_TESTS): Added man.test.
+ (TESTS): Likewise.
+ * tests/man.test: New file.
+
+2001-04-07 Raja R Harinath <harinath@cs.umn.edu>
+
+ * depcomp (gcc3): Invert test condition.
+
+2001-04-07 Tom Tromey <tromey@redhat.com>
+
+ * depcomp (gcc3, gcc): Don't assume $? will be set in `if'
+ statement. Report from Larry Jones.
+
+2001-04-07 Raja R Harinath <harinath@cs.umn.edu>
+
+ * depcomp (sgi): Fix sed expression. Report from Robert Boehne.
+
+2001-04-01 Tom Tromey <tromey@redhat.com>
+
+ * java.am (.PHONY clean-am): Removed trailing ":".
+ From Per Bothner. Fixes PR automake/139.
+
+2001-03-28 Akim Demaille <akim@epita.fr>
+
+ * program.am: Fix a stupid typo: now *all* (not none) the programs
+ use `$(EXEEXT)'.
+ Reported by Robert Boehne.
+
+2001-03-23 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&read_am_file, &file_contents): Avoid name clashes
+ on $cond.
+
+2001-03-23 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&variable_conditionally_defined): Rename as...
+ (&check_variable_unconditionally_defined): this.
+ (&variable_dump): Fix the output.
+ (&variable_defined, &macro_define): Since conditions are
+ canonicalized, don't use a loop to look for a condition: read the
+ hash.
+ (&macro_define, &rule_define, &read_am_file, &file_contents):
+ Rename $cond_string as $cond.
+ * distdir.am (PACKAGE, VERSION): Remove; since they are already
+ discovered via AC_SUBST, they now trigger a `defined twice' error.
+
+2001-03-23 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&handle_footer, &handle_installdirs)
+ (&read_main_am_file): Don't read %contents directly, use
+ &variable_value.
+
+2001-03-23 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&read_am_file): Define the variables in a single
+ shot.
+ Factor the $saw_bk code.
+
+2001-03-23 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&read_am_file): Keep $cond_string up to date.
+
+2001-03-23 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&define_variable): Use &macro_define.
+
+2001-03-23 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&macro_define): Don't lose the location if we
+ redefine a variable.
+ Don't push all the variables in @var_list, let...
+ (&read_am_file, &file_contents): ... do it.
+ (&define_pretty_variable): Use macro_define.
+ (&am_install_var): Delete the value of variables being redefined
+ to pacify &macro_define which checks that variables are not
+ doubly defined.
+
+2001-03-23 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&conditional_dump): Rename as...
+ (&variables_dump): this. Use...
+ (&variable_dump): this new sub.
+
+2001-03-23 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&file_contents): Maintain $cond_string sync with
+ @cond_stack.
+ Output rules only if not under `FALSE'.
+ Define variables under $cond_string.
+ * scripts.am: For the time being if/endif does not work properly
+ with macros.
+
+2001-03-23 Akim Demaille <akim@epita.fr>
+
+ * automake.in (IF_PATTERN): Unobfuscate the parens.
+ (ENDIF_PATTERN): Allow a condition to be specified.
+ (&file_contents): Use a @cond_stack.
+ (&transform): At least for an easy transition, also transform
+ %?FOO% and %!FOO%, as suggested by Lars.
+ * scripts.am: First test bed for static if/endif use.
+
+2001-03-23 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&file_contents): Use rule_define.
+
+2001-03-23 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&macro_define): Don't rely on $1.
+ Initialize the variable.
+ Set its Automakism only if not defined or if given to the user.
+ When concatenating values, insert a separator only if the value
+ was not empty.
+ (&read_am_file): When dumping the @var_list, skip Automake
+ variables.
+ (&file_contents): Use macro_define.
+
+2001-03-23 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&rule_define): Extract from...
+ (&read_am_file): here.
+
+2001-03-23 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&macro_define, &read_am_file): More work for the
+ former from the latter. Reorganize the latter.
+
+2001-03-23 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&macro_define): Extract from...
+ (&read_am_file): here.
+
+2001-03-23 Akim Demaille <akim@epita.fr>
+
+ * automake.in (%am_var_defs): Replace with...
+ (%var_is_am): this.
+ (&handle_installdirs, &variable_value_as_list_worker, &read_am_file)
+ (&file_contents, am_primary_&prefixes): Adjust.
+ (&variable_defined, &define_variable): The actual semantics is
+ `user defined'.
+ (&read_main_am_file): Assert the var is user defined when
+ outputting @var_list.
+
+2001-03-23 Akim Demaille <akim@epita.fr>
+
+ * automake.in (read_am_file): TRUE and FALSE are predefined
+ conditionals.
+ (&by_condition): Adjust.
+ (&conditional_string): Recognize `TRUE' and `FALSE'.
+ (&make_condition): Use it.
+ * m4/cond.m4: Reject TRUE and FALSE as conditionals.
+ * automake.texi (Conditionals): Adjust.
+ * tests/cond9.test: s/FALSE/WRONG/.
+
+2001-03-12 Pavel Roskin <proski@gnu.org>
+
+ * tests/Makefile.am (XFAIL_TESTS): Remove cond3.test, it passes
+ now.
+
+2001-03-12 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&variable_conditions_permutations): Separate the
+ conditions.
+ * tests/cond3.test: Improve the sed expression.
+
+2001-03-09 Pavel Roskin <proski@gnu.org>
+
+ * Makefile.am (maintainer-check): Scan all *.am files and tests
+ for invocations of `rm' without `-f'.
+ * tests/mclean.test: Adjusted to prevent triggering the above
+ test.
+
+2001-03-09 Tom Tromey <tromey@redhat.com>
+
+ * automake.in (scan_one_autoconf_file): Fixed comment to avoid
+ maintainer-check failure.
+
+2001-03-09 Akim Demaille <akim@epita.fr>
+
+ * tests/cond3.test: Strengthen.
+
+2001-03-09 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&conditional_string): Produce a unique string
+ characterizing a condition stack.
+ (&conditional_same): Remove, comparing two strings is now enough.
+ (&variable_defined): Adjust.
+ (&read_am_file): Use conditional_string.
+
+2001-03-08 Akim Demaille <akim@epita.fr>
+
+ * automake.in: Use -w.
+ Normalize all use of `$lang . '-foo'' into `"$lang-foo"'.
+ (&parse_arguments): Support --Werror and --Wno-error as a
+ temporary hack until --warning/-W is properly implemented.
+ (&handle_single_transform_list): Prototype.
+ Be sure to define $directory.
+ Use `exists' instead of testing the value of a maybe undefined
+ hash value.
+ (&add_depend2, &handle_configure, &handle_footer, &file_contents)
+ (&handle_factored_dependencies): Use defined values.
+ (&scan_one_autoconf_file): Save $_.
+ * tests/lex2.test, tests/sinclude.test, tests/suffix3.test:
+ Run automake with --Wno-error.
+
+2001-03-07 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&handle_all): Use an array instead of a scalar for
+ local_headers.
+ Get rid of all-redirect: let `all' be that target.
+
+2001-03-07 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&handle_merge_targets): Ventilate its non `all'
+ related content into...
+ (&generate_makefile): here.
+ (&handle_merge_targets): Rename as...
+ (&handle_all): this.
+ Remove a useless `if': `@all' is obviously not empty, since it
+ contains at least the `basename ($makefile)' which has just been
+ unshifted.
+
+2001-03-07 Akim Demaille <akim@epita.fr>
+
+ * automake.in, aclocal.in: Backquote is inert in double quotes.
+
+2001-03-06 Akim Demaille <akim@epita.fr>
+
+ * Makefile.am (maintainer-check): Simplify `grep -v ... | grep .'
+ into `grep -v ...'.
+
+2001-03-06 Pavel Roskin <proski@gnu.org>
+
+ * java.am: Use `rm -f' instead of `rm'.
+
+2001-03-06 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&push_dist_common): Simplify.
+
+2001-03-06 Jens Krüger <jens_krueger@physik.tu-muenchen.de>
+
+ * ltlib.am: Replaced spaces with tab.
+
+2001-03-06 Pavel Roskin <proski@gnu.org>
+
+ * tests/Makefile.am (XFAIL_TESTS): noinstdir.test removed, it's
+ fixed now.
+
+2001-03-05 Pavel Roskin <proski@gnu.org>
+
+ * header.am, scripts.am: Use ?INSTALL? in the install and
+ uninstall rules.
+
+2001-03-05 Pavel Roskin <proski@gnu.org>
+
+ * tests/copy.test: Never use `rm' without `-f' - it may ask
+ questions, notably for read-only files during `make distcheck'.
+ * tests/insh.test: Likewise.
+ * tests/installsh.test: Likewise.
+ * tests/symlink.test: Likewise.
+ * tests/symlink2.test: Likewise.
+ * tests/symlink3.test: Likewise.
+
+2001-03-05 Pavel Roskin <proski@gnu.org>
+
+ * noinstdir.test: New test.
+ * tests/Makefile.am (TESTS): Add noinstdir.test.
+ (XFAIL_TESTS): Likewise.
+
+2001-03-05 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&handle_options): Change the RE so that the third
+ part of the versions always exist.
+ (&file_contents): Don't pass uninitialized values to &transform.
+
+2001-03-05 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&file_contents): Require a hash as second argument.
+ Adjust callers.
+
+2001-03-05 Akim Demaille <akim@epita.fr>
+
+ Always use hashes with &file_contents.
+
+ * automake.in (&handle_texinfo): texibuild.am does not need
+ TEXINFODIR.
+ texinfos.am wants only TEXICLEANS.
+ (&handle_dist, &add_depend2, &handle_clean): Replace $xform with
+ %transform.
+ * texinfos.am: Adjust.
+
+2001-03-05 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&handle_programs, &handle_libraries, &handle_tags)
+ (&handle_ltlibraries, &handle_emacs_lisp, &handle_python): Adjust.
+ (&am_install_var): Forget about `-clean'.
+ Transform ?INSTALL?.
+ Always output the *.am file.
+ * data-clean.am, java-clean.am, libs-clean.am, lisp-clean.am,
+ * ltlib-clean.am, progs-clean.am, python-clean.am, tags-clean.am:
+ Remove, merged into the corresponding *.am file.
+ * data.am, libs.am, ltlib.am, progs.am, python.am: Equip with
+ ?INSTALL?.
+
+2001-03-05 Pavel Roskin <proski@gnu.org>
+
+ * Makefile.am (amfiles): Add configure.am. Sort alphabetically.
+
+2001-03-05 Akim Demaille <akim@epita.fr>
+
+ If OBJEXT and EXEEXT are not set, provide a default value, and use
+ them unconditionally.
+
+ * automake.in (&generate_makefile): Provide default values for
+ EXEEXT and OBJEXT.
+ (&get_object_extension, &finish_languages)
+ (&handle_single_transform_list, &handle_programs, &add_depend2)
+ (&check_cygnus, &lang_c_finish, am_install_var): Don't bother with
+ them, they are defined.
+ * compile.am, depend2.am, program.am, progs.am: Likewise.
+ * remake-hdr.am: Fix a typo.
+ * tests/cxxo.test, tests/fo.test, tests/implicit.test,
+ * tests/interp.test, tests/subobj.test, tests/subobj2.test,
+ * tests/suffix2.test: Adjust.
+
+2001-03-05 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&file_contents): Map MAINTAINER-MODE to
+ @MAINTAINER_MODE_TRUE@ or nothing.
+ * configure.am, remake-hdr.am, remake.am, texi-vers.am: Adjust.
+ Suggested by Tom.
+
+2001-03-05 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&do_one_merge_target): Remove, was only called from...
+ (&handle_merge_targets): here for `all'.
+ Adjust.
+
+2001-03-05 Akim Demaille <akim@epita.fr>
+
+ Make the installation/uninstallation of Info pages follow the
+ regular am/recursive scheme.
+
+ * automake.in (%required_targets, %dependencies): Add
+ install-info.
+ (%dependencies): Add install-info, install-info-am, and
+ unstall-info.
+ (&handle_subdirs): Don't transform INSTALLINFO, which mapping was
+ reversed BTW. Does anybody use the option `no-installinfo'?
+ (&handle_merge_targets): Let the handling of info related targets
+ to...
+ (&handle_factored_dependencies): this.
+ * subdirs.am: Use ?INSTALL-INFO?.
+ * texinfos.am: Define the install-info, uninstall-info and
+ uninstall-info-am targets.
+
+2001-03-05 Akim Demaille <akim@epita.fr>
+
+ * automake.in (%required_targets, %dependencies): Add dvi, info,
+ dvi-am, info-am.
+ (@info, @dvi): Remove.
+ (&handle_texinfo, &handle_merge_targets): Adjust.
+ (&handle_factored_dependencies): Required targets are phony.
+ * texinfos.am: Build info, dvi, and the corresponding -am or
+ -recursive targets.
+
+2001-03-05 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&am_install_var): Remove $cygxform, unused.
+
+2001-03-05 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&file_contents): Transform LIBTOOL.
+ (&am_install_var): Remove $ltxform.
+ * ltlib.am, progs.am: Adjust.
+
+2001-03-05 Akim Demaille <akim@epita.fr>
+
+ * automake.in: Require AC_PROG_INSTALL in...
+ (&scan_autoconf_files): here.
+
+2001-03-05 Akim Demaille <akim@epita.fr>
+
+ * configure.am: New file.
+ * automake.in (&file_contents): Transform CONFIGURE-AC.
+ (&handle_texinfo, &handle_configure): Don't transform
+ CONFIGURE_AM.
+ (&handle_configure): Use `configure.am'.
+ * remake-hdr.am, remake.am, texi-vers.am: Adjust to
+ MAINTAINER-MODE and CONFIGURE-AC.
+
+2001-03-05 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&pretty_print_internal): Don't output useless
+ spaces.
+ (define_pretty_variable): Don't issue the space after the `=' sign
+ to avoid trailing spaces in Makefile.ins.
+
+2001-03-05 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&generate_makefile): Invoke &initialize_per_input
+ *before* setting $am_file_name and $in_file_name.
+
+2001-03-05 Akim Demaille <akim@epita.fr>
+
+ * automake.in ($in_file_name, $am_file_name, $relative_dirs):
+ Globals, initialized...
+ (&initialize_per_input): here.
+
+2001-03-05 Akim Demaille <akim@epita.fr>
+
+ * automake.in ($am_relative_dir): Global.
+ (&initialize_per_input): Init it.
+ (%make_list, @make_input_list): My them from
+ (&scan_autoconf_files): here.
+ (&require_file_internal): Mying changes.
+
+2001-03-05 Akim Demaille <akim@epita.fr>
+
+ * automake.in (%am_vars, @var_list, %def_type): Globals.
+ (&initialize_per_input): Initialize them.
+ (&read_main_am_file): Don't local them.
+ (&get_object_extension): $objext is private.
+ (&handle_single_transform_list): $lang is.
+ (&handle_ltlibraries): $libname_rx is.
+ (&scan_autoconf_config_files): How about actually paying attention
+ to your arguments, instead of working on $_? (this is no Perl
+ variable, it's a Perl variable followed by a question mark).
+ (&file_contents): $contents and $separator are private.
+ (&am_install_var): Declare @condvals, not $condvals.
+ (%make_dirs): My.
+
+2001-03-05 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&initialize_per_input): Move to the top.
+ Precede with the `my' list of its variables.
+
+2001-03-05 Akim Demaille <akim@epita.fr>
+
+ * automake.in ($am_file): Use vars.
+ ($am_file_name, $in_file_name): Private to &generate_makefile.
+
+2001-03-05 Akim Demaille <akim@epita.fr>
+
+ * automake.in: Preparation for `use strict': Move the
+ initialization of the constants to the top, from...
+ (&initialize_global_constants): here.
+
+2001-03-05 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&handle_single_transform_list, &add_depend2): Let
+ $lang_specific_files{$lang} be a list instead of a string.
+
+2001-03-05 Akim Demaille <akim@epita.fr>
+
+ Let's make it run ten times faster...
+
+ * automake.in (&transform): Be sure to remove the `\n' with ?FOO?
+ transformations.
+ (&file_contents): Let `$command' remove the Automake commands, and
+ normalize the series of `\n'.
+ Slurp the file and apply $command in a single step.
+ No longer apply the `@MAINTAINER_MODE_TRUE@' transformation which
+ is already normalized to be handled by &transform.
+
+2001-03-05 Tom Tromey <tromey@redhat.com>
+
+ * automake.in (register_language): Add entry for `-pure'.
+ Added `pure=yes' entries for cxx, objc, f77, ppf77, ratfor, java.
+ (finish_languages): Use `-pure' field of language map.
+
+2001-03-03 Tom Tromey <tromey@redhat.com>
+
+ * tests/yaccvpath.test: No need to remove dummy files.
+ * tests/subobj3.test: No need to remove dummy files.
+ * tests/pr9.test: No need to remove dummy files.
+ * tests/pr87.test: No need to remove dummy files.
+ * tests/pr19.test: No need to remove dummy files.
+ * tests/install2.test: No need to remove dummy files.
+ * tests/defs: Actually copy in install-sh, mkinstalldirs, missing,
+ and depcomp.
+
+2001-02-27 Pavel Roskin <proski@gnu.org>
+
+ * tests/yaccvpath.test: Add a delay to make parse.c really out
+ of date. Detect the problem earlier, after `make distdir'. Drop
+ dependency on flex. Always use the `-y' flag for bison. Comment
+ changes.
+ * tests/Makefile.am: Add yaccvpath.test to XFAIL_TESTS.
+
+2001-03-02 Jens Krüger <jens_krueger@physik.tu-muenchen.de>
+
+ * depend2.am (?!GENERIC??LIBTOOL?%LTOBJ%): Add `%' to fix typo.
+
+2001-02-28 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&add_depend2): Transform `GENERIC'.
+ Get rid of the ad hoc transformation of `@EXT@.o:' which in
+ addition was broken by the `@ -> %' patch.
+ * depend2.am: Adjust to use ?GENERIC?.
+
+2001-02-28 Akim Demaille <akim@epita.fr>
+
+ * Makefile.am (maintainer-check): `undef $/' is OK.
+
+2001-02-28 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&handle_configure): Fortunately, $top_reldir,
+ the definition of which was highly suspicious, was unused.
+
+2001-02-27 Akim Demaille <akim@epita.fr>
+
+ * automake.in (%exec_dir_p): Move to the top so that it is visible
+ to all routines.
+
+2001-02-27 Pavel Roskin <proski@gnu.org>
+
+ * tests/yaccvpath.test: Prevent automake from looking into ..
+ and ../.. by using AC_CONFIG_AUX_DIR in configure.in.
+
+2001-02-27 Akim Demaille <akim@epita.fr>
+
+ * automake.in (%exec_dir_p): Pulled out from...
+ (&am_primary_prefixes): here.
+
+2001-02-27 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&usage): Display $0, not $me.
+
+2001-02-27 Akim Demaille <akim@epita.fr>
+
+ * mans.am: s/INSTALL_MAN/INSTALL-MAN/.
+ * automake.in (&handle_clean): Don't escape what's given to
+ &transform.
+
+2001-02-27 Akim Demaille <akim@epita.fr>
+
+ Distinguish automake substitutions from config.status
+ substitutions.
+
+ * automake.in (&add_depend2): Transform AMDEP.
+ (&handle_clean): Transform MCFILES and MFILES.
+ (&file_contents): Transform MAINTAINER_MODE.
+ (&transform, &am_install_var): Use `%', not `@'.
+ Adjust all the *.am files.
+ * clean.am: Use ?MFILES? instead of ad hoc MAINTAINERCLEAN.
+ * depend2.am: Display the double dependency on both ?AMDEP? and
+ @AMDEP@.
+
+2001-02-27 Tom Tromey <tromey@redhat.com>
+
+ * distdir.am (distcheck): Fixed new code.
+
+ * tests/yaccvpath.test: Fail gracefully if bison/flex not found.
+ Only configure once.
+
+ * distdir.am (distcheck): Print error message if distclean failed
+ to fully clean.
+
+2001-02-27 Pavel Roskin <proski@gnu.org>
+
+ * tests/Makefile.am (TESTS): s/yaccpvath/yaccvpath/.
+
+2001-02-25 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/Makefile.am (TESTS): Added yaccvpath.test.
+ * tests/yaccvpath.test: New file.
+
+2001-02-26 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&am_install_var): Recognize whether predefined
+ directories are `data' or `exec'.
+ * libs.am, ltlib.am, progs.am, python.am, scripts.am: Install
+ ?EXEC?.
+ * tests/instdata2.test: Update.
+
+2001-02-26 Akim Demaille <akim@epita.fr>
+
+ * texinfos.am: No ?EXEC? hook as currently installing TEXINFOS is
+ necessarily in infodir.
+
+2001-02-26 Akim Demaille <akim@epita.fr>
+
+ * automake.in ($am_file): Be `local', as my'd variables used in
+ `foreach' loops are always private to the loop.
+
+2001-02-26 Pavel Roskin <proski@gnu.org>
+
+ * Makefile.am: Add install.am.
+
+2001-02-26 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&target_cmp, &dist_cmp): Do not prototype comparing
+ routines, otherwise the elements to compare are passed in @_
+ instead of $a and $b.
+
+2001-02-26 Akim Demaille <akim@epita.fr>
+
+ * automake.in (%required_targets): `installcheck-am' is needed.
+
+2001-02-26 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&transform_cond): Merge into...
+ (&transform): this.
+ Adjust all uses.
+
+2001-02-26 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&handle_dist): Use &transform instead of dedicated
+ magic for DISTDIRS.
+ But be sure to always do it.
+ * distdir.am: Adjust.
+
+2001-02-26 Akim Demaille <akim@epita.fr>
+
+ * automake.in: Use File::Basename.
+ (&dirname, &basename): Remove.
+
+2001-02-26 Akim Demaille <akim@epita.fr>
+
+ * automake.in ($me): New.
+ Use it.
+ (&usage): Display your full name.
+
+2001-02-26 Akim Demaille <akim@epita.fr>
+
+ * automake.texi (Invoking Automake): Remove dead options.
+
+2001-02-26 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&scan_texinfo_file): Also compute the list of files
+ to clean.
+ Handle local errors.
+ (&handle_texinfo): Use it.
+
+2001-02-26 Akim Demaille <akim@epita.fr>
+
+ * automake.in: Don't pass arguments to...
+ (&parse_arguments): Work on @ARGV.
+ Use Getopt.
+ Add support for `-f'.
+ (&version): New.
+ (&usage): Update.
+
+2001-02-26 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&handle_merge_targets, &do_one_merge_target): Don't
+ handle installcheck and installcheck-am.
+ * install.am: Do it.
+
+2001-02-26 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&handle_merge_targets, &do_one_merge_target): Don't
+ handle install and install-am.
+ * install.am: Do it.
+
+2001-02-26 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&handle_merge_targets, &do_one_merge_target): Don't
+ work on targets handled by %dependencies.
+ (&handle_factored_dependencies): Do it.
+ * install.am: Install install-exec, install-data and uninstall's
+ suites.
+
+2001-02-26 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&handle_merge_targets): Move `install-strip' from
+ here...
+ * install.am: to here.
+
+2001-02-26 Akim Demaille <akim@epita.fr>
+
+ * automake.in (@installdirs): Remove.
+ (&file_contents): Be able to grow Automake macros with `+='.
+ (&handle_texinfo, &handle_man_pages, &am_install_var): Let your
+ files define _am_installdirs.
+ (&handle_installdirs): Remove the code, just output `install.am'.
+ * install.am: New.
+ * data.am, header.am, libs.am, lisp.am, ltlib.am, mans.am, progs.am,
+ * python.am, scripts.am, texinfos.am: Extend $(_am_installdirs).
+
+2001-02-26 Akim Demaille <akim@epita.fr>
+
+ * tests/instdata2.test (libexec_DATA): Exercise more
+ possibilities.
+
+2001-02-25 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * header-vars.am (INSTALL_STRIP_FLAG): Remove (obsolete).
+
+2001-02-25 Tom Tromey <tromey@redhat.com>
+
+ * tests/instdata2.test: Added `sbin_DATA' check.
+
+ * tests/Makefile.am (TESTS): Added subdircond.test.
+ * tests/subdircond.test: New file.
+ * automake.in (handle_gettext): Don't fail if SUBDIRS
+ conditionally defined.
+
+ * automake.in: Use IO::File.
+ (generate_makefile): Use IO::File.
+ (scan_texinfo_file): Likewise.
+ (handle_aclocal_m4): Likewise.
+ (scan_autoconf_traces): Likewise.
+ (scan_one_autoconf_file): Likewise.
+ (read_am_file): Likewise.
+ (file_contents): Likewise.
+ (create): Likewise.
+
+2001-02-25 Akim Demaille <akim@epita.fr>
+
+ * automake.in (handle_texinfo): Remove code handled by texinfos.am.
+
+2001-02-25 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&transform): Also call &transform_cond on your
+ arguments.
+ (&handle_dist): Adjust.
+ (&handle_factored_dependencies): Uniq dependencies.
+
+2001-02-25 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&handle_gettext): Simplify redundant `if'.
+ Used &variable_value, don't read %contents directly.
+
+2001-02-25 Akim Demaille <akim@epita.fr>
+
+ * automake.in ($install_recursive): Remove, replaced with calls to
+ `&variable_defined ('SUBDIRS')'.
+ (&handle_dist, &handle_clean): Don't transform_cond SUBDIRS since...
+ (&file_contents): now does.
+
+2001-02-25 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&handle_man_pages): $found is dead.
+
+2001-02-25 Akim Demaille <akim@epita.fr>
+
+ Internally just store the conditionals as space separated lists of
+ CONDITIONS (instead of @CONDITIONS@).
+
+ * automake.in (&conditional_true_when, &variable_conditions_sub):
+ Split conditions at spaces.
+ (&handle_dependencies, &variable_conditions_permutations): Don't
+ put @ around conditions.
+ (&variable_conditions_cmp): There are no @ to strip.
+ (&make_condition): New.
+ (&define_pretty_variable, &read_main_am_file, &read_am_file): Use
+ it.
+ (&read_main_am_file, &read_am_file): Stop playing with @ by hand.
+ Join @conditional_stack with spaces.
+ (&read_main_am_file): Adjust the output of variables.
+ Output `TRUE = true' under the condition `TEST' as `@TEST@TRUE =
+ true' and no longer `@TEST@TRUE = @TEST@true'.
+ (&variable_conditions_cmp): Rename as...
+ (&by_condition): this.
+ Sort in a human pleasant order.
+ Use it everywhere a human can see conditions.
+ (&variable_conditions_reduce): Don't sort conditions, that's
+ pointless.
+ * tests/cond.test, ctarget1.test, pluseq3.test: Strengthen.
+
+2001-02-25 Akim Demaille <akim@epita.fr>
+
+ * automake.in: `my' the globals.
+
+2001-02-25 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&initialize_per_input): %targets_conditionals is
+ new.
+ (&read_am_file): When slurping a rule, set the target related
+ variable, and no variable related variable.
+ (&file_contents): Likewise.
+ * tests/vartar.test, tests/ctarget1.test: New.
+
+2001-02-25 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&variable_defined, &variable_value_as_list_worker):
+ If $VAR is effectively a variable, don't die if it's also a
+ target.
+ Plus some formatting changes.
+
+2001-02-25 Akim Demaille <akim@epita.fr>
+
+ * automake.in: Mying changes.
+ * Makefile.am (maintainer-check): Check the stability of the
+ number of uses of `local'.
+
+2001-02-25 Akim Demaille <akim@epita.fr>
+
+ * automake.in: Mying changes.
+
+2001-02-25 Akim Demaille <akim@epita.fr>
+
+ * automake.in: Mying changes.
+
+2001-02-25 Akim Demaille <akim@epita.fr>
+
+ * automake.in: Mying changes.
+ (&handle_tags): Fix a bug uncovered by the previous mying changes:
+ transform CONFIG into $config, not $xform.
+
+2001-02-25 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&handle_texinfo, &handle_man_pages, &am_install_var):
+ Don't deal with install-data-am, install-exec-am and unstall-am.
+ (&initialize_per_input): Add them to %dependencies.
+ Remove %exec_dir_p since the *.am files are now in charge of it.
+ Remove @uninstall, @install_data, @install_exec.
+ (&handle_merge_targets): Adjust to these removals.
+ (&file_contents): Also &transform_cond for --no-installman and
+ --no-installinfo.
+ (&do_one_merge_target): Add some magic to install hooks on
+ %dependencies' targets.
+ (%required_targets): New.
+ (&handle_factored_dependencies): Output required targets.
+ * data.am, header.am, java.am, libs.am, lisp.am, ltlib.am,
+ * mans-vars.am, mans.am, progs.am, python.am, scripts.am,
+ * texinfos.am: Declare your dependencies on install-data-am,
+ install-exec-am and uninstall-am.
+ * tests/instdata2.test (incldata_HEADERS): New test.
+
+2001-02-24 Tom Tromey <tromey@redhat.com>
+
+ * Makefile.am (amfiles): Added texibuild.am.
+ * texibuild.am: New file.
+ * tests/Makefile.am (TESTS): Added texinfo9.test.
+ * tests/texinfo9.test: New file.
+ * automake.in (handle_texinfo): Keep track of suffixes used. Give
+ error if suffix unrecognized. Removed extraneous newline.
+
+2001-02-23 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&am_install_var): Don't hook on the clean targets
+ and .PHONY.
+ * data-clean.am, java-clean.am, libs-clean.am, lisp-clean.am,
+ * ltlib-clean.am, progs-clean.am, python-clean.am, tags-clean.am:
+ Do it.
+
+2001-02-23 Akim Demaille <akim@epita.fr>
+
+ * automake.in: Promote local `my' over `local'.
+
+2001-02-23 Akim Demaille <akim@epita.fr>
+
+ * automake.in: Formatting and mying changes.
+
+2001-02-23 Akim Demaille <akim@epita.fr>
+
+ * automake.in: Formatting and mying changes.
+
+2001-02-23 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&handle_man_pages): Let install-man and
+ uninstall-man be handled by the dependency tracker.
+ (&initialize_per_input): Let %dependencies track them.
+ * mans.am: Add the needed hooks with the proper dependencies.
+
+2001-02-22 Pavel Roskin <proski@gnu.org>
+
+ * tests/target-cflags.test: Don't use subshell to configure in
+ subdirectory. Typo fix - run `./foo', not `/foo'.
+
+2001-02-22 Akim Demaille <akim@epita.fr>
+
+ * automake.in: Formatting and mying changes.
+
+2001-02-21 Tom Tromey <tromey@redhat.com>
+
+ * automake.in (handle_dist): Introduce new variable to avoid extra
+ keys in %dist_dirs. Fixes distdir.test.
+
+ * automake.in (handle_texinfo): Only remove suffixes we can
+ handle.
+
+ * tests/distdir.test: Check to make sure directory isn't made in
+ build directory.
+
+ * automake.in (handle_dist): Do nothing in Cygnus mode.
+
+2001-02-21 Pavel Roskin <proski@gnu.org>
+
+ * header-vars.am: Remove tabs before variable definitions.
+
+2001-02-21 Akim Demaille <akim@epita.fr>
+
+ * tests/distdir.test (EXTRA_DIST): Use a finer pattern to avoid
+ false diagnostics.
+
+2001-02-21 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&dist_cmp, &target_cmp): Be sure to return a
+ numeric value as required by Perl 5.6.
+
+2001-02-21 Akim Demaille <akim@epita.fr>
+
+ * dist-vars.am: Remove, merge into...
+ * distdir.am: this.
+ * automake.in (dirname, basename, backname): Move to the top of
+ the file so that prototypes are checked,
+ Use them without `&'.
+ (&handle_dist): Adjust.
+
+2001-02-21 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&check_ambiguous_conditional, &read_main_am_file):
+ Use a uniform naming scheme.
+ (&quote_cond_val, &unquote_cond_val): Delete, dead code.
+ (&read_am_file): Fix conditional definition of backslash continued
+ items.
+
+2001-02-21 Akim Demaille <akim@epita.fr>
+
+ Change the handling of conditionals: instead of using an ad-hoc
+ encoding to store a hash in a string, use hashes.
+
+ * automake.in (&conditional_dump): New.
+ (&check_ambiguous_conditional, &variable_defined)
+ (&variable_conditions_sub, &variable_value_as_list_worker)
+ (&define_variable, read_am_file, &read_main_am_file): Be sure to
+ handle `$conditional{$vars}' as a hash instead of a plain string.
+
+2001-02-21 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&conditional_true_when): Modernize, simplify.
+ Warning: `$comp' is now private (my), while it used to be
+ `inherited' from a `local' elsewhere in the code. AFAICT it was
+ wrong, but some dirty side effect might show up.
+ (&conditionals_true_when): New.
+ (&variable_conditions_sub, &variable_conditions_reduce): Use it.
+
+2001-02-21 Akim Demaille <akim@epita.fr>
+
+ * automake.in ($top_builddir): Remove, used in one place.
+ (&define_standard_variables): Adjust.
+ Move the definition of triplet variables into...
+ * header-vars.am: here.
+
+2001-02-21 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&initialize_global_constants): Don't define $USAGE.
+ (&usage): Handle the former content of $USAGE.
+ Don't pretend autoconf cares about Makefile.in.
+ Classify the options.
+ (&handle_tests): Formatting and mying changes.
+
+2001-02-21 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&handle_tests_dejagnu): Move the definition of a
+ default `site.exp' into...
+ * dejagnu.am (site.exp): here.
+ Use DOS compliant file names.
+
+2001-02-21 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&dist_cmp): New.
+ (&handle_dist): Use it.
+ Promote `my' over `local'.
+
+2001-02-21 Akim Demaille <akim@epita.fr>
+
+ * dist.am: Remove, merge into...
+ * distdir.am: here. Use the neat sed snippet for banners.
+ BTW, distcheck is phony.
+ * automake.in (&handle_dist_worker): Remove, merge into...
+ (&handle_dist): this.
+ (&file_contents): Strip leading new lines.
+ Be sure to end comments with new lines.
+
+2001-02-21 Akim Demaille <akim@epita.fr>
+
+ * distdir.am (GZIP_ENV): Define.
+ * automake.in (&handle_dist): Don't.
+ (&uniq): New.
+ (&handle_dist_worker, &am_install_var): Use it.
+
+2001-02-21 Akim Demaille <akim@epita.fr>
+
+ * distdir.am (distdir): Handle the DIST-TARGETS.
+ * automake.in (&handle_dist_worker): Don't.
+
+2001-02-21 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&file_contents): Transform the global options (such
+ as CYGNUS).
+ (&handle_texinfo, &handle_dist_worker, &handle_tests_dejagnu): Don't.
+
+2001-02-21 Akim Demaille <akim@epita.fr>
+
+ * distdir.am (distdir): Be sure to have permissive rights on its
+ contents.
+ (dist-all, dist-bzip2, dist-zip, dist-tarZ): New conditional
+ targets.
+ And BTW, all of these guys are phony.
+ * automake.in (&handle_dist_worker): As its name doesn't indicate,
+ output distributions.
+ (&handle_dist): As its name doesn't indicate, don't.
+ (&initialize_global_constants): Don't define variables which
+ content is now handled by distdir.am.
+ But register `dist-all' as a factored target.
+ (&handle_factored_dependencies): Don't output empty targets.
+
+2001-02-20 Tom Tromey <tromey@redhat.com>
+
+ * m4/init.m4 (AM_INIT_AUTOMAKE): Simplify m4_pattern_allow
+ invocation.
+
+2001-02-18 Tom Tromey <tromey@redhat.com>
+
+ * m4/strip.m4 (AM_PROG_INSTALL_STRIP): Don't call AM_PROG_STRIP.
+ Set INSTALL_STRIP_PROGRAM_ENV to `$(STRIP)', not `$STRIP'.
+ (AM_PROG_STRIP): Commented out.
+
+2001-02-17 Raja R Harinath <harinath@cs.umn.edu>
+
+ * depcomp (gcc3): Protect against the compiler deleting
+ the dependency output file.
+
+2001-02-17 Tom Tromey <tromey@redhat.com>
+
+ * automake.in (handle_merge_targets): Use double quotes around
+ setting of INSTALL_STRIP_PROGRAM.
+ * m4/strip.m4 (AM_PROG_INSTALL_STRIP): Set INSTALL_STRIP_PROGRAM
+ to absolute path at runtime.
+ (AM_PROG_STRIP): Don't explicitly test $STRIP.
+
+2001-01-28 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * m4/strip.m4: New file.
+ * m4/Makefile.am (m4data_DATA): Add strip.m4.
+ * m4/init.m4: Call AM_PROG_INSTALL_STRIP.
+ * m4/missing.m4 (AM_AUX_DIR_EXPAND): New function.
+ * automake.in (handle_merge_targets): In the install-strip rule,
+ set INSTALL_PROGRAM to INSTALL_STRIP_PROGRAM, and INSTALL_PROGRAM_ENV
+ to INSTALL_STRIP_PROGRAM_ENV; don't use INSTALL_STRIP_FLAG.
+ * progs.am (install-@DIR@PROGRAMS): Adapt to use INSTALL_PROGRAM_ENV,
+ don't use INSTALL_STRIP_FLAG any longer.
+
+2001-02-16 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (scan_one_configure_file): Unquote AC_CONFIG_AUX_DIR's
+ argument.
+
+2001-02-16 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (unquote_m4_arg): New function.
+ (scan_one_configure_file): Call unquote_m4_arg on
+ AM_CONFIG_HEADER argument, so that AM_CONFIG_HEADER([foobar.h])
+ works.
+
+2001-02-15 Tom Tromey <tromey@redhat.com>
+
+ * config.guess, config.sub: New versions from FSF.
+
+ * Makefile.am (WGET): New macro.
+ (FETCHFILES): New macro.
+ (fetch): New target.
+
+ * tests/subobj3.test: Exit with status 77 if gcc not found.
+ * tests/pr9.test: Exit with status 77 if gzip not found.
+ * tests/pr87.test: Exit with status 77 if gcc not found.
+ * tests/pr19.test: Exit with status 77 if gzip or gcc not found.
+ * tests/install2.test: Exit with status 77 if gzip not found.
+ * tests/exsource.test: Exit with status 77 if GNU make not found.
+ * tests/ansi3.test: Exit with status 77 if gcc not found.
+
+ * tests/target-cflags.test: Require GNU make. Exit with status 77
+ if gcc or make not found. Fixes PR automake/121.
+
+ * configure.in: Require Perl 5.005.
+ * automake.in: Require 5.005.
+
+ * automake.texi (Top): Conditionalize on `nottex', not `info'.
+ Fixes PR automake/122.
+
+2001-02-14 Tom Tromey <tromey@redhat.com>
+
+ * automake.in (add_depend2): Only emit a given object rule once.
+ Fixes specflags6.test.
+
+2001-02-14 Richard Boulton <richard@tartarus.org>
+
+ * tests/specflags6.test: New file.
+
+2001-02-14 Tom Tromey <tromey@redhat.com>
+
+ * automake.texi (A Shared Library): Mention -module.
+
+2001-02-13 Tom Tromey <tromey@redhat.com>
+
+ * automake.in (do_one_merge_target): Always register $name and
+ $name-am as phony.
+
+ * automake.in (do_one_merge_target): Register `all' as phony
+ target.
+
+ * configure.in: Updated to 1.4e for cvs.
+
+2001-02-12 Tom Tromey <tromey@redhat.com>
+
+ * configure.in: Updated to 1.4d and released.
+
+ * m4/init.m4 (AM_INIT_AUTOMAKE): Explicitly allow various AM_*
+ names through autoconf.
+
+ Fix for subdirbuiltsources.test:
+ * automake.in (initialize_per_input): [all_target] Initialize to
+ empty string.
+ (handle_merge_targets): Use all-redirect target to handle built
+ sources.
+ (do_one_merge_target): Don't generate all-redirect rule.
+
+2001-02-11 Peter Muir <iyhi@yahoo.com>
+
+ * tests/subdirbuiltsources.test: New file.
+ * tests/Makefile.am (TESTS): Added new file.
+
+2001-02-10 Tom Tromey <tromey@redhat.com>
+
+ * tests/condlib.test: New file.
+ * tests/Makefile.am (TESTS): Added new file.
+
+2001-02-10 Lars J. Aas <larsa@sim.no>
+
+ * automake.in ($MACRO_PATTERN): Include '@' in name regex.
+ (&canonicalize): New. Includes '@' in canonical range.
+ (&check_canonical_spelling, &handle_programs, &handle_libraries,
+ &handle_ltlibraries, &handle_texinfo): Use &canonicalize.
+
+2001-02-10 Raja R Harinath <harinath@cs.umn.edu>
+
+ * automake.in (handle_configure): Revert part of
+ '2001-02-04 Kevin Ryde <user42@zip.com.au>'. Don't
+ set CONFIG_COMMANDS explicitly.
+
+2001-02-09 Raja R Harinath <harinath@cs.umn.edu>
+
+ * depcomp (gcc3): Propagate exit code.
+
+2001-02-09 Lars J. Aas <larsa@sim.no>
+
+ * header.am (install-@DIR@HEADERS): s,?!NOBASE?,?!BASE?, (typo)
+
+2001-02-09 Tom Tromey <tromey@redhat.com>
+
+ Clean up maintainer-check warnings:
+ * Makefile.am (maintainer-check): Ignore comment lines in CDPATH
+ check.
+ * automake.in (handle_dist_worker): Removed redundant `my $xform'.
+
+2001-02-09 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&file_contents): Remove a dead branch.
+
+2001-02-09 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&transform): Use `my', not `local'.
+ (&transform_cond): New.
+ (&get_object_extension, &handle_texinfo, &handle_tags)
+ (&handle_dist_worker, &handle_dist, &add_depend2, &handle_clean)
+ (&handle_tests_dejagnu): Use it.
+ * texinfos.am, lisp.am, header.am, dist.am, distdir.am, depend2.am
+ * dejagnu.am, data.am, clean.am: Adjust to the new syntax.
+
+2001-02-09 Akim Demaille <akim@epita.fr>
+
+ * automake.in: Various formatting changes, and modernization of
+ Perl constructs.
+ (&backname): New.
+ (&handle_configure, define_standard_variables): Use it.
+
+2001-02-08 Tom Tromey <tromey@redhat.com>
+
+ * automake.in (file_contents): Only add $actions if any are
+ found. Fixes new failure in pr87.test.
+
+2001-02-08 Pavel Roskin <proski@gnu.org>
+
+ * tests/pr87.test: Check foo/Makfile.in after it is created.
+
+2001-02-08 Tom Tromey <tromey@redhat.com>
+
+ * tests/pr87.test: Added check for blank line after `.c.o' rule.
+ Report from Lars J. Aas.
+
+2001-02-07 Lars J. Aas <larsa@sim.no>
+
+ * lisp.am (install-@DIR@LISP): Removed extra space.
+ * header.am (install-@DIR@HEADERS): Removed extra space.
+ * data.am (install-@DIR@DATA): Removed extra space.
+
+2001-02-07 Tom Tromey <tromey@redhat.com>
+
+ * m4/init.m4 (AM_INIT_AUTOMAKE): Use \", not ".
+
+ * automake.in (handle_dependencies): Use _am_include, not
+ AMINCLUDE.
+ * tests/exsource.test: Use _am_include, not AMINCLUDE.
+ * m4/make.m4 (AM_MAKE_INCLUDE): Use _am_include, not AMINCLUDE.
+
+ * tests/Makefile.am (XFAIL_TESTS): Removed distcommon.test.
+
+ * tests/Makefile.am (EXTRA_DIST): Added ChangeLog-old.
+
+ * automake.in (handle_configure): Handle case where output file is
+ in subdir with no Makefile of its own. Fixes remake3.test,
+ distcommon.test.
+
+2001-02-06 Pavel Roskin <proski@gnu.org>
+
+ * automake.in (handle_dependencies): Rename AM_INCLUDE to
+ AMINCLUDE.
+ * m4/make.m4 (AM_MAKE_INCLUDE): Likewise.
+ * tests/exsource.test: Likewise.
+
+2001-02-06 Derek Price <derek.price@openavenue.com>
+
+ * automake.in (handle_configure): Fix syntax error.
+
+2001-02-06 Akim Demaille <akim@epita.fr>
+
+ * subdirs.am: This file is the exception: clean recursive targets
+ are called by the clean targets, not the clean-am targets.
+ Otherwise we have a circular dependency: clean -> clean-am ->
+ clean-recursive -> clean.
+ * automake.in (handle_clean): Bind `-local' targets to `-am'
+ targets, not top targets.
+ Don't declare -recursive dependencies of the clean targets:
+ `subdirs.am' did it. Less hard coded knowledge, transferred
+ into...
+ * clean.am: here.
+
+2001-02-06 Akim Demaille <akim@epita.fr>
+
+ Monstro unsplitable patch.
+
+ The aim is to remove hard coded knowledge about clean targets from
+ automake.in, leaving them in the *.am files.
+ In addition to the mechanic needed to factor some dependencies, it
+ appears some rules (most notably distclean and maintainer-clean)
+ need factored actions. So first, be ready to catch factored
+ rules.
+
+ * automake.in (&file_contents): For the time being, use an extended
+ $RULE_PATTERN which is able to match any kind of rules, with or
+ without dependency, with or without actions.
+ Handle all the rules uniformly, storing in %actions the factored
+ actions.
+ (&flatten, &target_cmp): New.
+ (&handle_factored_dependencies): Output the %actions.
+ No longer special case `clean'.
+ Output the rules in alphabetical order, but keeping `.PHONY' last.
+
+ Now we must not use &push_phony_cleaners, which is doing all sort
+ of magic to push a bit of everything in all the clean targets.
+ The biggest problem being that, making a Cartesian product, it
+ requires many useless targets. The `*.am' file know better.
+ But first, register the new factored rules.
+
+ * automake.in (&initialize_per_input): Include clean, mostlyclean,
+ maintainer-clean, distclean and their `*-am' counterpart in
+ %dependencies.
+ Initialize %actions.
+ (get_object_extension, handle_texinfo, handle_tags, handle_multilib)
+ handle_dependencies, handle_subdirs, handle_configure, handle_clean)
+ (handle_emacs_lisp, handle_python): Don't play with
+ &push_phony_cleaners nor &depend and `clean'.
+ * texinfos.am, texi-vers.am, tags-clean.am:
+ * subdirs.am,python-clean.am, multilib.am, lisp-clean.am:
+ * libtool.am, kr-extra.am, depend.am, compile.am, clean.am:
+ * clean-kr.am, clean-hdr.am: Do it.
+ Whenever a target is empty, just remove it, it will no longer be
+ called.
+
+ There is still some magic about clean to hard code. But really,
+ that's the end of &do_one_clean_target.
+
+ * automake.in (&do_one_clean_target): Kaboom out.
+ (&handle_clean): Rewrite the magic code.
+ (&am_install_var): No longer use &push_phony_cleaners, nor depend
+ on `clean'.
+ (&push_phony_cleaners): Kaboom too.
+
+2001-02-06 Akim Demaille <akim@epita.fr>
+
+ * automake.in (do_one_clean_target): Don't hard code knowledge
+ about libtool, and maintainer-clean.
+ * clean.am, libtool.am: Handle these.
+
+2001-02-05 Akim Demaille <akim@epita.fr>
+
+ * automake.in (handle_texinfo): No longer hard code the clean
+ targets.
+ (texinfos.am): Include them.
+
+2001-02-05 Akim Demaille <akim@epita.fr>
+
+ * Makefile.am (perl4-check): Remove, we now require Perl 5.
+ (maintainer-check): Don't be silent when you find a problem, and
+ actually, even specify the locations.
+ Also check that @_ is assigned to arrays.
+
+2001-02-05 Akim Demaille <akim@epita.fr>
+
+ * m4/regex.m4: Use AC_LIBSOURCES.
+ * automake.in (scan_autoconf_traces): Trace AC_LIBSOURCE, not
+ _AC_LIBOBJ_DECL.
+
+2001-02-04 Tom Tromey <tromey@redhat.com>
+
+ * m4/Makefile.am (m4data_DATA): Added make.m4.
+ * automake.in (handle_dependencies): Use @AM_INCLUDE@ to include
+ dependency files.
+ * m4/depend.m4 (AM_DEPNDENCIES): Require AM_MAKE_INCLUDE.
+ Copy depcomp to subdir.
+ * m4/make.m4: New file.
+
+2001-02-04 Pavel Roskin <proski@gnu.org>
+
+ * automake.in (handle_dist_worker): Remove a line that is now
+ in distdir.am.
+
+2001-02-04 Kevin Ryde <user42@zip.com.au>
+
+ * automake.in (handle_configure): Call config.status with empty
+ CONFIG_LINKS and CONFIG_COMMANDS when regenerating a file.
+
+2001-02-04 Tom Tromey <tromey@redhat.com>
+
+ * depcomp (ddashmd): Removed case.
+ (sgi): Handle failure exit correctly
+ (aix): Likewise. Also, add dummy `.h' targets.
+
+2001-02-04 Akim Demaille <akim@epita.fr>
+
+ * distdir.am (distdir): New file, extracted from...
+ * automake.in (handle_dist_worker): here.
+ Adjust.
+
+2001-02-04 Akim Demaille <akim@epita.fr>
+
+ * automake.in (@clean): Remove, replaced by...
+ ($dependencies{'clean'}): this.
+ Use `&depend' instead of push'ing into @clean.
+ (handle_factored_dependencies): For the time being, skip 'clean'.
+ (do_one_clean_target): Don't ask for argument 1 and 4 as they are
+ always `clean', and `@clean'.
+
+2001-02-04 Akim Demaille <akim@epita.fr>
+
+ * automake.in (%dependencies): Don't be initialize globally for
+ all the files, but in...
+ (&initialize_per_input): here.
+ (&depend): New.
+ (@phony): Replace all occurrences with the corresponding &depend
+ invocation.
+
+2001-02-03 Tom Tromey <tromey@redhat.com>
+
+ * header.am (install-@DIR@HEADERS): Use INSTALL_HEADER.
+ * header-vars.am (INSTALL_HEADER): New macro.
+
+ * automake.texi (Rebuilding): New node.
+
+-----
+
+Copyright (C) 2001-2017 Free Software Foundation, Inc.
+
+Copying and distribution of this file, with or without modification, are
+permitted provided the copyright notice and this notice are preserved.
diff --git a/old/ChangeLog.02 b/old/ChangeLog.02
new file mode 100644
index 000000000..bb3e9748a
--- /dev/null
+++ b/old/ChangeLog.02
@@ -0,0 +1,3225 @@
+2002-12-31 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/Automake/ChannelDefs.pm: New file.
+ * lib/Automake/Makefile.am (dist_perllib_DATA): Add ChannelDefs.pm.
+ * automake.in: Move all "register_channel" calls to ChannelDefs.pm.
+ (prog_error, error, fatal, verb, switch_warning, parse_WARNINGS,
+ parse_warnings): Move to ChannelDefs.pm.
+ (usage): Move the warning list to Automake::ChannelDefs::usage
+ and call it.
+ (set_strictness): Move channel setings to
+ Automake::ChannelDefs::set_strictness and call it.
+
+ * automake.in (err): Rename as ...
+ (error): ... this. Adjust all callers.
+ Suggested by H.Merijn Brand.
+
+2002-12-13 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * tests/version7.test: Require GNU make.
+ Reported by Patrick Welche.
+
+2002-12-11 Brian Ford <ford@vss.fsi.com>
+
+ * m4/init.m4 (AM_INIT_AUTOMAKE): Properly quote AC_PACKAGE_TARNAME
+ and AC_PACKAGE_VERSION.
+
+2002-12-11 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.texi (ANSI): Since Autoconf 2.54, LIBOBJ and LTLIBOBJ
+ no longer have to be rewritten in order to support deansification.
+ (Tests): Link to the DejaGnu manual.
+ (Optional): Comment out FIXME.
+ (Complete, A Library, LIBOBJS): Use $(LIBOBJ) and $(ALLOCA)
+ instead of @LIBOBJ@ and @ALLOCA@.
+ (Sources): Typo.
+
+2002-12-05 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/am/texinfos.am (install-info-am, uninstall-info-am): Strip
+ directories from info filenames.
+ * tests/texinfo13.test: Make sure main.info gets installed
+ as $(infodir)/main.info.
+
+ * automake.in (handle_dist): Do not define %GETTEXT% if the user
+ is using $seen_gettext_external, this distcheck won't run
+ `./configure' with a meaningless `--with-included-gettext'.
+ * tests/gettext.test: Make sure distcheck uses --with-included-gettext.
+ * tests/gettext2.test: Make sure distcheck does not use
+ --with-included-gettext.
+
+ * m4/ccstdc.m4: Define am_cv_prog_cc_stdc for backward
+ compatibility and diagnose the use of AM_PROG_CC_STDC.
+ * automake.texi (Public macros) <AM_PROG_CC_STDC>: Remove
+ documentation, this macro is no longer supported.
+ Reported by Kevin Ryde.
+
+2002-12-04 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (handle_languages): Test $objdir, not $srcdir, to
+ decide whether a _.c file is in a subdirectory and has to be
+ cleaned separately.
+ Reported by Kevin Ryde.
+
+ * tests/ansi10.test (liblib_a_LIBADD): Set ac_cv_prog_cc_stdc
+ not am_cv_prog_cc_stdc.
+
+ * automake.texi (Options): Some English nits from Eric Siegerman.
+ (Sources): Rewrite the introduction and move the example to ...
+ (Built sources example): ... this separate node.
+
+ * automake.in (variable_pretty_output): Strip trailing
+ backslashes in $val after $val is defined...
+ Reported by Kevin Ryde.
+
+ * tests/depcomp2.test: Pass CC='gcc' as an argument to ./configure
+ not in the environment. Otherwise the test will fail when
+ run with ksh and VERBOSE=x.
+ Reported by Paul Jarc.
+
+ * tests/man2.test: Exercize `make uninstall', to test
+ the previous change.
+
+2002-12-03 Nicolas Joly <njoly@pasteur.fr>
+
+ * lib/am/mans.am (uninstall-man%SECTION%): Change the extension of
+ the man pages being uninstalled, if needed.
+
+2002-12-03 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (macro_define): Do not strip escaped new lines
+ in Automake's +='ed variables. We don't know whether it will
+ be pretty printed or not at this point.
+ (variable_pretty_output): Do this here.
+ * tests/pluseq10.test: New file.
+ * tests/Makefile.am (TESTS): Add pluseq10.test.
+ Reported by Ralf Corsepius.
+
+2002-12-02 Charles Wilson <cwilson@ece.gatech.edu>
+
+ * tests/gnits3.test (AM_INSTALLCHECK_STD_OPTIONS_EXEMPT):
+ Append $(EXEEXT) again.
+
+2002-12-02 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.texi (Sources): Illustrate $(BUILT_SOURCES) with an
+ example.
+
+ * automake.texi (Options): Programs listed in
+ AM_INSTALLCHECK_STD_OPTIONS_EXEMPT should have $(EXEEXT) appended.
+ * tests/gnits3.test (AM_INSTALLCHECK_STD_OPTIONS_EXEMPT):
+ Append $(EXEEXT).
+ Reported by Charles Wilson.
+
+2002-12-01 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (lang_c_finish): Do not fill de_ansi_files with
+ subdirectory informations for %libsources files. A LIBOBJS source
+ is always in the current directory. This reverts part of a change
+ from 2002-01-13.
+ * tests/ansi10.test: New file.
+ * tests/Makefile.am (TESTS): Add ansi10.test.
+
+ * automake.in (do_check_merge_target): Add missing space.
+
+ * lib/config.guess, lib/config.sub, lib/texinfo.tex: New upstream
+ versions.
+
+ * configure.in: Do not use missing while checking for Autoconf's
+ version, otherwise we won't notice that Autoconf isn't installed.
+ Augment the error message with a few questions to help users.
+
+2002-11-30 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * tests/gnits2.test, tests/gnits3.test: Move the greps inside the
+ Makefile, so we can honor $(EXEEXT). Otherwise these tests
+ fail under Cygwin.
+ Reported by Charles Wilson.
+
+ For PR automake/375 (Debian Bug #168671):
+ * automake.in (scan_texinfo_file): Erase all known index files, no
+ matter whether they are used at the top-level or not, because we
+ can never know if they are used in included files. The remaining
+ macros we recognize at the top-level of a Texi document are
+ @defindex, @defcodeindex, @synindex, and @syncodeindex.
+ * tests/texinfo18.test: New file.
+ * tests/Makefile.am (TESTS): Add texinfo18.test.
+ Reported by Simon Richter.
+
+ * automake.in (scan_texinfo_file): Honor only the first @setfilename.
+ * tests/texinfo17.test: New file.
+ * tests/Makefile.am (TESTS): Add texinfo17.test.
+ Reported by Karl Berry.
+
+ For PR automake/357:
+ * automake.in (require_file_internal): Don't complain a file is "not
+ found" when it is a target. Make sure "not found" files are otherwise
+ reported as error (they were reported as 'note').
+ * tests/distcommon3.test: Augment to test the above.
+ * tests/libobj12b.test: Touch ltmain.sh.
+ * tests/required2.test: Make sure Automake fails because ltmain.sh
+ has been removed.
+ Reported by Ronald Landheer.
+
+ * tests/texinfo3.test: Make sure we don't output single suffix
+ inference rules when building `.info'-less Info files (this
+ confuses Solaris make). Run distcheck to make sure the rules
+ work.
+ * automake.in (output_texinfo_build_rules): Define GENERIC_INFO
+ and SOURCE_INFO.
+ * lib/am/texibuild.am (%SOURCE_SUFFIX%%DEST_SUFFIX%,
+ %DEST_PREFIX%%DEST_SUFFIX%): Honor GENERIC_INFO and SOURCE_INFO.
+
+2002-11-29 Alexandre Duret-Lutz <adl@gnu.org>
+
+ For PR automake/359:
+ * automake.in (do_check_merge_target): Make `check' dependent on
+ $(BUILT_SOURCES) if the variable is defined. Run `check-am' or
+ `check-recursive' in a submake in this case.
+ * tests/check2.test, tests/check3.test: New files.
+ * tests/check.test: Make sure `check' depends on `check-am'.
+ * tests/Makefile.am (TESTS): Add check2.test and check3.test.
+
+ For PR automake/371 and PR automake/372:
+ * automake.in (rule_define): Honor inference rules with multiple
+ targets, and warn when they are used.
+ * tests/suffix11.test: New file.
+ * tests/Makefile.am (TESTS): Add suffix11.test.
+ Reported by Duncan Gibson.
+
+2002-11-28 Alexandre Duret-Lutz <adl@gnu.org>
+
+ For PR automake/370:
+ * automake.in (handle_languages): Don't prepend $U to $myext
+ since handle_single_transform_list now appends it to $obj.
+ Process the rule twice to handle deansified files in subdirectories.
+ Mark _.c files in subdirectories for cleaning.
+ (handle_single_transform_list): Append $U to $obj_sans_ext if
+ needed: before this dependencies were output foo.Po instead
+ of foo$U.Po. Don't output explicit dependencies for renamed
+ objects or sources in sub-directories: we already output
+ a full compile rule for them.
+ (lang_c_finish): Don't always use the full filename in the
+ .c -> _.c rule. This reverts part of my change of 2002-11-21.
+ * tests/ansi6.test, tests/ansi7.test: Make sure deansified
+ files are created in the right directory, and cleaned.
+ Reported by Kevin Ryde.
+
+2002-11-25 Jim Meyering <jim@meyering.net>
+
+ * lib/install-sh: Put `$0:' at the beginning of each diagnostic,
+ not `install:'.
+
+2002-11-21 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (make_condition_string): New function.
+ (cond_stack_if, cond_stack_else, cond_stack_endif): Use it.
+ Suggested by Raja R Harinath.
+
+ * tests/texinfo13.test: Require texi2dvi-o.
+ * tests/defs.in: Handle required=texi2dvi-o.
+
+ * automake.in (lang_c_finish): Use $@ in the .c -> _.c rule.
+
+ * automake.in (handle_single_transform_list): Don't strip the
+ directory from $full_ansi. This reverts my patch of 2002-10-16.
+ (lang_c_finish): Use the full filename, including the directory,
+ in the .c -> _.c rule. These two files must reside in the same
+ directory.
+ * tests/ansi6.test: Also try to compile without ansi2knr.
+ Reported by Andreas Schwab
+
+2002-11-20 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/Automake/Conditional.pm (strip): New function.
+ * lib/Automake/ConditionalSet.pm (sub_conditions): Use it.
+ Suggested by Raja R Harinath.
+
+ * automake.in (conditional_ambiguous_p, macro_define, rule_define,
+ require_variables): Use ->human instead of ->string.
+ * lib/Automake/Conditional.pm (string): Don't sort conditions, they
+ are already sorted.
+ (_to_human, human): New functions.
+ * lib/Automake/ConditionalSet.pm (human): New function.
+ * tests/cond27.test, tests/library3.test, tests/pluseq5.test,
+ tests/pluseq9.test: Adjust.
+
+ * lib/Automake/Conditional.pm [SYNOPSIS]: Fix not's description.
+ * lib/Automake/ConditionalSet.pm (sub_conditions): New function.
+ (multiply): Also accept an Automake::Conditional as argument.
+ * automake.in (variable_not_always_defined_in_cond): Simplify,
+ using only Automake::ConditionalSet methods.
+ Suggested by Raja R Harinath.
+
+ * lib/Automake/ConditionalSet.pm (conds): Use value() to simplify.
+ (invert): Rewrite as a product-of-sums to sum-of-products converter.
+ (_multiply, multiply): New functions.
+ * lib/Automake/Conditional.pm (not): New function.
+ * lib/Automake/tests/ConditionalSet.pl (test_invert): Update.
+ * automake.in (condition_negate): Move ...
+ * lib/Automake/Conditional.pm (negate_condition): ... here.
+ Suggested by Raja R Harinath.
+
+2002-11-19 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/Automake/ConditionalSet.pm (_simplify, simplify): New methods.
+ (true): Cache return value, so _simplify can use it.
+ * lib/Automake/tests/ConditionalSet.pl (test_simplify): New function.
+ * automake.in (variable_not_always_defined_in_cond): Return
+ a simplified ConditionalSet.
+ (macro_define, require_variables): Adjust.
+ * tests/Makefile.am (TEST): Add library3.test.
+ * tests/library3.test: New file.
+ * tests/pluseq9.test: Adjust.
+ Thanks to Raja R Harinath.
+
+2002-11-18 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/Automake/tests/Makefile.am, lib/Automake/tests/Conditional.pl,
+ lib/Automake/tests/ConditionalSet.pl: New files.
+ * lib/Automake/Makefile.am (SUBDIRS): New variable.
+ * configure.in: Output lib/Automake/tests/Makefile.
+ * lib/Automake/ConditionalSet.pm (by_conditions): Delete.
+ (conds): Don't use by_conditions, sort alphabetically, and
+ return sorted conds.
+ (string): Call ->string on each Conditional.
+ * tests/Makefile.am (TESTS): Remove cond12.test.
+ * tests/cond12.test: Remove, moved to
+ lib/Automake/tests/ConditionalSet.pl.
+ * tests/cond3.test: Adjust conditional ordering.
+
+2002-11-15 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/Automake/ConditionalSet.pm (_permutations_worker): Ignore TRUE
+ conditions.
+ (permutations): Treat empty permutations as TRUE.
+ (invert): Simplify.
+ Suggested by Raja R Harinath.
+
+2002-11-14 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (variable_defined): Thinko.
+ * lib/Automake/ConditionalSet.pm (true): Simplify.
+ (permutations): Fix documentation.
+ (new): Don't simplify conditional sets that contain TRUE.
+ Reported by Raja R Harinath.
+
+2002-11-14 Eric Blake <ebb9@email.byu.edu>
+
+ * lib/am/depend2.am: Add missing fi in c.obj rules.
+
+2002-11-14 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (handle_installdirs): Reindent to workaround a
+ parsing bug in Perl 5.6.0.
+ Reported by Patrick Welche.
+
+ * lib/Automake/Conditional.pm: Add reference to ConditionalSet.pm.
+ * lib/Automake/ConditionalSet.pm: New file.
+ * lib/Automake/Makefile.am (dist_perllib_DATA): Add ConditionalSet.pm.
+ * automake.in: Use ConditionalSet.
+ (by_condition, invert_conditions, variable_conditions_permutations):
+ Remove, now defined as Automake::ConditionalSet::by_condition,
+ Automake::ConditionalSet::invert, and
+ Automake::ConditionalSet::permutations.
+ (variable_sorted_conditions): Remove.
+ (msg_var, msg_target handle_source_transform, handle_lib_objects,
+ conditional_ambiguous_p, variable_not_always_defined_in_cond,
+ macro_define, macro_dump, variable_defined,
+ variable_conditions_recursive, variable_conditions,
+ target_conditions, variable_conditionally_defined,
+ variable_conditions_recursive_sub,
+ check_variable_defined_unconditionally, variable_value_as_list,
+ variable_value_as_list_recursive_worker, variable_output,
+ variable_pretty_output, rule_define, append_exeext,
+ am_install_var, require_variables_for_macro): Adjust to
+ use ConditionalSet.
+
+2002-11-13 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (variable_conditions): Split into ...
+ (variable_conditions, variable_sorted_conditions): ... these
+ functions, where variable_sorted_conditions has the semantic of
+ the old variable_condition.
+ (target_conditions): New function.
+ (msg_var, handle_lib_objects_cond, check_ambiguous_conditional,
+ variable_not_always_defined_in_cond, macro_define,
+ variable_defined, check_variable_defined_unconditionally,
+ variable_conditions_recursive_sub,
+ variable_conditions_permutations, variable_value_as_list,
+ variable_value_as_list_recursive_worker, append_exeext,
+ am_install_var, require_variables_for_macro): Use variable_conditions.
+ (msg_target, rule_define): Use target_conditions.
+ (define_objects_from_sources, macro_define, macro_dump,
+ variable_pretty_output): Use variable_sorted_conditions.
+
+ * automake.texi (Conditional Sources): Fix the `+=' example.
+ Reported by Mike Castle.
+
+ * automake.in: Don't declare TRUE and FALSE, import them from
+ Automake::Conditional.
+ * lib/Automake/Conditional.pm (TRUE, FALSE): New constants.
+ (new): Simplify using FALSE.
+ (reduce): New function, moved from ...
+ * automake.in (variable_conditions_reduce): ... here.
+ (variable_conditions_recursive_sub, invert_conditions):
+ Adjust calls to Automake::Conditional::reduce.
+ * tests/cond12.test: Adjust to use Automake::Conditional.
+
+2002-11-09 Jim Meyering <jim@meyering.net>
+
+ Make install-sh work even when names contain spaces or
+ certain (but not all) shell metachars.
+
+ * lib/install-sh: Remove lots of unnecessary quoting.
+ Add double quotes where necessary.
+ Write diagnostics to stderr, not stdout.
+ Normalize spacing in diagnostics: use one space (not two,
+ and not a TAB) after the leading `install:'.
+ Remove trailing white space.
+ Remove unnecessary curly braces.
+ If removing the destination fails, also try to move it aside.
+ Use `trap' more portably.
+ * tests/installsh2.test: New file, to test for the above fix.
+ * tests/Makefile.am (TESTS): Add installsh2.test.
+
+ * automake.texi: Fix some typos and a grammar nit.
+
+2002-11-07 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (switch_warning): Subject Perl warnings to -Werror.
+
+ * automake.texi (Extending): Complete unterminated sentence.
+ Reported by Mike Castle.
+
+2002-11-06 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&conditional_ambiguous_p): Don't forget to ->string
+ the Conditionals.
+
+2002-10-31 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.texi (Dist): Fix the distcleancheck_listfiles example.
+ Reported by Karl Berry.
+
+2002-10-31 Akim Demaille <akim@epita.fr>
+
+ * tests/location.test (Makefile.am): Strengthen.
+ * lib/Automake/Channels.pm (_print_message): Be sure to flush
+ $partial when the message is output.
+ Thanks to Alexandre Duret-Lutz.
+
+2002-10-31 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&read_am_file): Use $last_where to register the
+ _first_ line of a variable definition as location instead of the
+ last one.
+ (&conditional_ambiguous_p): Don't forget to ->string the
+ Conditionals.
+ (&rule_define): Likewise.
+ * tests/location.test: Adjust to exercise this.
+
+2002-10-25 Charles Wilson <cwilson@ece.gatech.edu>
+
+ * tests/defs.in: Add explicit stanza for python -V.
+
+2002-10-16 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * tests/ansi6.test, tests/ansi7.test: Set ac_cv_prog_cc_stdc instead
+ of am_cv_prog_cc_stdc. This follows Akim's patch of 2002-10-09,
+ and reveals a bug in my patch of 2002-10-15.
+ * automake.in (handle_single_transform_list): Strip directory name
+ from $full_ansi if subdir-objects is not set.
+
+ * lib/texinfo.tex: New version from Texinfo 4.2b.
+
+2002-10-15 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (handle_single_transform_list) <full_ansi>: New variable.
+ Use this to record correct dependencies about deansifiable files which
+ are using per-program flags or are in a subdirectory.
+ * tests/ansi9.test: New file.
+ * tests/Makefile.am (TESTS): Add ansi9.test.
+ Reported by Paul D. Smith
+
+2002-10-12 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * aclocal.in (ac_defun_rx, ac_require_rx): If the macro name is
+ quoted, accept any character but `]'. This makes it possible
+ to define macros such as `AC_LANG_PREPROC(Fortran 90)'.
+ (scan_m4_files): Quote $key in the regex. Don't define $expr, it's
+ not used.
+ (add_file, scan_file): Adjust to the new definitions of $ac_defun_rx
+ and $ac_require_rx.
+ * tests/aclocal2.test: New file.
+ * tests/Makefile.am (TESTS): Add aclocal2.test.
+ Reported by Tamara L. Dahlgren and Tom Epperly.
+
+2002-10-11 Alexandre Duret-Lutz <adl@gnu.org>
+
+ For Debian Bug#153697:
+ * lib/am/dejagnu.am (distclean-DEJAGNU): Remove $tool.sum and
+ $tool.log.
+ Suggested by Andrew Suffield.
+
+2002-10-10 Alexandre Duret-Lutz <adl@gnu.org>
+
+ For PR automake/369:
+ * lib/am/python.am: Lookup python files in build directory or
+ source directory.
+ From Mathias Doreille.
+ * tests/python3.test: New file.
+ * tests/Makefile.am (TESTS): Add python3.test.
+ * tests/defs: Handle `required=python'.
+
+ For PR automake/358:
+ * lib/am/texi-vers.am (%STAMPVTI%): Depend on configure instead of
+ configure.ac.
+ Suggested by Thien-Thi Nguyen.
+ * lib/am/configure.am ($(srcdir)/configure): Depends on
+ %CONFIGURE_DEPS%
+ * automake.in (@configure_deps): New array.
+ (scan_autoconf_traces): Scan for m4_include and m4_sinclude,
+ and fill @configure_deps.
+ (handle_configure): Substitute %CONFIGURE_DEPS%.
+ Distribute @configure_deps.
+ * tests/version7.texi: New file.
+ * tests/vtexi.test: Adjust.
+ * tests/Makefile.am (TESTS): Add version7.test.
+ * automake.texi (Dist): Mention that m4_include'd files
+ are distributed.
+
+2002-10-09 Akim Demaille <akim@epita.fr>
+
+ * m4/ccstdc.m4 (AM_PROG_CC_STDC): Its definition is now empty:
+ the content of this macro was merged in AC_PROG_CC.
+ * m4/protos.m4 (AM_C_PROTOTYPES): Adjust to AC_C_PROTOTYPES.
+ * tests/depacl.test: Remove, it exercizes aclocal in a way that was
+ exercized by all the other tests since the test suite really uses
+ aclocal.
+ * tests/Makefile.am (TESTS): Remove depacl.test.
+
+2002-10-08 Paul Eggert <eggert@twinsun.com>
+
+ * lib/am/texibuild.am (%DEST_PREFIX%%DEST_SUFFIX%,
+ %DEST_PREFIX%.dvi, %DEST_PREFIX%.pdf): Use "makeinfo -o output
+ input", not "makeinfo input -o output", as the latter fails if
+ POSIXLY_CORRECT=1.
+ * lib/am/texinfos.am (.dvi.ps): Likewise for dvips.
+ * m4/depend.m4 (_AM_DEPENDENCIES): Likewise for $depcc.
+
+2002-10-08 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (file_contents_internal): Fix the relationship
+ regex flags, don't use `m'.
+
+ For Debian Bug#162583:
+ * automake.in (file_contents_internal): Simplify regex to
+ separate relationship from actions in rules.
+ Reported by Sam Hocevar.
+
+ * lib/Automake/Conditional.pm (has): Simplify.
+
+2002-10-07 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/Automake/Conditional.pm: New file.
+ * lib/Automake/Makefile.am (dist_perllib_DATA): Add Conditional.pm.
+ * automake.in: Use Automake::Conditional.
+ (TRUE, FALSE): New constants.
+ (%var_value, %var_location, %var_comment, %var_type, %var_owner,
+ %targets, %target_source, %target_name, %target_owner): Tie to
+ Tie::RefHash::Nestable.
+ (generate_makefile, process_option_list, handle_options,
+ handle_languages, handle_source_transform, handle_compile,
+ handle_libtool, handle_texinfo_helper, handle_dist, handle_subdirs,
+ scan_aclocal_m4, handle_emacs_lisp, handle_python,
+ scan_autoconf_files, variable_assert, define_variable,
+ define_pretty_variable, define_configure_variable, am_install_var,
+ push_dist_common): Use TRUE.
+ (define_objects_from_sources): Fix return value on
+ "recursively-defined" errors.
+ (conditional_string, conditional_true_when, conditional_is_redundant,
+ conditional_implies_any, make_conditions): Remove these functions,
+ obsoleted by Conditional.pm.
+ (cond_stack_if, cond_stack_else, cond_stack_endif): Return
+ an Automake::Conditional instance.
+ (by_condition, conditional_ambiguous_p,
+ variable_not_always_defined_in_cond, macro_define,
+ variable_conditions_recursive, variable_conditions_recursive_sub,
+ variable_conditions_reduce, invert_conditions,
+ variable_conditions_permutations,
+ check_variable_defined_unconditionally, variable_value_as_list,
+ variable_output, variable_pretty_output, rule_define,
+ read_am_file, file_contents_internal, require_variables): Adjust
+ to use Automake::Conditional objects.
+ (handle_footer): Get $(SUFFIXES) in 'all' conditions.
+ * tests/cond12.test: Adjust to use Automake::Conditional objects.
+
+2002-10-01 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (handle_source_transform): If foo_SOURCES is defined
+ conditionally, create and use am__foo_SOURCES_DIST for distribution.
+ * tests/condd.test: Extend to check distributed files.
+ * tests/substref.test: Make sure we don't use such a variable when
+ it's not needed.
+ Reported by Marcus Brinkmann.
+
+2002-09-30 Ezra Peisach <epeisach@MED-XTAL.BU.EDU>
+
+ * tests/defs.in: Run $MAKE --version -v.
+ * tests/dollar.test: Abort on ./defs failure.
+ * tests/lex5.test: Require GNUmake, not make.
+
+2002-09-30 Kevin Ryde <user42@zip.com.au>
+
+ * m4/as.m4 (AM_PROG_AS): Let CCAS and CCASFLAGS default to the actual
+ values of $CC and $CFLAGS (as opposed to $(CC) and $(CFLAGS)), so
+ configure tests can use them. Use AC_ARG_VAR instead of AC_SUBST.
+
+2002-09-30 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (require_variables): The fix introduced in 2002-09-19
+ is incomplete. Rewrite the conditional variable definition check
+ using &variable_not_always_defined_in_cond.
+ * tests/cond26.test, tests/cond27.test, tests/cond28.test: New file.
+ * tests/Makefile.am (TESTS): Add cond26.test, cond27.test, and
+ cond28.test.
+ Reported by Juergen Keil.
+
+ * automake.in (INTERNAL): Redefine as an empty location,
+ so that internal locations get displayed as `automake:'.
+
+ * lib/am/distdir.am (distdir): Create $dc_destdir right before
+ its use.
+ Reported by Akim Demaille.
+
+ Fix for PR automake/366:
+ * automake.in (handle_dist): Strip $(srcdir) and replace
+ $(top_srcdir) when computing DIST_COMMON directories.
+ * tests/include2.test: Use an obsolute $(srcdir), and check
+ for spurious directories in $(distdir)/sub.
+ * lib/am/distdir.am: Rewrite $(top_srcdir) as $(top_builddir).
+ Reported by Kevin Ryde.
+
+2002-09-29 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * lib/Automake/Channels.pm (%_default_options): Add 'partial'.
+ (_format_message): Rename as ...
+ (_format_sub_message): ... this.
+ (_format_message): New function, extracted from ...
+ (_print_message): ... here. Honor the 'partial' option.
+ ($partial): New variable.
+ * automake.in (handle_ltlibraries, check_ambiguous_conditional,
+ rule_define): Mark partial messages.
+
+ * automake.in (handle_ltlibraries): Record library locations in
+ %liblocations, and print the previous declaration on error.
+ * tests/libtool6.test: Check that the locations of the two
+ definitions are shown.
+
+ For PR automake/360: Propagate more locations.
+ * automake.in (handle_programs): Adjust usage of am_install_var's
+ return value. Pass on locations as context to file_contents.
+ (handle_libraries, handle_ltlibraries): Likewise. Use locations
+ in the 'not a standard library name' diagnostic.
+ (handle_emacs_lisp, handle_python): Adjust usage of am_install_var's
+ return value. Pass on locations to require_variables and
+ require_conf_file.
+ (check_ambiguous_conditional): Strip trailing dot in message.
+ (value_to_list): Add the $WHERE and $LOC_WANTED arguments.
+ (variable_value_as_list_recursive_worker): Add the $LOC_WANTED
+ argument. Adjust calls to value_to_list.
+ (variable_value_as_list_recursive): Call
+ variable_value_as_list_recursive_worker with $LOC_WANTED = 0.
+ (variable_loc_and_value_as_list_recursive): New function,
+ variable_value_as_list_recursive_worker with $LOC_WANTED = 1.
+ (am_install_var): Use variable_loc_and_value_as_list_recursive,
+ and return a list of [$location, $value] pairs.
+ (rule_define): Use better locations in EXEEXT diagnostic.
+ (handle_source_transform, define_objects_from_sources): Add and use
+ a $WHERE argument. Adjust callers.
+ * tests/stdlib.test: Grep the location in error message.
+ * tests/location.test: New file.
+ * tests/Makefile.am (TESTS): Add location.test.
+
+ * tests/exeext3.test: New file.
+ * tests/Makefile.am (TESTS): Add exeext3.test.
+ * automake.in (%target_name): New hash.
+ (initialize_per_input): Reset %target_name.
+ (rule_define): Fill %target_name, and use it to detect targets
+ which have been registered with key X but really are X$(EXEEXT).
+
+2002-09-28 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ For PR automake/360:
+ * lib/Automake/Location.pm: New file.
+ * lib/Automake/Channels.pm (_print_message): Display contexts
+ when given an Automake::Location.
+ (msg): Clone the location.
+ * lib/Automake/Makefile.am (dist_perllib_DATA): Add Location.pm.
+ * tests/comment5.test: Make sure we display `included from' stacks.
+ * automake.in: Use Automake::Location.
+ (INTERNAL): New constant.
+ (file_contents, file_contents_internal, define_variable,
+ define_pretty_variable, read_am_file): Take $WHERE as argument.
+ Adjust all callers.
+ (scan_autoconf_traces) <$where>: Define as a Location, and use
+ it instead of $here.
+ (macro_define, rule_define): Make sure $WHERE is a location.
+ Clone it before updating $var_location or $targets.
+
+2002-09-27 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * lib/mkinstalldirs: Reindent using `sh-indentation: 2'.
+ Suggested by Bruno Haible.
+
+ * Makefile.am (fetch, FETCHFILES): Don't fetch install-sh from
+ Autoconf. Automake now has the master copy of install-sh and
+ mkinstalldirs.
+
+2002-09-25 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * configure.in: Bump version to 1.7a.
+
+ * NEWS, configure.ac: Version 1.7.
+
+2002-09-25 Art Haas <ahaas@neosoft.com>
+
+ * automake.texi (Optional, Options, Distributing, ANSI,
+ API versioning): Spelling fixes and Texi tweaks.
+
+2002-09-25 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * configure.in: Check for 'tex'.
+ * tests/defs.in: Handle required=tex using configure's result.
+ Reported by Patrick Welche.
+
+ * Makefile.am (mdate-sh): Remove.
+ * mdate-sh: Delete.
+ Suggested by Akim Demaille.
+
+2002-09-25 Tom Tromey <tromey@redhat.com>
+
+ * NEWS: Mention distuninstallcheck.
+ * automake.texi (Dist): Document new macro and target.
+ * lib/am/distdir.am (distuninstallcheck_listfiles): New macro.
+ (distuninstallcheck): New target.
+ (distcheck): Use distuninstallcheck.
+
+2002-09-25 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
+
+ * tests/specflags7.test (true_CFLAGS, false_CFLAGS, false.c): Use
+ AM_TRUE, AM_FALSE to avoid bad interaction with Tru64 UNIX
+ <sys/types.h>.
+ * tests/specflags8.test (true_CPPFLAGS, false_CPPFLAGS, false.c):
+ Likewise.
+
+2002-09-25 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (output_texinfo_build_rules): Define %SOURCE_REAL%.
+ * lib/am/texibuild.am (%DEST_PREFIX%%DEST_SUFFIX%,
+ %DEST_PREFIX%.dvi, %DEST_PREFIX%.pdf): Add %SOURCE_REAL% as dependency.
+
+2002-09-24 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
+
+ * lib/am/ltlib.am (clean-%DIR%LTLIBRARIES): Use $$dir in make
+ command.
+
+2002-09-24 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (handle_single_transform_list): Revert the change
+ from 2002-09-22. We need to erase .libs/ in the object directory
+ in addition to the library directory.
+
+ * tests/target-cflags.test: Build in `build/', not `obj/' because
+ `obj/' is special to BSD make.
+
+ * automake.in (read_am_file): Prefix included files with
+ $(top_srcdir) or $(srcdir) in DIST_COMMON. Fixes
+ subdircond2.test, and subdircond3.test on OSF1.
+
+ * tests/defs.in (SHELL): Set it.
+
+ * lib/am/distdir.am (distcleancheck): Mention `in build directory'
+ in error message.
+
+2002-09-23 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ For PR automake/350:
+ * automake.in (handle_ltlibraries): Allow a library to be installed
+ many times in the same directory.
+ * tests/libtool5.test, tests/libtool6.test: New files.
+ * tests/Makefile.am (TESTS): Add libtool5.test and libtool6.test.
+
+2002-09-22 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (handle_ltlibraries): Fill $libtool_clean_directories
+ here, with directories where .la files are built...
+ (handle_single_transform_list): ... not here with directories
+ where .lo files are built.
+ * tests/libtool3.test: Build a library in a subdirectory to
+ check for this.
+ Reported by Peter Gavin.
+
+ * tests/cond5.test: Give more time to automake.
+ Reported by Art Haas.
+
+ * configure.in: Really check for Autoconf 2.54.
+
+ * automake.texi (Yacc and Lex): ylwrap is used only when there is
+ more than one yacc or lex source file in a directory.
+
+ * automake.in (macro_define): Update a variable's location each
+ time its owner is updated.
+ * tests/gnuwarn.test: Append to CFLAGS to check for this.
+ Reported by Harlan Stenn.
+
+2002-09-20 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * configure.in: Bump version to 1.6g.
+
+ * configure.in, NEWS: Bump version to 1.6f.
+
+ * Makefile.am (INSTALL): New rules.
+
+2002-09-20 Mirko Streckenbach <strecken@infosun.fmi.uni-passau.de>
+
+ For PR automake/363:
+ * m4/cond.m4: Fix AC_MSG_ERROR quoting.
+
+2002-09-19 Pavel Roskin <proski@gnu.org>
+
+ * tests/warnopts.test: Fix random failures by removing Autoconf
+ cache directory when configure.in changes. Use the code and the
+ comment from tests/asm.test.
+
+2002-09-19 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.texi (Program and Library Variables) <maude_LIBADD>:
+ Don't mention _LDADD for Libtool libraries.
+ Reported by Schleicher Ralph.
+
+ For PR automake/361:
+ * tests/suffix8.test: More explicit dependencies.
+ Reported by Paul Eggert.
+
+ * automake.in (rule_define): Don't diagnose duplicate user rules.
+ * tests/phony.test, tests/percent2.test: New files.
+ * tests/Makefile.am (TESTS): Add them.
+ Reported by Ralf Corsepius.
+
+ * automake.in (require_variables): Search variable definitions
+ in any condition implied by $cond.
+ * tests/cond25.test: New file.
+ * tests/Makefile.am (TESTS): Add cond25.test.
+ Reported by Pavel Roskin.
+
+ * tests/subobj9.test: Skip this test on configure errors.
+ Reported by Paul Eggert.
+
+2002-09-18 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * configure.in: Bump version to 1.6e.
+
+ * configure.in, NEWS: Bump version to 1.6d.
+ * tests/libobj12.test, tests/libobj12b.test: Include ./defs,
+ not $srcdir/defs.
+ * tests/suffix8.test: Typo.
+
+ * automake.in (check_ambiguous_conditional, rule_define): Issue
+ syntactic warnings, not errors.
+ (macro_define): Don't adjust the owner of a variable which is being
+ appended in a condition different from its definition.
+ (variable_output, variable_pretty_output): Make sure the
+ requested condition exists.
+
+ For PR automake/353: fill %var_location, %var_comment,
+ %var_type, %var_owner for each condition.
+ * automake.in (msg_cond_var): New function.
+ (msg_var): Use it.
+ (generate_makefile, process_option_list, handle_languages,
+ handle_lib_objects_cond, handle_compile, handle_libtool,
+ handle_ltlibraries, handle_texinfo_helper, handle_tests,
+ handle_emacs_lisp, handle_python, macro_define, macro_delete,
+ macro_dump, variable_assert, variable_output,
+ variable_pretty_output, read_am_file, read_main_am_file,
+ file_contents_internal, am_primary_prefixes,
+ require_variables_for_macro): Adjust accesses to %var_location,
+ %var_comment, %var_type, %var_owner.
+ (append_comments, require_file_with_macro,
+ require_conf_file_with_macro, require_variables): Add the
+ $cond argument.
+ * tests/comment7.test: New file.
+ * tests/Makefile.am (TESTS): Add comment7.test.
+
+2002-09-17 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ For PR automake/353:
+ * automake.in (check_ambiguous_conditional): Display locations for
+ the two definitions of the ambiguous variable. Show the macro_dump
+ output in --verbose only. Accept $where as a third argument,
+ (macro_define): Pass $where.
+
+ * automake.in (handle_programs): Ooops. Really add LDADD
+ objects into _DEPENDENCIES.
+ * tests/libobj12.test: Check for it.
+
+2002-09-17 Assar Westerlund <assar@kth.se>
+ Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (handle_programs, handle_libraries,
+ handle_ltlibraries): Maintain $seen_libobjs on a
+ per-program/per-library basis, instead of globally to each
+ of these functions.
+ * tests/libobj12.test, tests/libobj12b.test: New files.
+ * tests/Makefile.am (TESTS): Add libobj12.test and libobj12b.test.
+
+2002-09-17 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/defs.in (configure.in): Don't call AC_PROG_INSTALL and
+ AC_PROG_MAKE_SET.
+
+ * lib/config.guess, lib/config.sub, lib/INSTALL,
+ lib/Automate/Struct.pm: New upstream version.
+ * Makefile.am (mdate-sh): New rule.
+ (FETCHFILES): Add Automate/Struct.pm.
+ (fetch): Get Automate/Struct.pm.
+ (AUTOMAKESOURCES, CLEANFILES): New macros.
+ (EXTRA_DIST, TAGS_FILES): Use them.
+ * install-sh, mkinstalldirs, missing: Delete.
+
+ * automake.in: Rename the 'unused' channel to 'syntax'.
+ (variable_defined): Issue a warning instead of an error
+ for variable-is-a-target conditions.
+ * automake.texi (Invoking Automake): Rename the 'unused'
+ channel to 'syntax'.
+ * tests/warnopts.test: Likewise.
+
+ * tests/suffix8.test: Add explicit dependencies.
+ * tests/texinfo13.test, tests/texinfo16.test: Require tex.
+
+2002-09-16 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * configure.in, m4/init.m4, NEWS: Require Autoconf 2.54.
+
+ * automake.in (variable_defined): Thinko in $cond handling.
+
+2002-09-15 Paul Eggert <eggert@twinsun.com>
+
+ * lib/Automake/Channels.pm: Don't use 'our', as it isn't portable
+ to Perl 5.00503.
+
+ * Makefile.am (maintainer-check): Don't use egrep.
+
+2002-09-15 Tom Tromey <tromey@redhat.com>
+
+ * tests/subdircond3.test: Pass flags to make in environment.
+ * tests/subdircond2.test: Pass flags to make in environment.
+ * Makefile.am (maintainer-check): Add a new check for @...@
+ substitutions. Updated correct number of diffs between source and
+ build trees.
+
+ * configure.in (aclocal, automake): Don't create.
+ * automake.in ($prefix): Don't define.
+ * aclocal.in ($prefix): Don't define.
+ * Makefile.am (do_subst): New macro.
+ (automake): New target.
+ (aclocal): Likewise.
+
+2002-09-15 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * aclocal.in, automake.in: Requote each "@var@" as '@var@'.
+
+2002-09-14 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/Makefile.am (XFAIL_TESTS): Remove specflags7.test and
+ specflags8.test.
+
+2002-09-13 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.texi (Building ctags and etags): Rename and adjust as ...
+ (Building true and false): ... this.
+ * tests/targetclash.test: New file.
+ * tests/specflags7.test, tests/specflags8.test: Adjust to build
+ true and false.
+ * tests/Makefile.am (TESTS): Add targetclash.test.
+
+ Diagnose target clashes, for PR automake/344:
+ * automake.in (%targets): Record conditionals for definitions.
+ (%target_conditional): Remove (obsoleted by %targets).
+ (%target_source, %target_owner): New hashes.
+ (TARGET_AUTOMAKE, TARGET_USER): New constants.
+ (initialize_per_input): Adjust to reset new variables.
+ (err_cond_target, msg_cond_target): New functions.
+ (msg_target): Adjust usage of %targets.
+ (conditional_ambiguous_p): Take a list of conditional to check
+ as a third parameter, so this can be used for other things that
+ variables.
+ (handle_lib_objects_cond): Adjust conditional_ambiguous_p usage.
+ (variable_defined): Restrict the target-with-same-name check
+ to user targets.
+ (rule_define): Add the $SOURCE argument, and take $OWNER instead
+ of $IS_AM. Diagnose target clashes (including ambugious
+ conditionals). Return a list of conditions where the rule should
+ be defined instead of a boolean. Fill %target_source and
+ %target_owner.
+ (target_define): Use `exists', not `defined'.
+ (read_am_file): Adjust the call to rule_define.
+ (file_contents_internal): Add more FIXMEs. Simplify my moving
+ and documenting the "define rules in undefined conditions" to
+ rule_define.
+ * tests/Makefile.am (XFAIL_TESTS): Add specflags7.test and
+ specflags8.test.
+
+2002-09-12 Akim Demaille <akim@epita.fr>
+
+ * aclocal.in: Prototype all the functions.
+ Add `(C)' to Copyrights.
+ (&add_file): Strip the comments before checking for `AC_REQUIRE'.
+ Remove Perl 4 hacks, since anyway we require 5.005 via General.pm.
+
+2002-09-11 Akim Demaille <akim@epita.fr>
+
+ * lib/am/texinfos.am (TEXI2PDF): Pass --batch to texi2dvi, since
+ it was already supported when --pdf support was added.
+
+2002-09-10 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * lib/Automake/Channels.pm (_default_options): Add `backtrace'.
+ (msg): Die with backtrace if requested.
+ * automake.in: Enable `backtrace' on the `automake' channel.
+
+ * automake.in (process_option_list): Mention `Automake' in
+ version-mismatch error.
+ Suggested by Akim Demaille.
+
+ * tests/Makefile.am ($(TESTS)): Replace by ...
+ (check_SCRIPTS): ... this.
+ Suggested by Raja R Harinath.
+
+2002-09-09 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/Makefile.am ($(TESTS)): New, depends on defs.
+ (BUILT_SOURCES): Remove (useless because of PR/359).
+
+ * m4/init.m4: Execute cygpath in a sub-shell.
+
+2002-09-08 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (macro_define): Warn about `:=' assignments.
+ * tests/colneq.test: Check for this warning.
+
+ * automake.texi (Include): Fragments are always distributed.
+ * NEWS: Likewise.
+
+2002-09-08 Andreas Buening <andreas.buening@nexgo.de>
+
+ Fix for automake/334:
+ * lib/am/depend2.am: Replaced "cygpath -w" by $(CYGPATH_W).
+ * m4/init.m4: New make variable CYGPATH_W.
+
+2002-09-08 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * configure.in: Check for EGREP and FGREP. Create tests/defs.
+ * tests/defs: Rename as ...
+ * tests/defs.in: ... this. Add copyright notice. Use configure's
+ values for PERL, EGREP, and FGREP. Be verbose if $srcdir is unset.
+ * tests/Makefile.am (EXTRA_DIST): Remove defs.
+ (BUILT_SOURCES): New.
+ * tests/acinclude.test, tests/aclibobj.test, tests/aclocal.test,
+ tests/aclocali.test, tests/aclocali1.test, tests/aclocalii.test,
+ tests/acoutnoq.test, tests/acoutput.test, tests/acoutput2.test,
+ tests/acoutqnl.test, tests/acouttbs.test, tests/acouttbs2.test,
+ tests/acsilent.test, tests/acsubst.test, tests/acsubst2.test,
+ tests/all.test, tests/alpha.test, tests/amassign.test,
+ tests/ammissing.test, tests/ansi.test, tests/ansi2.test,
+ tests/ansi3.test, tests/ansi4.test, tests/ansi5.test,
+ tests/ansi6.test, tests/ansi7.test, tests/ansi8.test,
+ tests/ar.test, tests/asm.test, tests/autoheader.test,
+ tests/autoheader2.test, tests/auxdir.test, tests/auxdir2.test,
+ tests/backsl.test, tests/backsl2.test, tests/badline.test,
+ tests/badopt.test, tests/badprog.test, tests/block.test,
+ tests/canon.test, tests/canon2.test, tests/canon3.test,
+ tests/canon4.test, tests/canon5.test, tests/ccnoco.test,
+ tests/check.test, tests/checkall.test, tests/clean.test,
+ tests/colneq.test, tests/colneq2.test, tests/colon.test,
+ tests/colon2.test, tests/colon3.test, tests/colon4.test,
+ tests/colon5.test, tests/colon6.test, tests/colon7.test,
+ tests/comment.test, tests/comment2.test, tests/comment3.test,
+ tests/comment4.test, tests/comment5.test, tests/comment6.test,
+ tests/compile_f_c_cxx.test, tests/cond.test, tests/cond10.test,
+ tests/cond11.test, tests/cond12.test, tests/cond13.test,
+ tests/cond14.test, tests/cond15.test, tests/cond16.test,
+ tests/cond17.test, tests/cond18.test, tests/cond19.test,
+ tests/cond2.test, tests/cond20.test, tests/cond21.test,
+ tests/cond22.test, tests/cond23.test, tests/cond24.test,
+ tests/cond3.test, tests/cond4.test, tests/cond5.test,
+ tests/cond6.test, tests/cond7.test, tests/cond8.test,
+ tests/cond9.test, tests/condd.test, tests/condincl.test,
+ tests/condincl2.test, tests/condlib.test, tests/condman.test,
+ tests/condman2.test, tests/conf2.test, tests/confdeps.test,
+ tests/confdist.test, tests/confh.test, tests/confh4.test,
+ tests/config.test, tests/confincl.test, tests/confsub.test,
+ tests/confvar.test, tests/confvar2.test, tests/copy.test,
+ tests/ctarget1.test, tests/cxx.test, tests/cxx2.test,
+ tests/cxxansi.test, tests/cxxcpp.test, tests/cxxlibobj.test,
+ tests/cxxlink.test, tests/cxxnoc.test, tests/cxxo.test,
+ tests/cygwin32.test, tests/dash.test, tests/defun.test,
+ tests/defun2.test, tests/dejagnu.test, tests/dejagnu2.test,
+ tests/depacl.test, tests/depacl2.test, tests/depcomp.test,
+ tests/depcomp2.test, tests/depdist.test, tests/depend.test,
+ tests/depend2.test, tests/depend3.test, tests/depend4.test,
+ tests/destdir.test, tests/dirforbid.test, tests/dirlist.test,
+ tests/discover.test, tests/distcommon.test,
+ tests/distcommon2.test, tests/distcommon3.test,
+ tests/distdir.test, tests/distname.test, tests/dollar.test,
+ tests/double.test, tests/dup2.test, tests/dup3.test,
+ tests/else.test, tests/empty.test, tests/empty2.test,
+ tests/empty3.test, tests/empty4.test, tests/error.test,
+ tests/exdir.test, tests/exdir2.test, tests/exeext.test,
+ tests/exeext2.test, tests/exsource.test, tests/ext.test,
+ tests/ext2.test, tests/extra.test, tests/extra2.test,
+ tests/extra3.test, tests/extra4.test, tests/extra5.test,
+ tests/extra6.test, tests/extra7.test, tests/flibs.test,
+ tests/fnoc.test, tests/fo.test, tests/fonly.test,
+ tests/fortdep.test, tests/fpinst2.test, tests/fpinstall.test,
+ tests/gcj.test, tests/gcj2.test, tests/gcj3.test, tests/gcj4.test,
+ tests/gcj5.test, tests/getopt.test, tests/gettext.test,
+ tests/gettext2.test, tests/gnits.test, tests/gnits2.test,
+ tests/gnits3.test, tests/gnuwarn.test, tests/header.test,
+ tests/implicit.test, tests/include.test, tests/include2.test,
+ tests/info.test, tests/insh.test, tests/insh2.test,
+ tests/install.test, tests/install2.test, tests/installdir.test,
+ tests/installsh.test, tests/instdata.test, tests/instdata2.test,
+ tests/instexec.test, tests/insthook.test, tests/instman.test,
+ tests/instman2.test, tests/interp.test, tests/interp2.test,
+ tests/java.test, tests/java2.test, tests/javaprim.test,
+ tests/javasubst.test, tests/ldadd.test, tests/ldflags.test,
+ tests/lex.test, tests/lex2.test, tests/lex3.test, tests/lex4.test,
+ tests/lex5.test, tests/libobj10.test, tests/libobj11.test,
+ tests/libobj2.test, tests/libobj3.test, tests/libobj4.test,
+ tests/libobj5.test, tests/libobj7.test, tests/libobj8.test,
+ tests/library.test, tests/library2.test, tests/libtool.test,
+ tests/libtool2.test, tests/libtool3.test, tests/libtool4.test,
+ tests/link_c_cxx.test, tests/link_dist.test, tests/link_f_c.test,
+ tests/link_f_c_cxx.test, tests/link_f_cxx.test,
+ tests/link_f_only.test, tests/lisp.test, tests/lisp2.test,
+ tests/listval.test, tests/ltdeps.test, tests/ltlibobjs.test,
+ tests/maintclean.test, tests/make.test, tests/makevars.test,
+ tests/man.test, tests/man2.test, tests/mclean.test,
+ tests/mdate.test, tests/mdate2.test, tests/mdate3.test,
+ tests/mdate4.test, tests/mkinst2.test, tests/mkinstall.test,
+ tests/nobase.test, tests/nodefine.test, tests/nodefine2.test,
+ tests/nodep.test, tests/nodepcomp.test, tests/nodist.test,
+ tests/nodist2.test, tests/noinst.test, tests/noinstdir.test,
+ tests/nolink.test, tests/nostdinc.test, tests/number.test,
+ tests/obsolete.test, tests/order.test, tests/outdir.test,
+ tests/output.test, tests/output2.test, tests/output3.test,
+ tests/output4.test, tests/output5.test, tests/package.test,
+ tests/parse.test, tests/percent.test, tests/pluseq.test,
+ tests/pluseq2.test, tests/pluseq3.test, tests/pluseq4.test,
+ tests/pluseq5.test, tests/pluseq6.test, tests/pluseq7.test,
+ tests/pluseq8.test, tests/pluseq9.test, tests/postproc.test,
+ tests/ppf77.test, tests/pr2.test, tests/pr204.test,
+ tests/pr211.test, tests/pr220.test, tests/pr224.test,
+ tests/pr229.test, tests/pr243.test, tests/pr266.test,
+ tests/pr279-2.test, tests/pr279.test, tests/pr287.test,
+ tests/pr300-lib.test, tests/pr300-ltlib.test,
+ tests/pr300-prog.test, tests/pr307.test, tests/pr72.test,
+ tests/pr87.test, tests/pr9.test, tests/prefix.test,
+ tests/primary.test, tests/primary2.test, tests/proginst.test,
+ tests/python.test, tests/python2.test, tests/ranlib.test,
+ tests/recurs.test, tests/recurs2.test, tests/remake.test,
+ tests/remake2.test, tests/remake3.test, tests/req.test,
+ tests/required.test, tests/required2.test, tests/rulepat.test,
+ tests/scripts.test, tests/seenc.test, tests/sinclude.test,
+ tests/sourcesub.test, tests/sourcesub2.test, tests/space.test,
+ tests/specflags.test, tests/specflags2.test,
+ tests/specflags3.test, tests/specflags6.test,
+ tests/specflags7.test, tests/specflags8.test,
+ tests/specflags9.test, tests/spell.test, tests/spell2.test,
+ tests/spell3.test, tests/spelling.test, tests/stamph.test,
+ tests/stamph2.test, tests/stdlib.test, tests/strip.test,
+ tests/subdir.test, tests/subdir2.test, tests/subdir3.test,
+ tests/subdir4.test, tests/subdir5.test, tests/subdir6.test,
+ tests/subdir7.test, tests/subdirbuiltsources.test,
+ tests/subdircond.test, tests/subdircond2.test,
+ tests/subdircond3.test, tests/subobj.test, tests/subobj2.test,
+ tests/subobj3.test, tests/subobj4.test, tests/subobj5.test,
+ tests/subobj6.test, tests/subobj7.test, tests/subobj8.test,
+ tests/subobj9.test, tests/subobjname.test, tests/subpkg.test,
+ tests/subst.test, tests/substref.test, tests/substtarg.test,
+ tests/suffix.test, tests/suffix10.test, tests/suffix2.test,
+ tests/suffix3.test, tests/suffix4.test, tests/suffix5.test,
+ tests/suffix6.test, tests/suffix7.test, tests/suffix8.test,
+ tests/suffix9.test, tests/symlink.test, tests/symlink2.test,
+ tests/symlink3.test, tests/syntax.test, tests/tags.test,
+ tests/tagsub.test, tests/target-cflags.test, tests/target.test,
+ tests/texinfo.test, tests/texinfo10.test, tests/texinfo13.test,
+ tests/texinfo16.test, tests/texinfo2.test, tests/texinfo3.test,
+ tests/texinfo4.test, tests/texinfo5.test, tests/texinfo6.test,
+ tests/texinfo7.test, tests/texinfo8.test, tests/texinfo9.test,
+ tests/transform.test, tests/unused.test, tests/vars.test,
+ tests/vars2.test, tests/vars3.test, tests/vartar.test,
+ tests/version.test, tests/version2.test, tests/version3.test,
+ tests/version4.test, tests/version5.test, tests/version6.test,
+ tests/vpath.test, tests/vtexi.test, tests/vtexi2.test,
+ tests/warnopts.test, tests/werror.test, tests/whoami.test,
+ tests/xsource.test, tests/yacc.test, tests/yacc2.test,
+ tests/yacc3.test, tests/yacc4.test, tests/yacc5.test,
+ tests/yacc6.test, tests/yacc7.test, tests/yacc8.test,
+ tests/yaccpp.test, tests/yaccvpath.test: Add copyright notice.
+ Source ./defs instead of $srcdir/defs.
+
+2002-09-05 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * lib/am/distdir.am (distcheck): Strip $(srcdir) prefix on
+ distributed files, to workaround Sun make VPATH munging.
+ This fixes subdircond2.test, subdircond3.test, and subpkg.test
+ on Solaris.
+ * tests/extra6.test, tests/lex3.test, tests/pr87.test,
+ tests/pr9.test, tests/target-cflags.test, tests/texinfo13.test,
+ tests/texinfo16.test, tests/yacc7.test, tests/yaccvpath.test:
+ Don't require GNU make.
+
+ * lib/am/distdir.am (distcheck): Add missing `;'.
+
+ * lib/am/scripts.am (installcheck-%DIR%SCRIPTS): Account for
+ Sun make rewriting rules in VPATH builds. (Fixes gnits3.test.)
+ * lib/am/progs.am (installcheck-%DIR%PROGRAMS): Likewise.
+
+2002-09-04 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ For automake/354:
+ * lib/am/texibuild.am (%SOURCE_SUFFIX%.dvi, %SOURCE_SUFFIX%.pdf):
+ Don't use `-o' unless necessary.
+
+2002-08-25 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ For PR automake/343:
+ * automake.in (scan_texinfo_file) <clean_suffixes>: Remove dvi, ps,
+ and pdf.
+ (output_texinfo_build_rules): Define %DIRSTAMP% when processing
+ texibuild.am. Return $dirstamp and a list of files to clean.
+ (handle_texinfo_helper): Process texi-vers.am after the call to
+ output_texinfo_build_rules and use $dirstamp to define %DIRSTAMP%.
+ * lib/am/texi-vers.am (%STAMPVTI%): Build %DIRSTAMP% if needed.
+ * lib/am/texibuild.am (%DEST_PREFIX%%DEST_SUFFIX%): Likewise.
+ (%DEST_PREFIX%.dvi, %DEST_PREFIX%.pdf): Depend on %DIRSTAMP%.
+ * tests/texinfo13.test: New file.
+ * tests/Makefile.am (TESTS): Add texinfo13.test.
+ * lib/am/texinfos.am (install-info-am, dist-info): Looks for
+ info files in build or source directory.
+ This completes the change from 2002-07-30 (for PR automake/168).
+
+2002-08-24 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (CLEAN, MAINTAINER_CLEAN): New constants.
+ (maintainer_clean_files): Replace by ...
+ (clean_files): ... this new variable.
+ (initialize_per_input, lang_yacc_target_hook,
+ lang_lex_target_hook): Use %clean_files instead of
+ @maintainer_clean_files.
+ (handle_clean): Rewrite, using %clean_files.
+ (require_build_directory_maybe): Use %clean_files instead
+ of %compile_clean_files. This allows using
+ &require_build_directory_maybe for non-compiling targets.
+ * lib/am/clean.am (mostlyclean-generic, clean-generic,
+ distclean-generic, maintainer-clean-generic): Rewrite using
+ %MOSTLYCLEAN_RMS%, %CLEAN_RMS%, %DISTCLEAN_RMS%, and
+ %MAINTAINER_CLEAN_RMS%.
+
+ For Debian Bug#157778:
+ * m4/python.m4: Fix output of `python' in checking messages
+ when no version of Python is required.
+
+2002-08-23 Raja R Harinath <harinath@cs.umn.edu>
+
+ * lib/am/depend2.am (%EXT%.lo): Fix typo. Rename the file that
+ was generated by gcc -MF.
+
+2002-08-23 Pavel Roskin <proski@gnu.org>
+
+ * lib/am/progs.am: Exit in case of install failure, otherwise
+ it is ignored on Cygwin because of the surrounding "for" loop.
+
+2002-08-23 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.texi (Top level): More words about conditional
+ subdirectories. Don't mention AC_PROG_MAKE_SET.
+ * tests/subdircond2.test, tests/subdircond3.test: New files.
+ * tests/Makefile.am (TESTS): Add them.
+
+ For PR automake/347:
+ * automake.in (MACRO_PATTERN): Allow `.' in variable names.
+ (scan_variable_expansions, check_variable_expansions): New functions.
+ (macro_define): Call check_variable_expansions.
+ (read_am_file): Likewise, when outputing rules.
+ (variable_conditions_recursive_sub): Simplify using
+ scan_variable_expansions.
+ * tests/vars3.test: New file.
+ * tests/Makefile.am (TESTS): Add vars3.test.
+ * tests/colneq.test: Use -Wno-portability.
+
+ * lib/Automake/Channels.pm (buffering, backlog): New variables.
+ (buffer_messages, flush_messages): New functions.
+ (@EXPORT): Add buffer_messages and flush_messages.
+ * automake.in (generate_makefile): Call buffer_messages and
+ flush_messages to buffer warnings until AUTOMAKE_OPTIONS has
+ been read.
+
+ * automake.in (read_am_file): Fix computation of path to
+ included file when $(top_srcdir) is not used.
+ * tests/include2.test: Augment.
+
+2002-08-22 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (set_strictness): Never enable 'portability'
+ warnings for now.
+ (usage): Adjust `-Wportability' doc.
+ * automake.texi (Invoking Automake): Likewise.
+ Suggested by Ralf Corsepius.
+
+2002-08-21 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * lib/am/ltlib.am (clean-%DIR%LTLIBRARIES): Fix cleanup of
+ so_location files in current directory.
+
+ Fix for PR automake/346:
+ * automake.texi (Optional): Suppress the documentation for
+ AC_PATH_XTRA, AC_FUNC_ALLOCA, AC_FUNC_ERROR_AT_LINE, AC_FUNC_FNMATCH,
+ AC_FUNC_GETLOADAVG, AC_FUNC_MEMCMP, AC_FUNC_MKTIME, AC_FUNC_OBSTACK,
+ AC_FUNC_STRTOD, AC_REPLACE_FUNCS, AC_REPLACE_GNU_GETOPT,
+ AC_STRUCT_ST_BLOCKS, AM_WITH_REGEX, AC_CHECK_TOOL, AC_CHECK_PROG,
+ AC_CHECK_PROGS, AC_PATH_PROG, and AC_PATH_PROGS. Augment the
+ documentation of AC_LIBSOURCE and AC_SUBST to explain this
+ applies to any macro that calls them.
+
+2002-08-19 Tom Tromey <tromey@redhat.com>
+
+ For PR automake/348:
+ * tests/Makefile.am (TESTS): Added include2.test.
+ * tests/include2.test: New file.
+ * tests/include.test: Check to make sure include file is
+ distributed.
+ * automake.in (read_am_file): Distribute included files.
+
+2002-08-19 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ Fix for PR automake/345:
+ * tests/defs: Add support for required=non-root, stolen
+ from fileutils' test suite.
+ * tests/destdir.test: Use required=non-root.
+
+ * tests/vtexi.test: Fix spurious failure introduced on 2002-07-30.
+
+2002-08-17 Tom Tromey <tromey@redhat.com>
+
+ For PR automake/347:
+ * automake.in (rule_define): Given portability warning if "%" seen
+ in target name.
+ (TARGET_PATTERN): Added `%'.
+ * tests/Makefile.am (TESTS): Added percent.test.
+ * tests/percent.test: New file.
+
+2002-08-15 Art Haas <ahaas@neosoft.com>
+
+ * lib/am/depend2.am: Use correct name for dependency file in
+ libtool fastdep case.
+
+2002-08-14 Art Haas <ahaas@neosoft.com>
+
+ * lib/am/depend2.am: Added missing `;'.
+
+2002-08-02 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.texi (Python): Fix wording.
+
+ * tests/ext2.test: New file. This bug is present in Automake 1.6.3
+ and was fixed by the change on variable_conditions_permutations
+ and invert_conditions on 2002-05-16.
+ * tests/Makefile.am (TESTS): Add ext2.test.
+ Reported by Ladislav Strojil.
+
+2002-08-01 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * aclocal.in (parse_arguments): Add `dirlist' paths add the
+ very end of the search path, after aclocal-APIVERSION/ and
+ aclocal/.
+ * automake.texi (Macro search path): Adjust to reflect the
+ new ordering.
+ * tests/dirlist.test: Check for this.
+
+2002-07-31 Charles Wilson <cwilson@ece.gatech.edu>
+
+ * aclocal.in (parse_arguments): Add support for extending
+ default macro search path, using a `dirlist' file within
+ the aclocal directory.
+ * automake.texi (Invoking aclocal): Move option descriptions into ...
+ (aclocal options): ... this new node.
+ (Macro search path): New node.
+ * tests/dirlist.test: New file.
+ * tests/Makefile.am (TESTS): Add dirlist.test.
+ * m4/dirlist: New file.
+ * m4/Makefile.am (EXTRA_DIST): Add dirlist.
+ * tests/defs: Honor any installed dirlist when searching for
+ libtool.m4 and gettext.m4.
+
+2002-07-30 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ Build info files in builddir instead of srcdir (for PR automake/168),
+ and prepare support for info files in subdirecties.
+ * automake.in (output_texinfo_build_rules): New function.
+ (handle_texinfo_helper): Use output_texinfo_build_rules, and
+ prepare to support subdir texinfos. Define am__TEXINFO_TEX_DIR.
+ * lib/am/texi-vers.am: Build version.texi and stamp-vti in the
+ current directory, not $(srcdir). Use %STAMPVTI% to name the stamp
+ file.
+ * lib/am/texibuild.am: Rewrite to output files in the current
+ directory, not $(srcdir). Also, support both generic and
+ non-generic output. Pass `-o $@' to makeinfo, texinfo, and
+ texi2dvi (for PR automake/339).
+ * tests/texinfo3.test: Make sure the `.texi:' rule is output.
+ * tests/texinfo10.test: Use set -e, so the checks are not ignored.
+ * tests/texinfo16.test: New file.
+ * tests/Makefile.am (TESTS): Add texinfo16.test.
+
+2002-07-29 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * aclocal.in (write_aclocal): Don't write the filename ($output_file)
+ in the aclocal.m4 header.
+
+ * configure.in: Require Autoconf 2.53b.
+
+2002-07-28 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * configure.in: Bump version to 1.6c.
+
+ * configure.in: Bump version to 1.6b.
+ * lib/config.guess, lib/config.sub, lib/Automake/XFile.pm: New
+ upstream versions.
+ * automake.in: Don't write @ALLOCA@ and @LIBOBJS@ in clear text,
+ since this file is processed by config.status.
+
+2002-07-25 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (read_am_file): Escaped newlines in comments are not
+ portable. If a comment line doesn't start with a `#', add it.
+ * tests/comment6.test: Ensure this is done.
+
+2002-07-24 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ Fix failures reported by Patrick Welche on NetBSD.
+ * tests/gnits2.test, tests/gnits3.test: Don't trust the exit
+ status of `make -k'.
+ * tests/obsolete.test: Source obs.1 and obs.2 from current
+ directory.
+
+2002-07-23 Patrick Welche <prlw1@newn.cam.ac.uk>
+
+ * lib/am/configure.am (am__CONFIG_DISTCLEAN_FILES): Add
+ configure.lineno.
+
+2002-07-23 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/required2.test: New file.
+ * tests/Makefile.am (TESTS): Add required2.test.
+ * automake.in (initialize_per_input): Remove %require_file_found
+ setting. This reverts my change of 2002-04-19.
+ (require_file_internal): Use the full name of a file as a
+ key in %require_file_found, not only the basename.
+ Reported by Andrew Suffield.
+
+2002-07-22 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (handle_subdirs): Warn if `obj' appears in SUBDIRS.
+ * tests/subdir7.test: New file.
+ * tests/Makefile.am (TESTS): Add subdir7.test.
+
+ * lib/mkinstalldirs: Remove Id keyword.
+
+ * lib/am/progs.am (installcheck-%DIR%PROGRAMS): Honor
+ AM_INSTALLCHECK_STD_OPTIONS_EXEMPT.
+ * lib/am/scripts.am (installcheck-%DIR%SCRIPTS): Likewise.
+ * automake.texi (Options) <std-options>: Document
+ AM_INSTALLCHECK_STD_OPTIONS_EXEMPT.
+ (Gnits): Reference std-options.
+ * tests/gnits3.test: New file.
+ * tests/Makefile.am (TESTS): Add gnits3.test.
+ Suggested by Jim Meyering.
+
+2002-07-20 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/gnits2.test: Use --program-prefix. Test for scripts too.
+ Replace the sed script by calls to grep, easier to debug.
+ * lib/am/progs.am (installcheck-%DIR%PROGRAMS): Honor nobase
+ and $(transform).
+ * lib/am/scripts.am (installcheck-%DIR%SCRIPTS): Likewise.
+
+ * lib/am/progs.am (install-%DIR%PROGRAMS, uninstall-%DIR%PROGRAMS):
+ Always strip the directory part before applying $(transform),
+ even for nobase_ targets.
+ * lib/am/scripts.am (install-%DIR%SCRIPTS, uninstall-%DIR%SCRIPTS):
+ Likewise.
+ * tests/nobase.test: Use --program-prefix while testing nobase
+ support.
+
+2002-07-19 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/dirname.test: Delete. We don't define _AM_DIRNAME anymore.
+ * tests/Makefile.am (TESTS): Remove dirname.test.
+
+ * m4/init.m4: Require Autoconf 2.53b.
+ * m4/header.m4 (AM_CONFIG_HEADER): Redefine using AU_DEFUN.
+ * m4/ccstdc.m4 (fp_PROG_CC_STDC): New AU_DEFUN.
+ * m4/dmalloc.m4 (fp_WITH_DMALLOC): Likewise.
+ * m4/lispdir.m4 (ud_PATH_LISPDIR): Likewise.
+ * m4/maintainer.m4 (jm_MAINTAINER_MODE): Likewise.
+ * m4/protos.m4 (fp_C_PROTOTYPES): Likewise.
+ * m4/regex.m4 (fp_WITH_REGEX): Likewise.
+ * m4/termios.m4: Delete. AM_SYS_POSIX_TERMIOS is now AU_DEFUNed
+ in m4/obsolete.m4.
+ * m4/winsz.m4: Delete. AM_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL is now
+ AU_DEFUNed in m4/obsolete.m4.
+ * m4/obsol-gt.m4, m4/obsol-lt.m4, m4/obsolete.m4 : New files.
+ * m4/Makefile.am (dist_m4data_DATA): Add obsol-gt.m4, obsol-lt.m4,
+ and obsolete.m4. Remove termios.m4 and winsz.m4.
+ * aclocal.in (obsolete, obsolete_rx): Remove.
+ (scan_configure): Don't grep for obsolete macros.
+ * tests/defs (AUTOUPDATE): Define.
+ * Makefile.am (maintainer-check): Check for misuses of autoupdate.
+ * tests/obsolete.test: Rewrite. Exercize the AU_DEFUN macros from
+ m4/obsolete.m4.
+
+ Fix for PR automake/338:
+ * automake.in (seen_gettext_external): New variable.
+ (handle_gettext): Conditionalize the intl/ check on
+ $seen_gettext_external. Fix grep usage.
+ (scan_autoconf_traces): Set $seen_gettext_external if
+ `external' is passed to AM_GNU_GETTEXT.
+ * tests/gettext.test, tests/gettext2.test: New files.
+ * tests/Makefile.am (TESTS): Add gettext.test and gettext2.test.
+
+2002-07-18 Alexandre Duret-Lutz <duret_g@epita.fr>
+ Akim Demaille <akim@epita.fr>
+
+ * m4/header.m4 (_AM_DIRNAME, _AM_STAMP, _AM_CONFIG_HEADER,
+ _AM_CONFIG_HEADER_INSINUATE): Remove them all. Leave just ...
+ (AM_CONFIG_HEADER): ... this new definition for compatibility.
+ * m4/init.m4: Don't call _AM_CONFIG_HEADER_INSINUATE.
+ (_AC_AM_CONFIG_HEADER_HOOK): New macro.
+ * tests/confh5.tests: Delete.
+ * tests/Makefile.am (TESTS): Remove confh5.tests.
+
+2002-07-16 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (handle_single_transform_list): Typo.
+
+ * lib/Automake/Channels.pm (dup_channel_setup,
+ drop_channel_setup): New functions.
+ (@EXPORT): Add them.
+ * automake.in (generate_makefile): Call dup_channel_setup and
+ drop_channel_setup.
+ (process_option_list): Recognize --warnings and -W options.
+ * automake.texi (Options): Document them.
+ * tests/pluseq5.test: Check that -Wno-obsolete will disable the
+ warning.
+ * tests/warnopts.test: New file.
+ * tests/Makefile.am (TESTS): Add warnopts.test.
+
+2002-07-12 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in: Register warning channel `gnu'.
+ (set_strictness): Turn on `gnu' in --gnu and --gnits.
+ (usage): Mention the `gnu' category.
+ (%var_is_am): Replace by ...
+ (%var_owner): ... this, which uses ...
+ (VAR_AUTOMAKE, VAR_CONFIGURE, VAR_MAKEFILE): ... these new constants.
+ Adjust all uses of %var_is_am.
+ (handle_languages): Warn about user variables being overriden.
+ (require_variables): Also check %configure_vars for the existence
+ of a required variable.
+ * automake.texi (Invoking Automake): Document -Wgnu.
+ * tests/yacc2.test, tests/yacc3.test: Use -Wno-gnu when
+ we test YFLAGS.
+ * tests/gnuwarn.test: New file.
+ * tests/Makefile.am (TESTS): Add gnuwarn.test.
+
+2002-07-11 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ Fix for PR automake/337:
+ * automake.in: Redefine the `flags' attribute of each language
+ as a list. List CPPFLAGS in `flags' when it is used.
+ (register_language): Set the default value of 'flags'.
+ (handle_single_transform_list): Adjust to treat `flags' as a list.
+ (handle_languages): Likewise. Don't bother defining the
+ configure variable for `c', this is always done since we trace
+ configure.ac.
+ * automake.texi (etags): Use per-executable _CPPFLAGS.
+ (Program and Library Variables): Mention maude_CPPFLAGS.
+ (Program variables): Likewise.
+ * tests/specflags8.test: Use _CPPFLAGS instead of _CFLAGS.
+ * tests/specflags9.test: New file.
+ * tests/Makefile.am (TESTS): Add specflag9.test.
+
+2002-07-10 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.texi: Use `variable' instead of `macro' everywhere it
+ designates a Makefile variable.
+ (Texinfo): `VERSION', `UPDATED', `EDITION', and `UPDATED-MONTH' are
+ `flags', not `macros'. `Macro' means something else in Texinfo.
+ Also show how to use these flags.
+ * automake.in (file_contents_internal): s/macro/variable/ in
+ error message.
+
+ * automake.in (parse_arguments): Call Getopt twice: once to catch
+ --help or --verbose, and once to process the other arguments.
+ (usage, verbose): Always exit 0, ignoring $exit_code (which anyway
+ should always be 0 because of the change to parse_arguments).
+ * tests/Makefile.am (TESTS): Add getopt.test.
+ * tests/getopt.test: New file.
+
+2002-07-09 Tom Tromey <tromey@redhat.com>
+
+ For PR automake/286:
+ * automake.texi (Tags): Document ctags.
+ * automake.in (handle_tags): Handle ctags.
+ * lib/am/tags.am (CTAGS): New macro.
+ (CTAGSFLAGS): Likewise.
+ (ctags): New target.
+ (distclean-tags): Remove `tags'.
+
+ * lib/am/depend2.am: Reworked syntax to avoid parsing problem.
+
+ * lib/am/depend2.am: Search in srcdir and builddir for %SOURCE%
+ before passing to cygpath. Partial fix for PR automake/334.
+
+2002-07-09 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (generate_makefile): Suggest using AM_CPPFLAGS
+ instead of INCLUDES.
+ * tests/pluseq5.test: Check that AM_CPPFLAGS is suggested.
+
+2002-07-09 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (usage, version): Honor $exit_code.
+ (parse_arguments): Use fatal.
+
+2002-07-09 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.texi (Invoking Automake): Document WARNINGS.
+ * automake.in (switch_warning, parse_WARNINGS): New function.
+ (setup_warnings): Rename to ...
+ (parse_warnings): ... this. Move most of the code to switch_warning.
+ Accept a comma separated list of categories.
+ * tests/vars2.test: Use a comma separated list of warning categories.
+
+2002-07-08 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * NEWS (New in 1.6): Mention that libtoolize is no longer run
+ by automake.
+
+2002-07-08 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ Fix for PR automake/291:
+ * automake.in (macro_define): Catch variable names starting
+ with `_'.
+ (handle_installdirs): Rename _am_installdirs to am__installdirs.
+ * lib/am/data.am, lib/am/install.am, lib/am/libs.am,
+ lib/am/lisp.am, lib/am/ltlibs.am, lib/am/mans.am,
+ lib/am/progs.am, lib/am/python.am, lib/am/scripts.am,
+ lib/am/texinfos.am: Likewise.
+ * tests/canon5.test: Use -Wno-portability.
+ * tests/vars2.test: New file.
+ * tests/Makefile.am (TESTS): Add vars2.test.
+
+2002-07-08 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/defs (AUTOMAKE): Add -Wall.
+ * tests/outdir.test: Use -Wno-obsolete.
+
+2002-07-07 Tom Tromey <tromey@redhat.com>
+
+ * m4/depend.m4 (_AM_DEPENDENCIES): Compute am__fastdep<compiler>
+ conditional.
+ * automake.in (handle_languages): Compute FASTDEP.
+ * lib/am/depend2.am: Added %FASTDEP% mode.
+
+2002-07-07 Tom Tromey <tromey@redhat.com>
+
+ * automake.texi (Optional): AM_MAINTAINER_MODE is ok in Gnits mode
+ now. Fixes PR automake/332.
+
+2002-07-06 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/nobase.test (test-install-exec): Move all the `test -f'
+ tests in the Makefile so we can use $(EXEEXT) on programs.
+ Reported by Charles Wilson.
+
+2002-07-06 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * m4/header.m4 (AM_CONFIG_HEADER): New macro.
+ * tests/confh5.test: Make sure that Autoconf complains if
+ AM_CONFIG_HEADER or AC_CONFIG_HEADERS is called before
+ AM_INIT_AUTOMAKE.
+
+2002-07-06 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * lib/Automake/Channels.pm: New file.
+ * lib/Automake/Makefile.am (dist_perllib_DATA): Add Channels.pm.
+ * automake.in: Use Automake::Channels and register some channels
+ for errors and warnings.
+ ($exit_status): Remove, replaced by Channels::$exit_code.
+ (%required_variables): Remove, Channels will filter-out duplicates
+ itself.
+ (initialize_per_input): Call reset_local_duplicates.
+ (prog_error): Adjust to all `msg'.
+ (setup_warnings): New functions.
+ (parse_arguments): Accept -W CATEGORY and --warnings=CATEGORY,
+ call setup_warnings.
+ (usage): Update usage text accordingly.
+ (macro_dump, macros_dump): Return the dump as a string instead
+ of printing it.
+ (am_install_var) <$warned_about_extra>: Remove, Channels will
+ filter-out duplicates itself.
+ (set_strictness): Turn on/off channels for each stricness.
+ (err, fatal, err_var, err_target, err_am, err_ac, msg_var,
+ msg_target, msg_am, msg_ac, reject_var, reject_target, verb):
+ New functions, to replace ...
+ (print_error, am_error, file_error, macro_error, target_error,
+ conf_error, file_warning): ... these functions. Remove them.
+ Update all the code to use the new functions. The rough
+ correspondance is
+ am_error -> err_am
+ file_error -> err
+ macro_error -> err_var
+ target_error -> err_target
+ conf_error -> err_ac
+ die -> fatal
+ macro_error if defined -> reject_var
+ target_error if defined -> reject_target
+ verbose -> verb
+ * automake.texi (Invoking Automake): Document -W and --warnings.
+ Remove the documentation for --Werror and --Wno-error.
+ * tests/defs: Use -Werror, not --Werror.
+ * tests/exeext2.test: Test that the error message
+ is enabled with -Wobsolete.
+ * tests/output5.test: Rewrite to test that Automake complains
+ when there is no Makefile specified. (The original test was
+ succeeding for the wrong reason.)
+ * tests/seenc.test: Don't use --Wno-error, there is no reason now
+ that -Werror doesn't stop after the first error.
+ * tests/subobj.test: Use --add-missing, and check that
+ `compile' is installed and that Automake says so.
+ * tests/subobj2.test: Don't create `compile'.
+
+2002-07-05 Tom Tromey <tromey@redhat.com>
+
+ * automake.texi (Java Support): Mention --main and _LDFLAGS.
+ For PR automake/324.
+
+2002-07-04 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/asm.test: Erase Autom4te's cache between each test.
+
+2002-07-03 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (am_macro_for_var): Add LIBTOOL.
+ (ac_macro_for_var): Add RANLIB.
+ (seen_libtool): Remove.
+ (handle_libtool, lang_c_finish, define_compiler_variable,
+ make_paragraphs): Use
+ variable_defined ('LIBTOOL') instead of $seen_libtool.
+ (handle_languages) <%transform>: Don't set 'LIBTOOL', it is
+ already done in make_paragraphs.
+ (handle_libraries): Simplify by requiring RANLIB with
+ &require_variables_for_macro.
+ (handle_ltlibraries): Simplify by requiring LIBTOOL with
+ &require_variables_for_macro.
+ (scan_autoconf_traces): Don't trace for AC_PROG_LIBTOOL and
+ AM_PROG_LIBTOOL.
+ * tests/libtool4.test, tests/library2.test: New files.
+ * tests/Makefile.in (TESTS): Add libtool4.test and library2.test.
+
+2002-07-02 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (create, keyed_aclocal_warning): Delete, unused.
+
+2002-07-01 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (ac_macro_for_var): Add YACC.
+
+2002-07-01 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ Handle multiple suffix rules with the same input extension.
+ For PR automake/37.
+
+ * automake.in (suffix_rules_default): New variable.
+ (suffix_rules): Redefine as a hash of hashes of pairs.
+ (initialize_per_input): Setup suffix_rules_default from
+ suffix_rules on first call, an override suffix_rules
+ with suffix_rules_default on following calls.
+ (struct) <output_extensions>: New attribute.
+ (register_language): Set the default for output_extensions.
+ Call register_suffix_rule for each suffix.
+ (derive_suffix, handle_languages): Adjust to the new definition
+ of $suffix.
+ (register_suffix_rule): New function.
+ (rule_define): Call register_suffix_rule.
+ * tests/suffix8.test, tests/suffix9.test, tests/suffix10.test:
+ New files.
+ * tests/Makefile.am (TESTS): Add them.
+
+2002-06-30 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (am_macro_for_var, ac_macro_for_var,
+ required_variables): New variables.
+ (am_c_prototypes, seen_prog_lex, am_lispdir_location,
+ pythondir_location): Remove.
+ (initialize_per_input): Clear %required_variables.
+ (require_variables, require_variables_for_macro): New functions.
+ (handle_languages): Call &require_variables for $lang->config_vars.
+ (handle_compile): Call &require_variables_for_macro for the
+ ANSI2KNR and U variables.
+ (handle_emacs_lisp): Call &require_variables for EMACS and libdir.
+ (handle_python): Call &require_variables for PYTHON. Don't
+ explicitly allow `python' as a prefix for PYTHON.
+ (scan_autoconf_traces): Don't scan AC_PROG_LEX, AM_C_PROTOTYPES,
+ AM_PATH_LISPDIR, and AM_PATH_PYTHON.
+ (scan_autoconf_traces) <AC_SUBST>: Don't filter out ANSI2KNR and
+ AMDEPBACKSLASH here...
+ (define_configure_variable): ... do this here.
+ (am_primary_prefixes): Probe the existence of ${X}dir using
+ &require_variables_for_macro. If a standard prefix is not
+ legitimate, say so. Ignore all configure variables.
+ * tests/ansi8.test, tests/cxx2.test, tests/gcj5.test,
+ tests/lisp2.test, tests/python2.test: New files
+ * tests/Makefile.am (TESTS): Add them.
+ * tests/asm.test: Grep stderr.
+ * tests/lex2.test: Rewrite to test that Automake suggests AM_PROG_LEX.
+ * tests/python.test: Make sure py-compile is installed.
+
+2002-06-27 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (LANG_IGNORE, LANG_PROCESS, LANG_SUBDIR,
+ COMPILE_LIBTOOL, COMPILE_ORDINARY): Redefine as constants.
+ Adjust all occurrences.
+
+2002-06-27 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * aclocal.in: Add local variables so that Emacs setups GNU style
+ for perl-mode and cperl-mode.
+ * automake.in: Likewise.
+ (WHITE_PATTERN, RULE_PATTERN, SUFFIX_RULE_PATTERN, MACRO_PATTERN,
+ ASSIGNMENT_PATTERN, IF_PATTERN, ELSE_PATTERN, ENDIF_PATTERN,
+ INCLUDE_PATTERN, EXEC_DIR_PATTERN): Write $ as "\$" to please
+ perl-mode.
+
+2002-06-27 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * Makefile.am (fetch): Fetch install-sh from Autoconf CVS.
+ * lib/config.sub, lib/install-sh: New upstream versions.
+
+2002-06-26 Paul Eggert <eggert@twinsun.com>
+
+ * Makefile.am (maintainer-check): Don't assume that egrep exists;
+ this fixes a portability bug introduced in the 2002-06-08 fix for
+ PR automake/317.
+
+2002-06-26 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (required_targets): Add ps and ps-am.
+ (initialize_per_input): Reset them.
+ (handle_texinfo_helper): Fill @pss_list, and define the
+ PSS make variable.
+ * lib/am/texinfos.am (RECURSIVE_TARGETS): Add ps-recursive.
+ (ps, ps-am): New targets.
+ * automake.texi (Auxiliary Programs) <texinfo.tex>: Mention
+ `make ps' and `make pdf'.
+ (Texinfo): Document `make ps', `make pdf', and `make dvi'.
+ (Extending): The `ps' and `pdf' targets support a `-local' version.
+
+2002-06-26 Art Haas <ahaas@neosoft.com>
+
+ * automake.texi: s/.../@dots{}/.
+
+2002-06-26 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * configure.in: Check that ln works, fall back to `cp -p'.
+ * Makefile.am (install-exec-hook): Use $(LN) instead of ln.
+ Reported by Andreas Buening.
+
+2002-06-21 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in: Register &lang_lex_target_hook for lex and lexxx.
+ (lang_lex_target_hook): New function.
+ * tests/lex3.c: Complete to check that maintainer-clean erases
+ Lex's output.
+ Reported by Flavien Astraud. This was lost on 2001-06-23 too.
+
+2002-06-21 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (lang_yacc_target_hook): Add $output to
+ @maintainer_clean_files. This was lost on 2001-06-23.
+ * tests/yacc7.test, tests/yacc4.test: Complete to check
+ that maintainer-clean erases YACC's output files,
+ respectively with and without `-d'.
+ Reported by Flavien Astraud.
+
+2002-06-19 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * lib/am/lang-compile.am (%FPFX%DEPMODE): Delete. This is now
+ traced from configure.ac.
+
+ * automake.in (macro_define): Don't accept to override an AC_SUBST
+ or Automake variable in a new condition.
+ * tests/cond23.test, tests/cond24.test: New file.
+ * tests/Makefile.am (TESTS): Add cond23.test and cond24.test.
+ Reported by Patrik Weiskirchre.
+
+2002-06-19 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/nobase.test, tests/pr204.test, tests/pr300-lib.test,
+ tests/pr300-ltlib.test, tests/pr300-prog.test,
+ tests/specflags7.test, tests/specflags8.test, tests/subdir5.test,
+ tests/subobj6.test, tests/subpkg.test, tests/transform.test:
+ Require gcc.
+
+2002-06-18 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/libtool2.test: Use required=libtoolize.
+ * tests/install2.test: Use required=gzip.
+
+2002-06-18 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/defs (required): Handle bison; set YACC automatically.
+ * tests/pr204.test, tests/yacc4.test, tests/yacc8.test,
+ tests/yaccvpath.test: Require bison. Don't set YACC.
+
+2002-06-18 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/defs (required): Handle `gcc' and `g++'; automatically
+ export CC and CXX when they are required.
+ * tests/ansi3.test, tests/ansi5.test, tests/ccnoco.test,
+ tests/cond4.test, tests/cond16.test, tests/cond18.test,
+ tests/cond19.test, tests/depcomp2.test, tests/depend2.test,
+ tests/lex3.test, tests/pr87.test, tests/pr220.test,
+ tests/substref.test, tests/target-cflags.test, tests/yacc4.test,
+ tests/yaccvpath.test: Require gcc. Don't pass CC=gcc to
+ configure.
+ * tests/subobj9.test: Require g++.
+
+2002-06-18 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/defs (required): Handle `GNUmake'.
+ (needs_gnu_make): Don't define anymore.
+ * tests/cond4.test, tests/cond18.test, tests/cond19.test,
+ tests/dollar.test, tests/exsource.test, tests/extra6.test,
+ tests/lex3.test, tests/make.test, tests/pr9.test, tests/pr87.test,
+ tests/subdir5.test, tests/target-cflags.test, tests/yacc7.test,
+ tests/yaccvpath.test: Use `required=GNUmake' instead of
+ `$needs_gnu_make'.
+
+2002-06-17 Paolo Bonzini <bonzini@gnu.org>
+
+ * automake.in (process_option_list): Recognize std-options.
+ (handle_options): Enable std-options in gnits strictness.
+ (am_install_var): If std-options, enable CK-OPTS section.
+ * lib/am/scripts.am (installcheck-am): New target.
+ * lib/am/progs.am (installcheck-am): New target.
+ * tests/gnits2.test: New file.
+ * tests/Makefile.am (TESTS): Add gnits2.test.
+ * automake.texi (Gnits, Options): Document std-options.
+
+2002-06-17 Kevin Ryde <user42@zip.com.au>
+
+ * automake.in (scan_texinfo_file): Add tmp to @clean_suffixes,
+ as generated by recent texinfo.tex.
+
+2002-06-14 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * m4/header.m4 (AM_CONFIG_HEADER): Rename to ...
+ (_AM_CONFIG_HEADERS): ... this.
+ (_AM_CONFIG_HEADER_INSINUATE): Define AC_CONFIG_HEADERS to
+ call _AM_CONFIG_HEADERS; and AM_CONFIG_HEADER to call
+ AC_CONFIG_HEADERS.
+ * automake.in (scan_autoconf_traces): Trace AC_CONFIG_HEADERS
+ instead of AM_CONFIG_HEADER.
+ * tests/autoheader2.test: New file.
+ * tests/Makefile.am (TESTS): Add autoheader2.test.
+ Suggested by Raja R Harinath.
+
+2002-06-13 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * m4/header.m4 (_AM_CONFIG_HEADER_INSINUATE): Use m4_copy instead
+ of m4_rename so that AC_CONFIG_HEADER is never undefined and
+ therefore still traced after the redefinition.
+ * tests/defs (AUTOHEADER): Define.
+ * tests/autoheader.test: New file.
+ * tests/Makefile.am (TESTS): Add autoheader.test.
+ Reported by Braden McDaniel.
+
+2002-06-13 Paolo Bonzini <bonzini@gnu.org>
+
+ * automake.in (check_gnu_standards): In --gnu mode, accept
+ one of COPTING, COPYING.LESSER, or COPYING.LIB.
+ (common_files): Add COPYING.LESSER.
+ * automake.texi (Gnits): Document this.
+
+2002-06-13 Paolo Bonzini <bonzini@gnu.org>
+
+ * automake.in (required_targets): Add the pdf and pdf-am targets.
+ (initialize_per_input): Likewise.
+ (scan_texinfo_file): Add pdf to @clean_suffixes.
+ (handle_texinfo_helper): Output the .pdf dependencies, and define
+ the PDFS variable.
+ * lib/am/texinfos.am (TEXI2PDF): New variable.
+ (pdf, pdf-am): New targets.
+ (.PHONY): Add pdf, pdf-am, and pdf-recursive.
+ * lib/am/texibuild.am (.%SUFFIX%.pdf): New rule.
+
+2002-06-13 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ Fix pr307.test failure with gcc 3.x.
+ * lib/depcomp (dashmstdout): Strip the call to libtool, and
+ replace `-o $object' by `-o /dev/null' before running "$@"
+ to generate dependencies.
+ (cpp): Strip the call to libtool as well as `-o $object'.
+
+2002-06-12 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * lib/depcomp (tru64): Expect dependency files in .libs/, maybe as
+ $base.lo.d, when libtool is used.
+ Reported by Nicolas Joly.
+
+2002-06-11 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * lib/am/java.am (class%DIR%.stamp): Don't run $(JAVAC) when there
+ is no file to compile.
+ * tests/java2.test: New file.
+ * tests/Makefile.am (TESTS): Add java2.test.
+ Reported by Braden N. McDaniel.
+
+2002-06-11 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/maintclean.test: Don't check for autom4te.cache if
+ it's not created by Autoconf.
+ Reported by Bernd Jendrissek.
+
+2002-06-11 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.texi (Tests): Document site.exp. Update DejaGnu's url.
+
+2002-06-10 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * lib/am/header-vars.am (transform): Define.
+ Was removed by mistake on 2002-04-13.
+ * tests/transform.test: New file.
+ * tests/Makefile.am (TESTS): Add transform.test.
+ Reported by Nicolas Joly.
+
+2002-06-10 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/dollar.test: Require GNU make.
+ * tests/maintclean.test: Don't use `export YACC=false'. Pass
+ YACC=false to configure instead.
+
+2002-06-10 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * lib/config.guess, lib/config.sub, lib/texinfo.tex, lib/INSTALL,
+ INSTALL: New upstream versions.
+
+2002-06-10 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/sinclude.test: Check for m4_include too.
+
+2002-06-10 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/sinclude.test: Rename the package as amsinclude;
+ am__sinclude still trigers the sinclude macro once it has been
+ converted to am--sinclude.
+ Reported by Nicolas Joly.
+
+2002-06-10 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.texi (API versioning): Typo.
+
+2002-06-10 Nicolas Joly <njoly@pasteur.fr>
+
+ * THANKS (Nicolas Joly): Remove duplicate.
+
+2002-06-10 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * Makefile.am (maintainer-check): Fix $MAKE -e detection.
+ * tests/yacc7.test: Use rm -f.
+
+2002-06-10 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/defs (ACLOCAL, AUTOMAKE): Use absolute paths.
+ * tests/subpkg.test: New file.
+ * tests/Makefile.am (TESTS): Add subpkg.test.
+
+2002-06-09 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ For PR automake/318:
+ * tests/nobase.test: Rewrite to test _HEADERS, _DATA, _SCRIPTS,
+ _PROGRAMS, _LIBRARIES, and _LTLIBRARIES.
+ * lib/am/scripts.am (install-%DIR%SCRIPTS,
+ uninstall-%DIR%SCRIPTS): Honor nobase_; strip the directory by
+ default.
+ (?%DIR%SCRIPT_INSTALL): New variable.
+ * lib/am/header-vars.am (install_sh_SCRIPT): New variable.
+ Reported by Eric Siegerman.
+
+2002-06-08 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (lang_yacc_target_hook): Add rule to recover from
+ the removal of $header.
+ * lib/am/yacc.am (%BASE%.h): Remove (duplicate with the one
+ output by lang_yacc_target_hook).
+ * tests/yacc7.test: Try to recreate foo.h after its removal.
+ * tests/yacc8.test: Add `AM_YFLAGS = -d' and try to recreate
+ parse.h too.
+ Reported by Bernd Jendrissek.
+
+2002-06-08 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ For PR automake/317:
+ * Makefile.am (maintainer-check): Disallow `for f in $(FILES)',
+ suggest `list='$(FILES)'; for f in $$list' instead.
+ * lib/am/distdir.am (distdir): Adjust `for' usage.
+ * lib/am/texinfos.am (maintainer-clean-aminfo): Likewise.
+ * tests/dollar.test: New file.
+ * tests/Makefile.am (TESTS): Add dollar.test.
+ Reported by Eric Siegerman and Philip Fong.
+
+2002-06-06 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ For PR automake/47 (fixed a long time ago):
+ * tests/yacc7.test: Also check that parser sources are distributed.
+
+2002-06-06 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * lib/am/configure.am (am__CONFIG_DISTCLEAN_FILES): New variable.
+ (distclean): Use it.
+ (maintainer-clean): Delete autom4te.cache and
+ $(am__CONFIG_DISTCLEAN_FILES).
+ * tests/maintclean.test: New file.
+ * tests/Makefile.am (TESTS): Add maintclean.test.
+
+2002-06-05 Miloslav Trmac <trmac@popelka.ms.mff.cuni.cz>
+
+ * lib/am/dejagnu.am (site.exp): Quote build_alias, host_alias, and
+ target_alias.
+
+2002-05-31 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * Makefile.am (maintainer-check): Check for egrep and fgrep.
+
+ * test/cond22.test: Set SHELL when calling $MAKE -e.
+
+2002-05-31 Richard Boulton <richard@tartarus.org>
+
+ Fix PR automake/326:
+ * automake.in (define_objects_from_sources): Calculate the result in
+ all conditions before passing this to subobjname to pick a name to
+ store the result in.
+ (subobjname): Expect a list of condition/value pairs as input.
+ Combine this list and use it as the key to determine the variable name.
+ * test/cond22.test: New file.
+ * tests/Makefile.am (TESTS): Add cond22.test
+
+2002-05-30 Paul Eggert <eggert@twinsun.com>
+
+ * lib/am/distdir.am (distdir): Don't assume that 'grep -F' works;
+ instead, use shell pattern matching.
+
+2002-05-29 Paul Eggert <eggert@twinsun.com>
+
+ Don't assume that egrep and fgrep exist, as POSIX 1003.1-2001 no
+ longer requires them.
+
+ * Makefile.am (maintainer-check): Use grep -E and grep -F instead
+ of egrep and fgrep. Omit unnecessary -E and -F.
+ Fix quoting typo -- "fgrep '\$${'" should have been "fgrep '$${'".
+ * lib/am/distdir.am (distdir): fgrep -> grep -F.
+ Use $(), not ${}, for Make variables.
+ * lib/am/texinfos.am (install-info-am, uninstall-info-am):
+ fgrep -> grep
+ * m4/make.m4 (AM_MAKE_INCLUDE): Likewise.
+ * tests/defs: Set FGREP and EGREP.
+
+ * tests/aclocali.test, tests/acoutput2.test, tests/all.test,
+ tests/ansi.test, tests/ansi4.test, tests/colon3.test,
+ tests/cond21.test, tests/condlib.test, tests/confh4.test,
+ tests/confsub.test, tests/cxxansi.test, tests/cxxo.test,
+ tests/depend4.test, tests/discover.test, tests/distname.test,
+ tests/dup3.test, tests/empty4.test, tests/fo.test,
+ tests/implicit.test, tests/insh2.test, tests/interp.test,
+ tests/lex.test, tests/lex3.test, tests/lex4.test,
+ tests/libobj5.test, tests/libobj7.test, tests/make.test,
+ tests/makevars.test, tests/nostdinc.test, tests/parse.test,
+ tests/pluseq.test, tests/pluseq4.test, tests/pluseq6.test,
+ tests/pr2.test, tests/pr9.test, tests/seenc.test,
+ tests/specflags.test, tests/specflags3.test,
+ tests/specflags6.test, tests/subobj.test, tests/subobj2.test,
+ tests/suffix3.test, tests/texinfo.test, tests/texinfo6.test,
+ tests/texinfo8.test, tests/vtexi.test, tests/yacc3.test,
+ tests/yacc6.test: fgrep -> $FGREP, egrep -> $EGREP
+
+2002-05-24 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ For PR automake/323:
+ * m4/depend.m4: Missing comma.
+ * tests/gcj4.test: New file.
+ * tests/Makefile.am (TESTS): Add gcj4.test.
+ Reported by David Pashley.
+
+2002-05-22 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/defs (configure.in): Don't double-quote $me.
+ * tests/sinclude.test: Overwrite configure.in and use
+ `am__sinclude' instead of `sinclude' as package name.
+ Exercise `m4_sinclude' instead of `sinclude'.
+
+2002-05-20 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (conditional_implies_one_of): Rename as ...
+ (conditional_implies_any): ... this.
+ * tests/pluseq9.test: Exercise another case with the new
+ `C' variable.
+ Suggested by Raja R Harinath.
+
+2002-05-17 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/defs (configure.in): Quote macro arguments.
+ Reported by Nicolas Joly.
+
+2002-05-17 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * lib/am/header-vars.am (build_triplet, host_triplet,
+ target_triplet): Define. Were removed by mistake on 2002-04-13.
+
+2002-05-17 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ For PR automake/186:
+ * lib/am/distdir.am (distcheck): Attempt a DESTDIR install.
+ * tests/destdir.test: New file.
+ * tests/Makefile.am (TESTS): Add destdir.test.
+
+2002-05-16 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (conditional_true_when): Return false if $WHEN == FALSE.
+ (conditional_is_redundant): Simplify.
+ (conditional_implies_one_of,
+ variable_not_always_defined_in_cond): New functions
+ (macro_define): Reject appends if the variable is not defined in
+ all conditions where `+=' applies.
+ (invert_conditions): Rewrite. Before this patch,
+ invert_conditions("A_TRUE B_TRUE", "A_TRUE B_FALSE", "A_FALSE")
+ would return ("A_FALSE B_TRUE", "A_FALSE B_TRUE"), which seems
+ wrong (these conditions implies "A_FALSE"). Now it outputs (),
+ which just means the input conditions cover all cases.
+ (variable_conditions_permutations): Never output FALSE conditions.
+ * tests/pluseq2.test, tests/pluseq3.test: Define data_DATA
+ in the CHECK_FALSE condition to fix the test.
+ * tests/pluseq5.test: Actually check the diagnostic.
+ * tests/pluseq9.test: New file.
+ * tests/Makefile.am (TESTS): Add pluseq9.test.
+
+2002-05-14 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ Fix for PR automake/322:
+ * automake.in (read_am_file): Rename $was_rule as $prev_state, and
+ set it with IN_RULE_DEF, IN_VAR_DEF, or IN_COMMENT as appropriate.
+ Handle comments continued by backslashes.
+ * tests/comment6.test: New file.
+ * tests/Makefile.am (TESTS): Add comment6.test.
+ Reported by Braden N. McDaniel.
+
+2002-05-08 Charles Wilson <cwilson@ece.gatech.edu>
+ Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * lib/am/progs.am (clean-%DIR%PROGRAMS): If Libtool is used, clean
+ both `program$(EXEEXT)' and `program'; needed under Cygwin.
+ * tests/libtool3.test: New file.
+ * tests/Makefile.am (TESTS): Add libtool3.test.
+
+2002-05-07 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * TODO: Undust.
+
+2002-05-06 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * Makefile.am (FETCHFILES, fetch): Get INSTALL from Autoconf CVS.
+
+2002-05-06 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ Erase stamps from the Makefile that generates them.
+
+ * automake.in (handle_configure): Append each used stamp to
+ @distclean_config. Don't warn about stamp-h in AC_OUTPUT, this
+ file is not used anymore.
+ * lib/am/clean.am (distclean-generic): Don't erase stamp-h and
+ stamp-h[0-9]*.
+ * tests/subdir6.test: New file.
+ * tests/Makefile.am (TESTS): Add it.
+
+2002-05-06 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ Fix for condd.test (conditional `+='):
+ * automake.in (%appendvar): New.
+ (initialize_per_input): Clear it.
+ (macro_define): Handle += for variable defined in another condition.
+ * automake.texi (Conditional Sources): Use conditional += in
+ the example.
+ (General Operation, Conditionals): Remove note about broken +=.
+ * tests/cond21.test: New file.
+ * tests/condd.test: Also test conditional append to a _SOURCE
+ variable. Create missing directories.
+ * tests/Makefile.am (TESTS): Add cond21.test.
+ (XFAILS): Remove condd.test.
+
+2002-05-05 Tom Tromey <tromey@redhat.com>
+
+ * automake.texi (Program and Library Variables): Mention _LFLAGS.
+
+2002-04-30 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * lib/am/ltlib.am (clean-%DIR%LTLIBRARIES): Erase so_locations
+ files. Fix subobj9.test on OSF and IRIX.
+ Reported by Nelson H. F. Beebe.
+
+2002-04-26 Tom Tromey <tromey@redhat.com>
+
+ * lib/am/dejagnu.am (distclean-DEJAGNU): New target.
+ For Debian bug 144221.
+
+2002-04-26 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/man2.test: Use `pwd`, not $PWD. Use $MAKE -e.
+
+2002-04-25 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (subobjname): Use the length of %subobjvar
+ instead of $subobjnamenum.
+ (subobjnamenum): Remove.
+
+2002-04-25 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ For PR automake/307:
+ * lib/depcomp: Never compute dependencies in the background, this
+ can cause races with libtool. Compute the dependencies after
+ the actual compilation. Don't make libtool silent now that
+ it's run in the foreground.
+ * tests/pr307.test: New file.
+ * tests/Makefile.am (TESTS): Add pr307.test.
+ Reported by Laurent Morichetti.
+
+2002-04-25 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * lib/am/check.am: Show skipped tests. Display the
+ $(PACKAGE_BUGREPORT) address on failure.
+
+2002-04-24 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ Fix PR automake/315:
+ * automake.in (subobjname): Rewrite to generate variable name
+ unique for each content.
+ (%substnums): Remove.
+ (%subobjvar): New hash.
+ (initialize_per_input): Clear %subobjvar.
+ (define_objects_from_sources): Return the name of the variable
+ defined, in addition to the linker. Call subobjname only once
+ the content of the variable to define is known.
+ (handle_source_transform): Adjust call to define_objects_from_sources.
+ * tests/specflags8.test: Mention PR 315.
+ * tests/subobjname.test: New file.
+ * tests/Makefile.am (XFAIL_TESTS): Remove specflags8.test.
+ (TESTS): Add subobjname.test.
+
+2002-04-23 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * m4/depout.m4 (_AM_OUTPUT_DEPENDENCY_COMMANDS): Grep
+ the whole file for 'generated by automake', not only the
+ first line. This accounts for post-processed Makefile.in's.
+ * tests/postproc.test: New file.
+ * tests/Makefile.am (TESTS): Add postproc.test.
+
+2002-04-22 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ For PR automake/151 and PR automake/314:
+ * automake.texi (A Program): Split into
+ (Program Sources, Linking, Conditional Sources, Conditional
+ Programs): ... these subsections; moving the Linking node
+ before the Conditional discussions.
+ (Conditional Sources): More details. Notably, mention
+ hello_DEPENDENCIES.
+ (Conditionals): Adjust reference to Conditional Programs.
+
+2002-04-19 Paul Eggert <eggert@twinsun.com>
+
+ Fix some bugs when using "$@" when there might be zero positional
+ arguments in cases where this matters. Zsh doesn't support
+ the workaround ${1+"$@"} that has been used by Automake since
+ the Mon Dec 4 11:55:36 1995 change.
+
+ * aclocal.in: Use 'case' statement to work around problem.
+ * automake.in: Likewise.
+ * lib/ylwrap: Likewise.
+ * lib/missing: No need for workaround, as the command is never
+ invoked with zero arguments.
+ * tests/ccnoco.test: Likewise.
+ * missing: Update from lib/missing.
+
+2002-04-19 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (initialize_per_input): Clear %require_file_found.
+ (%require_file_found): Group the declaration with the other
+ variables initialized by initialize_per_input.
+ * tests/required.test: New file.
+ * tests/Makefile.am (TESTS): Add it.
+ Reported by Marius Vollmer.
+
+2002-04-19 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * m4/header.m4 (_AM_CONFIG_HEADER_INSINUATE): New function,
+ override AC_CONFIG_HEADERS with AM_CONFIG_HEADER.
+ (_AM_CONFIG_HEADER): Use _AM_AC_CONFIG_HEADERS.
+ * m4/init.m4: Call _AM_CONFIG_HEADER_INSINUATE.
+ * tests/stamph2.test: Use AC_CONFIG_HEADERS for some of the config
+ files.
+ * tests/confh5.test: New file.
+ * tests/Makefile.am (TESTS): Add confh5.test.
+ * automake.texi (Optional, Public macros): Update descriptions
+ of AC_CONFIG_HEADERS and AM_CONFIG_HEADER.
+
+2002-04-13 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/man2.test: New file.
+ * tests/Makefile.am (TESTS): Add man2.test.
+ * lib/am/mans.am (install-man%SECTION%): Change the extension
+ of the man pages being installed, as documented.
+
+2002-04-13 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ Enable traces; wipe out the old configure.in parser.
+
+ * automake.in (scan_autoconf_traces): Use '$ENF{AUTOCONF}' of
+ 'autoconf'. Honnor the $filename argument.
+ (scan_autoconf_files): Don't call scan_one_autoconf_file.
+ Always call scan_autoconf_traces.
+ (scan_one_autoconf_file): Remove, with it associated regexes.
+ (obsolete, obsolete_rx): Remove.
+ (register_language, handle_languages): Remove the 'define_flag'
+ support. Remove it from the struct and language definitions too.
+ (unquote_m4_arg): Remove.
+ * lib/am/header-vars.am, lib/am/compile.am, lib/am/lisp.am: Remove
+ the `FOO = @FOO@' definitions for all AC_SUBST'ed variables. They
+ are now generated automatically.
+ * aclocal.in (obsolete_macros): Don't mention obsolete_macros in
+ automake.in.
+ * automake.texi (Invoking Automake): Mention the AUTOCONF envvar.
+
+2002-04-13 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/version6.test: New file.
+ * tests/Makefile.am (TESTS): Add tests/version6.test.
+ * automake.in (version_check): Return 0 on equality.
+
+2002-04-13 Andreas Schwab <schwab@suse.de>
+
+ * THANKS: Update my mail address.
+
+2002-04-12 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/discover.test: Use a full configure.in that calls AC_INIT.
+ Use AC_LIBOBJ. Grep the error message.
+ * test/ldadd.test: Don't use LIBOBJS. Use a full configure.in.
+ Grep the error message. Require libtool.
+ * tests/ldflags.test: Don't use LIBOBJS.
+ * tests/seenc.test: Use AC_LIBOBJ, --Wno-error, and grep the
+ error messages for CC and CXX.
+
+2002-04-12 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (scan_autoconf_traces) <AC_SUBST>: Ignore ANSI2KNR
+ and AMDEPBACKSLASH.
+ * tests/distcommon2.test: Use a full configure.in that calls AC_INIT.
+ * tests/ext.test: Enable dependencies for OBJC.
+ * tests/libobj.test, tests/libobj6.test, tests/libobj9.test:
+ Delete. They tests for different flavors of $LIBOBJS assignments
+ that wont be supported anymore.
+ * tests/libobj2.test, tests/libobj10.test: Use AC_LIBOBJ.
+ * tests/obsolete.test: Don't test Automake.
+ * tests/suffix5.test: Require libtool.
+ * tests/Makefile.am (TESTS): Remove libobj.test, libobj6.test and
+ libobj9.test.
+
+2002-04-10 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * configure.in (APIVERSION): Fix definition.
+
+2002-04-10 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * NEWS: Catch up with changes since 1.6.
+
+2002-04-10 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/yacc8.test: Don't assume GNU make, run config.status
+ to regenerate the Makefile.
+
+2002-04-10 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * Makefile.am (maintainer-check): Make sure `$MAKE -e' is
+ always followed by a SHELL setting.
+ * tests/ansi3.test, tests/ansi5.test, tests/subobj3.test: Set
+ SHELL when calling `$MAKE -e'.
+
+2002-04-10 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/subobj9.test: Use configure.in, not configure.ac,
+ otherwise this fails with old libtool versions.
+
+2002-04-10 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * lib/config.guess, lib/config.sub, lib/texinfo.tex: New upstream
+ versions.
+
+2002-04-10 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * ChangeLog.2001: New file, extracted from ChangeLog.
+ * Makefile.am (EXTRA_DIST): Add it.
+
+2002-04-09 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.texi (Canonicalization): The sources for libmumble++.a
+ go into libmumble___a_SOURCES.
+
+2002-04-07 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * Makefile.am (maintainer-check): Check for `sleep 1' uses in the
+ test suite. Suggest `sleep 2' instead.
+ * tests/confsub.test: Use `sleep 2'.
+
+2002-04-04 Paul Eggert <eggert@twinsun.com>
+
+ * lib/am/subdirs.am:
+ ($(RECURSIVE_TARGETS), maintainer-clean-recursive):
+ $(MAKEFLAGS) -> $$MAKEFLAGS, so that we don't run into problems if
+ MAKEFLAGS contains '$(...)'.
+
+2002-04-02 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/specflags8.test: Typo.
+
+2002-04-02 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/specflags6.test: Run aclocal.
+ * tests/Makefile.am (TESTS): Add specflags6.test.
+
+2002-04-02 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/specflags7.test, tests/specflags8.test: New files.
+ * tests/Makefile.am (TESTS): Add them.
+ (XFAIL_TESTS): Add specflags8.test.
+
+2002-03-29 Tom Tromey <tromey@redhat.com>
+
+ * automake.in (check_typos): Examine AM_LDFLAGS.
+ Fixes PR automake/311.
+
+ For PR automake/312:
+ * lib/am/libtool.am (clean-libtool): Use LTRMS.
+ * automake.in (handle_single_transform_list): When processing a
+ libtool object, clean the ordinary object and register the
+ directory.
+ (libtool_clean_directories): New global.
+ (initialize_per_input): Initialize it.
+ (generate_makefile): Call handle_libtool later.
+ (handle_libtool): Handle libtool_clean_directories.
+ * tests/subobj9.test: New file.
+ * tests/Makefile.am (TESTS): Added subobj9.test.
+
+2002-03-26 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/extra6.test, tests/subdir5.test: Require GNU make.
+
+2002-03-26 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/dup3.test (ACLOCAL): s/srcdir/testsrcdir/.
+
+2002-03-26 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/extra7.test: New file.
+ * tests/Makefile.am: Add it.
+ * lib/am/distdir.an (distdir): When a distribuable directory
+ exists both in `.' and $(srcdir), merge both directories. This
+ works around a failure of extra6.test on Tru64 reported by
+ Nicolas Joly.
+
+2002-03-26 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/pr87.test, tests/yaccvpath.test: Require GNU make.
+
+2002-03-26 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * Makefile.am (maintainer-check): Catch occurrences of
+ `$MAKE foo=bar' in the testsuite. Suggest using
+ `foo=bar $MAKE -e' instead.
+ * tests/ansi3.test, tests/ansi5.test, tests/subobj3.test:
+ Use $MAKE -e. This fixes a ansi5.test failure with Solaris make.
+ * tests/defs: Unset $srcdir, and set $testsrcdir to its old value.
+ * tests/installsh.test (AUTOMAKE, ACLOCAL): Use $testsrcdir.
+
+2002-03-26 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ Fix for PR automake/310:
+ * lib/am/depend2.am, lib/am/lex.am, lib/am/yacc.am: Quote %SOURCE%
+ so it never appears as a plain word.
+
+2002-03-25 Angus Leeming <a.leeming@ic.ac.uk>
+
+ * lib/depcomp (tru64): Correctly compute `base'.
+
+2002-03-21 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/pr211.test: s/requires/required/, otherwise the test fails
+ if libtool is not installed.
+
+2002-03-21 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/dirname.test: Don't use $SHELL when calling ./configure.
+
+2002-03-21 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/dirname.test: Use --quiet to fix failure on installations
+ using a site script.
+ Reported by Nicolas Joly.
+
+2002-03-21 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * Makefile.am (maintainer-check): Check for misuses of make,
+ autoconf, automake, aclocal, and perl in the testsuite. Suggest
+ using $MAKE, $AUTOCONF, $AUTOMAKE, $ACLOCAL, and $PERL instead.
+ * tests/confsub.test: Use $AUTOCONF and $MAKE.
+ * tests/extra5.test, tests/extra6.test, tests/lex5.test,
+ tests/nobase.test, tests/nodist2.test, tests/pr204.test,
+ tests/pr224.test, tests/pr287.test, tests/strip.test,
+ tests/yacc8.test: Use $MAKE.
+
+2002-03-20 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ Add support for two-dot versions.
+
+ * tests/version5.test: New file.
+ * tests/Makefile.am (TESTS): Add it.
+ * automake.in (version_split, version_compare): New functions.
+ (version_check): Rewrite using version_split and version_compare.
+ (process_option_list): Adjust regex.
+
+2002-03-18 Richard Boulton <richard@tartarus.org>
+
+ Fix for PR automake/306:
+ * automake.texi (Generalities): Document +=.
+ (Conditionals): Document limitations of += with conditionals.
+
+2002-03-17 Tom Tromey <tromey@redhat.com>
+
+ Fix for PR automake/295:
+ * automake.texi (Invoking Automake): Deprecate --output-dir.
+ * automake.in (usage): Don't document --output-dir.
+ (output_directory): Don't initialize.
+ (parse_arguments): Deprecate --output-dir.
+
+ * m4/init.m4 (AUTOMAKE, ACLOCAL): Removed extra quotes.
+ Fixes PR automake/304.
+
+2002-03-17 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/dirforbid.test: Workaround for NetBSD sh bug.
+ Fixes PR automake/305.
+
+2002-03-11 Richard Boulton <richard@tartarus.org>
+
+ * automake.in (check_typos): Allow variables with reserved
+ suffices (such as _LDFLAGS) and prefixes which aren't
+ recognised if the variable is defined in configure.ac.
+ Fixes acsubst.test.
+
+2002-03-11 Richard Boulton <richard@tartarus.org>
+
+ * tests/acsubst.test: New test, by Alexandre Duret-Lutz
+ * tests/acsubst2.test: New test, by Alexandre Duret-Lutz
+ * tests/Makefile.am (TEST): Added acsubst.test and acsubst2.test
+
+2002-03-11 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * tests/defs: Unset DESTDIR, otherwise `make DESTDIR=/foo check'
+ causes failures.
+
+2002-03-07 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ Fix for PR automake/303:
+ * automake.in (version_check): Move the error message ...
+ (process_option_list): ... here, so we can distinguish between
+ global and local options.
+
+2002-03-07 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/pr300-lib.test, tests/pr300-ltlib.test,
+ tests/pr300-prog.test: Use AC_OUTPUT, not AC_OUTPUT(Makefile), so
+ Autoconf doesn't complain about Makefile being output twice.
+
+2002-03-06 Tom Tromey <tromey@redhat.com>
+
+ * configure.in: Upped version to 1.6a.
+
+2002-03-05 Tom Tromey <tromey@redhat.com>
+
+ * configure.in: Released 1.6.
+
+2002-03-05 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ Fix for PR automake/300:
+ * tests/pr300-lib.test, tests/pr300-ltlib.test,
+ tests/pr300-prog.test: New files.
+ * tests/Makefile.am (TESTS): Add them.
+ * automake.in (handle_ltlibraries): Strip nobase_ prefix to
+ compute the directory.
+ * lib/am/header-vars.am (install_sh_PROGRAM): New variable.
+ * lib/am/libs.am (%DIR%LIBRARIES_INSTALL): New variable.
+ (install-%DIR%LIBRARIES): Use it. Honor nobase_.
+ (uninstall-%DIR%LIBRARIES): Honor nobase_.
+ * lib/am/ltlibs.am (%DIR%LTLIBRARIES_INSTALL): New variable.
+ (install-%DIR%LTLIBRARIES): Use it. Honor nobase_.
+ (uninstall-%DIR%LTLIBRARIES): Honor nobase_.
+ * lib/am/progs.am (%DIR%PROGRAMS_INSTALL): New variable.
+ (install-%DIR%PROGRAMS): Use it. Honor nobase_.
+ (uninstall-%DIR%PROGRAMS): Honor nobase_.
+ See also the fix for nobase.test on 2001-11-09.
+
+2002-03-05 Tom Tromey <tromey@redhat.com>
+
+ * lib/config.sub, lib/config.guess, lib/texinfo.tex: Updated.
+
+2002-03-05 Pavel Roskin <proski@gnu.org>
+
+ * tests/yacc8.test: Add a command between "test" and "cd" to
+ work around a bug in bash-2.05.
+
+2002-03-05 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ Fix for PR automake/294:
+ * tests/dirforbid.test: New file.
+ * tests/Makefile.am (TESTS): Add it.
+ * automake.in (standard_prefix): New hash.
+ (am_primary_prefixes): Forbid standard_prefixes which are not
+ explicitely allowed.
+ * automake.texi (Uniform): Remove FIXME.
+
+2002-03-05 Jim Meyering <meyering@lucent.com>
+
+ * automake.in (@common_files): Add config.rpath.
+
+2002-03-05 Kevin Ryde <user42@zip.com.au>
+
+ For PR automake/297:
+ * lex.m4 (AM_PROG_LEX): Don't set LEX=${am_missing_run}flex until
+ after AC_PROG_LEX, since it will try to run it and fail (in autoconf
+ 2.52 at least).
+
+2002-02-25 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (scan_one_autoconf_file): Declare
+ LEX_OUTPUT_ROOT and LEXLIB as configure variables when
+ AM_PROG_LEX or AC_PROG_LEX are seen. This allows to ...
+ * lib/am/lex.am: ... remove the LEX_OUTPUT_ROOT and LEXLIB
+ definitions. Search %SOURCE% in $(srcdir). Use s||| instead
+ of s/// in the sed invocation, to support filenames containing
+ slashes.
+ * lib/am/yacc.am: Search %SOURCE% in $(srcdir). Use s||| too.
+ * tests/lex5.test, tests/yacc8.test: New files.
+ * tests/Makefile.am (TESTS): Add them.
+
+2002-02-23 Per Bothner <per@bothner.com>
+
+ * m4/depout.m4 (_AM_OUTPUT_DEPENDENCY_COMMANDS): Set `dirpart' to
+ `.' in else branch.
+
+2002-02-22 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/make.test: Revert the grep logic to work around a bug
+ in NetBSD sh (see NetBSD Problem Report #11542).
+ Reported by Patrick Welche.
+
+2002-02-20 Tim Van Holder <tim.van.holder@pandora.be>
+
+ * m4/lispdir.m4: Redirect /dev/null to stdin when running $EMACS
+ to try and prevent a non-lisp emacs from starting in interactive
+ mode.
+ * automake.texi: Document this change.
+
+2002-02-19 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.texi (Macros): Split into ...
+ (Public Macros, Private Macros): ... these.
+
+2002-02-19 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/insthook.test: Use sed instead of "tail +X".
+
+2002-02-18 Paul Eggert <eggert@twinsun.com>
+
+ * lib/depcomp: Don't use "tail +3"; it's not portable to
+ POSIX 1003.1-2001 hosts.
+
+2002-02-18 Jim Meyering <meyering@lucent.com>
+
+ * tests/cond12.test: Use sed 1q, not `head -n 1'.
+ The latter is not portable to some old systems.
+ * m4/depout.m4: Don't use `head -1'; it's no longer portable.
+ Use `sed 1q' instead.
+ * tests/insthook.test: Likewise.
+
+2002-02-17 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (handle_lib_objects_cond): Tell the user to put
+ global linker flags in AM_LDFLAGS, not LDFLAGS.
+
+ * automake.texi (General Operation): AC_SUBST'ed variables
+ override Automake's variables.
+ (Uniform): More words and @refs.
+ (Auxiliary Programs) <config.sub, config.guess>: Add URL.
+ (etags): More explanations about the first example.
+ (Invoking Automake): Mention autoreconf. More @refs.
+ (Requirements): Mention AC_CONFIG_FILES.
+ (Optional): AC_CHECK_TOOL will no longer install config.sub and
+ config.guess. Mention AC_LIBOBJ, AC_LIBSOURCE, and AC_LIBSOURCES.
+ (Invoking aclocal): aclocal no longer warn about duplicates.
+ (Macros) <AM_INIT_AUTOMAKE>: More explanations.
+ (Extending aclocal): Suggest using the output of
+ `aclocal --print-ac-dir` to install third-party macros.
+ (Alternative): Specify ordering of dist_, nodist_, and nobase_
+ prefixes.
+ (A Program): Mention scripts. The global LDADD variable is not
+ meant to hold link flags, suggest using AM_LDFLAGS instead.
+ (Program and Library Variables) <maude_LIBADD, maude_LDADD>:
+ _LIBADD and _LDADD are subject to the same restriction wrt to
+ link flags.
+ (Program and Library Variables) <maude_DEPENDECIES>: Is also
+ derived from maude_LIBADD.
+ (Program variables): Define AM_LDFLAGS.
+ (Dependencies): Passing the no-dependencies option to
+ AM_INIT_AUTOMAKE is preferred.
+ (Scripts): Explain why automake is magically cleaned.
+ Mention noinst_SCRIPTS and check_SCRIPTS.
+ (Data): Use dist_ in Automake's example.
+ (Dist): Reference AM_INIT_AUTOMAKE for PACKAGE and VERSION.
+ Mention AC_CONFIG_FILES instead of AC_OUTPUT.
+
+2002-02-14 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * Makefile.am (FETCHFILES): Add Automake/XFile.pm.
+ (fetch): Fetch XFile.pm. Update the files in $(srcdir) instead
+ of asking the maintainer to do it manually.
+ * lib/config.guess, lib/config.sub, lib/texinfo.tex,
+ Automake/XFile.pm: New upstream versions.
+
+2002-02-02 Tom Tromey <tromey@redhat.com>
+
+ * automake.texi (Macros): Warn about upgrading.
+
+2002-02-01 Tom Tromey <tromey@redhat.com>
+
+ Change per GNU coding standards:
+ * aclocal.in (parse_arguments): Only mention most recent year in
+ copyright output.
+ * automake.in (version): Only mention most recent year.
+
+2002-01-30 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.texi (API versioning): New Node.
+ (Extending): Use $(DESTDIR) in examples.
+
+2002-01-28 Akim Demaille <akim@epita.fr>
+
+ * m4/lispdir.m4 (AM_PATH_LISPDIR): Serial 5.
+ Respect the --help layout.
+
+2002-01-27 Tom Tromey <tromey@redhat.com>
+
+ * configure.in: Bumped to 1.5e.
+
+ * lib/am/yacc.am: Use `rm -f'.
+
+ * configure.in: Released 1.5d.
+
+ * lib/config.guess: New version from FSF.
+
+ * Makefile.am (uninstall-hook): New target.
+
+2002-01-24 Akim Demaille <akim@epita.fr>
+
+ * lib/install-sh: Update, from Autoconf.
+
+2002-01-24 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (scan_one_autoconf_file): Don't treat AC_CHECK_TOOL
+ as AC_CANONICAL_HOST (the former does not require the latter since
+ Autoconf 2.50).
+ * m4/strip.m4 (AM_PROG_INSTALL_STRIP): Check for strip.
+ * automake.texi (Requirements): Do not require STRIP to be
+ defined by the user.
+
+2002-01-23 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * lib/am/depend.am (distclean-depend): Erase %DEPDIRS%, not $(DEPDIRS).
+ * automake.in (handle_languages): Compute and substitute %DEPDIRS%.
+ * tests/pr224.test: Make sure .deps subdirectories are
+ erased by distclean.
+
+2002-01-22 Tom Tromey <tromey@redhat.com>
+
+ * m4/gcj.m4 (AM_PROG_GCJ): Don't invoke dependency code if
+ no-dependencies option is set.
+ * m4/init.m4 (AM_INIT_AUTOMAKE): Don't invoke dependency code if
+ no-dependencies option is set. Don't call AM_DEP_TRACK or
+ AM_SET_DEPDIR.
+
+2002-01-22 Pavel Roskin <proski@gnu.org>
+
+ * tests/asm.test: Use CCAS and CCASFLAGS instead of AS and
+ ASFLAGS.
+
+2002-01-22 Akim Demaille <akim@epita.fr>
+
+ * Makefile.am (FETCHFILES): Remove ansi2knr.c, add texinfo.tex.
+ (fetch): Adjust.
+
+2002-01-21 Tom Tromey <tromey@redhat.com>
+
+ * Makefile.am (fetch): Don't fetch ansi2knr.
+
+ * automake.texi (Macros): Updated for new variable names.
+ (Program and Library Variables): Likewise.
+ (Assembly Support): Likewise.
+ * m4/as.m4: Use CCAS and CCASFLAGS.
+ * automake.in (asm): Use CCAS and CCASFLAGS.
+
+2002-01-21 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&parse_arguments): Use a more GNUish error message
+ on wrong options.
+
+2002-01-20 Tom Tromey <tromey@redhat.com>
+
+ Fix for PR automake/231:
+ * m4/gcj.m4 (AM_PROG_GCJ): Use _AM_DEPENDENCIES(GCJ).
+ * m4/depend.m4: Document `GCJ'.
+
+ For PR automake/224:
+ * tests/Makefile.am (TESTS): Added pr224.test.
+ * tests/pr224.test: New file.
+ * lib/depcomp: Fixed computation of depfile.
+ * lib/am/depend2.am: Use %DEPBASE%, not $(DEPDIR).
+ * automake.in (handle_single_transform_list): Only reject `..'
+ component for Java. Put dependencies in directory near object.
+ (handle_languages): Set DEPBASE. Handle de-ansi-fication.
+
+2002-01-20 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/defs: Export AUTOMAKE and ACLOCAL.
+
+2002-01-19 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ Fix for PR automake/204:
+ * tests/pr204.test: New file.
+ * tests/Makefile.am (TESTS): Add it.
+ * automake.in (handle_single_transform_list): Don't distribute
+ sources derived from non-distributed sources.
+
+2002-01-18 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ Fix for PR automake/229:
+ * tests/pr229.test: New file.
+ * tests/Makefile.am (TESTS): Add it.
+ * automake.in (scan_one_autoconf_file): Recognize AC_CYGWIN,
+ AC_EMXOS2, and AC_MINGW32.
+
+2002-01-18 Tom Tromey <tromey@redhat.com>
+
+ * tests/cond7.test: Fix test bug exposed by copyright update.
+
+ For PR automake/288:
+ * automake.in (lang_c_rewrite): Don't prepend directory to base if
+ directory is `.'. Also, properly compute de_ansi_files entry in
+ subdir-objects case
+ * tests/Makefile.am (TESTS): Added ansi7.test.
+ * tests/ansi7.test: New file.
+
+ * aclocal.in (parse_arguments): Added 2002.
+ (write_aclocal): Likewise.
+ (parse_arguments): Updated my email address.
+ * automake.in (gen_copyright): Added 2002.
+ (version): Likewise. Also, changed my email address.
+
+ * configure.in (APIVERSION): Refined definition.
+
+2002-01-18 Tom Tromey <tromey@redhat.com>
+
+ * missing: Updated.
+ * lib/missing: Accept versioned aclocal.
+ * m4/init.m4 (AM_INIT_AUTOMAKE): Look for versioned aclocal.
+
+2002-01-17 Pavel Roskin <proski@gnu.org>
+
+ * m4/Makefile.am (m4datadir): Use APIVERSION.
+
+2002-01-16 Tom Tromey <tromey@redhat.com>
+
+ * Makefile.am (install-exec-hook): Use APIVERSION.
+ * m4/init.m4 (AM_INIT_AUTOMAKE): Use am__api_version.
+ * m4/amversion.in (AM_AUTOMAKE_VERSION): Set am__api_version from
+ APIVERSION.
+ * automake.in (perllibdir): Use APIVERSION.
+ (libdir): Likewise.
+ * aclocal.in (perllibdir): Use APIVERSION.
+ (APIVERSION): New global.
+ (parse_arguments): Use APIVERSION.
+ * configure.in (APIVERSION): New subst.
+ (pkgvdatadir): Use APIVERSION.
+
+2002-01-15 Tom Tromey <tromey@redhat.com>
+
+ * missing: Updated.
+ * lib/missing: Match against `automake*' to pick up versioned
+ automake.
+ * m4/init.m4 (AM_INIT_AUTOMAKE): Use versioned automake name.
+ * m4/amversion.in (AM_AUTOMAKE_VERSION): Set am__version
+ variable.
+ * lib/am/Makefile.am (amdir): Use pkgvdatadir.
+ * lib/Makefile.am (dist_pkgvdata_DATA): Renamed to use
+ pkgvdatadir.
+ (scriptdir): Use pkgvdatadir.
+ (installcheck-local): Likewise.
+ * lib/Automake/Makefile.am (perllibdir): Use pkgvdatadir.
+ * automake.in (perllibdir): Added VERSION.
+ (libdir): Likewise.
+ * aclocal.in (parse_arguments): Search versioned directory. Don't
+ push unversioned directory unless it exists.
+ (perllibdir): Added VERSION.
+ (default_acdir): New global.
+ * m4/Makefile.am (m4datadir): Added $(VERSION).
+ * Makefile.am (install-exec-hook): New target.
+ * configure.in (ACLOCAL): Search build directory.
+ (pkgvdatadir): New subst.
+
+2002-01-15 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * lib/config.sub, lib/config.guess: New versions from FSF.
+
+2002-01-13 Tom Tromey <tromey@redhat.com>
+
+ For PR automake/288:
+ * automake.in (lang_c_rewrite): Set value for de_ansi_files entry
+ to directory.
+ (lang_c_finish): Likewise. Also, use directory information from
+ de_ansi_files.
+
+2002-01-13 Kevin Ryde <user42@zip.com.au>
+
+ For PR automake/288:
+ * tests/Makefile.am (TESTS): Added ansi6.test.
+ * tests/ansi6.test: New file.
+
+2002-01-13 Tom Tromey <tromey@redhat.com>
+
+ For PR automake/287:
+ * lib/am/distdir.am (distdir): Use `$$list' trick when looping
+ over subdirs.
+ * tests/Makefile.am (TESTS): Added pr287.test.
+ * tests/pr287.test: New file.
+
+2002-01-13 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * lib/am/distdir.am (distdir): Handle subdirectories.
+ * tests/extra6.test: New file.
+ * tests/Makefile.am (TESTS): Add it.
+
+2002-01-13 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/extra2.test: Run $ACLOCAL.
+
+2002-01-12 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * m4/init.m4 (AM_INIT_AUTOMAKE): Set PACKAGE and VERSION from
+ AM_INIT_AUTOMAKE arguments when using the old-style call.
+ Use AC_PACKAGE_TARNAME and AC_PACKAGE_VERSION in the new form only.
+ Suggested by Pavel Roskin.
+
+2002-01-12 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * test/nodefine.test, test/nodefine2.test: Check that no-define
+ works, not the contrary...
+ * m4/options.m4 (_AM_IF_OPTIONS): Use m4_ifset.
+ * m4/init.m4 (AM_INIT_AUTOMAKE): A third argument implies no-define,
+ not the contrary.
+
+2002-01-12 Jim Meyering <meyering@lucent.com>
+
+ * automake.in (scan_one_autoconf_file): Unquote AC_LIBOBJ argument.
+ * tests/libobj11.test: New file.
+ * tests/Makefile.am (TESTS): Add libobj11.test.
+
+2002-01-09 Ryan T. Sammartino <ryants@shaw.ca>
+
+ * lib/depcomp (msvisualcpp): Strip -Gm, -Gi, and -ZI options.
+
+2002-01-09 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (file_contents_internal): Introduce two variables,
+ $is_rule and $discard_rules to track rules spanning across multiple
+ paragraphs. This fixes a very nasty bug reported by Dmitry Mikhin
+ where only the first paragraph of such a multi-paragraph rule was
+ discarded; but it leaves many similar latent bugs (see the FIXMEs).
+
+2002-01-09 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/dup3.test: Remove all -I from $ACLOCAL before using it.
+ * tests/error.test: Use some macro names which are not defined by
+ Automake itself.
+
+2002-01-09 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.texi (Complete, Macros, Options): Document the new style
+ AM_INIT_AUTOMAKE. Remove AM_AUTOMAKE_OPTIONS documentaion.
+ * m4/init.m4 (AM_INIT_AUTOMAKE): Get PACKAGE and VERSION from
+ AC_INIT if they are available there. Support a new call form
+ where the only argument is an optional space-separated list of
+ Automake options.
+ * m4/options.m4 (AM_AUTOMAKE_OPTIONS): Remove.
+ (_AM_MANGLE_OPTION, _AM_SET_OPTION, _AM_SET_OPTIONS,
+ _AM_IF_OPTION): New functions.
+ * automake.in (AC_INIT_PATTERN): New variable.
+ (global_options_line): Remove, use $seen_init_automake instead.
+ (scan_one_autoconf_file, scan_autoconf_traces): Set $package_version
+ from AC_INIT if available. Support the new style AM_INIT_AUTOMAKE.
+ Remove the AM_AUTOMAKE_OPTIONS handling.
+ * configure.in: Modernize.
+ * tests/defs (configure.in): Modernize. One third of the tests
+ still overwrite the default configure.in and use an old
+ AM_INIT_AUTOMAKE call, so that makes testing for both.
+ * tests/nodefine.test, tests/nodefine2.test: New files.
+ * tests/Makefile.am (TESTS): Add them.
+
+2002-01-08 Raja R Harinath <harinath@cs.umn.edu>
+
+ * automake.in (define_configure_variable): Propagate line numbers.
+
+2002-01-08 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * m4/python.m4 (_AM_PYTHON_INTERPRETER_LIST): Add python2.2.
+
+2002-01-07 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * configure.in: Run the Autoconf test in a subdirectory, then
+ erase this directory.
+
+2002-01-07 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * configure.in (AUTOMAKE): Create m4/amversion.m4.
+ * m4/amversion.in: New file.
+ * m4/Makefile.am (m4data_DATA, EXTRA_DIST): Replace by ...
+ (dist_m4data_DATA): ... this.
+ (nodist_m4data_DATA, DISTCLEANFILES): Add amversion.m4.
+ * m4/init.m4 (AM_INIT_AUTOMAKE): Require
+ AM_SET_CURRENT_AUTOMAKE_VERSION.
+ * automake.in (seen_automake_version): New variable.
+ (scan_autoconf_traces, scan_one_autoconf_file,
+ scan_autoconf_files): Scan for AM_AUTOMAKE_VERSION and complain
+ when the version used in aclocal.m4 differs from Automake's.
+ * tests/defs (ACLOCAL): Look in ../m4 too.
+ * tests/installsh.test (ACLOCAL): Likewise.
+ * tests/installdir.test (installdirs-local): Run $ACLOCAL.
+
+2002-01-06 Raja R Harinath <harinath@cs.umn.edu>
+
+ * automake.in (handle_languages): Emit an automake
+ internal variable 'am__depfiles_maybe'.
+ * lib/am/configure.am (%MAKEFILE%): Use am__depfiles_maybe.
+
+ * lib/am/configure.am (%MAKEFILE%): Pass `depfiles' to
+ config.status.
+
+2002-01-06 Tom Tromey <tromey@redhat.com>
+
+ * automake.texi (Tags): Document new variables.
+ * lib/am/tags.am (ETAGS): New macro.
+ (ETAGSFLAGS): Likewise.
+ (TAGS): Use them.
+
+2002-01-04 Tom Tromey <tromey@redhat.com>
+
+ * configure.in (ACLOCAL): Set perllibdir. From Nicolas Joly.
+
+2002-01-04 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * automake.in (read_am_file): Thinko in "comment following
+ trailing backslash" detection.
+ * tests/comment5.test: Test for this too.
+
+2002-01-02 Tom Tromey <tromey@redhat.com>
+
+ * automake.texi (Extending): Added index for uninstall-hook.
+
+2002-01-02 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ Fix for PR automake/278:
+ * m4/python.m4 (AM_PYTHON_CHECK_VERSION): Use `sys.hexversion' to cope
+ with versions such as '2.2c1'. Also, use `int' instead of the
+ obsoleted `string.atoi'.
+ Reported by Enrico Scholz.
+
+2002-01-02 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ Fix for PR automake/280:
+ * automake.in (read_am_file): Warn about trailing backslashes
+ in comments.
+ * tests/comment5.test: New file.
+ * tests/Makefile.am (TESTS): Add comment5.test.
+ Reported by Enrico Scholz.
+
+2002-01-02 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/comment4.test: New file.
+ * tests/Makefile.am (TESTS): Add comment4.test.
+
+ Fix for comment4.test:
+ * automake.in (read_am_file): Output leading comments only when
+ encountering white lines.
+
+2002-01-01 Tom Tromey <tromey@redhat.com>
+
+ For PR automake/234:
+ * tests/Makefile.am (TESTS): Added strip.test.
+ * tests/strip.test: New file.
+
+ * automake.texi (Extending): Mention uninstall-hook.
+ (Install): Likewise.
+ * automake.in (handle_factored_dependencies): Allow
+ uninstall-hook.
+
+2002-01-01 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * lib/am/install.am (install-strip): Set INSTALL_STRIP_FLAG=-s,
+ it is needed by install-%DIR%LTLIBRARIES in ltlib.am.
+ This fixes a bug introduced on 2001-01-28.
+ Reported by Jared Davis.
+
+-----
+
+Copyright (C) 2002-2017 Free Software Foundation, Inc.
+
+Copying and distribution of this file, with or without modification, are
+permitted provided the copyright notice and this notice are preserved.
diff --git a/old/ChangeLog.03 b/old/ChangeLog.03
new file mode 100644
index 000000000..75128f14a
--- /dev/null
+++ b/old/ChangeLog.03
@@ -0,0 +1,2971 @@
+2003-12-31 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (generate_makefile): Update misleading comment.
+
+ * automake.in (handle_languages): Define %DEPBASE% conditionally
+ on subdir-objects. Define SUBDIROBJ. Do not clean *_.c files
+ here ...
+ (lang_c_finish): ... do it here.
+ (handle_single_transform_list): Do not output specific rules for
+ subdir-objects files which are not renamed. This should reduce
+ the size of Makefiles with lots of subdirectory sources.
+ * lib/depcomp: Simplify computation of dependency output, and use
+ DEPDIR.
+ * lib/am/depend2.am (%EXT%.o, %EXT%.obj, %EXT%.lo): Adjust call
+ to depcomp. Compute depbase on-the-fly in generic fastdep rules
+ for subdir-objects.
+ * tests/ansi9.test: Do not grep for an explicit rule that
+ we no longer expect. Really run $MAKE to make sure the chain
+ of rules works.
+ * tests/yacc5.test: Do not grep for an explicit rule that
+ we no longer expect. Adjust to use set -e.
+
+2003-12-27 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (@common_files): Move configure, configure.ac, and
+ configure.in ...
+ (@common_sometimes): ... here so that these files do not appear
+ twice in DIST_COMMON.
+
+ * automake.in (maybe_push_required_file): Add $(srcdir) in front
+ a required files outside the current directory or its subdirectories.
+ * lib/am/distdir.am (distdir): Update comment.
+ Report from Nicolas Joly.
+
+2003-12-26 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/automake.texi (@copying): Do not repeat the version.
+ (Top): Use @insertcopying. Add a @detailmenu, this works around
+ Emacs 21's inability to lookup indices in sub-nodes (reported
+ by Kevin Ryde).
+ (C++ Support, Assembly Support, Fortran 77 Support, Java Support,
+ Support for Other Languages, Preprocessing Fortran 77, Compiling
+ Fortran 77 Files, Mixing Fortran 77 With C and C++, How the Linker
+ is Chosen): Add missing descriptions in menus.
+ (Fortran 77 and Autoconf): Remove, this node was just saying "use
+ Autoconf 2.53 or greater".
+
+2003-12-26 Santiago Vila <sanvila@unex.es> (tiny change)
+
+ * NEWS: s/Gettext 1.12.1/Gettext 0.12.1/
+
+2003-12-25 Nicolas Joly <njoly@pasteur.fr> (tiny change)
+
+ * doc/automake.texi (Conditional Sources): Typo.
+
+2003-12-25 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/Automake/Config.in: Require Exporter.
+ Report from Kevin Ryde (failure with Perl 5.005_03).
+
+2003-12-15 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * tests/aclocal6.test: Check for autom4te.cache only if it has
+ been created.
+ * tests/maintclean.test: Update comment.
+ Report from Bruno Haible.
+
+ * tests/txinfo24.test, tests/txinfo25.test, tests/txinfo28.test:
+ Require texi2dvi-o.
+ Report from Václav Haisman.
+
+2003-12-10 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * configure.ac, NEWS: Bump version to 1.8a.
+
+ * configure.ac, NEWS: Bump version to 1.8.
+
+ * lib/texinfo.tex: New upstream version.
+
+ * Makefile.am (INSTALL): Copy the source from $(srcdir).
+
+2003-12-09 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/Automake/Rule.pm (define): Remove debugging traces.
+ Report from Akim Demaille.
+
+2003-12-09 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> (tiny change)
+ Alexandre Duret-Lutz <adl@gnu.org>
+
+ * Makefile.am (do_subst): Fix the substitution of @configure_input@.
+ (automake, aclocal): Create the output atomically and make it
+ read-only, as done in the Autoconf package.
+ * lib/Automake/Makefile.am (do_subst): Fix the substitution of
+ @configure_input@.
+ (Config.pm): Create the output atomically and make it read-only.
+ * m4/Makefile.am ($(top_srcdir)/m4/amversion.m4): Substitute
+ @configure_input@ and make the output read-only.
+ * lib/Automake/Config.in, m4/amversion.in, tests/aclocal.in,
+ tests/automake.in, tests/defs.in: Add a @configure_input@ line.
+
+2003-12-09 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> (tiny change)
+
+ * doc/automake.texi (Local Macros, CVS): Typos.
+
+2003-12-08 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/Automake/Variable.pm (hook): Use $$ as prototype, not $\&.
+ Perl 5.6.0 will not accept a reference sub reference for the
+ latter.
+ * automake.in (var_SUFFIXES_trigger): Adjust registration via
+ Automake::Variable::hook.
+ (handle_texinfo_helper): Make sure `inner_expand => 1' appears
+ on one line, so that Perl 5.6.0 does not complain about
+ inner_expand being a bare identifier.
+
+2003-12-05 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * aclocal.in (check_acinclude, scan_file): Output `warning:' in
+ front of warnings.
+ Report from Pavel Roskin.
+
+2003-12-04 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * TODO: Remove some old entries.
+
+ * doc/automake.texi (Rebuilding): Document CONFIGURE_DEPENDENCIES
+ and CONFIG_STATUS_DEPENDENCIES. Move this sections later
+ in the manual since it's pretty advanced material.
+
+ * automake.in ($config_header_location): Remove. Use
+ %ac_config_files_location instead.
+ (rewrite_inputs_into_dependencies): Do not prepend $(top_builddir)/
+ at the top-level.
+ (handle_configure): Use rewrite_inputs_into_dependencies to
+ distribute and compute AC_CONFIG_HEADERS dependencies.
+ (scan_autoconf_traces) <AC_CONFIG_HEADERS>: Fill
+ %ac_config_files_location.
+ * lib/am/remake-hdr.am ($(srcdir)/%CONFIG_HIN%): Rename as ...
+ (%CONFIG_HIN%): ... this. $(srcdir) is already added in
+ scan_autoconf_traces.
+ * tests/Makefile.am (TESTS): Add confh5.test.
+ * tests/confh5.test: New file.
+
+ * tests/ltlibsrc.test: Fix the zoo_d_old2_la.c rule in Makefile.am,
+ $< is not portable and the source is in $(srcdir).
+
+2003-12-03 Paolo Bonzini <bonzini@gnu.org>
+ Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (handle_configure): Do not require link sources if
+ they contain a dollar, or if they were built. Likewise, do not
+ clean link destination if they contain a dollar.
+ (scan_autoconf_traces) <AC_CONFIG_LINKS>: Populate
+ %ac_config_files_location with link destinations. Do not
+ store locations in @config_links, now that %ac_config_files_location
+ have them.
+ * tests/conflnk3.test: New file.
+ * tests/Makefile.am (TESTS): Add conflnk3.test.
+
+2003-12-02 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * configure.ac, NEWS: Bump version to 1.7i.
+
+ * configure.ac, NEWS: Bump version to 1.7h.
+
+ * doc/automake.texi (Default _SOURCES): Fix reference to true.
+
+ * lib/texinfo.tex: New upstream version.
+
+2003-11-30 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (handle_source_transform): If it's present, use
+ libfoo_la.c instead of libfoo.c as the default source of
+ libfoo.la, and issue an -Wobsolete diagnostic. Do not be
+ greedy in the suffix replacement regex.
+ * doc/automake.texi (Default _SOURCES): New node.
+ (Program Sources, Libtool Modules): Refer to it.
+ * tests/ltlibsrc.test: Update to check for old default source files.
+
+2003-11-30 Gary V. Vaughan <gary@gnu.org>
+
+ * automake.in (&handle_source_transform): Calculate a default file
+ for use in the absence of an appropriate _SOURCES declaration by
+ first stripping any suffix from the unxformed target name, and
+ appending `.c'.
+ * doc/automake.texi (Program Sources, Libtool Modules): Document this.
+ * tests/ltlibsrc.test: New file.
+ * tests/Makefile.am (TESTS): Add ltlibsrc.test.
+
+2003-11-29 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/Automake/Variable.pm (loc_and_value_as_list_recursive,
+ _value_as_list_recursive_worker): Merge into ...
+ (value_as_list_recursive): ... this function. Pass options
+ as a hash argument, and use the `location' option to trigger
+ the behavior of loc_and_value_as_list_recursive.
+ (traverse_recursively, transform_variable_recursively): Take
+ options as a %options argument.
+ (_do_recursive_traversal): Perform expansion of inner variables
+ (as in `$(FILE).ext') on request.
+ * automake.in (handle_options, check_libobjs_sources)
+ (handle_source_transform, handle_LIBOBJS, handle_ltlibraries)
+ (handle_ltlibraries, handle_man_pages, handle_dist)
+ (handle_gettext, am_install_var): Adjust usage of
+ value_as_list_recursive.
+ (handle_texinfo_helper): Pass inner_expand to
+ value_as_list_recursive.
+ * tests/txinfo28.test: New file.
+ * tests/Makefile.am (TESTS): Add txinfo28.test.
+ Report from Ralf Corsepius.
+
+ * lib/Automake/Variable.pm (_do_recursive_traversal): Do not
+ update @_substfroms and @_substfroms for undefined variables.
+ * tests/substre2.test: New file.
+ * tests/Makefile.am (TESTS): Add substre2.test.
+
+ * lib/Automake/VarDef.pm (value): Rename as ...
+ (raw_value): ... this.
+ (value): New method, strip # and \\\n.
+ (dump): Use raw_value.
+ * lib/Automake/Variable.pm (output): Use raw_value.
+ (value_as_list): Simplify, now that backslash and comments
+ are already removed.
+ * tests/txinfo22.test: Make sure Automake isn't confused
+ by comments in variables.
+
+2003-11-27 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/automake.texi: More target vs. rule editing. Back out some
+ of the previous changes. It's OK to talk about targets as "entry
+ points", or as thing to build, but targets cannot be run: rules
+ are run.
+
+ * doc/automake.texi: s/target/rule/ where appropriate. A target
+ is the destination of a target rule, not the rule itself.
+ Suggested by Bruno Haible.
+
+2003-11-25 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * configure.ac, NEWS: Bump version to 1.7g.
+
+ * configure.ac, NEWS: Bump version to 1.7f.
+
+ * automake.in (prepend_srcdir): Parenthesize @inputs to remove
+ a maintainer-check warning.
+ * tests/subst2.test: Rewrite the $MAKE invocation to please
+ maintainer-check.
+
+ * lib/config.sub, lib/config.guess, lib/texinfo.tex: New upstream
+ versions.
+
+ * doc/automake.texi (Program variables): Mention per-target
+ _CPPFLAGS in the documentation of INCLUDES.
+ * automake.in (generate_makefile): Likewise in the INCLUDES diagnostic.
+ Report from Bob Friesenhahn.
+
+ * doc/automake.texi (Extending): Elaborate on overriding.
+ * NEWS: Likewise.
+ Suggested by Bruno Haible.
+
+2003-11-24 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/Automake/Variable.pm (output): Add $(am__empty) to variable
+ definitions that end with a line full of @substitutions@ that
+ would confuse HP-UX Make if it were blank.
+ (transform_variable_recursively): Make sure not to erase empty
+ variables.
+ * tests/Makefile.am (TESTS): Add subst2.test.
+ * tests/subst2.test: New file.
+ Report from Harlan Stenn.
+
+ * lib/am/texibuild.am (%SOURCE_SUFFIX%.html): Work around a
+ Texinfo 4.1 bug.
+ Report from Dalibor Topic.
+
+2003-11-22 Alexandre Duret-Lutz <adl@gnu.org>
+
+ Fix for PR automake/411:
+ * automake.in (rewrite_inputs_into_dependencies): Simplify, and rename
+ into ...
+ (prepend_srcdir): ... this.
+ (rewrite_inputs_into_dependencies): New function, extracted from ...
+ (handle_configure): ... here. Adjust to use prepend_srcdir
+ or rewrite_inputs_into_dependencies where needed. Especially,
+ using (the new) rewrite_inputs_into_dependencies to compute
+ Makefile dependencies will fix PR/411.
+ * lib/am/configure.am (DIST_COMMON): Remove %MAKEFILE-IN%, it's
+ already distributed by rewrite_inputs_into_dependencies.
+ * tests/Makefile.am (TESTS): Add output10.test, remove distcom.test.
+ * tests/colon3.test: Use set -e. Don't allow any AUTOMAKE
+ invocation refer to zardoz. Make sure two.in and three.in
+ appear as $(srcdir)/two.in and $(srcdir)/three.in dependencies.
+ * tests/distcom.test: Delete. This is covered by tests/output9.test.
+ * tests/output10.test: New file, for PR/411.
+
+2003-11-21 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (append_exeext): Do not append $(EXEEXT) to
+ @substitutions@.
+ * tests/exeext4.test: New file.
+ * tests/Makefile.am (TESTS): Add exeext4.test.
+
+2003-11-19 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/am/configure.am (%MAKEFILE%): Remove %MAINTAINER-MODE%,
+ mistakenly added on 2001-03-05.
+ * tests/remake5.test: New file.
+ * tests/Makefile.am (TESTS): Add remake5.test.
+ Report from Ralf Corsepius.
+
+2003-11-18 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * configure.ac, NEWS: Bump version to 1.7e.
+
+ * configure.ac, NEWS: Bump version to 1.7d.
+
+ * lib/config.sub, lib/config.guess, lib/texinfo.tex: New
+ upstream versions.
+
+2003-11-18 Maciej W. Rozycki <macro@ds2.pg.gda.pl> (tiny change)
+ Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/am/texinfos.am (install-info): Depend on
+ install-info-recursive or install-info-am even if no-installinfo.
+ * tests/txinfo27.test: New file.
+ * tests/Makefile.am (TESTS): Add txinfo26.test.
+
+2003-11-18 Paolo Bonzini <bonzini@gnu.org>
+ Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/ylwrap: Do not overwrite headers if they haven't changed.
+ Fix the include guard substitution.
+ * tests/yacc6.test: Augment to run ylwrap, and make sure it
+ does not needlessly update headers.
+ * tests/yacc8.test: Make sure headers are not needlessly updated
+ with ylwrap is not used. Move `test -f foo.o' into the
+ Makefile as `test -f foo.$(OBJEXT)' for portability.
+
+2003-11-17 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (generate_makefile): Define SUBDIRS if it is
+ not defined and DIST_SUBDIRS is.
+ * tests/subpkg2.test: New file.
+ * tests/Makefile.am (TESTS): Add subpkg2.test.
+ Report from Gary V. Vaughan.
+
+ * tests/suffix11.test: Check for suffixes containing `-'.
+ * lib/Automake/Rule.pm ($_SUFFIX_RULE_PATTERN): Accept `-' in
+ suffixes.
+
+ * lib/Automake/Rule.pm (define): Suggest using target-local instead
+ of target-am, not target-am-local.
+ * tests/overrid.test: Check the diagnostic for clean-am.
+ Report from Bruno Haible.
+
+2003-11-17 Jim Meyering <jim@meyering.net>
+
+ * bootstrap: Require not only that `perl' have the executable
+ bit set, but also that it is not a directory.
+
+ * lib/am/configure.am: Mark %MAKEFILE% as `.PRECIOUS'.
+
+2003-11-17 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (ac_config_files_location): Declare as a hash.
+ (handle_configure): Rewrite the computation of AC_CONFIG_FILES
+ dependencies; make sure we don't use $(srcdir) or $(top_srcdir)
+ for inputs which are also outputs, and do not check inputs
+ relatively to the current directory.
+ (scan_autoconf_config_files): Take $where as argument, and
+ fill $ac_config_files_location.
+ * tests/output8.test, tests/output9.test: New files.
+ * tests/Makefile.am (TESTS): Add output8.test and output9.test.
+ Report from Bruno Haible.
+
+2003-11-14 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * tests/aclibobj.test, tests/aclocal.test, tests/aclocal3.test,
+ tests/acoutbs.test, tests/acoutbs2.test, tests/acoutnoq.test,
+ tests/acoutpt.test, tests/acoutpt2.test, tests/acoutqnl.test,
+ tests/acsilent.test, tests/acsubst.test, tests/acsubst2.test,
+ tests/all.test, tests/alpha.test, tests/amassign.test,
+ tests/ammissing.test, tests/ansi.test, tests/ansi10.test,
+ tests/ansi2.test, tests/ansi3.test, tests/ansi3b.test,
+ tests/ansi4.test, tests/ansi5.test, tests/ansi6.test,
+ tests/ansi7.test, tests/ansi9.test, tests/ar.test,
+ tests/autohdr.test, tests/autohdr2.test, tests/auxdir.test,
+ tests/auxdir2.test, tests/backsl.test, tests/backsl2.test,
+ tests/badprog.test, tests/block.test, tests/canon2.test,
+ tests/canon3.test, tests/canon4.test, tests/canon5.test,
+ tests/ccnoco.test, tests/check.test, tests/check2.test,
+ tests/check3.test, tests/checkall.test, tests/clean.test,
+ tests/colneq2.test, tests/colon.test, tests/colon2.test,
+ tests/colon3.test, tests/colon4.test, tests/colon5.test,
+ tests/colon6.test, tests/colon7.test, tests/comment.test,
+ tests/comment2.test, tests/comment4.test, tests/comment6.test,
+ tests/comment7.test, tests/compile_f_c_cxx.test, tests/cond.test,
+ tests/cond10.test, tests/cond11.test, tests/cond13.test,
+ tests/cond14.test, tests/cond15.test, tests/cond16.test,
+ tests/cond17.test, tests/cond18.test, tests/cond19.test,
+ tests/cond21.test, tests/cond22.test, tests/cond25.test,
+ tests/cond26.test, tests/cond28.test, tests/cond3.test,
+ tests/cond4.test, tests/cond5.test, tests/cond6.test,
+ tests/cond7.test, tests/cond8.test, tests/cond9.test,
+ tests/condd.test, tests/condinc.test, tests/condlib.test,
+ tests/condman.test, tests/condman2.test, tests/conf2.test,
+ tests/confdeps.test, tests/confh.test, tests/confh4.test,
+ tests/config.test, tests/confincl.test, tests/conflnk.test,
+ tests/conflnk2.test, tests/confsub.test, tests/confvar.test,
+ tests/confvar2.test, tests/copy.test, tests/ctarget1.test,
+ tests/cxx.test, tests/cxxansi.test, tests/cxxcpp.test,
+ tests/cxxlibobj.test, tests/cxxlink.test, tests/cxxnoc.test,
+ tests/cxxo.test, tests/cygwin32.test, tests/dash.test,
+ tests/defun.test, tests/defun2.test, tests/dejagnu.test,
+ tests/dejagnu3.test, tests/dejagnu4.test, tests/dejagnu5.test,
+ tests/dejagnu6.test, tests/dejagnu7.test, tests/depacl2.test,
+ tests/depcomp.test, tests/depcomp2.test, tests/depcomp4.test,
+ tests/depdist.test, tests/depend.test, tests/depend2.test,
+ tests/depend3.test, tests/depend4.test, tests/destdir.test,
+ tests/dirlist.test, tests/discover.test, tests/distcom.test,
+ tests/distcom2.test, tests/distdir.test, tests/distname.test,
+ tests/dollar.test, tests/double.test, tests/dup2.test,
+ tests/empty.test, tests/empty2.test, tests/empty3.test,
+ tests/empty4.test, tests/error.test, tests/exdir.test,
+ tests/exeext.test, tests/exeext3.test, tests/exsource.test,
+ tests/ext.test, tests/ext2.test, tests/extra.test,
+ tests/extra2.test, tests/extra3.test, tests/extra4.test,
+ tests/extra5.test, tests/extra6.test, tests/extra7.test,
+ tests/flibs.test, tests/fnoc.test, tests/fo.test,
+ tests/fonly.test, tests/fortdep.test, tests/fpinst2.test,
+ tests/fpinstall.test, tests/gcj.test, tests/gcj3.test,
+ tests/gcj4.test, tests/gnits2.test, tests/gnits3.test,
+ tests/header.test, tests/implicit.test, tests/include.test,
+ tests/include2.test, tests/info.test, tests/insh2.test,
+ tests/install2.test, tests/installdir.test, tests/instdat.test,
+ tests/instdat2.test, tests/instexec.test, tests/insthook.test,
+ tests/instman.test, tests/instman2.test, tests/instsh.test,
+ tests/instsh2.test, tests/interp.test, tests/interp2.test,
+ tests/java.test, tests/java2.test, tests/javaprim.test,
+ tests/javasubst.test, tests/ldadd.test, tests/ldflags.test,
+ tests/lex.test, tests/lex3.test, tests/lex4.test, tests/lex5.test,
+ tests/libobj11.test, tests/libobj2.test, tests/libobj4.test,
+ tests/libobj5.test, tests/libobj7.test, tests/libobj8.test,
+ tests/library.test, tests/libtool.test, tests/libtool2.test,
+ tests/libtool3.test, tests/libtool5.test, tests/link_c_cxx.test,
+ tests/link_dist.test, tests/link_f_only.test, tests/link_fc.test,
+ tests/link_fccxx.test, tests/link_fcxx.test, tests/lisp.test,
+ tests/listval.test, tests/ltdeps.test, tests/ltlibobjs.test,
+ tests/maintclean.test, tests/make.test, tests/makej.test,
+ tests/makevars.test, tests/man.test, tests/man2.test,
+ tests/mclean.test, tests/mdate.test, tests/mdate2.test,
+ tests/mdate3.test, tests/mdate4.test, tests/mkinst2.test,
+ tests/mkinstall.test, tests/nobase.test, tests/nodef.test,
+ tests/nodef2.test, tests/nodep.test, tests/nodepcomp.test,
+ tests/nodist.test, tests/nodist2.test, tests/nodist3.test,
+ tests/noinst.test, tests/noinstdir.test, tests/nolink.test,
+ tests/nostdinc.test, tests/number.test, tests/obsolete.test,
+ tests/order.test, tests/outdir.test, tests/output.test,
+ tests/output2.test, tests/output3.test, tests/output4.test,
+ tests/parse.test, tests/phony.test, tests/pluseq.test,
+ tests/pluseq10.test, tests/pluseq2.test, tests/pluseq3.test,
+ tests/pluseq4.test, tests/pluseq6.test, tests/pluseq8.test,
+ tests/postproc.test, tests/ppf77.test, tests/pr2.test,
+ tests/pr204.test, tests/pr220.test, tests/pr224.test,
+ tests/pr229.test, tests/pr243.test, tests/pr266.test,
+ tests/pr279-2.test, tests/pr279.test, tests/pr287.test,
+ tests/pr300-lib.test, tests/pr300-ltlib.test,
+ tests/pr300-prog.test, tests/pr307.test, tests/pr72.test,
+ tests/pr87.test, tests/pr9.test, tests/prefix.test,
+ tests/proginst.test, tests/python.test, tests/python3.test,
+ tests/python4.test, tests/python5.test, tests/python6.test,
+ tests/python7.test, tests/python8.test, tests/python9.test,
+ tests/recurs2.test, tests/remake.test, tests/remake2.test,
+ tests/remake3.test, tests/req.test, tests/reqd.test,
+ tests/rulepat.test, tests/scripts.test, tests/sinclude.test,
+ tests/space.test, tests/specflg3.test, tests/specflg6.test,
+ tests/specflg7.test, tests/specflg8.test, tests/specflg9.test,
+ tests/spell3.test, tests/spelling.test, tests/spy.test,
+ tests/stamph2.test, tests/stdlib2.test, tests/strip.test,
+ tests/subcond.test, tests/subcond2.test, tests/subcond3.test,
+ tests/subdir.test, tests/subdir2.test, tests/subdir3.test,
+ tests/subdir4.test, tests/subdir5.test, tests/subdir6.test,
+ tests/subdirbuiltsources.test, tests/subobj.test,
+ tests/subobj2.test, tests/subobj3.test, tests/subobj4.test,
+ tests/subobj5.test, tests/subobj6.test, tests/subobj7.test,
+ tests/subobj8.test, tests/subobj9.test, tests/subobjname.test,
+ tests/subpkg.test, tests/subst.test, tests/substref.test,
+ tests/suffix.test, tests/suffix10.test, tests/suffix2.test,
+ tests/suffix3.test, tests/suffix4.test, tests/suffix5.test,
+ tests/suffix6.test, tests/suffix7.test, tests/suffix8.test,
+ tests/suffix9.test, tests/symlink2.test, tests/symlink3.test,
+ tests/tags.test, tests/tagsub.test, tests/target-cflags.test,
+ tests/transform.test, tests/txinfo.test, tests/txinfo10.test,
+ tests/txinfo13.test, tests/txinfo16.test, tests/txinfo17.test,
+ tests/txinfo18.test, tests/txinfo2.test, tests/txinfo23.test,
+ tests/txinfo24.test, tests/txinfo25.test, tests/txinfo26.test,
+ tests/txinfo3.test, tests/txinfo5.test, tests/txinfo6.test,
+ tests/txinfo7.test, tests/txinfo8.test, tests/txinfo9.test,
+ tests/unused.test, tests/vars.test, tests/vars3.test,
+ tests/vartar.test, tests/version.test, tests/version2.test,
+ tests/version4.test, tests/version6.test, tests/version7.test,
+ tests/vpath.test, tests/vtexi.test, tests/vtexi2.test,
+ tests/werror.test, tests/whoami.test, tests/yacc.test,
+ tests/yacc3.test, tests/yacc4.test, tests/yacc5.test,
+ tests/yacc6.test, tests/yacc7.test, tests/yacc8.test,
+ tests/yaccpp.test, tests/yaccvpath.test: Fix license to refer
+ to Automake, not autoconf.
+
+ Fix for PR automake/408:
+ * lib/am/texinfos.am (install-info-am): Strip any $(srcdir)/ prefix
+ from $file, as already done for dist-info.
+ * tests/Makefile.am (TESTS): Add txinfo26.test.
+ * tests/txinfo26.test: New file.
+ Report from Nicholas Wourms.
+
+2003-11-13 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * m4/lispdir.m4 (AM_PATH_LISPDIR): If EMACS=t, empty it before
+ running AC_CHECK_PROGS(EMACS).
+ * lib/am/lisp.am (elc-stamp): Quote $(EMACS).
+ Report from Jens Petersen.
+
+ * tests/mkinst2.test: Rewrite.
+
+ * m4/mkdirp.m4: Do not require AM_AUX_DIR_EXPAND.
+
+2003-11-12 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (scan_autoconf_traces): Honor sinclude.
+ * tests/sinclude.test: Check for sinclude.
+ Report from Roberto Bagnara.
+
+2003-11-11 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * Makefile.am: Do not rerun `make dist' after tagging, `make distcheck'
+ already build the tarballs. Commit files right before tagging.
+ Check NEWS before running distcheck.
+
+ * m4/amversion.in (AM_AUTOMAKE_VERSION): Missing cosmetic space.
+
+ * configure.ac, NEWS: Bump version to 1.7c.
+
+ * configure.ac, NEWS: Bump version to 1.7b.
+ * Makefile.am (maintainer-check): Ignore comments while
+ scanning for rm without -f.
+
+ * Makefile.am (fetch): Get all files from savannah. Do not
+ postprocess Struct.pm and XFiles.pm, since we now are the master
+ of these.
+ * lib/config.sub, lib/config.guess, lib/config-ml.in,
+ lib/texinfo.tex: New upstream versions.
+
+ * configure.ac: Check that autoconf is installed, that it works,
+ and that it is recent enough in three steps, not one.
+
+ * NEWS: Minor edits.
+
+ * lib/Makefile.am (dist_script_DATA): Move config-ml.in ...
+ (dist_pkgvdata_DATA): ... here.
+
+ * tests/spy.test: Document overlapping ::-rules incompatibilities,
+ and check only non-overlapping ::-rules.
+
+ * doc/automake.texi (Texinfo): Define MAKEINFO, MAKEINFOHTML,
+ MAKEINFOFLAGS, AM_MAKEINFOFLAGS, AM_MAKEINFOHTMLFLAGS, TEXI2DVI,
+ TEXI2PDF, DVIPS, and TEXINFO_TEX in a table.
+ (Uniform): Do not speak of missing HTML support, this is
+ confusing.
+ * lib/Automake/Variable.pm (_silent_variable_override): Add
+ AM_MAKEINFOHTMLFLAGS.
+ * lib/am/texibuild.am (%SOURCE_SUFFIX%.html): Use MAKEINFOHTML and
+ AM_MAKEINFOHTMLFLAGS instead of MAKEINFO and AM_MAKEINFOFLAGS.
+ * lib/am/texinfos.am (MAKEINFOHTML, AM_MAKEINFOHTMLFLAGS): Define.
+ * tests/txinfo21.test: Add a test with AM_MAKEINFOHTMLFLAGS.
+
+2003-11-10 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * tests/spy.test: New file.
+ * tests/Makefile.am (TESTS): Add spy.test.
+
+ * automake.in (handle_configure): Distribute and define mkinstalldirs
+ only if it is already present in the package.
+ (scan_autoconf_files): Do not require mkinstalldirs.
+ (require_build_directory): Use $(mkdir_p), not $(mkinstalldirs).
+ * lib/am/data.am, lib/am/distdir.am, lib/am/install.am,
+ lib/am/java.am, lib/am/libs.am, lib/am/lisp.am, lib/am/mans.am,
+ lib/am/progs.am, lib/am/python.am, lib/am/scripts.am,
+ lib/am/texinfos.am: Use $(mkdir_p) instead of $(mkinstalldirs).
+ * m4/mkdirp.m4: New file.
+ * m4/Makefile.am (dist_m4data_DATA): Add mkdirp.m4.
+ * m4/init.m4 (AM_INIT_AUTOMAKE): Call AM_PROG_MKDIR_P.
+ * tests/Makefile.am (TESTS): Remove insh.test.
+ * tests/insh.test: Delete.
+ * tests/defs.in, tests/instsh.test: Do not install mkinstalldirs.
+ * tests/auxdir.test: Install mkinstalldirs.
+ * tests/distdir.test, tests/instman.test, tests/pr2.test: Use
+ $(mkdir_p), not $(mkinstalldirs).
+ * tests/empty.test: Run configure, do not substitute things by hand.
+ * doc/automake.texi (Optional) <AC_CONFIG_FILES>: Take install-sh
+ as an example, not mkinstalldirs.
+ (Auxiliary Programs) <mkinstalldirs>: Update.
+
+ * tests/defs.in: Handle required=bzip2.
+
+ * tests/defs.in: Export SHELL.
+ * tests/cond11.test: Missing quotes.
+ * tests/nogzip2.test: Require bzip2.
+
+2003-11-09 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * NEWS: Add news entries from 1.6.x and 1.7.x.
+
+ * automake.texi (Optional) <AC_SUBST>: Grammar fixes.
+
+ * automake.in (check_gnu_standards): Install COPYING only if
+ none of COPYING, COPYING.LIB, or COPYING.LESSER exist. Do not
+ overwrite the license otherwise.
+ * tests/Makefile.am (TESTS): Add license.test.
+ * tests/license.test: New file.
+
+ * lib/mkinstalldirs: Mention automake-patches@gnu.org and
+ bug-automake@gnu.org.
+ * lib/compile, lib/depcomp, lib/elisp-comp, lib/mdate-sh:
+ Likewise. Also add support for --help and --version.
+ * lib/py-compile, lib/ylwrap: Likewise, and reindent.
+
+2003-11-08 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/am/tags.am (ETAGSFLAGS, CTAGSFLAGS): Remove.
+ * lib/am/dejagnu.am (RUNTESTFLAGS): Remove.
+ * lib/am/java.am (JAVACFLAGS): Remove.
+ * tests/dejagnu3.test: Check that the environment value
+ of RUNTESTFLAGS get passed down to runtest.
+ Suggested by Mark Mitchell.
+
+ * lib/am/depend2.am (?GENERIC?%EXT%.o, ?GENERIC?%EXT%.obj)
+ (?GENERIC?%EXT%.lo): Do not echo compile command manually, this
+ breaks `make -s'. Instead, fold the compile command on two lines,
+ so that it take less space on the display.
+ Suggested by Karl Berry and William Fulton.
+
+ * lib/am/texibuild.am (%DEST_PREFIX%%DEST_SUFFIX%): Rename as ...
+ (%DEST_INFO_PREFIX%%DEST_SUFFIX%): ... this, and honor ?INSRC?
+ to select $(srcdir) or `.' builds.
+ (INFO_DEPS): Define here.
+ * lib/am/texinfos.am (dist-info): Strip filename starting with
+ "$(srcdir)/".
+ * automake.in (output_texinfo_build_rules): Take a new argument
+ $insrc, and adjust substitutions in 'texibuild'.
+ (handle_texinfo_helper): Compute a regex of all user-cleaned
+ files, and use this to select whether to build .info files in `.'
+ or $(srcdir). Give an account of the $(srcdir) vs `.' debacle.
+ Alway build the version.texi and stamp files in $(srcdir). Do not
+ define INFO_DEPS.
+ * tests/Makefile.am (TESTS): Add txinfo23.test, txinfo24.test,
+ and txinfo25.test.
+ * tests/txinfo23.test, tests/txinfo24.test, tests/txinfo25.test:
+ New files.
+ * tests/txinfo13.test, tests/txinfo16.test, tests/txinfo3.test,
+ tests/vtexi.test: Adjust to new rules.
+
+2003-11-05 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * m4/init.m4 (AM_INIT_AUTOMAKE): Require Autoconf 2.58.
+ * configure.ac: Require Autoconf 2.58a, and check for 2.58.
+
+2003-10-27 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/am/remake-hdr.am ($(srcdir)/%CONFIG_HIN%): Erase %STAMP%.
+ * tests/Makefile.am (TESTS): Add autohdr3.test
+ * tests/autohdr3.test: New file.
+
+ * automake.in (handle_configure): Rename am__configure_deps
+ as am__aclocal_m4_deps and include $(ACLOCAL_M4_SOURCES) and
+ $configure_ac. Define am__configure_deps as am__aclocal_m4_deps
+ + $(CONFIGURE_DEPENDENCIES) + $(ACLOCAL_M4). Do not define
+ ACLOCAL_M4_DEPS while processing configure.am.
+ (make_paragraphs): Do not define %CONFIGURE_AC%, now unused.
+ (scan_aclocal_m4): Do not distribute aclocal.m4, this
+ is done from lib/am/configure.am.
+ * lib/am/configure.am (%MAKEFILE-IN%, DIST_COMMON,
+ $(top_srcdir)/configure, $(ACLOCAL_M4)): Simplify using
+ $(am__configure_deps) or $(am__aclocal_m4_deps).
+ * lib/am/remake-hdr.am ($(srcdir)/%CONFIG_HIN%): Likewise.
+
+2003-10-26 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/am/remake-hdr.am ($(srcdir)/%CONFIG_HIN%): Depend on
+ $(am__configure_deps).
+
+ * automake.in (handle_configure): Distribute all AC_CONFIG_HEADERS
+ sources, and without using require_file. Define %CONFIG_H_DEPS%
+ and %FIRST_CONFIG_HIN% while processing remake-hdr.am.
+ * lib/am/remake-hdr.am (%STAMP%): Use %CONFIG_H_DEPS% instead
+ of (srcdir)/%CONFIG_HIN%. Output the $(srcdir)/%CONFIG_HIN%
+ rule only for the first header (i.e., if %FIRST_CONFIG_HIN%).
+ * tests/autohdr4.test: New file.
+ * tests/Makefile.am (TESTS): Add autohdr4.test.
+ * tests/config.test: Do not grep, run things to see if they work.
+
+2003-10-25 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * tests/output7.test: Populate sub/ with a dummy file, so that it
+ is not empty. This fixes a failure reported by Patrick Welche.
+ * lib/am/distdir.am: Add note about tar's `-o' option and empty
+ directories.
+
+2003-10-24 Didier Cassirame <faded@free.fr> (tiny change)
+
+ * lib/ylwrap: Typo in regex.
+
+2003-10-23 Paul Eggert <eggert@twinsun.com>
+
+ * lib/Automake/XFile.pm: Don't assume -j is solo.
+ Issue a more-informative diagnostic.
+ Problems reported by Eric Sunshine.
+
+2003-10-21 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * m4/lispdir.m4 (AM_PATH_LISPDIR): Always check for Emacs.
+ Always define lispdir.
+ * lib/am/lisp.am (install-%DIR%LISP, uninstall-%DIR%LISP): Check
+ $(EMACS) to decide whether _LISP files must be installed,
+ not $(lispdir).
+ * doc/automake.texi (Emacs Lisp): Mention the two ways to install
+ non byte-compiled Emacs lisp files.
+ * tests/lisp4.test, tests/lisp5.test: Check "make install"
+ when EMACS=no.
+ Suggested by Simon Josefsson.
+
+ * NEWS: Clarify the entry about multiple conditional definitions
+ of _PROGRAMS, _LDADD, and _LIBADD.
+ Report from Simon Josefsson.
+
+ * lib/am/install.am (install-strip): Override install_sh_PROGRAM
+ too.
+ Report from Elmar Hoffmann.
+
+2003-10-07 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * aclocal.in ("MAIN", usage, parse_arguments): Move near
+ the end, so "MAIN" can use prototypes.
+ (scan_configure): Move later too, for the sake of prototypes.
+ (scan_configure_dep): Fix setting of $scanned_configure_dep.
+ (trace_used_macros): Do not take any argument.
+
+2003-10-06 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * tests/stdlib2.test: Check AM_LDFLAGS alone.
+
+ * lib/config.guess, lib/config.sub, lib/texinfo.tex: New upstream
+ versions.
+
+ * automake.in (handle_ltlibraries): Also grep AM_LDFLAGS for `-module'.
+ * tests/stdlib2.test: New file.
+ * tests/Makefile.am (TESTS): Add stdlib2.test.
+ Report from Kevin P. Fleming.
+
+2003-10-03 Richard Dawe <rich@phekda.freeserve.co.uk> (tiny change)
+
+ * tests/defs.in: For required=runtest, check that we are using
+ a DejaGnu that supports specifying the program on the command-line.
+
+2003-10-03 Alexandre Duret-Lutz <adl@gnu.org>
+
+ For Debian Bug #213524:
+ * lib/am/texinfos.am (install-info-am, uninstall-info-am): Merge
+ stderr and stdout, and grep only the first line while testing
+ install-info --version's output. This revert part of the change
+ from 2001-05-18.
+
+2003-10-01 Akim Demaille <akim@epita.fr>
+
+ * m4/amversion.in: Add (C) to the Copyright notice.
+
+2003-10-01 Paul Eggert <eggert@twinsun.com>
+
+ * lib/Automake/XFile.pm: Use Errno.
+ (lock): Ignore ENOLCK errors. Problem reported Andreas Schwab in
+ <https://mail.gnu.org/archive/html/bug-autoconf/2003-09/msg00141.html>.
+
+2003-09-30 Tom Tromey <tromey@redhat.com>
+
+ * lib/Automake/Options.pm (_process_option_list): Recognize
+ no-dist.
+ * NEWS: Update.
+ * doc/automake.texi (Options): Document no-dist.
+ * automake.in (check_cygnus): Set no-dist option.
+ (handle_dist): Recognize no-dist.
+ * tests/nodist3.test: New file.
+ * tests/Makefile.am (TESTS): Added nodist3.test.
+
+2003-09-29 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (handle_clean): Take $makefile as argument, and
+ define %MAKEFILE% while processing clean.am.
+ (generate_makefile): Pass $makefile to handle_clean.
+ * lib/am/clean.am (distclean, maintainer-clean): Erase %MAKEFILE%,
+ not Makefile.
+ * tests/gnumake.test: New file.
+ * tests/Makefile.am (TESTS): Add gnumake.test.
+ Report from Braden N. McDaniel.
+
+2003-09-26 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/automake.texi (Scripts): Update the example about automake.
+ Mention `dist_' for distributed scripts.
+
+ * lib/mkinstalldirs: Clean up after NextStep and OpenStep mkdir.
+ Suggested by Eric Sunshine.
+
+2003-09-25 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * README: More mailing lists.
+
+ * NEWS: Mention the switch to GNU FDL for the manual.
+
+2003-09-24 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/install-sh (src, dst): Protect names starting with `-',
+ as in mkinstalldirs.
+
+ * configure.in: Rename as ...
+ * configure.ac: ... this.
+ * README: s/configure.in/configure.ac/.
+
+ * doc/fdl.texi: New file.
+ * doc/Makefile.am (automake_TEXINFOS): New variable.
+ * doc/automake.texi (Copying This Manual): New appendix, include
+ fdl.texi.
+ (Macro and Variable Index, General Index): Move as subsections of ...
+ (Indices): This new appendix.
+
+ * doc/automake.texi: Refer to configure.ac instead of configure.in.
+
+ * automake.texi: Move ...
+ * doc/automake.texi: ... here.
+ * doc/Makefile.am: New file.
+ * configure.in: Output doc/Makefile.
+ * Makefile.am (SUBDIRS): Add doc.
+ (ETAGS_ARGS, TAGS_DEPENDENCIES): Move to doc/Makefile.am.
+
+2003-09-23 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * aclocal.in (write_aclocal): Consider files with relative
+ paths as local to the project, i.e., subject to m4_include.
+ * tests/subpkg.test (ACLOCAL_AMFLAGS): Make sure m4_include
+ is also used for .m4 files in the outer project.
+
+ Support for multiple inputs in AC_CONFIG_FILES.
+ Requested long ago by Harlan Stenn.
+ * automake.in (handle_dist): Remove unused argument $makefile.
+ (handle_subdirs): Expect SUBDIRS elements in $relative_dir,
+ not $am_relative_dir.
+ (rewrite_inputs_into_dependencies): Allow $add_srcdir to
+ be a filename that must always be prefixed by $(srcdir) or
+ $(top_srcdir).
+ (handle_configure, generate_makefile): Revamp to make the
+ Makefile.am, Makefile.in, Makefile more independent.
+ (locate_am): New function.
+ (scan_configure_dep, parse_arguments): Use locate_am.
+ (MAIN): Adjust call to generate_makefile.
+ * lib/am/configure.am: Remove %MAKEFILE-IN% from the dependencies
+ of %MAKEFILE%. %MAKEFILE-IN% is already in %MAKEFILE-DEPS%.
+ * tests/output6.test, tests/output7.test: New files.
+ * tests/Makefile.am (TESTS): Add them.
+ * automake.texi (Requirements) <AC_CONFIG_FILES>: Document how
+ multiple inputs are scanned.
+
+2003-09-13 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * Makefile.am (FETCHFILES, fetch): Do not fetch lib/Automake/XFile.pm
+ and lib/Automake/Struct.pm from Autoconf.
+ * lib/Automake/XFile.pm: Update comment, Automake is now
+ the master for this file. Cosmetic changes.
+
+2003-09-09 Akim Demaille <akim@epita.fr>
+
+ * lib/Automake/FileUtils.pm (&update_file): s/cannot not/cannot/g.
+ Reported by Gary Vaughan.
+ (&find_file): Walk the @include in forward order.
+
+2003-09-09 Akim Demaille <akim@epita.fr>
+
+ * lib/Automake/FileUtils.pm (&update_file): Be sure not to leave
+ trailing files.
+
+2003-09-07 Alexandre Duret-Lutz <adl@gnu.org>
+
+ Changes to m4_included files should also cause aclocal.m4 to change.
+ * aclocal.in (m4_include_rx): New variable.
+ (scan_configure_dep): New function.
+ (scan_configure, add_file): Simplify using scan_configure_dep.
+ * tests/Makefile.am (TESTS): Add acloca13.test.
+ * tests/aclocal13.test: New file.
+
+ * tests/instsh.test: Do not reset $ACLOCAL and $AUTOMAKE now
+ that we have fake version in the $PATH.
+
+ * aclocal.in (add_file): Remove useless filling of $output, probably
+ left a after CVS conflict. This code is now in write_aclocal.
+
+ * aclocal.in (configure_ac): Do not call require_configure_ac
+ before parsing the options.
+ * automake.in (configure_ac): Likewise.
+ * lib/Automake/Variable.pm (configure_ac): Do not require configure.ac,
+ find it.
+ * lib/Automake/Configure_ac.pm (require_configure_ac):
+ find_configure_ac never return an undefined value, so test
+ the file's existence instead.
+ * tests/Makefile.am (TESTS): Add help.test.
+ * tests/help.test: New file.
+
+2003-09-06 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/Automake/XFile.pm: Update to use ChannelDefs.
+ (close): Call Automake::FileUtils::handle_exec_errors on errors.
+ * automake.in (scan_autoconf_files): Exit with $?=63 on version
+ mismatch.
+ (scan_autoconf_traces): Likewise. Close the autoconf pipe to
+ capture abnormal exits.
+ * aclocal.in ($exit_status): Remove, and use Channels.pm's $exit_code
+ instead.
+ (trace_used_macros): Close the autom4te pipe to capture abnormal exits.
+ * lib/missing: When a tool has run and exited with $?=63, emulate
+ it. Adjust the diagnostic and pretend the tool is tool old in this
+ case. Use an emacs-updated "scriptversion" variable.
+ * configure.in: Output tests/aclocal-${APIVERSION} and
+ tests/automake-${APIVERSION}.
+ * tests/aclocal.in, tests/automake.in,
+ tests/missing.test, tests/missing2.test: New files.
+ * tests/defs.in (AUTOMAKE, ACLOCAL, PATH): Define
+ to use tests/aclocal-$APIVERSION and tests/automake-$APIVERSION.
+ * tests/dup3.test: Remove. alocal9.test, acloca10.test, and others are
+ already testing for this.
+ * tests/depacl2.test, tests/dup2.test, tests/order.test: Fix
+ configure.in so that aclocal works.
+ * tests/defun.test: Quote the AC_DEFUN body.
+ * tests/Makefile.am (TESTS): Add missing.test and missing2.test,
+ and remove dup3.test.
+ (check_SCRIPTS): Add aclocal and automake.
+
+ * tests/unused.test: Quote AC_DEFUN arguments.
+
+2003-09-05 Paul Eggert <eggert@twinsun.com>
+
+ * NEWS, aclocal.in, automake.in, automake.texi, lib/ansi2knr.c,
+ lib/depcomp, lib/missing, lib/py-compile,
+ lib/Automake/Channels.pm, lib/Automake/Rule.pm,
+ lib/Automake/Variable.pm, lib/Automake/tests/Condition.pl,
+ lib/am/dejagnu.am, lib/am/depend.am, lib/am/lisp.am,
+ lib/am/remake-hdr.am, lib/am/texi-vers.am, m4/obsolete.m4,
+ m4/python.m4, tests/backsl4.test, tests/defs.in,
+ tests/dejagnu7.test, tests/depacl2.test, tests/dirlist.test,
+ tests/error.test, tests/getopt.test, tests/gnuwarn.test,
+ tests/include2.test, tests/libobj10.test, tests/libtool5.test,
+ tests/libtool6.test, tests/lisp3.test, tests/phony.test,
+ tests/pr220.test, tests/subcond2.test, tests/subcond3.test,
+ tests/vtexi.test:
+ Spelling and minor grammar fixes.
+
+2003-09-01 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/config.sub, lib/config.guess, lib/texinfo.tex,
+ lib/config-ml.in, lib/symlink-tree: New upstream versions.
+
+2003-08-31 Thien-Thi Nguyen <ttn@gnu.org> (tiny change)
+
+ * tests/yacc7.test: Require bison.
+
+2003-08-31 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * aclocal.in (scan_file): Warn about underquoted AC_DEFUN.
+ ($underquoted_manual_once): New variable.
+ * automake.texi (Extending aclocal): Document this.
+
+2003-08-29 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * aclocal.in (@file_order): New variable, to make sure
+ files are output in the opposite order of the -I arguments.
+ (scan_file): Fill it.
+ (trace_used_macros, write_aclocal): Use it.
+ (scan_m4_files): Reverse the directory contents, so that
+ macros from the lexicographically greatest files are preferred.
+ * tests/aclocal9.test, tests/acloca10.test, tests/acloca11.test:
+ New files.
+ * tests/Makefile.am (TESTS): Add them.
+
+2003-08-24 Alexandre Duret-Lutz <adl@gnu.org>
+
+ For Debian Bug #206299:
+ * automake.in ($configure_deps_greatest_timestamp,
+ $output_deps_greatest_timestamp): New variables.
+ (initialize_per_input): Reset $output_deps_greatest_timestamp.
+ (scan_autoconf_traces, scan_autoconf_files, read_am_file):
+ Update $configure_deps_greatest_timestamp and
+ $output_deps_greatest_timestamp
+ (generate_makefile): Rewrite the logic to decide whether
+ to rewrite the output. Move the leading dup_channel_setup
+ and trailing drop_channel_setup to MAIN, so that
+ drop_channel_setup is executed for all exit paths.
+ * tests/aclocal7.test: Update to check for $AUTOMAKE --no-force
+ * tests/distcom6.test: New file. Report from Scott James Remnant.
+ * tests/Makefile.am (TESTS): Add distcom6.test.
+
+ * configure.in: Require Autoconf 2.57b to be sure
+ aclocal can use autom4te --language Autoconf-without-aclocal-m4.
+ * m4/init.m4: Likewise. Move the AC_PREREQ and m4_pattern_allow
+ calls inside the AM_INIT_AUTOMAKE macro.
+ * m4/auxdir.m4, m4/cond.m4, m4/lex.m4, m4/regex.m4: Move
+ AC_PREREQ calls inside the macros.
+ * m4/header.m4: Remove AC_PREREQ.
+
+ * automake.in (file_contents_internal): Do not add newlines before
+ empty actions.
+
+ * aclocal.in (write_aclocal): Take an output file and list of
+ used macros in arguments and make up the file contents here.
+ (trace_used_macros): New function.
+ (add_file): Do not update $output.
+ ($output): Delete.
+ (MAIN): Call trace_used_macros. Then rewrite aclocal.m4 only
+ for these traced macros. This should shorten aclocal.m4 by
+ stripping out unused macros.
+ * automake.texi (Invoking aclocal): Document ${AUTOM4TE}.
+ * tests/aclibobj.test: Make sure configure.in exists by the time
+ aclocal runs.
+ * tests/aclocal8.test: New file.
+ * tests/Makefile.am (TESTS): Add aclocal8.test.
+ Suggested by Bruno Haible and Akim Demaille.
+
+2003-08-21 Akim Demaille <akim@epita.fr>
+
+ * lib/Automake/Configure_ac.pm (&find_configure_ac)
+ (&require_configure_ac): Accept an optional directory argument.
+ ($configure_ac): Remove.
+ * aclocal.in, automake.in ($configure_ac): New.
+ * lib/Automake/Variable.pm: Don't use $configure_ac, just
+ configure.ac.
+
+2003-08-20 Akim Demaille <akim@epita.fr>
+
+ * lib/Automake/FileUtils.pm: More perldoc.
+ (&up_to_date_p): New.
+
+2003-08-17 Alexandre Duret-Lutz <adl@gnu.org>
+
+ Fix for PR automake/398:
+ * m4/python.m4: Do not call AC_PATH_PROGS if $PYTHON is already
+ set. Display `none' instead of `:' and $PYTHON is set to `:'
+ when no suitable interpreter is found. Honor ACTION-IF-FOUND and
+ ACTION-IF-NOT-FOUND.
+ * automake.texi (Python): Document ACTION-IF-FOUND and
+ ACTION-IF-NOT-FOUND.
+ * tests/python4.test, tests/python5.test, tests/python6.test,
+ tests/python7.test, tests/python8.test, tests/python9.test: New
+ files.
+ * tests/Makefile.am (TESTS): Add them.
+ Report from Per Cederqvist.
+
+2003-08-13 Alexandre Duret-Lutz <adl@gnu.org>
+
+ Fix for PR automake/399:
+ * m4/python.m4: Use AC_PATH_PROGS, not AC_PATH_PROG.
+ Report from Per Cederqvist.
+
+2003-08-12 Raja R Harinath <harinath@acm.org>
+
+ * lib/Automake/Condition.pm (strip): Replace loop with 'grep'.
+ (not): Replace loop with 'map'.
+ * lib/Automake/DisjConditions.pm (sub_conditions): Likewise.
+ * lib/Automake/Item.pm (not_alwasy_defined_in_cond):
+ Don't 'simplify' result of 'invert', since it's already in
+ canonical form.
+ * lib/Automake/Rule.pm (define): Replace loop with
+ 'not_always_defined_in_cond'.
+
+ * lib/Automake/DisjConditions.pm (ambiguous_p): Typo in comment.
+ * lib/Automake/Rule.pm (accept_extensions, msg_cond_rule): Likewise.
+ (define): Reword comment slightly.
+ * Variable.pm (_var_order, msg_cond_var): Typo in comment.
+ * tests/cond20.test (var2): Use foo.c instead of foo.cc to avoid
+ spurious automake error exit.
+
+2003-08-12 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/Automake/Item.pm, lib/Automake/ItemDef.pm: New files.
+ * lib/Automake/Rule.pm, lib/Automake/RuleDef.pm: New files.
+ * lib/Automake/Makefile.am (dist_perllib_DATA): Add them.
+ * lib/Automake/VarDef.pm: Make this a subclass of Automake::ItemDef.
+ (new): Adjust to call Automake::ItemDef::new.
+ (comment, location, owner): Delete. Now inherited from ItemDef.
+ * lib/Automake/Variable.pm: Make this a subclass of Automake::Item.
+ (_new): Adjust to call Automake::Item::new.
+ (name, def, rdef, _set, conditions, not_always_defined_in_cond):
+ Delete. How inherited from Item, where `_set' is called `set'.
+ * automake.in (SUFFIX_RULE_PATTERN): Delete. Now in Automake::Rule.
+ (suffix_rules_default): Delete. Now
+ Automake::Rule::_suffix_rules_default
+ (suffixes): Delete. Now Automake::Rule::suffixes.
+ (TARGET_AUTOMAKE, TARGET_USER): Delete. Now
+ Automake::RuleDef::RULE_AUTOMAKE and Automake::RuleDef::RULE_USER.
+ (%targets, %target_source, %target_name, %target_owner): Delete,
+ replaced by the Rule and RuleDef classes.
+ (dependencies, depend, actions): Delete. Now in Automake::Rule.
+ (suffix_rules, register_suffix_rule): Likewise.
+ (KNOWN_EXTENSIONS_PATTERN, accept_extensions): Likewise.
+ (known_extensions_list): Delete. Now
+ Automake::Rule::_known_extensions_list.
+ (target_conditions): Delete. Now inherited by Automake::Rule
+ from Automake::Item::conditions.
+ (rule_define): Delete. Now Automake::Rule::define. Adjust all
+ callers.
+ (target_defined): Delete. Now Automake::Rule::rule. Adjust all
+ callers.
+ (initialize_per_input): Adjust to call Automake::Rule::reset.
+ (err_target, err_cond_target, msg_cond_target, msg_target,
+ reject_target): Delete. Now defined in Automake::Rule as
+ err_rule, err_cond_rule, msg_cond_rule, msg_rule and reject_target.
+ Adjust all callers.
+ (handle_languages): Call suffix_rules_count.
+ * tests/location.test: Adjust expected diagnostics. We now display
+ $(EXEEXT) accurately.
+
+2003-08-10 Alexandre Duret-Lutz <adl@gnu.org>
+
+ Revert the fix for PR automake/291:
+ * lib/Automake/Variable.pm (define): Do not warn about variables
+ starting with `_' which are an issue on NEWS-OS 4.2R. According
+ to Paul Eggert, NEWS-OS 4.2R is ten years old, the latest version
+ was released on 1996 and is not in wide use. On the other hand,
+ variables starting with `_' are mandatory in several situations,
+ so diagnosing them is more annoying than useful.
+ * tests/canon5.test: Do not use -Wno-portability.
+ * tests/vars2.test: Delete.
+ * tests/Makefile.am (TESTS): Remove vars2.test.
+ Suggested by Jim Meyering.
+
+2003-08-09 Raja R Harinath <harinath@acm.org>
+
+ * lib/Automake/DisjConditions.pm (ambiguous_p): Simplify slightly.
+ * lib/Automake/tests/DisjConditions.pl (test_ambig): Test
+ Automake::Disjunctions::ambiguous_p.
+
+2003-08-07 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/Automake/Variable.pm (condition_ambiguous_p): Move ...
+ * lib/Automake/DisjConditions.pm (ambiguous_p): ... here.
+ * automake.in (rule_define): Adjust usage.
+ * lib/Automake/Variable.pm (_check_ambiguous_condition): Likewise.
+
+ * lib/Automake/Options.pm: New file.
+ * lib/Automake/Makefile.am (dist_perllib_DATA): Add Options.pm.
+ * automake.in (FOREIGN, GNU, GNITS, $default_strictness)
+ ($default_strictness_name, $strictness, $strictness_name)
+ (%options, %global_options, process_option_list)
+ (set_strictness): Remove, now in Options.pm.
+ (initialize_per_input): Call Automake::Options::reset.
+ (handle_options, get_object_extension, get_object_extension)
+ (handle_languages, handle_single_transform_list, handle_compile)
+ (handle_texinfo_helper, handle_man_pages, handle_dist)
+ (handle_configure, do_check_merge_target)
+ (handle_factored_dependencies, handle_tests)
+ (handle_minor_options, scan_autoconf_traces, check_cygnus)
+ (lang_sub_obj, lang_c_rewrite, lang_c_finish, rule_define)
+ (make_paragraphs, am_install_var, parse_arguments): Adjust
+ to set and read options via the new interface.
+
+2003-08-07 Raja R Harinath <harinath@acm.org>
+
+ * Makefile.am (maintainer-check): Update perllibdir.
+ * lib/Automake/Makefile.am (Config.pm): Depend on Makefile too.
+ (EXTRA_DIST): Add Config.in.
+ * Makefile.in, lib/Automake/Makefile.in: Regenerate.
+ * tests/defs.in (AUTOMAKE, ACLOCAL): Use absolute paths in
+ $perllibdir.
+
+2003-08-06 Raja R Harinath <harinath@acm.org>
+
+ * configure.in (AUTOMAKE, ACLOCAL): Search the 'lib' directory
+ from the builddir too, to pick up Automake::Config.
+ * tests/defs.in (AUTOMAKE, ACLOCAL): Likewise.
+ * configure: Regenerate.
+ * automake.in (BEGIN): Handle multiple directories in $perllibdir.
+ * aclocal.in (BEGIN): Likewise.
+
+2003-08-07 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * tests/ltcond.test: Thinko.
+
+2003-08-06 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/Automake/Config.in: New file.
+ * lib/Automake/Makefile.am (nodist_perllib_DATA, do_subst,
+ CLEANFILES): New variables.
+ (Config.pm): New rule.
+ * Makefile.am (maintainer-check): Adjust expected differences
+ between automake.in and automake.
+ * aclocal.in, automake.in: Use Automake::Config.
+
+2003-08-05 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * tests/ltconv.test: s/rm/rm -f/ to placate maintainer-check.
+
+ * automake.in (handle_texinfo_helper): Use the user definition
+ of TEXINFO_TEX before checking for cygnus or AC_CONFIG_AUX_DIR.
+ * tests/txinfo22.test: New file.
+ * tests/Makefile.am (TESTS): Add txinfo22.test.
+ Report from Tom Tromey.
+
+2003-08-03 Raja R Harinath <harinath@acm.org>
+
+ * lib/Automake/Variable.pm (@EXPORT): Remove
+ traverse_variable_recursively and
+ require_variables_for_variable.
+ (require_variables_for_variable, traverse_variable_recursively)
+ (_traverse_variable_recursively_worker): Convert to
+ Automake::Variable methods, remove support for being
+ invoked with variable names, and rename to ...
+ (requires_variables, traverse_recursively)
+ (_do_recursive_traversal): ... these.
+ (_value_as_list_recursive_worker, transform_variable_recursively):
+ Update to reflect changes.
+ * automake.in (handle_LIBOBJS, handle_ALLOCA)
+ (handle_libraries, handle_ltlibraries, am_primary_prefixes):
+ Likewise.
+ (define_objects_from_sources): Fix typo in comment.
+
+2003-08-02 Raja R Harinath <harinath@acm.org>
+
+ * automake.in (handle_source_transform): Replace 'grep' with 'map'.
+ (register_language): Replace 'grep' with 'foreach' modifier.
+
+2003-08-01 Raja R Harinath <harinath@acm.org>
+
+ * lib/Automake/Variables.pm (variables): Return a list of
+ Automake::Variable instances, not a list of strings.
+ (dump): Remove support for being invoked with a string.
+ (variables_dump): Adapt to these changes.
+ * automake.in (check_typos): Likewise.
+ (am_primary_prefixes): Likewise.
+
+2003-07-31 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> (tiny change)
+
+ * lib/depcomp (aix): Support AIX Compiler version 6.
+
+2003-07-31 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.texi (A Shared Library): Rewrite and split into
+ subsections. Valuable comments from Norman Gray, Harlan Stenn,
+ Tim Van Holder, and Guido Draheim.
+ * tests/ltcond.test, tests/ltcond2.test, tests/ltconv.test: New files.
+ * tests/Makefile.am (TESTS): Add them.
+
+2003-07-30 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (handle_single_transform_list): Complain about
+ foo.$(OBJEXT) being created both with libtool and without, not
+ about foo.lo.
+ Report from Tim Van Holder.
+
+2003-07-29 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * Makefile.am (FETCHFILES, fetch): Add config-ml.in and
+ symlink-tree.
+ * lib/config.sub, lib/config-ml.in, lib/texinfo.tex: New
+ upstream versions.
+
+2003-07-28 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (handle_configure): Cosmetic change to avoid
+ a maintainer-check complaint.
+
+2003-07-27 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/Automake/Variable.pm (@EXPORT): Remove variable_dump.
+ (variable_dump): Replace by ...
+ (dump): ... this method.
+ (rdef, _check_ambiguous_condition): Adjust to use ->dump.
+ (define, variables_dump): Adjust to use Automake::Variable::dump
+
+ * lib/am/compile.am (mostlyclean-compile): Do not erase core dumps.
+ * automake.texi (Built sources example): Adjust example.
+
+2003-07-26 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (get_object_extension, handle_languages)
+ (handle_single_transform_list, handle_compile, handle_compile)
+ (handle_texinfo_helper, handle_texinfo_helper, handle_man_pages)
+ (handle_tests, handle_minor_options, check_gnu_standards)
+ (lang_sub_obj, lang_c_rewrite, lang_c_finish, rule_define):
+ Simplify "if (defined $options{'X'})" into "if ($options{'X'})".
+
+ Complete changes from 2003-07-08.
+ * automake.in ($cmdline_use_dependencies, $use_dependencies): Remove,
+ replaced by $options{'no-dependencies'}.
+ ($global_options): Remove.
+ (%global_options): New variable.
+ (initialize_per_input): Empty %options.
+ (process_option_list): Take a location and %options ref argument,
+ process no-dependencies as other options.
+ (handle_options): Do not reparse the global options, just initialize
+ %options from %global_options and fill it with local options.
+ (handle_languages, handle_single_transform_list)
+ (handle_configure, check_cygnus): Adjust usage of
+ $options{'no-dependencies'}.
+ (make_paragraphs): Adjust usage of $options{'cygnus'}.
+ (parse_arguments): Set cygnus and no-dependencies in %global_options.
+ (scan_autoconf_traces) <AM_INIT_AUTOMAKE>: Call process_option_list
+ to fill %global_options.
+
+2003-07-25 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * tests/remake4.test: Use `$MAKE distdir' instead of `$MAKE dist' to
+ avoid the use of tar.
+
+2003-07-24 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * tests/gnuwarn2.test: Typo.
+
+ * tests/insthook.test: Use $MAKE, not make.
+
+ Fix missing rebuilds during `make dist' with BSD make.
+ * automake.in (generate_makefile): Do not push Makefile.in, and
+ Makefile.am into DIST_COMMON here.
+ * lib/am/configure.am (DIST_COMMON): Do it here, and use
+ %MAKEFILE-AM% and %MAKEFILE-IN% so that items in DIST_COMMON
+ actually match the targets. Prefix `configure' with `$(srcdir)/'
+ to match the target.
+ * tests/remake4.test: New file.
+ * tests/Makefile.am (TESTS): Add remake4.test.
+ Report from Akim Demaille.
+
+2003-07-23 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (handle_multilib): Register all-multi.
+ (file_contents_internal): Insert \n when concatenating actions
+ from "factored" rules.
+ * lib/config-ml.in: New file, from GCC, including a patch
+ from Ralf Corsepius (see GCC's PR 11526).
+ * lib/symlink-tree.in: New file, from GCC.
+ * lib/Makefile.am (dist_script_DATA): Add config-ml.in and
+ symlink-tree.
+ * lib/am/clean.am (distclean-generic): Do not delete Makefile here...
+ (distclean, maintainer-clean): ... do it here.
+ * lib/am/depend.am (distclean-depend): Likewise, replace by
+ (distclean, maintainer-clean): ... these.
+ * lib/am/multilib.am (all-recursive, install-recursive,
+ mostlyclean-recursive, clean-recursive, distclean-recursive,
+ maintainer-clean-recursive): Remove these rules.
+ (mostlyclean-am, clean-am, distclean-am, maintainer-clean-am): Replace
+ by ...
+ (mostlyclean, clean, distclean, maintainer-clean): ... these.
+ (all-am): Remove, done in handle_multilib.
+ (install-am): Replace by ...
+ (install-exec-am): ... this.
+ * tests/Makefile.am (TESTS): Add multlib.test.
+ * tests/multlib.test: New file, based on a test case by
+ Ralf Corsepius
+
+2003-07-23 Tom Tromey <tromey@redhat.com>
+
+ * lib/missing (autom4te): Typo.
+
+2003-07-16 Derek Price <derek@ximbiot.com>
+
+ * automake.in (scan_autoconf_traces): Handle AC_CONFIG_LINKS.
+ (handle_configure): Handle adding AC_CONFIG_LINKS arguments to
+ distclean targets (CONFIG_CLEAN_FILES makefile var).
+ * NEWS: Note new handling of AC_CONFIG_LINKS.
+ * automake.texi (Other things Automake recognizes): Ditto.
+ * tests/Makefile.am (TESTS): Add new tests.
+ * tests/conflnk.test: New test that links are cleaned on distclean.
+ * tests/conflnk2.test: New test that source files for links are
+ distributed.
+
+2003-07-15 Ralf Corsepius <corsepiu@faw.uni-ulm.de> (tiny change)
+
+ * automake.in (scan_autoconf_traces): Trace AM_ENABLE_MULTILIB to
+ render $seen_multilib functional again.
+
+2003-07-10 Raja R Harinath <harinath@cs.umn.edu>
+
+ Avoid using refs as hash keys.
+ * lib/Automake/Variable.pm ($_traversal): New.
+ (reset): Reset $_traversal.
+ (_new): New attribute 'scanned'.
+ (%_vars_scanned): Remove.
+ (traverse_variable_recursively)
+ (traverse_variable_recursively_worker):
+ Use $_traversal instead of %_vars_scanned to detect recursively
+ defined variables.
+
+ * lib/am/configure.am (am--refresh): Silence.
+
+2003-07-10 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/Automake/Variable.pm (define): Make clear the diagnostic
+ about variable names starting with `_' is about *Make* variables.
+
+ For Debian Bug #193907:
+ * automake.texi (Clean): make maintainer-clean should still
+ allow ./configure && make to run.
+
+ * automake.texi (CVS): Typo.
+
+2003-07-09 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * aclocal.in: Use Automake::FileUtils.
+ (parse_arguments, scan_configure, scan_m4_files): Never call
+ "die" to print an error message. Use print and exit.
+ * automake.in: Use Automake::FileUtils.
+ * lib/Automake/General.pm ($debug, $help, $tmp, $verbose,
+ $version, &debug, &getopt, &mktmpdir, &verbose): Remove.
+ (END): Do not massage Perl's exit code. Do not clean any temporary
+ directory.
+ (find_file, mtime, update_file, xsystem, contents): Move to ...
+ * lib/Automake/FileUtils.pm: ... this new file. Adjust to
+ report errors using Channels.
+ (handle_exec_errors, xqx): New functions, from Autoconf.
+ * lib/Automake/Makefile.am (dist_perllib_DATA): Add FileUtils.pm.
+
+ * lib/Automake/Variable.pm (_traverse_variable_recursively_worker):
+ Return the empty list on recursively defined variable. This
+ supersedes my change of 2003-07-02.
+
+2003-07-08 Akim Demaille <akim@epita.fr>
+
+ * automake.in ($cygnus_mode): Replace with $options{'cygnus'}.
+ Adjust all dependencies.
+ (&depend): Move next to %dependencies and prototype.
+ (&initialize_per_input): Initialize the 'cygnus' field of
+ '%options' to spare the code from 'exists' or 'defined' when
+ testing it.
+ (&handle_configure, &do_check_merge_target, &check_cygnus): Prototype.
+ (&parse_arguments): Rename '%options' and '%options_1st_pass' as
+ '%cli_options' and '%cli_options_1st_pass' to avoid clashes and
+ inconsistencies.
+
+2003-07-07 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (generate_makefile): Move near the end of the
+ file, after the definition of all called functions, so that
+ prototypes can be enforced.
+
+2003-07-06 Akim Demaille <akim@epita.fr>
+
+ * lib/am/subdirs.am (RECURSIVE_TARGETS): Move install-recursive,
+ install-exec-recursive, install-data-recursive and
+ uninstall-recursive addition to...
+ * lib/am/install.am: here.
+ * lib/am/texinfos.am, lib/am/subdirs.am: Remove the .PHONY
+ declaration of RECURSIVE_TARGETS.
+
+2003-07-06 Akim Demaille <akim@epita.fr>
+
+ * lib/Automake/Variable.pm, lib/Automake/VarDef.pm (VAR_SORTED):
+ New variable type.
+ Handle it.
+ * automake.in (&handle_subdirs): Prototype.
+ Adjust callers.
+ Make RECURSIVE_TARGETS a VAR_SORTED.
+
+2003-07-06 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&define_files_variable): New.
+ (&handle_texinfo_helper): Move the handling of user variables from
+ here, to...
+ (&handle_texinfo): here.
+ This is to balance the size of these functions, and to match the
+ convention of other _helper functions.
+ (&handle_texinfo_helper): Use &define_files_variable.
+ Move some code to use less variables.
+ Rename $info_cursor as $texi.
+ (&handle_texinfo): Do not call handle_texinfo_helper if there are
+ no TEXINFOS.
+ * lib/am/texinfos.am: Sort the occurrences of dvi, info, pdf, ps
+ and html.
+ Remove *-recursive targets from .PHONY, they are part of
+ $(RECURSIVE_TARGETS) anyway.
+ (install-info, mostlyclean-aminfo): Are .PHONY.
+
+2003-07-05 Akim Demaille <akim@epita.fr>
+
+ * lib/am/distdir.am: Use ';' as a terminator, not a separator, for
+ sed complex commands, as required by NetBSD sed.
+ Reported by Patrick Welche.
+
+2003-07-05 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/config.guess, lib/config.sub: New upstream version.
+
+2003-07-04 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.texi (Optional, Dist): AC_CONFIG_AUX_DIR files
+ are automatically distributed.
+
+ * lib/depcomp (icc): Update to grok ICC 7.1's output.
+ * m4/depend.m4 (_AM_DEPENDENCIES): Check dependency generation
+ in a subdirectory, and with many dependencies. This
+ catches more failures of depcomp.
+ Reports from Ralf Wildenhues and Akim Demaille.
+
+2003-07-04 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&scan_texinfo_file, &output_texinfo_build_rules,
+ (&handle_texinfo_helper, &handle_texinfo): Formatting changes.
+ Prototype properly.
+ Don't use & when calling functions.
+
+2003-07-03 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * NEWS: Categorize entries.
+ Suggested by Jim Meyering.
+
+ * Makefile.am (maintainer-clean): Disallow '$AUTOMAKE && exit 1'.
+ Ignore @...@ substitutions in comments.
+ * tests/defs.in: Try to make the shell more POSIX compliant.
+ (AUTOMAKE_run, AUTOMAKE_fails): New functions.
+ * tests/README: Mention AUTOMAKE_fails.
+ * tests/alloca.test, tests/alloca2.test, tests/ansi8.test,
+ * tests/asm.test, tests/backsl3.test, tests/backsl4.test,
+ * tests/badline.test, tests/badopt.test, tests/canon.test,
+ * tests/canon5.test, tests/colneq.test, tests/comment3.test,
+ * tests/comment5.test, tests/cond2.test, tests/cond20.test,
+ * tests/cond23.test, tests/cond24.test, tests/cond27.test,
+ * tests/condinc2.test, tests/conff2.test, tests/cxx2.test,
+ * tests/dejagnu2.test, tests/dirforbid.test,
+ * tests/distcom3.test, tests/else.test, tests/exdir2.test,
+ * tests/exeext2.test, tests/gcj2.test, tests/gcj5.test,
+ * tests/getopt.test, tests/gettext.test, tests/gettext2.test,
+ * tests/gnits.test, tests/gnuwarn.test, tests/gnuwarn2.test,
+ * tests/insh.test, tests/lex2.test, tests/libobj10.test,
+ * tests/libobj12.test, tests/libobj13.test,
+ * tests/libobj3.test, tests/library2.test,
+ * tests/library3.test, tests/libtool4.test,
+ * tests/libtool6.test, tests/lisp2.test, tests/location.test,
+ * tests/nogzip2.test, tests/output5.test, tests/overrid.test,
+ * tests/percent.test, tests/percent2.test,
+ * tests/pluseq5.test, tests/pluseq7.test, tests/pluseq9.test,
+ * tests/pr211.test, tests/primary.test, tests/primary2.test,
+ * tests/python2.test, tests/recurs.test, tests/reqd2.test,
+ * tests/seenc.test, tests/specflg.test, tests/specflg2.test,
+ * tests/spell.test, tests/spell2.test, tests/srcsub.test,
+ * tests/srcsub2.test, tests/stdlib.test, tests/subdir7.test,
+ * tests/substtarg.test, tests/suffix11.test,
+ * tests/symlink.test, tests/syntax.test,
+ * tests/targetclash.test, tests/txinfo4.test,
+ * tests/version3.test, tests/warnopts.test,
+ * tests/xsource.test, tests/yacc2.test: Use set -e,
+ AUTOMAKE_fails, and always grep error message.
+
+ * automake.in (handle_ltlibraries): Fix call to msg.
+
+ * tests/stamph.test: Delete.
+ * tests/Makefile.am (TESTS): Remove stamph.test.
+
+ * automake.in (handle_single_transform_list): Use $var->name
+ to print variable in the configure-substitution diagnostic.
+ Do not mention the parent when it is the variable itself.
+
+ * tests/package.test: Delete.
+ * tests/Makefile.am (TESTS): Remove package.test.
+
+ * automake.in (cond_stack_else): Return FALSE if `if' was not
+ used.
+ (cond_stack_endif): Return TRUE if `if' was not used. Do not
+ display $negate and $cond, they are irrelevant and maybe undefined.
+
+2003-07-02 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/Automake/Variable.pm (_traverse_variable_recursively_worker):
+ Do not return undef when a variable is recursively defined, this
+ causes warnings all over the place. Return the empty string instead.
+
+ * lib/am/distdir.am (distcheck): Protect loop of DIST_ARCHIVES
+ from empty DIST_ARCHIVES.
+
+2003-07-01 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (scan_autoconf_traces): Check the expected
+ number of arguments of each traced macro.
+ * tests/overrid.test: Fix call to AM_CONDITIONAL.
+ * tests/conff2.test: New files.
+ * tests/Makefile.am (TESTS): Add conff2.test.
+ Report from Paolo Bonzini.
+
+2003-06-30 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in ($SUBST_REF_PATTERN): Do not define.
+ (%gen_varname): Move to Variable.pm, as %_gen_varname.
+ (initialize_per_input): Do not clean %gen_varname.
+ (handle_options, check_libobjs_sources, handle_source_transform,
+ handle_LIBOBJS, handle_ltlibraries, handle_texinfo_helper,
+ handle_man_pages, handle_dist, handle_subdirs, handle_gettext,
+ am_install_var): Adjust to use value_as_list_recursive,
+ loc_and_value_as_list_recursive, and has_conditional_contents.
+ (require_file_with_macro): Accept an Automake::Variable as argument.
+ (traverse_variable_recursively,
+ traverse_variable_recursively_worker, gen_varname,
+ transform_variable_recursively): Move ...
+ * lib/Automake/Variable.pm (traverse_variable_recursively,
+ _traverse_variable_recursively_worker,
+ _gen_varname, transform_variable_recursively): ... here.
+ * automake.in (variable_conditionally_defined,
+ variable_value_as_list_recursive_worker,
+ variable_value_as_list_recursive
+ variable_loc_and_value_as_list_recursive): Move ...
+ * lib/Automake/Variable.pm (has_conditional_contents,
+ _value_as_list_recursive_worker,
+ value_as_list_recursive, loc_and_value_as_list_recursive): ... here.
+ (reset): Reset %_gen_varname.
+ (require_variables_for_variable): Accept an Automake::Variable
+ as argument.
+
+2003-06-27 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * tests/aclocal6.test: Test maintainer-clean in VPATH
+ builds. (For Ralf's fix.)
+
+2003-06-27 Ralf Corsepius <corsepiu@faw.uni-ulm.de> (tiny change)
+
+ * lib/am/configure.am (maintainer-clean): Remove
+ $(top_srcdir)/autom4te.cache, not autom4te.cache.
+
+2003-06-27 Akim Demaille <akim@epita.fr>
+
+ * automake.texi: Use @node with a single argument.
+
+2003-06-27 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * m4/Makefile.am (dist_m4data_DATA): Add $(top_srcdir)/m4/amversion.m4.
+
+ * lib/am/distdir.am (distcheck): Run $(am__remove_distdir)
+ at the end of distcheck. This was mistakenly removed on
+ 2003-06-15.
+ * tests/subpkg.test: Make sure distcheck cleans up after itself.
+
+ * m4/Makefile.am ($(srcdir)/amversion.m4): Rename as ...
+ ($(top_srcdir)/m4/amversion.m4): ... this.
+ (DISTCLEANFILES): Remove.
+ (nodist_m4data_DATA): Remove. amversion.m4 is automatically
+ distributed.
+ (EXTRA_DIST): Add amversion.in.
+
+2003-06-25 Akim Demaille <akim@epita.fr>
+
+ * automake.texi (Top): Use @copying and @insertcopying.
+ Make Alexandre an author.
+ * automake.in ($gen_copyright): Add the "(C)" to Copyright.
+ * lib/depcomp: Likewise.
+
+2003-06-23 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/Automake/Variable.pm (vardef, rvardef, set_seen): New functions.
+ (variable_defined, examine_variable): Remove.
+ (%_ac_macro_for_var): Add an entry for ALLOCA.
+ (require_variables): Use vardef instead of variable_defined.
+ Do not use _cvar.
+ * automake.in (generate_makefile): Do not push $(SOURCE) into
+ @sources. Use define_pretty_variable to define SOURCES.
+ (handle_LIBOBJS, handle_ALLOCA): Use require_variables_for_variable
+ to require LIBOBJS, LTLIBOBJS and ALLOCA.
+ (handle_programs, handle_ltlibraries): Do not define an empty
+ _DEPENDENCIES or _LDFLAGS variable when none is defined.
+ (define_configure_variable): Do not check whether the variable
+ already exists (it's Automake::Variable::define's job).
+ (require_build_directory): Likewise, do not check
+ the existence of am__dirstamp.
+ (generate_makefile, handle_options, handle_languages)
+ (check_libobjs_sources, handle_single_transform_list)
+ (traverse_variable_recursively_worker, handle_source_transform)
+ (handle_lib_objects, handle_LIBOBJS, handle_compile)
+ (handle_libtool, handle_programs, handle_libraries)
+ (handle_ltlibraries, check_typos, handle_texinfo_helper)
+ (handle_man_pages, handle_tags, handle_dist, handle_subdirs)
+ (scan_aclocal_m4, handle_gettext, handle_footer, handle_install)
+ (handle_all, do_check_merge_target, handle_clean, lang_c_finish)
+ (handle_tests, lang_yacc_target_hook, define_pretty_variable)
+ (define_compiler_variable, define_linker_variable)
+ (make_paragraphs, am_primary_prefixes, am_install_var): Adjust to
+ call var, vardef, or set_seen, instead of variable_defined. Use
+ set_seen only for variables which are actually checked by
+ check_typos.
+ * tests/target.test: Delete.
+ * tests/alloca.test, tests/alloca2.test: New files.
+ * tests/libobj3.test: Check error message.
+ * tests/distcom4.test: Make sure configure is in DIST_COMMON.
+ This replace confdist.test.
+ * tests/Makefile.am (TESTS, XFAIL_TESTS): Remove target.test.
+ (TESTS): Add alloca.test and alloca2.test. Remove confdist.test.
+
+2003-06-20 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (handle_dist): Delete DIST_COMMON before redefining
+ it. Bug report from Akim Demaille.
+ (rewrite_inputs_into_dependencies): Make sure we always return
+ something, even when $add_srcdir is 0.
+ * tests/distcom4.test, tests/distcom5.test: New files.
+ * tests/Makefile.am (TESTS): Add distcom4.test and distcom5.test.
+
+ * tests/cond29.test: Also check for _SOURCES.
+ Report from Paolo Bonzini.
+
+2003-06-20 Akim Demaille <akim@epita.fr>
+
+ * lib/am/configure.am: Replace leading spaces with a real tab.
+
+2003-06-15 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * tests/nogzip.test, tests/nogzip2.test: New files.
+ * tests/Makefile.am (TESTS): Add nogzip.test and nogzip2.test
+
+2003-06-15 Akim Demaille <akim@epita.fr>
+
+ * automake.in (&make_paragraphs): Define %GZIP%.
+ (&process_option_list): Accept no-dist-gzip2.
+ (&handle_dist): Complain when no archive format is enabled.
+ * lib/am/distdir.am (DIST_ARCHIVES): New variable.
+ (dist-gzip, dist-bzip2, dist-tarZ, dist-zip): No longer
+ conditioned.
+ (dist): Build $(distdir).tar.gz conditionally.
+ (distcheck): Use DIST_ARCHIVES to find an archive to unpack, and
+ to list built archives. Run $(MAKE) dist instead of dist-gzip.
+ * automake.texi (Options, The types of distributions): Adjust.
+
+2003-06-15 Jens Elkner <elkner@imsgroup.de> (tiny change)
+
+ * m4/lispdir.m4 (AM_PATH_LISPDIR): Fix sed commands to work with
+ POSIXLY_CORRECT=1.
+
+2003-06-14 Karl Berry <karl@gnu.org>
+ Alexandre Duret-Lutz <adl@gnu.org>
+
+ * mkinstalldirs (scriptversion): New variable. Setup emacs hooks
+ to update it each time the file is written, as in install-sh.
+ (usage): Improve message.
+ (--version): New option.
+ (--help): Output to stdout, not stderr.
+
+2003-06-13 Paul Eggert <eggert@twinsun.com>
+
+ * lib/install-sh (dsttmp, rmtmp): Do not use '#' in file names;
+ it's not guaranteed by POSIX and it doesn't work on OpenVMS.
+ Bug reported by Bernard Giroud in:
+ https://mail.gnu.org/archive/html/autoconf-patches/2003-06/msg00013.html
+
+2003-06-05 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (check_gnu_standards): Use no-installman and
+ no-installinfo's locations.
+ (process_option_list): Fill %options with locations.
+ (check_cygnus) Fill $options{'no-installinfo'} and
+ $options{'no-dependencies'} with $cygnus_mode, so that it
+ remains a Location.
+ * tests/gnuwarn2.test: New file.
+ * tests/Makefile.am (TESTS): Add gnuwarn2.test.
+
+2003-06-04 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (process_option_list): Record the location
+ of ansi2knr's definition.
+ (handle_compile): Use it.
+ * tests/ansi3.test: Make sure the location appears correctly.
+ Update to use set -e.
+ * tests/ansi3b.test: New file.
+ * tests/Makefile.am (TESTS): Add ansi3b.test.
+
+ * tests/alpha.test: Really run $MAKE. Augment to test
+ subdirectories, and check-news report.
+ * tests/alpha2.test: New file. Bug report from Akim Demaille.
+ * tests/gnits2.test: Make sure README-alpha is not distributed.
+ * tests/Makefile.am (TESTS): Add alpha2.test.
+ * automake.in (handle_minor_options): Distribute README-alpha
+ using push_dist_common, not require_file_with_macro.
+
+2003-06-03 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/Automake/Configure_ac.pm
+ (search_configure_ac, find_configure_ac): Rename as ...
+ (find_configure_ac, require_configure_ac): ... these.
+ * aclocal.in (scan_configure): Adjust call to require_configure_ac.
+ * automake.in (scan_autoconf_files): Likewise.
+ Suggested by Tim Van Holder.
+
+ * alocal.in: Use Automake::Configure_ac.
+ ($configure_ac): Delete.
+ (scan_configure): Adjust use of find_configure_ac;
+ * automake.in: Use Automake::Configure_ac.
+ ($configure_ac): Delete.
+ (scan_autoconf_files): Adjust use of find_configure_ac;
+ * lib/Automake/Configure_ac.pm: New file.
+ * lib/Automake/General.pm (find_configure_ac): Delete. Now
+ replaced by Automake::Configure_ac::search_configure_ac.
+ * lib/Automake/Makefile.am (dist_perllib_DATA): Add Configure_ac.pm.
+ * lib/Automake/Variable.pm: Use Automake::Configure_ac.
+ (require_variables): Adjust use of $configure_ac.
+
+2003-06-02 Akim Demaille <akim@epita.fr>
+
+ * lib/am/texi-vers.am, lib/am/subdirs.am, lib/am/scripts.am,
+ * lib/am/remake-hdr.am, lib/am/python.am, lib/am/progs.am,
+ * lib/am/program.am, lib/am/multilib.am, lib/am/mans.am,
+ * lib/am/mans-vars.am, lib/am/ltlibrary.am, lib/am/ltlib.am,
+ * lib/am/lisp.am, lib/am/libtool.am, lib/am/library.am,
+ * lib/am/lang-compile.am, lib/am/java.am, lib/am/header.am,
+ * lib/am/header-vars.am, lib/am/footer.am, lib/am/depend.am,
+ * lib/am/dejagnu.am, lib/am/data.am, lib/am/compile.am,
+ * lib/am/clean.am, lib/am/clean-hdr.am, lib/am/check.am,
+ * lib/am/ansi2knr.am, lib/am/Makefile.am, lib/Makefile.am,
+ * m4/strip.m4, m4/sanity.m4, m4/runlog.m4, m4/regex.m4,
+ * m4/python.m4, m4/protos.m4, m4/options.m4, m4/obsolete.m4,
+ * m4/obsol-lt.m4, m4/obsol-gt.m4, m4/multi.m4, m4/missing.m4,
+ * m4/minuso.m4, m4/maintainer.m4, m4/lispdir.m4, m4/lex.m4,
+ * m4/install-sh.m4, m4/header.m4, m4/gcj.m4, m4/dmalloc.m4,
+ * m4/depout.m4, m4/cond.m4, m4/ccstdc.m4, m4/auxdir.m4, m4/as.m4,
+ * m4/Makefile.am: White space changes and Copyright updates.
+
+2003-05-29 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/Automake/Variable.pm (check_defined_unconditionally): Add
+ the $parent_cond argument.
+ (output): Use $self->name in diagnostic not $self.
+ (variable_value_as_list): Rename as ...
+ (value_as_list): ... this. Declare as a method. Take a $parent_cond
+ argument and pass it to check_defined_unconditionally. Do not call
+ variable_assert, now that this is a method.
+ (variable_assert): Delete (unused).
+ * automake.in (traverse_variable_recursively_worker): Adjust to
+ use check_defined_unconditionally and value_as_list as a methods.
+
+ * lib/Automake/Variable.pm (output): Declare as a method, since it
+ is only used this way.
+ (define): Fix documentation of $cond.
+ Suggested by Raja R. Harinath.
+
+2003-05-25 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/Automake/Variable.pm, lib/Automake/VarDef.pm: New files.
+ * lib/Automake/Makefile.am (dist_perllib_DATA): Add Variable.pm
+ and VarDef.pm.
+ * automake.in: Use Automake::Variable and Automake::VarDef.
+ (MACRO_PATTERN): Delete. Now Automake::Variable::_MACRO_PATTERN.
+ (am_macro_for_var): Delete. Now Automake::Variable::_am_macro_for_var.
+ (ac_macro_for_var): Delete. Now Automake::Variable::_ac_macro_for_var.
+ (silent_variable_override): Delete. Now
+ Automake::Variable::_silent_variable_override.
+ (var_value, var_location, var_comment, var_type, var_owner,
+ var_pretty, content_seen): Delete. This functionality is now
+ offered by Automake::Variable and Automake::VarDef.
+ (VAR_AUTOMAKE, VAR_CONFIGURE, VAR_MAKEFILE, VAR_ASIS, VAR_PRETTY):
+ Delete. Now defined in Automake::VarDef.
+ (var_order): Delete. Now Automake::Variable::_var_order.
+ (appendvar): Delete. Now Automake::Variable::_appendvar.
+ (var_SUFFIX_trigger): Register using Automake::Variable::hook.
+ (initialize_per_input): Call Automake::Variable::reset.
+ (err_var, msg_cond_var, msg_var, reject_var): Delete. Now
+ defined in Automake::Variable.
+ (generate_makefile, process_option_list, handle_languages)
+ (traverse_variable_recursively_worker)
+ (transform_variable_recursively, handle_compile)
+ (handle_libraries, handle_ltlibraries)
+ (check_typos, handle_dist, handle_subdirs, scan_autoconf_files):
+ Adjust to use Automake::Variable functions.
+ (check_ambiguous_condition): Delete. Now
+ Automake::Variable::_check_ambiguous_condition.
+ (condition_ambiguous_p): Delete. Now
+ Automake::Variable::condition_ambiguous_p.
+ (variable_not_always_defined_in_cond): Delete. Now
+ Automake::Variable::not_always_defined_in_cond.
+ (macro_define): Delete. Now Automake::Variable::define.
+ (macro_delete): Delete. Now Automake::Variable::variable_delete.
+ (macro_dump): Delete. Now Automake::Variable::variable_dump.
+ (macros_dump): Delete. Now Automake::Variable::variables_dump.
+ (variable_defined): Delete. Now
+ Automake::Variable::variable_defined, with the target check
+ temporarily disabled.
+ (variable_assert): Delete. Now Automake::Variable::variable_assert.
+ (examine_variable): Delete. Now
+ Automake::Variable::examine_variable.
+ (variable_conditions): Delete. Now Automake::Variable::conditions.
+ (scan_variable_expansions): Delete. Now
+ Automake::Variable::scan_variable_expansions.
+ (check_variable_expansions): Delete. Now
+ Automake::Variable::check_variable_expansions.
+ (check_variable_defined_unconditionally): Delete. Now
+ Automake::Variable::check_defined_unconditionally.
+ (variable_value): Delete. Now Automake::Variable::variable_value.
+ (variable_value_as_list): Delete. Now
+ Automake::Variable::variable_value_as_list.
+ (variable_value_as_list_recursive_worker): Adjust to use
+ Automake::Variable functions.
+ (variable_output): Delete. Now Automake::Variable::output.
+ (define_pretty_variable, define_configure_variable, read_am_file)
+ (define_standard_variables, read_main_am_file): Adjust to use
+ Automake::Variable functions.
+ (handle_variables): Delete. Now Automake::Variable::output_variables.
+ (file_contents_internal, am_primary_prefixes, am_install_var)
+ (require_file_with_macro, require_conf_file_with_macro)
+ (push_dist_common): : Adjust to use
+ Automake::Variable functions.
+ (require_variables): Delete. Now
+ Automake::Variable::require_variables.
+ (require_variables_for_macro): Delete. Now
+ Automake::Variable::require_variables_for_variable.
+ * tests/Makefile.am (XFAIL_TESTS): Add target.test.
+
+2003-05-25 Christian Cornelssen <ccorn@cs.tu-berlin.de> (tiny change)
+
+ * tests/dejagnu7.test: Check if runtest supports --status.
+
+2003-05-23 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/Automake/Location.pm (dump): Output 'INTERNAL' when position
+ is undefined.
+
+ * lib/Automake/DisjConditions.pm (human): Fix infinite loop when
+ $self contains only one Condition.
+
+ * automake.in: Use plain strict, including refs.
+ (macro_define, handle_single_transform_list): Use \&{'name'} to
+ build references to named subroutines.
+
+2003-05-22 Karl Berry <karl@gnu.org>
+
+ * automake.texi: Update @dircategory to match the Free Software
+ Directory. End directory entries with dots.
+
+2003-05-22 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.texi (maintainer-mode): s/François/Fran@,{c}ois/.
+
+ * lib/elisp-comp: s/François/Franc,ois/.
+ Suggested by Paul Eggert.
+
+ * automake.in: Move the "main" code at the end.
+ (parse_arguments): Move near the end.
+ ($KNOWN_EXTENSIONS_PATTERN, @known_extensions_list,
+ accept_extensions, var_SUFFIXES_trigger): Move these definitions
+ before any call to register_language.
+ (am_file): Move the definition with all other global variables,
+ do not use local to define it.
+ * Makefile.am (maintainer-check): Expect no `local' in Automake.
+
+2003-05-21 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/Automake/Wrap.pm, lib/Automake/tests/Wrap.pl: New files.
+ * lib/Automake/Makefile.am (dist_perllib_DATA): Add Wrap.pm.
+ * lib/Automake/tests/Makefile.am (TESTS): Add Wrap.pl.
+ * automake.in (handle_texinfo_helper, pretty_print_rule)
+ (variable_output): Adjust to use makefile_wrap instead of
+ pretty_print_internal.
+ (pretty_print_internal): Remove. Renamed as Automake::Wrap::wrap
+ and augmented to accept the $eol and $max_len arguments.
+
+2003-05-18 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/Autom4te/XFile.pm, lib/config.guess, lib/config.sub,
+ lib/texinfo.tex: New upstream versions.
+
+2003-05-17 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/am/install.am (install, install-exec, install-data, uninstall):
+ Declare conditionally using a if/else/endif block instead of
+ using ?SUBDIRS?-style conditions. The latter fail when
+ %maybe_BUILT_SOURCES% is replaced by several lines.
+ This fixes a bug introduced on 2003-04-06.
+ * tests/bsource.test: New file.
+ * tests/Makefile.am (TESTS): Add bsource.test.
+ Reported by Bruno Haible.
+
+2003-05-11 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.texi (renamed objects): New node.
+ (Program and Library Variables): Move maude_DEPENDENCIES closer
+ to maude_LDADD. Define and use `per-target compilation flags' in the
+ explanation for maude_CFLAGS et al. Link to the `renamed objects'
+ node. Illustrate maude_SHORTNAME.
+
+2003-05-09 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/install-sh: Update copyright notice and license to that of
+ X11R6. This removes an advertising clause reported as Debian bug
+ #191717.
+
+2003-05-07 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * configure.in (ACLOCAL): Do not use -I, --acdir is enough.
+
+ * m4/make.m4: Rename the doit target as am__doit,
+ and make it phony.
+ Reported by Philip S Tellis.
+
+2003-05-07 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/am/configure.am (%MAKEFILE-IN%): Propagate automake's exit
+ status.
+ * tests/makej.test: New file (test Autom4te's cache locking,
+ new in CVS Autoconf).
+ * tests/Makefile.am (TESTS): Add makej.test.
+
+2003-05-06 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/Automake/General.pm (contents): New function.
+ * aclocal.in (greatest_mtime, force_output): New globals.
+ (scan_configure, add_file): Update $greatest_mtime.
+ (parse_arguments): Parse --force.
+ (write_aclocal): Do not overwrite $output_file unless needed.
+ * automake.texi (aclocal options): Document --force.
+ * tests/aclocal7.test: New file.
+ * tests/Makefile.am (TESTS): Add aclocal7.test.
+
+2003-05-05 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.texi (Optional): Document m4_include.
+ (Invoking aclocal): Shake a bit to introduce the various uses
+ of aclocal and explain that aclocal will use m4_include for
+ local files.
+ (Extending aclocal): Show how to install installable macros
+ in $(datadir)/aclocal, and make it clearer that writing installable
+ macros is not the only way to extend aclocal.
+ (Local Macros, Future of aclocal): New sections.
+
+2003-04-27 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (@common_files): Remove acinclude.m4 since
+ it will be m4_included by aclocal.m4 and files are always
+ distributed.
+ (scan_aclocal_m4): Do not bother about acinclude.m4 anymore.
+ We will get this dependency when tracing m4_includes.
+ * tests/aclocal6.test: Make sure acinclude.m4 is distributed
+ when used.
+ * tests/acinclude.test: Delete.
+ * tests/Makefile.am (TESTS): Remove acinclude.test.
+
+2003-04-25 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (handle_configure): Don't add @configure_deps to
+ DIST_COMMON, we do this from lib/am/configure.am now.
+ Define the am__configure_deps variable instead of substituing
+ %CONFIGURE_DEPS%.
+ * lib/am/configure.am (%MAKEFILE-IN%, $(top_srcdir)/configure,
+ $(ACLOCAL_M4)): Use $(am__configure_deps) instead of %CONFIGURE_DEPS%.
+ (DIST_COMMON): Add $(am__configure_deps).
+
+ * tests/aclocal6.test: New file.
+ * lib/am/configure.am (am--refresh): New rule.
+ (%MAKEFILE-IN%, %MAKEFILE%, $(top_builddir)/config.status,
+ $(top_srcdir)/configure): Call the top-level am--refresh from
+ subdirectories.
+ ($(ACLOCAL_M4)): Depend upon %CONFIGURE_DEPS%. Call the
+ top-level am--refresh when not in the top-level directory.
+ Fix jump directories for VPATH builds.
+ Suggested by Raja R. Harinath.
+
+2003-04-24 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (scan_aclocal_m4): Do not parse ACLOCAL_AMFLAGS
+ and glob for m4_files (We've got all local m4 files while
+ tracing m4_include's). Diagnose ACLOCAL_M4_SOURCES as obsolete.
+ Distribute aclocal.m4 only at the top-level.
+ (my_glob): Remove. This fixes PR automake/11.
+ (handle_dist): Strip leading `./' from directories.
+ * aclocal.in (add_file): Output 'm4_include([file.m4])' instead
+ of copying local files.
+ (write_aclocal, parse_arguments): Bump copyright date.
+ * configure.in: De not build m4/amversion.m4 from here ...
+ * m4/Makefile.am ($(srcdir)/amversion.m4): ... do this here.
+ (nodist_m4data_DATA): Use $(srcdir)/amversion.m4 instead
+ of amversion.m4.
+ * tests/Makefile.am (XFAIL_TESTS): Remove aclocal5.test.
+ (TESTS): Remove aclocal2.test. Do not test aclocal.test twice.
+ * tests/aclocal2.test: Delete (pointless).
+ * tests/aclocal5.test: Make sure configure's dependencies are
+ distributed.
+ * tests/acinclude.test: Adjust to search for m4_include.
+ * tests/dirlist.test, tests/dup3.test: Run $AUTOCONF and grep
+ configure instead of aclocal.m4.
+
+ For PR automake/46:
+ * automake.in (scan_aclocal_m4): Work in all directories, not only
+ the top-level. Prepend $(top_srcdir) in front of each aclocal.m4
+ dependency.
+ * lib/am/configure.am (config.status, configure, $(ACLOCAL_M4)):
+ Define rebuild rules in each directory.
+ * tests/subdir8.test: Augment to exercise aclocal.m4's dependencies
+ from the top-level directory.
+ * tests/aclocal5.test: New file. Exercise aclocal.m4's dependencies
+ from a subdirectory.
+ * tests/Makefile.am (TESTS): Add aclocal5.test.
+ (XFAIL_TESTS): Replace subdir8.test by aclocal5.test.
+
+2003-04-24 Akim Demaille <akim@epita.fr>
+ Alexandre Duret-Lutz <adl@gnu.org>
+
+ For PR automake/46:
+ * lib/am/configure.am (%MAKEFILE-IN%): If Makefile.in is rebuilt
+ because of one of configure's dependencies, run automake without
+ argument to update the whole tree at once. Depend upon
+ %CONFIGURE_DEPS%.
+ (%MAKEFILE%): If Makefile is rebuilt because config.status has
+ been updated, run config.status without arguments.
+ * automake.in (scan_autoconf_traces): Prepend $(top_srcdir)
+ before all files in @configure_deps.
+ * tests/subdir5.test: Modernize configure.in, make sure
+ maude/Makefile was actually created, and exercise %CONFIGURE_DEPS%.
+ * tests/subdir8.test: New file.
+ * tests/Makefile.am (TESTS): Add subdir8.test.
+ (XFAIL_TESTS): Replace subdir5.test by subdir8.test.
+
+2003-04-23 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.texi (Requirements): Typo in index
+ s/AC_CONFIG_FILE/AC_CONFIG_FILES/.
+
+ * lib/texinfo.tex: New upstream version.
+
+2003-04-21 Jim Meyering <jim@meyering.net>
+
+ * lib/mkinstalldirs: Remove each sequence of spaces before a
+ TAB character.
+ * lib/depcomp: Search for TAB-SPC, not SPC-TAB.
+
+2003-04-19 Alexandre Duret-Lutz <adl@gnu.org>
+
+ Fix for PR automake/389:
+ * automake.in (handle_configure): Don't put $colon_infile in
+ CONFIG-MAKEFILE.
+ * tests/conff.test: New file.
+ * tests/Makefile.am (TESTS): Add conff.test.
+ Reported by Alexander Turbov.
+
+2003-04-18 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * tests/defs.in: Handle required=etags to work around
+ Exuberant Ctags.
+
+ * lib/config.guess, lib/config.sub, lib/texinfo.tex: New upstream
+ versions.
+
+ * tests/dejagnu3.test, tests/dejagnu4.test, tests/dejagnu5.test:
+ Distribute dejagnu test cases, so that distcheck actually runs them.
+
+2003-04-18 Richard Dawe <rich@phekda.freeserve.co.uk>
+
+ * lib/am/dejagnu.am (site.exp): Don't define tool in site.exp,
+ because we set that by invoking runtest with --tool.
+ * tests/Makefile.am (TESTS): Add dejagnu4.test, dejagnu5.test,
+ dejagnu6.test, dejagnu7.test.
+ * tests/dejagnu4.test: New test.
+ * tests/dejagnu5.test: New test.
+ * tests/dejagnu6.test: New test.
+ * tests/dejagnu7.test: New test.
+
+ * tests/dejagnu3.test: Make sure the DejaGnu test is actually run.
+
+2003-04-18 Jim Meyering <jim@meyering.net>
+
+ * automake.in (variable_output): Fix typo in comment s/is/if/.
+
+ * lib/am/yacc.am (?!GENERIC?%OBJ% aka .y.c): Don't redirect
+ directly to $@. Instead, redirect to $@t and rename upon success.
+ Also, move the commands that update $@ so they are last. Otherwise,
+ this rule could leave the user with an up to date target (.c file)
+ but with a missing or corrupted corresponding .h file.
+
+2003-04-17 Richard Dawe <rich@phekda.freeserve.co.uk>
+
+ * tests/defs.in: Handle required=runtest, to detect runtest
+ from DejaGnu.
+ * tests/Makefile.am (TESTS): Add dejagnu3.test.
+ * tests/dejagnu3.test: New test.
+
+2003-04-16 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (rule_define): If the user tries to override
+ an Automake which has a -local variant, suggest using the
+ -local variant in the -Woverride diagnostic.
+ (handle_factored_dependencies): Register factored
+ rules with rule_define, and define them only in undefined
+ conditions.
+ * tests/Makefile.am (TESTS): Add override.test.
+ * tests/overrid.test: New file.
+ * tests/phony.test: Count the number of .PHONY targets.
+
+2003-04-15 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/am/distdir.am (distuninstallcheck, distcleancheck): Silence
+ these rules, so that we don't confuse users by echoing
+ "echo ERROR:" commands which are not run.
+
+2003-03-14 Richard Dawe <rich@phekda.freeserve.co.uk>
+ Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (output_texinfo_build_rules, handle_texinfo_helper,
+ initialize_per_input): Add infrastructure for generating HTML
+ documentation from texinfo source.
+ * lib/am/texinfos.am: Add rules for building HTML documentation
+ from texinfo source.
+ * lib/am/texibuild.am: Likewise.
+ * automake.texi (Texinfo): Document rules for building
+ HTML documentation from texinfo source.
+ * tests/txinfo21.test: New file.
+ * tests/Makefile.am (TESTS): Add txinfo21.test.
+ * tests/defs.in: Handle required=makeinfo-html.
+
+2003-04-14 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (%silent_variable_override): New variable.
+ (macro_define): Warn about variable definitions overriding
+ Automake variables.
+ (rule_define): Warn about target definitions overriding
+ Automake variables. Fix $condmsg definition.
+ * automake.texi (Invoking Automake): Document the `override'
+ category.
+ * lib/Automake/ChannelDefs.pm (usage): Likewise.
+ * lib/am/texinfos.am [!%?CYGNUS] (MAKEINFO): Do not define,
+ this is already done in m4/init.m4.
+ * tests/dejagnu2.test: Run $MAKE, don't only grep. Use
+ -Wno-override, and make sure we get a warning without.
+ * tests/exeext2.test, tests/substtarg.test: Use -Wno-override,
+ and make sure we get a warning without.
+ * tests/exeext3.test, tests/java2.test, tests/nolink.test,
+ tests/subpkg.test, tests/vartest.test: Use -Wno-override.
+ * tests/txinfo13.test: Use installcheck-local instead of overriding
+ installcheck.
+ * tests/txinfo2.test: Run $MAKE on the real Makefile (this test
+ used to succeed thanks to a failure...)
+ * tests/location.test: Adjust expected messages.
+ * tests/Makefile.am (XFAIL_TESTS): Add txinfo5.test.
+
+2003-04-12 Raja R Harinath <harinath@acm.org>
+
+ * lib/Automake/DisjConditions.pm (true): Don't cache answer.
+ (invert): Update comment.
+ (_simplify): Remove.
+ (simplify): Implement using invert().
+ * lib/Automake/tests/DisjConditions.pl (test_simplify):
+ Update to reflect changes.
+
+2003-04-12 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (scan_autoconf_files): Augment the error message
+ about AM_INIT_AUTOMAKE not found.
+ Suggested by Bruno Haible.
+
+ * lib/Automake/Version.pm: New file.
+ * lib/Automake/Makefile.am (dist_perllib_DATA): Add Version.pm.
+ * lib/Automake/tests/Version.pl: New file.
+ * lib/Automake/tests/Makefile.am (TESTS): Add Version.pl.
+ * tests/Makefile.am (TESTS): Remove version5.test.
+ * tests/version5.test: Delete. Move the tests to Version.pl.
+ * automake.in (version_split, version_compare, version_check): Move ...
+ * lib/Automake/Version.pm (split, compare, check): ... here.
+
+2003-04-11 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/Automake/tests/Condition.pl (test_reduce_and)
+ (test_reduce_or): Cosmetics.
+ * lib/Automake/tests/DisjConditions.pl (test_sub_conditions):
+ Fix a comment.
+ * lib/Automake/DisjConditions.pm (sub_conditions): Add missing C<...>
+ in comment.
+ * tests/yacc8.test, configure.in: Update copyright year.
+
+2003-04-10 Richard Dawe <rich@phekda.freeserve.co.uk>
+
+ * configure.in: Get the build platform name. Define
+ MODIFICATION_DELAY as the time to wait after modifying a file,
+ to cope with timestamp granularity issues, depending
+ on the platform.
+ * tests/defs.in: Define `sleep' using MODIFICATION_DELAY.
+
+2003-04-10 Eric Siegerman <eric_97@pobox.com> (tiny change)
+
+ * automake.texi (Public macros): Clarify that the new
+ AM_INIT_AUTOMAKE variant is preferred, and the old one
+ deprecated. Copy-edit the rest of the AM_INIT_AUTOMAKE item.
+ (Hello): Caution that the example uses the deprecated
+ AC_INIT/AM_INIT_AUTOMAKE syntax, and xref to the discussion.
+
+2003-04-10 Alexandre Duret-Lutz <adl@gnu.org>
+
+ Retain all variable definitions until the whole Makefile.am has
+ been processed, then output all variables in one step, at the top
+ of Makefile.in. (Older revisions used to output user variables
+ before generating Automake targets, and to mix Automake variables
+ with Automake targets, preventing redefinitions of previously
+ output variables.)
+
+ * automake.in (%var_pretty): New variable.
+ (VAR_ASIS, VAR_PRETTY): New constants.
+ (@var_list): Rename as ...
+ (@var_order): ... this.
+ (initialize_per_input): Clear %var_pretty.
+ (handle_variables): New function, extracted from ...
+ (read_main_am_file): ... here.
+ (generate_makefile): Call handle_variable after everything else.
+ (handle_dist): Use define_pretty_variable, not pretty_print.
+ (pretty_print): Delete.
+ (macro_define): Augment with $COMMENT and $PRETTY parameters.
+ Update %var_comment, %var_pretty, and @var_order. Adjust callers.
+ (variable_pretty_output): Merge with ...
+ (variable_output): ... this, and choose the prettiness on a
+ per-condition basis.
+ (append_comments): Delete. This work is now done by macro_define.
+ (read_am_file, file_contents_internal): Don't call append_comments
+ nor update @var_list, adjust calls to macro_define.
+ (handle_subdirs): Don't explicitly output RECURSIVE_TARGETS,
+ just mark it as VAR_PRETTY.
+ * tests/exeext.test: Make sure bin_PROGRAMS is output only once.
+ Report from Jim Meyering.
+
+2003-04-06 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (handle_installdirs): Rename as ...
+ (handle_install): ... this. Define maybe_BUILT_SOURCES.
+ (generate_makefile): Adjust call to handle_install.
+ * lib/am/install.am (install): Use %maybe_BUILT_SOURCES%.
+ * automake.texi (Sources, Built sources example): BUILT_SOURCES
+ is honored by `make install' too.
+ * tests/check3.test: Make sure that `make install' also depends
+ upon BUILT_SOURCES.
+ Report from Alexander Turbov.
+
+ * lib/am/libs.am (ARFLAGS): Define.
+ * automake.in (handle_libraries): Use `$(ARFLAGS)' instead of
+ hard-coding `cru'.
+ * automake.texi (A Library): Explain how AR, ARFLAGS and RANLIB
+ are used, and how they can be overridden.
+ (Program and Library Variables): Adjust to show `$(ARFLAGS)'
+ instead of `cru'
+ * tests/ar.test: Rewrite to test for AR, ARFLAGS, and RANLIB.
+ * tests/ranlib.test: Delete, obsoleted by ar.test.
+ * tests/Makefile.am (TESTS): Remove ranlib.test.
+ Report from Paul Thomas.
+
+2003-04-03 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (check_trailing_slash): New function (variation on
+ a patch by Peter Muir). Diagnose whitespaces following trailing
+ backslash.
+ (read_am_file): Use it.
+ * tests/backsl4.test: New file.
+ * tests/Makefile.am (TESTS): Add backsl4.test.
+ Reported by Peter Muir.
+
+2003-03-29 Raja R Harinath <harinath@acm.org>
+
+ Speedup Automake::DisjConditions::invert().
+ * lib/Automake/Condition.pm (multiply): New.
+ * lib/Automake/DisjConditions.pm (_multiply): Use it.
+ (sub_conditions): Likewise.
+
+ * lib/Automake/Condition.pm (reduce): Rename to ...
+ (reduce_and): ... this.
+ (reduce_or): New.
+ * lib/Automake/DisjConditions.pm (_multiply): Use reduce_or().
+ * lib/Automake/tests/Condition.pl (test_reduce): Rename to ...
+ (test_reduce_and): ... this.
+ (test_reduce_or): New.
+ * lib/Automake/tests/DisjConditions.pl
+ (test_invert): Update to reflect effect of reduce_or().
+ (test_simplify): Don't skip invert() on larger inputs.
+
+2003-03-29 Raja R Harinath <harinath@cs.umn.edu>
+
+ * tests/yacc8.test: Add a $sleep before modifying Makefile.am so
+ that timestamp will change.
+
+2003-03-23 Akim Demaille <akim@epita.fr>
+ Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/am/tags.am (TAGS): Use --etags-include instead of --include,
+ when supported by etags (Exuberant Ctags).
+ * tests/tagsub.test: Rewrite to _run_ the `tags' rule.
+
+2003-03-20 Alexandre Duret-Lutz <adl@gnu.org>
+
+ For Debian Bug #185388:
+ * automake.texi (Extending): Augment the install-exec-hook
+ discussion with an example how to symlink a versioned binary.
+ * tests/insthook.test: Rewrite to test the above example.
+ Report from James R. Van Zandt.
+
+2003-03-19 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * Makefile.am (maintainer-check): Allow `automake:' tokens,
+ occurring in location.test. Automake now has 5 legitimate
+ unsubstituted @strings@.
+
+ * tests/aclocal4.test: Require GNU make.
+
+2003-03-14 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * tests/aclocal4.test: New file. Test for the ACLOCAL_M4 bug below.
+ * tests/Makefile.am (TESTS): Add aclocal4.test.
+
+2003-03-14 Jim Meyering <jim@meyering.net>
+
+ * automake.in (scan_aclocal_m4): Define ACLOCAL_M4 even in
+ subdirectories. Makefile.in depends on that variable.
+
+2003-03-13 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * m4/init.m4: Remove a leftover comment from the pre-1.7 era.
+
+ Fix for PR automake/386:
+ * m4/init.m4: Require Autoconf 2.55.
+ Reported by Owen Taylor.
+
+ * lib/am/depend2.am (?GENERIC?%EXT%.o, ?GENERIC?%EXT%.obj)
+ (?GENERIC?%EXT%.lo): Use `mv -f' instead of `mv' in FASTDEP mode.
+ Suggested by Matthias Andree.
+
+ * tests/README: Typo.
+
+2003-03-08 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/am/depend2.am (?GENERIC?%EXT%.o, ?GENERIC?%EXT%.obj)
+ (?GENERIC?%EXT%.lo): Hide the if/then/else machinery for FASTDEP.
+ Just echo the gcc command.
+ Suggested by Karl Berry.
+
+2003-03-06 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/am/depend2.am (?GENERIC?%EXT%.lo): Do not use
+ `test -f foo || echo $(srcdir)/` to emulate a VPATH search when
+ outputing suffix rules. This follows 2003-02-25's change.
+ * lib/am/lex.am (?GENERIC?%EXT%%DERIVED-EXT%): Likewise.
+ * lib/am/yacc.am (?GENERIC?%EXT%%DERIVED-EXT%): Likewise.
+
+2003-03-05 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.texi (Requirements) <AC_CONFIG_FILES>: Files listed
+ with AC_CONFIG_FILES are cleaned by `make distclean'. Don't
+ pretend otherwise.
+ Reported by Rafael Laboissiere.
+
+2003-03-04 Andreas Buening <andreas.buening@nexgo.de>
+
+ * lib/mdate-sh: Find out which column of the ls -l output contains
+ the month. Do not assume it is at least the fifth column.
+
+2003-02-26 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.texi (Emacs Lisp): Mention that `dist_' can be used.
+
+ * automake.texi (Emacs Lisp): Instruct people to use lisp_DATA
+ instead of lisp_LISP when they don't want byte-compilation.
+ Don't mention ELCFILES anymore.
+ * automake.in (handle_data): Allow lisp_DATA.
+ * tests/lisp5.test: New file.
+ * tests/Makefile.am (TESTS): Add lisp5.test.
+
+ * automake.in (handle_emacs_lisp): Don't build *.elc files
+ if ELCFILES was set empty.
+ * tests/lisp4.test: New file.
+ * tests/Makefile.am (TESTS): Add lisp4.test.
+ Reported by Simon Josefsson.
+
+ * tests/lex3.test, tests/lex5.test: Require flex.
+ Reported by Leo Davis.
+
+2003-02-25 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/am/depend2.am (?GENERIC?%EXT%.o, ?GENERIC?%EXT%.obj): Do not
+ use the `test -f foo || echo $(srcdir)/` to emulate a VPATH search
+ when outputing suffix rules.
+ * lib/am/texibuild.am (?GENERIC?%SOURCE_SUFFIX%.dvi)
+ (?GENERIC?%SOURCE_SUFFIX%.pdf): Likewise.
+ Suggested by Bruno Haible.
+
+ * automake.in (read_am_file): Catch trailing backslashes on last line.
+ * tests/backsl3.test: New file.
+ * tests/Makefile.am (TESTS): Add backsl3.test.
+ Reported by Akim Demaille.
+
+2003-02-24 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * ChangeLog: Move 2002's entries to ...
+ * ChangeLog.02: ... this new file.
+ * Makefile.am (EXTRA_DIST): Add ChangeLog.02.
+
+2003-02-24 Richard Dawe <rich@phekda.freeserve.co.uk>
+
+ * tests/version7.test: Use $sleep to sleep before updating
+ the version, to work around timestamp inconsistencies in Windows.
+
+2003-02-24 Bruno Haible <bruno@clisp.org>
+ Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/am/texibuild.am: Don't remove the target info files. Instead,
+ back up and restore them if makeinfo fails.
+ * tests/txinfo20.test: New file.
+ * tests/Makefile.am (TESTS): Add txinfo20.test.
+
+2003-02-23 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.texi (FAQ, CVS, maintainer-mode, wildcards)
+ (distcleancheck): Fix typos and other errors reported by Karl
+ Berry.
+
+2003-02-20 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/am/texibuild.am (%SOURCE_SUFFIX%%DEST_SUFFIX%): Use $(...)
+ instead of ${...}.
+
+ * tests/defs.in: Handle required=ro-dir.
+ * tests/destdir.test: Use this.
+
+2003-02-19 Richard Dawe <rich@phekda.freeserve.co.uk>
+
+ * lib/am/distdir.am (distcheck): Strip any leading DOS drive
+ from dc_install_base.
+
+2003-02-19 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/am/texinfos.am (install-info-am, uninstall-info-am): Install
+ DJGPP-style *.iNN info files.
+ (maintainer-clean-aminfo): Rewrite using the same pattern
+ as in uninstall-info-am.
+ * lib/am/texibuild.am (%SOURCE_SUFFIX%%DEST_SUFFIX%): Erase
+ DJGPP-style *.iNN info files before running $(MAKEINFO).
+ * tests/txinfo19.test: New file.
+ * tests/Makefile.am (TESTS): Add txinfo19.test.
+
+2003-02-18 Richard Dawe <rich@phekda.freeserve.co.uk>
+
+ * lib/depcomp (dashmstdout): Cope with DOS filenames in
+ dependencies.
+
+2003-02-17 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/depcomp (makedepend): Don't pass $object to makedepend.
+ Reported by Stepan Kasal.
+
+2003-02-12 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * tests/defs.in: Handle required=makedepend.
+
+ * Makefile.am (maintainer-check): Update the diff check
+ to account for the recent @SHELL@ substitution.
+
+2003-02-11 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/depcomp: Do not put comments on the `icc)' line.
+
+ * lib/config.guess, lib/config.sub, lib/texinfo.tex: New upstream
+ versions.
+
+ Fix for PR automake/381:
+ * automake.in (handle_gettext): Do not print diagnostics
+ about po/ and intl/ missing from SUBDIRS if po/ does not
+ exist. Warn if `SUBDIRS = intl' is used although libintl
+ is 'external'.
+ * tests/gettext.test: Make sure diagnostics are not output
+ when po/ does not exist.
+ * tests/gettext2.test: Test for unwanted intl/.
+ PR from Alexander Turbov, fix suggested by Bruno Haible.
+
+ * m4/depend.m4: Grep depcomp's stderr for icc warnings about
+ ignored options.
+ * lib/depcomp (icc): New mode.
+ * tests/depcomp5.test: New file.
+ * tests/defs.in: Handle required=icc.
+ * tests/Makefile.am (TESTS): Add it.
+
+ Temporary hack for PR automake/381:
+ * automake.in (handle_gettext): Turn missing po/ and intl/ errors
+ into -Wsyntax warnings.
+
+2003-02-10 Richard Dawe <rich@phekda.freeserve.co.uk>
+
+ * Makefile.am: Substitute @SHELL@ in automake.in and aclocal.in.
+ This makes the setting of SHELL work for DJGPP.
+
+2003-02-10 Alexandre Duret-Lutz <adl@gnu.org>
+
+ For PR automake/385:
+ * lib/depcomp (makedepend): Strip any libtool call, before
+ running makedepends.
+ * tests/depcomp4.test: New file.
+ * tests/Makefile.am (TESTS): Add it.
+ Reported by Jeff Squyres.
+
+ Related to PR automake/385:
+ * lib/depcomp (dashmstdout): Do not use `-o /dev/null', or gcc will
+ write dependencies to /dev/null. `-o /dev/null' was added
+ on 2002-06-13 just because I tried to replace `-o foo.o' by something
+ else and didn't thought about removing it entirely.
+ * tests/depcomp3.test: New file.
+ * tests/Makefile.am (TESTS): Add it.
+
+ * automake.in (BEGIN): Override $ENV{'SHELL'} with ./configure's
+ SHELL for DJGPP.
+ Suggested by Richard Dawe.
+
+2003-02-09 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.texi (FAQ, CVS, maintainer-mode, wildcards)
+ (distcleancheck): New nodes.
+
+2003-02-06 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (scan_autoconf_files): Don't complain that
+ AM_INIT_AUTOMAKE comes from an old version if it was not found.
+
+2003-02-05 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (am_install_var): Simplify filtering of
+ variable_loc_and_value_as_list_recursive's output.
+
+2003-02-04 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * m4/init.m4 (_AC_AM_CONFIG_HEADER_HOOK): Recompute
+ indexes of header files so we create stamp files with
+ the right numbers when config.status is run on some headers.
+ * tests/stamph2.test: Check for this.
+ Reported by Sander Niemeijer.
+
+2003-02-02 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (vars_scanned): Move near traverse_variable_recursively.
+ (traverse_variable_recursively,
+ traverse_variable_recursively_worker): Accept a $COND_FILTER argument
+ to filter out conditions during recursion. Don't recurse into
+ undefined variables. Don't pass empty results to &FUN_COLLECT.
+ (value_to_list): Remove, was used by
+ variable_value_as_list_recursive_worker only.
+ (variable_value_as_list_recursive_worker): Rewrite using
+ traverse_variable_recursively. Remove the $parent argument.
+ (variable_value_as_list_recursive,
+ variable_loc_and_value_as_list_recursive): Adjust calls
+ to variable_value_as_list_recursive_worker. Don't reset
+ %vars_scanned.
+ * tests/cond3.test: Don't expect empty helper variables,
+ we don't output them anymore.
+ * tests/cond30.test: Use an undefined variable.
+
+ * automake.in (handle_programs): Strip $(EXEEXT) before
+ calling &check_canonical_spelling.
+ * tests/exeext.test: Make sure we don't use a
+ maude3__EXEEXT__OBJECTS variable.
+
+2003-02-02 Jeremy Nimmer <jwnimmer@alum.mit.edu> (tiny change)
+
+ For Debian Bug #39542:
+ * automake.texi (Invoking Automake, Optional): Document how
+ AC_CONFIG_AUX_DIR interacts with missing files.
+
+2003-02-02 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/Automake/DisjConditions.pm (_permutations_worker)
+ (permutations): Remove, so that people aren't tempted to use it.
+ * lib/Automake/tests/DisjConditions.pl (tests_permutations): Remove.
+
+ * automake.in (variable_conditions_recursive): Remove.
+ (variable_conditionally_defined): Rewrite using
+ traverse_variable_recursively.
+
+ * automake.in (traverse_variable_recursively,
+ traverse_variable_recursively_worker): Pass one merged Condition
+ instead of a stack of conditions to &FUN_STORE and &FUN_COLLECT.
+ (transform_variable_recursively, define_objects_from_sources)
+ (handle_lib_objects, variable_conditions_recursive): Adjust usage.
+
+2003-02-01 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (handle_lib_objects): Compute _DEPENDENCIES variables
+ using transform_variable_recursively instead of
+ variable_conditions_recursive and variable_value_as_list_recursive
+ to avoid combinatorial explosion.
+ (handle_lib_objects_cond): Merge into handle_lib_objects.
+ * tests/cond11.test: Don't grep internal details in Makefile.in,
+ run $MAKE to make sure the resulting Makefile runs as expected.
+ * tests/cond29.test: Also exercise conditional _LDADD.
+ * tests/cond31.test, tests/cond32.test: New files.
+ * tests/Makefile.am (TESTS): Add tests/cond31.test and
+ tests/cond32.test.
+
+2003-01-31 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (handle_lib_objects_cond): Ignore -dlopen and
+ -dlpreopen in _LIBADD variables too.
+ (handle_LIBOBJS, handle_ALLOCA): New functions, extracted from
+ handle_lib_objects_cond.
+ * tests/libtool7.test: New file.
+ * tests/Makefile.am (TESTS): Add libtool7.test.
+
+ * automake.texi (Program and Library Variables): Clarify that
+ _LIBADD is for libraries and _LDADD for programs.
+
+ * automake.in (handle_source_transform): Correct typo from 2003-01-23.
+
+2003-01-28 Alexandre Duret-Lutz <adl@gnu.org>
+
+ Fix for PR automake/352:
+ * automake.in (transform_variable_recursively): If the destination
+ and the source variables are the same, delete the source variable
+ before defining the destination variable.
+ (handle_programs): Strip any $(EXEEXT) suffix from $one_file,
+ or this will confuse handle_source_transform.
+ (append_exeext): Rewrite using transform_variable_recursively.
+ * tests/cond29.test, tests/cond30.test: New files.
+ * tests/exeext.test: Run ./configure and make, this uncovered
+ the above handle_programs issue.
+ * tests/Makefile.am (TESTS): Add cond29.test and cond20.test.
+
+ * automake.in (%subobjvar): Replace by ...
+ (%gen_varname): ... this.
+ (subobjname): Replace by ...
+ (gen_varname): ... this.
+ (initialize_per_input): Clean gen_varname instead of subobjname.
+ (transform_variable_recursively): New function, extracted
+ from define_objects_from_sources.
+ (define_objects_from_sources): Use transform_variable_recursively.
+ Remove the unused $parent argument.
+ (handle_source_transform): Adjust call to define_objects_from_sources.
+
+2003-01-23 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (@substfroms, @substtos): Move near
+ traverse_variable_recursively.
+ (traverse_variable_recursively, traverse_variable_recursively_worker):
+ New functions, extracted from define_objects_from_sources.
+ (define_objects_from_sources): Rewrite using
+ traverse_variable_recursively.
+ (handle_source_transform): Use variables_conditionally_defined
+ instead of calling variable_conditions_recursive directly.
+ Adjust the call to define_objects_from_sources; there is no need
+ to reset @substtos, @substfroms, and %vars_scanned now.
+ (variable_conditions_recursive): Rewrite using
+ traverse_variable_recursively.
+ (variable_conditions_recursive_sub): Remove.
+ (variable_conditionally_defined): Fix condition comparison (the
+ consequence was that DIST_SUBDIRS was always output).
+ * lib/Automake/Condition.pm (merge): Allow merging several
+ conditions at once.
+
+2003-01-22 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.texi (Python): Explain that directory variables start
+ with either ${prefix} or ${exec_prefix}, and point to the
+ `Installation Directory Variables' section of the Autoconf manual.
+
+2003-01-21 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/am/distdir.am (top_distdir, distdir): Define these
+ variables only in top level Makefile. Redefine $(top_distdir)
+ as $(distdir).
+ (distdir): Fix passing of $(top_distdir) to sub-makes.
+ * automake.in (handle_dist): Do not define the DISTDIR and
+ TOP_DISTDIR transformations. We don't need them anymore.
+ * automake.texi (Dist): Reorder the dist-hook section, and move
+ the DIST_SUBDIRS paragraph earlier. Document distdir and
+ top_distdir.
+ * tests/subpkg.test: Update to check for $(distdir) and
+ $(top_distdir).
+
+2003-01-19 Alexandre Duret-Lutz <adl@gnu.org>
+
+ Rename more files to accommodate 8+3 file systems, and adjust the
+ vocabulary at the same time: AM_CONDITIONAL defines "conditionals",
+ and we call "condition" a conjunction of "conditionals".
+ * lib/am/Conditional.pm: Rename to lib/am/Condition.pm.
+ * lib/am/tests/Conditional.pl: Rename to lib/am/tests/Condition.pl.
+ * lib/am/ConditionalSet.pm: Rename to lib/am/DisjConditions.pm.
+ * lib/am/tests/ConditionalSet.pl: Rename to
+ lib/am/tests/DisjConditions.pl
+ * lib/am/Conditional.pm (condition_negate): Rename to ...
+ * lib/am/Condition.pm (conditional_negate): ... this.
+ * automake.in: Adjust references to Condition and DisjConditions.
+ (check_ambiguous_conditional, conditional_ambiguous_p): Rename to ...
+ (check_ambiguous_condition, condition_ambiguous_p): ... these.
+
+ * tests/README: New file.
+
+ * automake.texi (Conditional Programs): Show a sample Makefile.am.
+ Remind $(EXEEXT) must be appended to configure substitutions.
+ Show how Automake conditionals can be used instead.
+ * tests/exeext.test (check_PROGRAMS): Make sure EXEEXT is also
+ appended to conditionally defined programs.
+
+2003-01-16 Jim Meyering <jim@meyering.net>
+
+ Accept --help and --version, and lots of syntactic clean-up.
+ * lib/install-sh: Use consistent indentation, two spaces per level.
+ (scriptversion): New variable.
+ Change initializations like `variable=""' to `variable='.
+ (usage): New variable.
+ Use `test', not `['.
+ Use `test -z "$var"', not `[ x"$var" = x ]'.
+ Use `test -n "$var"', not `[ x"$var" != x ]'.
+ Alphabetize case entries.
+ Accept --help and --version options.
+ Remove unnecessary `else :' clauses.
+ Add a `Local variables' eval block to help emacs users update
+ the time-stamp variable added above.
+ Mostly from Karl Berry.
+
+2003-01-16 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * m4/python.m4 (AM_PATH_PYTHON) <_AM_PYTHON_INTERPRETER_LIST>: Add
+ python2.3.
+
+ * m4/python.m4 (AM_PATH_PYTHON): Query distutils for `pythondir'
+ or `pyexecdir', for the sake of 64-bit distributions that usually
+ use lib64/ instead of lib/. Fall back to the default directory
+ if it doesn't work.
+ Suggested by Gwenole Beauchesne.
+
+2003-01-14 Alexandre Duret-Lutz <adl@gnu.org>
+
+ For PR automake/382:
+ * automake.texi (Yacc and Lex): Document `AM_YFLAGS = -d'.
+ Explain BUILT_SOURCES is usually needed in this case.
+ Reported by William S Fulton.
+
+2003-01-13 Alexandre Duret-Lutz <adl@gnu.org>
+
+ Rename some files for the sake of 8+3 file systems.
+ * tests/aclocali.test: Rename to tests/aclocal.test.
+ * tests/aclocali1.test: Rename to tests/aclocal2.test.
+ * tests/aclocalii.test: Rename to tests/aclocal3.test.
+ * tests/acoutput.test: Rename to tests/acoutpt.test.
+ * tests/acoutput2.test: Rename to tests/acoutpt2.test.
+ * tests/acouttbs.test: Rename to tests/acoutbs.test.
+ * tests/acouttbs2.test: Rename to tests/acoutbs2.test.
+ * tests/autoheader.test: Rename to tests/autohdr.test.
+ * tests/autoheader2.test: Rename to tests/autohdr2.test.
+ * tests/condincl.test: Rename to tests/condinc.test.
+ * tests/condincl2.test: Rename to tests/condinc2.test.
+ * tests/distcommon.test: Rename to tests/distcom.test.
+ * tests/distcommon2.test: Rename to tests/distcom2.test.
+ * tests/distcommon3.test: Rename to tests/distcom3.test.
+ * tests/installsh.test: Rename to tests/instsh.test.
+ * tests/installsh2.test: Rename to tests/instsh2.test.
+ * tests/instdata.test: Rename to tests/instdat.test.
+ * tests/instdata2.test: Rename to tests/instdat2.test.
+ * tests/libobj12b.test: Rename to tests/libobj13.test.
+ * tests/link_f_c.test: Rename to tests/link_fc.test.
+ * tests/link_f_c_cxx.test: Rename to tests/link_fccxx.test.
+ * tests/link_f_cxx.test: Rename to tests/link_fcxx.test.
+ * tests/nodefine.test: Rename to tests/nodef.test.
+ * tests/nodefine2.test: Rename to tests/nodef2.test.
+ * tests/required.test: Rename to tests/reqd.test.
+ * tests/required2.test: Rename to tests/reqd2.test.
+ * tests/sourcesub.test: Rename to tests/srcsub.test.
+ * tests/sourcesub2.test: Rename to tests/srcsub2.test.
+ * tests/specflags.test: Rename to tests/specflg.test.
+ * tests/specflags2.test: Rename to tests/specflg2.test.
+ * tests/specflags3.test: Rename to tests/specflg3.test.
+ * tests/specflags6.test: Rename to tests/specflg6.test.
+ * tests/specflags7.test: Rename to tests/specflg7.test.
+ * tests/specflags8.test: Rename to tests/specflg8.test.
+ * tests/specflags9.test: Rename to tests/specflg9.test.
+ * tests/subdircond.test: Rename to tests/subcond.test.
+ * tests/subdircond2.test: Rename to tests/subcond2.test.
+ * tests/subdircond3.test: Rename to tests/subcond3.test.
+ * tests/texinfo.test: Rename to tests/txinfo.test.
+ * tests/texinfo2.test: Rename to tests/txinfo2.test.
+ * tests/texinfo3.test: Rename to tests/txinfo3.test.
+ * tests/texinfo4.test: Rename to tests/txinfo4.test.
+ * tests/texinfo5.test: Rename to tests/txinfo5.test.
+ * tests/texinfo6.test: Rename to tests/txinfo6.test.
+ * tests/texinfo7.test: Rename to tests/txinfo7.test.
+ * tests/texinfo8.test: Rename to tests/txinfo8.test.
+ * tests/texinfo9.test: Rename to tests/txinfo9.test.
+ * tests/texinfo10.test: Rename to tests/txinfo10.test.
+ * tests/texinfo13.test: Rename to tests/txinfo13.test.
+ * tests/texinfo16.test: Rename to tests/txinfo16.test.
+ * tests/texinfo17.test: Rename to tests/txinfo17.test.
+ * tests/texinfo18.test: Rename to tests/txinfo18.test.
+ * tests/Makefile.am (TESTS): Adjust.
+ * ChangeLog.1996: Rename to ChangeLog.96.
+ * ChangeLog.1998: Rename to ChangeLog.98.
+ * ChangeLog.2000: Rename to ChangeLog.00.
+ * ChangeLog.2001: Rename to ChangeLog.01.
+ * Makefile.am (EXTRA_DIST): Adjust.
+ Reported by Richard Dawe.
+
+2003-01-13 Richard Dawe <rich@phekda.freeserve.co.uk> (tiny change)
+
+ * lib/am/distdir.am (distcheck): '=' is not valid in DOS filenames.
+ Use '_build' and '_inst' instead of '=build' and '=inst'.
+ * tests/man2.test: Reflect change automake: check for files in
+ '_build' and '_inst' directories instead of '=build' and '=inst'.
+
+2003-01-13 Alexandre Duret-Lutz <adl@gnu.org>
+
+ Use `_dirstamp' when the file-system doesn't support `.dirstamp'.
+ * m4/lead-dot.m4: New file.
+ * m4/Makefile.am (dist_m4data_DATA): Add lead-dot.m4
+ * m4/init.m4 (AM_INIT_AUTOMAKE): Require AM_SET_LEADING_DOT.:
+ * m4/depend.m4 (AM_SET_DEPDIR): Require AM_SET_LEADING_DOT. Define
+ DEPDIR using am__leading_dot.
+ * automake.in (require_build_directory): Define am__dirstamp, a new
+ variable for the dirstamp basename, based on am__leading_dot.
+ * tests/subobj6.test: Move all `test -f' into Makefiles, so we can
+ use $(am__dirstamp).
+ Reported by Richard Dawe.
+
+ * tests/gnits2.test, tests/pr300-prog.test, tests/transform.test:
+ Move all `test -f' into Makefiles, so we can honor $(EXEEXT) when
+ testing for programs.
+ Reported by Richard Dawe.
+
+2003-01-10 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * Makefile.am (maintainer-check): Suggest using $sleep instead of
+ sleep 2.
+ * tests/defs.in (sleep): New variable.
+ * tests/asm.test, tests/confsub.test, tests/lisp3.test,
+ tests/texinfo16.test, tests/warnopts.test, tests/yaccvpath.test:
+ Use $sleep instead of sleep 2, to work around timestamp
+ inconsistencies in Windows.
+ Reported by Richard Dawe.
+
+ * Makefile.am (maintainer-check): Do not require SHELL=/bin/sh
+ after $MAKE -e.
+ * tests/ansi3.test, tests/ansi5.test, tests/cond22.test,
+ tests/man2.test, tests/subobj3.test, tests/suffix8.test,
+ tests/suffix11.test: Do not set SHELL=/bin/sh after $MAKE -e.
+ $SHELL is overridden by tests/defs, so it won't hurt even
+ if $MAKE -e uses the $SHELL envvar.
+ * tests/ansi.test, tests/insh2.test, tests/texinfo.test,
+ tests/texinfo8.test: Use SHELL=$SHELL, not SHELL=/bin/sh.
+ Reported by Richard Dawe.
+
+ Build elisp files all at once instead of one by one.
+ * automake.in (handle_emacs_lisp): Define am__ELFILES. Add
+ elc-stamp to all's dependencies.
+ * lib/am/lisp.am (elc-stamp): New rule, build all *.elc files.
+ (.el.elc): Rewrite to call elc-stamp if $@ doesn't exist.
+ (clean-lisp): Clean elc-stamp.
+ * lib/elisp-comp: Reindent. Erase the temporatry directory
+ from a trap. Propagate Emacs's exit status.
+ * tests/lisp3.test: New file.
+ * tests/Makefile.am (TESTS): Add lisp3.test.
+ Reported by Ryan T. Sammartino.
+
+2003-01-09 Akim Demaille <akim@epita.fr>
+
+ * automake.texi: Prefer $(FOO) to @FOO@ in the documentation.
+
+2003-01-08 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * m4/lispdir.m4: Register EMACS and EMACSLOADPATH as precious
+ variables. Suggested by Ryan T. Sammartino.
+
+2003-01-05 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (macro_define): Add missing `{$cond}' (typo from
+ 2002-09-18).
+ ($gen_copyright): Append year 2003.
+ (version): Increase year.
+
+ * tests/defs.in: Substitute aclocaldir instead of running
+ the installed aclocal. Otherwise Libtool and Gettext
+ tests get skipped when aclocal doesn't preexist.
+ Reported by Imacat.
+ * tests/listval.test, tests/suffix2.test: Remove pointless -I
+ argument to aclocal.
+
+-----
+
+Copyright (C) 2003-2017 Free Software Foundation, Inc.
+
+Copying and distribution of this file, with or without modification, are
+permitted provided the copyright notice and this notice are preserved.
diff --git a/old/ChangeLog.04 b/old/ChangeLog.04
new file mode 100644
index 000000000..2220adbad
--- /dev/null
+++ b/old/ChangeLog.04
@@ -0,0 +1,1623 @@
+2004-12-31 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * tests/man2.test, tests/transform.test: Specify --mandir, in order
+ not to fail when Autoconf changes its $mandir default.
+
+2004-12-30 Alexandre Duret-Lutz <adl@gnu.org>
+
+ Support for `install-dvi', `install-html', `install-ps', and
+ `install-pdf', as recently introduced into the GNU Coding
+ Standard.
+
+ * automake.in (handle_factored_dependencies): Reject
+ uninstall-dvi-local, uninstall-html-local, uninstall-info-local,
+ uninstall-ps-local, and uninstall-pdf-local. Allow
+ install-info-local even when no-installinfo is not used.
+ (handle_data): Allow datarootdir, dvidir, htmldir, pdfdir, and psdir.
+ (%standard_prefix): Declare these new standard directory variables.
+ * doc/automake.texi (Texinfo, Third-Party Makefiles): Document
+ install-dvi, install-html, install-pdf, and install-ps.
+ (Extending): Document install-local-dvi, install-local-html,
+ install-local-info, install-local-pdf, and install-local-ps.
+ * lib/Automake/Rule.pm (%dependencies): Add new install rules,
+ and remove uninstall-info.
+ * /cvs/automake/automake/lib/am/texinfos.am (install-dvi,
+ install-dvi-am, install-dvi-recursive, install-html,
+ install-html-am, install-html-recursive, install-pdf,
+ install-pdf-am, install-pdf-recursive, install-ps, install-ps-am,
+ install-ps-recursive, uninstall-dvi-am, uninstall-html-am,
+ uninstall-pdf-am, uninstall-ps-am): New rules.
+ (uninstall-info): Delete.
+ * tests/txinfo21.test: Augment to check for these new rules.
+ * tests/exdir2.test: Do not use `htmldir' as example of
+ undefined directory.
+ * tests/overrid.test: Do not be fooled by install-ps and
+ install-html.
+ * tests/txinfo10.test: Do not grep for uninstall-info-recursive.
+
+2004-12-27 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (Preprocessed Fortran): Fix the definition of FCLINK.
+
+ * Makefile.am (maintainer-check): Refine check for @_ in scalar
+ context. Check for correct use of PRE_INSTALL, NORMAL_INSTALL,
+ POST_INSTALL, PRE_UNINSTALL, NORMAL_UNINSTALL, and POST_UNINSTALL.
+ * lib/am/texinfos.am (uninstall-info-am): Hide the invocation of
+ $(PRE_UNINSTALL).
+2004-12-27 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/am/texinfos.am (uninstall-info-am): Show change of
+ directory while uninstalling DJGPP-style info files.
+
+2004-12-27 Alexandre Duret-Lutz <adl@gnu.org>
+
+ Declare recursive install targets as dependencies of `.MAKE', so
+ that `make -n install' works with BSD Make too.
+
+ * lib/Automake/Rule.pm (reset) <%dependencies>: Add `.MAKE'.
+ * automake.in (target_cmp): Move all `.XYZ' target last, not
+ only `.PHONY'.
+ (handle_factored_dependencies): Add target with hooks to `.MAKE'.
+ Do not let a user definition of .MAKE override ours.
+ * lib/am/install.am (install-am, install-strip): Mark as `.MAKE'.
+ * lib/am/multilib.am (all-multi, install-multi, mostlyclean-multi,
+ clean-multi, distclean-multi, maintainer-clean-multi): Likewise.
+ * lib/am/subdirs.am (mostlyclean-recursive, clean-recursive,
+ distclean-recursive, maintainer-clean-recursive): Likewise.
+
+2004-12-18 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/config-ml.in, lib/config.guess, lib/config.sub,
+ lib/texinfo.tex: New upstream versions.
+
+ * doc/automake.texi (gettext): Move the paragraph about
+ dist_list_LISP...
+ (Emacs Lisp): ... here.
+ Report from Bruno Haible.
+
+ * doc/automake.texi: Bump GFDL version to 1.2, since that is
+ what we distribute.
+
+ * doc/automake.texi: Fix more misuses of @ref, @xref and @pxref,
+ including some of the "corrections" below. Thanks to Karl Berry.
+
+ * doc/automake.texi: Correct several misuses of @xref and @pxref.
+
+2004-12-17 Jim Meyering <jim@meyering.net>
+
+ * install-sh: Use `(exit N); exit N', not `(exit N); exit'.
+ Otherwise, install-sh could exit with improper exit status when
+ exiting via a trapped interrupt. Thanks to a report from Bob Proulx.
+
+2004-12-14 Akim Demaille <akim@epita.fr>
+
+ * doc/automake.texi (Options): Englishoes.
+ (Options): And another.
+
+2004-12-13 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * ChangeLog.03: New file, extracted from ChangeLog.
+ * Makefile.am (EXTRA_DIST): Add it.
+
+2004-12-12 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (check_user_variables): New function, extracted
+ from ...
+ (handle_languages): ... here.
+ (handle_languages, define_compiler_variable, define_link_variable):
+ Honore LIBTOOLFLAGS.
+ (handle_single_transform): Check _LIBTOOLFLAGS in
+ addition to other per-target flags for Libtool objects.
+ (handle_libtool): Warn if LIBTOOLFLAGS is defined.
+ * doc/automake.texi (Libtool Flags, Program and Library Variables,
+ Flag Variables Ordering): Document LIBTOOLFLAGS.
+ * tests/libtool7.test: Check basic support for LIBTOOLFLAGS.
+ * tests/libtool8.test: Make sure Automake warns about LIBTOOLFLAGS
+ definitions.
+ * tests/subobj9.test: Adjust.
+
+2004-12-11 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/automake.texi (Per-Object Flags): New node.
+
+2004-12-09 Alexandre Duret-Lutz <adl@gnu.org>
+
+ Fix PR automake/441:
+ * lib/am/java.am (install-%DIR%JAVA, uninstall-%DIR%JAVA): Do
+ not install *.class if "$(%DIR%_JAVA)" is empty.
+ * tests/java3.test: New file.
+ * tests/Makefile.am (TESTS): Add it.
+ Report from Johannes Nicolai.
+
+ * doc/automake.texi (Java): Mention dist_ and add an example.
+ * tests/java.test: Do actually compile java files and run distcheck.
+
+2004-12-08 Peter O'Gorman <peter@pogma.com>
+ Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/Automake/FileUtils.pm (dir_has_case_matching_file,
+ reset_dir_cache): New functions.
+ * automake.in (handle_dist, require_file_internal): Use them, so
+ that CHANGELOG is not confused with ChangeLog on case-insensitive
+ case-preserving file systems.
+ * tests/hfs.test: New file.
+ * tests/Makefile.am (TESTS): Add hfs.test.
+
+2004-12-08 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/mdate-sh: Don't use "set - x`$ls_command /`", as zsh mishandles
+ the spaces inside $ls_command. Problem reported by Loulou Pouchet in
+ <https://lists.gnu.org/archive/html/autoconf/2004-12/msg00074.html>.
+ Don't use "set - x"; plain "set x" is enough, and simplifies debugging.
+
+2004-12-05 Toshio Kuratomi <toshio@tiki-lounge.com>
+
+ * lib/py-compile: Add --destdir switch to py-compile that takes a
+ path argument that is not compiled into the file when byte compiling.
+ * lib/am/python.am: Use the new py-compile arguments to not include
+ DESTDIR in the byte compiled files.
+ * tests/python12.test: Test that DESTDIR won't be byte compiled into
+ python files.
+
+2004-12-05 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/automake.texi (Clean): Typo.
+
+ * doc/automake.texi: Use @acindex for Autoconf macros, and @vindex
+ for variables (@cvindex was previously used for both). Separate
+ these two indices in the output. Use @code, @file, and @command
+ in @cindex lines wherever appropriate so they render nicely.
+
+2004-12-05 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/automake.texi (renamed objects, CVS): Typos.
+
+2004-12-05 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/automake.texi (Flag Variables Ordering): New section.
+ (User Variables, Program and Library Variables): @xref it.
+
+2004-11-24 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/automake.texi (Conditional Subdirectories): More comments
+ about non-distributed subdirectories.
+
+ * Makefile.am (maintainer-clean): Check for unescaped @ in manual.
+
+2004-11-24 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/automake.texi (Built sources example): Fix typo.
+
+2004-11-22 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * aclocal.in (parse_arguments): Diagnose abbreviation ambiguous with
+ --help or --version.
+ * automake.in (parse_arguments): Likewise.
+ * tests/aclocal.test, tests/automake.test: Check this.
+ Report from Eric Blake.
+
+2004-11-21 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (parse_arguments): Diagnose empty arguments, options
+ with missing argument, and support `--'.
+ * aclocal.in (parse_arguments): Diagnose options with missing
+ argument.
+ * tests/aclocal.test: More checks.
+ * tests/automake.test: New file.
+ * tests/postprog.test: Use `--' for fun.
+ * tests/Makefile.am (TESTS): Add automake.test.
+ Report from Eric Blake.
+
+ * lib/am/progs.am (installcheck-%DIR%PROGRAMS): Run programs with
+ /dev/null as input, so we do not hang on programs that read their
+ input without supporting --help and --version.
+ * lib/am/scripts.am (installcheck-%DIR%SCRIPTS): Likewise for scripts.
+ * tests/gnits2.test: Change scriptnok.sh to cat its input.
+ Report and fix from James Youngman.
+
+2004-11-17 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * aclocal.in (%file_seen): Rename as ...
+ (%file_added): ... this, and move it close to add_file(), the only
+ function that uses it.
+
+ * aclocal.in (version): Remove initial blank line and reproduce
+ the layout of automake --version. From Art Haas.
+
+ * aclocal.in (%file_type, FT_USER, FT_AUTOMAKE_SYSTEM): New variables.
+ (scan_m4_dirs): New function, extracted from ...
+ (scan_m4_files): ... here. Call scan_m4_files three times, for each
+ FT_ constant.
+ (scan_file): Take a file type argument to update %file_type.
+ (write_aclocal): Do not m4_include files that are not of type FT_USER.
+ * tests/dirlist.test: Make sure m4_include is not used for --acdir
+ files.
+
+ * tests/defs.in (testaclocaldir): New variable.
+ * tests/aclocal.test: Use it to fix the test. Report from
+ Patrick Welche.
+
+2004-11-10 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * m4/python.m4 (AM_PATH_PYTHON): Fix the invocation of
+ AC_PATH_PROGS to correctly define PYTHON as `:' when no interpreter
+ is found (this worked correctly only when a minimal version was
+ passed to AM_PATH_PYTHON). Report from Stepan Kasal.
+ (_AM_PYTHON_INTERPRETER_LIST): Define using m4_define_default,
+ so we can easily override the list from the test suite.
+ * tests/python11.test: New file.
+ * tests/Makefile.am (TESTS): Add python11.test.
+
+ * doc/automake.texi (Libtool Modules): Make clearer that -module
+ should appear explicitly in _LDFLAGS.
+
+2004-11-09 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * aclocal.in (parse_arguments): Correctly recognize --print-ac-dir.
+ * tests/aclocal.test: Check --print-ac-dir and a unknown option.
+
+ * aclocal.in (parse_arguments): Fix detection of unexisting default
+ $(datadir)/aclocal. Report from Akim.
+
+2004-11-07 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * aclocal.in ($acdir): Rename as ...
+ (@system_includes): ... this.
+ (@user_includes, @automake_includes): New variables.
+ ($default_acdir, $default_dirlist): Remove.
+ (parse_arguments): Populate @user_includes, @automake_includes, and
+ @system_includes instead of filling a unique @dirlist array.
+ ("MAIN"): Adjust to scan m4 files in @user_includes,
+ @automake_includes, and @system_includes.
+
+2004-11-06 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * aclocal.in (parse_arguments): Correct comment. From Akim.
+
+2004-11-04 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * aclocal.in: Use Automake::ChannelDefs, and adjust all output
+ to be done via `fatal', `msg', `verb', or `prog_error'.
+ (version): New function.
+ (parse_arguments): Rewrite using Getopt::Long, call &version, and
+ honor -W and --warning.
+ ($verbose): Remove.
+ (trace_used_macros): Do not trace the first arguments of macros
+ for which we do not need it. This caused failures because of
+ unexpected newlines in the output.
+ * doc/automake.texi (aclocal options): Document -W and --warning.
+ * tests/defs.in (ACLOCAL): Always use -Werror, to catch Perl
+ warnings about uninitialized variables.
+
+2004-11-03 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * tests/defs.in: Do not distinguish VERBOSE=x from
+ VERBOSE=anything_but_x, always turn on shell traces.
+
+ * aclocal.in (write_aclocal): Make sure $map_traced_defs{$m} exists
+ before using it. Suppress a warning observable in test/acloca16.test.
+ Report from Ralf Wildenhues.
+
+2004-11-01 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/Automake/XFile.pm (lock): Make sure $ENV{'MAKEFLAGS'} exists
+ before inspecting it; this fixes "uninitialized value in
+ concatenation" diagnostics when flock fails.
+ Report from Gary V. Vaughan.
+
+ * aclocal.in: Use strict and -w. Declare local variables with `my',
+ and get rid of `local'.
+ (scan_m4_files, add_macro): Reindent these functions while we are
+ at it.
+
+ * lib/config.guess, lib/texinfo.tex: New upstream versions.
+
+ * doc/automake.texi (LIBOBJS): Spelling and grammar corrections
+ from Ralf Wildenhues.
+
+2004-10-31 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/automake.texi (LIBOBJS): Augment with an example setup.
+ (LTLIBOBJ): Rename as ...
+ (LTLIBOBJS): ... this. Link to LIBOBJS, and mention LTALLOCA.
+
+2004-10-25 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/automake.texi: Untabify, tabs in the examples are poorly
+ rendered.
+ * Makefile.am (maintainer-check): Grep tabs in the manual.
+
+ * tests/comment8.test: Use $MAKE, not make.
+
+2004-10-24 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * tests/distcom3.test: Typo.
+
+2004-10-22 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/automake.texi (Libtool Convenience Libraries): Explain how
+ to force the linker selection.
+
+ * lib/install-sh: Fix the dirname emulation to ignore trailing
+ slashes, i.e., the direname of `a/b/' is `a', not `a/b/'. This
+ caused `install-sh a/b/' to fail.
+ * tests/instsh2.test: Augment.
+ Report from ПухальÑкий Юрий Ðндреевич.
+
+2004-10-21 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (get_object_extension): The extension to use is know
+ by the caller, and cannot be selected by looking only at the
+ target name. Simplify this function to simply conditionally
+ prepend $U to the given extension.
+ (handle_programs, handle_libraries, handle_ltlibraries): Hard-code
+ the extension to use. This way Automake won't mistake a program
+ named `foo.la' as a libtool library.
+ * tests/primary3.test: New file.
+ * tests/Makefile.am (TESTS): Add primary3.test.
+
+2004-10-12 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/automake.texi (Install): Link to node Extending for examples.
+ (Extending): More comments about install-data-hook vs
+ install-exec-hook, and link to Install.
+
+ * configure.ac: Export @am_AUTOCONF@.
+ * tests/defs.in (AUTOCONF): Define as @am_AUTOCONF@, not @AUTOCONF@,
+ so the test suite runs `autoconf' and not `missing --run autoconf'.
+ * tests/missing.test, tests/missing2.test: Arrange for missing
+ to be used in front of autoconf even if the user has exported
+ AUTOCONF. This fixes two spurious failures reported by
+ Mark D. Baushke.
+
+ * lib/compile: Handle output.obj in addition to output.o.
+ * tests/compile.test: Check for this.
+
+2004-10-11 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/automake.texi (Sources): Typo, reported by Karl Berry.
+
+2004-10-10 Kelley Cook <kcook@gcc.gnu.org> (tiny change)
+ Alexandre Duret-Lutz <adl@gnu.org>
+
+ * aclocal.in ($ac_defun_rx): Match AC_DEFUN_ONCE.
+ (trace_used_macros): Trace AC_DEFUN_ONCE.
+ * tests/aclocal5.test: Use AC_DEFUN_ONCE.
+
+2004-10-10 Stepan Kasal <kasal@ucw.cz> (tiny change)
+
+ * doc/automake.texi (Extending): Typo.
+
+2004-10-10 Martin Waitz <tali@admingilde.org> (tiny change)
+
+ * m4/as.m4 (AM_PROG_AS): Check dependency tracking mode for CCAS.
+ * automake.in (cppasm): Use the dependency tracking more for CCAS.
+ * doc/automake.texi (Assembly Support): Note that *.S are
+ preprocessed with CPPFLAGS.
+
+2004-10-10 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
+
+ * automake.in (Languages): Split .s (asm) and .S (cppasm) into
+ separate languages. Make cppasm (Preprocessed Assembler) aware
+ of CPPFLAGS, AM_CPPFLAGS.
+ (handle_languages): Fix typo.
+ (lang_cppasm_rewrite): New function.
+
+2004-09-29 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * tests/subobj9.test: Adjust regexes after previous patch.
+
+2004-09-28 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (handle_languages, define_compiler_variable): Output
+ Libtool's --tag= option before --mode=compile, because depcomp use
+ --mode=compile as end marker for libtool arguments.
+ (define_linker_variable): Likewise before --mode=link, for
+ uniformity.
+ * tests/pr307.test: Make sure dependency files are updated. That
+ was not the case because depcomp thought `--tag=CC' was the
+ compiler to get dependencies from.
+ Report from ПухальÑкий Юрий Ðндреевич.
+
+2004-09-26 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * configure.ac: Require Perl 5.6.
+ * lib/Automake/Config.in: Require Perl 5.6 (not done in
+ lib/Automake/General.pm because it is shared with Autoconf),
+ and use `our' instead of `use vars'.
+ * aclocal.in (rel2abs): Remove.
+ (scan_configure_dep): Use File::Spec->rel2abs instead.
+
+ * tests/compile.test, tests/instsh2.test, tests/instspc.test: Use
+ two consecutive spaces in filename instead of one, to catch mistake
+ like `echo $val | ...`.
+ * tests/README: Suggest this.
+ Suggested by Ralf Wildenhues.
+
+2004-09-25 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/automake.texi (Clean): Document -local targets.
+
+2004-09-25 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/automake.texi: Typos.
+
+2004-09-21 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/automake.texi (Timeline): Typos and other English mistakes
+ reported by Jim and Gary.
+
+ * lib/Automake/VarDef.pm (append): Strip comments from augmented
+ variables.
+ * tests/comment8.test: New file.
+ * tests/Makefile.am (TESTS): Add comment8.test.
+ Report from Stepan Kasal.
+
+2004-09-19 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * tests/compile.test: Fix rm usage.
+
+ * INSTALL, lib/INSTALL, lib/config.sub, lib/config.guess,
+ lib/texinfo.tex: New upstream versions.
+
+ * doc/automake.texi (Timeline): New node. Thanks to Karl and Tom
+ for their comments on a preliminary version of this, Akim for
+ digging out some old mails, and Jason Molenda for sending the note
+ about Automake in Alias to Tom.
+ (Releases): Rename `ac' to `acl', suggested by Akim.
+
+2004-09-19 Akim Demaille <akim@epita.fr>
+
+ * AUTHORS, automake.in, aclocal.in: Add Alexandre Duret-Lutz as
+ author.
+
+2004-09-15 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/automake.texi (Releases): New node.
+
+ * doc/automake.texi (Dependencies): Link to Dependency Tracking
+ Evolution.
+ (Dependency Tracking Evolution): Link to GNU make, Sources (for
+ BUILT_SOURCES), and update the paragraph about the "plan" to
+ inline dependency tracking with gcc3.
+
+ * doc/automake.texi (History): New node.
+ (Dependency Tracking Evolution): New node, filled with a Texinfo
+ version of Tom Tromey's ``Dependency Tracking in Automake''
+ document, initially published on the Automake homepage on
+ 2001-06-29.
+
+2004-09-10 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * m4/minuso.m4 (AM_PROG_CC_C_O): Make sure AC_PROG_CC is never
+ called after this macro.
+ * tests/distname.test, tests/subdir5.test, tests/subdir8.test,
+ tests/subobj.test, tests/subobj4.test, tests/subobj5.test,
+ tests/subobj6.test: Adjust.
+ Report from Ralf Wildenhues.
+
+ * lib/Automake/Channels.pm (_print_message): Handle uniq_part with
+ arbitrary string.
+ * automake.in (lang_c_rewrite): Set uniq_part so that the
+ AM_PROG_CC_C_O diagnostic is output only once for subdir objects
+ and only once for objects with per-target flags.
+
+ * automake.in (lang_c_rewrite): Print files and locations
+ for AM_PROG_CC_C_O errors.
+ (handle_single_transform): Pass $var to &$subr so it can
+ print locations.
+
+ * lib/compile, lib/elisp-comp, lib/install-sh, lib/ylwrap: Use $ret
+ instead of $status which is read-only in Zsh.
+
+2004-09-10 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+ Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/compile: Preserve spaces in arguments (for example
+ -DPACKAGE_STRING="foo 0.1").
+ * tests/compile.test: New file.
+ * tests/Makefile.am (TESTS): Add compile.test.
+
+2004-09-07 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (handle_clean): Sort rm commands output for
+ mostlyclean-generic, clean-generic, distclean-generic, and
+ maintainer-clean-generic.
+ Report from Bob Friesenhahn.
+
+ * automake.in (lang_c_rewrite): Do not require AM_PROG_CC_C_O for
+ libtool objects.
+ (handle_single_transform): Pass nonansi_obj to &$subr so
+ lang_c_rewrite can distinguish libtool objects.
+ * tests/libtool7.test: Use subdir-objects without using AM_PROG_CC_C_O.
+ Report from Gary V. Vaughan and Patrick Welche.
+
+2004-09-07 Andreas Schwab <schwab@suse.de>
+
+ * automake.in ($PATH_PATTERN): Add `+'.
+
+2004-09-07 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * tests/missing3.test: New file (check for Paolo's change below).
+ * tests/Makefile.am (TESTS): Add missing3.test.
+
+2004-09-07 Paolo Bonzini <bonzini@gnu.org>
+
+ * missing: Handle all command line options together. Add a
+ separate case statement to detect failed runs, and fail
+ silently there if --help or --version is passed to the program.
+
+2004-08-11 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/config.guess, lib/texinfo.tex: New upstream versions.
+
+ For PR automake/433:
+ * configure.ac (pkgvdatadir): Define using "$PACKAGE", not "automake".
+
+ Fix PR automake/432:
+ * lib/am/yacc.am [!%?MORE-THAN-ONE%]: Replace `#line's in y.tab.h too.
+ * tests/yacc7.test: Check this.
+
+2004-08-08 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/Automake/DisjConditions.pm (new): Precompute 'string' and 'conds'
+ in place instead of as a side-effect of calling ->string and ->conds.
+ This saves method-lookup time, simplify ->string and ->conds, and
+ allows to create the object only when necessary.
+ (string, conds): Simplify, now that the result is precomputed.
+
+ * automake.in (%am_file_cache): New hash.
+ (make_paragraphs): Cache .am files with comments stripped to save
+ some useless input and substitutions.
+
+ * lib/Automake/Variable.pm (%_primary_dict): New hash.
+ (_new, variable_delete): Update %_primary_dict.
+ (variables): Accept an optional $suffix argument.
+ * automake.in (check_typos, am_primary_prefixes): Use that
+ optional argument to restrict the loops over the variables we are
+ interested in.
+
+2004-08-06 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/Automake/Item.pm (def): Rewrite more concisely, it's faster
+ this way.
+
+2004-08-05 Alexandre Duret-Lutz <adl@gnu.org>
+
+ Speed up make_paragraphs.
+ * automake.in (handle_languages): Always define SUBDIROBJ,
+ DERIVED-EXT, and DIST_SOURCE, because the new transform() will
+ abort on unknown tokens.
+ (transform): Rewrite with different semantics.
+ (make_paragraphs): Make a single pass over the paragraph to
+ transform all template tokens instead of doing as much passes as
+ possible token.
+
+ * automake.in ($libtool_new_api): New variable.
+ (handle_libtool): Do not libtool's aux files if $libtool_new_api.
+ (scan_autoconf_traces) <LT_SUPPORTED_TAG>: Set $libtool_new_api.
+ (scan_autoconf_traces) <AC_REQUIRE_AUX_FILE>: Remember only the
+ first location for required files.
+
+2004-08-04 Alexandre Duret-Lutz <adl@gnu.org>
+
+ Support AC_REQUIRE_AUX_FILE, and fix requirement of AM_PROG_CC_C_O.
+ * automake.in (%required_aux_file): New hash.
+ (handle_single_transform, lang_c_rewrite): Do not explicitly
+ require 'compile', this is now an internal detail of
+ AM_PROG_CC_C_O.
+ (scan_autoconf_traces): Trace AC_REQUIRE_AUX_FILE and fill
+ %required_aux_file.
+ (scan_autoconf_files): Require all %required_aux_file instead
+ of explicitly requiring install-sh and missing.
+ (generate_makefile): Do not require config.sub and config.guess.
+ (handle_single_transform): Pass $have_per_exec_flags to
+ &lang_c_rewrite.
+ * configure.ac, m4/init.m4: Require Autoconf 2.59a.
+ * doc/automake.texi (Optional): Document AC_REQUIRE_AUX_FILE.
+ (Program and Library Variables, Options, Public macros):
+ AM_PROG_CC_C_O is required when per-target flags or subdir-objects
+ are used with C sources.
+ * m4/minuso.m4: Require `compile' using AC_REQUIRE_AUX_FILE.
+ * m4/missing.m4: Require `missing' similarly.
+ * tests/acsubst2.test, tests/distcom2.test, tests/distcom6.test,
+ tests/specflg.test, tests/specflg2.test, tests/specflg3.test,
+ tests/specflg6.test, tests/specflg7.test, tests/specflg8.test,
+ tests/specflg9.test, tests/subobj7.test, tests/target-cflags.test,
+ tests/yacc6.test: Fix to use AM_PROG_CC_C_O.
+
+2004-08-03 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (yacc_lex_finish_helper): Fix definition of YLWRAP
+ when ylwrap is installed in a default aux dir found in a parent
+ package.
+ * tests/subpkg.test: Augment to check that YLWRAP is installed
+ properly.
+ * doc/automake.texi (Yacc and Lex): ylwrap is not sought is the
+ current directory.
+ Report from Norman Gray.
+
+2004-08-02 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/automake.texi (Optional): Update documentation for
+ AC_CANONICAL_BUILD, AC_CANONICAL_HOST, and AC_CANONICAL_TARGET.
+
+ * automake.in (AC_CANONICAL_HOST, AC_CANONICAL_SYSTEM): Replace by ...
+ (AC_CANONICAL_BUILD, AC_CANONICAL_HOST, AC_CANONICAL_TARGET): ... these.
+ (scan_autoconf_traces): Scan for the latter three macros instead of
+ the former two.
+ (make_paragraphs): Adjust definitions of %BUILD%, %HOST%, and %TARGET%.
+ * tests/hosts.test: New file.
+ * tests/Makefile.am (TESTS): Add hosts.test.
+ Report and test case from Norman Gray.
+
+2004-08-01 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * aclocal.in (scan_file): Update "#Extending%20aclocal" URL, makeinfo
+ 4.7 now outputs "#Extending-aclocal".
+
+2004-08-01 Alexandre Duret-Lutz <adl@gnu.org>
+ Derek R. Price <derek@ximbiot.com>
+
+ Disable Lex and Yacc rules whenever possible if AM_MAINTAINER_MODE
+ is used and maintainer-mode disabled.
+ * automake.in (Automake::struct): Define nodist_specific.
+ Set it in languages yacc, yaccxx, lex, and lexxx.
+ (register_language): Default nodist_specific to 0.
+ (handle_single_transform): Honor nodist_specific.
+ * lib/am/yacc.am (am__skipyacc): Define this in maintainer mode.
+ (%EXT%%DERIVED-EXT%, %OBJ%): Use $(am__skipyacc) to disable these
+ rules when needed.
+ * lib/am/lex.am (am__skiplex): Define this in maintainer mode.
+ (%EXT%%DERIVED-EXT%, %OBJ%): Use $(am__skiplex) to disable these
+ rules when needed.
+ * tests/mmodely.test: New file.
+ * tests/pr204.test: Augment to check AM_MAINTAINER_MODE and nodist_
+ parsers.
+ * tests/Makefile.am (TESTS): ADd mmodely.test.
+ * doc/automake.texi (Yacc and Lex): Note dependence on maintainer mode.
+
+2004-07-28 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * configure.ac, NEWS: Bump version to 1.9a.
+
+ * configure.ac, NEWS: Bump version to 1.9.
+
+ * automake.in (generate_makefile): Update misleading comment about
+ libtool scripts.
+
+ * lib/texinfo.tex: New upstream version.
+
+2004-07-25 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * m4/mkdirp.m4 (AM_PROG_MKDIR_P): Remove `.' from the mkdir_p
+ definition, it causes `make install' to fails for user with no
+ right to write in the source-tree.
+ * automake.in (handle_configure): Do not use mkdir_p in the
+ definition for $(mkdir_p).
+ Report from Harlan Stenn.
+
+ * lib/am/texi-vers.am (%STAMPVTI%): Typo in comment.
+
+2004-07-22 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/automake.texi (Libtool Modules): Typo in example.
+ Report from Ulrich Eckhardt.
+
+2004-07-21 Andreas Schwab <schwab@suse.de> (tiny change)
+
+ * automake.in (check_directory): Quote $dir in regexp.
+
+2004-07-17 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * configure.ac, NEWS: Bump version to 1.8e.
+
+ * configure.ac, NEWS: Bump version to 1.8d.
+
+ * lib/config-ml.in, lib/config.sub, lib/config.guess, lib/texinfo.tex:
+ New upstream versions.
+
+ * lib/am/texibuild.am (?GENERIC?%SOURCE_SUFFIX%.html,
+ ?!GENERIC?%DEST_PREFIX%.html): Use $(X), not ${X}.
+
+ * tests/installdir.test: installdirs-local should appear three times,
+ since the change from 2004-07-11 will make it PHONY.
+
+ * lib/am/distdir.am (distdir): Always use $(DIST_SUBDIRS) now
+ that it is always defined. This is less confusing for users
+ reading the generated Makefiles.
+ * automake.in (handle_dist): Do not substitute DIST_SUBDIR_NAME.
+
+ * lib/am/texibuild.am (?GENERIC?%SOURCE_SUFFIX%.html,
+ ?!GENERIC?%DEST_PREFIX%.html): Output .htp, and then rename to .html
+ on success. In case the target is a directory, this ensures its
+ time stamp is updated and the no files are left over inside.
+ * tests/txinfo21.test: Augment to test missing timestamp update
+ reported by Akim Demaille.
+
+ * doc/automake.texi (Top level): Rename as ...
+ (Directories): ... this, and split into ...
+ (Subdirectories, Conditional Subdirectories): ... these.
+ (Subdirectories): Illustrate the use of `.'.
+ (Conditional Subdirectories): Describe SUBDIRS and DIST_SUBDIRS
+ before the example. Append a discussion about non-configured
+ conditional directories.
+ (Alternative): Move as a child of Directories.
+ (Subpackages): New section.
+ (Dist): Adjust links to Subdirectories, a Subpackages.
+ (Third-Party Makefiles): Link to Conditional Subdirectories.
+
+2004-07-14 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (target_hook): Accept %transform as last argument.
+ (handle_single_transform): Pass %transform to target_hook.
+ (handle_source_transform): Define DIST_SOURCE to tell whether
+ a the source of a file is distributed or not.
+ (lang_yacc_target_hook): Check DIST_SOURCE, and do not distribute
+ the generated header if the .y source is not distributed.
+ * tests/pr204.test: Use AM_YFLAGS = -d and make sure generated
+ headers are not distributed.
+
+2004-07-12 Simon Josefsson <jas@extundo.com> (tiny change)
+
+ * doc/automake.texi (Options): Improve ustar file name length
+ discussion. Reference tar manual.
+
+2004-07-12 Ray Simard <rhs.techlists@sylvan-glade.com> (tiny change)
+
+ * lib/Automake/Variable.pm (define): Fix precondition check.
+
+2004-07-11 Alexandre Duret-Lutz <adl@gnu.org>
+
+ For PR automake/428:
+ Support for conditionally defined -hook and -local rules.
+ * automake.in (user_phony_rule): New function.
+ (handle_dist, handle_install, handle_all, do_check_merge_target,
+ handle_factored_dependencies): Use user_phony_rule before
+ adding a user -hook or -local rule as a dependency to ensure
+ it is always defined an phony.
+ * tests/cond37.test, tests/condhook.test: New files.
+ * tests/Makefile.am (TESTS): Add them.
+ Report from Simon Josefsson and Nik A. Melchior.
+
+2004-07-05 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/automake.texi (Install): Warn that you should create
+ /tmp/staging before installing into it, to avoid security problems.
+ * lib/install-sh: Remove support for -b= and -t= options; this
+ has been moribund for a decade.
+ Add support for -t and -T options (new in coreutils install).
+ -c option now does nothing (the default is to copy), for
+ compatibility with BSD and coreutils 'install'.
+ Fix usage message; it referred to nonexistent variables.
+ Don't assume 'lasterr' is unset in environment.
+ * tests/instsh2.test: Don't assume that install-sh without -c
+ moves (it now copies). Add tests for new -t and -T options.
+
+2004-06-16 Alexandre Duret-Lutz <adl@gnu.org>
+
+ For Debian Bug#254372:
+ * doc/automake.texi (Invoking aclocal): Rewrite the paragraph
+ explaining m4_include is used for relative files.
+
+2004-06-10 Alexandre Duret-Lutz <adl@gnu.org>
+
+ For Debian Bug #251820:
+ * aclocal.in (scan_file): Keep track of the location where each
+ file is included, and display it when reporting a missing file.
+ Pass this location to scan_file as a second argument.
+ (scan_m4_files): Adjust calls to scan_file.
+ * tests/acloca14.test: Add a test for this diagnostic.
+
+2004-06-07 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * m4/tar.m4 (_AM_PROG_TAR): Split the definition of $_am_tools
+ so it works with Solaris and Tru64 /bin/sh.
+ Report from Nicolas Joly.
+
+2004-06-06 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * m4/tar.m4 (_AM_PROG_TAR): Introduce $_am_tools to work around a
+ bug in NetBSD /bin/sh.
+ Report from Nicolas Joly.
+
+2004-06-03 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * tests/defs.in (required=icc): Use `-V -help' instead of
+ `-V -dryrun'. icc 8.0 fails on the latter.
+ * tests/depcomp5.test: Require depmode=icc for icc 7.x, and
+ depmod=gcc otherwise.
+ Report from Ralf Wildenhues.
+
+ * lib/am/clean.am (distclean-generic): Do no
+ `rm -f $(CONFIG_CLEAN_FILES)' if `$(CONFIG_CLEAN_FILES)' is empty.
+ Report from Nicolas Joly.
+
+2004-05-31 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * NEWS: Make clearer that we do not output partial Makefile.ins on
+ error.
+ Suggested by Akim Demaille.
+
+ * lib/depcomp (tru64) [libtool]: Use $dir$base.o.d instead
+ of $dir.libs/$base.o.d. Libtool 1.5 causes both to be output,
+ and we will clean the second automatically during distclean.
+ Using the latter and leaving the former as we did before cause
+ "files left in build directory" failures during distcheck.
+ Suggested by Nicolas Joly.
+
+ * doc/automake.texi (Built sources example): Explain what
+ nodist_foo_SOURCES is (not) useful to, and use it in all the
+ examples.
+ (Tags): Mention nodist_noinst_HEADERS and nodist_prog_SOURCES.
+ Suggested by Akim Demaille.
+
+2004-05-23 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * configure.ac, NEWS: Bump version to 1.8c.
+
+ * configure.ac, NEWS: Bump version to 1.8b.
+
+ * m4/tar.m4 (_AM_PROG_TAR) <cpio>: Specify -o and -i option first,
+ by POSIX; and use option -d in am_untar.
+
+ * tests/defs.in (PATH): Export it.
+
+ * lib/am/multilib.am: Add $(MAKE) comments to multido and
+ multiclean lines, to enable parallel make. Based on a patch
+ by Alexandre Oliva applied to newlib on 2003-10-15.
+
+2004-05-22 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (scan_autoconf_traces): Trace for LT_SUPPORTED_TAG
+ instead of AC_LIBTOOL_TAGS, since that how CVS Libtool has been
+ changed.
+ * tests/libtool3.test: Do not grep for --tag=CC, since CVS
+ Libtool (unlike Libtool 1.5) does not has any CC tag.
+
+ * tests/tar2.test: Skip the test if no pax archiver were found.
+
+ * NEWS: Sync with branch-1-8, and reorganize current entry.
+
+ * automake.in (handle_libraries): Make the diagnostic about
+ non standard libraries a warning in foreign packages. This
+ is already the case in handle_ltlibraries.
+ (handle_libraries, handle_ltlibraries): Suggest a standard
+ library name in the diagnostic, to help newcomers.
+ * tests/stdlib.test, tests/stdlib2.test: Check for these
+ suggestions.
+
+ Check directory names for unportable names. Shaking the code
+ to check this also led to the removal of the no-"/"-in-SUBDIRS
+ restriction, and a fix to _do_recursive_traversal.
+
+ * automake.in (check_directory): New function extracted from
+ handle_subdirs, and augmented to check for reserved W32/DOS name.
+ (check_directories_in_var): New function.
+ (handle_subdirs): Call check_directories_in_var. Doing so also
+ suppress the restriction that SUBDIRS should not contain slashes.
+ (scan_autoconf_traces) <AC_CONFIG_AUX_DIR>: Call check_directory
+ to ensure the argument exists and is safe.
+ * doc/automake.texi (Top level): Do not say that src/subdir
+ cannot be put in SUBDIRS.
+ (Dist): Mention that distdir and top_distdir can be absolute.
+ * lib/Automake/Variable.pm (_do_recursive_traversal) Support
+ undefined $fun_collect, and fix two bugs introduced with
+ skip_ac_subst on 2004-03-07.
+ * lib/am/distdir.am (distdir): Use absolute distdir and
+ top_distdir when recursing, because we can no longer prepend only
+ `..' in case of SUBDIRS with `/'.
+ * tests/auxdir4.test, tests/subdir9.test: New files.
+ * tests/Makefile.am (TESTS): Add auxdir4.test.
+ * tests/cond2.test, tests/subdir7.test: Augment to check location
+ in diagnostics.
+
+2004-05-21 Eric Blake <ebb9@byu.net> (tiny changes)
+
+ * tests/txinfo22.test (AC_CONFIG_AUX_DIR): Use aux1, not aux, for
+ cygwin compatibility.
+ * tests/yacc6.test (AC_CONFIG_AUX_DIR): Likewise.
+
+ * tests/conflnk3.test: Isolate checking for working `test -e' into
+ a subshell, to skip this test on broken /bin/sh of solaris.
+
+2004-05-17 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * m4/cond.m4 (AM_CONDITIONAL): Double-quote diagnostic.
+ * tests/condd.test: Define a macro with the same name as a
+ conditional.
+ * tests/pr220.test: Modernize, and make sure the diagnostics
+ contains the macro name.
+ Report from Volker Boerchers.
+
+2004-05-16 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/texinfo.tex: New upstream version.
+
+2004-05-15 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (handle_dist): Always define DIST_SUBDIRS, even when
+ the no-dist or cygnus options are used.
+ * tests/clean2.test: New file.
+ * tests/Makefile.am (TESTS): Add clean2.test.
+ Report from Daniel Jacobowitz.
+
+ * aclocal.in (add_macro): Do not error out on undefined required
+ macros. We are not sure they are really used, and Autoconf
+ already diagnoses them.
+ (scan_configure_dep): Diagnose missing AM_ macros as warnings rather
+ than errors.
+ * tests/aclocal3.test, tests/ammissing.test: Adjust to expect a
+ warning instead of an error.
+ * tests/aclocal8.test: AC_REQUIRE an undefined macro in an unused
+ macro, and ensure aclocal works anyway.
+ * tests/acloca17.test: New file.
+ * tests/error.test: Delete, superseded by tests/acloca17.test.
+ * tests/Makefile.am (TESTS): Add acloca17.test and remove error.test.
+ Report from Jim Meyering.
+
+ * lib/am/texibuild.am (?!GENERIC_INFO?%DEST_INFO_PREFIX%%DEST_SUFFIX%):
+ Fold a few lines to reduce the output by 5 lines.
+ Suggested by Karl Berry.
+
+ * automake.in (parse_arguments, MAIN): Give more precise
+ diagnostics when no input file is found.
+ * tests/output5.test: Adjust.
+ Suggested by Jens Petersen.
+
+2004-05-14 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/am/libs.am (AR, ARFLAGS): Move these definition ...
+ * automake.in (handle_libraries): ... here, so that they are
+ output even for EXTRA_LIBRARIES.
+ * tests/ar2.test: New file.
+ * tests/Makefile.am (TESTS): Add it.
+ Report from Kevin Ryde.
+
+2004-05-13 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (generate_makefile): Do not output Makefile.in on
+ errors.
+ * tests/werror2.test: New file.
+ * tests/Makefile.am (TESTS): Add werror2.test.
+ * tests/substtarg.test, tests/cond36.test, tests/backsl4.test:
+ Adjust to run automake with -Wno-error when the output is expected
+ in spite of the error.
+ Report from Harlan Stenn.
+
+ * doc/automake.texi (Program and Library Variables): Remove
+ doubled word in footnote.
+
+ * automake.in (handle_source_transform): Also check for a
+ $(srcdir)/old_source rule when computing the default source name.
+ Propagate this $(srcdir) prefix in Automake variables.
+ * tests/ltlibsrc.test (noinst_LTLIBRARIES): Explicitly refer to
+ $(srcdir)/zoo_d_old2_la.c. This fixes another failure with BSD Make.
+
+2004-05-13 Paul Eggert <eggert@cs.ucla.edu>
+
+ * Makefile.am (fetch): Work even with FreeBSD "make", which
+ uses sh -e and thus errors-out if a simple-command fails.
+ * lib/am/check.am (check-TESTS): Likewise.
+ * lib/am/ltlib.am (clean-%DIR%LTLIBRARIES): Likewise.
+ * lib/am/tags.am (TAGS): Likewise.
+
+2004-05-13 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * tests/lex3.test, tests/yacc6.test: Require GNU Make.
+ Fixing these for BSD Make requires invasive changes (lexers and
+ parsers must be built into $srcdir, and--most annoyingly--all
+ references to parse.h must be changed to $(srcdir)/parse.h).
+ Report from Mark D. Baushke.
+
+2004-05-10 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * tests/defs.in (GNUmake): Grep for GNU to parry FreeBSD make.
+ Report from Mark D. Baushke.
+
+2004-04-25 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/texinfo.tex: New upstream version.
+
+ * lib/depcomp (tru64): Clarify comments. Thanks to Nicolas Joly.
+
+ * doc/automake.texi (Headers): Revamp.
+
+2004-04-24 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (check_typos): Clarify the diagnostic.
+ * tests/warnopts.test: Adjust.
+
+ * lib/Automake/VarDef.pm (append): Turn VAR_ASIS variables into
+ VAR_PRETTY variables to work around make implementation with
+ limited line length, such as OSF1/Tru64 make.
+ * tests/longline.test: New file.
+ * tests/Makefile.am (TESTS): Add it.
+ * tests/pluseq3.test, tests/pluseq8.test: Adjust.
+ Report from Simon Josefsson.
+
+ * lib/am/tags.am (TAGS): Pass `.' to Exuberant Ctags if
+ --etags-include is used but no other files are supplied, so it
+ creates the TAGS file anyway.
+ Report from Akim Demaille.
+
+ * lib/depcomp (tru64) [libtool]: Nicolas Joly reported on
+ 2002-06-12 that dependencies were output in $dir.libs/$base.lo.d.
+ Teun Burgers reported on 2004-03-30 they were in
+ $dir.libs/$base.o.d. Try both.
+
+2004-04-23 Alexandre Duret-Lutz <adl@gnu.org>
+
+ For PR automake/414:
+ Introduce option filename-length-max=99.
+ * doc/automake.texi (Options): Document it.
+ * configure.ac (AM_INIT_AUTOMAKE): Use it.
+ * lib/Automake/Options.pm (_process_option_list): Recognize it.
+ * automake.in (handle_dist): Set FILENAME_FILTER.
+ * lib/am/distdir.am (distdir) [FILENAME_FILTER]: Diagnose long
+ filenames.
+ * tests/fn99.test: New file.
+ * tests/Makefile.am (TESTS): Add fn99.test.
+
+2004-04-20 Alexandre Duret-Lutz <adl@gnu.org>
+
+ For PR automake/414:
+ Introduce options tar-v7, tar-ustar, and tar-pax to select
+ tar format.
+ * doc/automake.texi (Options): Document them.
+ * lib/Automake/Options.pm (_process_option_list): Process
+ these new options.
+ * lib/am/distdir.am (dist-gzip, dist-bzip2, dist-tarZ, dist,
+ distcheck): Adjust to use am__tar and am__untar.
+ * m4/tar.m4: New file.
+ * m4/Makefile.am (dist_m4data_DATA): Add tar.m4.
+ * m4/init.m4 (AM_INIT_AUTOMAKE): Support the new options
+ and call _AM_PROG_TAR.
+ * tests/tar.test, tests/tar2.test, tests/tar3.test: New files.
+ * tests/Makefile.am (TESTS): Add them.
+
+2004-04-18 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/am/distdir.am (distcheck): Typo in shar decompression.
+
+ * lib/config.guess, lib/config.sub, lib/texinfo.tex: New upstream
+ versions.
+
+2004-04-17 Alexandre Duret-Lutz <adl@gnu.org>
+
+ Fix PR automake/49:
+ * automake.in (scan_autoconf_traces) <AC_CONFIG_AUX_DIR>: Diagnose
+ calls to AC_CONFIG_AUX_DIR followings calls to AM_INIT_AUTOMAKE.
+ * tests/auxdir.test, tests/auxdir2.test, tests/lex5.test,
+ tests/mdate3.test, tests/multlib.test, tests/reqd2.test,
+ tests/symlink.test, tests/txinfo8.test, tests/txinfo22.test,
+ tests/yacc6.test, tests/yacc8.test: Fix to call AC_CONFIG_AUX_DIR
+ before AM_INIT_AUTOMAKE.
+ * tests/auxdir3.test: New file (exercise this diagnostic).
+ * tests/Makefile.am (TESTS): Add auxdir3.test.
+
+2004-04-15 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * aclocal.in (%map_traced_defs): New variable.
+ (scan_m4_files): Normalize filenames.
+ (trace_used_macros): Trace for AC_DEFUN and AU_DEFUN, also
+ ask for the filename and the first argument. Populate
+ %map_traced_defs.
+ (write_aclocal): Use $map_traced_defs to filter out unused
+ definitions.
+ * tests/acloca16.test: New file.
+ * tests/Makefile.am (TESTS): Add acloca16.test.
+
+2004-04-12 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in ($automake_needs_to_reprocess_all_files): Remove.
+ ($automake_will_process_aux_dir): New variable.
+ (scan_autoconf_traces): Reorder @input_files so that the Makefile
+ that distributes aux files is processed last. This way we do not
+ have to process all files twice using
+ $automake_will_process_aux_dir.
+ (require_file_internal): Suggest a full run of automake when
+ appropriate.
+ (MAIN): Remove the loop on $automake_needs_to_reprocess_all_files.
+ * tests/distcom7.test: New file.
+ * tests/reqd2.test: Do not check for the "running more than two"
+ message.
+ * tests/Makefile.am (TESTS): Add distcom7.test.
+
+ * automake.in (@config_aux_path, $config_aux_dir): Rename as ...
+ ($config_aux_dir, $am_config_aux_dir): ... these.
+ ($config_aux_dir_set_in_configure_in): Rename as ...
+ ($config_aux_dir_set_in_configure_ac): ... this.
+ (%require_file_found): Rename as ...
+ (%required_file_not_found): ... this.
+ (handle_languages, handle_texinfo_helper, handle_dist,
+ handle_configure, handle_emacs_lisp, handle_python,
+ scan_autoconf_traces, yacc_lex_finish_helper): Adjust to new names.
+ (scan_autoconf_traces): Call locate_aux_dir.
+ (locate_aux_dir): New function.
+ (@require_file_paths): Remove, not used anymore.
+ (require_file_internal): Look files in only one directory (instead
+ of @require_file_internal) passed in argument.
+ (require_file, require_conf_file): Pass the destination directory
+ to require_file_internal.
+
+ Fix for PR automake/416:
+ * m4/depend.m4 (_AM_DEPENDENCIES): Catch `not supported' ICC 8.0
+ remarks.
+ From Peter Seiderer.
+
+2004-04-10 Andreas Buening <andreas.buening@nexgo.de>
+
+ * aclocal.in, automake.in, configure.ac, Makefile.am,
+ tests/aclocal.in, tests/automake.in, tests/defs.in:
+ Use PATH_SEPARATOR from autoconf instead of ':'.
+
+2004-04-09 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (handle_lib_objects): Pass the condition of
+ the variable definition to handle_LIBOBJS and handle_ALLOCA,
+ not the aggregated conditions.
+ * tests/Makefile.am (TESTS): Add libobj14.test.
+ * tests/libobj14.test: New file.
+ Report from Bill Davidson.
+
+2004-04-02 Mike Nolta <mike@nolta.net>
+
+ Better support for Fortran 9x.
+ * automake.in: Add "fc" and "ppfc" languages for Fortran 9x.
+ * doc/automake.texi (Fortran 9x Support): New section.
+ * lib/Automake/Variable.pm (%_ac_macro_for_var): Add AC_PROG_FC.
+ * tests/compile_f90_c_cxx.test: New file.
+ * tests/ext.test: Add AC_PROG_FC.
+ * tests/f90only.test: New file.
+ * tests/link_f90_only.test: New file.
+ * tests/Makefile.am (TESTS): Add new tests.
+
+2004-04-01 Paul Eggert <eggert@twinsun.com>
+
+ * lib/install-sh: If "mv -f" works, use it, and fall back to
+ the old "test -f" + "rm -f" + "mv" method only if "mv -f" does
+ not work. This improves performance in the usual case where
+ "mv -f" works. It also lets us install the "mv" command
+ without worrying about a small window where "mv" does not
+ exist (this problem was reported by Raul Nunez de Arenas
+ Coronado).
+
+2004-03-26 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * m4/python.m4 (AM_PATH_PYTHON): Make sure am_display_PYTHON is
+ set when $PYTHON has been set by the user.
+ From Esben Haabendal Soerensen.
+
+2004-03-22 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/automake.texi (Default _SOURCES): Typo.
+ (true): Correct _'s placement in example.
+ Report from Stepan Kasal.
+
+2004-03-19 Alexandre Duret-Lutz <adl@gnu.org>
+
+ Overriding JAVAROOT is legitimate, do not warn about it.
+ * lib/Automake/Variable.pm (%_silent_variable_override): Add JAVAROOT.
+ * tests/java2.test: Run automake without -Wno-override.
+ Report from Simon Josefsson.
+
+2004-03-14 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (handle_texinfo_helper): Typos in comment.
+
+2004-03-07 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/config.guess: New upstream version.
+
+ Fix for PR automake/285:
+ * automake.in (handle_ltlibraries): Keep track of installation
+ directories for each condition, then define a $(am_TARGET_rpath)
+ variable to hold the -rpath flags of Libtool libraries conditionally
+ installed in different directories.
+ * lib/Automake/DisjConditions.pm (merge): New function.
+ * tests/libtool6.test: Adjust.
+ * tests/libtool8.test: New file.
+ * tests/Makefile.am (TEST): Add libtool8.test.
+
+ * lib/Automake/Variable.pm (traverse_recursively,
+ _do_recursive_traversal): Honor the skip_ac_subst option.
+ * automake.in (handle_dist): Use skip_ac_subst.
+
+2004-02-29 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * Makefile.am (cvs-release): Upload to ~ftp/pub/automake, not
+ ~ftp/automake.
+ * lib/gnupload (Example): Update example.
+
+ * lib/config-ml.in, lib/config.guess, lib/config.sub,
+ lib/texinfo.tex: New upstream versions.
+
+ * m4/depend.m4 (_AM_DEPENDENCIES): Use `touch' rather than `: >'
+ to create numbered dependencies. This fixes a portability issue
+ when CONFIG_SHELL is forced to /bin/sh on Solaris 8.
+ Reported by Mark Phillips.
+
+ * automake.in (lang_yacc_target_hook): Use Automake::Rule::define
+ so that rules for the same headers are not output twice.
+ * lib/Automake/Variable.pm (value_as_list_recursive): Do not
+ call `return' inside `map'.
+ * tests/cond30.test: Make sure `a.c' and `b.c' both appear
+ in the Makefile.in.
+ * tests/cond35.test, tests/cond36.test: New files.
+ * tests/Makefile.am (TESTS): Add cond35.test and cond36.test.
+ Report from Roman Fietze.
+
+ Fix for PR/413:
+ * lib/am/distdir.am (distcheck): Create $dc_destdir with `umask
+ 077 && mkdir' instead of `$(mkdir_p)'. This prevents possible
+ symlink attacks reported by Stefan Nordhausen.
+
+2004-02-16 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/automake.texi (Multiple Outputs): More text, based on
+ comments from Eric Siegerman, Tim Van Holder, and Oren Ben-Kiki.
+
+2004-02-15 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * m4/mkdirp.m4: Use `mkdir -p' only with GNU mkdir, because
+ Solaris 8's mkdir is not thread-safe.
+ * lib/mkinstalldirs: Likewise.
+ * lib/install-sh: Abort when mkdir fails to create a directory.
+ Report from Nathanael Nerode.
+
+2004-02-07 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * aclocal.in (rel2abs): New function.
+ (scan_configure_dep): Use rel2abs instead of File::Spec->rel2abs,
+ the later does was introduced in Perl 5.6 so using it breaks with
+ Perl 5.005.
+ Report from Werner John.
+
+2004-02-03 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/automake.texi (Future of aclocal): Make clearer that
+ it's ok to install macros into /usr/share/aclocal/.
+
+2004-02-01 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * tests/lisp.test: Delete (pointless).
+ * tests/Makefile.am (TESTS): Remove lisp.test.
+
+ * lib/Automake/Variable.pm (transform_variable_recursively):
+ Define rewritten variables in all conditions not *covered* by user
+ definitions, not simply in conditions without a previous
+ definition.
+ * tests/cond34.test: New file.
+ * tests/Makefile.am (TESTS): Add cond34.test.
+ Report from Elena A. Vengerova
+
+ * doc/automake.texi (Multiple Outputs): Typo.
+
+ * doc/automake.texi (Emacs Lisp): Typos.
+
+ Support for conditional _LISP.
+ * automake.in (handle_emacs_lisp): Define $(ELCFILES) from LISP, not
+ from $(am__ELCFILES).
+ * lib/am/lisp.am (elc-stamp): Use $(LISP) instead of $(am__ELFILES).
+ * tests/lisp6.test: New file.
+ * tests/Makefile.am (TESTS): Add it.
+
+ * automake.in (handle_emacs_lisp): Define $(ELCFILES) as
+ $(am__ELCFILES), and always push it on @all. Do not mention
+ elc-stamp.
+ * lib/am/lisp.am (.el.elc): Rewrite as ...
+ ($(am__ELCFILES)): ... this, and depend on elc-stamp.
+ (elc-stamp): Make sure elc-stamp is older that all .elc files, as
+ explained in the manual entry below.
+
+ * doc/automake.texi (Multiple Outputs): New node.
+
+2004-01-31 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * m4/regex.m4: Do not AC_SUBST(LIBOBJS), and quote most arguments.
+ * tests/regex.test: New file.
+ * tests/Makefile.am (TESTS): Add regex.test.
+
+2004-01-28 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * Makefile.am (maintainer-check): Check for unquoted $(DESTDIR) uses.
+ * lib/am/data.am, lib/am/distdir.am, lib/am/java.am, lib/am/libs.am,
+ lib/am/lisp.am, lib/am/ltlib.am, lib/am/mans.am, lib/am/progs.am,
+ lib/am/python.am, lib/am/scripts.am, lib/am/texinfos.am: Quote
+ installation paths in install, uninstall, and installcheck rules,
+ as well as in am__installdirs variables. This is for the sake
+ of paths containing spaces.
+ * lib/am/install.am (installdirs-am, installdirs): Do not try
+ to create "" directories.
+ * test/instspc.test: New file.
+ * test/Makefile.am (TESTS): Add instspc.test.
+ Report from James Amundson.
+
+ * doc/automake.texi (Not Enough, Third-Party Makefiles): New nodes.
+ (Extending): Make it a subsection of Not Enough.
+
+ * lib/gnupload (GPG): Use an absolute path. Suggestion from Gary
+ V. Vaughan.
+ (passphrase): Unset it this variable before using it, in case it
+ was exported. Report from Scott James Remnant.
+
+2004-01-25 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/gnupload (usage): Fix example.
+ * Makefile.am (cvs-release): Fix call to gnupload.
+ From Jim Meyering.
+
+2004-01-24 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/gnupload: New script.
+ * lib/Makefile.am (EXTRA_DIST): Distribute gnupload.
+ * Makefile.am (cvs-release): New target.
+
+2004-01-23 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/am/python.am (uninstall-%DIR%PYTHON): Remove extra `;'s.
+ Fix python10.test.
+
+ * m4/depout.m4 (_AM_OUTPUT_DEPENDENCY_COMMANDS): Use `s/xx//p'
+ instead of `/xx/ s///p'; the latter fails when GNU sed is run with
+ POSIXLY_CORRECT. Also strip superfluous -e.
+ Report from Miloslav Trmac.
+
+2004-01-22 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * tests/lex5.test: Sleep before calling AUTOMAKE the second time,
+ this fixes a spurious failure reported by Andreas Schwab. Also
+ make sure ylwrap is not installed unless needed, and exercise
+ --no-force.
+
+2004-01-20 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> (tiny change)
+
+ * doc/automake.texi (Dist): Document limitations of distcheck-hook
+ and DISTCHECK_CONFIGURE_FLAGS with regard to subdirs and
+ subpackages.
+
+2004-01-20 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/automake.texi (Upgrading): New node.
+
+2004-01-20 Gary V. Vaughan <gary@gnu.org>
+
+ * automake.in (scan_autoconf_traces): AC_LIBTOOL_TAGS can be
+ correctly called without arguments as evidenced by the libtool
+ demo directories.
+
+2004-01-13 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * tests/conflnk3.test: Skip if `test -e' does not work.
+ Report from Lars Hecking.
+
+2004-01-13 Jim Meyering <jim@meyering.net>
+
+ * lib/install-sh: Change `\n \t' to `\n\t ' in `defaultIFS'
+ assignment. Remove spurious SPACEs before TABs.
+
+2004-01-12 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/py-compile: Check input files after option processing.
+ Ensure --basedir has an argument.
+ * lib/am/python.am (install-%DIR%PYTHON): Do not run py-compile
+ if nothing was installed.
+ * tests/python10.test: New file.
+ * tests/Makefile.am (TESTS): Add python10.test.
+ Suggested by Sander Niemeijer.
+
+ * tests/txinfo29.test: Remove autom4te.cache.
+ Report from Greg Schafer.
+
+ * lib/install-sh: Do not use "$@" in a context where it may be empty,
+ for the sake of OSF1/Tru64's shell.
+ Report from He Li.
+
+2004-01-11 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/config.sub, lib/config.guess, lib/texinfo.tex: New upstream
+ versions.
+
+ * m4/as.m4, m4/depend.m4, m4/maintainer.m4, m4/multi.m4: Update
+ copyright years and serial.
+
+ * m4/python.m4 (_AM_PYTHON_INTERPRETER_LIST): Add python2.4.
+
+2004-01-10 Peter Eisentraut <peter_e@gmx.net> (tiny change)
+
+ * m4/as.m4 (AM_PROG_AS): Format and align help string more
+ consistently.
+ * m4/depend.m4 (AM_DEP_TRACK): Likewise.
+ * m4/lispdir.m4 (AM_PATH_LISPDIR): Likewise.
+ * m4/maintainer.m4 (AM_MAINTAINER_MODE): Likewise.
+ * m4/multi.m4 (AM_ENABLE_MULTILIB): Likewise.
+
+2004-01-10 Paul Eggert <eggert@twinsun.com>
+
+ * m4/lispdir.m4 (AM_PATH_LISPDIR): Don't use \? in sed regular
+ expressions; it doesn't conform to POSIX.
+
+2004-01-10 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (shadow_unconditionally): New function...
+ (handle_source_transform): ... extracted from here.
+ (am_install_var): Use shadow_unconditionally to define %DISTVAR%.
+ * lib/am/data.am, lib/am/java.am, lib/am/lisp.am, lib/am/python.am,
+ lib/am/script.am: Add %DISTVAR% to DIST_COMMON.
+ * tests/cond33.test: Make sure all conditional files are distributed.
+ Report from Ralf Corsepius.
+
+2004-01-08 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * m4/mkdirp.m4 (AM_PROG_MKDIR_P): Append `.' to $(mkdir_p).
+ * lib/install-sh: Accept `install-sh -d' with 0..n arguments,
+ as well as `install-sh sources... dest' with multiple sources.
+ * tests/cond33.test: New file.
+ * tests/instsh2.test: Add more checks for install-sh.
+ * tests/transform.test: Test for installdirs.
+ * tests/Makefile.am (TESTS): Add cond33.test
+ Report from Ralf Corsepius.
+
+ * automake.in (handle_configure): Skip AC_CONFIG_LINKS items which
+ do not look like DEST:SRC.
+ * tests/conflnk3.test: Check for AC_CONFIG_LINKS($computed).
+
+2004-01-07 Alexandre Duret-Lutz <adl@gnu.org>
+
+ Fix for PR automake/289:
+ * automake.in (Automake::Struct::libtool_tag): New attribute. Define
+ it for the language that have a Libtool tag.
+ (%libtool_tags): New variable.
+ (handle_languages, define_compiler_variable)
+ (define_linker_variable): Pass --tag=XXX to libtool if supported.
+ (scan_autoconf_traces): Scan for _LT_AC_TAGCONFIG and AC_LIBTOOL_TAGS.
+ * tests/libtool3.test, tests/subobj9.test: Check that --tag=XXX is
+ output.
+
+2003-01-07 Eric Sunshine <sunshine@sunshineco.com> (tiny change)
+
+ * lib/am/configure.am (am__CONFIG_DISTCLEAN_FILES): Add
+ config.status.lineno.
+
+2004-01-07 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> (tiny change)
+
+ * doc/automake.texi (Rebuilding): Typo.
+
+2004-01-07 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/am/Makefile.am (dist_am_DATA): Really add inst-vars.am.
+
+2004-01-06 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * THANKS: Add Bruce Korb.
+
+2004-01-05 Alexandre Duret-Lutz <adl@gnu.org>
+
+ Mimic Paul Eggert's changes to Autoconf.
+ * Makefile.am (automake, aclocal): Use `chmod a-w', not `chmod -w'.
+ * lib/Automake/Makefile.am (Config.pm): Likewise.
+ * m4/Makefile.am ($(top_srcdir)/m4/amversion.m4): Likewise.
+
+ * lib/am/inst-vars.am: New file, define am__vpath_adj_setup,
+ am__vpath_adj, and am__strip_dir.
+ * lib/am/Makefile.am (dist_am_DATA): Add inst-vars.am.
+ * lib/am/data.am, lib/am/lisp.am, lib/am/python.am,
+ lib/am/scripts.am: Include inst-vars.am, and use $(am__vpath_adj),
+ $(am__vpath_adj_setup), and $(am__strip_dir) in install and
+ uninstall rules. This fixes installation of nobase_ files in
+ VPATH setups with Sun and OSF1/Tru64 Make.
+ * lib/am/libs.am, lib/am/ltlib.am: Include inst-vars.am, and use
+ $(am__strip_dir) to simplify install and uninstall rules.
+ * tests/nobase.test: Augment to check installation from VPATH builds.
+
+ * automake.in (%transformed_files): New variable.
+ (initialize_per_input): Reset it.
+ (make_paragraphs): Fill %transformed_files, and define %FIRST%
+ each time a file is transformed for the first time.
+ (handle_configure): Do not define %FIRST_CONFIG_HIN%.
+ (am_install_var): Do not define %FIRST%.
+ * lib/am/remake-hdr.am: Use %?FIRST% instead of %?FIRST_CONFIG_HIN%.
+
+2004-01-04 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/texinfo.tex: New upstream version.
+
+ * m4/mkdirp.m4: Do not use `-m 0755'. This overrides special bits
+ and break setups where 775 directories are expected. Just obey
+ umask as we did in the past.
+ Report from Harlan Stenn.
+
+2004-01-03 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (scan_texinfo_file): Do not compare $outfile to ''
+ as $outfile might not be defined at all.
+
+ * lib/Automake/Variable.pm (define): Rework the way we check
+ Automake variable definition. Ensure consistent :=/+=/=
+ definitions only for variables that have been and are defined by
+ Automake, and make it an internal error. Ignore Automake
+ attempts to touch a user variable, even with += assignments.
+ * tests/txinfo29.test: New file.
+ * tests/Makefile.am (TESTS): Add txinfo29.test.
+ Reported by Bruce Korb.
+
+2004-01-02 Tom Tromey <tromey@redhat.com>
+
+ * automake.in (handle_source_transform): Don't generate dist
+ variables when no-dist is set.
+ (generate_makefile): Likewise.
+ * tests/nodist3.test: Ensure that DIST_SOURCES is not created,
+ and that dist target does not exist.
+ Reported by Tom Fitzsimmons.
+
+2004-01-02 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * tests/libtool5.test, tests/ltcond.test, tests/ltcond2.test,
+ * tests/ltconv.test: Run automake with --add-missing, because
+ the CVS version of libtoolize no longer install config.sub and
+ config.guess by default.
+
+ Fix for PR automake/319:
+ * aclocal.in (scan_m4_files): Scan configure.ac.
+ (trace_used_macros, write_aclocal): Remove configure.ac from the
+ list of files to include.
+ * tests/Makefile.am (TESTS): Add acloca15.test.
+ * tests/acloca15.test: New file.
+
+ * aclocal.in (%file_includes): New variable.
+ (scan_configure_dep): Compile $m4_include_rx and $ac_require_rx once.
+ (scan_file): Scan for included files, and process these files
+ recursively. Fill %file_includes and %file_contents. Return the
+ list of included files, not the contents.
+ (scan_m4_files): Adjust calls to scan_files.
+ (strip_redundant_includes): New function.
+ (trace_used_macros): Call it.
+ (write_aclocal): Likewise. Also check the mtime of included files.
+ * tests/Makefile.am (TESTS): Add acloca14.test.
+ * tests/acloca14.test: New file.
+ Report from Phil Edwards.
+
+2004-01-01 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (handle_languages): Do not define DEP_FILES.
+ * m4/depout.m4 (_AM_OUTPUT_DEPENDENCY_COMMANDS): Extract included
+ files with $(DEPDIR) in their name instead of DEP_FILES.
+ * tests/depend.test, tests/depend4.test, tests/exsource.test:
+ Adjust.
+ Suggested by Tom Tromey.
+
+ Do not output .lo rules for programs and static libraries objects,
+ and do not output .o/.obj rules for libtool libraries. This is
+ about explicit rules only, not inference rules.
+ * automake.in (handle_single_transform_list): Rename as ...
+ (handle_single_transform): ... this. Take a single file
+ to transform (it was only called this way) and accept a new
+ %transform argument. Fill %lang_specific_files with list
+ references instead of strings, and append %transform to each
+ of these lists.
+ (define_objects_from_sources, handle_source_transform):
+ Take a %transform argument, and forward it to &handle_single_transform.
+ (handle_languages): Adjust to the new format of
+ %lang_specific_files, and honor its %transform part.
+ (handle_programs, handle_libraries, handle_ltlibraries): Override
+ %NONLIBTOOL% and %LIBTOOL% while calling handle_source_transform.
+ (make_paragraphs): Define %NONLIBTOOL% by default. Make sure
+ %transform settings override global settings.
+ * lib/am/depend2.am (%OBJ%, %OBJOBJ%): Define only if %NONLIBTOOL%.
+ * tests/libtool3.test: Augment to check Makefile.ins for unneeded
+ rules.
+ Suggested by Thomas Fitzsimmons.
+
+ * automake.in, aclocal.in: Bump copyright years.
+
+-----
+
+Copyright (C) 2004-2017 Free Software Foundation, Inc.
+
+Copying and distribution of this file, with or without modification, are
+permitted provided the copyright notice and this notice are preserved.
+
+;; Variables:
+;; coding: utf-8
+;; End:
diff --git a/old/ChangeLog.09 b/old/ChangeLog.09
new file mode 100644
index 000000000..601550d85
--- /dev/null
+++ b/old/ChangeLog.09
@@ -0,0 +1,5767 @@
+2009-12-29 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix and complete copyright notices in Makefile.am files.
+ * Makefile.am: Use single-`#' comment for copyright notice, so
+ that it also appears in the generated Makefile.in file.
+ * doc/Makefile.am: Likewise.
+ * doc/amhello/Makefile.am: Likewise.
+ * doc/amhello/src/Makefile.am: Likewise.
+ * lib/Automake/Makefile.am: Likewise.
+ * lib/Automake/tests/Makefile.am: Likewise.
+ * lib/Makefile.am: Likewise.
+ * lib/am/Makefile.am: Likewise.
+ * m4/Makefile.am: Likewise.
+ * tests/Makefile.am: Add copyright notice.
+ Report of missing copyright notice by Stefano Lattarini.
+
+2009-12-27 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Fixed typo in Makefile.am (extra semicolon removed)
+ * Makefile.am (sc_diff_automake_in_automake): Removed an extra
+ semicolon in target's rules, which prevented a stdout redirection
+ from working.
+
+2009-12-21 Julien Danjou <julien@danjou.info> (tiny change)
+
+ Add support for newer python version
+ * m4/python.m4 (AM_PATH_PYTHON): Add python3.1 to
+ _AM_PYTHON_INTERPRETER_LIST.
+
+2009-12-21 Karl Berry <karl@freefriends.org>
+
+ mention ncftpput in gnupload --help
+ * lib/gnupload: Mention ncftpput in `--help' output.
+ Report by Bruce Korb.
+
+2009-12-06 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * NEWS: Update.
+
+2009-12-05 Antonio Diaz Diaz <ant_diaz@teleline.es>
+
+ Replace unlzma, gunzip, bunzip2 with pack tool -d invocation.
+ * lib/am/distdir.am (distcheck): Use lzma -d, gzip -d, bzip2 -d,
+ instead of the respective un$tool invocation, to avoid depending
+ on another tool.
+ * THANKS: Update.
+
+2009-12-05 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Use $DJDIR rather than $DJGPP to detect running on DJGPP.
+ * automake.in (Language): Use $ENV{'DJDIR'} for the
+ $ENV{'SHELL'} override.
+ * bootstrap: Use $DJDIR for setting BOOTSTRAP_SHELL, to fix
+ bootstrapping under MinGW when $DJGPP has been set.
+
+ Do not rely on Perl symlink status, for MSYS perl.
+ * automake.in (require_file_internal): Ensure presence of
+ symlink target file; MSYS perl symlink doesn't return an error
+ status when the file could not be created (copied, on this
+ system). Fixes symlink.test failure.
+
+2009-12-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Avoid Solaris sh `set -e' bug in vala4.test.
+ * tests/vala4.test: New variable $cwd, holding the full path of the
+ current directory. Use it instead of `pwd` command substitution,
+ to avoid Heirloom/Solaris Sh bug with `set -e'.
+
+2009-12-05 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix requirements of silent8.test.
+ * tests/silent8.test: Require makeinfo --html, tex, texi2dvi -o,
+ dvips.
+
+2009-12-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ File `automake.in' is not meant to be executed (only to be
+ preprocessed into `automake'), so don't leave it executable.
+ * automake.in: Remove executable bit.
+
+2009-12-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Don't make the generated Automake's Config.pm executable.
+ * lib/Automake/Makefile.am (Config.pm): Don't make the generated
+ `Config.pm' file executable.
+
+2009-11-28 Jim Meyering <meyering@redhat.com>
+
+ do not put world-writable directories in distribution tarballs
+ * lib/am/distdir.am (distdir): Do not make all directories
+ group- or world-writable. Instead, use 755.
+ * tests/subpkg4.test (test-distdir-is-readable): Check for new,
+ more restricted permissions.
+
+2009-11-29 Karl Berry <karl@freefriends.org>
+
+ Rewrite `gnupload --help' examples.
+ * lib/gnupload: Use GNU style version numbers, a generic package
+ name, and more useful examples.
+
+2009-11-28 Jim Meyering <meyering@redhat.com>
+
+ avoid a warning from perl-5.11
+ * lib/Automake/Wrap.pm (_tab_length): Remove useless use of tr's
+ "/d" modifier.
+
+2009-11-14 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Distribute the Automake bootstrap script.
+ * Makefile.am (EXTRA_DIST): Add bootstrap.
+ Report by Jan Engelhardt.
+
+2009-11-14 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Coverage for corner cases in derive_suffix.
+ Ensure unrelatex SUFFIXES entries and unrelated inference rules
+ are ignored silently.
+ * tests/ext3.test: New test.
+ * tests/Makefile.am: Update.
+
+ Coverage for user-provided _LINK variables.
+ * tests/link_override.test: New test.
+ * tests/Makefile.am: Adjust.
+
+ Coverage: warn about substitutions that need EXTRA_PRIMARY.
+ * tests/extra9.test: New test.
+ * tests/Makefile.am: Adjust.
+
+ Coverage: warn about configure substitution in EXTRA_PRIMARY.
+ * tests/subst5.test: New test.
+ * tests/Makefile.am: Update.
+
+ Coverage for syntax errors with conditionals in included fragments.
+ * tests/condinc2.test: Amend test.
+
+ Coverage: diagnose variables with forbidden dist_ prefix.
+ * tests/candist.test: New test.
+ * tests/Makefile.am: Update.
+
+ Coverage for conditional `else' and `endif' arguments.
+ * tests/cond46.test: New test.
+ * tests/Makefile.am: Update.
+
+2009-10-31 Jim Meyering <meyering@redhat.com>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Don't let an envvar setting of "$fail" cause build failure.
+ Without this change, in a project using an automake-generated
+ Makefile, "make fail=anything" would fail inappropriately,
+ due to the `test -z "$$fail"' at the end of this emitted rule:
+ * lib/am/subdirs.am ($(RECURSIVE_TARGETS)): Initialize "fail=" to keep
+ an envvar setting of that variable from causing unwarranted failure.
+ ($(RECURSIVE_CLEAN_TARGETS)): Likewise.
+ * tests/subdir10.test: New test.
+ * tests/Makefile.am: Update.
+
+2009-10-18 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Simplify Variable::_check_ambiguous_condition.
+ * lib/Automake/Variable.pm (_check_ambiguous_condition): No need
+ to check for $def since ambiguous_p returns an empty $message if
+ there is no other condition which is ambiguous to $cond.
+
+ Coverage for DisjConditions.pm.
+ * lib/Automake/tests/DisjConditions.pl (test_basics): Increase
+ test coverage: test ->human, ->merge, ->simplify, ->multiply.
+ * lib/Automake/tests/DisjConditions-t.pl (test_basics): Likewise
+ changes, but including state copies across thread creation.
+ * lib/Automake/tests/DisjCon2.pl: New test.
+ * lib/Automake/tests/DisjCon3.pl: Likewise.
+ * lib/Automake/tests/Makefile.am (TESTS, XFAIL_TESTS): Adjust.
+
+ Coverage and fixes for Condition.pm.
+ * lib/Automake/Condition.pm (new): Catch common programming
+ errors better by checking type of passed argument before
+ munging them to all be strings through split.
+ * lib/Automake/tests/Condition.pl (test_basics): Also test
+ ->human.
+ (test_merge): New function, test ->merge, ->merge_conds,
+ ->strip.
+ * lib/Automake/tests/Condition-t.pl (test_basics, test_merge):
+ Likewise changes, but including state copies across thread
+ creation.
+ * lib/Automake/tests/Cond2.pl: New test for programming error.
+ * lib/Automake/tests/Cond3.pl: Likewise.
+ * lib/Automake/tests/Makefile.am (TESTS, XFAIL_TESTS): Update.
+
+ Coverage for Wrap.pm.
+ * lib/Automake/tests/Wrap.pl (@tests): Add test for word with
+ trailing space.
+ (test_makefile_wrap, @makefile_tests): New function, new list of
+ tests, to test makefile_wrap.
+
+ Coverage for Version.pm.
+ * lib/Automake/tests/Version.pl (test_version_compare): Also
+ try Automake::Version::check for the version pairs, taking into
+ account the special-case naming of code forks.
+ (@tests): Add more test cases.
+ (test_bad_versions, @bad_versions): New function, new test cases,
+ to ensure bad version strings are rejected.
+ * lib/Automake/tests/Version2.pl: New test.
+ * lib/Automake/tests/Version3.pl: Likewise.
+ * lib/Automake/tests/Makefile.am (TESTS): Add tests here ...
+ (XFAIL_TESTS): ... and here, new.
+
+ Pod coverage for Perl modules.
+ * lib/Automake/ChannelDefs.pm (parse_warnings): Fix
+ typo in Pod documentation.
+ * lib/Automake/Condition.pm: Add a couple of missing `=back'
+ lines.
+ (_has): Renamed from ...
+ (has): ... this, as this is an internal method.
+ (strip, false, true_when): Adjust callers.
+ * lib/Automake/Configure_ac.pm: Add Pod `Functions' section with
+ documentation for find_configure_ac and require_configure_ac.
+ * lib/Automake/Location.pm: Fix typo in Pod. Add `Methods'
+ section, document methods.
+ * lib/Automake/RuleDef.pm: New `Methods' Pod section.
+ * lib/Automake/VarDef.pm: Document `raw_value'.
+ * lib/Automake/Wrap.pm (_tab_length): Rename from ...
+ (tab_length): ... this, as this is an internal method.
+ (wrap): Adjust callers.
+ * lib/Automake/XFile.pm: Reorganize Pod a bit, add `Methods'
+ section.
+
+2009-10-17 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Perl coverage support using Devel::Cover.
+ This introduces makefile rules to run the testsuite with Perl
+ coverage enabled. It skips tests that use perl ithreads, by
+ unsetting AUTOMAKE_JOBS and setting WANT_NO_THREADS to make the
+ threaded tests skip.
+ * Makefile.am (PERL_COVERAGE_DB, PERL_COVERAGE_FLAGS)
+ (PERL_COVER): New variables.
+ (check-coverage, recheck-coverage, clean-coverage): New phony
+ targets.
+ (check-coverage-run, recheck-coverage-run): New phony helper
+ targets.
+ (clean-local): New, depend on clean-coverage.
+ * lib/Automake/tests/Condition-t.pl: Skip if WANT_NO_THREADS is
+ set.
+ * lib/Automake/tests/DisjConditions-t.pl: Likewise.
+ * tests/defs.in: New required entry 'perl-threads'.
+ * tests/parallel-am.test: Use it to skip if WANT_NO_THREADS is
+ set.
+ * tests/parallel-am2.test: Likewise.
+ * tests/parallel-am3.test: Likewise.
+
+ Add convenience `recheck' target to our toplevel Makefile.am.
+ * Makefile.am (recheck): New convenience target.
+ * tests/README: Give examples for running only failed or
+ outdated or otherwise selected tests.
+
+ dist: allow running several compressors in parallel.
+ * lib/am/distdir.am (am__post_remove_distdir): New internal
+ variable.
+ (DIST_TARGETS): New variable, set to list of chosen distribution
+ formats. Order formats by expected duration, slowest first, for
+ better parallelism.
+ (dist-gzip, dist-bzip2, dist-lzma, dist-xz, dist-tarZ)
+ (dist-shar, dist-zip): Use $(am__post_remove_distdir).
+ (dist, dist-all): Do not depend on distdir. Instead of
+ replicating each compression command, use a recursive invocation
+ to allow running all $(DIST_TARGETS) in parallel.
+ * NEWS: Update.
+ Report by Peter Breitenlohner.
+
+ Fix license headers of cscope tests to be GPLv2+.
+ * tests/cscope.test: Revert to GPL version 2.
+ * tests/cscope2.test: Likewise.
+ * tests/cscope3.test: Likewise.
+
+ Sync auxiliary files from upstream.
+ * INSTALL, lib/INSTALL, lib/config.guess, lib/config.sub,
+ lib/texinfo.tex: Sync from upstream.
+
+ Doc and comment typos.
+ * automake.in (handle_ltlibraries): Fix typo in comment.
+ * tests/distcom7.test: Likewise.
+ * tests/lisp5.test: Likewise.
+ * doc/automake.texi (Usage of Conditionals): Fix typo.
+
+2009-10-11 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix race condition in werror2.test due to sanity sleep change.
+ * tests/werror2.test: Generate Makefile.in before configure so
+ that a Makefile.am update after configure has run is guaranteed
+ to be newer than Makefile.in.
+ * tests/subdir5.test: Document why this test does not need to be
+ fixed.
+ * tests/subdir8.test: Likewise.
+
+ Improve description of the various *LINK variables.
+ * doc/automake.texi (Program and Library Variables): _LINK also
+ receives libraries to link against. _LINK may be generated.
+ (Program Variables): Document reasons when per-target _LINK is
+ used instead of LINK.
+ (How the Linker is Chosen): Document how a per-target _LINK
+ variable and per-target link flags override linker selection.
+ * THANKS: Update.
+ Report by Dave Korn against gcc/libstdc++-v3.
+
+ Allow variable override of, rather than by, silent variables.
+ When overriding variables, check the VAR_SILENT status of the
+ old condition, not the new one: we allow non-silent overrides
+ of silent variables (these do not hit ordering bugs in the
+ automake output), but there is no use case for doing so the
+ other way round. Fixes conditional overrides of variables
+ annotated AM_SUBST_NOTMAKE in configure.ac.
+ * lib/Automake/Variable.pm (_check_ambiguous_condition): Check
+ for VAR_SILENT in $ambig_cond not $cond.
+ * tests/cond44.test, tests/cond45.test: New tests, analogous to
+ cond23.test and cond24.test.
+ * tests/Makefile.am: Update.
+ Spotted originally in binutils/bfd.
+
+ Fix `make clean check' for the Automake package.
+ * lib/Automake/Makefile.am (SUBDIRS): Add `.' before `tests',
+ so that Config.pm is built first.
+
+ Fix in-tree `recheck' after failed test that runs `check'.
+ If a test like pr401b-p.test fails for some reason, a `make
+ recheck' would cause another reason for failure because it sets
+ AM_MAKEFLAGS which gets propagated into the test and causes its
+ `make check' to fail.
+ * tests/defs.in: Also unset AM_MAKEFLAGS.
+
+2009-10-11 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Updated code enabling Bourne-compatibility in test scripts.
+ * tests/defs.in: updated the code enabling Bourne-compatibility
+ mode in the shell (now it's copied from autoconf 2.64).
+
+ Avoid leaking TEST_LOG_COMPILER in environment of test scripts.
+ * tests/defs.in: Unset variable `TEST_LOG_COMPILER'.
+
+2009-10-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Testsuite: do not use `chmod -R' when cleaning up.
+ * tests/Makefile.am (clean-local-check): Do not use `chmod -R' on
+ the test directories, as that may change or try to change the mode
+ of installed files: the test directory may contain symlinks to
+ ltmain.sh files from a Libtool installation, and Solaris `chmod -R'
+ touches symlink targets. Instead, use the cleanup strategy used
+ in distdir.am (which is also employed in tests/defs.in).
+
+2009-10-06 Bruno Haible <bruno@clisp.org>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix 'compile' script to not call mv when target equals source.
+ * lib/compile: Don't attempt to move the generated file to its
+ target destination when it is already at the target destination.
+ Avoids an mv failure with subdir-objects.
+ * tests/ccnoco3.test: New test.
+ * tests/Makefile.am: Adjust.
+
+2009-10-01 Stefano Lattarini <stefano.lattarini@gmail.com> (tiny change)
+
+ Fix recommended way to run automake's test scripts with Zsh.
+ * tests/README (Supported shells): Changed the recommended way
+ to run automake's test scripts with Zsh. Now we tell to use
+ the Zsh's command line option `-o no_function_argzero', not
+ `--no-function-argzero', since the latter does not work with
+ versions 3.x of Zsh.
+
+2009-09-26 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fixups and tests for cscope functionality.
+ It seems cscope is not able to take into account relative
+ file names of included cscope.files files, but it is able to
+ canonicalize file names containing '../' sequences.
+ This patch makes the cscope references relative again, and
+ fixes some corner cases.
+ * NEWS: Reword a bit.
+ * THANKS: Update.
+ * automake.in (handle_tags): Use $(am__cd). Provide default
+ empty rule for the `cscope' target, for empty sources.
+ * lib/am/tags.am (cscopelist): Construct relative path to files
+ in $(srcdir) if $(srcdir) is relative.
+ [TOPDIR_P] (cscope): Do not depend on cscope-clean. Only invoke
+ $(CSCOPE) if cscope.files is nonemtpy.
+ (clean-cscope): Rename from ...
+ (cscopeclean): ... this.
+ (cscope.files): Depend on clean-cscope.
+ (distclean-tags) [!TOPDIR_P]: No need to remove cscope files
+ here.
+ * tests/cscope.test, tests/cscope2.test, tests/cscope3.test: New
+ tests.
+ * tests/Makefile.am: Adjust.
+
+2009-09-25 Debarshi Ray <rishi@gnu.org>
+
+ New target to generate cscope database.
+ * automake.in (handle_tags): Handle cscope.
+ * doc/automake.texi (Tags): Document cscope.
+ * lib/am/tags.am (CSCOPE): New macro.
+ [TOPDIR_P] (AM_RECURSIVE_TARGETS): Add cscope.
+ (cscope): New target.
+ (cscopeclean): Likewise.
+ (cscope.files): Likewise.
+ (cscopelist): Likewise.
+ (distclean-tags): Remove `cscope.out', `cscope.in.out',
+ `cscope.po.out' and `cscope.files'.
+ * NEWS: Update.
+ Based upon earlier patch from Jesse Barnes.
+
+2009-09-25 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Use silent-rules for building the Automake package.
+ * configure.ac (AM_INIT_AUTOMAKE): Add silent-rules option.
+ * Makefile.am (automake, aclocal, INSTALL): Add silencing
+ variables to recipe.
+ * doc/Makefile.am (update_mans, $(srcdir)/aclocal.1)
+ ($(srcdir)/automake.1, $(srcdir)/amhello-1.0.tar.gz): Likewise.
+ * lib/Automake/Makefile.am (Config.pm): Likewise.
+ * tests/Makefile.am ($(srcdir)/parallel-tests.am)
+ ($(parallel_tests), defs-p): Likewise.
+
+2009-09-25 Jack Kelly <endgame.dos@gmail.com>
+
+ Add silent rules support for texinfo outputs.
+ * automake.in (define_verbose_texinfo): Define several new verbose
+ tagvars and verbose vars.
+ (define_verbose_tagvar): Increase spacing to 8 to accommodate
+ MAKEINFO, TEXI2DVI, TEXI2PDF.
+ (handle_texinfo): Additional substitution for silencing dvips.
+ (output_texinfo_build_rules): Additional substitutions for
+ silencing texi2dvi and texi2pdf.
+ * lib/am/texibuild.am: Add silencing to makeinfo, makeinfo --html,
+ texi2dvi and texi2pdf rules.
+ * lib/am/texinfos.am: Add silencing to .dvi.ps rule.
+ * tests/Makefile.am: Add silent8.test.
+ * tests/silent8.test: New test: tests that silent texinfo rules
+ produce quiet messages.
+ * NEWS: Update.
+
+2009-09-18 Peter Johansson <trojkan@gmail.com> (tiny change)
+
+ Fix link to "Recursive Make Considered Harmful" paper.
+ * doc/automake.texi (Alternative): Fix broken URL.
+
+2009-09-11 Reuben Thomas <rrt@sc3d.org> (tiny patch)
+
+ Fix outdated reference to sh-utils in the manual.
+ * doc/automake.texi (Options): The reference to `sh-utils'
+ should be to `coreutils'.
+
+2009-09-06 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Avoid sleeping for one second most of the time in sanity check.
+ * m4/sanity.m4 (AM_SANITY_CHECK): Try sanity check first without
+ sleeping for a second, and only if that failed, sleep and try
+ again, to avoid the delay in the common case of a configure
+ script that is older than a second, or a system with sub-second
+ time stamp granularity.
+ Report and different patch by Jim Meyering.
+
+2009-09-06 Stefano Lattarini <stefano.lattarini@gmail.com> (tiny change)
+
+ tests/README: warn about zsh incompatibilities.
+ * tests/README (User interface, Getting details from failures):
+ Explicitly state that every test is a "shell script", not just
+ a "script", and that it's run by `/bin/sh' by default.
+ * tests/README (User interface, Supported shells): New subsection,
+ telling about expected portability of the automake test scripts,
+ describing a zsh incompatibility (w.r.t. $0), and a workaround to
+ it (with the `--no-function-argzero' option).
+
+ testsuite: fix a minor glitch.
+ * tests/defs.in (exit trap): Use `$me', not `$as_me', as the
+ name of the current test (used in error messages).
+ * THANKS: Update.
+
+2009-07-08 Jim Meyering <meyering@redhat.com>
+
+ manual: fix a trivial grammar error.
+ * doc/automake.texi (Invoking aclocal): Fix grammar.
+
+2009-06-07 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ AM_PROG_GCJ: use AC_CHECK_TOOLS for gcj, for cross compilation.
+ * m4/gcj.m4 (AM_PROG_GCJ): Use AC_CHECK_TOOLS, rather than
+ AC_CHECK_PROGS, when searching for `gcj'.
+ * NEWS: Update.
+ Report by Jack Kelly.
+
+2009-05-24 Jack Kelly <endgame.dos@gmail.com> (tiny change)
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ AM_PROG_GCJ currently fails to define OBJEXT and EXEEXT.
+ * tests/gcj6.test: New test.
+ * tests/Makefile.am: Update; mark gcj6.test as XFAIL.
+ * THANKS: Update.
+
+2009-05-24 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ parallel-tests: avoid GNU make 3.80 substitution bug.
+ * lib/am/check.am [PARALLEL_TESTS] (check-TESTS): Remove any
+ `.log' entries from `$(TEST_LOGS)' even if the list is nonempty,
+ to work around GNU make 3.80 substitution reference issue with
+ trailing white space in the variable.
+ * tests/parallel-tests10.test: New test.
+ * tests/parallel-tests6.test: Update comment.
+ * tests/Makefile.am: Update.
+ * NEWS: Update.
+ Report by Bob Friesenhahn.
+
+2009-05-23 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ testsuite: unset installation directory variables.
+ * tests/defs.in: Before test execution, be sure to unset all
+ installation directory variables, so they cannot have an effect
+ on a `make -e install' command within a test.
+ Report by Dagobert Michelsen.
+
+ testsuite: do not change the mode of installed Libtool files.
+ * tests/defs.in: Do not use `chmod -R' on the test directory, as
+ that may change or try to change the mode of installed files:
+ the test directory may contain symlinks to ltmain.sh files from
+ a Libtool installation, and Solaris `chmod -R' touches symlink
+ targets. Instead, use the cleanup strategy used in distdir.am.
+ * NEWS: Update.
+ Report by Dagobert Michelsen.
+
+ testsuite: do not fail in cleanup code.
+ * tests/defs.in: Turn off errexit in the cleanup trap, to avoid
+ a test failure due to a nonzero command.
+ * THANKS: Update.
+ Report by Dagobert Michelsen.
+
+2009-05-23 Peter O'Gorman <peter@pogma.com>
+
+ python: do not install in system directories on Darwin 9.
+ On Darwin 9, get_python_lib returns a path below `/Library/Python'
+ regardless of the `prefix' argument it was passed, causing `make
+ install' to target the system directories regardless of `--prefix'
+ argument used. Work around this Darwin bug by ignoring the result
+ of get_python_lib if it points outside of the passed prefix, and
+ the prefix was not a system directory.
+ * m4/python.m4 (AM_PATH_PYTHON): If the prefix does not match the
+ initial portion of the pythondir returned by get_python_lib, then
+ ignore it unless the configured prefix is `/usr' or starts with
+ `/System'. Fixes instmany-python.test failure on Mac OS X 10.5.7.
+ * NEWS: Update.
+
+2009-05-23 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Clarify how to enable `silent-rules' and other global options.
+ * doc/automake.texi (Options): When introducing options, be more
+ careful to note that not all of them can be specified in
+ AUTOMAKE_OPTIONS statements, and that some do not make sense in
+ subdirectories. Note more prominently that `silent-rules' can
+ only be specified in configure.ac.
+ * lib/Automake/Options.pm (_process_option_list): Improve error
+ message for `silent-rules', `tar-v7', `tar-ustar', `tar-pax'
+ options specified in Makefile.am files.
+ Report by Bruno Haible.
+
+2009-05-21 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Skip specflg10.test without a C++ compiler.
+ * tests/specflg10.test: Require g++.
+ Report by Thien-Thi Nguyen.
+
+2009-05-19 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Revert last patch, IRIX has an editor named `jot'.
+ * tests/instmany-mans.test: Do not try `jot'.
+ * tests/instmany-python.test: Likewise.
+ * tests/instmany.test: Likewise.
+ Report by Peter O'Gorman.
+
+2009-05-18 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ testsuite: also try `jot' as `seq' replacement.
+ * tests/instmany-mans.test: Try BSD `jot' before resorting to a
+ slow but portable shell loop.
+ * tests/instmany-python.test: Likewise.
+ * tests/instmany.test: Likewise.
+ Suggestion by Peter O'Gorman.
+
+ Fix test failure when pkg.m4 is not found, only pkg-config.
+ * tests/vala5.test: Update comment, this test is not expected to
+ fail any more. Require valac version 0.7.0. Skip if configure
+ fails, could be due to unexpanded PKG_CHECK_MODULES or too old
+ valac.
+ Report by Simon Josefsson.
+
+2009-05-17 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Post-release version bump.
+ * configure.ac, NEWS: Bump version to 1.11a.
+
+2009-05-17 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Automake 1.11.
+ * configure.ac: Bump version to 1.11.
+ * doc/automake.texi (Releases): Add line for 1.11. Remove line
+ for 1.10b.
+
+ Fix maintainer-check failures.
+ * automake.in (lang_vala_finish_target): Use `$(am__cd)' instead
+ of plain `cd'.
+ * tests/vala2.test: Use `rm -f' instead of `rm'.
+
+ Revert Automake license to GPLv2+.
+ Automake will move to GPLv3+ once the Exception statement has
+ been rewritten to use the new GPLv3 exception language. This
+ change does not impact the COPYING file that may be installed
+ by `automake --add-missing'.
+ * COPYING: Revert to GPLv2. All uses changed.
+ * NEWS: Update.
+
+ Rewrite NEWS for 1.11.
+ * NEWS: Rewrite, merging 1.10b and 1.10c entries.
+
+ Sync auxiliary files from upstream.
+ * lib/config.guess, lib/config.sub, lib/texinfo.tex: Sync from
+ upstream.
+
+ Update release statistics, improve release-stats rule.
+ * Makefile.am (release-stats): Output stderr of pstops in
+ addition to catching it, for better debugging.
+ * doc/automake.texi (Releases): Add line for 1.10.2.
+
+ Cope with parallel BSD make -jN semantics.
+ When BSD `make -jN' is used without `-B' which enables backwards
+ compatible semantics, it may reuse the same shell for several
+ commands within a rule; so ensure we do not leave it in a
+ different directory, nor `exit 0' early in a multi-command rule.
+ * lib/am/distdir.am (distcheck): After running `distcleancheck',
+ change back to original working directory.
+ * lib/am/remake-hdr.am (%CONFIG_HIN%): Run autoheader in a
+ subshell.
+ * lib/am/mans.am (uninstall-man%SECTION%): Do not `exit 0' early
+ in a rule that consists of several shell invocations. Parallel
+ NetBSD `make -jN' without `-B' will use only one shell for all
+ commands, but won't respawn one after `exit 0'. Fixes
+ notrans.test failure.
+ * tests/makej2.test: New test.
+ * tests/Makefile.am: Update.
+
+ Fix typo in comment.
+ * lib/am/install.am: Fix typo.
+
+2009-05-17 Matthias Klose <doko@ubuntu.com> (tiny change)
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Let AM_PATH_PYTHON honor python's idea about the site directory.
+ * m4/python.m4 (AM_PATH_PYTHON): When computing pythondir and
+ pyexecdir, pass the expanded prefix resp. exec_prefix as `prefix'
+ to get_python_lib, so python can determine the name of the site
+ directory depending on the install location. Afterwards, replace
+ the directory names with the unexpanded values of $PYTHON_PREFIX
+ resp. $PYTHON_EXEC_PREFIX again, to allow override according to
+ the documentation. Fixes site directory computation for Debian
+ and Ubuntu (`dist-packages' for a prefix of `/usr' or `/usr/local',
+ `site-packages' elsewhere).
+ * NEWS, THANKS: Update.
+
+2009-05-17 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Vala: for now, require GNU make.
+ * doc/automake.texi (Vala Support): GNU make is currently
+ required for Vala sources.
+ * tests/vala2.test, tests/vala3.test, tests/vala5.test: Require
+ GNU make.
+
+2009-05-17 Jürg Billeter <j@bitron.ch>
+
+ Vala: Use $(srcdir) in rebuild rules.
+ valac is always run in srcdir as the generated files are distributed.
+ So srcdir needs to be taken into account in the rebuild rules to not
+ wrongly trigger a rebuild in the wrong directory.
+ * automake.in (lang_vala_finish_target): Rebuild files in
+ $(srcdir).
+ * tests/vala2.test: Test rebuild rules from VPATH build.
+
+ Vala: Add and test rebuild rules for generated header and vapi files.
+ valac will generate additional files when using, for example, -H in
+ VALAFLAGS. We need to recognize these options and add appropriate
+ rebuild rules to fix parallel build.
+ * automake.in (lang_vala_finish_target): Recognize -H, -h,
+ --header, --internal-header, --vapi, --internal-api, --gir flags
+ to valac and rebuild rules for generated headers; distribute
+ and maintainer-clean them.
+ * tests/vala2.test: Test rebuild rules.
+
+2009-05-17 Jürg Billeter <j@bitron.ch>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Vala: Fix build when using per-target VALAFLAGS.
+ This does not yet implement full per-target support for VALAFLAGS,
+ however, this change at least fixes building when there is only one
+ target per source file, which is the most common situation.
+ * automake.in: Remove `VALAFLAGS' from `flags' in language struct.
+ (lang_vala_finish_target): Handle `*_VALAFLAGS rewriting' manually
+ here; check `VALAFLAGS' user variables.
+ * tests/Makefile.am (XFAIL_TESTS): Remove vala5.test.
+ * doc/automake.texi (Vala Support): Document per-target flag
+ limitations.
+
+2009-05-11 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ For PR automake/540:
+ Document some formatting restrictions for Makefile.am files.
+ * doc/automake.texi (General Operation, Usage of Conditionals):
+ Variable assignments should not be indented by TABs, rule commands
+ should. Conditional keyword statements should not be indented.
+ * THANKS: Update.
+ Report by Luo Yi.
+
+2009-05-03 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix copyright years in *.am files.
+ * lib/am/check.am, lib/am/check2.am, lib/am/distdir.am,
+ lib/am/program.am, lib/am/tags.am: Fix copyright years.
+
+ distdir: avoid duplicate `find' traversal with subpackages.
+ * lib/am/distdir.am (distdir) [%?SUBDIRS%]: When recursing, set
+ `am__skip_mode_fix'.
+ [%?TOPDIR_P%]: When `$(am__skip_mode_fix)' is set, avoid tree
+ walk.
+ * tests/subpkg4.test: New test, to ensure that we still walk the
+ whole tree while fixing permissions. We don't ensure it is
+ walked once only.
+ * tests/Makefile.am: Update.
+
+ Disable test cleanup trap with OSF1/Tru64 sh.
+ * configure.ac: Test whether /bin/sh has working 'set -e'
+ in conjunction with an exit trap. Set $am_cv_sh_errexit_works
+ accordingly, substitute sh_errexit_works, and warn about
+ leftover test directories with broken shells like Tru64 /bin/sh.
+ * tests/defs.in: Do not install any traps with broken shells.
+
+2009-05-02 Bruno Haible <bruno@clisp.org>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Recommend *-local hooks without commands, for extensibility.
+ * doc/automake.texi (Clean): Show how to write the clean-local
+ extension with separate phony target.
+ * tests/Makefile.am (clean-local-check): Practice what we preach
+ by marking this phony. For consistency, rename from ...
+ (check-clean-local): ... this.
+
+2009-04-28 Eric Blake <ebb9@byu.net>
+
+ scripts: normalize all timestamps to UTC
+ * lib/compile (scriptversion): Update emacs hook.
+ * lib/depcomp (scriptversion): Likewise.
+ * lib/elisp-comp (scriptversion): Likewise.
+ * lib/gnupload (scriptversion): Likewise.
+ * lib/install-sh (scriptversion): Likewise.
+ * lib/mdate-sh (scriptversion): Likewise.
+ * lib/missing (scriptversion): Likewise.
+ * lib/mkinstalldirs (scriptversion): Likewise.
+ * lib/py-compile (scriptversion): Likewise.
+ * lib/ylwrap (scriptversion): Likewise.
+
+2009-04-27 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ silent-rules: fix alignment of less verbose output.
+ * automake.in (define_verbose_var): Define `$silent_var' as
+ VAR_ASIS, not VAR_PRETTY, to avoid squashing of multiple
+ adjacent spaces.
+ * tests/silent.test: Amend test.
+ Report by Jan Engelhardt.
+
+2009-04-25 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ manual: fix trivial grammar errors.
+ * doc/automake.texi (Subpackages, Vala Support, Java)
+ (Checking the Distribution, Timeline): Fix `a' vs. `an' errors
+ and duplicate `the'.
+ Report by Eric Blake.
+
+ Indent rule commands consistently with a TAB.
+ * lib/am/check.am ($(TEST_SUITE_LOG)): Consistently use TAB, not
+ spaces, for indentation of commands, even if indentation may not
+ be needed at all.
+ * lib/am/texinfos.am (install-info-am): Likewise.
+ * THANKS: Update.
+ Prompted by report from John Calcote.
+
+ parallel-tests: fix recheck* targets for non-GNU make.
+ * lib/am/check.am (recheck recheck-html): Override AM_MAKEFLAGS
+ to portably transport the TEST_LOGS settings through the
+ recursive `make' invocations. Fixes parallel-tests9.test
+ failure with Solaris make.
+ * tests/parallel-tests9.test: Also ensure that the test
+ summary is correct for `recheck'.
+ Suggestion by Akim Demaille.
+
+2009-04-22 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Avoid racy depmodes with universal builds.
+ * m4/depend.m4 (_AM_DEPENDENCIES): If universal builds are used,
+ avoid racy depmodes.
+ * lib/depcomp: Ignore `-arch' argument for makedepend depmode.
+ Report by Bruno Haible, analysis by Bruno Haible, Peter O'Gorman,
+ and Eric Blake.
+
+2009-04-21 Fabian Alenius <fabian.alenius@gmail.com> (tiny change)
+
+ Fix link to autotools tutorial.
+ * doc/automake.texi (Autotools Introduction): Fix broken link.
+ * THANKS: Update.
+
+2009-04-19 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ testsuite: minor w32 fixes.
+ * tests/depend5.test: Don't fail if the system or file system
+ cannot handle weird characters, instead just try a few.
+ * tests/parallel-tests3.test: Really wait until the serial test
+ has finished, before letting the cleanup trap do its work.
+ Report by Bruno Haible.
+
+ Avoid nonportable `./FILE' instead of `FILE' in test.
+ * tests/libtool3.test: Do not use `$(top_builddir)/sub/libname.la'
+ in *_LDADD entry if `$(top_builddir)' is `.'. Fixes test failure
+ with parallel NetBSD make.
+
+ Detect make `include' style also with parallel non-GNU make.
+ Parallel NetBSD make outputs `--- $target ---' messages,
+ parallel HP-UX make outputs `Making target"$target"'. Just
+ ignore all additional output for the include test.
+ * m4/make.m4 (AM_MAKE_INCLUDE): Ignore additional output
+ produced by `make' to relax `include' style detection.
+
+ manual: add FAQ `Debugging Make Rules'.
+ * doc/automake.texi (Debugging Make Rules): New FAQ section.
+ (Top, FAQ): Adjust menus, and capitalization of the description
+ of the `Hard-Coded Install Paths' node.
+ (Multiple Outputs): Add comment to restore font-lock for vim.
+ Suggestion by Karl Berry.
+
+ Let XFile::lock warn and fail with parallel non-GNU make, too.
+ * lib/Automake/XFile.pm (lock): Also match `-j' for parallel BSD
+ make, and `-P' for parallel HP-UX make.
+
+ Fix AM_PROG_VALAC version requirement detection.
+ * m4/vala.m4 (AM_PROG_VALAC): Remove `Vala ' from valac
+ --version string before comparing versions.
+ * tests/vala2.test: Require version 0.7.0 for the test.
+ Fixes failures of vala2.test and vala3.test with older valac.
+
+ Correctly treat all assignments with bogus trailing comments.
+ Before this patch, automake would silently fail to diagnose and
+ to copy into the output those variable assignments which are
+ preceded by a comment, and end in backslash newline comment.
+ * automake.in (read_am_file): When determining whether an
+ escaped newline followed by a comment is an error, correctly use
+ the parser state, not the contents of a saved comment, which
+ could still be carried over from a comment before an assignment.
+ * NEWS: Update.
+ * tests/commen11.test: New test.
+ * tests/Makefile.am: Update.
+ Report by Karl Berry.
+
+2009-04-14 Karl Berry <karl@freefriends.org>
+
+ manual: improve markup: itemize list in `Extending'.
+ * doc/automake.texi (Extending): Use `@item's for user override
+ semantics.
+
+2009-04-13 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ bin_PROGRAMS = $(EXTRA_PROGRAMS) should work.
+ * automake.in (am_install_var): For `PROGRAMS' primary, strip
+ `$(EXEEXT)' here already, so the name uniquifying works even
+ when we look at names repeatedly, with inconsistent executable
+ extension; through variable references, we might have added
+ the extension ourselves earlier.
+ (handle_programs): No need to strip `$(EXEEXT)' here any more.
+ * tests/extra8.test: New test.
+ * tests/Makefile.am: Update.
+ * THANKS: Update.
+ Report by Daniel Richard G.
+
+2009-04-10 Jim Meyering <meyering@redhat.com>
+
+ Fix grammar in comments and documentation.
+ * doc/automake.texi (API versioning): Fix grammar.
+ * automake.in: Fix grammar in comment.
+ * lib/Automake/ChannelDefs.pm: Likewise.
+ * tests/ext2.test: Likewise.
+
+2009-04-19 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ More minor fixups to vala support.
+ * automake.in (lang_vala_finish_target): Fix typo in comment.
+ * doc/automake.texi (Vala Support): Fix typo. Declare vala
+ support as "initial".
+ * NEWS: Likewise, declare vala support as "initial".
+
+2009-04-05 Jürg Billeter <j@bitron.ch>
+
+ Improve Vala support.
+ * automake.in: Update to Vala 0.7.0 semantics, recover from removal
+ of built sources, support silent-rules, drop _PKGNAME variables
+ * doc/automake.texi, NEWS: Update.
+ * lib/am/vala.am: Bump copyright years.
+ * m4/vala.m4: Likewise.
+ * tests/vala.test: Remove obsolete grep tests.
+ * tests/vala1.test: Likewise.
+ * tests/vala2.test: Test full build, distcheck, and distclean.
+ * tests/vala3.test: Likewise, also test with subdir-objects.
+ * tests/vala4.test: Bump copyright years.
+ * tests/vala5.test: New test for per-target flags, expected to fail.
+ * tests/Makefile.am: Update.
+ * THANKS: Update.
+
+2008-10-10 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Minor fixups for Vala support.
+ * automake.in: $(VALAFLAGS) comes after $(AM_VALAFLAGS).
+ * doc/automake.texi (Vala Support): Add some references,
+ document AM_VALAFLAGS, streamline a bit.
+ * lib/am/vala.am: Copyright blurb.
+ * m4/vala.m4 (AM_PROG_VALAC): Rewrite using AS_VERSION_COMPARE.
+ * tests/vala.test: Fix minor nits.
+ * tests/vala1.test: Likewise.
+ * tests/vala2.test: Likewise.
+ * tests/vala3.test: Likewise.
+ * tests/vala4.test: New test, for version argument of
+ AM_PROG_VALAC.
+ * tests/Makefile.am: Update.
+
+2008-10-09 Mathias Hasselmann <mathias.hasselmann@gmx.de>
+
+ * automake.in: Support Vala in non-recursive builds. Make sure
+ foo_VALAFLAGS really use used. Inject --library switch when building
+ Vala libraries.
+ * doc/automake.texi, NEWS: Document Vala support.
+ * m4/vala.m4: Rename AC_PROG_VALAC to AM_PROG_VALAC.
+ * tests/Makefile.am: Additional Vala tests.
+ * tests/vala.test: Also test VALAFLAGS support.
+ * tests/vala1.test: Test non-recursive Vala support.
+ * tests/vala2.test: Test _PKGNAME variables.
+ * tests/vala3.test: Test compiling of C code generated by Vala.
+
+2008-10-09 Mathias Hasselmann <mathias.hasselmann@gmx.de>
+
+ Initial support for the vala programming language.
+ * automake.in: Add %known_libraries, lang_vala_rewrite,
+ lang_vala_finish and lang_vala_target_hook to support the Vala
+ programming language. Register Vala language hooks.
+ * lib/am/vala.am: Empty rules file to prevent creation of depend2
+ based rules for Vala code.
+ * lib/am/Makefile.am (dist_am_DATA): Add vala.am.
+ * m4/vala.m4: Provide AC_PROG_VALAC for detecting the Vala compiler.
+ * m4/Makefile.am (dist_m4data_DATA): Add vala.m4.
+ * tests/vala.test: Test Vala support.
+ * tests/Makefile.am: Update.
+
+2009-04-14 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ testsuite: do not fail on systems without read permissions.
+ * tests/instfail-info.test: Do not use the `non-root'
+ requirement for testing whether files may be made unreadable;
+ instead use `test -r' and skip the test if that still works.
+ * tests/instfail-java.test: Likewise.
+ * tests/instfail-libtool.test: Likewise.
+ * tests/instfail.test: Likewise.
+ * tests/instmany-mans.test: Likewise.
+ * tests/instmany-python.test: Likewise.
+ * tests/instmany.test: Likewise.
+ * tests/parallel-tests9.test: Likewise.
+
+ testsuite: parallel make fixes.
+ This patch fixes a couple of testsuite bugs exposed with
+ `MAKE=make\ -jN make check'.
+ * tests/libtoo10.test: Do not run `clean' in same $MAKE
+ invocation as `all check'. Fixes test failure with parallel
+ NetBSD `make -jN'.
+ * tests/nobase.test: Be sure to create a directory before
+ creating files in it. Fixes test failure with MAKE=`make -jN'
+ for NetBSD make. This issue is hidden with parallel GNU make
+ due to its parallel breadth first update order.
+ * tests/parallel-tests3.test: Skip if $MAKE contains `-j',
+ GNU make will use the environment variable $MAKE for recursion
+ and thus run in parallel even if `$MAKE -j1' was used on the
+ command line in the test. Also, after running the test proper,
+ wait long enough so that background jobs have finished and there
+ are no open files left when the cleanup code runs.
+
+2009-04-13 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ silent-rules reorganization, --enable-silent-rules switch.
+ This patch introduces a configure-time option to set the default
+ verbosity. Since configure now needs to know whether the
+ `silent-rules' automake option was set, the latter can only be
+ set within AM_INIT_AUTOMAKE, or with a new AM_SILENT_RULES macro
+ but not any more through AUTOMAKE_OPTIONS or the automake
+ command line option `--silent-rules'.
+ * automake.in (define_verbose_var): Define the default verbose
+ variable in terms of `$(AM_DEFAULT_VERBOSITY)'.
+ (handle_configure): Do not pass `--silent-rules' to automake.
+ (scan_autoconf_traces): Trace `AM_SILENT_RULES'. If seen,
+ enable global `silent-rules' option.
+ (usage): Do not document `--silent-rules'.
+ (parse_arguments): Do not accept `--silent-rules'.
+ * doc/automake.texi (Options): Overhaul. Document
+ AM_SILENT_RULES, --enable-silent-rules, --disable-silent-rules,
+ AM_DEFAULT_VERBOSITY. Show an example for user-added variables
+ for less verbose output.
+ (Invoking Automake): Remove documentation for `--silent-rules'.
+ (Public Macros): Document `AM_SILENT_RULES'.
+ * NEWS: Update.
+ * lib/Automake/Options.pm (_process_option_list): Accept
+ `silent-rules' only as option in configure.ac.
+ * m4/init.m4 (AM_INIT_AUTOMAKE): If the `silent-rules' option
+ was enabled, require `AM_SILENT_RULES'; move AM_BACKSLASH
+ initialization to ...
+ * m4/silent.m4 (AM_SILENT_RULES): ... this new file, new macro.
+ Deal with `--enable-silent-rules' switch; define
+ AM_DEFAULT_VERBOSITY.
+ * m4/Makefile.am (dist_m4data_DATA): Add silent.m4.
+ * tests/dollarvar.test: Remove tests for `--silent-rules', use
+ `AM_SILENT_RULES'.
+ * tests/flavor.test: Remove test for `--silent-rules'.
+ * tests/silent.test: Use `AM_SILENT_RULES' instead of
+ `AUTOMAKE_OPTIONS = silent-rules'; use `--enable-silent-rules'.
+ * tests/silent2.test: Likewise.
+ * tests/silent3.test: Likewise.
+ * tests/silent4.test: Likewise.
+ * tests/silent5.test: Likewise.
+ * tests/silent6.test: Likewise. Test `AM_SILENT_RULES' as well
+ as `AM_INIT_AUTOMAKE([silent-rules])' instead of
+ `--silent-rules'.
+ * tests/silent7.test: Use `AM_SILENT_RULES' instead of
+ `AUTOMAKE_OPTIONS = silent-rules'; ensure the latter is rejected.
+ Test combinations of --enable-silent-rules and
+ --disable-silent-rules with `make V=0' and `make V=1'.
+ Suggestion for configure-time switch by Bob Friesenhahn.
+
+ manual: Add note about parallelism and tests ordering.
+ * doc/automake.texi (Simple Tests using parallel-tests):
+ Dependencies between test logs work for tests with known
+ extensions only. Hint that tests should be prepared to be run
+ in parallel.
+
+ Fix maintainer-check failure.
+ * tests/suffix13.test: Use Exit not exit.
+
+2009-04-10 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ parallel-tests: more testsuite exposure.
+ * tests/parallel-tests.test: Also test overriding TEST_LOGS and
+ TESTS.
+
+ parallel-tests: let VERBOSE=yes output appear before summary.
+ * lib/am/check.am ($(TEST_SUITE_LOG)): In `VERBOSE=yes' mode,
+ output contents of `$(TEST_SUITE_LOG)' before, rather than after
+ the test suite summary. This ensures that the email address
+ appears near the end of the output; also, the log file already
+ starts with a result summary anyway.
+
+ parallel-tests: `clean recheck' should not rerun all tests.
+ * lib/am/check.am (recheck, recheck-html): Do not rerun all
+ tests if `$(TEST_SUITE_LOG)' does not exist.
+ * tests/parallel-tests2.test: Adjust recheck test.
+ * tests/parallel-tests9.test: Adjust recheck-html test.
+ * NEWS: Update.
+ Suggestion by Akim Demaille.
+
+2009-04-08 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+ Eric Blake <ebb9@byu.net>
+
+ parallel-tests: Fix driver for nonempty executable extension.
+ * automake.in (handle_tests): New substitution `%am__EXEEXT%',
+ defined as 'FALSE' for non-generic rules, or if no programs are
+ built at all. Otherwise, define it as configure conditional.
+ * lib/am/check2.am [%am__EXEEXT%] (%EXT%$(EXEEXT).log): New
+ conditional generic rule.
+ * m4/init.m4: Hook an m4_provide of `_AM_COMPILER_EXEEXT' onto
+ Autoconf's `_AC_COMPILER_EXEEXT' macro.
+ (AM_INIT_AUTOMAKE): If `_AM_COMPILER_EXEEXT' has been provided
+ at `AC_CONFIG_COMMANDS_PRE' time, then introduce a conditional
+ `am__EXEEXT', defined to true iff `$EXEEXT' is nonempty.
+ * tests/check5.test: Only match `_EXEEXT_[1-9]' here, to avoid
+ false positives stemming from `@am__EXEEXT_TRUE@'.
+ * NEWS: Update.
+
+2009-04-08 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix a couple of $(EXEEXT)-related testsuite failure.
+ * tests/check8.test: Allow executable extensions in test suite
+ output.
+ * tests/check9.test: Add `$(EXEEXT)' manually to @substituted@
+ XFAIL_TESTS entries.
+
+ * NEWS: Update for last patch.
+
+2009-04-07 Florian Briegel <briegel@zone42.de> (tiny change)
+ Stepan Kasal <skasal@redhat.com>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix renamed objects with subdir-objects and other languages.
+ * automake.in: Fixed bug when building with renamed objects
+ and foreign languages.
+ * tests/suffix13.test: New test.
+ * tests/Makefile.am: Adjust.
+ * THANKS: Update.
+ Reports by Florian Briegel and Stepan Kasal.
+
+2009-04-07 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Do not remove texinfo outputs upon mostlyclean.
+ * lib/am/texinfos.am: New substitutions %MOSTLYCLEAN%,
+ %MAINTCLEAN%.
+ (clean-aminfo): New target, remove %TEXICLEAN% if nonemtpy,
+ declare phony. Hook this target to ...
+ (clean-am): ... this and ...
+ (?CYGNUS?clean-info): ... this.
+ (maintainer-clean-aminfo): Remove %MAINTCLEAN% if nonempty,
+ for later.
+ (mostlyclean-aminfo): Remove %MOSTLYCLEAN%.
+ * automake.in (handle_texinfo_helper): Return three arrays
+ $MOSTLYCLEAN, $TEXICLEAN, $MAINTCLEAN, instead of one array.
+ Only put LaTeX helper files in $MOSTLYCLEAN, the rest in
+ $TEXICLEAN for now.
+ (handle_texinfo): Accept these, chop off extra newline, and
+ substitute them in `texinfos.am'.
+ * NEWS: Update.
+ * tests/txinfo33.test: New test.
+ * tests/Makefile.am: Update.
+ Report by Bruno Haible.
+
+2009-04-06 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ testsuite: unset TESTS, TEST_LOGS, to avoid interference.
+ * tests/defs.in: Unset TESTS, TEST_LOGS.
+
+ testsuite: generate $(parallel_tests) just when needed.
+ * tests/Makefile.am (check_SCRIPTS): No need to list
+ $(parallel_tests) here, they can be generated as needed during
+ the test run, following our recommendation in the manual.
+
+ Remove superfluous line from recheck recheck-html.
+ * lib/am/check.am (recheck recheck-html): Remove superfluous
+ line, introduced bogusly in last commit.
+
+2009-04-06 Akim Demaille <akim@lrde.epita.fr>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ parallel-tests: redo check-html, recheck, recheck-html.
+ * lib/am/check.am (recheck, recheck-am): Remove.
+ (recheck-TESTS): Rename to ...
+ (recheck): ... this and rewrite, factored ...
+ (recheck-html): ... with this rule. Pass TEST_LOGS rather than
+ RECHECK_LOGS to `check' and `check-html', respectively, to avoid
+ running outdated tests. Invoking the public macros ensures
+ `check_SCRIPTS' etc. are created in time. Do not output errors
+ for tests that were not run yet. If the testsuite has not run
+ at all, run all tests.
+ (check-html): Run `check' target, not `check-TESTS', to ensure
+ `check_SCRIPTS' etc. are created in time.
+ (.PHONY, .MAKE, AM_RECURSIVE_TARGETS): Adjust contents.
+ * tests/parallel-tests2.test: Expose the check-html and
+ recheck-html issues.
+ * tests/parallel-tests9.test: Expose the recheck issues.
+ Bugs in previous version pointed out by Akim, who already had
+ them fixed in his original version.
+
+2009-04-04 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ parallel-tests: LOG_COMPILER for tests without known extension.
+ * automake.in (handle_tests): If we don't match a known
+ extension, define `LOG_COMPILER' as `$(LOG_COMPILE)
+ $(AM_LOG_FLAGS) $(LOG_FLAGS)' and use it as %COMPILE% in check2.
+ * doc/automake.texi (Simple Tests using parallel-tests):
+ Document it. In the examples, suggest using the AM_*LOG_FLAGS
+ flags in Makefile.am rather than the variables without `AM_'
+ prefix.
+ * lib/Automake/tests/Makefile.am (AM_PL_LOG_FLAGS): Renamed from
+ (PL_LOG_FLAGS): ... this variable, intended for the user.
+ * tests/parallel-tests7.test: Extend test.
+ * NEWS: Update.
+ Suggestion by Akim Demaille.
+
+ More node renaming in the manual.
+ * doc/automake.texi (Top): Adjust menu to ...
+ (API Versioning): ... this node being renamed from ...
+ (API versioning): ... this, and ...
+ (Wildcards): ... this being renamed from ...
+ (wildcards): ... this.
+ Report by Karl Berry.
+
+2009-04-03 Andreas Schwab <schwab@linux-m68k.org>
+
+ * tests/instdir-java.test: Don't require gcj. Skip if javac is
+ not available.
+
+2009-04-01 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix testsuite failures due to nonexistent `dirlist' entries.
+ * tests/defs.in: When parsing `$aclocaldir/dirlist', only add
+ existing directories D to aclocal `-I D' flags, as aclocal
+ errors on nonexisting directories.
+ Report and analysis by Andreas Schwab.
+
+2009-03-31 Akim Demaille <akim@lrde.epita.fr>
+
+ Fix typo in manual.
+ * doc/automake.texi (Simple Tests using parallel-tests): Fix
+ typo.
+
+2009-03-31 Jim Meyering <meyering@redhat.com>
+
+ Avoid test failure due to paranoid TAR_OPTIONS envvar setting.
+ * tests/txinfo18.test: Don't let a TAR_OPTIONS=--keep-old-files
+ environment variable setting cause test failure. Fixed in
+ texi2dvi 4.13.
+
+ Use more common spelling in diagnostic: s/canonic/canonical/.
+ * automake.in (check_typos): s/canonic/canonical/.
+
+2009-03-31 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * configure.ac, NEWS: Bump version to 1.10c.
+
+2009-03-29 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * configure.ac, NEWS: Bump version to 1.10b.
+ * doc/automake.texi (Releases): Add statistics for 1.10b.
+
+ * NEWS: Minor update.
+
+ Reorganize nodes in the manual.
+ Avoid texinfo sectioning commands without nodes, by either
+ introducing new nodes along with menus, or using headings
+ commands. Adjust all references.
+ * doc/automake.texi: Throughout the manual, adjust references to
+ new or changed node names. Rename `non-configured' to
+ `unconfigured', capitalize headings and section names better.
+ (Top): List new menus and nodes introduced below.
+ (Length Limitations): Renamed from ...
+ (Length limitations): ... this.
+ (aclocal Options): Renamed from ...
+ (aclocal options): ... this.
+ (Macro Search Path): Renamed from ...
+ (Macro search path): ... this. Rename subsubsections to
+ subsubheadings.
+ (Public Macros, Obsolete Macros, Private Macros): Renamed from
+ (Public macros, Obsolete macros, Private macros): ... these.
+ (Conditional Subdirectories): Introduce sub menu and split ...
+ (SUBDIRS vs DIST_SUBDIRS, Subdirectories with AM_CONDITIONAL)
+ (Subdirectories with AC_SUBST, Unconfigured Subdirectories):
+ ... into these new nodes. Adjust subsection names to node
+ names.
+ (Conditional Sources): Rename subsubsections to subsubheadings.
+ (Conditional Programs): Likewise.
+ (Program Variables): Renamed from ...
+ (Program variables): ... this.
+ (Libtool Issues): Introduce sub menu and split into ...
+ (Required file ltmain.sh not found)
+ (Objects created both with libtool and without): ... these new
+ nodes.
+ (Other Objects, Built Sources): Renamed from ...
+ (Other objects, Built sources): ... these.
+ (Built Sources Example): Renamed from ...
+ (Built sources example): this. Rename unnumberedsubsecs to
+ subsubheadings.
+ (Man Pages): Renamed from ...
+ (Man pages): ... this.
+ (Install): Introduce sub menu and split into ...
+ (Basics of Installation, The Two Parts of Install)
+ (Extending Installation, Staged Installs)
+ (Install Rules for the User): ... these new nodes.
+ (Dist): Introduce sub menu and split into ...
+ (Basics of Distribution, Fine-grained Distribution Control)
+ (The dist Hook, Checking the Distribution)
+ (The Types of Distributions): ... these new nodes.
+ (Tests): Introduce sub menu and split into ...
+ (Simple Tests, Simple Tests using parallel-tests, DejaGnu Tests)
+ (Install Tests): ... these new nodes.
+ (Conditionals): Move the portability paragraph up, introduce sub
+ menu and split into ...
+ (Usage of Conditionals, Limits of Conditionals): ... these new
+ nodes. Link to several sections throughout the manual that deal
+ with specific usage of conditionals.
+ (CVS): Rename subsections to subheadings.
+ (maintainer-mode): Likewise.
+ (Limitations on File Names): Renamed from ...
+ (limitations on file names): ... this.
+ (Flag Variables Ordering): Rename subsections to subheadings.
+ (Renamed Objects): Renamed from ...
+ (Renamed objects): ... this.
+ (Dependency Tracking Evolution): Introduce sub menu and split
+ into ...
+ (First Take on Dependencies, Dependencies As Side Effects)
+ (Dependencies for the User, Techniques for Dependencies)
+ (Recommendations for Tool Writers)
+ (Future Directions for Dependencies): ... these new nodes.
+ Report by Karl Berry.
+
+2009-03-29 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Update AM_RECURSIVE_TARGETS for parallel-tests.
+ * lib/am/check.am [PARALLEL_TESTS] (AM_RECURSIVE_TARGETS):
+ Add check, recheck, check-html, recheck-html.
+
+2009-03-29 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+ Akim Demaille <akim@lrde.epita.fr>
+
+ parallel-tests: New target recheck-html.
+ * lib/am/check.am [PARALLEL_TESTS] (recheck-html): New phony,
+ recursive target. Factor common implementation with
+ `check-html'.
+ * doc/automake.texi (Tests): Document recheck-html.
+ * tests/parallel-tests2.test: Test it.
+
+2009-03-28 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+ Akim Demaille <akim@lrde.epita.fr>
+
+ parallel-tests: redo lazy checking: recheck and RECHECK_LOGS.
+ Replace the LAZY_TEST_SUITE API with a simpler yet more powerful
+ one: RECHECK_LOGS specifies those tests which are to be removed
+ in any case before testing. Provide a `recheck' convenience
+ target to set RECHECK_LOGS to all failed and unexpectedly passed
+ tests. Document several ways to limit the set of tests run.
+ * lib/am/check.am [PARALLEL_TESTS] (RECHECK_LOGS): New variable,
+ default to $(TESTS_LOGS).
+ (check-TESTS): Remove $(RECHECK_LOGS) not $(TEST_LOGS). Drop use
+ of LAZY_TEST_SUITE.
+ ($(TEST_SUITE_LOG)): Do not output note about lazy rerun, as
+ LAZY_TEST_SUITE is gone.
+ (recheck): New target.
+ (recheck-am, recheck-TESTS): New internal targets.
+ * doc/automake.texi (Tests): Update @vindex for TESTS and
+ TEST_LOGS. Replace description of LAZY_TEST_SUITE with a list
+ of ways the set of tests to be run can be modified. Document
+ RECHECK_LOGS and the recheck target.
+ * tests/defs.in: Unset RECHECK_LOGS not LAZY_TEST_SUITE.
+ * tests/parallel-tests.test: Adjust, replacing LAZY_TEST_SUITE
+ with corresponding RECHECK_LOGS settings.
+ * tests/parallel-tests9.test: New tests.
+ * tests/Makefile.am: Update.
+ Suggestion and different implementation by Akim Demaille.
+
+ parallel-tests: do not mark check-TESTS as `.MAKE'.
+ * lib/am/check.am [PARALLEL_TESTS] (.MAKE): Remove check-TESTS.
+ This rule removes files, which should not be executed with BSD
+ `make -n'.
+
+ parallel-tests: warn about $(srcdir), $(top_srcdir) in TESTS.
+ * automake.in (handle_tests): Warn about portability issue
+ concerning generated TESTS files listed with a `$(srcdir)/'
+ or `$(top_srcdir)/' prefix.
+ * doc/automake.texi (TESTS): Document this issue. Mention that
+ the parallel-tests driver is still experimental.
+ * tests/parallel-tests8.test: New test.
+ * tests/Makefile.am: Update.
+
+ check-html: Always create HTML output, note conversion failure.
+ * lib/am/check.am (check-html): Create `$(TEST_SUITE_HTML)' in
+ any case. Exit unsuccessfully if HTML creation failed.
+ * tests/parallel-tests2.test: Amend test to expose this.
+
+2009-03-24 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ parallel-tests: per-extension test driver: <EXT>_LOG_COMPILER.
+ For test files with extension <ext>, introduce the internal
+ variable <EXT>_LOG_COMPILE, which expands to
+ $(<EXT>_LOG_COMPILER) $(AM_<EXT>_LOG_FLAGS) $(<EXT>_LOG_FLAGS).
+ Turn also the lib/Automake/tests testsuite over to the new
+ test driver.
+ * doc/automake.texi (Tests): Document `EXT_LOG_COMPILER' and
+ `EXT_LOG_FLAGS'.
+ * lib/am/check2.am: Insert `%COMPILE%' right before test.
+ * automake.in (handle_tests): Substitute `COMPILE' for check2,
+ empty for tests without extension, and `$(ext_LOG_COMPILE)' for
+ extension `ext'. In the latter case, define it from the public
+ components.
+ * configure.ac (AM_INIT_AUTOMAKE): Use `parallel-test' globally.
+ * tests/Makefile.am (AUTOMAKE_OPTIONS): Remove, not needed here
+ any more.
+ * lib/Automake/tests/Makefile.am (TESTS_ENVIRONMENT): Split ...
+ (PL_LOG_COMPILER, PL_LOG_FLAGS): ... into these new variables.
+ (TESTS_EXTENSIONS): New variable, initialize to `.pl'.
+ * tests/parallel-tests7.test: New test.
+ * tests/Makefile.am: Update.
+ Suggestion by Akim Demaille.
+
+2009-03-22 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ parallel-tests: also record logs of SKIPped tests.
+ * lib/am/check.am [PARALLEL_TESTS] ($(TEST_SUITE_LOG)): Record
+ SKIPs as well.
+ Suggested by Jim Meyering.
+
+ Minor optimization in parallel-tests text box creation.
+ * lib/am/check.am [PARALLEL-TESTS] (am__text_box): Use only one
+ awk invocation, rather than several tools, to create a text box.
+ Suggestion from Akim Demaille.
+
+2009-03-29 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Rewrite maintainer-check in separate tests, parallelizable.
+ * Makefile.am (sc_diff_automake_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_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_mkdir_p, sc_perl_at_substs)
+ (sc_unquoted_DESTDIR, sc_tabs_in_texi, sc_at_in_texi): New rules,
+ all phony, all listed in ...
+ (syntax_check_rules): ... this new variable and split out from ...
+ (maintainer-check): ... this rule. Depend on $(syntax_check_rules).
+
+ * Makefile.am (maintainer-check): Do not complain if DESTDIR is
+ passed as argument to `make'.
+
+ * doc/automake.texi (Cross-Compilation): Fix underfull hbox.
+
+ Sync auxiliary files from upstream.
+ * INSTALL, lib/INSTALL, lib/config.guess, lib/config.sub,
+ lib/texinfo.tex: Sync from upstream.
+
+2009-03-28 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ manual: minor cleanups.
+ * doc/automake.texi (Yacc and Lex): Adjust spacing in example.
+ (Mixing Fortran 77 With C and C++): Drop unneeded @page breaks.
+
+ Sane (un)install for empty directory variables.
+ This patch fixes all install and uninstall rules to behave
+ sanely when $(wheredir) is the empty string, but $(where_HOW) is
+ nonempty, for all kinds of values of `where' and `HOW'.
+ * lib/am/data.am (install-%DIR%%PRIMARY%, uninstall-%DIR%%PRIMARY%):
+ Do not touch the install tree if the corresponding directory variable
+ $(%NDIR%dir) is empty.
+ * lib/am/java.am (install-%DIR%JAVA, uninstall-%DIR%JAVA): Likewise.
+ * lib/am/libs.am (install-%DIR%LIBRARIES, uninstall-%DIR%LIBRARIES):
+ Likewise.
+ * lib/am/lisp.am (install-%DIR%LISP, uninstall-%DIR%LISP): Likewise.
+ * lib/am/ltlib.am (install-%DIR%LTLIBRARIES, uninstall-%DIR%LTLIBRARIES):
+ Likewise.
+ * lib/am/mans.am (install-man%SECTION%, uninstall-man%SECTION%):
+ Likewise.
+ * lib/am/progs.am (install-%DIR%PROGRAMS, uninstall-%DIR%PROGRAMS):
+ Likewise.
+ * lib/am/python.am (install-%DIR%PYTHON, uninstall-%DIR%PYTHON):
+ Likewise.
+ * lib/am/scripts.am (install-%DIR%SCRIPTS, uninstall-%DIR%SCRIPTS):
+ Likewise.
+ * lib/am/texinfos.am (install-dvi-am, install-html-am, install-pdf-am)
+ (install-ps-am, uninstall-dvi-am, uninstall-html-am, uninstall-pdf-am)
+ (uninstall-ps-am): Likewise.
+ * tests/instdir2.test, tests/instdir-java.test,
+ tests/instdir-lisp.test, tests/instdir-ltlib.test,
+ tests/instdir-prog.test, tests/instdir-python.test,
+ tests/instdir-texi.test: New tests.
+ * tests/Makefile.am: Update.
+ * NEWS: Update.
+ Suggestion by Akim Demaille.
+
+ Ensure that empty directory variables work with empty content variables.
+ This test ensures that, if both $(wheredir) and $(where_HOW) are
+ the empty string, then the `install' and `uninstall' rules behave
+ sanely, for several directory variables `wheredir' and several
+ primaries `HOW'.
+ * tests/instdir.test: New test.
+ * tests/Makefile.am: Update.
+
+2009-03-23 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Use --tag=FC with libtool also for .f90 files.
+ * automake.in: Set 'libtool_tag' for language `fc'.
+ * tests/fort5.test: Grep for the tag.
+ * THANKS: Update.
+ Report by John R. Cary.
+
+2009-03-22 Peter Breitenlohner <peb@mppmu.mpg.de>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ For PR automake/533:
+ DISTFILES containing a directory and files in that directory.
+ When the source tree contains non-writable files or directories
+ (as happens during distcheck), and directories or entries
+ thereof are listed multiple times in variables to be
+ distributed, then the corresponding directories below $(distdir)
+ need to be made writable recursively. Since file modes should
+ not change, they need to be copied recursively using `cp -f'.
+ * lib/am/distdir.am: Handle this situation.
+ * tests/distdir.test: Extend test to those cases.
+ * NEWS: Update.
+ Report by Peter Breitenlohner.
+
+2009-03-22 Jim Meyering <meyering@redhat.com>
+
+ Fix a documentation typo.
+ * doc/automake.texi (Headers): Clarify the note telling when it's
+ better not to use noinst_HEADERS.
+
+2009-03-22 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Define AM_RECURSIVE_TARGETS, for gnulib's GNUmakefile.
+ This new macro lists all public targets which invoke `make'
+ recursively, or depend on targets which do so. It allows to
+ prevent parallelism selectively, when multiple targets are
+ passed on the `make' command line.
+ * lib/am/distdir.am [%?SUBDIRS%] (AM_RECURSIVE_TARGETS): New
+ macro.
+ * lib/am/subdirs.am (AM_RECURSIVE_TARGETS): Likewise.
+ * lib/am/tags.am [%?SUBDIRS%] (AM_RECURSIVE_TARGETS):
+ Likewise.
+
+2009-03-11 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix LAZY_TEST_SUITE handling and $(TEST_SUITE_LOG) recreation.
+ * lib/am/check.am (check-TESTS): Expand `$(TEST_LOGS)' only once
+ in the rule command, for systems with low command line limits.
+ Remove $(TEST_SUITE_LOG) even in LAZY_TEST_SUITE mode.
+ ($(TEST_SUITE_LOG)): Always recreate $(TEST_SUITE_LOG). Mention
+ lazy mode in the summary output.
+ * tests/parallel-tests.test: Test LAZY_TEST_SUITE semantics.
+
+2009-03-10 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix parallel-tests with empty $(TESTS) for BSD make.
+ * lib/am/check.am [PARALLEL_TESTS] ($(TEST_SUITE_LOG)): Ignore
+ empty line stemming from empty $(TEST_LOGS), to avoid counting
+ zero tests as one.
+ (check-TESTS): If `$(TESTS)' is empty, override TEST_LOGS to be
+ empty, rather than `.log', for BSD make.
+ * tests/parallel-tests6.test: New test.
+ * tests/Makefile.am: Update.
+
+ Mark check-html and check-TESTS as recursive for BSD make.
+ * lib/am/check.am [PARALLEL_TESTS] (.MAKE): Add check-TESTS
+ and check-html prerequisites.
+
+ Match XFAIL_TESTS correctly with Solaris make.
+ * lib/am/check.am [PARALLEL_TESTS]: VPATH rewriting may have
+ changed test names, so srcdir needs to be taken into account
+ explicitly when checking against the list of tests expected
+ to fail. Fixes spurious FAILures from XFAIL_TESTS.
+
+ Use append mode to capture parallel test output.
+ * tests/lisp8.test: Use append mode for output from `make -j',
+ to avoid dropped lines.
+ * tests/parallel-tests3.test: Likewise.
+
+ parallel-tests: Fix summary output.
+ * lib/am/check.am (am__text_box): Fix unportable sed script,
+ replacing `\n' in the right hand side of an `s' command with
+ a literal newline. Kudos to Bruno Haible for the newline idea.
+ * tests/parallel-tests.test: Update test to expose this.
+
+2009-03-08 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Overhaul of tests/README.
+ * tests/README: General overhaul. Mention parallel test suite
+ execution, the test-suite.log file; document `Exit' vs. `exit',
+ `defs' vs. `defs-p', the naming of `parallel-tests' tests.
+ * README: Simplify, point to tests/README.
+
+ Documentation for the parallel-tests driver.
+ * doc/automake.texi (Tests, Options): Document the `parallel-tests'
+ option, including new features of the test driver.
+ * NEWS: Update.
+
+ New tests for `parallel-tests'.
+ * tests/parallel-tests.test: New file, to expose a bunch of
+ features of `parallel-tests': VERBOSE, clean, TEST_SUITE_LOG,
+ test dependencies, DISABLE_HARD_ERRORS.
+ * tests/parallel-tests2.test: New file, test check-html.
+ * tests/parallel-tests3.test: New file, test concurrency.
+ * tests/parallel-tests4.test: New file, test suffix rules.
+ * tests/parallel-tests5.test: New file, demonstrate compile/test
+ concurrency.
+ * tests/defs.in: Add a `required' check for rst2html.
+ * tests/Makefile.am: Update.
+
+ parallel-tests: Ensure backward-compatible semantics.
+ For each test in Automake's test suite that uses TESTS, generate
+ an identical one that uses the `parallel-tests' option, for
+ coverage of backward-compatible functionality.
+ * tests/gen-parallel-tests: New file, generates distributed
+ Makefile.am snippet tests/parallel-tests.am to list all tests
+ that use the TESTS interface but not yet the `parallel-tests'
+ option, with names mangled to use suffix `-p.test', in ...
+ (parallel_tests): ... this new make macro.
+ * tests/Makefile.am ($(srcdir)/parallel-tests.am)
+ ($(parallel_tests), defs-p): New rules.
+ (TESTS): Add check11.test and $(parallel_tests).
+ (check_SCRIPTS): Add defs-p, $(parallel_tests).
+ (check-clean-local): Remove `defs-p'.
+ (EXTRA_DIST): Distribute gen-parallel-tests.
+ (MAINTAINERCLEANFILES): New variable, remove $(parallel_tests).
+ * bootstrap: Generate parallel-tests.am.
+ * tests/check8.test: Check for circular dependencies in rules.
+ * tests/check11.test: New test, check that SKIPs are not counted
+ as passed tests.
+ * tests/defs.in: Unset DISABLE_HARD_ERRORS, LAZY_TEST_SUITE,
+ VERBOSE, so the tests are not influenced by the way our test
+ suite is invoked.
+
+2009-03-08 Akim Demaille <akim@lrde.epita.fr>
+ Jim Meyering <jim@meyering.net>
+ Benoit Sigoure <tsuna@lrde.epita.fr>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Parallel test execution: new option `parallel-tests'.
+ * automake.in (handle_tests): Set new conditional PARALLEL_TESTS
+ when reading check.am. Handle option `parallel-tests' and all
+ its new semantics. Define macros TEST_SUFFIXES, TEST_SUITE_LOG,
+ TEST_SUITE_HTML, TEST_LOGS, TEST_LOGS_TMP, suffix rules if
+ applicable, and per-target rules for other tests. Add all log
+ files to %clean_files at the `MOSTLY_CLEAN' level.
+ * lib/Automake/Options.pm (_process_option_list): Accept
+ `parallel-tests'.
+ * lib/am/check.am [!PARALLEL_TESTS] (check-TESTS): Move existing
+ testsuite driver under this new conditional.
+ [PARALLEL_TESTS]
+ (am__rst_title, am__rst_section, am__text_box am__sh_e_setup)
+ (am__check_pre, am__check_post): New internal macros.
+ ($(TEST_SUITE_LOG), check-TESTS, .log.html, check-html): New
+ rules.
+ * lib/am/check2.am: New file.
+ * lib/am/Makefile.am (dist_am_DATA): Add check2.am.
+ * tests/Makefile.am (AUTOMAKE_OPTIONS): Use `parallel-tests'.
+ (clean-local): Renamed from distclean-local.
+ * tests/defs.in: Drop VERBOSE handling, not needed here any more.
+
+2009-03-12 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Rename `silent' mode to `silent-rules' mode.
+ * automake.in (define_verbose_var, verbose_flag)
+ (define_verbose_tagvar, handle_options, handle_languages)
+ (handle_configure, parse_arguments): Rename the `silent' option
+ to `silent-rules', so it coincides with the `--silent-rules'
+ command line option; adjust all code and comments.
+ * lib/Automake/Options.pm (_process_option_list): Likewise.
+ * doc/automake.texi (Invoking Automake, Libtool Flags, Options):
+ Likewise.
+ * NEWS: Adjust.
+ * tests/dollarvar.test, tests/silent.test, tests/silent2.test,
+ tests/silent3.test, tests/silent4.test, tests/silent5.test,
+ tests/silent6.test, tests/silent7.test: Likewise.
+ Suggestion by Jan Engelhardt.
+
+2009-03-11 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ `silent' mode unconditionally overrides portability-recursive.
+ * automake.in (parse_arguments): Don't handle a global `silent'
+ option here; instead, ...
+ (handle_options): ... handle the "normal" `silent' option here.
+ Override `portability-recursive' here, at the last point we deal
+ with options, instead ...
+ * lib/Automake/Options.pm (_process_option_list): ... of here.
+ * tests/silent6.test: Replace unportable make snippet, remove
+ FIXME note, add more test cases of options passed in the various
+ locations.
+
+ Drop extra line from compile rules when `silent' is not used.
+ * lib/am/depend2.am [!%FASTDEP%]: Only use the `%VERBOSE%
+ @AM_BACKSLASH@' extra line if ?VERBOSE?.
+ Report by Ralf Corsepius.
+
+2009-03-10 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Keep `--silent-rules' across triggered automake reruns.
+ * automake.in (usage): Reformat to be a bit clearer.
+ (handle_configure): Remove substitutions %STRICTNESS% and
+ %USE-DEPS% in favor of a new substitution %AUTOMAKE-OPTIONS%
+ that carries over all needed flags.
+ * lib/am/configure.am (%MAKEFILE-IN%): Adjust rule.
+ * tests/flavor.test: New test, to ensure --$flavor (gnu,
+ gnits, foreign, cygnus), --ignore-deps, and --silent-rules are
+ preserved across automake reruns.
+ * tests/Makefile.am: Update.
+
+2009-03-09 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Provide variables for silencing of user rules.
+ * automake.in (handle_languages): Always define `AM_V_GEN' and
+ `AM_V_at'.
+ * doc/automake.texi (Options): Document these flags.
+ * tests/silent7.test: New test.
+ * tests/Makefile.am: Update.
+
+ Redo variable naming for `silent' machinery.
+ The public variables are named `AM_V_' plus the compiler
+ short-hand now, e.g.: AM_V_CC, AM_V_CXXLD, AM_V_GEN. The
+ dispatch variables are internal details and begin with
+ `am__v_'.
+ * automake.in (verbose_var): Update comment.
+ (verbose_private_var): New function. Order functions so that
+ ones not needed outside this section are listed first.
+ (verbose_dispatch): Remove, no need to factor this.
+ (define_verbose_var, define_verbose_libtool): Use
+ verbose_private_var.
+ (define_verbose_tagvar): Likewise; and simplify.
+ Report by Jan Engelhardt.
+
+ Let -Wportability turn on/off the portability-recursive channel.
+ * lib/Automake/ChannelDefs.pm (switch_warning): switch
+ `portability-recursive' channel as well if changing the
+ `portability' channel.
+ * tests/dollarvar2.test: New test.
+ * tests/Makefile.am: Update.
+
+2009-03-07 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ New automake command line option `--silent-rules'.
+ * automake.in (parse_arguments): Accept `--silent-rules; let it
+ override command line warning settings.
+ (usage): Document it.
+ * doc/automake.texi (Invoking Automake): Document it.
+ * NEWS: Update.
+ * tests/dollarvar.test: Also test `--silent-rules'.
+ * tests/pr300-ltlib.test: Use `$MAKE V=1' to enable verbose
+ output, which is matched later in the test.
+ * tests/silent6.test: New test.
+ * tests/Makefile.am: Update.
+
+ Documentation and tests for the `silent' option.
+ * NEWS: Update.
+ * doc/automake.texi (Invoking Automake): `silent' turns off some
+ portability warnings.
+ (Libtool Flags): `silent' silences libtool.
+ (Options): Document the `silent' flag.
+ * tests/dollarvar.test, tests/silent.test, tests/silent2.test,
+ tests/silent3.test, tests/silent4.test, tests/silent5.test: New
+ tests.
+ * tests/Makefile.am: Update.
+ * Makefile.am (maintainer-check): Ignore `DESTDIR' and `V' when
+ checking for make variables that should not be overridden from
+ the command line.
+
+2009-03-07 Jan Engelhardt <jengelh@medozas.de>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Implement `silent' build rules.
+ * automake.in (ccer): New field in the language structure.
+ Initialize it for all registered languages.
+ (verbose_var, verbose_flag, verbose_dispatch)
+ (silent_flag, define_verbose_var, define_verbose_tagvar)
+ (define_verbose_libtool): New functions.
+ (handle_languages, handle_programs, handle_libraries)
+ (handle_ltlibraries, handle_configure)
+ (define_compiler_variable, define_linker_variable)
+ (define_per_target_linker_variable): Use them where appropriate
+ to define variables to implement the silent output machinery.
+ * lib/Automake/Options.pm (_process_option_list): Accept
+ `silent', turning off `portability-recursive'.
+ * lib/am/depend2.am: Add %VERBOSE% and %SILENT% prefixes where
+ appropriate.
+ * lib/am/lex.am: Likewise.
+ * lib/am/library.am: Likewise.
+ * lib/am/ltlibrary.am: Likewise.
+ * lib/am/program.am: Likewise.
+ * lib/am/yacc.am: Likewise.
+ * m4/init.m4 (AM_INIT_AUTOMAKE): Substitute, but do not define,
+ AM_BACKSLASH.
+ * tests/defs.in: Unset `V', to avoid influencing inner tests.
+
+2009-03-07 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ New channel `portability-recursive'.
+ Add new channel for portability warnings about recursive make
+ variable expansions `$(var1$(var2))'. Enable it alongside
+ `-Wportability'.
+ * lib/Automake/ChannelDefs.pm (Automake::ChannelDefs): Register
+ channel `portability-recursive'.
+ * lib/Automake/Variable.pm (_VARIABLE_CHARACTERS)
+ (_VARIABLE_RECURSIVE_PATTERN): New variables.
+ (check_variable_expansions): Diagnose recursive variable
+ expansions through the new channel.
+
+2009-03-14 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * NEWS: Update.
+
+2009-03-12 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Ignore warnings from autom4te about Libtool macros.
+ * tests/ltinstloc.test: When testing for presence of warnings,
+ filter out any that are not interesting for this test, e.g.,
+ warnings about installed files or about bogusly named cache
+ variables in libtool.m4, emitted by recent Autoconf when older
+ Libtool is used.
+
+2009-03-09 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Relax depcomp test for MSVC to not require minuso.
+ * m4/depend.m4 (_AM_DEPENDENCIES): When checking the msvisualcpp
+ and msvcmsys depmodes, do not require `-c -o' to work just yet.
+ It is not needed by the depcomp script for these depmodes, and
+ works around the ordering issue between the tests.
+ Report by Peter Rosin.
+
+2009-03-09 Peter Rosin <peda@lysator.liu.se>
+
+ * tests/compile2.test: Fix typo.
+
+2009-03-07 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Improve NetBSD 'make -n' output for many standard targets.
+ * automake.in (handle_tags): Let .MAKE depend on
+ `tags-recursive' and `ctags-recursive' if appropriate.
+ (handle_all): Likewise for `all'.
+ (do_check_merge_target): Likewise for `check-am' and `check'.
+ * lib/am/ansi2knr.am (.MAKE): Depend on %ANSI2KNR-DIR%/ansi2knr.
+ * lib/am/install.am [%?maybe_BUILT_SOURCES%] (.MAKE): Depend on
+ `install'.
+ * tests/maken3.test, tests/maken4.test: New tests.
+ * tests/Makefile.am: Update.
+
+ Improve `make -n dist' and `make -n distcheck' for GNU make.
+ Ensure that `make -n dist' and `make -n distcheck' do not change
+ files, due to GNU make executing rules containing `$(MAKE)'.
+ * lib/am/distdir.am (distdir): Separate the creation of
+ `$(distdir)/$$subdir' for `$(DIST_SUBDIRS)' and the recursion
+ into the `$(DIST_SUBDIRS)' in two separate rule commands.
+ (distcheck): Exit recursive rule early when run with `make -n',
+ as detected by a witness file.
+ * tests/maken.test, tests/maken2.test: New tests.
+ * tests/Makefile.am: Update.
+ * NEWS: Update.
+
+2009-03-07 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Solaris make testsuite fixes.
+ * tests/check10.test: When a rule fails, Solaris make will
+ output the complete command that failed; in this case the test
+ suite driver. Adjust the test to not bogusly match lines from
+ the driver, rather than its output.
+ * tests/distcleancheck.test: Avoid triggering VPATH rewriting,
+ not desirable in this test.
+ * tests/specflg10.test: Use BUILT_SOURCES to specify an
+ intermediate target, so Solaris make knows what to do.
+
+ testsuite: SKIP compile tests if configure found no compiler.
+ * tests/depend6.test: configure will exit 77 if AC_PROG_CC found
+ no working compiler. Allow the test to be SKIPped in that case.
+ * tests/postproc.test: Likewise.
+ * tests/pr243.test: Likewise.
+ * tests/pr266.test: Likewise.
+
+ Fix maintainer-check fallout.
+ * tests/compile2.test: Use `Exit', not `exit'.
+
+2009-03-07 Peter Breitenlohner <peb@mppmu.mpg.de>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Extract correct man section from files in man_MANS.
+ * lib/am/mans.am: Extract correct man section in the presence of
+ multiple dots in the file base name and/or directory components.
+ * tests/man5.test: New test case.
+ * tests/Makefile.am: Update.
+
+2009-03-06 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/automake.texi (maintainer-mode): Fix logic in
+ AM_MAINTAINER_MODE description.
+ * THANKS: Update.
+ Report by Daniel Kahn Gillmor.
+
+2009-03-05 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/gnupload: Change conffile name to `.gnuploadrc'.
+
+2009-03-04 William Pursell <bill.pursell@gmail.com>
+
+ Replace bare `automake' with `@command{automake}' or `Automake'.
+ * doc/automake.texi: Avoid bare `automake' in the manual,
+ replacing occurrences with `@command{automake}' when the command
+ is meant, and `Automake' when speaking about the software
+ package in general.
+
+2009-03-04 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/depcomp: Various portability and quoting nits.
+
+ reformat gnupload script.
+ * lib/gnupload: Reformat and reindent.
+
+ gnupload touchups.
+ * lib/gnupload (conffile): New variable. Use throughout.
+ (dry_run): Use `false' and `:' values. Show, don't execute,
+ gpg signing commands upon --dry-run.
+ (usage): Typo and formatting fixes. Mention that commands are
+ applied in order.
+ (argument loop): Factorize a bit, fix quoting.
+ (dprint, mkdirective, mksymlink, upload): Formatting and
+ portability fixes.
+
+2009-03-04 Sergey Poznyakoff <gray@gnu.org>
+
+ Various gnupload improvements.
+ Add support for uploading to download.gnu.org.ua.
+ Add support for a .gnupload configuration file.
+ Support creating and removing symlinks.
+ Allow for several operations in a single invocation.
+ Add debugging features.
+ * lib/gnupload: New options --delete, --symlink, --rmsymlink,
+ --symlink-regex, --dry-run; support `--' to separate options and
+ commands from files. New target download.gnu.org.ua. Expand
+ `.gnupload' file contents before command line arguments.
+ (usage): Expand.
+ (dprint, mkdirective, mksymlink, upload): New functions.
+ * THANKS: Update.
+
+2009-03-03 Peter Rosin <peda@lysator.liu.se>
+
+ Add depmode=msvcmsys for Microsoft Visual C++ on MSYS.
+ * lib/depcomp [msvisualcpp]: Fork fewer processes. Filter out
+ libtool in the preprocessor invocation (as is done in
+ depmode=cpp). Silence compiler stderr.
+ [msvcmsys]: New depmode as a derivative of depmode=msvisualcpp.
+ msvcmsys transforms any backslashes into forward slashes to
+ make the grep in depend.m4 match, instead of the "cygpath -u"
+ that is used in msvisualcpp.
+
+2009-03-03 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+ Peter Rosin <peda@lysator.liu.se>
+
+ Fix w32 path handling in the `compile' script.
+ * lib/compile: Handle colons and backslashes in win32 paths.
+ * tests/compile2.test: New test.
+ * tests/Makefile.am: Update.
+ Report and initial patch by Peter Rosin.
+
+2009-03-03 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix `use constant' usage for MSYS Perl 5.6.0.
+ * automake.in (QUEUE_MESSAGE, QUEUE_CONF_FILE, QUEUE_LOCATION)
+ (QUEUE_STRING): Define using one `use constant' each; as perl
+ 5.6.0 (on MSYS) does not understand `use constant { ... }'.
+ * THANKS: Update.
+ Report by Peter Rosin.
+
+2009-03-01 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix recursive html and install-* doc rules for BSD make.
+ * automake.in (%required_targets): Add html-am,
+ install-html-am, install-dvi-am, install-pdf-am, install-ps-am,
+ install-info-am.
+ * tests/txinfo32.test: New test.
+ * tests/Makefile.am: Update.
+
+ Fix comment typo.
+ * lib/am/distdir.am (distcheck): Fix typo in comment.
+
+ Ignore generated files below doc/amhello for git.
+ * doc/amhello/.gitignore: New file.
+
+2009-02-17 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/automake.texi (Program variables): Add cross reference to
+ `Flag Variables Ordering' node.
+ Report by Karl Berry.
+
+2009-01-31 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix mmodely.test to work on Solaris 10.
+ * tests/mmodely.test: Define yylex, to satisfy needed symbol in
+ libfl. Return from main instead of using exit, undeclared.
+ * THANKS: Update.
+ Report by Chris Hoogendyk.
+
+2009-01-30 Karl Berry <karl@freefriends.org>
+
+ * lib/gnupload: Add download URL to --help output.
+
+2009-01-23 Eric Blake <ebb9@byu.net>
+
+ Use no-arg macros via AC_REQUIRE for consistency.
+ * m4/init.m4 (AM_INIT_AUTOMAKE): Require, rather than directly
+ expand, AM_PROG_INSTALL_SH and AM_PROG_INSTALL_STRIP.
+ * configure: Regenerate.
+
+2009-01-20 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Bump copyright years.
+ * aclocal.in (write_aclocal, version): Bump copyright years.
+ * automake.in (gen_copyright, version): Likewise.
+ * doc/automake.texi: Likewise.
+
+2008-12-29 Chris Pickett <chris.pickett@mail.mcgill.ca> (tiny change)
+
+ * doc/automake.texi (LIBOBJS): Clarify overriding of
+ `*_DEPENDENCIES'.
+ * THANKS: Update.
+
+2008-12-21 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Revamp semantics for `missing help2man' and manpage distribution.
+ Previously, `missing help2man' would create a missing man page
+ containing an error message, and exit 1. This does not play
+ well with `make': the next run will see this particular man page
+ as being up to date, and will only error out on the next
+ generated man page, if any; repeat until all pages are done.
+ This patch changes `missing' to exit successfully in this case,
+ but `make dist' will ensure that no such man pages are packaged.
+ * lib/missing: Exit successfully even if we create a replacement
+ page due to missing help2man.
+ * automake.in (make_paragraphs): Define %HAVE-MANS% to be true
+ if this makefile deals with man pages.
+ * lib/am/distdir.am (distdir): If %INSTALL-MAN% and %HAVE-MANS%,
+ check that no man page in $(MANS) contains the replacement text
+ from `missing'.
+ * tests/man4.test: New test.
+ * tests/Makefile.am: Update.
+ * NEWS: Reorder a bit, update.
+ * THANKS: Update.
+ Report by Werner Lemberg and Karl Berry.
+
+ Do not use 'global' for makefile-wide settings.
+ * doc/automake.texi (Linking, Libtool Flags)
+ (Program and Library Variables, Flag Variables Ordering):
+ Reword instances of `global variables' that really mean
+ makefile-wide ones.
+ * THANKS: Update.
+ Report by Andreas Bergmeier.
+
+ Fix config.status depfiles failure.
+ * m4/depout.m4 (_AM_OUTPUT_DEPENDENCY_COMMANDS): Commands are
+ again a single shell brace group, so they are correctly skipped
+ when dependencies are turned off. The failure is noisy with
+ ksh only.
+ * tests/depend6.test: New test.
+ * tests/Makefile.am: Adjust.
+ * THANKS: Update.
+ Report and different suggested patch by Markus Duft.
+
+2008-12-21 Zoltan Rado <z.rado@chello.hu> (tiny change)
+
+ * doc/automake.texi (DESTDIR): Fix a couple of typos.
+ * THANKS: Update.
+
+2008-12-13 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix nonportable sed script in 'missing'.
+ * lib/missing: In sed script, do not use ';' after 't' commands.
+
+2008-12-07 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ PR automake/531:
+ * doc/automake.texi (amhello Explained)
+ (Mixing Fortran 77 With C and C++): Fix broken links to
+ Autoconf manual.
+ Report by Michael Ploujnikov.
+
+2008-12-07 Michael Ploujnikov <ploujj@gmail.com> (tiny change)
+
+ * doc/automake.texi (Optional, Future of aclocal): Various
+ spelling and grammar fixes.
+ * THANKS: Update.
+
+2008-12-03 William Pursell <bill.pursell@gmail.com>
+
+ Simple typographical and grammar errors in automake.texi.
+ * doc/automake.texi: Fix object/article consistency (eg "an
+ flag" becomes "a flag"), correct minor punctuation errors, etc.
+
+ * doc/automake.texi (Auxiliary Programs, Python, Rebuilding):
+ Replace 'configure' with '@command{configure}' as appropriate.
+
+2008-11-29 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fixup release rules.
+ * Makefile.am (cvs-diff): Remove.
+ (git-dist): Do not use clcommit any more. Use new-style tag
+ name. Pass $(AM_MAKEFLAGS) to $(MAKE).
+ (git-diff): Adjust.
+ (git-release): Do not upload to sources.redhat.com.
+
+2008-11-27 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix portability issues in distcleancheck_listfiles doc example.
+ * doc/automake.texi (Dist): In the `distcleancheck_listfiles'
+ code example, add `.' path, for Solaris `find', also rewrite so
+ `{}' appears only once and as separate argument, for Posix.
+ * tests/distcleancheck.test: New test.
+ * tests/Makefile.am: Update.
+ * THANKS: Update.
+ Report by Jan Engelhardt and Andreas Schwab.
+
+2008-11-27 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+ Jim Meyering <jim@meyering.net>
+
+ Cope with whitespace in $MISSING and $install_sh.
+ * configure.ac (am_AUTOHEADER): New substitution, save the value
+ of $AUTOHEADER before AM_INIT_AUTOMAKE may add $MISSING.
+ * tests/defs.in: Use am_AUTOHEADER.
+ * lib/am/install.am: Fix typo.
+ * m4/install-sh.m4 (AM_PROG_INSTALL_SH): Add suitable
+ single-quote quoting to install_sh, but only if needed.
+ * m4/missing.m4 (AM_MISSING_HAS_RUN): Add suitable double-quote
+ quoting to MISSING, but only if needed.
+ * m4/sanity.m4 (AM_SANITY_CHECK): Abort configure if `pwd` or
+ $srcdir contain shell meta-characters that cannot be handled;
+ space and tab are allowed in the former only.
+ * tests/sanity.test: New test.
+ * tests/Makefile.am: Adjust.
+ * NEWS: Update.
+ Reports by Jim Meyering and others.
+
+2008-11-24 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Let `missing' also work with versioned and prefixed programs.
+ * lib/missing: Ignore prefixes of `gnu-', `gnu', and `g' when
+ testing for known programs; also, ignore suffixes.
+ * tests/missing.test: Amend test.
+ * NEWS, THANKS: Update.
+ Report by Tim Rice.
+
+2008-11-23 William Pursell <bill.pursell@gmail.com>
+
+ * doc/automake.texi (Macro search path, Extending aclocal)
+ (Local Macros, Serials, Public macros, Directories)
+ (Conditional Subdirectories, Nesting Packages)
+ (Building a program, Libtool Modules)
+ (Program and Library Variables, Default _SOURCES, LIBOBJS):
+ Correct verb/object tense agreement, swap some words,
+ and general trivial cleanup.
+
+2008-11-22 William Pursell <bill.pursell@gmail.com>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/automake.texi (VPATH Builds, Nested Packages)
+ (Length limitations, Auxiliary Programs, Invoking Automake)
+ (Requirements, Optional): Fix typos and grammaros, correct URL
+ to 'config' source repository. Rewrite description of AC_SUBST.
+ (true): Cross-reference to `Default _SOURCES' node.
+
+2008-11-22 William Pursell <bill.pursell@gmail.com>
+
+ * configure.ac: Quote APIVERSION.
+
+2008-11-22 Jim Meyering <meyering@redhat.com>
+
+ * tests/xz.test: Fix typo introduced by Ralf in last patch.
+
+ Add xz compression support.
+ * NEWS: Mention xz as well as lzma (xz will displace lzma).
+ * automake.in (handle_dist): Recognize dist-xz.
+ (make_paragraphs): Map XZ to dist-xz.
+ * doc/automake.texi (Dist): Add dist-xz.
+ (Options): Likewise.
+ * lib/Automake/Options.pm (_process_option_list): Accept
+ dist-xz.
+ * lib/am/distdir.am (dist-xz): New rule.
+ (dist dist-all): Add command to create an xz-compressed tarball.
+ (distcheck): Handle xz-compressed tarballs just like the others.
+ * tests/xz.test: New file, based on nogzip.test.
+ * tests/Makefile.am (TESTS): Add xz.test.
+
+2008-11-22 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ When installing COPYING, recommend adding the file to VCS.
+ * automake.in (require_file_internal): If installing `COPYING',
+ mention that we install the GPLv3 file and recommend adding the
+ file to version control.
+ * doc/automake.texi (Invoking Automake): Point to `Gnits' node
+ for `--add-missing'.
+ (Gnits): Clarify semantics: that for strictness gnu or higher,
+ INSTALL is installed, and that COPYING is installed as GPLv3
+ if no COPYING file exists.
+ * tests/license2.test: New test.
+ * tests/Makefile.am: Update.
+ * NEWS, THANKS: Update.
+ Report by Brian Cameron.
+
+2008-11-20 William Pursell <bill.pursell@gmail.com>
+
+ * doc/automake.texi (Timeline): Fix typos and grammaros.
+
+2008-11-12 Karl Berry <karl@freefriends.org>
+
+ New gnupload option --delete to remove archive files.
+ * lib/gnupload: Accept --delete to remove files from
+ alpha.gnu.org or ftp.gnu.org.
+
+2008-11-12 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Testsuite fixes for ksh.
+ * tests/check10.test: Add ':' as last command in subshell, for
+ zero exit status of the subshell.
+ * tests/parallel-am.test: Do not let failing 'unset' of
+ nonexistent variable exit the test.
+ * tests/parallel-am2.test: Likewise.
+ * tests/parallel-am3.test: Likewise.
+
+2008-11-11 Charles Wilson <libtool@cwilson.fastmail.fm> (tiny change)
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Cleanup config.lt in case LT_OUTPUT is in use.
+ * lib/am/libtool.am [TOPDIR_P] (distclean-libtool): clean up
+ config.lt as well as libtool.
+ * tests/libtoo11.test: New test.
+ * tests/Makefile.am: Update.
+ * NEWS: Update.
+
+2008-11-11 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * INSTALL, lib/INSTALL, lib/config.guess, lib/config.sub,
+ lib/texinfo.tex: Sync from upstream.
+
+2008-11-10 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Update to GFDL 1.3.
+ * doc/fdl.texi: Update to GFDL 1.3.
+ * doc/automake.texi (GNU Free Documentation License): Adjust.
+ * NEWS: Update.
+
+ * NEWS: Fix typos.
+ * automake.in: Fix typos in comments. Remove extraneous
+ whitespace.
+
+2008-11-06 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Cope with absent Perl modules threads and Thread::Queue.
+ * automake.in: Instead of `use threads', use `require threads;
+ import threads' inside a BEGIN section. Likewise for
+ Thread::Queue.
+ * lib/Automake/ChannelDefs.pm (Automake::ChannelDefs): Likewise.
+ * lib/Automake/tests/Condition-t.pl: Likewise.
+ * lib/Automake/tests/DisjConditions-t.pl: Likewise.
+ * configure.ac: Likewise, use `require' and `import'.
+ Report by Eric Blake, fix suggested by Ben Pfaff.
+
+2008-11-04 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Multiple 'make uninstall' should not fail even for TEXINFOS.
+ * lib/am/texinfos.am (uninstall-info-am): Do not fail due to
+ install-info if the installed file does not exist (any more).
+ * tests/txinfo26.test: Issue multiple `make uninstall'.
+ * tests/instmany-mans.test: Likewise.
+ * tests/instmany-python.test: Likewise.
+ * tests/instmany.test: Likewise.
+ * tests/txinfo26.test: Likewise.
+ * NEWS: Update.
+
+2008-11-03 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ New public macro AM_SUBST_NOTMAKE.
+ * m4/substnot.m4 (AM_SUBST_NOTMAKE): New public macro; invoke
+ _AM_SUBST_NOTMAKE with arguments.
+ * doc/automake.texi (Optional): Document it.
+ * NEWS: Update.
+ * tests/subst4.test: New test.
+ * tests/Makefile.am: Update.
+ Suggestion by Bruno Haible.
+
+ Fix regression introduced by AM_DEFAULT_SOURCE_EXT.
+ * automake.in (handle_source_transform): Use the right variable
+ when determining whether to apply the old rule for the libtool
+ library default source name.
+ Testsuite failure exposed by Bob Proulx' build daemon.
+
+2008-11-02 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ New maintainer target release-stats.
+ * Makefile.am (release-stats): New target, to help computing the
+ entries in the statistics table in automake.texi.
+ * doc/automake.texi (Releases): Reformat a bit. Add number of
+ generated files. Add entry for 1.10.1.
+
+ Choose default source extension: AM_DEFAULT_SOURCE_EXT.
+ * automake.in (handle_source_transform): Accept unconditional
+ literal extension in AM_DEFAULT_SOURCE_EXT as override for the
+ default source extension `.c'. If set, ignore the old default
+ source rule for libtool libraries.
+ * doc/automake.texi (Default _SOURCES): Document this.
+ * NEWS: Update.
+ * tests/specflg10.test: New test.
+ * tests/Makefile.am: Update.
+ Suggestion by Akim Demaille.
+
+ Fix maintainer-check failure.
+ * tests/parallel-am.test: Rename variable to not match pattern
+ used in maintainer-check.
+
+2008-10-27 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * NEWS: Fix typo.
+ Spotted by Jim Meyering.
+
+2008-10-26 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Parallel automake --add-missing: serialized file installs.
+ * automake.in (QUEUE_CONF_FILE, QUEUE_LOCATION, QUEUE_STRING):
+ New serialization keys.
+ ($required_conf_file_queue): New file global.
+ (queue_required_conf_file, require_queued_conf_file): New
+ functions, to queue and dequeue requirements for aux dir files.
+ (require_conf_file): Enqueue if needed.
+ (get_number_of_threads): Can do threads with --add-missing now.
+ (handle_makefiles_threaded): Let worker threads enqueue, let
+ master attend to queued requirements at the right time.
+ * tests/parallel-am.test: Explain the purpose of the include
+ chain used here.
+ * tests/parallel-am2.test: Also cope with --add-missing.
+ * tests/parallel-am3.test: New test, test absence of races with
+ concurrent same-file installs stemming from --add-missing.
+ * tests/Makefile.am: Adjust.
+
+ Implement serialization for Locations.
+ * lib/Automake/Location.pm (serialize, deserialize): New
+ functions. They allows to serialize a Location in an array, and
+ to restore a Location from a thread queue. The API is
+ unsymmetric (array vs. queue) because enqueuing data needs to
+ happen atomically.
+
+ Parallel automake: ordered output messages.
+ * lib/Automake/Channels.pm (%_default_options): New options
+ `ordered' default enabled, `queue', default zero (no queue),
+ `queue_key' default undefined.
+ (_merge_options): Ensure `ordered' channels cannot have fatal
+ messages or backtrace output.
+ (_enqueue, _dequeue): New functions, to push messages onto a
+ Thread::Queue, and output messages from such a queue, suitably
+ weeded for duplicates in the same manner as _print_message.
+ (_print_message): If the channel is ordered and has an
+ associated queue, then enqueue messages instead of printing
+ them.
+ (setup_channel_queue, pop_channel_queue): New functions,
+ to set a Thread::Queue for channels, and to flush a queue.
+ * lib/Automake/ChannelDefs.pm: Unset channel option `ordered'
+ for fatal, automake, and verb channels.
+ * automake.in (QUEUE_MESSAGE): New global constant, used as
+ serialization key.
+ (handle_makefiles_threaded): Create message queues for each
+ input file; workers queue messages, and the master outputs them
+ ordered, using the new Channels.pm functions.
+ * tests/parallel-am.test: Also check for ordered output (in the
+ absence of --add-missing races).
+ * tests/parallel-am2.test: New test; check for ordered output of
+ warning and (regular) error messages.
+ * tests/Makefile.am: Adjust.
+
+ Parallel automake execution: AUTOMAKE_JOBS.
+ * lib/Automake/Config.in (perl_threads): New global.
+ * automake.in: Use it. If the perl supports interpreter-based
+ threading, then use `threads' and `Thread::Queue'.
+ (handle_makefile, handle_makefiles_serial): New functions,
+ factored out from main.
+ (get_number_of_threads): New function, compute number of threads
+ to use, based on environment variable `AUTOMAKE_JOBS' and number
+ of independent makefiles.
+ (handle_makefiles_threaded): New function. Spawn threads, use
+ thread queue to distribute handling the different makefiles.
+ Collect $exit_code values from threads.
+ (main): Use new functions.
+ * aclocal.in: No threads here.
+ * configure.ac: Substitute PERL_THREADS; enabled with perl >=
+ 5.7.2 and when ithreads are available.
+ * bootstrap (dosubst): Likewise.
+ * Makefile.am (do_subst): Likewise.
+ * lib/Automake/Makefile.am (do_subst): Likewise.
+ * lib/Automake/ChannelDefs.pm: Use `Automake::Config' and
+ `threads'.
+ (verb): Prepend thread ID (tid) to verbose messages.
+ * lib/Automake/Channels.pm (msg): Before exiting, flush stderr,
+ needed for worker threads.
+ * lib/Automake/tests/Makefile.am (TESTS_ENVIRONMENT): Also
+ include the build tree path, so Config.pm is found.
+ * tests/parallel-am.test: New test.
+ * tests/Makefile.am: Update.
+ * doc/automake.texi (Invoking Automake): Document AUTOMAKE_JOBS.
+ * NEWS, THANKS: Update.
+ Report about long execution times by Joakim Tjernlund and others.
+
+2008-10-26 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Minor file checking optimization: set_dir_cache_file.
+ * lib/Automake/FileUtils.pm (set_dir_cache_file): New function.
+ * automake.in (require_file_internal): Instead of resetting the
+ cache when a file has been installed, simply correct the cache
+ using set_dir_cache_file.
+
+ No uniquifying for fatal, prog_error, and verbose messages.
+ There is no point in dropping critical messages, even if they
+ are duplicates (unlikely to happen unless they have been sent
+ as non-critical messages before), and verbose messages should
+ enable to show progress, even using duplicate statements.
+ * lib/Automake/ChannelDefs.pm (fatal, automake, verb): Set
+ `uniq_part' to `UP_NONE' when registering these channels.
+
+ Fix 'config.status --file=... depfiles' with new Autoconf.
+ * m4/depout.m4 (_AM_OUTPUT_DEPENDENCY_COMMANDS): Eval
+ $CONFIG_STATUS contents if we detect the quoting used by
+ Autoconf 2.62 and newer for --file=.
+ * tests/depend5.test: New test.
+ * tests/Makefile.am: Update.
+ * NEWS, THANKS: Update.
+ Report by Sam Steingold against gnulib.
+
+2008-10-26 Johan Dahlin <jdahlin@async.com.br>
+
+ Support for Python 3.0, drop support for pre-2.0.
+ * lib/py-compile: Do not import string; use sys.stdout.write
+ instead of print, files.split instead of string.split.
+ * m4/python.m4 (AM_PATH_PYTHON): Also look for python3 and
+ phython3.0; do not look for python1.5. Use sys.stdout.write.
+ (AM_PYTHON_CHECK_VERSION): Do not use string; adjust to xrange
+ removal in Python 3.0, and changed semantics of map.
+ * doc/automake.texi (Python, Hard-Coded Install Paths): Update
+ Python versions mentioned in the manual, using 2.5 everywhere.
+ * NEWS, THANKS: Update.
+
+2008-10-22 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/Automake/Channels.pm (@chain): Drop unused variable.
+
+ Cleanup of per-input global variables in automake.in.
+ * automake.in ($output_vars, $output_all, $output_header)
+ ($output_rules, $output_trailer): Fix comment, and sort
+ declarations in the order they will appear in the output.
+ ($all_target): Unused variable, remove.
+ (Variables not reset by &initialize_per_input.): New section,
+ clarify that %am_file_cache is not reset.
+ (initialize_per_input): Reset $am_file_name, $am_relative_dir,
+ $in_file_name, $relative_dir, and $topsrcdir to `undef' rather
+ than the empty string; $topsrcdir was not reset at all. Sort
+ remaining variables in the same order as in the section
+ `Variables reset by &initialize_per_input'.
+
+ Let stderr output end up on fd 2 in testsuite.
+ * tests/defs.in (AUTOMAKE_run): Output recorded stderr on file
+ descriptor 2.
+ * tests/getopt.test: Fix erroneous multiple redirection,
+ uncovered by above change.
+
+2008-10-19 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix DisjConditions module to be thread-safe for perl >= 5.7.2.
+ Self-hashes of blessed references are not correctly transported
+ through thread creation. This patch fixes that by recreating
+ the hashes upon thread creation with a CLONE special subroutine,
+ which is automatically invoked by new enough Perl versions.
+ * lib/Automake/DisjConditions.pm (CLONE): New special
+ subroutine to fix self hashes upon thread creation.
+ * lib/Automake/tests/Condition-t.pl: New, sister test to
+ Condition.pl, but spawns a new threads after each creation of a
+ new condition; skip test if perl is too old or ithreads are not
+ available.
+ * lib/Automake/tests/DisjConditions-t.pl: Likewise.
+ * lib/Automake/tests/Makefile.am (TESTS): Add them.
+
+2008-10-18 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix comment typos.
+ * automake.in (require_file_internal): Fix typos in comments.
+ * m4/amversion.in: Likewise.
+ * lib/Automake/Variable.pm: Likewise.
+ * lib/Automake/XFile.pm: Likewise.
+
+ Diagnose unsupported uses of `backname' helper function.
+ * automake.in (backname): Error out if the path points outside
+ the directory it started in.
+
+2008-10-12 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Nicer 'make dist' output.
+ * lib/am/distdir.am (distdir): Hide the complex script
+ used for computing the relative subdirs; echo the sub-make
+ command.
+
+2008-10-12 William Pursell <bill.pursell@gmail.com> (tiny patch)
+
+ * tests/defs.in: Fix comment typo.
+
+2008-10-12 William Pursell <bill.pursell@gmail.com>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix grammar w.r.t. plurals in test reports.
+ * lib/am/check.am: Fix singular/plural forms in test reports.
+ * tests/check10.test: New test.
+ * tests/Makefile.am: Update.
+
+2008-10-08 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Require texi2dvi in tests, makeinfo may not be enough.
+ * tests/txinfo16.test: RHEL 5.2 has makeinfo and texi2dvi in
+ separate packages, so also list the latter as required, as the
+ test generates DVI and/or PDF output (through distcheck).
+ * tests/txinfo18.test: Likewise.
+ * tests/txinfo21.test: Likewise.
+ * tests/txinfo22.test: Likewise.
+ * tests/txinfo3.test: Likewise.
+ * tests/version7.test: Likewise.
+ * THANKS: Update.
+ Report by Alexander Martens.
+
+ Fix bootstrap to remove read-only directories right.
+ * bootstrap: Remove automake-$APIVERSION correctly.
+
+2008-10-06 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Improve test coverage of current TESTS semantics.
+ * tests/check8.test: New test, for subdir tests and setting of
+ $srcdir.
+ * tests/check9.test: New test, check @substituted@ TESTS.
+ * tests/Makefile.am: Update.
+
+2008-10-05 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * m4/minuso.m4 (AM_PROG_CC_C_O): Work around shell quoting issue
+ with AIX sh; fixes depcomp6.test failure.
+ * NEWS, THANKS: Update.
+ Report by Rainer Tammer.
+
+ Print captured output before failing.
+ * tests/acloca14.test, tests/acloca17.test, tests/acloca18.test,
+ tests/aclocal.test, tests/acsilent.test, tests/alpha.test,
+ tests/check4.test, tests/color.test, tests/fn99.test,
+ tests/fn99subdir.test, tests/help.test, tests/init.test,
+ tests/lisp8.test, tests/missing3.test, tests/pr220.test,
+ tests/python11.test, tests/python4.test, tests/python5.test,
+ tests/unused.test, tests/version8.test: When Exit is called
+ after a command that has stdout or stderr redirected to a file
+ for later inspection, output the file before failing the test.
+
+ Fix some comment typos.
+ * automake.in: Fix some comment typos.
+ * lib/Automake/Condition.pm: Likewise.
+ * lib/Automake/DisjConditions.pm: Likewise.
+ * lib/Automake/Variable.pm: Likewise.
+ * lib/Automake/tests/DisjConditions.pl: Likewise.
+
+2008-09-22 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * tests/aclibobj.test: Fix race condition.
+
+2008-09-21 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix man page creation without installed files.
+ * doc/Makefile.am (update_mans): Use wrappers in tests/
+ directory.
+ ($(srcdir)/aclocal-$(APIVERSION).1): Use versioned wrapper as
+ input program to help2man.
+ ($(srcdir)/automake-$(APIVERSION).1): Likewise.
+ Report by Eric Blake.
+
+2008-09-20 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Remove unneeded per-rule *INSTALL variables.
+ * NEWS: Update.
+ * lib/am/data.am (%DIR%%PRIMARY%_INSTALL): Remove.
+ (install-%DIR%%PRIMARY%): Adjust.
+ * lib/am/libs.am (%DIR%LIBRARIES_INSTALL): Remove.
+ (install-%DIR%LIBRARIES): Adjust.
+ * lib/am/ltlibs.am (%DIR%LTLIBRARIES_INSTALL): Remove.
+ (install-%DIR%LTLIBRARIES): Adjust.
+ * lib/am/progs.am (%DIR%PROGRAMS_INSTALL): Remove.
+ (install-%DIR%PROGRAMS): Adjust.
+ * lib/am/python.am (%DIR%PYTHON_INSTALL): Remove.
+ (install-%DIR%PYTHON): Adjust.
+ * lib/am/scripts.am (%DIR%SCRIPT_INSTALL): Remove.
+ (install-%DIR%SCRIPTS): Adjust.
+
+ Compactify program rules using ternary operators.
+ * lib/am/progs.am (install-%DIR%PROGRAMS): Uglify^WCompactify
+ using ternary operators `%KEY?TRUE:FALSE%'.
+ (uninstall-%DIR%PROGRAMS): Likewise.
+
+ New doc section about command line length limits.
+ * doc/automake.texi (Length limitations): New node.
+ (Alternative): `nobase_' is not always equivalent to several
+ base variables.
+ (Install): Mention multi-file install.
+ * NEWS: Expand on the issue, list some more user-visible
+ consequences.
+
+ Install nobase_lib_LTLIBRARIES before bin_PROGRAMS.
+ * automake.in (generate_makefile): If nobase_lib_LTLIBRARIES are
+ used, add an ugly hack to install them before bin_PROGRAMS, just
+ like done with lib_LTLIBRARIES.
+ * tests/ltorder.test: Add program, to expose this.
+
+ Do not reorder nobase ltlib installation.
+ This patch changes back the order of installation of nobase
+ LTLIBRARIES to that in which files are listed in the variables.
+ It does not fix the issue of strict dependency ordering, as
+ implied by *_LIBADD, but as before allows to steer the order by
+ listing the libraries in nobase_*_LTLIBRARIES appropriately.
+ As an advantage over the state of 1.10, multiple consecutive
+ nobase libraries to be installed in the same directory are
+ passed to libtool in one invocation.
+ * lib/am/ltlib.am (install-%DIR%LTLIBRARIES) [!%?BASE%]: Do not
+ reorder libraries upon installation. Remove spurious empty
+ line.
+ * tests/ltorder.test: New test.
+ * tests/Makefile.am: Update.
+
+ Fix -rpath arguments for nobase_*_LTLIBRARIES.
+ * automake.in (handle_ltlibraries): New hash %instsubdirs to
+ track the dirname of nobase ltlibraries, and tack it onto the
+ end of the -rpath argument. Also, fix the warning about ltlibs
+ installed in multiple locations to fit a bit better.
+ * tests/pr300-ltlib.test: Expose this bug here.
+ * tests/ltinstloc.test: New test.
+ * tests/Makefile.am: Update.
+ * NEWS: Update.
+
+ Man pages for automake and aclocal.
+ * configure.ac (HELP2MAN): New substitution.
+ * doc/Makefile.am (dist_man1_MANS, MAINTAINERCLEANFILES)
+ (update_mans): New macros.
+ ($(srcdir)/aclocal-$(APIVERSION).1)
+ ($(srcdir)/automake-$(APIVERSION).1): New rules, generate
+ man pages from the command line help with help2man.
+ ($(srcdir)/aclocal.1, $(srcdir)/automake.1): New rules, for
+ `.so' man page links to the versioned pages.
+ * NEWS: Update.
+
+2008-09-13 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Faster install for libtool outputs.
+ * lib/am/ltlib.am (install-%DIR%LTLIBRARIES): Invoke `libtool
+ --mode=install' with multiple libraries at once.
+ (%DIR%LTLIBRARIES_INSTALL): No need to use install_sh any more.
+ * lib/am/progs.am (install-%DIR%PROGRAMS): Likewise, remove much
+ of the libtool special-casing by invoking it for multiple
+ programs at once.
+
+2008-09-07 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fast install and uninstall for SCRIPTS.
+ * lib/am/scripts.am [%?INSTALL%]: Include inst-vars.am
+ independent of `%?BASE%'.
+ (install-%DIR%SCRIPTS): Install multiple scripts at once,
+ using awk and a number of sed scripts.
+ (uninstall-%DIR%SCRIPTS): Compute the installed names, and
+ remove them, all at once.
+ (%DIR%SCRIPT_INSTALL) [!BASE]: No need to use install-sh any
+ more.
+
+ Multi-file install for PROGRAMS.
+ * lib/am/progs.am (install-%DIR%PROGRAMS): Allow to install
+ several programs with one install invocation, when not using
+ libtool; employs some trickery to cater for nobase_, $(EXEEXT),
+ create needed directories, libtool, while only forking a
+ constant number of times in the fast path; uses awk and sed also
+ in the default path.
+ (%DIR%PROGRAMS_INSTALL) [!BASE]: No need to use install-sh any
+ more.
+
+ Enhance cleaning of programs in libtool mode.
+ * lib/am/progs.am (clean-%DIR%PROGRAMS) [?LIBTOOL?]: Fork less
+ often, avoid removing programs twice if $(EXEEXT) is empty.
+ * tests/nobase-libtool.test: Also test PROGRAMS, in order to
+ exercise the code path.
+ * THANKS: Update.
+ Report by Toralf Förster.
+
+2008-09-07 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+ Jim Meyering <jim@meyering.net>
+
+ Reliable multi-file install for man pages.
+ * lib/am/mans.am: Include inst-vars.am.
+ (install-man%SECTION%): Gather lists of man pages to install,
+ and install up to 40 of those that do not have to be renamed
+ at once. Fail if installation of any file fails.
+ (uninstall-man%SECTION%): Rewrite to use fewer sed invocations.
+ * doc/automake.texi (Man pages): Hint the user to the fast path.
+ Indentation fix.
+ * tests/instmany-mans.test: New test.
+ * tests/Makefile.am: Update.
+
+2008-09-07 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Faster `make uninstall'; fast install for JAVA.
+ * lib/am/inst-vars.am (am__nobase_strip_setup)
+ (am__nobase_strip): New macros.
+ (am__nobase_list): Factorize.
+ * lib/am/data.am (uninstall-%DIR%%PRIMARY%): Use them, for a
+ constant number of forks per uninstall.
+ * lib/am/libs.am (uninstall-%DIR%LIBRARIES): Likewise.
+ * lib/am/lisp.am (uninstall-%DIR%LISP): Likewise.
+ * lib/am/progs.am (uninstall-%DIR%PROGRAMS): Fast uninstall.
+ * lib/am/python.am (uninstall-%DIR%PYTHON): Fast uninstall.
+ Echo all `rm' commands that are are executed.
+ * lib/am/java.am (install-%DIR%JAVA, uninstall-%DIR%JAVA):
+ Fast install and uninstall.
+
+ AIX ranlib dislikes spaces in the argument.
+ * lib/am/libs.am (install-%DIR%LIBRARIES): Fix instsh.test
+ failure on AIX due to ranlib and whitespace in the directory.
+ * THANKS: Update.
+ Report by John F Trudeau.
+
+ Fail upon install or ranlib failure, part two.
+ * lib/am/java.am (install-%DIR%JAVA): Fail upon install failure.
+ * lib/am/lisp.am (install-%DIR%LISP): Likewise.
+ * lib/am/ltlib.am (install-%DIR%LTLIBRARIES): Likewise.
+ * lib/am/libs.am (install-%DIR%LIBRARIES): Likewise, for
+ `install' as well as `ranlib'.
+ * lib/am/progs.am (install-%DIR%PROGRAMS): If `install' fails,
+ return its exit failure, not 1.
+ * tests/instfail.test: New test, for PROGRAMS (without libtool),
+ LIBRARIES, including nobase variants.
+ * tests/instfail-info.test: Likewise, for TEXINFOS.
+ * tests/instfail-java.test: Likewise, for JAVA.
+ * tests/instfail-libtool.test: Likewise, for PROGRAMS (with
+ libtool) and LTLIBRARIES.
+ * tests/Makefile.am: Adjust.
+
+ Exit upon `install' failure, part one.
+ * lib/am/data.am (install-%DIR%%PRIMARY%): Exit if any install
+ command fails.
+ * lib/am/python.am (install-%DIR%PYTHON): Likewise.
+ * lib/am/scripts.am (install-%DIR%SCRIPTS): Likewise.
+ * lib/am/texinfos.am (install-dvi-am, install-html-am)
+ (install-info-am:, install-pdf-am): Likewise.
+ * tests/instmany.test: New test, for SCRIPTS, DATA, and HEADERS.
+ * tests/instmany-python.test: New test, for PYTHON.
+ * tests/Makefile.am: Adjust.
+
+2008-09-06 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix multi-file installation for files in srcdir.
+ For files that can live in the build tree or the source tree,
+ we have to expect that prepending `$(srcdir)/' to each name
+ will let the install command line exceed length limitations.
+ Thus use a new macro, $(am__base_list), to install in chunks
+ of 40 files, similar to what we do for nobase_* files. There,
+ lower the limit to 40, too.
+ * lib/am/inst-vars.am (am__install_max): Lower to 40.
+ (am__base_list): New macro.
+ * lib/am/data.am (install-%DIR%%PRIMARY%) [%?BASE%]: Use it.
+ * lib/am/texinfos.am (install-dvi-am, install-html-am)
+ (install-info-am, install-pdf-am, install-ps-am): Likewise.
+
+2008-09-06 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Use `Exit' instead of `exit' in test suite.
+ Cater to Bourne shells like Solaris sh that do not pass the
+ `exit' argument as status to the cleanup trap.
+ * Makefile.am (maintainer-check): Check that here-documents
+ use only `END' or `EOF' as delimiter in the test suite.
+ Check that, outside of here-documents, the tests do not use
+ `exit' with an argument, but use `Exit' instead.
+ * tests/defs.in (Exit): New function. Use it throughout,
+ starting with the introduction of the exit trap.
+ * tests/aclibobj.test, tests/acloca10.test, tests/acloca11.test,
+ tests/acloca12.test, tests/acloca13.test, tests/acloca14.test,
+ tests/acloca15.test, tests/acloca16.test, tests/acloca17.test,
+ tests/acloca18.test, tests/acloca19.test, tests/acloca20.test,
+ tests/acloca21.test, tests/acloca22.test, tests/aclocal.test,
+ tests/aclocal3.test, tests/aclocal4.test, tests/aclocal5.test,
+ tests/aclocal6.test, tests/aclocal7.test, tests/aclocal8.test,
+ tests/aclocal9.test, tests/acoutbs.test, tests/acoutbs2.test,
+ tests/acoutnoq.test, tests/acoutpt.test, tests/acoutpt2.test,
+ tests/acoutqnl.test, tests/acsilent.test, tests/acsubst.test,
+ tests/acsubst2.test, tests/all.test, tests/alloca.test,
+ tests/alloca2.test, tests/alpha.test, tests/alpha2.test,
+ tests/amassign.test, tests/ammissing.test, tests/amopt.test,
+ tests/amsubst.test, tests/ansi.test, tests/ansi10.test,
+ tests/ansi2.test, tests/ansi3.test, tests/ansi3b.test,
+ tests/ansi4.test, tests/ansi5.test, tests/ansi6.test,
+ tests/ansi7.test, tests/ansi8.test, tests/ansi9.test (main),
+ tests/ar.test, tests/ar2.test, tests/asm.test, tests/asm2.test,
+ tests/asm3.test, tests/automake.test, tests/auxdir.test,
+ tests/auxdir2.test, tests/auxdir3.test, tests/auxdir4.test,
+ tests/backsl.test, tests/backsl2.test, tests/backsl3.test,
+ tests/backsl4.test, tests/badline.test, tests/badopt.test,
+ tests/badprog.test, tests/block.test, tests/bsource.test,
+ tests/canon-name.test, tests/canon.test, tests/canon2.test,
+ tests/canon3.test, tests/canon4.test, tests/canon5.test,
+ tests/ccnoco.test, tests/ccnoco2.test, tests/check.test,
+ tests/check2.test, tests/check3.test, tests/check4.test,
+ tests/check5.test, tests/check6.test, tests/check7.test,
+ tests/checkall.test, tests/clean.test, tests/clean2.test,
+ tests/colneq.test, tests/colneq2.test, tests/colon.test,
+ tests/colon2.test, tests/colon3.test, tests/colon4.test,
+ tests/colon5.test, tests/colon6.test, tests/colon7.test,
+ tests/color.test (test_no_color), tests/commen10.test,
+ tests/comment.test, tests/comment2.test, tests/comment3.test,
+ tests/comment4.test, tests/comment5.test, tests/comment6.test,
+ tests/comment7.test, tests/comment8.test, tests/comment9.test,
+ tests/compile.test, tests/compile_f90_c_cxx.test,
+ tests/compile_f_c_cxx.test, tests/cond.test, tests/cond10.test,
+ tests/cond11.test, tests/cond13.test, tests/cond14.test,
+ tests/cond15.test, tests/cond16.test, tests/cond17.test,
+ tests/cond18.test, tests/cond19.test, tests/cond2.test,
+ tests/cond20.test, tests/cond21.test, tests/cond22.test,
+ tests/cond27.test, tests/cond3.test, tests/cond37.test,
+ tests/cond39.test, tests/cond4.test, tests/cond40.test,
+ tests/cond41.test, tests/cond5.test, tests/cond6.test,
+ tests/cond7.test (AC_INIT), tests/cond8.test, tests/cond9.test,
+ tests/condd.test, tests/condhook.test, tests/condinc.test,
+ tests/condinc2.test, tests/condlib.test, tests/condman.test,
+ tests/condman2.test, tests/conf2.test, tests/confdeps.test,
+ tests/conff.test, tests/conff2.test, tests/confh.test,
+ tests/confh4.test, tests/confh5.test, tests/config.test,
+ tests/confincl.test, tests/conflnk.test, tests/conflnk2.test,
+ tests/conflnk3.test, tests/conflnk4.test, tests/confsub.test,
+ tests/confvar.test, tests/confvar2.test, tests/copy.test,
+ tests/ctarget1.test, tests/cxx.test, tests/cxx2.test,
+ tests/cxxansi.test, tests/cxxcpp.test, tests/cxxlibobj.test,
+ tests/cxxlink.test, tests/cxxnoc.test, tests/cxxo.test,
+ tests/cygwin32.test, tests/dash.test, tests/defs.in (else),
+ tests/defun.test, tests/defun2.test, tests/dejagnu.test,
+ tests/dejagnu2.test, tests/dejagnu3.test, tests/dejagnu4.test,
+ tests/dejagnu5.test, tests/dejagnu6.test, tests/dejagnu7.test,
+ tests/depacl2.test, tests/depcomp.test, tests/depcomp2.test,
+ tests/depcomp3.test, tests/depcomp4.test, tests/depcomp5.test,
+ tests/depcomp6.test, tests/depcomp7.test, tests/depdist.test,
+ tests/depend.test, tests/depend2.test, tests/depend3.test,
+ tests/depend4.test, tests/destdir.test, tests/dirforbid.test,
+ tests/dirlist.test, tests/dirlist2.test, tests/discover.test,
+ tests/distcom2.test, tests/distcom3.test, tests/distcom4.test,
+ tests/distcom5.test, tests/distcom6.test, tests/distcom7.test,
+ tests/distdir.test, tests/distname.test, tests/dollar.test,
+ tests/double.test, tests/dup2.test, tests/else.test,
+ tests/empty.test, tests/empty2.test, tests/empty3.test,
+ tests/empty4.test, tests/exdir.test, tests/exdir2.test,
+ tests/exdir3.test, tests/exeext.test, tests/exeext2.test,
+ tests/exeext3.test, tests/exeext4.test, tests/exsource.test,
+ tests/ext.test, tests/extra.test, tests/extra2.test,
+ tests/extra3.test, tests/extra4.test, tests/extra5.test,
+ tests/extra6.test, tests/extra7.test, tests/f90only.test,
+ tests/flibs.test, tests/fn99.test, tests/fn99subdir.test,
+ tests/fnoc.test, tests/fo.test, tests/fonly.test,
+ tests/fort1.test, tests/fort2.test, tests/fort4.test,
+ tests/fort5.test, tests/fortdep.test, tests/fpinst2.test,
+ tests/fpinstall.test, tests/gcj.test, tests/gcj2.test,
+ tests/gcj3.test, tests/gcj4.test, tests/gcj5.test,
+ tests/getopt.test, tests/gettext.test, tests/gettext2.test,
+ tests/gettext3.test, tests/gnits.test, tests/gnits2.test (main),
+ tests/gnits3.test, tests/gnumake.test, tests/gnuwarn.test,
+ tests/gnuwarn2.test, tests/header.test, tests/help.test,
+ tests/hosts.test, tests/implicit.test, tests/include.test,
+ tests/include2.test, tests/info.test, tests/init.test,
+ tests/insh2.test, tests/install2.test, tests/installdir.test,
+ tests/instdat.test, tests/instdat2.test, tests/instexec.test,
+ tests/insthook.test, tests/instman.test, tests/instman2.test,
+ tests/instsh.test, tests/instsh2.test, tests/instsh3.test,
+ tests/instspc.test, tests/interp.test, tests/interp2.test,
+ tests/java.test, tests/java2.test, tests/java3.test,
+ tests/javaprim.test, tests/javasubst.test, tests/ldadd.test,
+ tests/ldflags.test, tests/lex.test, tests/lex2.test,
+ tests/lex3.test, tests/lex4.test, tests/lex5.test (main),
+ tests/libexec.test, tests/libobj10.test, tests/libobj11.test,
+ tests/libobj12.test, tests/libobj13.test, tests/libobj2.test,
+ tests/libobj3.test, tests/libobj4.test, tests/libobj5.test,
+ tests/libobj7.test, tests/libobj8.test, tests/library.test,
+ tests/library2.test, tests/library3.test, tests/libtoo10.test,
+ tests/libtool.test, tests/libtool2.test, tests/libtool3.test
+ (main), tests/libtool4.test, tests/libtool5.test,
+ tests/libtool6.test, tests/libtool7.test, tests/libtool8.test,
+ tests/libtool9.test (main), tests/license.test,
+ tests/link_c_cxx.test, tests/link_dist.test,
+ tests/link_f90_only.test, tests/link_f_only.test,
+ tests/link_fc.test, tests/link_fccxx.test, tests/link_fcxx.test,
+ tests/lisp2.test, tests/lisp3.test, tests/lisp4.test,
+ tests/lisp5.test, tests/lisp6.test, tests/lisp7.test,
+ tests/lisp8.test, tests/listval.test, tests/location.test,
+ tests/longlin2.test, tests/longline.test, tests/ltcond.test,
+ tests/ltcond2.test, tests/ltconv.test, tests/ltdeps.test,
+ tests/ltlibobjs.test, tests/ltlibsrc.test, tests/lzma.test,
+ tests/maintclean.test, tests/make.test, tests/makej.test,
+ tests/makevars.test, tests/man.test, tests/man2.test,
+ tests/man3.test, tests/mclean.test, tests/mdate.test,
+ tests/mdate2.test, tests/mdate3.test, tests/mdate4.test,
+ tests/mdate5.test, tests/missing.test, tests/missing2.test,
+ tests/missing3.test, tests/missing4.test, tests/missing5.test,
+ tests/missing6.test, tests/mkinst2.test, tests/mkinst3.test,
+ tests/mkinstall.test, tests/mmode.test, tests/mmodely.test,
+ tests/multlib.test, tests/nobase-libtool.test,
+ tests/nobase-python.test, tests/nobase.test, tests/nodef.test,
+ tests/nodef2.test, tests/nodep.test, tests/nodep2.test,
+ tests/nodepcomp.test, tests/nodist.test, tests/nodist2.test,
+ tests/nodist3.test, tests/nogzip.test, tests/nogzip2.test,
+ tests/noinst.test, tests/noinstdir.test, tests/nolink.test,
+ tests/nostdinc.test, tests/notrans.test, tests/number.test,
+ tests/objc.test, tests/objc2.test, tests/obsolete.test,
+ tests/order.test, tests/outdir.test, tests/output-order.test,
+ tests/output.test, tests/output10.test, tests/output11.test,
+ tests/output12.test, tests/output13.test, tests/output2.test,
+ tests/output3.test, tests/output4.test, tests/output5.test,
+ tests/output6.test, tests/output7.test, tests/output8.test,
+ tests/output9.test, tests/overrid.test, tests/parse.test,
+ tests/pluseq.test, tests/pluseq10.test, tests/pluseq2.test,
+ tests/pluseq3.test, tests/pluseq4.test, tests/pluseq5.test,
+ tests/pluseq6.test, tests/pluseq7.test, tests/pluseq8.test,
+ tests/pluseq9.test, tests/postproc.test, tests/ppf77.test,
+ tests/pr2.test, tests/pr204.test, tests/pr211.test,
+ tests/pr220.test, tests/pr224.test, tests/pr229.test,
+ tests/pr243.test, tests/pr266.test, tests/pr279-2.test,
+ tests/pr279.test, tests/pr287.test, tests/pr300-lib.test,
+ tests/pr300-ltlib.test, tests/pr300-prog.test, tests/pr307.test,
+ tests/pr401.test, tests/pr401b.test, tests/pr401c.test,
+ tests/pr72.test, tests/pr87.test, tests/pr9.test,
+ tests/prefix.test, tests/primary.test, tests/primary2.test,
+ tests/primary3.test, tests/proginst.test, tests/python.test,
+ tests/python10.test, tests/python11.test, tests/python12.test,
+ tests/python2.test, tests/python3.test, tests/python4.test,
+ tests/python5.test, tests/python6.test, tests/python7.test,
+ tests/python8.test, tests/python9.test, tests/recurs.test,
+ tests/recurs2.test, tests/regex.test, tests/remake.test,
+ tests/remake2.test, tests/remake3.test, tests/remake4.test,
+ tests/remake5.test, tests/remake6.test, tests/remake7.test,
+ tests/req.test, tests/reqd.test, tests/reqd2.test,
+ tests/rulepat.test, tests/scripts.test, tests/seenc.test,
+ tests/sinclude.test, tests/space.test, tests/specflg.test,
+ tests/specflg2.test, tests/specflg3.test, tests/specflg6.test,
+ tests/specflg7.test, tests/specflg8.test, tests/specflg9.test,
+ tests/spell.test, tests/spell2.test, tests/spell3.test,
+ tests/spelling.test, tests/spy.test, tests/srcsub.test,
+ tests/srcsub2.test, tests/stamph2.test, tests/stdinc.test,
+ tests/stdlib.test, tests/stdlib2.test, tests/strip.test,
+ tests/subcond.test, tests/subcond2.test, tests/subcond3.test,
+ tests/subdir.test, tests/subdir2.test, tests/subdir3.test,
+ tests/subdir4.test, tests/subdir5.test, tests/subdir6.test,
+ tests/subdir7.test, tests/subdir8.test, tests/subdir9.test,
+ tests/subdirbuiltsources.test, tests/subobj.test,
+ tests/subobj10.test, tests/subobj2.test, tests/subobj3.test,
+ tests/subobj4.test, tests/subobj5.test, tests/subobj6.test,
+ tests/subobj7.test, tests/subobj8.test, tests/subobj9.test,
+ tests/subobjname.test, tests/subpkg.test, tests/subpkg2.test,
+ tests/subpkg3.test, tests/subst.test, tests/subst2.test,
+ tests/subst3.test, tests/substre2.test, tests/substref.test,
+ tests/substtarg.test, tests/suffix.test, tests/suffix10.test,
+ tests/suffix11.test, tests/suffix12.test, tests/suffix2.test,
+ tests/suffix3.test, tests/suffix4.test, tests/suffix5.test,
+ tests/suffix6.test, tests/suffix7.test, tests/suffix8.test,
+ tests/suffix9.test, tests/symlink.test, tests/symlink2.test,
+ tests/symlink3.test, tests/syntax.test, tests/tags.test,
+ tests/tagsub.test, tests/tar.test, tests/tar2.test,
+ tests/tar3.test, tests/target-cflags.test,
+ tests/targetclash.test, tests/transform.test, tests/txinfo.test,
+ tests/txinfo10.test, tests/txinfo13.test, tests/txinfo16.test,
+ tests/txinfo17.test, tests/txinfo18.test, tests/txinfo19.test,
+ tests/txinfo2.test, tests/txinfo20.test, tests/txinfo21.test,
+ tests/txinfo22.test, tests/txinfo23.test, tests/txinfo24.test,
+ tests/txinfo25.test, tests/txinfo26.test, tests/txinfo27.test,
+ tests/txinfo28.test, tests/txinfo29.test, tests/txinfo3.test,
+ tests/txinfo30.test, tests/txinfo31.test, tests/txinfo4.test,
+ tests/txinfo5.test, tests/txinfo6.test, tests/txinfo7.test,
+ tests/txinfo8.test, tests/txinfo9.test, tests/unused.test,
+ tests/upc.test, tests/upc2.test, tests/upc3.test,
+ tests/vars.test, tests/vars3.test, tests/vartar.test,
+ tests/version.test, tests/version2.test, tests/version3.test,
+ tests/version4.test, tests/version6.test, tests/version7.test,
+ tests/version8.test, tests/vpath.test, tests/vtexi.test,
+ tests/vtexi2.test, tests/warnopts.test, tests/werror.test,
+ tests/werror2.test, tests/whoami.test, tests/xsource.test,
+ tests/yacc.test, tests/yacc2.test, tests/yacc3.test,
+ tests/yacc4.test, tests/yacc5.test, tests/yacc6.test,
+ tests/yacc7.test, tests/yacc8.test, tests/yaccpp.test,
+ tests/yaccvpath.test: Use `Exit $arg' instead of `exit $arg'
+ throughout, except inside created files.
+
+2008-09-04 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Avoid Heisenbug with verbose testing on HP-UX.
+ * tests/output-order.test: Remove spurious redirection line
+ from output for comparison.
+
+ For all possibly-relative subdirs, use $(am__cd).
+ Up to now, $(am__cd) was only used within backquotes, to avoid
+ extraneous output. This patch also uses it for every `cd' to a
+ relative subdir, to prevent CDPATH from entering an unwanted
+ directory.
+ * Makefile.am (maintainer-check): Fix current check for
+ $(am__cd) within backquotes a bit. Add new check for `cd' to a
+ relative subdir.
+ * automake.in (handle_tags, handle_configure): Adjust rules.
+ * lib/am/ansi2knr.am: Likewise.
+ * lib/am/configure.am: Likewise.
+ * lib/am/distdir.am: Likewise.
+ * lib/am/remake-hdr.am: Likewise.
+ * lib/am/subdirs.am: Likewise.
+ * lib/am/tags.am: Likewise.
+ * lib/am/texibuild.am: Likewise.
+
+ Fix nobase-python.test for BSD make.
+ * tests/nobase-python.test: Listing a dependency to be found
+ via VPATH search explicitly, without the path, as a target,
+ will turn off VPATH search for FreeBSD make. So move the
+ creation of the files outside of the Makefile.
+
+2008-09-01 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Implement AM_MAINTAINER_MODE([DEFAULT-MODE]).
+ * m4/maintainer.m4 (AM_MAINTAINER_MODE): Allow for an optional
+ first argument of `enable' or `disable', setting the default.
+ * doc/automake.texi (Optional, maintainer-mode): Document.
+ * tests/mmode.test: New test.
+ * tests/Makefile.am: Adjust.
+ * NEWS: Update.
+ Suggestion by Vincent Lefevre.
+
+2008-08-31 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Copyright year updates.
+ * lib/am/header-vars.am: Update copyright years.
+ * lib/am/remake-hdr.am: Likewise.
+ * lib/am/tags.am: Likewise.
+
+2008-08-28 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * THANKS: Use Cyrillic name instead of ASCII transcription.
+
+2008-08-22 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix rebuilding of removed subdir/Makefile.in files.
+ * lib/am/configure.am (%MAKEFILE-IN%) [?!TOPDIR_P?]: If
+ subdir/Makefile.in was removed, am--refresh would not update
+ it. Fix up for it by running the per-directory rebuild rule.
+ * tests/remake6.test, tests/remake7.test: New tests.
+ * tests/Makefile.am: Adjust.
+ * NEWS, THANKS: Update.
+ Report and initial patch by Ilya N. Golubev.
+
+2008-08-19 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * tests/notrans.test: Use multiple man files of each type.
+
+ Fix maintainer-check failures.
+ * doc/automake.texi (Conditionals): Drop TAB.
+ * tests/missing6.test: Use 'rm -f'.
+
+2008-08-19 Reuben Thomas <rrt@sc3d.org> (tiny patch)
+
+ * doc/automake.texi (Flag Variables Ordering, Per-Object Flags):
+ Fix grammaros.
+
+2008-08-02 Karl Berry <karl@freefriends.org>
+
+ * lib/gnupload: Provide also a simple example.
+
+2008-06-25 Thien-Thi Nguyen <ttn@gnuvola.org>
+
+ Small doc fix.
+ * doc/automake.texi (Public Macros): Close open paren.
+
+2008-06-18 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Introduce macro $(am__mv) to facilitate 'libtool --dry-run'.
+ * lib/am/depend.am (am__mv): New macro, set to 'mv -f'.
+ * lib/am/depend2.am: Use throughout to move the temporary
+ depfile *.Tpo to its final destination *.Po.
+
+2008-06-18 Rafael Espindola <espindola@google.com>
+
+ * lib/config-ml.in: don't handle --enable-shared and --enable-static.
+
+2008-06-18 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/am/inst-vars.am (am__install_max): New variable.
+ (am__nobase_list): Use it.
+
+ Fix conditional rules competing with config.status rules.
+ * automake.in (handle_configure): Teach targets about the
+ conditional config.status rule.
+ * tests/cond39.test: Adjust test to expose this.
+
+ For AC_CONFIG_LINKS(X,X), do not clean X in a non-VPATH build.
+ * automake.in (rewrite_inputs_into_dependencies): Do distribute
+ inputs where input and output name are equal. This relies on
+ the assumption that it only happens with AC_CONFIG_LINKS.
+ (handle_configure) <CONFIG_CLEAN_VPATH_FILES>: New variable, for
+ links where source and dest are equal.
+ * lib/am/clean.am (distclean-generic): Remove, if build tree not
+ equal source tree.
+ * tests/conflnk4.test: New test.
+ * tests/Makefile.am: Adjust.
+ * NEWS: Update.
+
+2008-06-06 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/automake.texi (Extending): Fix ambivalent wording.
+ Report by Ben Pfaff.
+
+2008-06-04 Karl Berry <karl@freefriends.org>
+
+ * doc/automake.texi (Install, Hard-Coded Install Paths): Fix
+ punctuation and markup.
+ (Extending): Improve wording and clarify order semantics of
+ *-local and *-hook targets.
+
+2008-06-01 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/automake.texi (Extending): Fix grammar.
+ Report by Karl Berry.
+
+2008-05-13 Stepan Kasal <skasal@redhat.com>
+
+ Fix typos.
+ * doc/automake.texi (Timeline): Reported by Reuben Thomas.
+ * lib/am/remake-hdr.am: A few typos in comments.
+
+2008-04-10 Eric Blake <ebb9@byu.net>
+
+ Prefer a released version of autoconf.
+ * NEWS: Bump requirement to autoconf 2.62.
+ * m4/init.m4 (AM_INIT_AUTOMAKE): Likewise.
+ * configure.ac: Likewise.
+ (AC_PREREQ): Remove check, done by AM_INIT_AUTOMAKE instead.
+
+ AC_AUTOCONF_VERSION can inadvertently expand to a macro name.
+ * m4/amversion.in (AM_SET_CURRENT_AUTOMAKE_VERSION): Use proper
+ m4 quoting.
+ * aclocal.in (write_aclocal): Likewise.
+ * tests/missing6.test: New test.
+ * tests/Makefile.am (TESTS): Run it.
+ * tests/missing4.test: Adjust.
+
+2008-04-02 Eric Blake <ebb9@byu.net>
+
+ Make gnupload friendlier for VPATH usage.
+ * lib/gnupload: Allow uploads from separate directory.
+
+2008-03-26 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Implement conditional AC_CONFIG_FILES: AM_COND_IF.
+ * automake.in (%ac_config_files_condition): New.
+ (scan_autoconf_config_files): Record condition if any.
+ (scan_autoconf_traces): Trace _AM_COND_IF, _AM_COND_ELSE,
+ _AM_COND_ENDIF, updating @cond_stack as appropriate.
+ (handle_configure): Prefix config.status rule with condition.
+ Check that m4 quotation is done consistently.
+ * m4/cond.m4 (AM_CONDITION): Define `_AM_COND_VALUE_name'
+ with `name' being the name of the condition, to its shell
+ condition.
+ * m4/cond-if.m4: New file.
+ (_AM_COND_IF, _AM_COND_ELSE, _AM_COND_ENDIF): New trace helpers.
+ (AM_COND_IF): New macro, implements conditionals.
+ * m4/Makefile.am: Adjust.
+ * doc/automake.texi (Requirements, Optional, Conditionals):
+ Document AM_COND_IF.
+ * NEWS: Update.
+ * tests/cond39.test, tests/cond40.test, tests/cond41.test,
+ tests/cond42.test, tests/cond43.test: New tests.
+ * tests/Makefile.am: Adjust.
+
+2008-03-24 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/automake.texi (@ovar): New macro, from autoconf.texi.
+ (Python): Use it.
+ Suggestion by Eric Blake.
+
+2008-03-20 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/texinfo.tex: Sync from upstream.
+
+2008-03-17 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/automake.texi (Requirements, Linking, Extending):
+ Fix underfull and overfull lines, fix wording a bit.
+
+ * lib/config.guess, lib/config.sub, lib/texinfo.tex: Sync from
+ upstream.
+
+ * Makefile.am (WGET_SV_GIT_CF): New.
+ (fetch): Pull config.guess and config.sub from git repo now.
+
+ * lib/Autom4te/FileUtils.pm (handle_exec_errors): New argument
+ $hint, show if the executing program does not exist.
+ (xsystem_hint): New function, like xsystem but allows to pass
+ a hint.
+
+2008-03-11 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ Implement the `notrans_' prefix for untransformed manpages.
+ * automake.in (handle_man_pages), lib/am/mans.am: Implement
+ notrans_ prefix for MANS primary and rework dependencies for
+ install-man%SECTION%; use only vars defined in Makefile.am.
+ * doc/automake.texi (Renaming, Uniform, Man pages):
+ Document notrans_ prefix.
+ * NEWS: Update.
+ * tests/notrans.test: New test.
+ * tests/Makefile.am: Update.
+
+ * automake.in (handle_man_pages): Reindent, for next patch.
+
+2008-03-08 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Use `install' with multiple files at once for some primaries.
+ With nobase targets, at most 50 files are installed at once,
+ to avoid quadratic string concatenation and line length limits.
+ This isn't yet done with base targets. One hope is that there,
+ the typical file name length is lower. If this turns out to be
+ a problem, it should be revisited.
+
+ * lib/am/inst-vars.am (am__nobase_list): New helper macro for
+ installation of multiple nobase files at once: sorts and lists
+ files keyed by their target directory.
+ * lib/am/data.am (%DIR%%PRIMARY%_INSTALL): No need to set it to
+ $(install_sh_DATA) any more, not even for nobase targets.
+ (install-%DIR%%PRIMARY%): Split base and nobase cases.
+ Rewrite to pass lists of files which all go in the same
+ directory to `install'. In the nobase case, make use of
+ $(am__nobase_list) and $(MKDIR_P) each directory before
+ populating it. Take care of files in source and build trees,
+ and avoid creating directories where no files are to be
+ installed.
+ * lib/am/libs.am (%DIR%LIBRARIES_INSTALL): Likewise.
+ (install-%DIR%LIBRARIES): Likewise.
+ * lib/am/python.am (%DIR%PYTHON_INSTALL): Likewise.
+ (install-%DIR%PYTHON): Likewise. Also take care to keep note of
+ a list for byte compilation after installation.
+ * lib/am/texinfos.am (install-dvi-am, install-html-am)
+ (install-info-am, install-pdf-am, install-ps-am): Use file lists
+ to install multiple files at once.
+ * NEWS: Update.
+ Suggested by Akim Demaille.
+
+2008-03-08 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Require unreleased Autoconf for fixed AC_PROG_INSTALL.
+ * m4/init.m4 (AM_INIT_AUTOMAKE): Bump AC_PREREQ to 2.61-341,
+ regenerate files.
+ * configure.ac: Also require Autoconf 2.61-341, to catch
+ failure early and provide a sensible error message.
+
+ Drop usage of obsolete macros AC_EXEEXT and AC_OBJEXT.
+ * tests/ansi4.test: Drop AC_OBJEXT and AC_EXEEXT.
+ * tests/ansi6.test: Likewise.
+ * tests/ansi7.test: Likewise.
+ * tests/condlib.test: Likewise.
+ * tests/cygwin32.test: Likewise.
+ * tests/exeext2.test: Likewise.
+ * tests/libobj11.test: Likewise.
+ * tests/library.test: Likewise.
+ * tests/txinfo5.test: Likewise.
+
+2008-03-03 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Skip instsh3.test if `touch -t' does not work.
+ * tests/instsh3.test: Test for `touch -t', fails with Solaris
+ /usr/ucb/touch.
+ * THANKS: Update.
+ Report by Younes Younes.
+
+2008-02-27 Reuben Thomas <rrt@sc3d.org>
+
+ * doc/automake.texi (wildcards): Improve "Why doesn't Automake
+ support wildcards" node's English and sense.
+
+2008-02-23 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/am/check.am (check-TESTS): In the case patterns for
+ XFAILed tests, add literal bracket expression for matching
+ whitespace, as NetBSD 4.99.54 ksh does not understand a
+ bracket expression resulting from variable expansion.
+ * README: Explain how to run the Automake test suite, including
+ setting MAKE to test gmake.
+ Report by Patrick Welche.
+
+2008-02-19 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ PR automake/498
+ * m4/options.m4 (_AM_SET_OPTIONS): Use m4_foreach_w instead of
+ obsolete AC_FOREACH.
+ Report by NightStrike and gurganbl@rose-hulman.edu.
+
+2008-02-17 Colin Watson <cjwatson@debian.org> (tiny change)
+
+ * lib/am/tags.am (ID): Fix typo in workaround for old awk.
+
+2008-02-05 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/.gitignore: Ignore files generated by `make ps pdf html'.
+
+2008-02-05 Reuben Thomas <rrt@sc3d.org>
+
+ * doc/automake.texi (CVS): configure.ac will appear newer, not
+ older, than configure. Use `lexical' instead of `alphabetical'.
+
+2008-01-30 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * tests/man3.test: Avoid `make VAR=value'.
+
+ * tests/subst3.test: New test.
+ * tests/Makefile.am: Update.
+
+ * tests/instsh2.test: Split off testing of `install-sh -C' ...
+ * tests/instsh3.test: ... to this new test, requiring non-root.
+ * tests/Makefile.am: Adjust.
+ * THANKS: Update.
+ Report by Theodoros V. Kalamatianos.
+
+2008-01-23 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * tests/nobase.test: Extend test to generated files.
+
+ * tests/nobase-python.test: New test, nobase for python files.
+ * tests/Makefile.am: Update.
+
+ * tests/nobase.test: Split off libtool part of nobase.test for
+ increased test exposure, to ...
+ * tests/nobase-libtool.test: ... this new test.
+ * tests/Makefile.am: Update.
+
+2008-01-23 Eric Blake <ebb9@byu.net>
+
+ Fix color.test when using BSD grep.
+ * tests/color.test: Ensure that grep can handle non-printing
+ characters.
+
+2008-01-23 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * tests/lisp3.test: Fix typo.
+
+2008-01-22 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/am/mans.am (install-man%SECTION%): Prefer generated manpages
+ over distributed ones.
+ Report and patch by Peter Breitenlohner.
+ * tests/man3.test: New test.
+ * tests/Makefile.am: Update.
+
+2008-01-21 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * tests/tar.test: Skip if no appropriate tar was found.
+
+2008-01-19 NightStrike <nightstrike@gmail.com>
+
+ * doc/automake.texi (Dependency Tracking): Fix typo.
+
+2008-01-19 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/config-ml.in, lib/config.guess, lib/config.sub,
+ lib/symlink-tree: Sync from upstream.
+
+ * Makefile.am (WGET_SV_CVS): Renamed from WGETSGO.
+ (WGET_SV_GIT_AC, WGET_SV_GIT_GL, WGET_GCC): New.
+ (fetch): Update to match current upstream locations.
+
+2008-01-14 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/automake.texi (DESTDIR, Built sources example): Fix wording.
+ * THANKS: Update.
+ Reports and suggestions by William Pursell and nightstrike@gmail.com.
+
+2008-01-13 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Do not fail if `autoupdate' is not present.
+ * tests/obsolete.test: Check for presence of autoupdate. Apparently,
+ FreeBSD may install the other Autoconf programs without a version
+ suffix but not autoupdate.
+
+ Fix Heisenbug trying to unset a sometimes-not-set variable.
+ * tests/check5.test: Do not error out upon `unset TESTS' due to
+ `set -e', in case TESTS was not set.
+ * tests/color.test: Likewise.
+
+ * doc/automake.texi (amhello Explained): Fix odd sentence.
+ Report by nightstrike@gmail.com.
+
+2008-01-12 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * m4/init.m4 (_AC_AM_CONFIG_HEADER_HOOK): Rewrite to be more
+ resistant to different quoting styles of $1.
+
+ Clarify texinfo.tex and TEXINFO_TEX semantics.
+ * doc/automake.texi (Texinfo): Clarify that by default,
+ texinfo.tex is searched in the same directory as the Makefile.am
+ that needs it. Clarify that TEXINFO_TEX has precedence over
+ AC_CONFIG_AUX_DIR, and that it requires the user to install and
+ distribute it.
+ * tests/txinfo22.test: Ensure TEXINFO_TEX is not distributed.
+ * THANKS: Update.
+ Reports by Dilyan Palauzov and Roumen Petrov.
+
+2008-01-11 Bruno Haible <bruno@clisp.org>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * tests/output-order.test: New test, for the stable output fix.
+ * tests/Makefile.am: Update.
+
+2008-01-08 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * Makefile.am (dist-hook): New, ensure world-executable tests.
+ * THANKS: Update.
+ Report by Arto C. Nirkko.
+
+ * tests/acloca20.test: Use `--force' with the second $AUTOCONF,
+ to force update on fast machines where both autoconf invocations
+ happen within the same second.
+ Report by Greg Schafer.
+
+2008-01-07 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * automake.in (scan_autoconf_files): Sort loop over
+ %required_aux_file, for stable verbose output.
+ Report by Bruno Haible.
+
+ * lib/config.guess, lib/config.sub, lib/texinfo.tex: Sync from
+ upstream.
+
+ * tests/ccnoco.test (Mycomp): Use a tighter match for -c -o,
+ to avoid matching for example `LDFLAGS=-Wl,--sort-common'.
+ * THANKS: Update.
+ Report and analysis by Carsten Lohrke and Mike Frysinger.
+
+2008-01-07 Stepan Kasal <skasal@redhat.com>
+
+ * automake.in (handle_texinfo_helper, handle_lib_objects): Fix
+ typos in comments.
+
+2008-01-02 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Bump copyright years.
+ * aclocal.in (write_aclocal, version): Likewise.
+ * automake.in ($gen_copyright, version): Likewise.
+ * doc/automake.texi: Likewise.
+
+2007-12-18 Jim Meyering <meyering@redhat.com>
+
+ * lib/gnupload (GPG): Don't use an absolute path.
+ This reverts part of the 2004-01-28 change.
+
+2007-12-08 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/Automake/FileUtils.pm (open_quote): New function.
+ (update_file, contents): Use it.
+
+ Reword the copyright notices to match what's suggested in GPLv3.
+
+2007-12-08 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * tests/defs.in: Quote $srcdir, $PATH; skip libtool and gettext
+ tests if the absolute source or build tree name contain whitespace.
+
+ Modify some tests for absolute trees containing whitespace.
+ * tests/missing.test: Use "./missing" instead of "`pwd`/missing".
+ * tests/missing2.test: Likewise.
+ * tests/mmodely.test: Add `pwd` to $PATH instead of absolute
+ references to myyacc.sh and mylex.sh.
+ * tests/multlib.test: Likewise for mycc.
+ * tests/txinfo26.test: Skip if `pwd` contains whitespace, as
+ an absolute --srcdir does not work there.
+
+ * INSTALL, lib/INSTALL, lib/config-ml.in, lib/config.guess,
+ lib/config.sub, lib/texinfo.tex: Sync from upstream.
+
+ Fix the distdir target to cope with spaces in absolute file names.
+ * lib/am/distdir.am: Quote all instances of $(distdir) and
+ $(top_distdir). They could contain white space, coming from
+ a toplevel package bootstrapped with an older Automake version.
+ (am__relativize): New macro, taken from gnulib code, written by
+ Bruno Haible.
+ (distdir): Use it to compute relative paths to distdir and
+ top_distdir for enclosed subpackages.
+ Also, quote $(distuninstallcheck_dir).
+ * lib/am/texinfos.am: Likewise, quote $(distdir).
+
+2007-11-26 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Quote file names in tests that can be absolute.
+ * tests/auxdir.test, tests/check3.test, tests/check4.test,
+ tests/compile.test, tests/cond33.test, tests/condhook.test,
+ tests/distdir.test, tests/dollar.test, tests/empty.test,
+ tests/gnits2.test, tests/gnits3.test, tests/include2.test,
+ tests/insthook.test, tests/java.test, tests/libtool7.test,
+ tests/lisp4.test, tests/lisp5.test, tests/lisp6.test,
+ tests/ltcond.test, tests/ltconv.test, tests/mkinst2.test,
+ tests/multlib.test, tests/nobase.test, tests/nodist2.test,
+ tests/obsolete.test, tests/pr287.test, tests/pr300-lib.test,
+ tests/pr300-ltlib.test, tests/pr300-prog.test, tests/python10.test,
+ tests/python3.test, tests/strip.test, tests/transform.test,
+ tests/txinfo13.test, tests/txinfo19.test, tests/txinfo22.test,
+ tests/txinfo23.test, tests/txinfo26.test, tests/txinfo27.test:
+ Likewise.
+
+ Quote @abs_top_builddir@ and @abs_top_srcdir@.
+ * tests/aclocal.in: Likewise.
+ * tests/automake.in: Likewise.
+
+ Fix TAGS and GTAGS rules to cope with whitespace in `pwd`.
+ * lib/am/tags.am (TAGS): Use positional parameters to avoid
+ the need to quote absolute file names.
+ (GTAGS): Quote absolute file name.
+ (CTAGS): Simplify, dropping unused variable `$tags'.
+
+2007-11-25 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/am/ltlib.am (uninstall-%DIR%LTLIBRARIES): Fix another instance
+ of am__strip_dir. Fixes nobase and pr300-ltlib test failures.
+
+2007-11-25 Akim Demaille <akim@lrde.epita.fr>
+
+ Several *-local in a rule do not work.
+ * tests/all.test: Check this case.
+ Use set -e.
+ * tests/Makefile.am (XFAIL_TESTS): Add it.
+
+2007-11-25 Akim Demaille <akim@lrde.epita.fr>
+
+ Fix uses of am__strip_dir.
+ * lib/am/libs.am, lib/am/ltlib.am: Catch up with the change of
+ definition of am__strip_dir.
+
+2007-11-25 Akim Demaille <akim@lrde.epita.fr>
+
+ Define and use register_action.
+ * lib/Automake/Rule.pm: Fix a few typos in the doc.
+ (&rule): Use || to simplify the code.
+ (&register_action): New.
+ Export it.
+ * automake.in (&handle_factored_dependencies, &file_contents_internal):
+ Use it.
+
+2007-11-25 Akim Demaille <akim@lrde.epita.fr>
+
+ * bootstrap: Fix typos on redirections.
+
+2007-11-24 Akim Demaille <akim@lrde.epita.fr>
+
+ Skip comments and empty lines in dirlist in the tests.
+ * defs.in (extra_includes): Skip comments and empty lines in dirlist.
+
+2007-11-24 Akim Demaille <akim@lrde.epita.fr>
+
+ Ternary operator in lib/am files.
+ * automake.in (&transform_token): New.
+ (&transform): Use it.
+ Support %KEY?TRUE:FALSE%.
+ (&make_paragraphs): Adjust the regexp to call %transform.
+ * lib/am/data.am, lib/am/libs.am, lib/am/lisp.am, lib/am/ltlib.am,
+ * lib/am/progs.am, lib/am/python.am, lib/am/scripts.am:
+ Use %KEY?TRUE:FALSE%.
+ * lib/am/inst-vars.am (am__strip_dir): Assign the result to f
+ to be more alike am__vpath_adj.
+ Adjust dependencies.
+
+2007-11-24 Akim Demaille <demaille@gostai.com>
+
+ * automake.in: Normalize white spaces.
+
+2007-11-24 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * configure.ac (ACLOCAL, AUTOMAKE): Fix quoting for rebuilding
+ rules, if the absolute build directory name contains white space.
+
+2007-11-22 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * aclocal.in (trace_used_macros): Quote input files.
+
+ * lib/ylwrap: Cope with white space in `PROGRAM' and `pwd`.
+
+ * lib/am/tags.am (ID, TAGS, CTAGS): Make awk scripts portable again.
+ (CTAGS): Drop unneeded variable `here'.
+
+2007-11-18 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * tests/output13.test: New test.
+ * tests/Makefile.am: Adjust.
+ Prompted by report from Bruno Haible in
+ <https://lists.gnu.org/archive/html/bug-gnulib/2007-10/msg00479.html>.
+
+ Fix signal handling in aclocal.
+ * aclocal.in (unlink_tmp): If invoked by a signal, note so
+ in verbose mode. Reinstall default signal handler and reraise,
+ to transport the interrupt information.
+
+2007-11-13 Bob Proulx <bob@proulx.com>
+
+ Fix color test failure on dumb (and other) terminals.
+ * tests/color.test: Set TERM to `ansi'.
+
+2007-11-12 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Avoid spurious test failure with `make check TESTS=check5.test'.
+ * tests/check5.test: unset TESTS.
+
+ Fix maintainer-check failure.
+ * tests/color.test: unset TESTS, use `make -e' rather than
+ `make MACRO=val'.
+
+2007-11-10 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * configure.ac (AM_INIT_AUTOMAKE): Require version 1.10a.
+
+ * automake.in (handle_tests): Remove debugging leftover.
+
+ Run each test in a process-private subdirectory.
+ * tests/defs.in: Employ a trap to clean up at the end of the
+ test in case the test succeeded. This needs to be revisited
+ because we would like to keep the output of XPASSing tests.
+ Also, note when we were interrupted by a signal. Code taken
+ from Autoconf's _AC_INIT_PREPARE.
+ If $keep_testdirs is set, keep them even for successful tests.
+ * tests/Makefile.am (check-clean-local): New target. Remove all
+ tests subdirs, but also make them writable first. The latter
+ was already needed without per-test subdirs.
+ (distclean-local): Depend upon check-clean-local.
+ * tests/Makefile.in: Regenerate.
+ * tests/.cvsignore, tests/.gitignore: Adjust.
+
+ Fix default includes ordering to be `-I. -I$(srcdir) ...' again.
+ * automake.in (handle_compile): Put -I$(srcdir) before include
+ paths for config headers, as was done before Automake 1.10, but
+ keep uniquified list without multiple adjacent spaces.
+ * doc/automake.texi (Program variables): List include paths
+ in order.
+ * NEWS: Mention 1.10 regression.
+ * tests/stdinc.test: New test.
+ * tests/Makefile.am: Adjust.
+ * THANKS: Update.
+ Report by Kent Boortz.
+
+2007-11-08 Akim Demaille <akim@lrde.epita.fr>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+ Bob Proulx <bob@proulx.com>
+
+ Implement colorized test output.
+ * automake.in (handle_tests): Set COLOR depending on `color-tests'.
+ * configure.ac (AM_INIT_AUTOMAKE): Use `color-tests'.
+ * doc/automake.texi (Tests, Options): Document test results,
+ document new option, document AM_COLOR_TESTS.
+ * lib/Automake/Options.pm (_process_option_list): Handle it.
+ * lib/am/check.am (am__tty_colors): New variable. Enable colored
+ output if TERM is not dumb and depending on AM_COLOR_TESTS and
+ whether stdout is connected to a terminal.
+ (check-TESTS): Use am__tty_colors.
+ * NEWS: Mention color-tests.
+ * tests/color.test: New test.
+ * tests/Makefile.am: Adjust.
+
+2007-11-08 NightStrike <nightstrike@gmail.com> (tiny change)
+
+ For PR automake/526:
+ * doc/automake.texi (Basic Installation): Fix typo.
+
+2007-10-29 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Accommodate for new macro AC_AUTOCONF_VERSION.
+ * aclocal.in (write_aclocal): Use AC_AUTOCONF_VERSION rather
+ than m4_PACKAGE_VERSION. Define the former if not defined.
+ * m4/amversion.in (AM_SET_CURRENT_AUTOMAKE_VERSION): Likewise.
+ * tests/missing4.test: Use AC_AUTOCONF_VERSION.
+
+2007-10-29 Bruno Haible <bruno@clisp.org>
+
+ * doc/automake.texi (Program variables): Clarify that
+ Automake does not put DEFAULT_INCLUDES in AM_CPPFLAGS, but
+ passes it directly to compilation commands.
+
+2007-10-29 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Move to git as primary source repository.
+ * Makefile.am (git-dist, git-release): Renamed and adjusted from ...
+ (cvs-dist, cvs-release): ... these.
+ (git-diff): New target, taken and adjusted from cvs-diff.
+ * Makefile.in: Regenerate.
+ * bootstrap: Adjust.
+ * NEWS: Announce change.
+ * doc/automake.texi (General Operation): cvs-dist is git-dist now.
+ (Timeline): Mention change.
+
+2007-10-09 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * automake.in: Treat extension .sx also like preprocessed
+ assembler (.S), following GCC.
+ * NEWS: Update.
+ * doc/automake.texi (Assembly Support): Adjust.
+ * tests/asm3.test: New test.
+ * tests/Makefile.am: Update.
+
+2007-10-09 Jim Meyering <meyering@redhat.com>
+
+ Add lzma compression support.
+ * NEWS: Mention it.
+ * automake.in (handle_dist): Recognize dist-lzma.
+ (make_paragraphs): Map LZMA to dist-lzma.
+ * doc/automake.texi (Dist): Add dist-lzma.
+ (Options): Likewise.
+ * lib/Automake/Options.pm (_process_option_list):
+ (dist dist-all): Add command to create an lzma-compressed tarball.
+ (distcheck): Handle lzma-compressed tarballs just like the others.
+ * tests/defs.in: Test for lzma, too.
+ * tests/lzma.test: New file, based on nogzip.test.
+ * tests/Makefile.am (TESTS): Add lzma.test.
+ Suggestion from Karl Berry.
+
+2007-09-30 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * automake.in (TARGET_PATTERN): Allow leading digit.
+ * tests/exeext3.test: Adjust to expose this.
+ Report by Claudio Fontana and Laurence Finston.
+
+2007-08-23 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * tests/defs.in (required): For gcj, check whether `gcj -v'
+ works, to avoid broken installations without libgcj.spec.
+ Export $GCJ.
+ * tests/gcj4.test: Setting GCJ not needed any more.
+ * THANKS: Update.
+ Report by Jesse Chisholm.
+
+2007-08-20 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/config-ml.in, lib/config.guess, lib/config.sub,
+ lib/symlink-tree, lib/texinfo.tex: New upstream versions.
+
+2007-08-19 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/automake.texi (gettext): Fix link to gettext manual.
+
+2007-08-18 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ In ChangeLog files, use more-permissive notice rather than GPL,
+ as per usual GNU standards these days.
+
+2007-08-16 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * automake.in (handle_programs): Also clean .libs/_libs
+ directory for _PROGRAMS.
+ * tests/libtoo10.test: New test.
+ * tests/Makefile.am: Update.
+ * THANKS: Update.
+ Report by Guillermo Ontañón.
+
+2007-08-09 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * configure.ac: Actually require version 2.60 in the test for
+ Autoconf, and recommend it in the error messages.
+ * THANKS: Update.
+ Report by Robert Swafford.
+
+2007-07-22 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/automake.texi (VPATH Builds): Fix wording.
+ Report by Reuben Thomas.
+
+2007-07-22 Noah Misch <noah@cs.caltech.edu>
+
+ * tests/subst.test: Move the AC_SUBST into a macro definition.
+ Avoids an error from CVS Autoconf.
+ * THANKS: Update.
+ Report by Benoit Sigoure.
+
+2007-07-22 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+ Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/am/configure.am (%?REGEN-ACLOCAL-M4%): New target
+ $(am__aclocal_m4_deps) without any dependencies, to avoid the
+ "deleted .m4 file" problem.
+ * tests/acloca22.test: New test.
+ * tests/Makefile.am: Update.
+ * NEWS: Update.
+
+2007-07-22 Francesco Salvestrini <salvestrini@gmail.com>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/am/ltlib.am (install-%DIR%LTLIBRARIES)
+ (uninstall-%DIR%LTLIBRARIES): Use $(AM_LIBTOOLFLAGS) and
+ $(LIBTOOLFLAGS).
+ * lib/am/progs.am (install-%DIR%PROGRAMS)
+ (uninstall-%DIR%PROGRAMS): Likewise.
+ * tests/libtool7.test: Update test for `install' and
+ `uninstall' cases.
+ * NEWS, THANKS: Update.
+
+2007-07-16 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/automake.texi: Remove Front-Cover and Back-Cover Texts,
+ this manual is not printed by the FSF.
+
+2007-07-16 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * NEWS: Clarify that COPYING files are not updated.
+
+2007-07-11 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/automake.texi: New Back-Cover Text.
+ Report by Karl Berry.
+
+2007-07-07 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * aclocal.in (version): Fix output to match GCS requirements.
+ * automake.in (version): Likewise.
+ Report by Eric Blake.
+
+ * COPYING, lib/COPYING: Update to GPLv3. All uses changed.
+ * NEWS: Update.
+
+2007-06-30 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/gnupload: Fix shell portability issues with for loops.
+ Report by Karl Berry.
+
+2007-06-23 Paul Eggert <eggert@cs.ucla.edu>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * aclocal.in (write_aclocal): Warn about autoconf
+ incompatibilities instead of making them fatal.
+ * tests/missing4.test: Adjust.
+ * NEWS: Update.
+ Problem reported by Bruno Haible in
+ <https://lists.gnu.org/archive/html/bug-automake/2007-06/msg00010.html>.
+
+2007-05-03 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/automake.texi, lib/Automake/Rule.pm: Fix typos.
+ * automake.in: Likewise.
+ (am_primary_prefixes): Keep the intentional typo there.
+
+2007-04-25 Eric Blake <ebb9@byu.net>
+
+ * doc/stamp-vti: Remove generated file from revision control.
+ * doc/version.texi: Likewise.
+
+2007-04-23 Reuben Thomas <rrt@sc3d.org> (tiny change)
+
+ * doc/automake.texi (Python): Fix typo.
+
+2007-03-30 Eric Blake <ebb9@byu.net>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/mdate-sh (ls_command): Use -n when available to avoid
+ problems with spaces in user/group names.
+ * tests/mdate5.test: New test.
+ * tests/Makefile.am: Adjust.
+
+2007-03-30 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * automake.in (handle_tests): Rewrite XFAIL_TESTS just like
+ TESTS, appending $(EXEEXT), so that matching continues to work
+ on w32.
+ * NEWS: Mention this.
+ * doc/automake.texi (EXEEXT, Extending): Update.
+ * tests/check7.test: New test.
+ * tests/Makefile.am: Adjust.
+ Bug report by Ed Hartnett.
+
+2007-03-30 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * m4/depout.m4 (_AM_OUTPUT_DEPENDENCY_COMMANDS): Again search
+ the whole file, but use sed to reduce the line length.
+ Fixes 1.10 regression. Report by David Byron.
+ * THANKS, NEWS: Update.
+
+2007-03-29 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/depcomp (aix): Rewrite depmode in the spirit of the tru64
+ one. Fixes failure to catch dependencies with libtool and xlc
+ in case of enable_static=no (which is the default on AIX without
+ runtimelinking).
+ * tests/depcomp7.test: Run test once with --disable-shared and
+ once with --disable-static, to expose failure systematically.
+ * NEWS: Update.
+
+2007-03-29 Stepan Kasal <kasal@ucw.cz>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * automake.in (handle_LIBOBJS_or_ALLOCA): Fix the error message.
+ * tests/pr401.test: Update to expose the error.
+ * tests/pr401b.test: Likewise.
+ * tests/pr401c.test: Likewise.
+
+2007-03-28 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * automake.in (scan_autoconf_config_files): Warn about leading
+ `./' in config file names.
+ * tests/canon-name.test: New test.
+ * tests/Makefile.am: Update.
+ * THANKS: Update.
+ Suggestion by Claudio Fontana.
+
+ * tests/yacc6.test: Add the generated headers to `BUILT_SOURCES'
+ as documented in the manual. Fixes parallel make failure.
+ Report by Dieter Jurzitza.
+ * THANKS: Update.
+
+ * ChangeLog, TODO, tests/exdir3.test: Fix copyright notice.
+
+ * TODO: Kill a couple of outdated items.
+ * tests/exdir3.test: New test.
+ * tests/Makefile.am: Update.
+
+2007-01-27 Bruno Haible <bruno@clisp.org>
+
+ * doc/automake.texi (Multiple Outputs): Fix the multiple outputs
+ with locking example.
+
+2007-01-27 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/automake.texi (Subpackages): Fix ambiguous wording.
+ Report and suggestions by Reuben Thomas.
+ * THANKS: Update.
+
+2007-01-10 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * tests/defs.in (is_newest): Cope with multiple newer files.
+ * NEWS: mention `install-sh -C'.
+
+2006-12-25 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/install-sh (initialize_posix_glob): New var.
+ Use it instead of setting posix_glob inline.
+ (posix_glob): Use '?'/''/: instead of ''/yes/no, for convenience.
+ (cmpprog, CMPPROG): New vars, since we use cmp rather than the diff
+ of Akim's patch.
+ Use LC_ALL before invoking 'ls' when we depend on its output format.
+ Don't use awk; just use the shell's builtin features.
+ Clean up $dsttmp if -C detects no installation is needed.
+ * tests/defs.in (is_newest): Renamed from is_younger; the new
+ name is more accurate. All uses changed.
+ (old_timestamp): New var.
+ * tests/instsh2.test: Rewrite to avoid the need for sleeping.
+
+2006-12-25 Akim Demaille <akim@epita.fr>
+
+ * lib/install-sh: Implement install-sh -C.
+ (This patch is the remaining part of the patch proposed in
+ <https://lists.gnu.org/archive/html/automake-patches/2006-10/msg00077.html>.)
+ (usage): Document it.
+ (copy_on_change): New var.
+ * tests/defs.in (is_younger): New function.
+ * tests/instsh2.test: Check install-sh -C.
+
+2006-12-24 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/install-sh: Fix typo in previous patch for handling --.
+ Use more-consistent style for ';;'.
+ Prefer || to if-then-else-:.
+ * tests/install2.test: Rework to avoid set -e problems.
+
+2006-12-24 Akim Demaille <akim@epita.fr>
+
+ Simplify install-sh and its test. This shouldn't change any behavior.
+ (This patch is a subset of the patch proposed in
+ <https://lists.gnu.org/archive/html/automake-patches/2006-10/msg00077.html>.)
+ * lib/install-sh (usage): Use usual GNU style.
+ (dstarg): Rename as...
+ (dst_arg): this for consistency.
+ Simplify quoting of assignments.
+ Sort them.
+ Don't use '\' to continue commands: && suffices.
+ Remove useless "continue" in the argument processing,
+ and factor the shifts.
+ * tests/defs.in: Some improvements to make it set -e clean.
+ Use the traditional ":" trick to protect loops from being empty.
+ Remove an empty straightforward piece of code prepared to define
+ additional variables.
+ Use test instead of [], for consistency.
+ * tests/install2.test: Use set -e, to simplify code.
+
+2006-12-20 Reuben Thomas <rrt@sc3d.org> (tiny change)
+
+ * doc/automake.texi: Fix typo.
+
+2006-11-12 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/Makefile.am: Use $(MAKE) $(AM_MAKEFLAGS) for building
+ amhello, to prevent gmake from invoking make with MAKEFLAGS
+ it does not understand.
+ Report by Patrick Welche.
+
+ * lib/gnupload: Revert last change. Add pointer to upload
+ instructions of the GNU Maintenance Instructions.
+ Suggestion by Karl Berry.
+
+2006-11-08 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/gnupload: Add missing 'gnu' to example URL.
+ Report by Karl Berry.
+
+2006-10-28 Bobby Jack <bobbykjack@yahoo.co.uk> (tiny change)
+
+ * doc/automake.texi (amhello Explained): autoconf creates
+ configure, not configure.ac.
+ * THANKS: Update.
+
+2006-10-20 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/automake.texi (Dist, Dependency Tracking Evolution):
+ Fix some typos.
+ * lib/Automake/Condition.pm: Likewise.
+ * lib/Automake/DisjConditions.pm: Likewise.
+ * lib/Automake/ItemDef.pm: Likewise.
+ * lib/Automake/Options.pm: Likewise.
+ * lib/Automake/Rule.pm: Likewise.
+ * lib/Automake/VarDef.pm: Likewise.
+ * lib/Automake/Variable.pm: Likewise.
+ * lib/Automake/Wrap.pm: Likewise.
+ * lib/Automake/XFile.pm: Likewise.
+ * m4/substnot.m4: Likewise.
+
+2006-10-16 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/gnupload: Update to version 1.1 of directive file.
+
+2006-10-16 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/am/depend2.am (%SOURCEFLAG%): New substitution, goes
+ right before the expanded source file name.
+ * automake.in (%sourceflags): New global: per-extension flag
+ to denote that the next compiler argument is the source file.
+ (scan_autoconf_traces): Trace AC_FC_SRCEXT; initialize
+ %sourceflags accordingly.
+ (handle_single_transform): Store source file extension in...
+ (%lang_specific_files): ...this and...
+ (handle_languages): ...adjust here. Pass flag in SOURCEFLAG.
+ * doc/automake.texi (Optional): Add AC_FC_SRCEXT.
+ (Fortran 9x Support): Update.
+ * tests/fort2.test: New test.
+ * tests/Makefile.am: Adjust.
+ * NEWS, THANKS: Update.
+ Suggested by Steven G. Johnson.
+
+ For PR automake/480.
+ * automake.in (lang_f77_rewrite, lang_fc_rewrite)
+ (lang_ppfc_rewrite, lang_ppf77_rewrite, lang_ratfor_rewrite):
+ return `lang_sub_obj' to support subdir-object mode for the
+ Fortran dialects.
+ * tests/fort4.test, tests/fort5.test: New tests.
+ * tests/Makefile.am: Update.
+ * NEWS, THANKS: Update.
+ Report by Davyd Madeley and Shannon L. Brown.
+
+ * lib/am/header-vars.am (pkglibexecdir): New variable.
+ * automake.in (%standard_prefix): Add it.
+ * doc/automake.texi (Uniform): Document it.
+ (Program Sources): Adjust.
+ * NEWS: Update.
+ * tests/libexec.test: New test.
+ * tests/Makefile.am: Update.
+ Suggested by Eric Blake.
+
+2006-10-15 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/gnupload: Update to version 1.1 of directive file.
+
+ * configure.ac, NEWS: Bump version to 1.10a.
+
+ * configure.ac, NEWS: Bump version to 1.10.
+ * doc/automake.texi (Releases): Update for 1.10.
+
+ * lib/config.sub, lib/texinfo.tex: New upstream versions.
+
+ * lib/am/depend2.am: Typo.
+ * lib/depcomp (scriptversion): Bump, to account for recent changes.
+
+ * doc/automake.texi (Examples): Introduce the example, and point
+ to Hello World.
+ (Hello): Remove this obsolete node.
+
+2006-10-15 Hans Ulrich Niedermann <hun@n-dimensional.de>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ For PR automake/507:
+ * lib/am/distdir.am (distdir): filename-length-max check is not
+ done in sub-packages.
+ * doc/automake.texi (Options): Document this.
+ * tests/fn99subdir.test: New test.
+ * tests/Makefile.am: Update.
+ * THANKS: Update.
+
+2006-10-14 Alfred M. Szmidt <ams@gnu.org> (tiny change)
+
+ * doc/automake.texi (Third-Party Makefiles): Fix typo.
+ * THANKS: Update.
+
+2006-10-14 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * aclocal.in (write_aclocal): Improve warning for mismatched
+ Autoconf version.
+
+ * automake.in: For preprocessed assembler, add `$(DEFS)
+ $(DEFAULT_INCLUDES) $(INCLUDES)' to the compile rule.
+ * doc/automake.texi (Assembly Support): Update.
+ * NEWS: Update.
+ Suggested by Thomas Schwinge and Ralf Corsepius.
+
+ For PR automake/492.
+ * automake.in (output_flag): Set to `-o' for Assembler and
+ preprocessed Assembler, assuming that all understand `-c -o'.
+ * THANKS, NEWS: Update.
+ * tests/subobj10.test: New test.
+ * tests/Makefile.am: Update.
+ Report by Thomas Schwinge.
+
+ * automake.in (%_macro_for_cond): New variable.
+ (cond_stack_if): Use it for better error message about
+ missing dependency tracking conditionals.
+ * tests/asm2.test: New test, modelled after asm.test.
+ * tests/Makefile.am: Adjust.
+ Report by Ralf Corsepius.
+
+ * doc/automake.texi (Options): `no-dependencies' is similar
+ to `--ignore-deps', not `--include-deps'.
+ * m4/as.m4 (AM_PROG_AS): If `no-dependencies', do not invoke
+ _AM_DEPENDENCIES.
+ * tests/nodep2.test: New test.
+ * tests/Makefile.am: Adjust.
+
+ * automake.in (handle_LIBOBJS_or_ALLOCA): If we are in the
+ LIBOBJDIR, then we should not add a DEPDIR prefix.
+ * tests/pr401.test: Update test.
+ * tests/pr401b.test: Likewise.
+ * tests/pr401c.test: Likewise.
+ Report by Jim Meyering and Eric Blake.
+
+ * lib/depcomp (gcc3): Put dependency extraction flags before the
+ `-c' flag, so they appear at the same position as in %FASTDEP%
+ mode in depend2.am. Fixes build failure for FreeBSD's c89,
+ which ignores unknown options only after the first non-option.
+ Bug report against M4 by Nelson H. F. Beebe.
+
+2006-10-14 Bruno Haible <bruno@clisp.org>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * automake.in ($seen_gettext_intl): New variable.
+ (handle_gettext): Consider it.
+ (scan_autoconf_traces): Add AM_GNU_GETTEXT_INTL_SUBDIR to the list.
+ Set $seen_gettext_intl when it is seen.
+ * doc/automake.texi (gettext, Optional): Update.
+ * tests/gettext3.test: New test.
+ * tests/Makefile.am: Update.
+
+2006-10-14 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/install-sh (posix_mkdir): Reject FreeBSD 6.1 mkdir -p -m,
+ which incorrectly sets the mode of an existing destination
+ directory. In some cases the unpatched install-sh could do the
+ equivalent of "chmod 777 /" or "chmod 0 /" on a buggy FreeBSD
+ system. We hope this is rare in practice, but it's clearly worth
+ fixing. Problem reported by Alex Unleashed in
+ <https://lists.gnu.org/archive/html/bug-autoconf/2006-10/msg00012.html>.
+ Also, don't bother to check for -m bugs unless we're using -m;
+ suggested by Stepan Kasal.
+
+2006-10-14 Geoffrey Keating <geoffk@apple.com> (tiny change)
+
+ * m4/multi.m4: Non-default multilibs may be cross compilation.
+
+2006-10-14 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * automake.in: Fix some typos in comments.
+ * lib/Automake/Variable.pm: Likewise.
+
+2006-10-10 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * automake.in (handle_compile): Use subst, for maintainer-check.
+
+2006-10-09 Andreas Köhler <andi5.py@gmx.net> (tiny change)
+
+ For PR automake/505:
+ * lib/am/configure.am (am__CONFIG_DISTCLEAN_FILES):
+ Fix typo: `config.status.lineno', not `configure.status.lineno'.
+
+2006-09-05 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * NEWS: Mention that `install-sh' needs executable permissions.
+ * tests/nobase.test: Adjust.
+ Report by Patrick Welche.
+
+2006-09-01 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/am/check.am (check-TESTS): Fix matching of XFAIL_TESTS
+ against currently running test for the first and last element
+ of $(TESTS): add spacing so Solaris make does VPATH expansion
+ on these words, too.
+ * tests/check6.test: Update.
+
+2006-08-30 Paul Eggert <eggert@cs.ucla.edu>
+
+ For PR automake/501:
+ * lib/am/depend2.am (?GENERIC?%EXT%.o, ?!GENERIC?%OBJ%):
+ Abbreviate output a bit by not bothering to quote the .Po file
+ name (the quoting doesn't suffice in general anyway), and by not
+ bothering to remove junk .Tpo files (as they'll be removed later).
+ This also lets 'make' run faster by avoiding a subshell.
+
+2006-08-30 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * automake.in: Fortran 77 and Fortran should require variables
+ F77 resp. FC to be defined, and suggest the respective Autoconf
+ macros otherwise.
+ * tests/fort1.test: New test.
+ * tests/Makefile.am: Update.
+
+ * tests/ext.test: Add extensions f95, F90, F95.
+
+2006-08-30 Alexandre Duret-Lutz <adl@gnu.org>
+
+ For PR automake/500:
+ * automake.in (handle_compile) <$default_includes>: Do not output
+ the same -I twice. Use @am__isrc@ instead of ` -I$(srcdir)'.
+ * m4/init.m4: Define am__isrc as ` -I$(srcdir)' only in
+ non-VPATH builds since we always have `-I.'.
+ * tests/subpkg.test: Make sure config headers are found in VPATH
+ and non-VPATH builds.
+
+2006-08-28 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/automake.texi, lib/Automake/Rule.pm: Fix some typos.
+ * NEWS: Likewise. Clarify that only one LIBOBJDIR is supported.
+
+2006-08-23 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/Automake/ChannelDefs.pm (usage): Mention that -Wportability
+ is enabled by default with gnu and gnits strictness.
+ Report from Bruno Haible.
+
+2006-08-22 Paul Eggert <eggert@cs.ucla.edu>
+
+ * NEWS: Mark de-ANSI-fication as being obsolete.
+ * doc/automake.texi: Likewise.
+
+2006-08-21 Stepan Kasal <kasal@ucw.cz>
+
+ * Makefile.am, THANKS: Fix typos.
+
+2006-08-20 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * NEWS, configure.ac: Bump version to 1.9c.
+
+ * NEWS, configure.ac: Bump version to 1.9b.
+
+ * Makefile.am (maintainer-check): Check for mkdir_p in automake.in
+ too.
+ * automake.in (require_build_directory): Use MKDIR_P, not mkdir_p.
+
+ * m4/mkdirp.m4: Typo in previous patch.
+
+ * Makefile.am (maintainer-check): Fine-tune the "Unescaped @"
+ check so it doesn't complain about the '@ 's in node "Standard
+ Directory Variables".
+
+ * INSTALL, lib/INSTALL, lib/texinfo.tex, lib/config.sub: New
+ upstream versions.
+
+ * m4/mkdirp.m4 (AM_PROG_MKDIR_P): Prefix mkdir_p with
+ $(top_builddir)/ if it is a relative directory.
+
+2006-08-19 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/am/lex.am, lib/am/yacc.am: Drop the inline rules, always use
+ ylwrap. Suggested by Akim Demaille long ago, to ease maintenance.
+ * automake.in (handle_languages): Do not define MORE-THAN-ONE.
+ (yacc_lex_finish_helper, lang_yacc_finish, lang_lex_finish): Always
+ require ylwrap.
+ * doc/automake.texi (Auxiliary Programs, Yacc and Lex): Update the
+ documentation of ylwrap.
+ * tests/lex.test, tests/lex4.test, tests/mmodely.test,
+ tests/yacc.test, tests/yacc2.test, tests/yacc3.test,
+ tests/yaccpp.test: Adjust.
+
+ * doc/automake.texi (Releases): Update statistics until 1.9.6.
+
+ * Makefile.am (maintainer-check): Check for mkdir_p.
+ * automake.texi (Obsolete macros): Document AM_PROG_MKDIR_P.
+ * lib/am/data.am, lib/am/distdir.am, lib/am/install.am,
+ lib/am/java.am, lib/am/libs.am, lib/am/lisp.am, lib/am/ltlib.am,
+ lib/am/mans.am, lib/am/progs.am, lib/am/python.am,
+ lib/am/scripts.am, lib/am/texinfos.am: Use MKDIR_P instead of mkdir_p.
+ * m4/mkdirp.m4 (AM_PROG_MKDIR_P): Define mkdir_p using $MKDIR_P, not
+ as '$(MKDIR_P)', otherwise it will break `Makefile.in's that use
+ mkdir_p without defining MKDIR_P.
+ * tests/distdir.test, tests/instman.test, tests/txinfo21.test:
+ Adjust.
+
+ * Makefile.am (SUBDIRS): Build lib first, for lib/Automake/Config.pm.
+ * configure.ac (ACLOCAL): Use --acdir=m4 in addition to
+ -I m4. Running aclocal during the rebuild rules will fail
+ if the default acdir does not exist.
+
+ * NEWS, configure.ac, m4/init.m4, m4/lispdir.m4, m4/mkdirp.m4:
+ Require Autoconf 2.60 instead of some intermediate development
+ version.
+
+ * doc/automake.texi (Standard Directory Variables): Fix multitable
+ width.
+ (Autotools Introduction): Fix @uref usage.
+
+2006-08-19 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/automake.texi: Fix some typos in the introduction,
+ adjust some spacing; spell `GNU Build System' consistently.
+ (menu): Unify node naming.
+ (Standard Directory Variables): Clarify that this list is not
+ exhaustive.
+ (DESTDIR): Fix example.
+
+2006-08-19 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/automake.texi (Autotools Introduction) New chapter.
+ Thanks to Ben Pfaff and Ralf Wildenhues for comments.
+ (Auxiliary Programs, Install, Dist, Third-Party Makefiles)
+ (distcleancheck): More cross references.
+ * doc/amhello/configure.ac, doc/amhello/README,
+ doc/amhello/Makefile.am, doc/amhello/src/Makefile.am,
+ doc/amhello/src/main.c: New files.
+ * doc/Makefile.am (dist_noinst_DATA): Distribute them.
+ ($(srcdir)/amhello-1.0.tar.gz): New rule.
+ (dist_doc_DATA): Install amhello-1.0.tar.gz.
+ * Makefile.am (SUBDIRS): Update comment.
+
+2006-08-15 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/automake.texi: Fix some typos.
+
+2006-08-14 Jonathan Higa <jthiga@gmail.com>
+
+ * automake.in: Register "Unified Parallel C" as language.
+ (lang_upc_rewrite): New function.
+ (resolve_linker): Consider UPCLINK.
+ * lib/Automake/Variable.pm (%_ac_macro_for_var): Suggest
+ AM_PROG_UPC for UPC and UPCFLAGS.
+ * m4/upc.m4: New file.
+ * m4/depend.m4 (_AM_DEPENDENCIES): Add UPC case.
+ * m4/Makefile.am (dist_m4data_DATA): Add upc.m4.
+ * doc/automake.texi (Unified Parallel C Support): New node.
+ (Public macros): Mention AM_PROG_UPC.
+ (Program and Library Variables, Flag Variables Ordering):
+ Mention UPCFLAGS.
+ * tests/upc.test, tests/upc2.test, tests/upc3.test: New file.
+ * tests/Makefile.am (TESTS): Add them.
+ * tests/ext.test: Also test upc files.
+
+2006-08-04 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/automake.texi (Scripts): Fix some errors in previous patch.
+
+ * doc/automake.texi (Scripts): Revamp. Show an example of script
+ built from configure.ac. Discuss CLEANFILES and EXTRA_DIST for
+ other built scripts.
+
+ * m4/init.m4: Suggest fixing the call to AC_INIT when
+ AC_PACKAGE_NAME or AC_PACKAGE_VERSION is undefined. This is for
+ newcomers who call AC_INIT and AM_INIT_AUTOMAKE without arguments.
+ * tests/init.test: New file.
+ * tests/Makefile.am (TESTS): Add it.
+
+2006-08-04 Stepan Kasal <kasal@ucw.cz>
+
+ * automake.in (dist_dirs, fill_dist_dirs): Remove.
+ * lib/am/distdir.am (DISTDIRS): Remove.
+ * tests/distdir.test, tests/pr2.test: Do not grep, use
+ `make distdir' instead.
+
+2006-08-04 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/automake.texi (Conditionals): Split in two sections, "Usage"
+ and "Portability", and add a third one, "Limits" to explain how
+ conditional definitions inside multi-lines definitions can be
+ handled.
+ * automake.in (handle_options): Do not assume that
+ AUTOMAKE_OPTIONS is defined in TRUE, but diagnose conditional
+ definitions of AUTOMAKE_OPTIONS.
+ Report from Bas Wijnen.
+ * tests/amopt.test: New test.
+ * tests/Makefile.am (TESTS): Add it.
+
+ * aclocal.in (install_file): Cannot use /dev/null while diffing
+ new files, because Tru64's diff do not handle /dev/null. So
+ create an empty destination file before running diff on a new
+ file, and erase it afterward. Fall back to using /dev/null only
+ if we cannot create this file.
+ Report and initial patch from Ralf Wildenhues.
+ (unlink_tmp): New function.
+ * test/acloca18.test: Make sure the empty file has been erased.
+
+2006-08-04 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * automake.in (handle_LIBOBJS_or_ALLOCA): With subdir-objects,
+ do not prefix `$(top_builddir)/' aka `./' to nonempty LIBOBJDIR,
+ to help BSD Make find the files also in a VPATH build.
+ Also return the same path, possibly prefixed, for correct
+ depdir computation.
+ * tests/pr401.test: Update to expose wrong depdir computation.
+ Rewrite to not use the same file name for library object and
+ main program.
+ * tests/pr401b.test, tests/pr401c.test: Likewise.
+
+2006-07-09 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/install-sh: Don't incorrectly claim that this implementation
+ can install only one file at a time.
+ (doit_exec): New var, for using 'exec' if possible, to save a process.
+ (test_mode, intermediate_mode): Remove.
+ (mode): Check for IFS or globbing characters in mode, since they might
+ cause weird behavior with the other changes below. All later uses
+ of '"$mode"' changed to '$mode', since the ""s no longer matter.
+ Use octal modes if the invoker specifies an octal mode, and use
+ octal umask values if 'umask' outputs octal values; this is more
+ likely to work with older operating systems since Automake uses
+ octal modes, and also works around a bug with HP-UX 11.23
+ 'mkdir -p -m u=rwx,g=rx,o=rx,u+wx' reported by Ralf Wildenhues in
+ <https://lists.gnu.org/archive/html/bug-automake/2006-06/msg00024.html>.
+ (cp_umask, mkdir_umask): New variables, to avoid
+ temporarily creating files or directories with too-permissive modes.
+ (mkdir_mode): Use the FreeBSD 'install' method for computing modes of
+ intermediate directories; this is safer.
+ (posix_mkdir): Also test mkdir -p -m ... by making a directory in
+ /tmp and checking the resulting mode with 'ls', to catch a bug in
+ HP-UX 11.23 and IRIX 6.5 mkdir reported by Ralf in the same message.
+ Use ':' for true, not 'true'; this is a bit faster on
+ traditional implementations.
+
+2006-07-09 Jim Meyering <jim@meyering.net>
+
+ * lib/depcomp: "in in" -> "in" in comment.
+
+2006-07-06 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * tests/defs.in (AUTOMAKE_run): Redirect stdout before stderr,
+ for consistency with the recommendation prompted by this report:
+ <https://lists.gnu.org/archive/html/bug-coreutils/2006-06/msg00225.html>.
+
+2006-06-24 Stepan Kasal <kasal@ucw.cz>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * m4/mkdirp.m4 (AM_PROG_MKDIR_P): Set `mkdir_p' to
+ `'$(MKDIR_P)'', so that it retains the per-directory value
+ computed by config.status.
+ * lib/am/distdir.am (distdir): do not use `$(mkdir_p)' from
+ a changed directory. Bugs reported by Ralf Menzel.
+ * THANKS: Update.
+
+2006-06-24 Eric Dorland <eric@debian.org>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * automake.in (scan_texinfo_file): Fix matching file extension.
+ * tests/txinfo31.test: New test.
+ * tests/Makefile.am: Update.
+
+2006-06-07 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (handle_LIBOBJS): Don't rely on the caller defining $1.
+
+2006-06-07 Stepan Kasal <kasal@ucw.cz>
+
+ * m4/mkdirp.m4 (AM_PROG_MKDIR_P): Rewrite using AC_PROG_MKDIR_P.
+
+2006-06-06 Stepan Kasal <kasal@ucw.cz>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/am/distdir.am: Do not call $(mkdir_p) for each
+ distributed file, collect them and create them in one run,
+ and strip $(srcdir) and $(top_srcdir) all at once.
+ Fix some comment typos.
+
+2006-06-06 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * m4/depend.m4 (_AM_DEPENDENCIES): The IRIX MIPSpro compiler
+ 7.4.4m may omit the first included header dependency information
+ with `-MDupdate'. Refine test to catch this.
+
+ * configure.ac (ACLOCAL): Use `-I m4' to match `./bootstrap'
+ procedure.
+
+ * tests/gettext.test: AM_PROG_GETTEXT of gettext >= 0.14.3
+ requires `config.rpath' to be present, and automake now enforces
+ this. Test this, but only if the gettext installation works and
+ is recent enough to provide this diagnosis.
+ * tests/gettext.test: Provide a dummy `config.rpath' for all
+ subsequent checks.
+ * tests/gettext2.test, tests/subcond.test: Likewise.
+
+ * tests/pr401.test: Replace "perl -i" with sed and mv, for
+ MinGW perl.
+ * tests/pr401b.test, tests/pr401c.test, tests/python11.test,
+ * tests/yacc6.test, tests/yacc8.test: Likewise.
+
+ * m4/depout.m4 (_AM_OUTPUT_DEPENDENCY_COMMANDS): Do not use
+ plain `grep' on the Makefile, as its line length may exceed that
+ for grep. Bug report against coreutils by Sam Sirlin.
+ * THANKS: Update.
+
+2006-05-26 Sergey Poznyakoff <gray@Mirddin.farlep.net> (tiny change)
+
+ * doc/automake.texi (Options): Add anchor `tar-formats'.
+
+2006-05-25 Noah Misch <noah@cs.caltech.edu>
+
+ * lib/Automake/XFile.pm (lock): Allow EOPNOTSUPP, besides
+ ENOLCK. Only mention `make -j' when applicable. Only raise
+ fatal errors when `make -j' is involved. Improve error message.
+
+2006-05-17 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/Automake/Configure_ac.pm (find_configure_ac): Use
+ `$configure_in' instead of `configure.in', to preserve
+ directory component.
+ * lib/Automake/Configure_ac.pm: Add note that Automake owns
+ this file.
+ * lib/Automake/Channels.pm: Likewise.
+ * lib/Automake/FileUtils.pm: Likewise.
+ * lib/Automake/Struct.pm: Likewise.
+
+2006-05-16 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * INSTALL, lib/config.guess, lib/config.sub, lib/texinfo.tex:
+ New upstream versions.
+
+2006-05-15 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/automake.texi (Auxiliary Programs): Fix URL to GCC
+ repository, they use SVN now.
+
+2006-05-13 Werner Lemberg <wl@gnu.org>
+
+ * lib/gnupload: Add support for savannah.gnu.org and
+ savannah.nongnu.org.
+
+2006-05-13 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/Automake/Channels.pm, lib/Automake/Condition.pm,
+ lib/Automake/DisjConditions.pm, lib/Automake/Options.pm,
+ lib/Automake/VarDef.pm, lib/Automake/Wrap.pm: Fix some typos.
+
+2006-05-11 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/install-sh: Sync from Autoconf, as follows:
+ Don't use 'path' to talk about file names,
+ as per GNU coding standards. Close a race condition reported by Ralf
+ Wildenhues and Stepan Kasal. There is still a race condition
+ on hosts that predate Posix 1003.1-1992, but we can't help this.
+ Don't mishandle weird characters like space on pre-Posix hosts.
+ Invoke mkdir at most once per dir arg on pre-Posix hosts.
+
+2006-05-11 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * tests/missing.test, tests/missing2.test: Do not require
+ GNUmake.
+ * Makefile.am (maintainer-check): Make sure `required=' does not
+ follow `. ./defs' in the tests.
+
+ * tests/ansi10.test: Use AC_PROG_CC_STDC. Fix test that
+ ac_cv_prog_cc_stdc isn't just used by Automake code in
+ `configure'.
+ * tests/ansi6.test, tests/ansi7.test: Likewise.
+ * tests/ansi9.test: Likewise. Do not override by setting
+ $U and $(ANSI2KNR) at `make' time; that will be fragile.
+ * tests/libobj8.test: Use AC_PROG_CC_STDC.
+ * tests/subobj3.test: Likewise. Use `set -e'.
+
+ * lib/install-sh: Initialize IFS, so field splitting isn't
+ turned off later.
+ * lib/mkinstalldirs: Likewise.
+
+ * lib/am/java.am (class%DIR%.stamp): Do not assume `$?' has
+ the path of the prerequisite added; IRIX 6.5 make does not add
+ it, Solaris 2.6 make is inconsistent about adding it. Fixes
+ java.test failure.
+
+ * tests/distdir.test: Do not use leading `./' in EXTRA_DIST for
+ files in the source tree. Fixes failures with HP-UX and Tru64
+ make.
+
+ * lib/am/ansi2knr.am (ansi2knr): Rename target as...
+ (./ansi2knr): ...this, for BSD make.
+ (%ANSI2KNR-DIR%/ansi2knr): Adjust.
+
+2006-05-10 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * tests/depcomp6.test, tests/depcomp7.test: Cater for OpenBSD
+ /bin/sh -e issue with failing commands in if clauses.
+
+ * tests/defs.in (Be Bourne compatible): Update from current
+ Autoconf.
+
+ * configure.ac: Recommend perl-5.8.2.
+ * tests/automake.test: Do not fail because of buggy Getopt::Long
+ in perl < 5.8.2.
+
+ * tests/longlin2.test: Do not use `grep' on Makefile.am:
+ it has long lines and is thus not a text file; AIX 5.1 grep
+ fails to scan non-plain patterns from long lines.
+
+ * tests/overrid.test: Change all regexes for warning messages to
+ match after a colon, so that the prepended file names do not
+ cause false matches. Tighten overrides regex. Fix typo
+ `cleam-am-local' -> `clean-am-local'.
+
+ * tests/java.test: `configure' uses a trap, so use `(exit 77);
+ exit 77' to portably set the exit status similar to AS_EXIT.
+ * tests/fn99.test: propagate nonzero exit status from subshell.
+
+ * tests/mkinst3.test: Fix `mkdir' wrapper to not be confused
+ if ``pwd`' contains the string `-p'. Create the wrapper in a
+ subdirectory so that `.' in $PATH does not lead to an endless
+ loop.
+
+ * lib/depcomp (ia64hp): Rename dependency style to..
+ (hp2): ..this, as it works with aCC on HPPA, too; adjust
+ comment. Report by Olivier Fourdan (PR automake/481).
+ * THANKS: Update.
+
+ * tests/aclocal7.test: Add `$sleep's between file touching
+ and automake resp aclocal+automake invocations, to ensure
+ they complete with a time stamp strictly later than the touched
+ file.
+
+ * lib/missing: Remove superfluous quotes. Replace all uses of
+ `[' by `test', for consistency, and for..
+ * tests/missing5.test: ..this new test.
+ * tests/Makefile.am: Update.
+
+ * lib/missing (sed_minuso, sed_output): New variables.
+ (autom4te, help2man, makeinfo): Use them. Unifies detection of
+ `-o FILE', `--output FILE', `--output=FILE', stricter regex.
+ Fixes `missing' to detect `--output' for help2man. Fixes
+ PR automake/483. Report by Dennis J. Linse.
+ (autom4te): Document in `missing --help'.
+ * THANKS: Update.
+
+2006-04-26 Thien-Thi Nguyen <ttn@gnu.org> (tiny change)
+
+ * doc/automake.texi (Dependency Tracking Evolution): Fix typo.
+
+2006-04-25 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/install-sh: Simplify the expr implementation of dirname.
+
+2006-04-24 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/install-sh: Handle --, and diagnose unknown options.
+ * m4/mkdirp.m4 (AM_PROG_MKDIR_P): In the normal case, set
+ mkdir_p='mkdir -p', not to 'mkdir -p --', for consistency with
+ the other ways that mkdir_p might be set.
+
+2006-04-21 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * m4/amversion.in (_AM_AUTOCONF_VERSION): New macro.
+ (AM_SET_CURRENT_AUTOMAKE_VERSION): Call it.
+ * aclocal.in (trace_used_macros): Trace _AM_AUTOCONF_VERSION.
+ (write_aclocal): Output a check for Autoconf's version in aclocal.m4.
+ Doing so ensures that users cannot build configure and Makefiles
+ with two different autoconf versions. Report from Noah Misch.
+ * tests/missing4.test: New file.
+ * tests/Makefile.am (TESTS): Add it.
+
+2006-04-20 Paul Lunau <temp@lunau.me.uk> (tiny change)
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/am/dejagnu.am (check-DEJAGNU): Fail when at least one test
+ failed, instead of when the last one failed (PR automake/488).
+ Report from Paul Lunau.
+ * tests/dejagnu4.test: Update to expose this.
+ * THANKS: Update.
+
+2006-04-19 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/am/check.am (check-TESTS): Match XFAIL_TESTS delimited by
+ TABs as well as spaces. Fixes PR automake/490.
+ * tests/check6.test: New test.
+ * tests/Makefile.am, THANKS: Update.
+ Report from Diab Jerius <djerius@cfa.harvard.edu>.
+
+2006-04-17 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/Autom4te/FileUtils.pm (find_file): Fix a typo in the
+ description; eliminate the duplicate error message.
+ * doc/automake.texi (@direntry): `Invoking Automake' is the name
+ of the usage node for `automake'
+ * lib/Automake/Variable.pm (%_gen_varname): Fix typos in the
+ comment.
+
+2006-04-17 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * m4/lispdir.m4 (AM_PATH_LISPDIR): Require Autoconf 2.59c,
+ because it uses `datarootdir'. Bump copyright year and serial.
+
+2006-04-10 Stepan Kasal <kasal@ucw.cz>
+
+ * NEWS: Fix typo.
+
+2006-04-09 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/Automake/Variable.pm (_hash_varname, _hash_values): New functions.
+ (_gen_varname): Use _hash_values, and return a flag indicating whether
+ the variable name was generated or reused.
+ (transform_variable_recursively): Do not redefine variables that
+ are reused, and try to reuse the variable being transformed.
+ * tests/check2.test: Make sure TESTS hasn't been redefined.
+ * tests/check5.test, tests/exeext4.test: Make sure variables have
+ been reused.
+ * tests/subst2.test: Make sure bin_PROGRAMS gets rewritten.
+
+ * automake.in (%ignored_configure_vars): New variable.
+ (scan_autoconf_traces): Trace for _AM_SUBST_NOTMAKE and fill
+ %ignored_configure_vars.
+ (define_configure_variable): Declare ignored configure variables
+ as VAR_SILENT. Do not special-case AMDEPBACKSLASH and ANSI2KNR
+ w.r.t. VAR_SILENT.
+ * m4/substign.m4: New file.
+ * m4/Makefile.am (dist_m4data_DATA): Add substign.m4.
+ * m4/cond.m4: _AM_SUBST_NOTMAKE $1_TRUE and $1_FALSE (PR automake/477).
+ * m4/depend.m4: _AM_SUBST_NOTMAKE AMDEPBACKSLASH.
+ * m4/protos.m4: _AM_SUBST_NOTMAKE ANSI2KNR.
+ * tests/cond.test: Make sure TEST_FALSE and TEST_TRUE are not defined.
+ * tests/amsubst.test: New file.
+ * tests/Makefile.am (TESTS): Add it.
+
+2006-04-09 Stepan Kasal <kasal@ucw.cz>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * automake.in (handle_single_transform): Preserve directories in
+ direct suffix rules.
+ * tests/suffix12.test: New test.
+ * tests/Makefile.am (TESTS): Add it.
+ Report from John Ratliff.
+
+2006-03-25 Mike Frysinger <vapier@gentoo.org> (tiny change)
+ Alexandre Duret-Lutz <adl@gnu.org>
+
+ * aclocal.in ($m4_include_rx): Do not recognize `include', and
+ adjust scan_configure_dep and scan_file accordingly.
+ (scan_configure_dep): Do not search white lines.
+ (scan_file): Strip comments from current line after checking
+ for serial, so that aclocal does not trip on `m4_include' macros
+ in comments. Report from Mike Frysinger.
+ * tests/acloca21.test: New file.
+ * tests/Makefile.am (TESTS): Add it.
+
+2006-03-24 Stepan Kasal <kasal@ucw.cz>
+
+ * tests/mmodely.test: Fix the test on systems with no lex.
+
+2006-03-23 Stepan Kasal <kasal@ucw.cz>
+
+ * automake.in (libtool_new_api): Fix a typo in the comment.
+ * lib/Automake/Makefile.am (Config.pm): Likewise.
+ * lib/am/depend2.am: Likewise.
+ * tests/xsource.test: With `set -e', `|| exit 1' is no longer
+ needed.
+
+2006-03-23 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * tests/depcomp6.test, tests/depcomp7.test: Change back to
+ using `$MAKE && exit 1', but make sure the last command in the
+ test is successful.
+
+2006-03-21 Clifford Wolf <clifford@clifford.at> (tiny change)
+ Stepan Kasal <kasal@ucw.cz>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * aclocal.in (parse_arguments): Added wildcard support to the
+ dirlist parser.
+ * doc/automake.texi (Macro search path): Document it.
+ * tests/dirlist2.test: New test.
+ * m4/dirlist, tests/Makefile.am: Adjust.
+
+2006-03-20 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * m4/init.m4 (AM_INIT_AUTOMAKE): Add `_AM_DEPENDENCIES(OBJC)'
+ to `AC_PROG_OBJC' if provided, to fix Objective C depmode
+ handling.
+ * lib/Automake/Variable.pm (%_ac_macro_for_var): Add entries for
+ OBJC and OBJCFLAGS.
+ * tests/ext.test: Adjust.
+ * tests/objc.test, tests/objc2.test: New tests.
+ * tests/Makefile.am: Adjust.
+ * doc/automake.texi (Objective C Support): New node.
+ (Support for Other Languages): Adjust.
+
+2006-03-19 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/Automake/RuleDef.pm (DESCRIPTION): Typo.
+
+ * tests/depcomp6.test, tests/depcomp7.test: Fix failure logic
+ to work with `set -e'.
+
+ * tests/depcomp6.test, tests/depcomp7.test: New tests,
+ for general `depcomp' functionality, with and without
+ `subdir-objects', with and without `libtool'.
+ * tests/Makefile.am: Adjust.
+
+ * aclocal.in (write_aclocal): Unlink `aclocal.m4' before
+ writing into it, to break a symlinked file.
+ * tests/acloca20.test: New test.
+ * tests/Makefile.am: Updated.
+
+2006-03-19 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Allow package trees (packages with subpackages) to share
+ common distributed auxiliary files (and directories) that
+ reside within a subpackage.
+
+ * lib/am/distdir.am (distdir %?TOPDIR_P%): Do not fail if
+ `$(distdir)' already exists.
+ (%?SUBDIRS%): Set `am__remove_distdir' to `:' to prevent
+ removal of subpackage trees for distribution.
+ * tests/subpkg3.test: New test.
+ * tests/Makefile.am: Update.
+
+2006-03-18 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * tests/check5.test, tests/nobast.test: Fix $MAKE and rm
+ invocations to please maintainer-check.
+
+2006-03-10 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (lang_c_rewrite): Typo in previous change.
+ * tests/ccnoco2.test: New file.
+ * tests/Makefile.am (TESTS): Add ccnoco2.test.
+
+ * automake.in (lang_c_rewrite): Make the AM_PROG_CC_C_O requirement
+ a 'portability' warning, so that people can ignore it. Suggested
+ by Ralf Wildenhues.
+
+ * lib/Automake/ChannelDefs.pm: Make -Wportability the default in
+ gnu and gnits modes.
+ * doc/automake.texi (Invoking Automake): Adjust.
+
+2006-02-21 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/automake.texi (Yacc and Lex): Document that `.ypp' and
+ `.lpp' file extensions are recognized.
+
+2006-02-21 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/automake.texi (Complete, Extending aclocal, Public macros)
+ (Python, Conditionals, API versioning): Always quote macro arguments.
+ Report from Stepan Kasal.
+
+2006-02-16 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/automake.texi (Python): More examples.
+
+2006-02-05 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/automake.texi (distcleancheck): Fix bad wording. Report
+ from Bob Rossi.
+ (Man pages): Show dist_man_MANS, not EXTRA_DIST = $(man_MANS).
+
+2006-01-29 Alexandre Duret-Lutz <adl@gnu.org>
+
+ Append $(EXEEXT) to programs that may be listed in TESTS.
+ Report from Simon Josefsson.
+
+ * automake.in (%known_programs): New global.
+ (initialize_per_input): Reset it.
+ (append_exeext): Take a predicate as first argument to select
+ the filename to rewrite.
+ (handle_programs): Fill %known_programs.
+ (handle_tests): Append $(EXEEXT) to all tests that are in
+ %known_programs.
+ (am_install_var): Update call to append_exeext.
+ * doc/automake.texi (EXEEXT): TESTS is also rewritten.
+ (Tests): More about the difference between check_PROGRAMS and TESTS.
+ Give an example of TEST_ENVIRONMENT.
+ * tests/cond32.test: Augment with a nested condition.
+ * tests/exeext4.test: Also check TESTS.
+ * tests/check5.test: New file.
+ * tests/Makefile.am (TESTS): Add check5.test.
+
+2006-01-12 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/install-sh (dstdir): Don't use semicolons inside { } in
+ sed scripts, as Posix says it's not portable.
+ * lib/missing (file): Likewise.
+ * lib/am/distdir.am (distcheck): Likewise.
+ * tests/comment7.test, tests/comment9.test, tests/confh.test: Likewise
+ * tests/distcom2.test, tests/distcom3.test: Likewise.
+ * tests/distcom4.test, tests/distcom5.test: Likewise.
+ * tests/distcom6.test, tests/include.test, tests/pluseq8.test: Likewise.
+
+2006-01-12 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * ChangeLog: Move 2004's entries to ...
+ * ChangeLog.04: ... this new file.
+ * Makefile.am (EXTRA_DIST): Add ChangeLog.04.
+
+ * tests/txinfo13.test: Test fix below.
+
+2006-01-12 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/am/texinfos.am (dist-info): Tighten glob to avoid unwanted
+ extra files in distribution. Reported by Vincent Lefevre.
+
+2006-01-06 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/automake.texi (Linking, Program and Library Variables):
+ Mention the file extensions that usually appear in _DEPENDENCIES,
+ and point to BUILT_SOURCES and example of _DEPENDENCIES uses. A
+ couple of people have been listing sources files in _DEPENDENCIES
+ lately.
+
+ * doc/automake.texi: Bump copyright year.
+ * automake.in ($gen_copyright, version): Likewise.
+ * aclocal.in (write_aclocal, version): Likewise.
+
+2006-01-05 Stepan Kasal <kasal@ucw.cz>
+ Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (topsrcdir): New global.
+ (generate_makefile): Compute it.
+ (fill_dist_dirs): New function extracted from handle_dist.
+ (handle_dist, handle_configure): Use fill_dist_dirs.
+ * tests/distdir.test: Test for cases where $(top_srcdir) or
+ $(srcdir) appear in EXTRA_DIST. Report from Sander Niemeijer.
+
+2006-01-05 Zack Weinberg <zackw@panix.com>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/depcomp: Add 'ia64hp' dependency style.
+ Zack's original patch was contributed to GCC on 2005-06-13.
+ (tru64): Typo.
+
+2005-11-01 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/install-sh: Use "trap '' 0" instead of "trap - 0", so that
+ the code is portable to both POSIX and pre-POSIX shells.
+
+2005-10-17 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * tests/nobase.test: Use `chmod a-x' instead of `chmod -x',
+ suggested by Eric Blake.
+
+2005-10-17 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/automake.texi (Program and Library Variables): Typo.
+ * lib/Automake/Variable.pm (transform_variable_recursively): Typo
+ in a comment.
+
+2005-10-03 Stepan Kasal <kasal@ucw.cz>
+
+ * ChangeLog.03, automake.in, tests/overrid.test: Typos.
+
+2005-10-03 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * tests/nobase.test: Exercise previous patch.
+
+2005-10-03 Peter O'Gorman <peter@pogma.com> (tiny change)
+
+ * lib/am/distdir.am: Remove $(SHELL) when calling install_sh
+ * m4/strip.m4: Ditto.
+ * m4/install-sh.m4: Add $(SHELL) to the definition of install_sh
+
+2005-09-13 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/automake.texi (limitations on file names): New section.
+ * lib/install-sh: Rewrite to support '*' in file names.
+ Also, tune so that we don't invoke so many commands in the usual case.
+ This has the side effect of fixing `install-sh -d' to not fail if it
+ loses the race in creating the last path component against another
+ process.
+ * tests/instspc.test: The "*" test is now fixed.
+
+2005-09-13 Stepan Kasal <kasal@ucw.cz>
+
+ * automake.in (Languages) <cppasm>: Fix typo in the comment.
+
+2005-09-13 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/am/ltlib.am (uninstall-%DIR%LTLIBRARIES): Do not put
+ shell in verbose mode.
+
+2005-08-07 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/Automake/Variable.pm (variable_value): Do not read the TRUE
+ value of a conditionally defined variable.
+ Report from Juergen Leising.
+
+ * automake.in (lang_yacc_target_hook): Use AM_MAKEFLAGS in recursive
+ $(MAKE) invocations.
+ * lib/am/texibuild.am (?GENERIC_INFO?%SOURCE_SUFFIX%%DEST_SUFFIX%):
+ Likewise.
+ * lib/am/texi-vers.am (%STAMPVTI%): Likewise.
+ * lib/am/remake-hdr.am (%CONFIG_H%): Likewise.
+ * Makefile.am (maintainer-check): Check for this.
+ Report from Stepan Kasal.
+
+ * m4/mkdirp.m4: Update misleading comment about `mkdir -p .'.
+ Prompted by Stepan Kasal.
+
+2005-08-07 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/am/texinfos.am (uninstall-info-am): Call install-info only if
+ the $(infodir) exists.
+
+2005-07-31 Stepan Kasal <kasal@ucw.cz>
+
+ * tests/library3.test: Fix a typo which made the test fail.
+
+2005-07-27 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/automake.texi (Linking, Program and Library Variables):
+ Suggest reserving -l for third-party libraries.
+
+ * lib/Automake/Variable.pm (require_variables): Mention aclocal's
+ search path when suggesting to add a macro in configure.ac.
+ People are confused when Automake suggests adding a macro (such as
+ AC_PROG_LIBTOOL) that is already in configure.ac.
+ * automake.in (require_file_internal): Suggest `automake --add-missing'
+ for missing files that can be installed.
+ * tests/library3.test: Adjust.
+
+2005-07-27 Stepan Kasal <kasal@ucw.cz>
+
+ * tests/defs.in: When required matches both `*libtool*' and
+ `*gettext*', check for both m4 files.
+
+ * doc/automake.texi (Auxiliary Programs): Fix a typo.
+ * tests/suffix11.test: Fix a typo.
+ * tests/colon3.test: s/EGREP/FGREP/.
+
+2005-07-19 Paul Eggert <eggert@cs.ucla.edu>
+
+ * tests/instspc.test: Major rewrite to test for many other
+ problematic file names, e.g., '$', '"', '('. Automake and
+ Autoconf can't handle many of them, so do not report a failure
+ if the usual candidates show up.
+
+2005-07-19 Stepan Kasal <kasal@ucw.cz>
+
+ * Makefile.am (automake, aclocal): Merge the rules.
+
+2005-07-10 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/config.guess, lib/config.sub, lib/texinfo.tex: New upstream
+ versions.
+
+2005-07-09 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/install-sh: Use IFS=/ to split directories on /, don't translate
+ / into % as it prevents directory names using %...
+
+2005-07-09 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/automake.texi (Public macros): Typo.
+ * aclocal.in: Typo in comment.
+
+2005-07-09 Zack Weinberg <zack@codesourcery.com> (tiny change)
+
+ * lib/depcomp: Handle "#line" markers as well as "# " markers in
+ "cpp" style, so it can work with newer HP compilers (for their
+ ia64 systems).
+
+2005-07-02 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/automake.texi (Public macros) <AM_WITH_DMALLOC>: Reword to
+ fix an underful hbox.
+ * lib/INSTALL, lib/config.guess, lib/config.sub, lib/texinfo.tex:
+ New upstream versions.
+
+2005-07-01 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * m4/python.m4 (_AM_PYTHON_INTERPRETER_LIST): Add python2.5.
+
+2005-06-30 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (make_paragraphs): Do not define %TOPDIR%, now that
+ lib/am/header-vars.am no longer uses it.
+ * lib/am/libtool.am (distclean-am, distclean-libtool): Define
+ if TOPDIR_P is true, not TOPDIR.
+ Suggested by Stepan Kasal.
+
+ * automake.in (read_am_file): Correctly diagnose comments following
+ trailing backslash.
+ * tests/commen10.test: New file.
+ * tests/Makefile.am (TESTS): Add commen10.test.
+ Report from Harald Dunkel.
+
+ * automake.in (scan_autoconf_traces): Scan AC_SUBST_TRACE instead
+ of AC_SUBST.
+ * lib/am/header-vars.am (srcdir, top_srcdir, top_builddir, INSTALL):
+ Do not define, they are AC_SUBST_TRACEd by Autoconf.
+ * m4/init.m4 (AM_INIT_AUTOMAKE): Require Autoconf 2.59c.
+ * tests/include.test: Call AC_OUTPUT.
+
+2005-06-29 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/mkinstalldirs: Fix support for directory name with spaces if
+ `mkdir -p' does not work.
+ * tests/Makefile.am (TESTS): Add mkinst3.test.
+ * tests/mkinst3.test: New file.
+ Report from Noah Friedman.
+
+ * doc/automake.texi (Include, Extending aclocal): Typos.
+ Report from Karl Berry.
+
+2005-06-28 Stepan Kasal <kasal@ucw.cz>
+ Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/mdate-sh: Avoid infinite loop with GNU ls when TIME_STYLE is set.
+ * tests/txinfo28.test: Set TIME_STYLE.
+ Report from Vincent Lefevre and James Youngman.
+
+2005-06-24 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/Automake/Variable.pm (define, _new): Remember the helper
+ variable created for the last conditional += on each variable, and
+ only append further += in the same condition to this last helper
+ variable, not to older helper variables. This way the order of
+ the items appended to the variable is preserved.
+ * tests/cond21.test: Adjust.
+ * tests/cond38.test: New file.
+ * tests/Makefile.am (TESTS): Add cond38.test.
+ Report from Ed Hartnett.
+
+2005-06-22 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * tests/aclocal5.test: Adjust to recent CVS Autoconf changes.
+
+ * automake.in (handle_footer): Do not output an unformatted
+ definition of SOURCES, it is already done correctly in
+ generate_makefile. This superfluous definition introduced long
+ lines in some Makefiles, hence breakages in tools with a limited
+ line length. Report from Mathias Froehlich.
+
+2005-06-11 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/am/texibuild.am (?GENERIC_INFO?%SOURCE_SUFFIX%%DEST_SUFFIX%):
+ Fix redirections in previous patch.
+
+2005-06-08 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/am/texibuild.am (?GENERIC_INFO?%SOURCE_SUFFIX%%DEST_SUFFIX%):
+ Do not backup any file if makeinfo is not installed.
+ * lib/missing (makeinfo): Do not touch a missing info file.
+ * tests/txinfo30.test: New file.
+ * tests/Makefile.am (TESTS): Add txinfo30.test.
+ Report from Bob Proulx.
+
+ * doc/automake.texi (Extending aclocal): Typo.
+
+2005-05-24 Brian Gough <bjg@network-theory.co.uk> (tiny change)
+
+ * lib/am/texinfos.am (.dvi.ps): Add $(am__TEXINFO_TEX_DIR) to TEXINPUTS.
+
+2005-05-15 Alexandre Duret-Lutz <adl@gnu.org>
+
+ Fix PR automake/461:
+ * automake.in (require_build_directory): Canonicalize directories
+ with different names, such as `foo/bar' and `./foo//bar'.
+ * tests/subobj9.test: Augment to test that.
+ Report from Tom Tromey.
+
+2005-05-14 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * COPYING, ChangeLog, ChangeLog.00, ChangeLog.01, ChangeLog.02,
+ ChangeLog.03, ChangeLog.96, ChangeLog.98, HACKING, Makefile.am,
+ NEWS, README, TODO, aclocal.in, automake.in, bootstrap, configure,
+ configure.ac, doc/Makefile.am, doc/fdl.texi, lib/COPYING,
+ lib/Makefile.am, lib/acinstall, lib/compile, lib/config-ml.in,
+ lib/config.guess, lib/config.sub, lib/depcomp, lib/elisp-comp,
+ lib/gnupload, lib/mdate-sh, lib/missing, lib/py-compile,
+ lib/symlink-tree, lib/texinfo.tex, lib/ylwrap,
+ lib/Automake/ChannelDefs.pm, lib/Automake/Channels.pm,
+ lib/Automake/Condition.pm, lib/Automake/Config.in,
+ lib/Automake/Configure_ac.pm, lib/Automake/DisjConditions.pm,
+ lib/Automake/FileUtils.pm, lib/Automake/General.pm,
+ lib/Automake/Item.pm, lib/Automake/ItemDef.pm,
+ lib/Automake/Location.pm, lib/Automake/Makefile.am,
+ lib/Automake/Options.pm, lib/Automake/Rule.pm,
+ lib/Automake/RuleDef.pm, lib/Automake/Struct.pm,
+ lib/Automake/VarDef.pm, lib/Automake/Variable.pm,
+ lib/Automake/Version.pm, lib/Automake/Wrap.pm,
+ lib/Automake/XFile.pm, lib/Automake/tests/Condition.pl,
+ lib/Automake/tests/DisjConditions.pl,
+ lib/Automake/tests/Makefile.am, lib/Automake/tests/Version.pl,
+ lib/Automake/tests/Wrap.pl, lib/am/Makefile.am,
+ lib/am/ansi2knr.am, lib/am/check.am, lib/am/clean-hdr.am,
+ lib/am/clean.am, lib/am/compile.am, lib/am/configure.am,
+ lib/am/data.am, lib/am/dejagnu.am, lib/am/depend.am,
+ lib/am/depend2.am, lib/am/distdir.am, lib/am/footer.am,
+ lib/am/header-vars.am, lib/am/header.am, lib/am/inst-vars.am,
+ lib/am/install.am, lib/am/java.am, lib/am/lang-compile.am,
+ lib/am/lex.am, lib/am/library.am, lib/am/libs.am,
+ lib/am/libtool.am, lib/am/lisp.am, lib/am/ltlib.am,
+ lib/am/ltlibrary.am, lib/am/mans-vars.am, lib/am/mans.am,
+ lib/am/multilib.am, lib/am/program.am, lib/am/progs.am,
+ lib/am/python.am, lib/am/remake-hdr.am, lib/am/scripts.am,
+ lib/am/subdirs.am, lib/am/tags.am, lib/am/texi-vers.am,
+ lib/am/texibuild.am, lib/am/texinfos.am, lib/am/yacc.am,
+ m4/Makefile.am, tests/aclibobj.test, tests/acloca10.test,
+ tests/acloca11.test, tests/acloca12.test, tests/acloca13.test,
+ tests/acloca14.test, tests/acloca15.test, tests/acloca16.test,
+ tests/acloca17.test, tests/acloca18.test, tests/acloca19.test,
+ tests/aclocal.test, tests/aclocal3.test, tests/aclocal4.test,
+ tests/aclocal5.test, tests/aclocal6.test, tests/aclocal7.test,
+ tests/aclocal8.test, tests/aclocal9.test, tests/acoutbs.test,
+ tests/acoutbs2.test, tests/acoutnoq.test, tests/acoutpt.test,
+ tests/acoutpt2.test, tests/acoutqnl.test, tests/acsilent.test,
+ tests/acsubst.test, tests/acsubst2.test, tests/all.test,
+ tests/alloca.test, tests/alloca2.test, tests/alpha.test,
+ tests/alpha2.test, tests/amassign.test, tests/ammissing.test,
+ tests/ansi.test, tests/ansi10.test, tests/ansi2.test,
+ tests/ansi3.test, tests/ansi3b.test, tests/ansi4.test,
+ tests/ansi5.test, tests/ansi6.test, tests/ansi7.test,
+ tests/ansi8.test, tests/ansi9.test, tests/ar.test, tests/ar2.test,
+ tests/asm.test, tests/autohdr.test, tests/autohdr2.test,
+ tests/autohdr3.test, tests/autohdr4.test, tests/automake.test,
+ tests/auxdir.test, tests/auxdir2.test, tests/auxdir3.test,
+ tests/auxdir4.test, tests/backsl.test, tests/backsl2.test,
+ tests/backsl3.test, tests/backsl4.test, tests/badline.test,
+ tests/badopt.test, tests/badprog.test, tests/block.test,
+ tests/bsource.test, tests/canon.test, tests/canon2.test,
+ tests/canon3.test, tests/canon4.test, tests/canon5.test,
+ tests/ccnoco.test, tests/check.test, tests/check2.test,
+ tests/check3.test, tests/check4.test, tests/checkall.test,
+ tests/clean.test, tests/clean2.test, tests/colneq.test,
+ tests/colneq2.test, tests/colon.test, tests/colon2.test,
+ tests/colon3.test, tests/colon4.test, tests/colon5.test,
+ tests/colon6.test, tests/colon7.test, tests/comment.test,
+ tests/comment2.test, tests/comment3.test, tests/comment4.test,
+ tests/comment5.test, tests/comment6.test, tests/comment7.test,
+ tests/comment8.test, tests/comment9.test, tests/compile.test,
+ tests/compile_f90_c_cxx.test, tests/compile_f_c_cxx.test,
+ tests/cond.test, tests/cond10.test, tests/cond11.test,
+ tests/cond13.test, tests/cond14.test, tests/cond15.test,
+ tests/cond16.test, tests/cond17.test, tests/cond18.test,
+ tests/cond19.test, tests/cond2.test, tests/cond20.test,
+ tests/cond21.test, tests/cond22.test, tests/cond23.test,
+ tests/cond24.test, tests/cond25.test, tests/cond26.test,
+ tests/cond27.test, tests/cond28.test, tests/cond29.test,
+ tests/cond3.test, tests/cond30.test, tests/cond31.test,
+ tests/cond32.test, tests/cond33.test, tests/cond34.test,
+ tests/cond35.test, tests/cond36.test, tests/cond37.test,
+ tests/cond4.test, tests/cond5.test, tests/cond6.test,
+ tests/cond7.test, tests/cond8.test, tests/cond9.test,
+ tests/condd.test, tests/condhook.test, tests/condinc.test,
+ tests/condinc2.test, tests/condlib.test, tests/condman.test,
+ tests/condman2.test, tests/conf2.test, tests/confdeps.test,
+ tests/conff.test, tests/conff2.test, tests/confh.test,
+ tests/confh4.test, tests/confh5.test, tests/config.test,
+ tests/confincl.test, tests/conflnk.test, tests/conflnk2.test,
+ tests/conflnk3.test, tests/confsub.test, tests/confvar.test,
+ tests/confvar2.test, tests/copy.test, tests/ctarget1.test,
+ tests/cxx.test, tests/cxx2.test, tests/cxxansi.test,
+ tests/cxxcpp.test, tests/cxxlibobj.test, tests/cxxlink.test,
+ tests/cxxnoc.test, tests/cxxo.test, tests/cygwin32.test,
+ tests/dash.test, tests/defs.in, tests/defun.test,
+ tests/defun2.test, tests/dejagnu.test, tests/dejagnu2.test,
+ tests/dejagnu3.test, tests/dejagnu4.test, tests/dejagnu5.test,
+ tests/dejagnu6.test, tests/dejagnu7.test, tests/depacl2.test,
+ tests/depcomp.test, tests/depcomp2.test, tests/depcomp3.test,
+ tests/depcomp4.test, tests/depcomp5.test, tests/depdist.test,
+ tests/depend.test, tests/depend2.test, tests/depend3.test,
+ tests/depend4.test, tests/destdir.test, tests/dirforbid.test,
+ tests/dirlist.test, tests/discover.test, tests/distcom2.test,
+ tests/distcom3.test, tests/distcom4.test, tests/distcom5.test,
+ tests/distcom6.test, tests/distcom7.test, tests/distdir.test,
+ tests/distname.test, tests/dollar.test, tests/double.test,
+ tests/dup2.test, tests/else.test, tests/empty.test,
+ tests/empty2.test, tests/empty3.test, tests/empty4.test,
+ tests/exdir.test, tests/exdir2.test, tests/exeext.test,
+ tests/exeext2.test, tests/exeext3.test, tests/exeext4.test,
+ tests/exsource.test, tests/ext.test, tests/ext2.test,
+ tests/extra.test, tests/extra2.test, tests/extra3.test,
+ tests/extra4.test, tests/extra5.test, tests/extra6.test,
+ tests/extra7.test, tests/f90only.test, tests/flibs.test,
+ tests/fn99.test, tests/fnoc.test, tests/fo.test, tests/fonly.test,
+ tests/fortdep.test, tests/fpinst2.test, tests/fpinstall.test,
+ tests/gcj.test, tests/gcj2.test, tests/gcj3.test, tests/gcj4.test,
+ tests/gcj5.test, tests/getopt.test, tests/gettext.test,
+ tests/gettext2.test, tests/gnits.test, tests/gnits2.test,
+ tests/gnits3.test, tests/gnumake.test, tests/gnuwarn.test,
+ tests/gnuwarn2.test, tests/header.test, tests/help.test,
+ tests/hfs.test, tests/hosts.test, tests/implicit.test,
+ tests/include.test, tests/include2.test, tests/info.test,
+ tests/insh2.test, tests/install2.test, tests/installdir.test,
+ tests/instdat.test, tests/instdat2.test, tests/instexec.test,
+ tests/insthook.test, tests/instman.test, tests/instman2.test,
+ tests/instsh.test, tests/instsh2.test, tests/instspc.test,
+ tests/interp.test, tests/interp2.test, tests/java.test,
+ tests/java2.test, tests/java3.test, tests/javaprim.test,
+ tests/javasubst.test, tests/ldadd.test, tests/ldflags.test,
+ tests/lex.test, tests/lex2.test, tests/lex3.test, tests/lex4.test,
+ tests/lex5.test, tests/libobj10.test, tests/libobj11.test,
+ tests/libobj12.test, tests/libobj13.test, tests/libobj14.test,
+ tests/libobj2.test, tests/libobj3.test, tests/libobj4.test,
+ tests/libobj5.test, tests/libobj7.test, tests/libobj8.test,
+ tests/library.test, tests/library2.test, tests/library3.test,
+ tests/libtool.test, tests/libtool2.test, tests/libtool3.test,
+ tests/libtool4.test, tests/libtool5.test, tests/libtool6.test,
+ tests/libtool7.test, tests/libtool8.test, tests/libtool9.test,
+ tests/license.test, tests/link_c_cxx.test, tests/link_dist.test,
+ tests/link_f90_only.test, tests/link_f_only.test,
+ tests/link_fc.test, tests/link_fccxx.test, tests/link_fcxx.test,
+ tests/lisp2.test, tests/lisp3.test, tests/lisp4.test,
+ tests/lisp5.test, tests/lisp6.test, tests/lisp7.test,
+ tests/lisp8.test, tests/listval.test, tests/location.test,
+ tests/longlin2.test, tests/longline.test, tests/ltcond.test,
+ tests/ltcond2.test, tests/ltconv.test, tests/ltdeps.test,
+ tests/ltlibobjs.test, tests/ltlibsrc.test, tests/maintclean.test,
+ tests/make.test, tests/makej.test, tests/makevars.test,
+ tests/man.test, tests/man2.test, tests/mclean.test,
+ tests/mdate.test, tests/mdate2.test, tests/mdate3.test,
+ tests/mdate4.test, tests/missing.test, tests/missing2.test,
+ tests/missing3.test, tests/mkinst2.test, tests/mkinstall.test,
+ tests/mmodely.test, tests/multlib.test, tests/nobase.test,
+ tests/nodef.test, tests/nodef2.test, tests/nodep.test,
+ tests/nodepcomp.test, tests/nodist.test, tests/nodist2.test,
+ tests/nodist3.test, tests/nogzip.test, tests/nogzip2.test,
+ tests/noinst.test, tests/noinstdir.test, tests/nolink.test,
+ tests/nostdinc.test, tests/number.test, tests/obsolete.test,
+ tests/order.test, tests/outdir.test, tests/output.test,
+ tests/output10.test, tests/output11.test, tests/output12.test,
+ tests/output2.test, tests/output3.test, tests/output4.test,
+ tests/output5.test, tests/output6.test, tests/output7.test,
+ tests/output8.test, tests/output9.test, tests/overrid.test,
+ tests/parse.test, tests/percent.test, tests/percent2.test,
+ tests/phony.test, tests/pluseq.test, tests/pluseq10.test,
+ tests/pluseq2.test, tests/pluseq3.test, tests/pluseq4.test,
+ tests/pluseq5.test, tests/pluseq6.test, tests/pluseq7.test,
+ tests/pluseq8.test, tests/pluseq9.test, tests/postproc.test,
+ tests/ppf77.test, tests/pr2.test, tests/pr204.test,
+ tests/pr211.test, tests/pr220.test, tests/pr224.test,
+ tests/pr229.test, tests/pr243.test, tests/pr266.test,
+ tests/pr279-2.test, tests/pr279.test, tests/pr287.test,
+ tests/pr300-lib.test, tests/pr300-ltlib.test,
+ tests/pr300-prog.test, tests/pr307.test, tests/pr401.test,
+ tests/pr401b.test, tests/pr401c.test, tests/pr72.test,
+ tests/pr87.test, tests/pr9.test, tests/prefix.test,
+ tests/primary.test, tests/primary2.test, tests/primary3.test,
+ tests/proginst.test, tests/python.test, tests/python10.test,
+ tests/python11.test, tests/python12.test, tests/python2.test,
+ tests/python3.test, tests/python4.test, tests/python5.test,
+ tests/python6.test, tests/python7.test, tests/python8.test,
+ tests/python9.test, tests/recurs.test, tests/recurs2.test,
+ tests/regex.test, tests/remake.test, tests/remake2.test,
+ tests/remake3.test, tests/remake4.test, tests/remake5.test,
+ tests/req.test, tests/reqd.test, tests/reqd2.test,
+ tests/rulepat.test, tests/scripts.test, tests/seenc.test,
+ tests/sinclude.test, tests/space.test, tests/specflg.test,
+ tests/specflg2.test, tests/specflg3.test, tests/specflg6.test,
+ tests/specflg7.test, tests/specflg8.test, tests/specflg9.test,
+ tests/spell.test, tests/spell2.test, tests/spell3.test,
+ tests/spelling.test, tests/spy.test, tests/srcsub.test,
+ tests/srcsub2.test, tests/stamph2.test, tests/stdlib.test,
+ tests/stdlib2.test, tests/strip.test, tests/subcond.test,
+ tests/subcond2.test, tests/subcond3.test, tests/subdir.test,
+ tests/subdir2.test, tests/subdir3.test, tests/subdir4.test,
+ tests/subdir5.test, tests/subdir6.test, tests/subdir7.test,
+ tests/subdir8.test, tests/subdir9.test,
+ tests/subdirbuiltsources.test, tests/subobj.test,
+ tests/subobj2.test, tests/subobj3.test, tests/subobj4.test,
+ tests/subobj5.test, tests/subobj6.test, tests/subobj7.test,
+ tests/subobj8.test, tests/subobj9.test, tests/subobjname.test,
+ tests/subpkg.test, tests/subpkg2.test, tests/subst.test,
+ tests/subst2.test, tests/substre2.test, tests/substref.test,
+ tests/substtarg.test, tests/suffix.test, tests/suffix10.test,
+ tests/suffix11.test, tests/suffix2.test, tests/suffix3.test,
+ tests/suffix4.test, tests/suffix5.test, tests/suffix6.test,
+ tests/suffix7.test, tests/suffix8.test, tests/suffix9.test,
+ tests/symlink.test, tests/symlink2.test, tests/symlink3.test,
+ tests/syntax.test, tests/tags.test, tests/tagsub.test,
+ tests/tar.test, tests/tar2.test, tests/tar3.test,
+ tests/target-cflags.test, tests/targetclash.test,
+ tests/transform.test, tests/txinfo.test, tests/txinfo10.test,
+ tests/txinfo13.test, tests/txinfo16.test, tests/txinfo17.test,
+ tests/txinfo18.test, tests/txinfo19.test, tests/txinfo2.test,
+ tests/txinfo20.test, tests/txinfo21.test, tests/txinfo22.test,
+ tests/txinfo23.test, tests/txinfo24.test, tests/txinfo25.test,
+ tests/txinfo26.test, tests/txinfo27.test, tests/txinfo28.test,
+ tests/txinfo29.test, tests/txinfo3.test, tests/txinfo4.test,
+ tests/txinfo5.test, tests/txinfo6.test, tests/txinfo7.test,
+ tests/txinfo8.test, tests/txinfo9.test, tests/unused.test,
+ tests/vars.test, tests/vars3.test, tests/vartar.test,
+ tests/version.test, tests/version2.test, tests/version3.test,
+ tests/version4.test, tests/version6.test, tests/version7.test,
+ tests/version8.test, tests/vpath.test, tests/vtexi.test,
+ tests/vtexi2.test, tests/warnopts.test, tests/werror.test,
+ tests/werror2.test, tests/whoami.test, tests/xsource.test,
+ tests/yacc.test, tests/yacc2.test, tests/yacc3.test,
+ tests/yacc4.test, tests/yacc5.test, tests/yacc6.test,
+ tests/yacc7.test, tests/yacc8.test, tests/yaccpp.test,
+ tests/yaccvpath.test: Update FSF postal mail address.
+
+ * tests/cxxnoc.test: Adjust grep pattern for CC, because CVS
+ Autoconf currently defines a CCC variable.
+
+ * tests/output11.test, tests/output12.test: Use rm -f.
+
+2005-04-25 Gary V. Vaughan <gary@gnu.org>
+ Alexandre Duret-Lutz <adl@gnu.org>
+
+ Support for remote LIBOBJS (and friends) with subdir-objects.
+ Fixes PR automake/401.
+
+ * automake.in (config_libobj_dir): New variable.
+ (scan_autoconf_traces): Set config_libobj_dir from AC_CONFIG_LIBOBJ_DIR.
+ (handle_LIBOBJS_or_ALLOCA, require_libsource_with_macro): New functions.
+ (handle_LIBOBJS, handle_ALLOCA): Use them. Adjust location of
+ dependency files, possibly in a subdirectory.
+ * tests/pr401.test, tests/pr401b.test, tests/pr401c.test: New tests.
+ * tests/Makefile.am (TESTS): Add them.
+ * doc/automake.texi (Optional) <AC_CONFIG_LIBOBJ_DIR>: Document.
+ (LIBOBJS): Document changes in behaviour of
+ LIBOBJS, ALLOCA, LTLIBOBJS & LTALLOCA in the presence of
+ subdir-objects and an invocation of AC_CONFIG_LIBOBJ_DIR.
+
+2005-04-18 Jim Meyering <jim@meyering.net>
+
+ * doc/automake.texi (Dist): Correct English.
+
+2005-03-31 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/automake.texi: When the phrase "for instance" introduces a
+ sentence, it should be delimited by a comma.
+
+ * doc/automake.texi: Fix a few typos.
+
+2005-03-30 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/automake.texi (Uniform): Use xmldir instead of htmldir as
+ example, since the GCS now define htmldir.
+ (Auxiliary Programs): Mention config-ml.in and symlink-tree.
+ Give a URL for texinfo.tex.
+ (Public macros): Sort alphabetically, and move obsolete macros...
+ (Obsolete macros): ... here.
+ Prompted by Karl Berry.
+
+2005-03-29 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/automake.texi (Multiple Outputs): Fix mistakes reported by
+ Jim Meyering.
+
+ * lib/am/lisp.am ($(am__ELCFILES)): Prevent races if the recover
+ rule is run with `make -j'.
+ * doc/automake.texi (Multiple Outputs): Adjust.
+ * tests/lisp6.test: Augment it.
+ * tests/lisp8.test: New file.
+ * tests/Makefile.am (TESTS): Add lisp8.test.
+ Suggested by Bruno Haible.
+
+2005-03-27 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/automake.texi: Use @:, @., @!, and @tie{} where appropriate.
+
+2005-03-16 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/am/lisp.am ($(am__ELCFILES)): Do not attempt to recover
+ a missing *.elc file if it cannot be created because emacs does
+ not exist.
+ * tests/lisp7.test: New file.
+ * tests/Makefile.am (TESTS): Add lisp7.test.
+ Report from Greg Schafer.
+
+2005-03-05 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/automake.texi: Replace wicked whiches by thats.
+
+2005-03-04 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * aclocal.in (scan_configure_dep, scan_file): Include file names
+ are relative to the directory of configure.ac, not to the
+ directory of the file doing the include. Remove code for this
+ latter case.
+ * tests/acloca13.test: Run distcheck and make sure all macros are
+ actually distributed.
+
+2005-03-03 Alexandre Duret-Lutz <adl@gnu.org>
+
+ For PR automake/450:
+ * aclocal.in (scan_file, scan_configure_dep): Skip missing sincluded
+ files.
+ * automake.in (scan_autoconf_traces): Likewise.
+ * tests/sinclude.test: Augment.
+ Report from Peter Breitenlohner.
+
+ For PR automake/450:
+ * aclocal.in (write_aclocal, trace_used_macros): Do not add/remove
+ acinclude.m4 and configure.ac to the include map in these two
+ places ...
+ (strip_redundant_includes): ... do it here. This completes the
+ previous change from 2005-03-01, that did not update
+ write_aclocal.
+ * tests/acloca19.test: Augment.
+ Report from Peter Breitenlohner.
+
+2005-03-02 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * tests/comment9.test: Typo.
+
+2005-03-01 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * automake.in (read_am_file): Preserve backslashes preceding ##-lines.
+ * tests/comment9.test: New file.
+ * tests/Makefile.am (TESTS): Add comment9.test.
+ Report from Julien Sopena.
+
+ For PR automake/450:
+ * aclocal.in (trace_used_macros): Do not explicitly trace files
+ included by configure.ac.
+ * tests/acloca19.test: New file.
+ * tests/Makefile.am (TESTS): Add acloca19.test.
+ Report from Peter Breitenlohner.
+
+2005-02-27 Alexandre Duret-Lutz <adl@gnu.org>
+
+ Fix for PR automake/448:
+ * automake.in (handle_factored_dependencies): Flag install-hook as
+ an error.
+ * tests/insthook.test: Exercise this.
+
+ * m4/lispdir.m4: Use datarootdir instead of datadir to match GCS.
+ * doc/automake.texi (Hard-Coded Install Paths): Adjust.
+
+ * doc/automake.texi: Replace many uses of @samp by @code, and
+ vice versa. Use @command, @option, and @env where appropriate.
+
+2005-02-26 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/automake.texi: "filename" -> "file name", for consistency
+ with GNU Coding Standards. See also Paul's change on 2004-08-20
+ in Autoconf.
+
+ * doc/automake.texi (A Library, Libtool Libraries): Show how to link
+ a program with a static or libtool library.
+ (Program and Library Variables): Make clearer that _LDADD and
+ _LIBADD may also list libraries.
+ Prompted by a mail from Bruce Korb.
+
+ * doc/automake.texi (Alternative): Show how to rewrite nobase_
+ variables using custom directory variables, and link to node
+ Uniform. Suggested by Leonardo Boiko.
+
+ * doc/automake.texi (Flag Variables Ordering, User Variables):
+ Make clearer who the maintainer is, and that he can AC_SUBST AM_
+ variables in configure.ac. Suggested by Norman Gray.
+ (Uniform, Public macros, Libtool Issues, Java Support,
+ Conditionals): Use `---' for em dash, and stick them to the
+ enclosing text.
+
+ * doc/automake.texi: Reword a few sentences to fix all underflow
+ and overflow warnings during `make dvi'.
+ (Auxiliary Programs) <configure.guess, config.sub>: Update URL.
+ (Public macros) <AM_WITH_DMALLOC>: Likewise.
+
+2005-02-12 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/INSTALL, lib/config-ml.in, lib/config.guess, lib/config.sub,
+ lib/texinfo.tex: New upstream versions.
+
+ * doc/automake.texi (Hard-Coded Install Paths): New node.
+ (Extending, Extending aclocal, Python): Link to it.
+ (Extending): Don't show how to install a file in /etc/ directly,
+ this is insane.
+
+ * automake.in (read_am_file): Define variables containing long
+ lines as VAR_PRETTY to work around tools with limited input width.
+ * tests/longlin2.test: New file.
+ * tests/Makefile.am (TESTS): Add it.
+ Report from Albert Chin.
+
+2005-02-09 Alexandre Duret-Lutz <adl@gnu.org>
+
+ Fix for PR automake/447:
+ * lib/depcomp (tru64) [libtool]: Also check for $dir.libs/$base.o.d.
+ Report from Mathias Doreille. Add some old comments from
+ Nicolas Joly for reference.
+
+2005-02-08 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/mdate-sh: Check the size of the word following the month to
+ catch Darwin. This way the filename can contain spaces.
+
+ * doc/automake.texi (Requirements, Options): Typos.
+
+2005-02-08 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/missing (makeinfo): Compute the output file if neither -o
+ nor @setfilename is used.
+ Reported by Miroslaw Dobrzanski-Neumann and Bruno Haible.
+
+2005-02-07 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/automake.texi (Requirements): Show one example of
+ AC_CONFIG_FILES with multiple outputs, and correct a few typos.
+
+ * aclocal.in ($serial_line_rx): Expect at least one space between
+ `serial' and the following number.
+ Report from Jim Meyering.
+
+ * lib/mdate-sh: Cope with Darwin's Day/Month/Year output.
+ Report from Peter O'Gorman.
+
+2005-02-06 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * aclocal.in (usage, parse_arguments): New --dry-run and --diff
+ options.
+ (install_file, write_aclocal): Honor --dry-run and --diff.
+ * doc/automake.texi (aclocal options): Document --dry-run and --diff.
+ (Serials): Mention --diff.
+ * lib/Automake/FileUtils.pm (handle_exec_errors): Accept an
+ $expected_exit_code argument.
+ (xsystem): Take a list of arguments, not a string.
+ * tests/acloca18.test: Use --dry-run and --diff.
+ Suggested by Paul Eggert.
+
+ * doc/automake.texi (aclocal options, Macro search path,
+ Extending aclocal, Local Macros, Serials, Future of aclocal): Make
+ these subsection of ...
+ (Invoking aclocal): ... this.
+
+ * aclocal.in ($serial_line_rx): Allow trailing garbage after the
+ serial number.
+ (scan_file): Explicitly mark the "ill-formed serial" message
+ as a warning.
+ * doc/automake.texi (aclocal options, Local Macros): Link to...
+ (Serials): ... this new section.
+
+2005-02-02 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/compile: Likewise.
+
+2005-02-02 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/elisp-comp: Use `(exit N); exit N', not `(exit N); exit';
+ see 2004-12-17.
+ * lib/mdate-sh, lib/py-compile, lib/ylwrap: Exit with nonzero
+ status if a write failure occurs with --help or --version option,
+ as below.
+
+2005-02-02 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/depcomp: Exit with nonzero status if a write failure occurs
+ with --help or --version option.
+ * lib/elisp-comp: Likewise.
+ * lib/gnupload: Likewise.
+ * lib/install-sh: Likewise.
+ * lib/missing: Likewise.
+ * lib/mkinstalldirs: Likewise.
+
+2005-02-01 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/automake.texi (aclocal options): Typo.
+
+ * aclocal.in (list_compare): New functions.
+ (scan_file): Honor #serial lines.
+ * tests/acloca18.test: New test.
+ * tests/Makefile.am (TESTS): Add it.
+ * doc/automake.texi (aclocal options, Local Macros): Document
+ #serial.
+
+2005-01-30 Alexandre Duret-Lutz <adl@gnu.org>
+
+ Preliminary support for `aclocal --install'.
+ This still lacks #serial support.
+ * aclocal.in (reset_maps, install_file): New functions.
+ (write_aclocal): Copy files if --install.
+ (usage, parse_arguments): Recognize --install.
+ ("MAIN"): Start aclocal again if some file were installed.
+ * tests/acloca10.test: Augment to test --install.
+ * tests/aclocal.in, tests/defs.in: Add support for
+ ACLOCAL_TESTSUITE_FLAGS, used by acloca10.test.
+ * doc/automake.texi (aclocal options, Local Macros): Document
+ --install.
+ (Future of aclocal): Adjust.
+
+ * doc/automake.texi (Macro search path): Using --acdir is not
+ obvious, it's erroneous.
+
+ * doc/automake.texi (direntry): Let `info Automake' point to the
+ manual, and `info automake' to the `Invoking automake' node. Like
+ in Autoconf.
+
+2005-01-27 Akim Demaille <akim@epita.fr>
+
+ * lib/Automake/Configure_ac.pm: s/filename/file_name/g.
+ From Paul Eggert.
+
+2005-01-24 Akim Demaille <akim@epita.fr>
+
+ * lib/Automake/FileUtils.pm: Rename filename as file_name to be
+ consistent with the terminology of the GNU coding standards.
+ From Paul Eggert.
+ (update_file): Accept a $force argument, so that --force always
+ updates the time stamps.
+
+2005-01-23 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/automake.texi (How the Linker is Chosen): Explain how the
+ linker is chosen without diagram, and update to match the code.
+ Suggestion from Adrian Bunk.
+
+2005-01-16 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/am/subdirs.am ($(RECURSIVE_TARGETS), $(RECURSIVE_CLEAN_TARGETS)):
+ Process all words of $MAKEFLAGS when checking for -k.
+ * tests/check4.test: New file.
+ * tests/Makefile.am (TESTS): Add check4.test.
+ Report from Eric Blake.
+
+2005-01-13 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * m4/amversion.in (AM_AUTOMAKE_VERSION): Point users to
+ AM_INIT_AUTOMAKE if the version passed is incorrect.
+ * tests/version8.test: New file.
+ * tests/Makefile.am (TESTS): Add version8.test.
+
+2005-01-09 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * m4/amversion.in, m4/as.m4, m4/auxdir.m4, m4/ccstdc.m4,
+ m4/cond.m4, m4/depend.m4, m4/depout.m4, m4/dmalloc.m4, m4/gcj.m4,
+ m4/header.m4, m4/init.m4, m4/install-sh.m4, m4/lead-dot.m4,
+ m4/lex.m4, m4/lispdir.m4, m4/maintainer.m4, m4/make.m4,
+ m4/minuso.m4, m4/missing.m4, m4/mkdirp.m4, m4/multi.m4,
+ m4/obsol-gt.m4, m4/obsol-lt.m4, m4/obsolete.m4, m4/options.m4,
+ m4/protos.m4, m4/python.m4, m4/regex.m4, m4/runlog.m4,
+ m4/sanity.m4, m4/strip.m4, m4/tar.m4: Use the same all-permissive
+ license that is used in aclocal.m4. Relicensing backed by RMS.
+
+ * doc/automake.texi (A Library, LIBOBJS): Mention that empty
+ libraries are not portable.
+
+2005-01-05 Akim Demaille <akim@epita.fr>
+
+ * aclocal.in ($ac_defun_rx): Match AU_ALIAS.
+ * tests/aclocal5.test (MORE_DEFS): Rename as...
+ (AM_TEST): this so that undefined macros are caught.
+ And make it an alias of AC_SUBST.
+ Test AU_ALIAS.
+ Reported by Martin Bravenboer.
+
+2005-01-03 Alexandre Duret-Lutz <adl@gnu.org>
+
+ Fix handling of per-target flags in link rules.
+ * automake.in (define_per_target_linker_variable): New function.
+ (handle_programs, handle_ltlibraries): Use it.
+ (%link_languages): New map.
+ (register_language): Fill it.
+ * lib/am/ltlibrary.am (%LTLIBRARY%): Do not append
+ $(%XLTLIBRARY%_LDFLAGS) to the command, this is now done by
+ define_per_target_linker_variable if needed.
+ * lib/am/program.am (%PROGRAM%%EXEEXT%): Likewise with
+ $(%XPROGRAM%_LDFLAGS).
+ * doc/automake.texi (Program and Library Variables): Mention
+ AM_LDFLAGS and AM_LIBTOOLFLAGS in the definition of maude_LDFLAGS
+ and maude_LIBTOOLFLAGS.
+ * tests/libtool9.test: New file.
+ * tests/Makefile.am (TESTS): Add it.
+ * NEWS: Explain the backward incompatibility.
+ Report from Akim Demaille.
+
+2005-01-01 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/automake.texi (Requirements) <AC_CONFIG_FILES>: Discuss
+ specifications with shell variables.
+ (Optional) <AC_CONFIG_HEADERS, AC_CONFIG_LINKS>: Point to
+ AC_CONFIG_FILES for this explanation.
+ * automake.in (substitute_ac_subst_variables_worker,
+ substitute_ac_subst_variables): Mew functions.
+ (rewrite_inputs_into_dependencies): Use substitute_ac_subst_variables
+ to ignore dependencies that contain unAC_SUBSTed shell variables.
+ (handle_configure): Likewise, do not output rules for
+ AC_CONFIG_HEADERS, AC_CONFIG_FILES, and AC_CONFIG_LINKS targets that
+ unAC_SUBSTed contain shell variables.
+ * tests/autohdr4.test: Use an AC_SUBST variable in a specification.
+ * tests/output11.test, tests/output12.test: New files.
+ * tests/Makefile.am (TESTS): Add output11.test and output12.test.
+
+ * aclocal.in (parse_arguments, write_aclocal): Bump copyright year.
+ * automake.in ($gen_copyright, version): Likewise.
+
+-----
+
+Copyright (C) 2005-2017 Free Software Foundation, Inc.
+
+Copying and distribution of this file, with or without modification, are
+permitted provided the copyright notice and this notice are preserved.
+
+;; Variables:
+;; coding: utf-8
+;; End:
diff --git a/old/ChangeLog.11 b/old/ChangeLog.11
new file mode 100644
index 000000000..6b01cec1f
--- /dev/null
+++ b/old/ChangeLog.11
@@ -0,0 +1,13107 @@
+2011-12-27 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: drop unnecessary requirement in 'subpkg.test'
+ * tests/subpkg.test ($required): Drop "bison", it is not required
+ anymore since commit `v1.11-502-g7e5ae80'.
+
+2011-12-27 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ gitlog-to-changelog: new auxiliary script, synced from gnulib
+
+ We have plans to stop maintaining a version-controlled ChangeLog
+ file in the Automake repository, and instead begin to generate it
+ automatically from the git log messages. To do so, we will use
+ the `gitlog-to-changelog' script from gnulib.
+
+ * lib/gitlog-to-changelog: New, synced from gnulib.
+ * Makefile.am (fetch): Fetch and sync it.
+ * lib/Makefile.am (EXTRA_DIST): Distribute it.
+
+2011-12-27 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ regex: remove obsolete macro AM_WITH_REGEX
+ Today, practically nobody uses the GNU rx library, which, according
+ to its own website <https://www.gnu.org/software/rx/rx.html>, has
+ been "decommissioned". Consequently, the automake-provided macro
+ AM_WITH_REGEX is not used nor required anymore.
+ * m4/regex.m4: Delete.
+ * m4/Makefile.am (dist_automake_ac_DATA): Do not list it anymore.
+ * doc/automake.texi (Obsolete Macros): Remove description, and in
+ fact any mention, of `AM_WITH_REGEX'.
+ * tests/regex.test: Delete.
+ * tests/help-regex.test: Likewise.
+ * tests/regex-obsolete.test: Likewise.
+ * tests/list-of-tests.mk: Do not list them anymore.
+ * NEWS: Update.
+ See also commits `v1.11-587-g5f335be' and `v1.11-433-g37b0aee',
+ where that macro had been deprecated.
+
+2011-12-27 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ cosmetics: be more consistent in copyright notices in tests
+ * tests/cond39.test: Update the heading copyright notice, to be
+ consistent with the formulation used in the other files.
+ * tests/cond40.test: Likewise.
+ * tests/cond41.test: Likewise.
+ * tests/cond42.test: Likewise.
+ * tests/cond43.test: Likewise.
+ * tests/conflnk4.test: Likewise.
+ * tests/extra8.test: Likewise.
+ * tests/extra9.test: Likewise.
+ * tests/suffix13.test: Likewise.
+ * tests/vala.test: Likewise.
+ * tests/vala1.test: Likewise.
+ * tests/vala2.test: Likewise.
+ * tests/vala3.test: Likewise.
+ * tests/vala4.test: Likewise.
+ * tests/vala5.test: Likewise.
+ * lib/Automake/tests/Condition.pl: Likewise.
+ * lib/Automake/tests/Condition-t.pl: Likewise.
+ * lib/Automake/tests/DisjConditions.pl: Likewise.
+ * lib/Automake/tests/DisjConditions-t.pl: Likewise.
+ * lib/Automake/tests/Version.pl: Likewise.
+ * lib/Automake/tests/Wrap.pl: Likewise.
+ * lib/Automake/tests/Cond2.pl: Add copyright notice.
+ * lib/Automake/tests/Cond3.pl: Likewise.
+ * lib/Automake/tests/DisjCon2.pl: Likewise.
+ * lib/Automake/tests/DisjCon3.pl: Likewise.
+ * lib/Automake/tests/Version2.pl: Likewise.
+ * lib/Automake/tests/Version3.pl: Likewise.
+
+2011-12-27 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap/awk: "Bail out!" recognized also after leading whitespace
+ Newer versions of TAP::Harness (e.g., 3.23 on Perl 5.14.1)
+ recognize a "Bail out!" directive also when it is prepended by
+ leading whitespace; this was not the case for older TAP:Harness
+ versions, (e.g., for version 3.17 on Perl 5.12.4), and for our
+ TAP driver implemented in awk.
+ * lib/tap-driver.sh: Handle the "Bail out!" directive also when
+ it is preceded by leading whitespace.
+ * tests/tap-spurious.test: Remove the tests checking that a
+ "Bail out!" string coming right after leading whitespace does
+ not trigger a bailout action.
+ * tests/tap-bailout-leading-space.test: New test.
+ * tests/list-of-tests.mk: Add it.
+ Problem reported by Jim Meyering in automake bug#10374.
+
+2011-12-27 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failure of cond29.test
+ * tests/cond29.test: Limit the amount of virtual memory available
+ to the automake process to ~ 150 MB, rather than only ~ 20 MB, to
+ account for higher (but still acceptable) memory usages on some
+ systems (in this case, a Fedora 16 distro on ppc64). To be
+ sure not to reduce coverage, increase the number of potential
+ combinations of automake conditionals from 2**22 = 4194304 to
+ 2**24 = 16777216.
+ We have actually verified that the new version of the test case
+ catches the Automake 1.7 it is intended to check against, using
+ the Automake 1.7.9 tarball downloaded from:
+ <https://ftp.gnu.org/gnu/automake/automake-1.7.9.tar.gz>
+ Reported by Jim Meyering in automake bug#10374.
+
+2011-12-27 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ docs: "aclocal --install -I /abs/dir" actually copies files
+
+ This change is for automake bug#8407.
+
+ In the past, there had been some debate and confusion about
+ whether "aclocal --install" should copy third-party .m4 files
+ in the first directory passed to the `-I' option even when
+ such directory was given as an absolute path, or whether it
+ was better to do so only for directories specified with a
+ relative path.
+
+ The rationale for this latter behaviour was that, before the
+ existence of the `ACLOCAL_PATH' variable, the only way (a poor
+ way, I might add) for a common user to extend the search path
+ of a system-wide installation of aclocal was to export something
+ like ACLOCAL="aclocal -I /my/extra/macros" in the environment.
+ Today, the correct way to proceed is undoubtedly through the
+ use of ACLOCAL_PATH, so we can settle the question once and for
+ all, and start verifying the correct behaviour of `-I' with a
+ new test.
+
+ * tests/aclocal-install-absdir.test: New test.
+ * tests/Makefile.am (TESTS): Add it.
+ * doc/automake.texi (aclocal Options): Be more explicit about
+ this part of `--install' semantics.
+
+2011-12-26 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ docs: fix node names for automake and aclocal invocations
+
+ With the older node names, an "info automake" command issued
+ from the command line would have opened the node about the
+ invocation of the automake program, rather than the Top node
+ of the automake documentation. To invoke the Top node, one
+ had to issue the command "info Automake" instead (note the
+ different capitalization). This was suboptimal, and certainly
+ confusing.
+
+ With this change, "info automake" will open the Top node of the
+ automake documentation; to access the nodes about the invocation
+ of the automake and aclocal program, one has now to issue "info
+ automake-invocation" and "info aclocal-invocation" respectively.
+
+ This change fixes automake bug#8071.
+
+ See also commits `v2.61a-22-ge9215d1' and `v2.61a-72-g8c07b48' in
+ the autoconf git repository, which tackled a similar issue.
+
+ * doc/automake.texi (@direntry): Rename nodes `aclocal' and
+ `automake' to `aclocal-invocation' and `automake-invocation'
+ respectively.
+ * NEWS: Update.
+
+2011-12-26 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: tweak tests on silent-rules for makes without nested vars
+ * tests/silent-nested-vars.test: Define $MAKE to `./mymake' in
+ the environment, so that it will be automatically picked up by
+ configure. Related tweaks and simplifications.
+ Remove the checks verifying that silent rules are respected also
+ when the 'subdir-objects' option is set, the checks testing the
+ old syntax for user-defined silent rules, and the tests using
+ the default $MAKE programs: they are redundant w.r.t. other test
+ cases. Related simplifications.
+ Remove the temporary files used in a sanity check as soon as they
+ are not needed anymore.
+ Do not capture also the standard error of configure: we only want
+ to grep its standard output.
+ Consistently use `stdout' for the name of files where to save the
+ standard output captured from make and configure, for consistency
+ with other tests.
+ Make grepping of configure output and of the generated Makefile
+ stricter.
+ Improve and tweak the `mymake' script a little.
+ * tests/silent6.test: Make grepping of make stdout slightly
+ stricter. After having configured with silent rules disabled,
+ try to force the use silent rules with `make V=1'.
+
+2011-12-25 Paul Eggert <eggert@cs.ucla.edu>
+
+ silent-rules: fallback for makes without nested vars
+
+ This fixes two problems reported for Automake (Bug#9928, Bug#10237)
+ and is in response to a bug report for building coreutils on HP
+ NonStop OS (Bug#10234). The problem is that HP NonStop 'make'
+ treats a line like "AM_V_CC = $(am__v_CC_$(V))" as one that
+ expands a macro with the funny name am__v_CC_$(V instead of the
+ desired name am__v_CC_1 or am__v_CC_0, and since the funny macro
+ is not defined the line is equivalent to "AM_V_CC = )"; this
+ inserts a stray ")" when $(AM_V_CC) is used, which eventually
+ causes 'make' to fail.
+
+ The basic idea is that instead of generating Makefile.in lines like
+ "AM_V_CC = $(am__v_CC_$(V))", we generate
+ "AM_V_CC = $(am__v_CC_@AM_V@)". We then AC_SUBST $(V) for @AM_V@
+ in the usual case where `make' supports nested variables,
+ and substitute 1 (or 0) otherwise. Similarly for usages like
+ $(am__v_CC_$(AM_DEFAULT_VERBOSITY)).
+
+ With this change, make implementations that doesn't grasp nested
+ variable expansions will still be able to run Makefiles generated
+ using the silent-rules option. They won't allow the user to
+ override the make verbosity at runtime through redefinition of
+ $(V) (as in "make V=0"); but this is still an improvement over not
+ being able to work at all.
+
+ * NEWS: Document this.
+ * automake.in (define_verbose_var): When defining the variables,
+ use @AM_V@ rather than $(V), and use @AM_DEFAULT_V@ rather than
+ $(AM_DEFAULT_VERBOSITY).
+ * doc/automake.texi (Automake silent-rules Option): Explain new system.
+ * m4/silent.m4 (AM_SILENT_RULES): Check whether `make' supports
+ nested variables, and substitute AM_V and AM_DEFAULT_V accordingly.
+ * tests/silent-nested-vars.test: New test.
+ * tests/Makefile.am (TESTS): Add it.
+
+2011-12-24 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ gitignore: use only one .gitignore file, in the top-level directory
+ * doc/.gitignore, doc/amhello/.gitignore, lib/Automake/.gitignore,
+ lib/Automake/tests/.gitignore, tests/.gitignore: Deleted, their
+ contents merged into ...
+ * .gitignore: ... this top-level file. Since we are at it, improve
+ it by anchoring files where it makes sense.
+
+2011-12-24 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: one more fixlet for gettext macros requirement
+ * tests/gettext-macros.test (configure.in): Add calls to
+ AC_INIT and AC_PROG_CC, to avoid a spurious failure in the
+ later aclocal invocation.
+ Luckily, this wart wasn't causing any spurious SKIP or FAIL,
+ but only the redundant addition to the `-Wno-syntax' option
+ to some aclocal invocations in the gettext tests.
+
+2011-12-24 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix handling of gettext macros requirement
+
+ The code introduced in the earlier change `v1.11-581-gb7d67d5'
+ and aimed at automatically fetching all the .m4 files provided by
+ gettext has proven inadequate, since it hasn't managed to truly
+ and always get *all* the required .m4 files. For example, it has
+ failed to fetch the file `intldir.m4' (present in gettext 0.18.1,
+ and where the macro `AM_GNU_GETTEXT_INTL_SUBDIR' is defined),
+ which in turn has caused spurious SKIPs of at least the test
+ `gettext3.test'.
+
+ The reason for this debacle is that autopoint looks at the version
+ specified in AM_GNU_GETTEXT_VERSION to decide which version of the
+ gettext infrastructure to bring in; since we were unconditionally
+ specifying the older 0.10.35 version, the newer `.m4' files weren't
+ brought in.
+
+ * tests/gettext-macros.test: In AM_GNU_GETTEXT_VERSION, instead
+ of unconditionally specifying the older 0.10.35 version, specify
+ the version of the available `gettextize' or `autopoint' program,
+ dynamically extracted with the help of ...
+ (extract_program_version):... this new function, and saved ...
+ ($autopoint_version): ... in this new variable.
+
+2011-12-23 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: automatically handle deps also for generated tests
+ * tests/gen-testsuite-part: The test scripts are now scanned for
+ automatic dependency generation *after* the auto-generated tests
+ have been created, so they too will be scanned. It is a little
+ tricky to ensure that the freshly-generated tests are correctly
+ scanned, and we do that with the help of ...
+ (@generated_tests): ... this new variable.
+ Other related minor changes and refactorings.
+
+2011-12-23 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: auto-generate deps for tests requiring libtool/gettext
+ * tests/gen-testsuite-part: Tests requiring libtool (or related
+ programs) will need libtool-provided m4 macros, so they should
+ be run after `libtool-macros.test'. Similarly for gettext tests.
+ So, generate proper declarations of such dependencies.
+ * tests/Makefile.am: Remove now-unneeded hand-written declaration
+ of those dependencies.
+
+2011-12-23 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: remove FIXME comments from tricks to pacify syntax checks
+ Originally, I myself had insisted on adding those "FIXME" comments
+ near every unusual construct or use of "creative quoting" whose
+ only purpose was to avoid false positive from out syntax checks.
+ I did that with the expectation that we could have easily and soon
+ added a whitelisting capability to our maintainer-specific syntax
+ checks. This hasn't been the case unfortunately, and now those
+ "FIXME" in the comments are just distracting noise, making it more
+ difficult to grep the test cases for stuff that could really use a
+ fix or an improvement. So just get rid of them.
+ * tests/instdir-ltlib.test: Remove that extra "FIXME".
+ * tests/instdir-prog.test: Likewise.
+ * tests/parallel-tests3.test: Likewise.
+ * tests/parallel-tests-dry-run.test: Likewise.
+ * tests/parallel-tests-console-output.test: Likewise.
+ * tests/parallel-tests-no-color-in-log.test: Likewise.
+ * tests/tap-realtime.test: Likewise.
+ * tests/test-trs-recover.test: Likewise.
+ * tests/tap-deps.test: Likewise.
+
+2011-12-23 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: few minor fixlets, improvements and tweakings
+ * tests/defs-static.in ($top_testbuilddir): New, for consistency
+ and completeness.
+ * tests/Makefile.am (do_subst): Substitute @abs_top_testbuilddir@
+ as well.
+ * tests/java-compile-run-mested.test: Prefer AM_TESTS_ENVIRONMENT
+ over TESTS_ENVIRONMENT, now that the former has become available.
+ * tests/java-compile-run-flat.test: Correct a botched "FIXME"
+ comment.
+ * tests/tap-realtime.test: Remove extra whitespace in comments.
+ * tests/missing-tar.test: Use `get_shell_script' to bring in the
+ `missing' script, to increase coverage. Remove redundant call to
+ `set -e'. Fix a typo in comments.
+ * tests/get-sysconf.test: Remove redundant definitions of
+ `$top_testsrcdir', `testbuilddir' and `$top_testbuilddir'.
+
+2011-12-23 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: remove redundant uses of `set -e'
+ * tests/deleted-am.test: Do not set the `errexit' shell flag, as
+ it is already set by `tests/defs'.
+ * tests/deleted-m4.test: Likewise.
+ * tests/dist-missing-am.test: Likewise.
+ * tests/dist-missing-am.test: Likewise.
+ * tests/dist-missing-m4.test: Likewise.
+ * tests/dist-missing-included-m4.test: Likewise.
+ * tests/get-sysconf.test: Likewise.
+ * tests/makefile-deps.test: Likewise.
+ * tests/remake-m4-pr10111.test: Likewise.
+ * tests/remake-am-pr10111.test: Likewise.
+ * tests/remake-deleted-am.test: Likewise.
+ * tests/remake-deleted-am2.test: Likewise.
+ * tests/remake-deleted-am-subdir.test: Likewise.
+ * tests/remake-renamed-am.test: Likewise.
+
+2011-12-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix failure due to debugging code forgotten into a test
+ * tests/missing-tar.test: Don't ever call the `missing' script
+ with `sh -x'; this was used for debugging, but an instance of
+ it slipped into the committed test case. Bug revealed by a
+ failure on a Solaris 10 system with GNU tar installed as `gtar'.
+
+2011-12-23 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Merge branch 'master' into testsuite-work
+ * tests/gettext-macros.test: In the generated `get.sh' file,
+ use `skip_all_', not `skip_'.
+ * tests/libtool-macros.test: Likewise.
+ * tests/list-of-tests.mk: Update.
+
+2011-12-23 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: avoid spurious failure of libtool and gettext tests
+
+ On Solaris 10 (and presumably earlier), /bin/sh trips up on
+ here-documents that contains a command substitution *and* are
+ fed to a shell function:
+
+ # All as expected.
+ $ cat <<END
+ `pwd`
+ END
+ /home/stefano
+ $ echo status = $?
+ status = 0
+
+ # An apparently innocuous function ...
+ $ kitty () { cat; }
+ # ... but hilarity ensues!
+ $ kitty <<END
+ `pwd`
+ END
+ /tmp/sh137723: cannot open
+ $ echo status = $?
+ status = 1
+
+ We need to work around this misbehaviour in a couple of our
+ tests (whose failures where causing cascading failures in a
+ lot of other tests).
+
+ * tests/gettext-macros.test: Avoid the use of command substitution
+ in a here-document passed to the `indent' function, by using the
+ `echo' builtin instead.
+ * tests/libtool-macros.test: Likewise.
+
+ See also:
+ <https://lists.gnu.org/archive/html/bug-autoconf/2011-12/msg00001.html>
+
+2011-12-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Merge branch 'maint' into master.
+ * m4/regex.m4: Bump serial number by some notches, for good
+ measure. Prefer the deprecation message from maint over that
+ from master.
+ * m4/python.m4: Bump serial number.
+ * tests/Makefile.am (canon6.log): Depend on `libtool-macros.log'.
+ (canon7.log): Likewise.
+ (extradep2.log): Likewise.
+ (ar-lib4.log): Likewise.
+ (ar-lib6a.log): Likewise.
+ (ar-lib6b.log): Likewise.
+ (vartypo2): Likewise.
+ (posixsubst-ltlibraries.log): Likewise.
+ * tests/defs: Adjust the path of the included `get.sh' scripts
+ generated by `libtool-macros.test' and `gettext-macros.test'.
+ * aclocal.m4: Delete, it's auto-generated now.
+ * configure: Likewise.
+ * Makefile.in: Likewise.
+ * doc/Makefile.in: Likewise.
+ * m4/Makefile.in: Likewise.
+ * tests/Makefile.in: Likewise.
+ * lib/Makefile.in: Likewise.
+ * lib/am/Makefile.in: Likewise.
+ * lib/Automake/Makefile.in: Likewise.
+ * lib/Automake/tests/Makefile.in: Likewise.
+ * .gitignore: Correctly ignored the autogenerated files
+ that are not committed anymore.
+
+2011-12-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ hacking: distribute it, and mention it in the ChangeLog
+ Not distributing the HACKING file might make it more difficult,
+ for some random curious user, to get informed about or interested
+ in the Automake development process, or to send us patches.
+ * Makefile.am (EXTRA_DIST): Add HACKING.
+ * HACKING: It's OK to distribute this file, and to mention it in
+ the ChangeLog.
+
+2011-12-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ regex: deprecate the obsolete macro AM_WITH_REGEX
+ This is a backport of commit v1.11-433-g37b0aee.
+ Today, practically nobody uses the GNU rx library, which, according
+ to its own website <https://www.gnu.org/software/rx/rx.html>, has
+ been "decommissioned". Consequently, the automake-provided macro
+ AM_WITH_REGEX is not used nor required anymore. Deprecate it, so
+ that it will be possible to safely remove it in the next major
+ automake version.
+ * m4/regex.m4 (AM_WITH_REGEX): Give a warning of the class
+ `obsolete' when this macro is used.
+ * doc/automake.texi (Public Macros): Move description of
+ `AM_WITH_REGEX' from here ...
+ (Obsolete Macros): ... to here, and declare it as obsolete
+ and "to be removed in a future version".
+ * tests/regex-obsolete.test: New test.
+ * tests/Makefile.am (TESTS): Add it.
+ * NEWS: Update.
+ See also:
+ <https://lists.gnu.org/archive/html/automake-patches/2010-11/msg00131.html>
+
+2011-12-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ maint: distribute .xz tarballs, not .bz2 ones
+ Many GNU packages are moving towards xz-compressed tarballs, so
+ let's follow suit, by dropping the creation and distribution of
+ a bzip2-compressed tarball and switching to xz instead.
+ For compatibility and safeness, we will continue to create and
+ distribute a gzip-compressed tarball as well.
+ * configure.ac (AM_INIT_AUTOMAKE): Drop `dist-bzip2', add
+ `dist-xz'.
+ * NEWS: Update
+ Suggested by Jim Meyering.
+
+2011-12-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ include: avoid "deleted .am file" problem
+ * automake.in (handle_configure): When processing `configure.am',
+ also expand `HAVE-MAKEFILE-IN-DEPS' to a boolean telling whether
+ `MAKEFILE-IN-DEPS' is empty or not.
+ * lib/am/configure.am [?HAVE-MAKEFILE-IN-DEPS?]
+ (%MAKEFILE-IN-DEPS%): New target without dependencies, to
+ avoid the "deleted .am file" problem. Emit this only when
+ `?HAVE-MAKEFILE-IN-DEPS?' is true, to avoid generating an
+ "empty" dependency declaration.
+ * tests/deleted-am.test: Make grepping of error message stricter.
+ * tests/dist-missing-am.test: Likewise.
+ * tests/remake-deleted-am.test: New test.
+ * tests/remake-deleted-am-2.test: Likewise.
+ * tests/remake-deleted-am-subdir.test: Likewise.
+ * tests/remake-renamed-am.test: Likewise.
+ * tests/makefile-deps.test: Likewise.
+ * tests/Makefile.am (TESTS): Add the new tests.
+ * NEWS: Update.
+ Fixes automake bug#9768.
+ Report by Peter Johansson.
+ See also commit `Release-1-10-40-gd0ebf71', which fixed a similar
+ problem for .m4 files included by configure.ac.
+
+2011-12-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ maint: better use of autoconf 2.68 features
+ * configure.ac: Now that Automake requires autoconf 2.68 for its
+ own bootstrapping and build system, we can assume that PACKAGE_URL
+ gets automatically AC_SUBT'd.
+
+2011-12-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ cosmetics: use proper m4 quoting in configure.ac
+ * configure.ac (AC_CONFIG_SRCDIR): Use proper m4 quoting
+ for its arguments.
+ (AC_CONFIG_AUX_DIR): Likewise.
+ (AC_PROG_PATH): Likewise.
+
+2011-12-14 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: better handling of gettext and libtool requirements
+
+ This change fixes automake bug#9807.
+
+ Before this change, the automake testsuite only looked for the
+ `.m4' files containing libtool and gettext macros definitions in
+ the directory `${prefix}/share/aclocal' (and in the directories
+ specified by the `dirlist' file in there, if any), where ${prefix}
+ was the configure-time automake installation prefix (defaulting
+ to `/usr/local').
+
+ This approach had various shortcomings and disadvantages. Let's
+ briefly describe the three major ones.
+
+ First, on most GNU/Linux systems, a libtool or gettext installed
+ from distro-provided packages (e.g., by dpkg on Debian/Ubuntu, or
+ by rmp on RedHat/Fedora) would have `/usr', not `/usr/local', as
+ its ${prefix}; so, trying to run the automake testsuite with a
+ simple "./configure && make && make check" would have failed to
+ execute the libtool and gettext tests on most GNU/Linux distros.
+ It's true that it was quite easy to work around this issue, by
+ creating a proper `/usr/local/share/aclocal/dirlist' file with
+ an entry pointing to `/usr/share/aclocal' (a workaround in fact
+ used by most automake developers); but the typical user wasn't
+ aware of the necessity of this trick, so the libtool and gettext
+ tests was usually skipped on testsuite runs "in the wild", thus
+ needlessly reducing coverage.
+
+ Second, the older testsuite behaviour made more difficult for
+ the developers to run the testsuite with non-default libtool or
+ gettext. For example, assume the developer is working on a system
+ that has a default libtool version 1.5 installed in the /usr/local
+ hierarchy; to improve coverage, the developer installs also a more
+ modern libtool version, say 2.4, in its home directory, let's say
+ in ~/libtool-2.4; he then tries to run the automake testsuite with
+ this more modern libtool by doing an (apparently) simple:
+ $ PATH=$HOME/libtool-2.4:$PATH make check
+ But the automake testsuite would still look for libtool macros in
+ /usr/local/share/aclocal, not in ~/libtool-2.4/share/aclocal, so
+ the wrong version of the macros would be picked up, and the tests
+ would either fail spuriously or (which would be worse) pass without
+ truly covering the libtool version the developers was thinking to
+ be testing with.
+ Worse again, the automake testsuite would *unconditionally* look
+ for libtool macros in /usr/local/share/aclocal, so even something
+ like:
+ $ export ACLOCAL_PATH=$HOME/libtool-2.4/share/aclocal
+ $ PATH=$HOME/libtool-2.4:$PATH make check
+ wouldn't work.
+
+ Third and last, during a "make distcheck", automake is configured
+ with a ${prefix} pointing to a proper subdirectory of the build
+ directory (usually `pwd`/_inst), which gets created on-the-fly;
+ in this case, with the old approach, the automake testsuite never
+ found the libtool and gettext macro files, ans so the libtool and
+ gettext tests was *always* skipped in a "make distcheck".
+
+ * tests/libtool-macros.test: New helper test, looking (with the
+ help of the `libtoolize' script) for libtool macro files required
+ by most libtool tests, and making them easily accessible.
+ * tests/gettext-macros.test: New helper test, looking (with the
+ help of the `libtoolize' script) for libtool macro files required
+ by most libtool tests, and making them easily accessible.
+ * tests/defs.in: Update to make it rely on the results and setups
+ of `libtool-macros.test' and `gettext-macros.test'.
+ * tests/Makefile.am: Declare dependency of all the logs of libtool
+ tests from `libtool-macros.log', and all the logs of gettext tests
+ from `gettext-macros.log'.
+ (TESTS): Add the new tests.
+
+2011-12-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ fix: typos and grammaros in comments of the new test
+ * tests/get-sysconf.test: Fix few typos, grammaros and botched
+ wording. Reported by Eric Blake.
+
+2011-12-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: report useful system information in 'test-suite.log'
+ It has already happened various times that a user has run the
+ automake testsuite, experienced a failure, read the messages
+ telling him "See tests/test-suite.log" and "Please report to
+ bug-automake@gnu.org", and done exactly that -- sending us only
+ the contents of `tests/test-suite.log', which are usually not
+ enough to start debugging the reported failure. So we have to
+ ask him for more details, and usually also for the `config.log'
+ file generated by configure. It's time to fix this recurring
+ feedback inefficiency. We do so by creating a dummy test case
+ that takes care of copying the contents of `config.log', plus
+ other useful system information, in the final `test-suite.log'.
+ * tests/get-sysconf.test: New test, gathering system information
+ and then always terminating with a SKIP, so that its output gets
+ copied in `test-suite.log'.
+ * tests/Makefile.am (TESTS): Add it.
+
+2011-12-07 Reuben Thomas <rrt@sc3d.org> (tiny change)
+
+ python: remove relics for Python 1.5 support
+ * m4/python.m4: The comments in here claim to support only
+ Python >= 2.0, yet this file still has specific support for
+ Python 1.5. Just remove it, python 1.5 is 12 years old now,
+ and practically defunct.
+ * NEWS: Update.
+ See also commit `Release-1-10-205-gd5bec12', "Support for
+ Python 3.0, drop support for pre-2.0."
+
+2011-12-21 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ configure: remove extraneous 'eval's from AM_RUN_LOG invocations
+ * configure.ac: Remove extra 'eval's from AM_RUN_LOG invocations;
+ for example, instead of "AM_RUN_LOG([eval $PERL --version])",
+ simply use "AM_RUN_LOG([$PERL --version])"
+
+2011-12-21 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ configure: report TeX version in config.log
+ * configure.ac: If possible, report the version of the selected
+ TeX program; this should render the logs more informative.
+
+2011-12-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ maint: snapshots from `maint' are still development snapshots
+ The maintenance-oriented development line in the `maint' branch,
+ while being usually pretty stable and 99% backward-compatible,
+ is not always right off production-quality; but until now, the
+ Automake package version declared in configure.ac hid this fact,
+ since it appeared to be the version of a stable release (e.g.,
+ 11.1). Fix this.
+ * configure.ac (AC_INIT): Bump version to "1.11.0a".
+
+2011-12-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ configure: print proper message for test releases
+ * configure.ac: If the current release is detected to be a test
+ release or a development snapshot, print a proper warning for
+ the user.
+ * README-alpha: Delete, it's obsolete now (and in fact this file
+ hasn't been touched in eleven years, since release 1.4b or so).
+ * HACKING (Release procedure): Don't say to update README-alpha.
+
+2011-12-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ devel: help in comparing Makefile.in from different commits
+ Now that the generated Makefile.in, configure and aclocal.m4 files
+ are no longer committed in Automake's git repository, a simple
+ "git diff" or "git log" no longer shows if and how a change in
+ Automake results in changes to the Makefile.in files and/or
+ configure script of its own build system. Still, the ability to
+ peek so easily at such differences has proved itself quite useful
+ in the past, often revealing inconsistencies and blunders, and
+ sometimes even bugs; so it would be a pity to lose that altogether.
+ With this change, we add a new maintainer recipe that re-introduces
+ much of that capability, by generating and comparing on the fly the
+ Makefile.in, configure and aclocal.m4 derived from two arbitrary
+ commits of the Automake repository.
+ * Makefile.am (autodiffs, compare-autodiffs): New phony targets.
+
+2011-12-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ repo: don't commit generated files in the git repository anymore
+ It has been quite some time since autoconf and libtool have stopped
+ committing the generated autotools files in their git repositories,
+ with no significant ill effects we're aware of. It's true that the
+ autoconf bootstrap process has now the minor annoyance that a
+ pre-installed autoconf is required to complete it; but luckily
+ automake will not have a similar annoyance, since our bootstrap
+ script take care, through some hoops, to use the very automake and
+ aclocal versions from the current git checkout to generate the
+ required aclocal.m4 and Makefile.in files. In fact, this has been
+ a necessity also in the past, because automake has been known to
+ use in its own build system new development features that hadn't
+ been present in any previously released automake distribution.
+ * .gitignore: Ignore configure, aclocal.m4, and all the
+ Makefile.in files.
+ * configure.ac (AC_PREREQ): New macro call, to require the
+ latest autoconf (2.68 for the moment).
+
+2011-12-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ missing: don't try to re-run tar with a munged command line
+ * lib/missing: If the default `tar' program fails with the given
+ arguments, and GNU tar is not available, don't try to re-run the
+ default `tar' with a munged command line (e.g., ditching possibly
+ unportable options), as that could be subtly alter the intended
+ semantics (and maybe even create a somewhat corrupted tarball).
+ Also, it's worth noting that the main purpose of the `missing'
+ script is to allow a non-developer to build the package in the
+ face of slightly-skewed timestamps, not to provide wrappers for
+ all the maintainer tools -- so we don't have to try too hard
+ when `missing' is just called to wrap `tar'.
+ * tests/missing-tar.test: New test.
+ * tests/Makefile.am (TESTS): Add it.
+
+2011-12-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ missing: inform the user if GNU tar is called
+ * lib/missing: If the code trying to run GNU tar is reached, it
+ means that the previous attempt to run the default tar program
+ has failed, very likely producing some error message. At this
+ point, just running GNU tar without further comments might be
+ confusing.
+
+2011-12-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ missing: if GNU tar exists but fails when called, give up
+ * lib/missing: If the code trying to run GNU tar is reached,
+ don't continue if the invoked GNU tar program fails, as there
+ is little point in doing so (and can even be confusing and
+ counter-productive).
+
+2011-12-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ missing: miscellaneous fixlets
+ * lib/missing: Some shells, such as Solaris or FreeBSD /bin/sh,
+ warn about missing programs before performing redirections.
+ Therefore, where we have to silently check whether a program
+ exists, perform redirections on a subshell.
+ Remove redundant uses of double-quotes in variable definitions.
+ Delete an extra blank line.
+
+2011-12-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ maint: remove executable bit from automake.in
+ * automake.in: This file is not meant to be executed, only to
+ be preprocessed to create the `automake' script; so don't leave
+ it executable.
+
+2011-12-20 Peter Rosin <peda@lysator.liu.se>
+
+ tests: fix spurious failure on systems lacking unistd.h
+ This is for automake bug#10324.
+ * tests/silent-lex-generic.test (foo.l): Add a dummy #define of
+ YY_NO_UNISTD_H, so that the generated foo.c file won't require
+ unistd.h to be present (it is not present when compiling with,
+ e.g., MSVC 9).
+
+2011-12-20 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failure on MSYS/MinGW and Cygwin
+ * tests/primary-prefix-couples-force-valid.test (Makefile.am):
+ Correctly append $(EXEEXT) to the path of built binaries.
+
+2011-12-16 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ test defs: hack to support autoconf-wrapper programs
+ * tests/defs-static.in ($AUTOCONF): Add a dummy `-B' option to the
+ autoconf invocation, so that, when the Debian autoconf wrapper is
+ involved, it will correctly dispatch an autoconf >= 2.50 instead of
+ defaulting to autoconf 2.13.
+ ($AUTOHEADER, $AUTORECONF): Likewise, but for autoheader and
+ autoreconf respectively.
+ Reported by Bruno Haible:
+ <https://lists.gnu.org/archive/html/automake/2011-12/msg00039.html>
+
+2011-12-16 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix a minor spurious failure with FreeBSD make
+ * tests/remake-am-pr10111.test: Avoid using `#' comments in
+ makefile recipes, as these have been confusing FreeBSD make.
+ The failure was masked by the fact that this test is currently
+ expected to fail.
+ Suggested by a report from Bruno Haible.
+
+2011-12-16 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: make two test scripts executable
+ * tests/remake-am-pr10111.test: Make executable.
+ * tests/remake-m4-pr10111.test: Likewise.
+
+2011-12-27 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ yacc/lex tests: remove an unneeded workaround for bug#8485
+
+ * tests/yacc-d-cxx.test: Remove the workaround previously required
+ to avoid spurious failures due to automake bug#8485: that bug has
+ been solved with commit `v1.11-512-g40c3432'.
+
+2011-12-27 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ yacc/lex tests: avoid too much failures with FreeBSD make
+
+ In various Yacc/Lex tests, we used to run "make distcheck" commands
+ whose value was mostly dubious, and, even when it was there, was
+ very, very little. The presence of these extra distchecks had two
+ disadvantages: it slowed down our already-too-slow testsuite even
+ more, and, much worse, caused a lot of extra failures with FreeBSD,
+ all due to automake bug#7884, which is already exposed by the test
+ case `yacc-dist-nobuild.test'.
+
+ We can improve this situation by simply removing "make distcheck"
+ calls from a few testcases, or making them conditional to the use
+ of GNU make.
+
+ * tests/lex-clean-cxx.test: Do not call "make distcheck".
+ * tests/lex-clean.test: Likewise.
+ * tests/yacc-clean-cxx.test: Likewise.
+ * tests/yacc-clean.test: Likewise.
+ * tests/yflags-force-override.test: Likewise.
+ * tests/yacc-nodist.test: Only run "make distcheck" if make
+ is GNU make.
+
+2011-12-15 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Merge branch 'maint' into 'yacc-work'
+ * tests/silent-lex.test: Provide a dummy `yywrap()' function, to
+ avoid link errors on systems that doesn't provide a "lex library".
+ See also commit `v1.11-546-gca0ba5d'.
+
+2011-12-14 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ readme: reference webpages for automake mailing lists
+ * README: Rationalize and reorganize the (brief) description of
+ the automake mailing lists. In particular, instead of suggesting
+ the reader to write to the `-request' addresses to subscribe to
+ mailing lists, point him to the relevant webpages, where he can
+ also subscribe via a web form.
+
+2011-12-14 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ readme: update advice about testsuite execution
+ * README: Now that the automake testsuite uses the parallel-tests
+ driver, there is no need for the user to capture the stdout of
+ "make check" to determine which tests have failed: a detailed log
+ is automatically saved into the `tests/test-suite.log' file.
+ Since we are at it, improve the wording by dropping an extra
+ "please".
+
+2011-12-14 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ readme: don't reference the old homepage at sources.redhat.com
+ * README: Don't reference the old homepage at sources.redhat.com,
+ which is no longer active; reference the homepage on www.gnu.org
+ instead. See also automake bug#10157 and bug#10248.
+ * tests/README: Likewise, and remove related extra-pedantic advice
+ about copyright papers for test cases (we'll ask for those papers
+ explicitly when we think they are warranted).
+
+2011-12-12 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ hacking: some more fixlets
+ * HACKING (Release Procedure): Place the list of pre-release
+ bootstrap-and-test commands on a line of its own, so it's easy to
+ select and then paste it into a terminal window.
+ Fix the explanation of "make git-release", as, since the previous
+ change, "make git-release" would simply run "make dist" rather
+ than "make distcheck".
+ Suggestion from Jim Meyering.
+
+2011-12-12 Peter Rosin <peda@lysator.liu.se>
+
+ * NEWS: Fix typo in 'make dist-bzip2' description.
+
+2011-12-10 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ release: don't run "make distcheck" automatically
+ * Makefile.am (git-dist): The developers should test extensively
+ before finally creating the release tarball; so don't run "make
+ distcheck" on their behalf here; instead ...
+ * HACKING (Release procedure): ... state here that "make check"
+ and "make distcheck" should be run before calling "make git-dist".
+
+2011-12-15 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failure in 'color2.test'
+ * tests/color2.test: (expect-make): Add an "expect eof" directive,
+ so that the collected output from the spawned make program will be
+ displayed on stdout, as desired.
+ Since we are at it, also correctly remove a temporary file which
+ we was trying to delete using a wrong filename.
+ Problem introduced in merge `v1.11-1579-g8d3466c', probably by a
+ botched edit or conflict resolution.
+
+2011-12-15 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failure in 'lex3.test'
+ * tests/lex3.test (foo.l): Remove duplicated definition of
+ `yywrap'. Problem introduced in merge `v1.11-1579-g8d3466c'.
+
+2011-12-09 Jim Meyering <meyering@redhat.com>
+ Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ dist-xz, dist-bzip2: don't hard-code -9, honor envvar settings
+ Before the present change, automake-generated `dist-xz' rule used
+ a hard-coded `xz -9'. That was a problem because on this front,
+ xz differs from gzip and bzip2. While the latter two don't incur
+ any run-time decompression penalty for using a higher compression
+ level, specifying -9 with xz imposes a potentially fatal virtual
+ memory requirement on any client that wants to decompress your
+ tar.xz file.
+ People have complained that a tarball compressed with -9 cannot
+ be uncompressed in a low-memory environment (wrt-based embedded).
+ Hence, instead of defaulting to -9, which is useful only for very
+ large tarballs, it defaults to -e (equivalent to -6e). This
+ limits the default memory requirements imposed on decompressors,
+ yet still gives very good compression ratios.
+ * lib/am/distdir.am (dist-xz): Do not hard-code xz's -9: that made
+ it impossible to override. Actually don't default to -9, either,
+ since that induced inordinately large virtual memory usage when
+ merely decompressing. Instead, use its XZ_OPT envvar, defaulting
+ to -e if not defined. Suggested by Lasse Collin.
+ (dist-bzip2): Similarly, do not hard-code -9, but do continue to
+ use -9 by default. Honor the BZIP2 envvar.
+ * NEWS: Update.
+ * doc/automake.texi (The Types of Distributions): Describe the
+ newly enabled environment variables.
+
+2011-12-09 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ * NEWS: Fix typos, grammaros and suboptimal wording.
+ Reported by Jim Meyering.
+
+2011-12-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ maint: sync auxiliary files from upstream
+ * lib/texinfo.tex: Synced from upstream, by "make fetch".
+ * lib/config.guess: Likewise.
+ * lib/config.sub: Likewise.
+
+2011-12-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failures due to missing 'yywrap()' function
+
+ The AC_PROG_LEX Autoconf macro does not diagnose a failure to find
+ the "lex library" expected to provide a `yywrap' function (function
+ which is required to link most lex-generated programs). On the
+ contrary, when all the link attempts (i.e., with `-ll' and `-lfl')
+ fail, configure declares that no lex library is needed, and simply
+ proceeds with the configuration process -- only for the build to
+ possibly fail later, at make time.
+
+ This behaviour is intended; the Autoconf manual reads:
+ ``You are encouraged to use Flex in your sources, since it is
+ both more pleasant to use than plain Lex and the C source it
+ produces is portable. In order to ensure portability, however,
+ you must either provide a function `yywrap' or, if you don't use
+ it (e.g., your scanner has no `#include'-like feature), simply
+ include a `%noyywrap' statement in the scanner's source.''
+
+ This AC_PROG_LEX behaviour is causing some spurious failures of
+ the Automake testsuite in environments which lack a proper library
+ providing `yywrap' (this happens for example on Fedora-based
+ systems). The proper workaround is to simply provide a fall-back
+ implementation of `yywrap' in our lexers.
+
+ See also partially-overlapping commit `v1.11-871-geb147a1' (from
+ the 'testsuite-work' branch), which was motivated by similar
+ spurious failures experienced when cross-compiling.
+
+ From a report by Jim Meyering:
+ <https://lists.gnu.org/archive/html/automake-patches/2011-10/msg00092.html>
+
+ * tests/cond35.test: Provide a dummy `yywrap' function.
+ * tests/lex3.test: Likewise.
+ * tests/silent-lex-generic.test: Likewise.
+ * tests/silent-lex-gcc.test: Likewise.
+ * tests/silent-many-generic.test: Likewise.
+ * tests/silent-many-gcc.test: Likewise.
+
+2011-12-04 Paul Eggert <eggert@cs.ucla.edu>
+
+ depcomp: spelling fix
+ * lib/depcomp (-h): Fix misspelling in usage diagnostic.
+
+2011-11-28 Peter Rosin <peda@lysator.liu.se>
+
+ tests: fix 'distcheck-override-infodir.test' on Cygwin
+ * tests/distcheck-override-infodir.test (Makefile.am): Do not add
+ any `/' between $(DESTDIR) and the following paths. Otherwise,
+ when $(DESTDIR) is empty, the recipes will try to access files
+ with a leading double slash, which have an implementation-defined
+ interpretation (e.g., for Cygwin, they mean UNC paths).
+
+2011-11-24 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ cosmetics: typofix in comments
+ * tests/remake-am-pr10111.test (Makefile.am): Fix typo in comments.
+ * THANKS: Update.
+ Reported by Krzysztof Żelechowski.
+
+2011-11-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ coverage: undistributed '.am' and '.m4' files are diagnosed
+ The stub rules emitted to work around the "deleted header problem"
+ for `.m4' files (included by autoconf in e.g., configure.ac) and
+ for `.am' files (included by automake in e.g., Makefile.am) should
+ not prevent "make" from correctly complaining when such a required
+ file is missing from a distribution tarball.
+ * tests/dist-missing-am.test: New test.
+ * tests/dist-missing-m4.test: Likewise.
+ * tests/dist-missing-included-m4.test: Likewise.
+ * tests/Makefile.am (TESTS): Add them.
+ Suggestion by Ralf Wildenhues.
+
+2011-11-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ coverage: required but missing '.am' and '.m4' files are diagnosed
+ The stub rules emitted to work around the "deleted header problem"
+ for `.m4' files (included by autoconf in e.g., configure.ac) and
+ for `.am' files (included by automake in e.g., Makefile.am) should
+ not prevent the remake rules from correctly erroring out when a
+ still-required file is missing.
+ * tests/deleted-am.test: New test.
+ * tests/deleted-m4.test: Likewise.
+ * tests/Makefile.am (TESTS): Add them.
+
+2011-11-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ coverage: expose automake bug#10111 in the testsuite
+ * tests/remake-am-pr10111.test: New test, xfailing.
+ * tests/remake-m4-pr10111.test: Likewise.
+ * tests/Makefile.am (TESTS, XFAIL_TESTS): Add them.
+
+2011-11-19 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ texinfo: work around Solaris 10 xpg4 shell bug in install rules
+ * lib/am/texinfos.am (install-html-am): Use an extra variable
+ indirection to work around a bug in Solaris 10 /usr/xpg4/bin/sh.
+ Bug revealed by a failure of `txinfo21.test'. See also:
+ <https://lists.gnu.org/archive/html/bug-autoconf/2011-11/msg00005.html>
+ <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=10026#23>
+
+2011-11-17 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ configure: report perl version in config.log
+ * configure.ac: Report the version of the selected perl interpreter
+ in config.log; this should render the logs more informative.
+
+2011-11-13 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failure with older install-info
+ * tests/install-info-dir.test (foo.texi): Also add proper
+ `@settitle', `@dircategory' and `@direntry' directive, otherwise
+ older versions of `install-info' (e.g., 4.8) will fail to create
+ the `dir' index file in ${infodir}.
+ Problem revealed by a failure on NetBSD 5.1.
+
+2011-11-12 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ maintcheck: fix spurious failure in 'color2.test'
+ * tests/color2.test: Avoid creative quoting to avoid a spurious
+ failure of the `sc_tests_Exit_not_exit' maintainer check.
+
+2011-11-12 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious error in 'uninstall-fail.test' on Solaris
+ * tests/uninstall-fail.test: Solaris 10 /usr/xpg4/bin/sh can add
+ a line number before the `:' in the error messages issued by shell
+ builtins. Account for that in our grepping of make output.
+
+2011-11-12 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix typo in 'uninstall-fail.test'
+ * tests/uninstall-fail.test: Always use `$rm_f_is_silent_on_error'
+ instead of the bogus `$rm_f_is_silent_on_failure'.
+
+2011-11-19 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/install-sh: Spelling fix in comment.
+
+2011-11-10 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: avoid a spurious failure of 'ltinit.test' MinGW
+ * tests/ltinit.test: Be laxer in grepping configure output, to
+ avoid spurious failures on systems which lack POSIX dynamic
+ linking (e.g., MinGW), or when cross-compiling for such systems.
+ See also commit `v1.11-855-ge9e5d4a'.
+ Report and suggestion from Peter Rosin.
+
+2011-11-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: testsuite is now safe to run with dmake in parallel mode
+ * tests/defs.in: Unset variables DMAKE_CHILD, DMAKE_DEF_PRINTED
+ and DMAKE_MAX_JOBS, which are exported by Solaris dmake when run
+ in parallel mode, and which might confuse make processes spawned
+ by our testsuite.
+
+2011-11-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failures w.r.t. parallel make and colorization
+ * tests/color2.test: Skip the test if the $MAKE program fails to
+ consider the standard output as a tty when spawned by `expect'.
+ This is required for make implementations, like FreeBSD make and
+ Solaris dmake, that redirect the output of recipes to temporary
+ files or pipes when run in parallel mode. Since we are at it,
+ simplify the detection of a working `expect' program, and throw
+ in other minor simplifications.
+
+2011-11-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failure in 'distcheck-override-infodir.test'
+ * tests/distcheck-override-infodir.test ($required): Add
+ 'install-info'.
+
+2011-11-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: avoid another failure of 'uninstall-fail.test' on Solaris
+ * tests/uninstall-fail.test: On Solaris 10, if `/bin/rm' is run
+ with the `-f' option, it doesn't print any error message when
+ failing to remove a file (due to e.g., "Permission denied").
+ Yikes. Cater to this incompatibility, by relaxing the test when
+ a faulty `rm' is detected.
+
+2011-11-10 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: various minor tweakings, mostly related to AM_PROG_AR
+ * tests/alloca2.test: Ensure we don't experience a spurious failure
+ due to a missing `AM_PROG_AR' macro or a missing `ar-lib' auxiliary
+ script.
+ * tests/libtool4.test: Likewise.
+ * tests/ldadd.test: Likewise. Since we are at it, make grepping of
+ automake stderr stricter.
+ * tests/reqd2.test: Likewise.
+ * tests/pr211.test: Ensure automake fails also with `-Wnone', since
+ the error we are testing for is an hard error, not a mere warning.
+ * tests/syntax.test: Likewise, and ensure we don't fail to other
+ errors by removing use of `lib_LTLIBRARIES' in Makefile.am. Since
+ we are at it, make grepping of automake stderr stricter.
+
+2011-11-05 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ ar-lib: fix configure output for "unrecognized archiver interface"
+ * m4/ar-lib.m4: Ensure that, even when an error is hit while trying
+ to determine the archiver interface kind, the "checking archiver
+ interface" message from configure is properly terminated before
+ an error message is printed, to avoid slightly garbled output.
+ * tests/ar4.test: Enhance.
+ * tests/ar5.test: Likewise.
+
+2011-11-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ warnings: fix buglets for portability warnings
+ * lib/Automake/ChannelDefs.pm (switch_warning): Ensure the
+ correct implications and inter-dependencies between warnings
+ in the categories `portability', `extra-portability' and
+ `recursive-portability' are respected. Also add detailed
+ explicative comments, and references to the relevant tests.
+ * tests/dollarvar2.test: Update and extend. Also, remove
+ some unnecessary uses of `--force' option in automake calls.
+ * tests/extra-portability3.test: New test.
+ * tests/Makefile.am (TESTS): Add it.
+
+2011-11-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: extend tests on 'extra-portability' warning category
+ * tests/extra-portability.test: Redefine `$AUTOMAKE' to ensure we
+ have complete control over the automake options. Extend by using
+ also a setup where no `portability' warning is present (only an
+ `extra-portability' warning is). Other minor extensions. Remove
+ some redundant, verbose comments about the expected diagnostic.
+
+2011-11-03 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: various minor tweakings, mostly related to AM_PROG_AR
+ * tests/alloca.test: Adjust to new portability requirements due
+ to the new AM_PROG_AR macro.
+ * tests/discover.test: Likewise.
+ * tests/libobj3.test: Likewise.
+ * tests/pluseq7.test: Likewise. Also, make grepping of automake
+ expected error message stricter.
+ * tests/stdlib.test: Likewise, and extend the test a bit.
+ * tests/parse.test (configure.in): Remove redundant call to
+ AC_PROG_RANLIB.
+ * tests/library2.test: Adjust to new portability requirements
+ due to the new AM_PROG_AR macro. Also ...
+ (configure.in): ... add call to AC_PROG_CC, to ensure automake
+ really fails for the expected reason.
+
+2011-11-05 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ ar-lib: fix configure output for "unrecognized archiver interface"
+ * m4/ar-lib.m4: Ensure that, even when an error is hit while trying
+ to determine the archiver interface kind, the "checking archiver
+ interface" message from configure is properly terminated before
+ an error message is printed, to avoid slightly garbled output.
+ * tests/ar4.test: Enhance.
+ * tests/ar5.test: Likewise.
+
+2011-11-05 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: more faithful 'installcheck' support in few tests
+ * tests/ar-lib5a.test: Use the `$am_scriptdir' variable instead
+ of "$testsrcdir/../lib" or "$top_testsrcdir/lib", to test more
+ faithfully under "make installcheck".
+ * tests/ar-lib5a.test: Likewise.
+ * tests/libobj-basic.test: Likewise.
+ * tests/libobj19.test: Likewise.
+ * tests/suffix5.test: Likewise.
+
+2011-11-05 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: remove redundant settings of `errexit' shell flag
+ * tests/aclocal-path-install-serial.test: Do not set the
+ `errexit' shell flag, as it is already set by `tests/defs'.
+ * tests/ar-lib2.test: Likewise.
+ * tests/ar-lib3.test: Likewise.
+ * tests/ar-lib4.test: Likewise.
+ * tests/ar-lib5a.test: Likewise.
+ * tests/ar-lib5b.test: Likewise.
+ * tests/ar-lib6a.test: Likewise.
+ * tests/ar-lib6b.test: Likewise.
+ * tests/ar-lib7.test: Likewise.
+ * tests/ar3.test: Likewise.
+ * tests/ar4.test: Likewise.
+ * tests/ar5.test: Likewise.
+ * tests/extra-portability.test: Likewise.
+ * tests/extra-portability2.test: Likewise.
+ * tests/extra-portability3.test: Likewise.
+ * tests/install-info-dir.test: Likewise.
+ * tests/maintmode-configure-msg.test: Likewise.
+
+2011-11-05 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ generated tests: avoid extra "FIXME" comments
+ * tests/gen-testsuite-part: Avoid putting too much "FIXME"
+ comments in the generated test scripts, since they end up
+ being just counter-productive noise when one has to grep
+ the test scripts looking for real "FIXME" items.
+
+2011-09-12 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ cosmetics: fix typo in 'prove-runner' script
+ * tests/prove-runner: Remove erroneously-repeated word.
+ * THANKS: Update.
+ Reported by Dave Hart.
+
+2011-11-05 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Merge branch 'master' into testsuite-work
+ * tests/extra-portability.test: Use `$am_original_AUTOMAKE'
+ instead of the obsolete `$original_AUTOMAKE'.
+ * tests/extra-portability3.test: Likewise.
+ * tests/list-of-tests.mk: Update.
+
+2011-11-05 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Merge branch 'msvc' into master
+ * tests/extra-portability3.test: Use `$original_AUTOMAKE' instead
+ of hackishly extracting the first component of `$AUTOMAKE'.
+ * tests/extra-portability.test: Likewise. Also, since we are at
+ it, throw in a couple of small extensions and tweakings (suggested
+ by the minor merge conflicts).
+
+2011-11-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ warnings: fix buglets for portability warnings
+ * lib/Automake/ChannelDefs.pm (switch_warning): Ensure the
+ correct implications and inter-dependencies between warnings
+ in the categories `portability', `extra-portability' and
+ `recursive-portability' are respected. Also add detailed
+ explicative comments, and references to the relevant tests.
+ * tests/dollarvar2.test: Update and extend. Also, remove
+ some unnecessary uses of `--force' option in automake calls.
+ * tests/extra-portability3.test: New test.
+ * tests/Makefile.am (TESTS): Add it.
+
+2011-11-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: extend tests on 'extra-portability' warning category
+ * tests/extra-portability.test: Redefine `$AUTOMAKE' to ensure we
+ have complete control over the automake options. Extend by using
+ also a setup where no `portability' warning is present (only an
+ `extra-portability' warning is). Other minor extensions. Remove
+ some redundant, verbose comments about the expected diagnostic.
+
+2011-11-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ test defs: new functions to analyze configure help screen
+ * tests/defs (extract_configure_help, grep_configure_help): New
+ functions.
+ * tests/maintmode-configure-msg.test: Use them, reducing code
+ duplication and test brittleness.
+ * tests/help-depend.test: Likewise.
+ * tests/help-depend2.test: Likewise.
+ * tests/help-dmalloc.test: Likewise.
+ * tests/help-lispdir.test: Likewise.
+ * tests/help-multilib.test: Likewise.
+ * tests/help-python.test: Likewise.
+ * tests/help-regex.test: Likewise.
+ * tests/help-silent.test: Likewise.
+ * tests/help-upc.test: Likewise.
+ * tests/help-init.test: Make grepping of configure help screen
+ slightly stricter.
+ * tests/self-check-configure-help.test: New self test.
+ * tests/Makefile.am (TESTS): Add it.
+ From a report by Jim Meyering.
+
+2011-11-03 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Merge branch 'master' into testsuite-work
+
+ * tests/instspc.tap: Adjust to new portability requirements
+ due to the new AM_PROG_AR macro.
+ * tests/lex-lib.test: Likewise.
+ * tests/extra-portability2.test: Use `$am_original_AUTOMAKE'
+ instead of the obsolete `$original_AUTOMAKE'.
+ * tests/list-of-tests.mk: Update.
+
+2011-11-03 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: various minor tweakings, mostly related to AM_PROG_AR
+ * tests/alloca.test: Adjust to new portability requirements due
+ to the new AM_PROG_AR macro.
+ * tests/discover.test: Likewise.
+ * tests/libobj3.test: Likewise.
+ * tests/pluseq7.test: Likewise. Also, make grepping of automake
+ expected error message stricter.
+ * tests/stdlib.test: Likewise, and extend the test a bit.
+ * tests/parse.test (configure.in): Remove redundant call to
+ AC_PROG_RANLIB.
+ * tests/library2.test: Adjust to new portability requirements
+ due to the new AM_PROG_AR macro. Also ...
+ (configure.in): ... add call to AC_PROG_CC, to ensure automake
+ really fails for the expected reason.
+
+2011-11-03 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Merge branch 'msvc' into master
+
+ * tests/instspc-tests.sh: Adjust to new portability requirements
+ due to the new AM_PROG_AR macro.
+ * tests/libobj-basic.test: Likewise.
+ * tests/libobj2.test: Likewise.
+ * tests/libobj15a.test: Likewise.
+ * tests/libobj15b.test: Likewise.
+ * tests/libobj15c.test: Likewise.
+ * tests/libobj16a.test: Likewise.
+ * tests/libobj16b.test: Likewise.
+ * tests/libobj17.test: Likewise.
+ * tests/libobj18.test: Likewise.
+ * tests/libobj19.test: Likewise.
+ * tests/libobj20a.test: Likewise.
+ * tests/libobj20b.test: Likewise.
+ * tests/libobj20c.test: Likewise.
+ * tests/canon6.test: Likewise.
+ * tests/canon6.test: Likewise.
+ * tests/canon7.tests: Likewise.
+ * tests/extra9.test: Likewise.
+ * tests/extradep.test: Likewise.
+ * tests/extradep2.test: Likewise.
+ * tests/posixsubst-ldadd.test: Likewise.
+ * tests/posixsubst-libraries.test: Likewise.
+ * tests/posixsubst-ltlibraries.test: Likewise.
+ * tests/python-virtualenv.test: Likewise.
+ * tests/vartypos.test: Likewise.
+ * tests/vartypo2.test: Likewise.
+ * tests/suffix.test: Update to take into account previous
+ master-only changes.
+ * tests/suffix2.test: Likewise.
+ * tests/libobj7.test: Call automake with the `--add-missing'
+ option, instead of creating a dummy `ar-lib' file, since this
+ test now also runs "./configure" and "make".
+ * tests/suffix5.test: Copy the real `ar-lib' script file,
+ instead of creating a dummy one, since this test now also
+ runs "./configure" and "make".
+ * tests/extra-portability2.test: Fix this test not to rely
+ on the older, faulty semantics of "strictness specification
+ always reset warning level", which has been fixed in commit
+ v1.11-623-g1609491 (see also automake bug#7669 a.k.a. PR/547).
+ Since we are at it, throw inf few other minor unrelated
+ improvements.
+ * tests/extra-portability.test: Explicitly pass `-Wall' to
+ automake calls, for clarity.
+
+2011-10-21 Peter Rosin <peda@lysator.liu.se>
+
+ warnings: new 'extra-portability' category, for AM_PROG_AR
+ * lib/Automake/ChannelDefs.pm: Register new extra-portability
+ warning channel.
+ (switch_warning): Turn off extra-portability if portability is
+ turned off, and turn on portability if extra-portability is
+ turned on.
+ (set_strictness): Silence extra-portability for --gnits, --gnu
+ and --foreign.
+ * tests/extra-portability2.test: New test, checking that the
+ extra-portability channel is silenced by --gnits, --gnu and
+ --foreign.
+ * doc/automake.texi (Invoking Automake): Document the new warning
+ category and its interaction with the portability category.
+ * tests/extra-portability.test: New test, checking the interaction
+ between the portability and extra-portability warning categories.
+ * automake.in (handle_libraries, handle_ltlibraries): Move the
+ AM_PROG_AR warnings to the new extra-portability channel.
+ * tests/ar2.test: Adjust to the new warning channel.
+ * tests/pr300-lib.test: Likewise.
+ * tests/pr300-ltlib.test: Likewise.
+ * tests/pr307.test: Likewise.
+ * tests/pr401.test: Likewise.
+ * tests/pr401b.test: Likewise.
+ * tests/pr401c.test: Likewise.
+ * tests/pr72.test: Likewise.
+ * NEWS: Likewise.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-10-21 Peter Rosin <peda@lysator.liu.se>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+ Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Add new 'AM_PROG_AR' macro, triggering the 'ar-lib' script.
+ * m4/ar-lib.m4: New macro AM_PROG_AR, which locates an
+ archiver and triggers the auxiliary 'ar-lib' script if needed.
+ * m4/Makefile.am (dist_m4data_DATA): Update.
+ * automake.in ($seen_ar): New variable.
+ (scan_autoconf_traces): Set it.
+ (handle_libraries, handle_ltlibraries): Require AM_PROG_AR for
+ portability.
+ * doc/automake.texi (Public Macros): Mention the new
+ 'AM_PROG_AR' macro.
+ (Subpackages): Add AM_PROG_AR to the example.
+ (A Library): Adjust recommendations for AR given the new
+ AM_PROG_AR macro.
+ * All relevant tests: Adjust to new portability requirements due
+ to the new AM_PROG_AR macro.
+ * tests/ar-lib2.test: New test, checking that AM_PROG_AR triggers
+ install of ar-lib.
+ * tests/ar-lib3.test: New test, checking that lib_LIBRARIES
+ requires AM_PROG_AR.
+ * tests/ar-lib4.test: New test, checking that lib_LTLIBRARIES
+ requires AM_PROG_AR.
+ * tests/ar-lib5a.test: New test, checking that AM_PROG_AR triggers
+ use of ar-lib when the archiver is Microsoft lib.
+ * tests/ar-lib5b.test: New test, checking that AM_PROG_AR triggers
+ use of ar-lib when the archiver is a faked lib.
+ * tests/ar-lib6a.test: New test, checking the ordering of
+ AM_PROG_AR and LT_INIT.
+ * tests/ar-lib6b.test: New test, checking the ordering of
+ AM_PROG_AR and AC_PROG_LIBTOOL.
+ * tests/ar-lib7.test: New test, checking that automake warns
+ if ar-lib is missing.
+ * tests/ar3.test: New test, checking that AR and ARFLAGS may
+ be overridden by the user even if AM_PROG_AR is used.
+ * tests/ar4.test: New test, checking that AM_PROG_AR bails out
+ if it cannot determine the archiver interface.
+ * tests/ar5.test: New test, checking that AM_PROG_AR runs its
+ optional argument if it cannot determine the archiver interface.
+ * tests/defs.in: New required entry 'lib'.
+ * tests/Makefile.am (TESTS): Update.
+ * NEWS: Update.
+
+2011-11-03 Zack Weinberg <zackw@panix.com> (tiny change)
+ Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ maint-mode: fix botched configure messages
+ This change fixes automake bug#9890.
+ * m4/maintainer.m4 (AM_MAINTAINER_MODE): Fix the "checking ..."
+ configure message related to the enabling/disabling of maintainer
+ mode.
+ * tests/help-maintainer.test: Renamed ...
+ * tests/maintmode-configure-msg.test: ... to this, and extended
+ to cover the fixed bug. Also, since we are at it, make grepping
+ of configure help screens stricter, and throw in some few other
+ changes to reduce code duplication and enhance readability.
+ * tests/Makefile.am (TESTS): Update.
+ * THANKS: Update with Zack's new e-mail address.
+ Report and initial patch by Zack Weinberg, test cases added by
+ Stefano Lattarini.
+
+2011-10-23 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ info: allow user to inhibit creation/update of '${infodir}/dir'
+ With this change, we allow the user to request the install-info
+ rules not to update the `${infodir}/dir' file, by setting the
+ environment variable `AM_UPDATE_INFO_DIR' to the value "no".
+ This is especially useful to distro packagers, and is a definite
+ improvement over our previous hack of looking whether the
+ `install-info' program was the Debian or GNU version -- hack
+ which had been silently broken with recent versions of debian
+ install-info BTW (probably since dpkg 1.15.4, 2009-09-06).
+ This change fixes automake bug#9773. See also Debian Bug#543992.
+ * lib/am/texinfos.am: Don't look anymore at the output of
+ `install-info --version' to decide whether to use it to update
+ the `${infodir}/dir' or not; instead, honour the environment
+ variable `AM_UPDATE_INFO_DIR'.
+ * tests/install-info-dir.test: New test.
+ * tests/Makefile.am (TESTS): Add it.
+ * tests/defs: Also unset `AM_UPDATE_INFO_DIR', to avoid unwanted
+ interferences from the environment.
+ * doc/automake.texi (Texinfo): Update.
+ * NEWS: Likewise.
+ * THANKS: Likewise.
+ Report by Jonathan Nieder.
+
+2011-10-25 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ test defs: new function 'am_keeping_testdirs', for better APIs
+
+ This change is meant to make it easier for TAP-based test scripts
+ to remove files left over by completed (sub)tests, while still
+ honoring the user-provided `$keep_testdirs' setting.
+
+ * tests/defs (am_keeping_testdirs): New function, telling whether
+ we should keep the test directories around, even in case of
+ success (by default, we don't).
+ (exit trap): Use it.
+ * tests/depmod.tap: Likewise.
+ * tests/instspc.tap: Likewise. Also, fix some pre-existing
+ "copy & paste" bugs, and a typo in comments.
+
+2011-10-25 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: remove redundant `set -e', and other minor improvements
+ * tests/dejagnu-absolute-builddir.test: Do not set the `errexit'
+ shell flag, as it is already set by `tests/defs'.
+ * tests/dejagnu-relative-srcdir.test: Likewise.
+ * tests/dejagnu-siteexp-append.test: Likewise.
+ * tests/dejagnu-siteexp-useredit.test: Likewise, and fix a typo
+ in comments.
+ * tests/dejagnu-siteexp-extend.test: Likewise, and prefer the
+ use of `$distdir' over hard-coded `$me-1.0'. Also ...
+ (write_check_for): ... use `unindent' when writing from an
+ here-doc, for better code indentation.
+
+2011-10-20 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ deps: partially revert commit `v1.11-512-geeee551'
+ This change partly reverts commit "Create subdirs for generated
+ sources even when not dep tracking", of 2011-04-02.
+ That commit had caused the bugs #8485 and #8526. Since we are
+ nearing the bug-fixing automake release 1.11.2, the safest policy
+ at the moment is to just revert the problematic hunks: an older,
+ known bug is better than a regression.
+ * automake.in (handle_single_transform): Don't add a dirstamp
+ dependency, even when $object is derived and lands in a subdir.
+ * tests/Makefile.am (XFAIL_TESTS): Add lex-subobj-nodep.test,
+ remove yacc-dist-nobuild-subdir.test.
+
+2011-10-25 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: few improvements to some `ar-lib' related tests
+
+ * tests/ar-lib5a.test (Makefile.am): Also check that the target
+ library has truly been created.
+ (ar-lib): Use the real `ar-lib' script (mildly patched) rather
+ than a dummy one, to ensure better "real-life coverage". Fix
+ botched shebang line.
+ * tests/ar-lib5b.test: Extend the PATH variable to make the dummy
+ `lib' script accessible, instead of explicitly calling it by its
+ relative/absolute path.
+ (ar-lib): Fix botched shebang line.
+ (bin/lib): Likewise. Also, add explicative comments, and make
+ slightly stricter.
+
+2011-10-24 Peter Rosin <peda@lysator.liu.se>
+
+ Merge branch 'maint' into msvc
+
+ * tests/subpkg-yacc.test: Adjust to new portability requirements due
+ to the new AM_PROG_AR macro.
+
+2011-10-19 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ dejagnu: allow the package developer to extend site.exp
+ Fixes automake bug#7873.
+ * lib/am/dejagnu.am (site.exp): Depend from the files listed in
+ $(EXTRA_DEJAGNU_SITE_CONFIG), if any. Append their contents to
+ the generated site.exp (still preserving user edits).
+ * doc/automake.texi (Dejagnu Tests): Update.
+ * tests/dejagnu-siteexp-append.test: New test.
+ * tests/dejagnu-siteexp-extend.test: Likewise.
+ * tests/dejagnu-siteexp-useredit.test: Likewise.
+ * tests/Makefile.am (TESTS): Update.
+ * NEWS: Update.
+ Suggestion by Rainer Orth.
+
+2011-10-19 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ dejagnu: ensure 'srcdir' is defined as a relative directory
+ This change fixes automake bug#7833.
+ * lib/am/dejagnu.am (check-DEJAGNU): Prefer using plain $(srcdir)
+ over calculating and using the absolute path of $(srcdir).
+ * tests/dejagnu-relative-srcdir.test: New test.
+ * tests/dejagnu-absolute-builddir.test: Likewise.
+ * tests/Makefile.am (TESTS): Update.
+ Report by Ian Lance Taylor. Suggestions by Ralf Wildenhues.
+
+2010-12-13 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix testsuite failure of check12.test without DejaGNU.
+ * tests/check12.test: Require runtest.
+
+2010-12-10 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Extend and improve tests on DejaGnu support.
+ * tests/dejagnu.test: Do not create useless dummy test script.
+ Add trailing `:' command. In heading comments, add reference
+ to ...
+ * tests/check12.test: ... this new "semantic" test, covering
+ concurrent use of dejagnu tests, simple tests and `check-local'
+ target.
+ * tests/dejagnu2.test: Make test more reliable, by avoid weak
+ grepping of make output. Prefer `cat' over `echo' to append
+ to configure.in. Quote literal dots in grep regexps. Prefer
+ `grep -c ...' over `grep ... | wc -l'. Make grepping of
+ automake stderr slightly stricter. Add trailing `:' command.
+ * tests/dejagnu3.test: Prefer `cat' over `echo' to append to
+ configure.in. Check stderr of expected-to-fail "make" call.
+ Remove extra blank lines from Makefile.am.
+ * tests/dejagnu4.test: Prefer `cat' over `echo' to append to
+ configure.in. Prefer `mv -f' over plain `mv' when the target
+ file already exists. Avoid extra mkdir calls by creating more
+ directories at once. Better use of blank lines. Check that
+ the `*.log' and `*.sum' files are created by runtest also when
+ "make check" fails.
+ * tests/dejagnu7.test: Prefer `cat' over `echo' to append to
+ configure.in. Better use of blank lines. Add a trailing `:'
+ command.
+ * tests/dejagnu6.test: Likewise, and give the dejagnu test a
+ more descriptive name.
+ * tests/dejagnu5.test: Likewise. Also, simply define package
+ name to `$me' rather than using a non-obvious sed script to
+ extract it from `AC_INIT', and write the Makefile.am with only
+ one command.
+ * tests/Makefile.am (TESTS): Updated.
+
+2011-10-21 Peter Rosin <peda@lysator.liu.se>
+
+ * THANKS: Fix whitespace issue.
+
+2011-10-25 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failures due to missing 'yywrap()' function
+
+ The AC_PROG_LEX Autoconf macro does not diagnose a failure to find
+ the "lex library" expected to provide a `yywrap' function (function
+ which is required to link most lex-generated programs). On the
+ contrary, when all the link attempts (i.e., with `-ll' and `-lfl')
+ fail, configure declares that no lex library is needed, and simply
+ proceeds with the configuration process -- only for the build to
+ possibly fail later, at make time.
+
+ This behaviour is intended; the Autoconf manual reads:
+ ``You are encouraged to use Flex in your sources, since it is
+ both more pleasant to use than plain Lex and the C source it
+ produces is portable. In order to ensure portability, however,
+ you must either provide a function `yywrap' or, if you don't use
+ it (e.g., your scanner has no `#include'-like feature), simply
+ include a `%noyywrap' statement in the scanner's source.''
+
+ This AC_PROG_LEX behaviour is causing some spurious failures of
+ the Automake testsuite in environments which lack a proper library
+ providing `yywrap' (this happens for example on Fedora-based
+ systems). The proper workaround is to simply provide a fall-back
+ implementation of `yywrap' in our lexers.
+
+ See also partially-overlapping commit `v1.11-871-geb147a1' (from
+ the 'testsuite-work' branch), which was motivated by similar
+ spurious failures experienced when cross-compiling.
+
+ Reported by Jim Meyering:
+ <https://lists.gnu.org/archive/html/automake-patches/2011-10/msg00092.html>
+
+ * tests/cond35.test: Provide a dummy `yywrap' function.
+ * tests/lex3.test: Likewise.
+ * tests/lexvpath.test: Likewise.
+ * tests/silent-lex-generic.test: Likewise.
+ * tests/silent-lex-gcc.test: Likewise.
+
+2011-10-21 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: more faithful 'installcheck' support in few tests
+ * tests/test-driver-acsubst.test: Use the `$am_scriptdir'
+ variable instead of `$testsrcdir/../lib', to test more
+ faithfully under "make installcheck".
+ * tests/test-driver-cond.test: Likewise.
+ * tests/dist-auxfile.test: Likewise, and add one more use
+ of `fatal_' to report hard errors.
+ * tests/tests/dist-auxdir-many-subdirs.test: Likewise.
+
+2011-10-21 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: remove redundant settings of `errexit' shell flag
+ * tests/aclocal-path-install-serial.test: Do not set the
+ `errexit' shell flag, as it is already set by `tests/defs'.
+ * tests/aclocal-path-install.test: Likewise.
+ * tests/aclocal-path-nonexistent.test: Likewise.
+ * tests/aclocal-path-precedence.test: Likewise.
+ * tests/aclocal-path.test: Likewise.
+ * tests/dist-auxfile-2.test: Likewise.
+ * tests/dist-auxfile.test: Likewise.
+ * tests/distcheck-pr9579.test: Likewise.
+ * tests/javadir-undefined.test: Likewise.
+ * tests/subpkg-yacc.test: Likewise.
+ * tests/test-extensions-cond.test: Likewise.
+ * tests/test-extensions.test: Likewise.
+ * tests/uninstall-fail.test: Likewise.
+ * tests/uninstall-pr9578.test: Likewise.
+ * tests/distcheck-override-infodir.test: Likewise. Also,
+ fix typo in heading comments since we are at it.
+
+2011-10-20 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ fixup: add forgotten test scripts to $(TESTS)
+ * tests/list-of-tests.mk: Add various test scripts that are in
+ the git repository but weren't correctly listed in $(TESTS).
+ The inconsistency had been caused by botched/incomplete merges,
+ and revealed by the "maintainer-check-list-of-tests" target.
+
+2011-10-18 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failure with FreeBSD make and Yacc in VPATH
+ * tests/subpkg.test: Some cosmetic adjustments. Move the tests
+ checking that $(YLWRAP) is defined and installed properly when
+ ylwrap is in a default auxdir found in a parent package ...
+ * tests/subpkg-yacc.test: ... into this new test, which carefully
+ avoids to trigger the known bug#7884 (combo FreeBSD make plus Yacc
+ plus VPATH build).
+ * tests/Makefile.am (TESTS): Update.
+
+2011-10-18 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: avoid spurious failure in 'parallel-tests3.test'
+ This fixes automake bug#8788.
+ * tests/parallel-tests3.test: To ensure that the serial run of
+ the dummy testsuite is still ongoing when the parallel run has
+ terminated, use `kill -0', not a bare `kill'. This will prevent
+ a testsuite crash on NetBSD 5.1, and a testsuite hang on FreeBSD
+ 8.2. Also, since we are at it, try harder to avoid possible
+ hangs of the script in other unusual situations.
+
+2011-10-20 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failures with "chatty" make implementations
+ * tests/distcheck-missing-m4.test: On failure, some make
+ implementations (such as Solaris make) print the whole failed
+ recipe on standard output. This was causing a spurious failure
+ in the checks grepping the output from make. Work around this.
+ * tests/distcheck-outdated-m4.test: Likewise.
+
+2011-10-20 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failure on fast machines
+ * tests/aclocal-path-precedence.test: Also remove the `configure'
+ script between different test runs, to ensure it is always remade
+ by autoconf. Add proper explicative comments.
+
+2011-10-20 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: avoid spurious failure of 'uninstall-fail.test' on Solaris
+ * tests/uninstall-fail.test: All the Solaris 10 shells (/bin/sh,
+ /bin/ksh, and /usr/xpg4/bin/sh), upon failing to chdir to a
+ directory with the `cd' builtin, print a message like:
+ "sh: /root: permission denied"
+ which doesn't report the `cd' builtin anywhere. Relax the grepping
+ of the error message accordingly.
+
+2011-10-20 Jim Meyering <meyering@redhat.com>
+
+ tests: fix aclocal-print-acdir.test
+ * tests/aclocal-print-acdir.test: Adjust to pass.
+
+2011-10-19 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: avoid spurious failure of 'uninstall-fail.test' on Cygwin
+ * tests/uninstall-fail.test: Be sure to really skip this test
+ on systems that allows files to be removed from unwritable
+ directories. Motivated by a spurious failure on Cygwin 1.5.
+
+2011-10-17 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failure with autoconf 2.62
+ * tests/aclocal-path-precedence.test: Rewrite configure.in,
+ rather than appending to it, to avoid spurious failures (at
+ least with autoconf 2.62) due to repeated calls to AC_INIT.
+ Also, add package name and version arguments to AC_INIT, to
+ avoid spurious errors from automake.
+
+2011-10-16 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ docs: avoid using colon character inside arguments of @pxref
+ Fixes automake bug#9753
+ * doc/automake.texi (VPATH Builds): Avoid using colon character
+ `:' inside arguments of @pxref, as this can cause problems in
+ the generated `.info' files, and such an usage will be explicitly
+ forbidden by future texinfo documentation.
+ * THANKS: Update.
+ Reported by ДилÑн Палаузов.
+
+2011-10-17 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ refactor: improve signature of 'check_directory' sub in automake
+ * automake.in (check_directory): Take the relative directory
+ the directory to be checked is expected to be found into as
+ an optional parameter, rather than reading it from the global
+ variable `$relative_dir'.
+ (scan_autoconf_traces, check_directories_in_var): Adjust.
+
+2011-10-17 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ cosmetics: remove obsolete comment
+ * automake.in (push_required_file): Remove "FIXME" comment stating
+ that the special handling of `$config_aux_dir' breaks threaded
+ automake: this is not true anymore after the recent commits (see
+ in particular commit `v1.11-1225-gf672944').
+
+2011-10-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failure with Solaris /bin/sh
+ * tests/dist-auxfile.test: Don't use redirected `:' in a loop,
+ it hits a bug in Solaris 10 /bin/sh.
+
+2011-10-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ threaded-am: better serialization for required config files
+ With this change, we make serialization/de-serialization of
+ required config files installs more granular, and in the process
+ fix the bug introduced by commit `v1.11-1219-g326ecba'.
+ * automake.in ($required_conf_file_queue): Move its declaration
+ earlier.
+ (require_file_internal): Add a new argument telling whether the
+ function should act immediately or queue its action for the master
+ thread to handle.
+ (queue_required_conf_file): Renamed ...
+ (queue_required_file_check_or_copy): ... to this.
+ (require_queued_conf_file): Renamed ...
+ (require_queued_file_check_or_copy): ... to this, and make it call
+ `required_file_check_or_copy' instead of `require_file_internal'.
+ (require_conf_file, handle_makefiles_threaded): Adjust and simplify
+ accordingly.
+ * tests/Makefile.am (XFAIL_TESTS): Remove `parallel-am.test'.
+
+2011-10-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ automake: refactor, break up 'require_file_internal'
+ This refactoring is only required in view of future changes.
+ * automake.in (require_file_internal): Move the guts of this
+ function ...
+ (required_file_check_or_copy): ... into this new function. This
+ ensures that calls to `push_required_file' and code that copies
+ required files are placed in separate functions; this will be
+ very useful for reorganizing de-serialization of file installs
+ in future changes.
+
+2011-10-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ dist: separate auxiliary file instantiation from DIST_COMMON update
+ This change simplifies the automake internals dealing with the
+ checking, copying and distributing of required auxiliary files.
+ With this change, a required auxiliary file is *unconditionally*
+ added to the contents of the DIST_COMMON variable in the generated
+ Makefile.in, before checking whether it exists, or trying to copy
+ it (if `--add-missing' is in use). This shouldn't be a problem,
+ since if the checking or copying of the file fails, automake will
+ bail out, the Makefile.in won't be created, and thus its content
+ will not matter. OK, this is not completely true when threaded
+ automake is in use, but then, such a situation was also possible
+ before this patch, so no regression here, which is enough for us.
+ This change is the first of a series of steps aimed at fixing
+ the regression introduced in threaded automake usage by commit
+ `v1.11-1219-g326ecba'.
+ * automake.in (require_file_internal): Add the required file to
+ DIST_COMMON unconditionally.
+ * tests/missing-auxfile-stops-makefiles-creation.test: New test.
+ * tests/Makefile.am (TESTS): Add it.
+
+2011-10-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ refactor: rename a subroutine to a more proper name
+ * automake.in (maybe_push_require_file): Renamed ...
+ (push_required_file): ... to this.
+ All callers adjusted.
+
+2011-10-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ dist: truly always distribute files in AC_REQUIRE_AUX_FILE
+ This change fixes automake bug#9651.
+ * automake.in (handle_dist): Files whose distribution is required
+ by configure.ac are now correctly distributed even if the build-aux
+ directory coincides with the top-level directory.
+ * tests/Makefile.am (XFAIL_TESTS): Remove `dist-auxfile.test'.
+ * NEWS: Update.
+
+2011-10-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ dist: simplify automake code accordingly to the previous changes
+ After the previous change `v1.11-1219-g326ecba', every Makefile.am
+ requiring a file in the "config auxdir" will cause it to be listed
+ in the DIST_COMMON variable of the corresponding generated
+ Makefile.in, not only of the top-level Makefile.in. Thus we don't
+ need to worry anymore about trying to distribute files in the
+ config auxdir from the top-level Makefile or the Makefile in
+ config auxdir (if any). This allows us to carry out some useful
+ simplifications in the automake script.
+ This will however cause some changes in the generated Makefile;
+ for example, if the `PROGRAMS' primary is used only in a subdir
+ Makefile.am, the `depcomp' script will be distributed only by
+ `subdir/Makefile', not by the top-level Makefile. This change
+ can be seen as an internal detail though, and definitely warranted
+ by the nice simplifications the current commit provides.
+ * automake.in ($automake_will_process_aux_dir): Variable removed.
+ (scan_autoconf_files): Adjust and simplify.
+ (handle_makefiles_threaded): Likewise.
+ (get_number_of_threads): Likewise.
+ (require_file_internal): Likewise.
+ (maybe_push_required_file): Its return value is not used anymore,
+ so return nothing. Add special handling for distributed files from
+ `$config_libobj_dir'. Also, catch "this can't happen" situations,
+ and abort accordingly. Fix function description to better fit its
+ new role.
+ * tests/libobj19.test: Extend to also check situations where the
+ Makefile.am using $(LIBOBJS) is not the top-level one.
+ * tests/distcom6.test: Delete, merged into ...
+ * tests/distcom2.test: ... this test, which has been update to
+ account for the changed automake semantics.
+ * tests/Makefile.am (TESTS): Update.
+ * NEWS: Update.
+
+2011-10-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ dist: auxiliary files can be distributed from subdir Makefiles
+ With this change, we make it possible for a subdir Makefile.am
+ to distribute files in the config auxdir; while this means that
+ some files might be copied multiple times, it simplify some logic
+ in the automake script, and fix at least one important bug. In
+ fact, before this change, the auxiliary script `test-driver' was
+ not being distributed as expected when TESTS was defined only in
+ a subdir Makefile (which is a pretty common setup indeed). Now
+ this does not happen anymore: so the present change fixes automake
+ bug#9546.
+ Another welcome collateral effect is that `dist-auxfile-2.test'
+ now passes.
+ OTOH, the present changes *breaks threaded automake*. The reason
+ is that automake needs to serialize file installations spawned
+ by `--add-missing' (this isn't for cosmetic reasons, but is
+ really needed to avoid possible race conditions and botched output
+ files). Currently the code that installs required files is
+ intertwined with the code that declares the DIST_COMMON variables;
+ so, upon de-serialization, the definition of DIST_COMMON might get
+ emitted in the wrong Makefile.in.
+ Some follow-up refactoring in automake will soon take care of
+ remedying this situation. For the moment, we just declare some
+ "parallel-am" tests as xfailing.
+ * automake.in (maybe_push_required_file): Add ad-hoc handling for
+ the case where the directory part of the required file is different
+ from the subdir where the current Makefile.am resides, but is equal
+ to the "config-aux directory" ($config_auxdir). This is needed to
+ allow a construct in a non-top-level Makefile.am to require a file
+ in the config-aux directory.
+ * tests/test-driver-is-distributed.test: Extend and adjust. This
+ test now passes.
+ * tests/java-compile-run-nested.test: Call automake with the `-a'
+ option to ensure that the `test-driver' auxiliary script gets
+ correctly installed. This test now passes.
+ * tests/distcom-subdir.test: New test.
+ * tests/dist-readonly.test: Likewise.
+ * tests/dist-repeated.test: Likewise.
+ * tests/dist-auxdir-many-subdirs.test: Likewise.
+ * tests/distcom7.test: Removed, it's obsolete now.
+ * tests/Makefile.am (TESTS, XFAIL_TESTS): Update.
+
+2011-10-11 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ coverage: conditional contents in LOG_DRIVER variables
+ * tests/test-driver-cond.test: New test.
+ * tests/Makefile.am (TESTS): Add it.
+
+2011-10-11 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ coverage: LOG_DRIVER variables can be defined through AC_SUBST
+ * tests/test-driver-acsubst.test: New test.
+ * tests/Makefile.am (TESTS): Add it.
+
+2011-10-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ parallel-tests: warn on conditional TEST_EXTENSIONS definition
+ Before this change, automake would have still bailed out, but
+ with a confusing error message (about an invalid redefinition
+ of TEST_EXTENSIONS).
+ * automake.in (handle_tests): Warn explicitly if TEST_EXTENSIONS
+ has conditional contents.
+ * tests/test-extensions-con.test: New test.
+ * tests/Makefile.am (TESTS): Add it.
+ * NEWS: Update.
+
+2011-10-06 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ parallel-tests: don't allow @substitutions@ in TEST_EXTENSIONS
+ Even after the last commit `v1.11-476-g90bea64', the checks
+ performed by automake on entries in $(TEST_EXTENSIONS) tried to
+ allow for @substitited@ stuff. This however ends up allowing
+ quite brittle setups, which, most importantly, are of no real
+ practical usefulness anyway. So it's better to just disallow
+ @substitutions@ in TEST_EXTENSIONS altogether, offering a clear
+ error message, instead of risking weird bugs and unexpected
+ behaviors in the generated Makefile.in.
+ * automake.in ($TEST_EXTENSION_PATTERN): Turned from a regular
+ expression ...
+ (is_valid_test_extension): ... into this subroutine. Don't allow
+ generic @substitutions@ anymore (possibly making an exception for
+ `@EXEEXT@' under the proper circumstances).
+ * tests/test-extensions.test: Adjust and extend. This test does
+ not cause any internal error in automake anymore now.
+
+2011-10-06 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failure in 'insthook.test'
+ * tests/insthook.test (Makefile.am): Add a proper `uninstall-hook'
+ target to remove the symlink created by the `install-exec-hook'
+ target; this prevents "make distcheck" from failing spuriously.
+ Since we are at it, delete an extra blank line, and add a trailing
+ `:' command.
+
+2011-10-06 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ maintcheck: fix spurious failure
+ * lib/am/distdir.am: Use `$(infodir)', not `${infodir}', to avoid
+ complaints from the `sc_no_brace_variable_expansions' maintainer
+ check.
+
+2011-10-18 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ * tests/yacc-dist-nobuild.test: Add reference to relevant bug#7884.
+
+2011-10-06 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious error in 'test-extensions.test'
+ * tests/test-extensions.test: Call automake with the option
+ `--add-missing', to ensure the required script `test-driver'
+ gets installed. Note that the test still fails due to an
+ internal error in automake, though.
+
+2011-10-06 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: avoid few useless uses of the `-e' make option
+ * tests/python12.test: Using `make -e' is not required to override
+ the DESTDIR variable, since this variable shouldn't be defined in
+ any automake-generated Makefile.in file.
+ * tests/man2.test: Likewise.
+ * tests/man5.test: Likewise.
+
+2011-10-06 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ fix: make a test script executable
+ * tests/nobase-nodist.test: Make executable.
+
+2011-10-06 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ coverage: expose automake bug#9651
+ * tests/dist-auxfile.test: New test, xfailing.
+ * tests/dist-auxfile-2.test: Likewise.
+ * tests/Makefile.am (TESTS, XFAIL_TESTS): Add them.
+
+2011-10-01 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ parallel-tests: automake error our on invalid TEST_EXTENSIONS
+ This change fixes automake bug#9400.
+ * automake.in (handle_tests): Bail out if a suffix specified in
+ TEST_EXTENSIONS would produce an invalid `xxx_LOG_COMPILER'
+ variable or an invalid suffix rule. Before this change, automake
+ would have issued a confusing error messages (about invalid or
+ non-POSIX variables being defined), and in some situations would
+ have even produced a broken `Makefile.in' file.
+ ($TEST_EXTENSION_PATTERN): New helper variable.
+ * doc/automake.texi (Simple Tests using parallel-tests): Document
+ the limitations on TEST_EXTENSIONS explicitly.
+ * NEWS: Update.
+ * tests/test-extensions.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-09-28 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ docs: don't suggest installing `.m4' files in hard-coded location
+ This change fixes automake bug#7988.
+ * doc/automake.texi (aclocal Options): State that the use of
+ the `--print-ac-dir' option to determine the directory where
+ third-party packages can install their `.m4' files is discouraged
+ now.
+ (Extending aclocal): Suggest telling the user about ACLOCAL_PATH.
+ * THANKS: Update.
+ Report by Peter Johansson.
+
+2011-09-26 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ distuninstallcheck: fail also when only one file is left installed
+ This change fixes automake bug#9579.
+ * lib/am/distdir.am (distuninstallcheck): Be stricter in ignoring
+ a potential `dir' file created by install-info and left installed.
+ Also, be more careful about "this can't happen" kind of errors.
+ (am__distuninstallcheck_listfiles): New internal helper macro.
+ * tests/distcheck-pr9579.test: New test.
+ * tests/distcheck-override-infodir.test: Likewise.
+ * tests/Makefile.am (TESTS): Add them.
+ * NEWS, THANKS: Update.
+ Report by Nick Bowler.
+
+2011-09-28 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap/awk: improve comments about Korn shell signal handling issues
+ * lib/tap-driver.sh: Link an Austin Group discussion about how
+ shells are allowed, and even encouraged, to set the special
+ variable `$?' to values greater than 256 to report termination
+ of a child by a signal. Improve and extend comments about our
+ workarounds for unusual korn shell signals' propagation.
+ Thanks to Eric Blake for the pointers.
+
+2011-09-28 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ maintcheck: fix usage of `cd' instead of `$(am__cd)'
+ * lib/am/inst-vars.am (am__uninstall_files_from_dir): Use
+ `$(am__cd)', not plain `cd'.
+
+2011-09-28 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap/awk: account for unusual korn shell signal handling behaviour
+ This change has been motivated by a testsuite failure on Debian
+ with the AT&T Korn Shell version 93u-1.
+ * lib/tap-driver.sh: Temporarily ignore some common signals when
+ waiting for the test command to complete, to avoid premature exit
+ in Korn shells that propagate to themselves signals that have
+ killed a child process.
+ See also related commit `v1.11-1342-g6321ad3'.
+
+2011-09-28 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap/awk: handle exit statuses > 256 (seen on few korn shells)
+ Some Korn shells, when a child process die due to signal number
+ n, can leave in $? an exit status of 256+n instead of the more
+ standard 128+n. Apparently, both behaviours are allowed by
+ POSIX, so be prepared to handle them both.
+ This change has been motivated by a testsuite failure on Debian
+ with the AT&T Korn Shell version 93u-1.
+ * lib/tap-driver.sh (get_test_exit_message): Handle the described
+ Korn Shell behaviour too.
+ ($scriptversion): Update.
+
+2011-09-28 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: remove redundant workaround for Solaris /bin/sh
+ After previous commit `v1.11-1424-g27a399a', some workarounds for
+ Solaris 10 /bin/sh are no more required, and in fact they have
+ started causing XPASS results on Solaris.
+ * tests/tap-signal.tap: Remove unneeded workarounds for Solaris 10
+ /bin/sh. Some related minor code reorganizations.
+
+2011-09-24 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ uninstall: "make uninstall" before "make install" works
+ This change fixes automake bug#9578.
+ * lib/am/inst-vars.am (am__uninstall_files_from_dir): New internal
+ macro, that defines a shell code fragment to uninstall files from
+ a given directory.
+ * lib/am/data.am (uninstall-%DIR%%PRIMARY%): Use it, to reduce code
+ duplication and improve consistency and correctness.
+ * lib/am/libs.am (uninstall-%DIR%LIBRARIES): Likewise.
+ * lib/am/lisp.am (uninstall-%DIR%LISP): Likewise.
+ * lib/am/mans.am (uninstall-man%SECTION%): Likewise.
+ * lib/am/python.am (uninstall-%DIR%LIBRARIES): Likewise.
+ * lib/am/scripts.am (uninstall-%DIR%SCRIPTS): Likewise.
+ * tests/uninstall-pr9578.test: New test.
+ * tests/uninstall-fail.test: New test.
+ * tests/Makefile.am (TESTS): Add them.
+ * NEWS, THANKS: Update.
+ Report by Nick Bowler.
+
+2011-09-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix tests on aclocal search path precedences
+ * tests/aclocal-path-precedence.test: Call `$ACLOCAL' with the
+ proper overridden system acdir.
+
+2011-09-28 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failures in tests on TAP + signals
+ * tests/tap-signal.tap: Write the dummy test scripts as perl
+ scripts, not as shell scripts, to work around unportabilities
+ in the handling of signals. In fact, even with bash, the older
+ script were unable to properly deliver a SIGQUIT to themselves
+ consistently.
+
+2011-09-26 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failure in test on ACLOCAL_PATH precedences
+ * tests/aclocal-path-precedence.test: Do not merely append to
+ `configure.in', it should be created from scratch. Pass package
+ name and version to AC_INIT as arguments, otherwise autoconf will
+ complain.
+
+2011-09-20 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ docs: remove mention of deprecated option `--acdir'
+ * doc/automake.texi (aclocal Options): Remove mention of
+ deprecated `--acdir' option.
+
+2011-09-20 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ * NEWS: Cleanup after botched merges.
+
+2011-09-20 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ * NEWS: Fix typo.
+
+2011-09-20 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ docs: document planned precedence changes in aclocal search path
+ * doc/automake.texi (Macro Search Path): Explicitly state that the
+ lookup order for extra directories of `.m4' files will be changed
+ in the next major release.
+ * NEWS: Likewise.
+
+2011-09-19 Paolo Bonzini <bonzini@gnu.org>
+ Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ aclocal: handle ACLOCAL_PATH environment variable
+ * aclocal.in (parse_ACLOCAL_PATH): New function, parse ACLOCAL_PATH
+ as a colon-separated list of directories to be included in the
+ search path.
+ * doc/automake.texi (Macro Search Path): Document new behavior and
+ the precedence rules for various elements of the search path.
+ * tests/aclocal-path.test: New test.
+ * tests/aclocal-path-install.test: Likewise.
+ * tests/aclocal-path-install-serial.test: Likewise.
+ * tests/aclocal-path-precedence.test: Likewise.
+ * tests/aclocal-path-nonexistent.test: Likewise.
+ * tests/Makefile.am (TESTS): Add them.
+ * NEWS: Update.
+ * tests/distcheck-missing-m4.test: Extend by also checking
+ interactions with ACLOCAL_PATH.
+ * tests/distcheck-outdated-m4.test: Likewise, and fix a couple
+ of botched comments since we are at it.
+
+2011-09-19 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failure in 'primary-prefix-valid-couples.test'
+ * tests/primary-prefix-valid-couples.test: After commit
+ v1.11-464-gc9dfc36, `java_JAVA' is not a valid prefix/primary
+ combination by default anymore: one has to explicitly define
+ $(javadir) to make it so. So just drop `java_JAVA' from our
+ Makefile.am Also, since we are at it, ...
+ (configure.in): ... remove AM_PROG_GCJ from here, as it's not
+ really required.
+
+2011-09-19 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ docs: deprecate JAVA primary
+ * doc/automake.texi (Java): Deprecate the JAVA primary, stating
+ that it will become obsolete in automake 1.12 and probably removed
+ altogether in automake 1.13. Reflect this in the section title,
+ by appending the string "(deprecated feature)".
+ (@menu, @detailmenu): Update.
+ (Java Support with gcj): The cross-referenced support for bytecode
+ compilation with the JAVA primary is rudimentary and deprecated.
+ State that explicitly.
+
+2011-09-19 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ docs: clearer distinction between `.java' with javac and with gcj
+ * doc/automake.texi (Java support): Rename this node ...
+ (Java support with gcj): ... to this, and change its title from
+ "Compiling Java sources" to "Compiling Java sources using gcj".
+ (@detailmenu, @menu, @cindex): Update and make more precise.
+ (Java): Change the title of this node from simply "Java" to
+ "Java bytecode compilation".
+ (@detailmenu, @menu, @cindex): Update and make more precise.
+
+2011-09-18 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ java: complain if java_JAVA is used but $(javadir) is undefined
+ Fixes automake bug#8461.
+ * automake.in (handle_java): Remove inappropriate "java" argument
+ from the calls to `&am_install_var' and `&am_primary_prefixes'.
+ * tests/instdir-java.test (Makefile.am): Define `$(javadir)'.
+ * tests/javadir-undefined.test: New test.
+ * tests/Makefile.am (TESTS): Add it.
+ * NEWS: Update.
+
+2011-09-18 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ parallel-tests: expose automake bug#9546
+ * tests/test-driver-is-distributed.test: New test.
+ * tests/Makefile.am (TESTS, XFAIL_TESTS): Add it.
+
+2011-09-18 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ py-compile tests: more faithful 'installcheck' support
+ * tests/py-compile-basedir.test: Use the `$am_scriptsdir' variable
+ instead of `$testsrcdir/../lib', to test more faithfully under
+ "make installcheck". More uses of the `fatal_' subroutine to
+ diagnose hard errors.
+ * tests/py-compile-basic.test: Likewise.
+ * tests/py-compile-basic2.test: Likewise.
+ * tests/py-compile-destdir.test: Likewise.
+ * tests/py-compile-env.test: Likewise.
+ * tests/py-compile-option-terminate.test: Likewise.
+ * tests/py-compile-usage.test: Likewise.
+
+2011-09-18 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: remove redundant settings of `errexit' shell flag
+ * tests/aclocal-acdir.test: Do not set the `errexit' shell
+ flag, as it is already set by `tests/defs'.
+ * tests/aclocal-print-acdir.test: Likewise.
+ * tests/distcheck-missing-m4.test: Likewise.
+ * tests/distcheck-outdated-m4.test: Likewise.
+ * tests/java-clean.test: Likewise.
+ * tests/java-compile-install.test: Likewise.
+ * tests/java-compile-run-flat.test: Likewise.
+ * tests/java-compile-run-nested.test: Likewise.
+ * tests/java-mix.test: Likewise.
+ * tests/java-no-duplicate.test: Likewise.
+ * tests/java-nobase.test: Likewise.
+ * tests/java-rebuild.test: Likewise.
+ * tests/java-sources.test: Likewise.
+ * tests/java-uninstall.test: Likewise.
+ * tests/javaflags.test: Likewise.
+ * tests/nobase-nodist.test: Likewise.
+ * tests/py-compile-basedir.test: Likewise.
+ * tests/py-compile-basic.test: Likewise.
+ * tests/py-compile-basic2.test: Likewise.
+ * tests/py-compile-destdir.test: Likewise.
+ * tests/py-compile-env.test: Likewise.
+ * tests/py-compile-option-terminate.test: Likewise.
+ * tests/py-compile-usage.test: Likewise. Since we are at it,
+ add an extra blank line, for clarity.
+
+2011-09-16 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ automake: remove special handling of `ANSI2KNR' make variable
+ * automake.in (define_configure_variable): Remove special-cased
+ handling of `ANSI2KNR' variable. Related minor simplifications.
+
+2011-09-18 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ coverage: test interactions of `nobase_' and `nodist_'
+ * tests/nobase-nodist.test: New test.
+ * tests/Makefile.am (TESTS): Add it.
+
+2011-09-18 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ java: fix various blunders in test 'java-mix.test'
+ * tests/java-mix.test: Add missing call to `set -e'. Fix inverted
+ semantics (`.java' files are expected *not* to be distributed by
+ default, not the other way round). Fix various typos in the name
+ of the `.java' files. Correct other minor blunders. Improve some
+ comments.
+
+2011-09-15 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ automake: remove code duplication in 'handle_tests'
+ * automake.in (handle_tests): Factor out some code dealing with
+ test extensions and rules for generation of `.log' files into ...
+ (handle_per_suffix_test): ... this new subroutine.
+ * tests/parallel-tests-exeext.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-09-13 Peter Rosin <peda@lysator.liu.se>
+
+ * tests/defs [$sh_errexit_works = yes]: Output 'SIGINT' for signal 2.
+
+2011-09-13 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ self tests: work around 'unset' spurious non-zero return value
+ * tests/self-check-exit.tap ($init): Unset the possibly already
+ unset variable `am_explicit_skips' when the `errexit' shell flag
+ is not yet active, for the benefit of shell that return a non-zero
+ status when unsetting an already-unset variable.
+
+2011-09-13 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: an explicative comment on signal-related woes
+ * tests/self-check-exit.tap: Add pointer to a bug-autoconf
+ discussion explaining why this test needs to temporarily block
+ SIGINT.
+
+2011-09-13 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: also trap SIGQUIT; other fixes
+ Some shells seems to just ignore SIGQUIT under some circumstances,
+ even when it is not blocked; however, if the signal it trapped,
+ the trap gets correctly executed.
+ * tests/defs [$sh_errexit_works = yes]: Also trap SIGQUIT. Add
+ extensive explanation of why we do so.
+ * tests/self-check-cleanup.tap: Improve and fix to ensure that an
+ earlier failure does not prevent the rest of the test to execute.
+ Problem revealed by a failure in `self-check-cleanup.tap'.
+
+2011-09-13 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ test defs: work around weird ksh behaviour w.r.t. signal handling
+ * tests/defs (is_blocked_signal): Use perl to determine whether a
+ signal is trapped, since trying to do it portably within the shell
+ means opening a nasty can of worms.
+ For more information and background, see:
+ <https://lists.gnu.org/archive/html/bug-autoconf/2011-09/msg00004.html>
+ <http://mail.opensolaris.org/pipermail/ksh93-integration-discuss/2009-February/004121.html>
+ <http://www.cons.org/cracauer/sigint.html>
+
+2011-09-12 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ cosmetics: fix various typos and grammaros
+ * NEWS: Fix typos.
+ * tests/py-compile-basic.test: Likewise.
+ * tests/py-compile-basedir.test: Fix botched wording in comments.
+ * tests/py-compile-option-terminate.test: Fix typo and incomplete
+ comment.
+ Suggestions by Peter Rosin.
+
+2011-09-12 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: remove redundant line from a test script
+ * tests/test-log.test (fail.test): Remove extra `echo' command,
+ probably due to a past copy&paste blunder.
+
+2011-09-11 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: convert another test to TAP
+ * tests/primary-prefix-invalid-couples.test: Renamed ...
+ * tests/primary-prefix-invalid-couples.tap: ... to this, and
+ converted to the use of the TAP protocols (this requires only
+ very minimal changes this time).
+ * tests/list-of-tests.mk: Update.
+
+2011-09-11 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failure on fast machines
+ * tests/aclocal-acdir.test: Avoid spurious failures due to caching
+ issues, by cleaning the autom4te cache between all the aclocal
+ invocations, and by always calling autoconf with the `--force'
+ flag.
+
+2011-09-10 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: minor optimizations/simplifications in some aclocal tests
+ * acloca11.test: Instead of running ./configure and then grepping
+ the file it has produced, directly grep configure. Add trailing
+ `:' command.
+ * acloca12.test: Likewise.
+ * acloca10.test: Likewise. Also, remove the autom4te caches
+ by hand, instead of sleeping to ensure they get outdated and
+ ignored.
+ * aclocal9.test: Likewise.
+ * acloca18.test: Likewise. Also, do not remove file `foo',
+ which is not being created anymore.
+ * acloca20.test: The test makes sense only if the system support
+ real symlinks, so skip it if this is not the case. This allows
+ for various simplifications.
+
+2011-09-10 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ prove: avoid weird signal-related bug
+ * tests/defs (trap): In the trap code dealing with SIGPIPE
+ signal, ignore further signals of the same kind.
+ See also Test::Harness issue [rt.cpan.org #70855], archived at
+ <https://rt.cpan.org/Ticket/Display.html?id=70855>
+
+2011-09-10 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: allow use of `prove' to run automake testsuite
+ * tests/prove-runner: New helper script; mostly it wraps
+ our `*.test' test scripts to make them runnable by the
+ `prove' utility.
+ * tests/Makefile.am (EXTRA_DIST): Distribute it.
+ (PROVE, AM_PROVEFLAGS, AM_PROVECMD): New variables.
+ (prove, installprove): New targets, used run the automake
+ testsuite through the `prove' utility.
+ * tests/gen-testsuite-part: For any considered dependency,
+ generate a variables that groups all the tests depending on
+ it. This is especially useful for use in the new `prove'
+ and `installprove' targets, which cannot rely on make for
+ inter-test dependencies, and have to handle them "by hand".
+
+2011-09-10 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests defs: more namespace-safeness
+ ($using_tap): Renamed ...
+ ($am_using_tap): ... to this.
+ ($parallel_tests): Renamed ...
+ ($am_parallel_tests): ... to this.
+ ($test_prefer_config_shell): Renamed ...
+ ($am_test_prefer_config_shell): ... to this.
+ ($original_AUTOMAKE): Renamed ...
+ ($am_original_AUTOMAKE): ... to this.
+ ($original_ACLOCAL): Renamed ...
+ ($am_original_ACLOCAL): ... to this.
+ * tests/defs, tests/defs-static.in, tests/gen-testsuite-part,
+ tests/README, and all callers: Adjusted.
+ * tests/Makefile.am (AM_TESTS_ENVIRONMENT): Adjust, and rewrite
+ to make future adjustments easier.
+ * tests/defs (funcs_file_): Renamed ...
+ (am_funcs_file): ... to this.
+ * Makefile.am (sc_tests_obsolete_variables): New maintainer
+ check.
+ (syntax_check_rules): Add it.
+
+2011-09-09 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ aclocal: better URL reference in error message
+ * aclocal.in (scan_file): In the error message about underquoted
+ definitions, reference the automake page at `www.gnu.org', not
+ at `sources.redhat.com'.
+
+2011-09-10 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: avoid creating useless files in some test directories
+ * tests/aclocal.test: Define `$am_create_testdir' to "empty"
+ before sourcing ./defs, to avoid bringing in unused auxiliary
+ files. Related adjustments.
+ * tests/aclocal3.test: Likewise.
+ * tests/aclocal8.test: Likewise.
+ * tests/aclocal9.test: Likewise.
+ * tests/acloca10.test: Likewise.
+ * tests/acloca11.test: Likewise.
+ * tests/acloca12.test: Likewise.
+ * tests/acloca15.test: Likewise.
+ * tests/acloca16.test: Likewise.
+ * tests/acloca17.test: Likewise.
+ * tests/acloca18.test: Likewise.
+ * tests/acloca20.test: Likewise.
+ * tests/acloca21.test: Likewise.
+ * tests/acloca23.test: Likewise.
+ * tests/aclocal-print-acdir.test: Likewise.
+ * tests/ar-lib.test: Likewise.
+ * tests/compile.test: Likewise.
+ * tests/compile2.test: Likewise.
+ * tests/compile3.test: Likewise.
+ * tests/compile6.test: Likewise.
+ * tests/instsh2.test: Likewise.
+ * tests/instsh3.test: Likewise.
+ * tests/mdate5.test: Likewise.
+ * tests/mdate6.test: Likewise.
+ * tests/missing3.test: Likewise.
+ * tests/missing5.test: Likewise.
+ * tests/mkinst3.test: Likewise.
+ * tests/self-check-explicit-skips.test: Likewise.
+ * tests/self-check-report.test: Likewise.
+ * tests/self-check-sanity.test: Likewise.
+ * tests/tap-driver-stderr.test: Likewise.
+
+2011-09-09 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ test defs: more environment cleanup
+ * tests/defs: Also unset the XFAIL_TESTS, and various
+ LOG_DRIVER, LOG_COMPILER variables (and corresponding
+ flags variable).
+
+2011-09-09 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: allow depmod.tap to only run a subset of its tests
+ * tests/depmod.tap: If command-line arguments are passed to the
+ tests, they are now taken as the list of test names for which the
+ checks are to be run.
+
+2011-09-09 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: allow instspc.tap to only run a subset of its tests
+ * tests/instspc.tap: If command-line arguments are passed to the
+ tests, they are now taken as the list of test names for which the
+ checks are to be run.
+
+2011-09-09 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ coverage: distcheck-hook to catch missing/outdated *.m4 files
+ Related to automake bug#9037.
+ * tests/distcheck-missing-m4.test: New test.
+ * tests/distcheck-outdated-m4.test: Likewise.
+ * tests/distcheck-hook-m4.am: New data file, used by the new
+ tests.
+ * tests/Makefile.am (distcheck-m4-missing.log,
+ distcheck-m4-outdated.log): Depend on it.
+ (EXTRA_DIST): Distribute it.
+ (TESTS): Add the new tests.
+
+2011-09-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: more granularity in variables for tools overriding
+ Among the other things, this change makes it possible to use, at
+ the same time, an autoconf version in the automake testsuite and
+ another one in the automake build system; even more importantly, it
+ makes it possible to use, say, a non-GNU make implementation in the
+ test scripts, while at the same time using GNU make to drive the
+ execution of the automake's test suite.
+ * tests/defs-static.in (TEX, EGREP, FGREP, SHELL, PERL, MAKE,
+ AUTOCONF, AUTOM4TE, AUTORECONF, AUTOHEADER, AUTOUPDATE,
+ original_AUTOMAKE, original_ACLOCAL): Allow and prefer overriding
+ through corresponding `AM_TESTSUITE_..' variables; for example,
+ $GREP can now be overridden by an exported `$AM_TESTSUITE_GREP'
+
+2011-09-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: fix `skip_row_' subroutine in tap-functions.sh
+ * tests/tap-functions.sh (skip_row_): Use `seq_', not `seq', to
+ be portable to non-GNU systems.
+ Bug revealed by a testsuite error on Solaris.
+
+2011-09-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ installcheck: support it in our own testsuite
+ * NEWS: Update.
+ * tests/defs-static.in ($am_running_installcheck): New variable.
+ Initialize it to a default of "no", and sanity-check its value.
+ ($am_datadir, $am_docdir, $am_automake_acdir, $am_system_acdir,
+ $am_bindir, $am_scriptdir, $am_pkgvdir): New variables,
+ initialized from AC_SUBST'ed values which are adaptively chosen
+ depending on whether the testsuite is running in "simple" mode
+ or in "installcheck" mode.
+ ($MISSING): Remove, it's not really required by the testsuite.
+ ($PATH): Update using `$am_bindir', not `$testbuilddir'.
+ * Makefile.am (installcheck-local): New target.
+ * lib/Automake/tests/Makefile.am (installcheck-local): New target.
+ (AM_TESTS_ENVIRONMENT, AM_PL_LOG_FLAGS): Adaptively choose the
+ `-I' flags for perl based on whether the tests are being run by
+ "make check" or "make installcheck".
+ * tests/Makefile.am (installcheck-local): New target.
+ (defs-static): Generate it at make time, not at configure time,
+ in order to correctly resolve all the indirections in the
+ AC_SUBST'd variables; done with the help of ...
+ (do_subst): ... this new macro.
+ (EXTRA_DIST): Explicitly distribute `defs-static.in'.
+ (CLEANFILES): Remove `defs-static'.
+ * configure.ac (AC_CONFIG_FILES): Remove `tests/defs-static'.
+ (AC_SUBST): Substitute also `automake_acdir', `system_acdir',
+ `scriptdir' and `amdir' to proper values.
+ * lib/Makefile.am (scriptdir): Don't explicitly define anymore.
+ * lib/am/Makefile.am (amdir): Likewise.
+ * m4/acdir/dirlist: Remove, it's not needed anymore. Instead
+ use ...
+ * m4/acdir/.placeholder: ... this file.
+ * m4/Makefile.am (EXTRA_DIST): Update.
+ (automake_acdir, system_acdir): Don't explicitly define anymore.
+ * tests/aclocal-print-acdir.test: Use new `$am_...dir' variables,
+ instead of hard-coding values with $testsrcdir and $testbuilddir,
+ to test more faithfully under "make installcheck".
+ * tests/amhello-binpkg.test: Likewise.
+ * tests/amhello-cflags.test: Likewise.
+ * tests/amhello-cross-compile.test: Likewise.
+ * tests/ansi2knr-no-more.test: Likewise.
+ * tests/autodist-stamp-vti.test: Likewise.
+ * tests/auxdir.test: Likewise.
+ * tests/check2.test: Likewise.
+ * tests/copy.test: Likewise.
+ * tests/multlib.test: Likewise.
+ * tests/obsolete.test: Likewise.
+ * tests/parallel-tests-interrupt.test: Likewise.
+ * tests/repeated-options.test: Likewise.
+ * tests/suffix5.test: Likewise.
+ * tests/tap-doc2.test: Likewise.
+ * tests/txinfo22.test: Likewise.
+ * tests/vtexi3.test: Likewise.
+ * tests/defs: Likewise. Also, print the values of `$using_tap'
+ and `$am_running_installcheck', to simplify debugging, and do
+ some related code movings and tweakings.
+ * tests/aclocal3.test: Update to avoid possible spurious failures
+ when running under "make installcheck".
+ * tests/warnings-unknown.test: Likewise.
+ * tests/location.test: Likewise, and improve debugging input since
+ we are at it.
+ * tests/acloca10.test: Adapt and tweak to work also during a
+ "make installcheck", and not to require a pre-populated `dirlist'
+ file.
+ * tests/acloca18.test: Likewise.
+ * tests/dirlist2.test: Likewise.
+ * tests/dirlist.test: Likewise, and remove an obsolete comment.
+ * tests/README: Update.
+ * tests/dirlist-abspath.test: New test.
+ * tests/list-of-tests.mk: Update.
+
+2011-09-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ maintcheck: fix spurious failures
+ * tests/gen-testsuite-part (write_wrapper_script): More uses of
+ creative quoting in the generated tests, to avoid triggering
+ failures in the `sc_tests_Exit_not_exit' maintcheck.
+ * Makefile.am (sc_tests_tap_plan): It's OK for auto-generated
+ TAP tests that sources an hand-written one not to declare a TAP
+ plan: the sourced test will do so.
+ * tests/Makefile.am (checked_test_extensions): Don't define
+ anymore, the default value `$(TEST_EXTENSIONS)' is correct now.
+ (expected_list_of_tests): Don't define anymore, the default
+ value `$(TESTS)' is correct now.
+
+2011-09-06 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ aclocal: more granularity in acdir overriding
+ Before this change, using the `--acdir' option caused aclocal to
+ redefine both the directory of automake-provided m4 macros and the
+ directory of third-party system-wide m4 macros. With this change,
+ we deprecate the `--acdir' aclocal option, and introduce two new
+ options `--automake-acdir' and `--system-acdir', to allow for more
+ granularity.
+ * aclocal.in (@automake_includes, @system_includes,
+ @user_includes): Fix and extend comments.
+ (usage): Update.
+ (handle_acdir_option): New function.
+ (parse_arguments): Recognize new options `--system-acdir' and
+ `automake-acdir', and handle `--acdir' using the new function
+ above. Simplify logic by assuming that the directory of
+ third-party system-wide m4 files always exists.
+ * tests/aclocal.in: Update to use the new options, instead of
+ the deprecated. `--acdir'.
+ * m4/dirlist: Move ...
+ * m4/acdir/dirlist: ... here.
+ * m4/Makefile.am (EXTRA_DIST): Update.
+ (m4datadir): Rename ...
+ (automake_acdir): ... to this. Accordingly, ...
+ (dist_m4data_DATA): ... rename this ...
+ (dist_automake_ac_DATA): ... to this.
+ (system_acdir): New, directory.
+ (dist_system_ac_DATA): New, defined to an empty value; this will
+ ensure that the $(system_acdir) directory will be created by
+ "make install".
+ * tests/aclocal.test: Remove check about the `--print-ac-dir'
+ option of aclocal, it has been moved into ...
+ * tests/aclocal-print-acdir.test: ... this new test, and quite
+ extended.
+ * tests/aclocal-acdir.test: New test.
+ * tests/Makefile.am (TESTS): Add the new tests.
+ * NEWS, bootstrap: Update.
+ * doc/automake.texi (aclocal Options, Macro Search Path): Update.
+
+2011-09-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ cosmetic: rename gen-tests-deps -> gen-testsuite-part
+ * tests/gen-tests-deps: Renamed ...
+ * tests/gen-testsuite-part: ... to this.
+ * bootstrap: Update.
+ * tests/Makefile.am ($(srcdir)/tests-deps.am): Don't generate
+ nor include this ...
+ ($(srcdir)/testsuite-part.am): ... do with this instead.
+ * tests/.gitignore (tests-deps.am): Don't ignore this ...
+ (testsuite-part.am): ... ignore this instead.
+
+2011-09-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: revamp generation of autogenerated tests
+ With this change, we make generated tests be real scripts again
+ -- albeit only thin layers around the tests they wrap. It turned
+ out that the apparently clever tricks we played by having lots
+ of custom (and auto-generated) `..._LOG_COMPILER' variables and
+ by having the tests in $(wrap_TESTS) not being real on-file-system
+ scripts caused more pain and confusion than expected, for only
+ marginal gains. Also, that previous setup didn't interact very
+ well with "make check RECHECK_LOGS=", since the log files for
+ the "wrappee" tests were always considered out-of-date (which in
+ hindsight is natural, since these log files depended on wrappee
+ tests that didn't exist -- and weren't created). And finally, it
+ wasn't possible to easily and naturally run the wrappee tests
+ from the command line -- definitely harmful for debugging and
+ sanity checking.
+ * tests/gen-wrap-tests: Deleted, its role subsumed into ...
+ * tests/gen-tests-deps: ... this script, with the help of
+ (unindent, atomic_write, build_matcher, write_wrapper_script,
+ %test_generators): ... these new functions and variables.
+ Other few minor fixlets and improvements.
+ * tests/wrap-tests.sh: Delete, not needed anymore.
+ * tests/Makefile.am ($(srcdir)/wrap-tests.am): Don't generate
+ nor include anymore.
+ (EXTRA_DIST): Update.
+ (wrap_TESTS): Renamed to ...
+ (generated_TESTS): ... this.
+ ($(generated_TESTS)): Must have the same dependencies of
+ `$(srcdir)/tests-deps.am'.
+ Other minor related reordering and adjustments.
+ * bootstrap: Do not generate `wrap-tests.am' anymore.
+ * tests/.gitignore (wrap-tests.am): Don't ignore anymore.
+ (*-w.test, *-w.tap): Ignore.
+ * tests/README: Update paragraph on automatically-generated
+ tests.
+
+2011-09-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: automatize generation of dependencies for tests
+ * tests/gen-test-deps: New script, automatically generates
+ dependencies for the tests.
+ * tests/Makefile.am (EXTRA_DIST): Distribute it.
+ ($(srcdir)/tests-deps.am): New rule.
+ (include $(srcdir)/tests-deps.am): New inclusion.
+ Remove hand-written dependencies for tests. Other related
+ updates.
+ * tests/list-of-tests (tap_with_common_setup_TESTS,
+ tap_other_TESTS): Delete, their content merged back into ...
+ (handwritten_TESTS): ... this.
+ * tests/.gitignore (tests-deps.am): New ignored file.
+ * bootstrap: Generate `tests/tests-deps.am'.
+
+2011-09-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: avoid spurious failure due to bug in older TAP::Parser
+ Older TAP::Parser versions (e.g., 3.10) erroneously convert a test
+ number `0' into `1'; do not let this bug cause a spurious failure
+ in our testsuite.
+ * tests/tap-test-number-0.test: Skip if the aforementioned
+ TAP::Parser bug is detected.
+
+2011-09-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap/perl: be more portable to older perl versions
+ * lib/tap-driver.pl (trap_perl_warnings_and_errors): Do not use
+ the three-args version of the `open' builtin, it is not well
+ supported by older perl versions (at least perl 5.6.2).
+ (start): Add a no-op statement to pacify a "possible typo ... used
+ only once" perl warning.
+
+2011-09-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap/perl: be more portable to older TAP::Parser versions
+ * lib/tap-driver.pl (start): Do not call the `ignore_exit' method
+ on our TAP parser: it is not supported in older TAP::Parser
+ versions (e.g., 3.10), and is not really required by our usage of
+ the parser object.
+
+2011-09-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious Cygwin failure of a test on TAP support
+ * tests/tap-bad-prog.tap (noexec.test): Add forgotten `echo'.
+ When trying to run it, redirect its output to /dev/null, to
+ avoid confusing automake's testsuite own TAP driver.
+
+2011-09-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ test defs: fix glitch in TAP version of `warn_' function
+ * tests/tap-functions.sh (warn_): Do not display the warning
+ message two times.
+
+2011-09-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix another spurious failure due to ignored signals
+ * tests/tap-signal.test: Renamed ...
+ * tests/tap-signal.tap: ... to this, converted to the use of the
+ TAP protocol, and improved not to try to use/trap signals that
+ are ignored by the parent shell (they will be forcibly ignored
+ by all the child processes too). Extend the test a bit since we
+ are at it.
+ * tests/list-of-tests.mk: Update.
+
+2011-09-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix a spurious failure due to lacking Fortran compilers
+ * tests/silent-many-generic.test (configure.in): Cause the test
+ to be skipped if `configure' fails to find working C++, Fortran
+ and Fortran 77 compilers.
+
+2011-09-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ self tests: more use of TAP
+ * tests/self-check-reexec.test: Renamed ...
+ * tests/self-check-reexec.tap: ... to this, converted to the
+ use of TAP protocol, and extended a bit.
+ * tests/self-check-seq.test: Renamed ...
+ * tests/self-check-seq.tap: ... to this, and converted to the
+ use of TAP protocol.
+ * tests/list-of-tests.mk: Update.
+
+2011-09-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ self tests: fix spurious failures when /bin/ksh do not exists
+ * tests/self-check-reexec.test: Ensure that the non-bash shells
+ we look do really exists. Since we are at it, also try the name
+ `ash', non `dash', for the Almquist Shell, for Cygwin 1.5.
+
+2011-09-06 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: more use of TAP in our own testsuite
+ * tests/parallel-tests-interrupt.test: Renamed ...
+ * tests/parallel-tests-interrupt.tap: ... to this, and converted
+ to the use of TAP protocol.
+ * tests/self-check-cleanup.test: Renamed ...
+ * tests/self-check-cleanup.tap: ... to this, and converted to the
+ use of TAP protocol.
+ * tests/self-check-dir.test: Renamed ...
+ * tests/self-check-dir.tap: ... to this, and converted to the use
+ of TAP protocol.
+ * tests/self-check-is_newest.test: Renamed ...
+ * tests/self-check-is_newest.tap: ... to this, and converted to
+ the use of TAP protocol.
+ * tests/self-check-unindent.test: Renamed ...
+ * tests/self-check-unindent.tap: ... to this, and converted to
+ the use of TAP protocol.
+ * tests/list-of-tests.mk: Update.
+
+2011-09-06 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ self tests: sanity check on 'is_blocked_signal' function
+ * tests/self-check-is-blocked-signal.tap: New test.
+ * tests/list-of-tests.mk: Update.
+
+2011-09-06 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failures due to ignored signals
+ * tests/defs (is_blocked_signal): New function.
+ * tests/parallel-tests-interrupt.test: Do not try to use/trap
+ signals that are ignored by the parent shell: they will be
+ ignored by all the child processes too.
+ * tests/self-check-exit.test: Likewise.
+ * tests/self-check-cleanup.test: Likewise, and do few minor
+ improvements and extensions since we are at it.
+
+2011-09-05 Peter Rosin <peda@lysator.liu.se>
+
+ * tests/amhello-binpkg.test: Add missing $EXEEXT usage.
+
+2011-09-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ fix: list test 'vala-vpath.test' in XFAIL_TESTS
+ * tests/Makefile.am (XFAIL_TESTS): Update.
+
+2011-09-02 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: simplify wrapper for aclocal
+ * tests/aclocal.in: Remove use of $ACLOCAL_TESTSUITE_FLAGS and
+ extra `-I' flags; they are not really required, since the file
+ `m4/amversion.m4' is generated in the srcdir anyway.
+ * tests/acloca10.test: Remove use of $ACLOCAL_TESTSUITE_FLAGS.
+ * tests/acloca18.test: Likewise.
+ * tests/defs.in: Don't nullify $ACLOCAL_TESTSUITE_FLAGS, and do
+ not export it.
+
+2011-09-02 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: remove redundant settings of `errexit' shell flag
+ * doc-parsing-buglets-colneq-subst.test: Do not set the
+ `errexit' shell flag, as it is already set by `tests/defs'.
+ * doc-parsing-buglets-tabs.test: Likewise.
+ * java-empty-classpath.test: Likewise.
+ * vala-vpath.test: Likewise.
+
+2011-09-02 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: more uses of `$top_testsrcdir', in the `amhello' tests
+ * tests/amhello-binpkg.test: Use `$top_testsrcdir' instead
+ of `$testsrcdir/..'.
+ * tests/amhello-cflags.test: Likewise.
+ * tests/amhello-cross-compile.test: Likewise.
+
+2011-09-02 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: avoid creating useless files in the `amhello' tests
+ * tests/amhello-binpkg.test: Define `$am_create_testdir' to
+ "empty" before sourcing ./defs, to avoid bringing in unused
+ auxiliary files.
+ * tests/amhello-cflags.test: Likewise.
+ * tests/amhello-cross-compile.test: Likewise.
+
+2011-09-02 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ coverage: vala support failing for VPATH from-scratch builds
+ * tests/vala-vpath.test: New test, xfailing.
+ * tests/Makefile.am (TESTS): Update.
+ * THANKS: Update.
+ From a report by Zbigniew Jędrzejewski-Szmek.
+ Related to automake bug#8753.
+
+2011-09-01 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ docs: report few more automake parsing limitations
+ Partly motivated by automake bug#8360.
+ * doc/automake.texi (General Operation): Report few more automake
+ limitations w.r.t. parsing of unusual makefile constructs. Related
+ minor reorderings.
+ * tests/doc-parsing-buglets-colneq-subst.test: New test.
+ * tests/doc-parsing-buglets-tabs.test: Likewise.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-09-01 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ automake: fix regression due to de-ansification support removal
+ The last change `v1.11-947-g136b489' removed code that automake
+ was using to decide whether binary objects were built by the
+ generated Makefile.in, so that it could avoid to emit unneeded
+ code when this was not the case. Re-introduce such code in a
+ less-obfuscated form, and add a test to ensure we don't regress
+ again.
+ * automake.in ($must_handle_compiled_objects): New global
+ variable, telling whether the generated Makefile has to build
+ compiled objects.
+ (initialize_per_input): Reset it.
+ (handle_programs, handle_libraries, handle_ltlibraries): Set
+ it to a true value when required.
+ (handle_compile): Don't generate any code if the variable
+ `$must_handle_compiled_objects' is not set to a true value.
+ * tests/no-extra-makefile-code.test: New test.
+ * tests/Makefile.am (TESTS): Add it.
+
+2011-08-28 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ automake: cleanups after de-ansification support removal (2)
+ * automake.in ($get_object_extension_was_run): Remove, it's not
+ really needed anymore.
+ (&get_object_extension): Remove, it's a no-op now.
+ All callers adjusted.
+
+2011-08-28 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ automake: cleanups after de-ansification support removal (1)
+ * automake.in (lang_c_rewrite, handle_single_transform): Rename
+ variable `$nonansi_obj' to `$obj'.
+
+2011-08-28 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ ansi: remove obsolete code/files for de-ANSI-fication support
+ * lib/ansi2knr.1, lib/ansi2knr.c: Deleted.
+ * lib/Makefile.am (dist_pkgvdata_DATA): Do not list them anymore.
+ * lib/am/ansi2knr.am: Delete.
+ * lib/am/Makefile.am (dist_am_DATA): Do not list it anymore.
+ * lib/Automake/Variable.pm (%_am_macro_for_var): Remove entries for
+ `ANSI2KNR' and `U'.
+ * m4/depout.m4 (_AM_OUTPUT_DEPENDENCY_COMMANDS): Don't care anymore
+ about possible definition of the `$U' variable.
+ * automake.in (@common_files): Drop `ansi2knr.1' and `ansi2knr.c'.
+ (struct): Remove scalar field `ansi'.
+ All callers adjusted.
+ (&lang_c_finish, %de_ansi_files): Remove, they're not required
+ anymore.
+ All callers adjusted.
+ ($get_object_extension_was_run): Fix typo in comment.
+ (&get_object_extension): Drop code dealing with de-ansification;
+ this function basically a no-op now, but is required to properly
+ initialize `$get_object_extension_was_run' variable.
+ (&handle_languages, &handle_compile, &lang_c_rewrite): Drop code
+ dealing with de-ansification.
+
+2011-08-28 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ ansi: reject attempts to use automatic de-ANSI-fication support
+ * tests/protos.m4 (AM_C_PROTOTYPES): Error out whenever called.
+ * lib/Automake/Options.pm (_process_option_list ): Error out
+ with a proper error message when the `ansi2knr' option is used.
+ Related updates to comments.
+ * tests/depacl2.test: Update.
+ * tests/ansi2knr-no-more.test: New test.
+ * tests/Makefile.am (TESTS): Add it.
+ * NEWS: Update.
+
+2011-08-28 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: remove tests about obsolete de-ANSI-fication support
+ * tests/ansi.test: Delete.
+ * tests/ansi10.test: Likewise.
+ * tests/ansi2.test: Likewise.
+ * tests/ansi2knr-deprecation.test: Likewise.
+ * tests/ansi3.test: Likewise.
+ * tests/ansi3b.test: Likewise.
+ * tests/ansi4.test: Likewise.
+ * tests/ansi5.test: Likewise.
+ * tests/ansi6.test: Likewise.
+ * tests/ansi7.test: Likewise.
+ * tests/ansi8.test: Likewise.
+ * tests/ansi9.test: Likewise.
+ * tests/cxxansi.test: Likewise.
+ * tests/libobj8.test: Likewise.
+ * tests/subobj3.test: Likewise.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-08-28 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ docs: remove description of de-ANSI-fication support from manual
+ * doc/automake.texi (Auxiliary Programs): Remove mention of
+ `ansi2knr.c' and `ansi2knr.1'.
+ (Obsolete Macros): Remove mention of `AM_C_PROTOTYPES'. Do not
+ index it nor variables `ANSI2KNR' and `U' anymore.
+ (List of Automake options): Remove mention of `ansi2knr' option,
+ and obsolete entries for concept and option indexes.
+ (Optional): Remove entry about `AM_C_PROTOTYPES'.
+ (@c LocalWords): Remove `ansi' and `knr'.
+ (@menu, @detailmenu): Remove entries about de-ANSI-fication
+ support.
+
+2011-08-29 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: better respect of TAP usage in wrapped tests
+ * tests/gen-wrap-tests: Partial rewrite to take into account the
+ possibility that the wrapped test uses the TAP protocol. This
+ complicates the code quite a bit, but is essential to ensure real
+ correctness in all the wrapped scripts.
+ * tests/wrap-tests.sh: Update, and add few more sanity checks.
+
+2011-08-29 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: use both perl and awk implementations for tests on TAP
+ * tests/gen-wrap-tests (get_list_for_pltap): New function, gets
+ the list of tests that check the Automake TAP support.
+ ($defines_for_pltap): New variable.
+ ($wrapper_type_list): Add "pltap".
+ * tests/defs-static.in: Check that `$am_tap_implementation' is
+ not exported in the environment.
+ * tests/self-check-env-sanitize.tap: Update.
+
+2011-08-29 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: two single auxiliary scripts to run/generate wrapped tests
+ * tests/config-shell-tests.sh, tests/parallel-tests.sh,
+ tests/gen-config-shell-tests, tests/gen-parallel-tests: Deleted,
+ their roles taken over by ...
+ * tests/wrap-tests.sh, tests/gen-wrap-tests: ... these new more
+ general scripts.
+ * tests/Makefile.am (EXTRA_DIST): Distribute the new scripts, and
+ do not distribute the obsolete ones anymore.
+ ($(srcdir)/parallel-tests.am, $(srcdir)/config-shell-tests.am): Do
+ not include nor generate anymore, they have been superseded by ...
+ ($(srcdir)/wrap-tests.am): ... this new fragment, automatically
+ generated by `gen-wrap-tests'.
+ (PTEST_LOG_COMPILER, SHTST_LOG_COMPILER): Delete, they are now
+ defined in the new `wrap-tests.am' makefile fragment.
+ (TEST_EXTENSIONS): Do not append to it anymore, that is now done
+ by the new `wrap-tests.am' makefile fragment above.
+ ($(parallel_tests:.ptest=.log), $(config_shell_tests:.shtst=.log),
+ $(parallel_tests), $(config_shell_tests): Remove this dependencies,
+ superseded by ...
+ ($(wrap_TESTS), $(wrap_LOGS)): ... these ones.
+ (MAINTAINERCLEANFILES): Delete, it's not used anymore.
+ (TESTS): Do not contain anymore `$(config_shell_tests)' nor
+ `$(parallel_tests)', contain `$(wrap_TESTS)' instead, as defined
+ by `$(srcdir)/wrap-tests.am'.
+ Other related minor edits and reorderings.
+ * bootstrap, tests/.gitignore, tests/README: Update.
+
+2011-08-29 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: list of tests placed in a separate Makefile fragment
+ This change allows us to easily use make instead of by-hand (and
+ more fragile) grepping to extract the list of hand-written tests
+ from our Makefiles.
+ * bootstrap (BOOTSTRAP_MAKE): New variable.
+ Use it to run make in order to extract the list of hand-written
+ tests from ...
+ * tests/list-of-tests.mk: ... this new file, where they are
+ listed in ...
+ (handwritten_TESTS, tap_with_common_setup_TESTS, tap_other_TESTS):
+ ... these variables, extracted respectively from ...
+ * tests/Makefile.am (handwritten_tests, tap_other_tests,
+ tap_with_common_setup_tests): ... these older variables, now
+ removed.
+ (EXTRA_DIST, expected_list_of_tests): Update w.r.t. the variable
+ names' changes.
+ (include $(srcdir)/list-of-tests.mk): New inclusion.
+ Remove an overkill indirection, and with it ...
+ (tap_with_common_setup_logs): ... this variable.
+ ($(srcdir)/parallel-tests.am, $(srcdir)/config-shell-tests.am):
+ Update to match the new interface of ...
+ (gen-parallel-tests, gen-config-shell-tests): ... these scripts,
+ that now read the list of tests from the standard input.
+
+2011-08-29 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: prefer AM_... variables to user-reserved ones in Makefile
+ * tests/Makefile.am (TAP_LOG_DRIVER_FLAGS): Renamed ...
+ (AM_TAP_LOG_DRIVER_FLAGS): ... to this.
+
+2011-08-29 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: some minor fixlets w.r.t. TAP-based tests
+ The variable that is used by our test scripts to decide whether
+ they are "plain" or TAP-based is `using_tap'; however, some
+ peripheral sanity checks and sanitization code in our testsuite
+ were erroneously using the `use_tap' variable instead. Fix that.
+ * tests/Makefile.am (AM_TESTS_ENVIRONMENT): Nullify `using_tap',
+ not `use_tap'.
+ * tests/defs-static.in: Check that `using_tap', not `use_tap',
+ is not exported.
+ * tests/self-check-env-sanitize.test: Update.
+
+2011-08-29 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: avoid re-running a test with the 'parallel-tests' option
+ * tests/backcompat5.test (parallel_tests): Define to "no", to
+ prevent the generation of a sibling test script that uses the
+ 'parallel-tests' driver. That would be useless anyway, since
+ we manually override the contents of configure.in, thus clobbering
+ the `parallel-tests' option in AM_INIT_AUTOMAKE.
+ Fix a typo in comments since we are at it.
+
+2011-08-29 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: defaults to awk+shell driver in tests on TAP support
+ * tests/defs ($am_tap_implementation): Default to "shell", not
+ to "perl".
+
+2011-08-25 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: list "forgotten" test script in TESTS
+ * tests/Makefile.am (TESTS): Also list ...
+ * tests/java-empty-classpath.test: ... this test. Since we are
+ at it, remove trailing whitespace from a couple of lines.
+
+2011-08-25 Eric Blake <eblake@redhat.com>
+
+ ylwrap: fix unusual indentation whitespace
+ * lib/ylwrap: Convert tabs to spaces.
+ Reported by Karl Berry.
+
+2011-08-28 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: different test scripts cannot share the same basename
+ If two test scripts have the same basename, they will end up
+ sharing the same log file, leading to all sort of undefined and
+ undesired behaviours. Add a Makefile check verifying that this
+ is not the case.
+ * tests/test-logs-repeated.test: New test, verifying previously
+ unspecified semantics (in the definition of $(TEST_LOGS) from
+ $(TESTS)) that we use in our new check.
+ * tests/Makefile.am (TESTS): Update.
+ (check-no-repeated-test-name): New .PHONY check.
+ (check-local): Depend on it.
+
+2011-08-26 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failure for awk implementation of TAP driver
+ * tests/tap-realtime.test: The awk+shell implementation of the TAP
+ driver must "read ahead" of one line in order to catch the exit
+ status of the test script it runs. So, in the TAP-producer script
+ here, be sure to echo one "dummy" line after each TAP result line
+ in order not to cause false positives.
+
+2011-08-25 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap/awk: allow escaping of TAP directives
+ * lib/tap-driver.sh (setup_result_obj): Handle escaping of TAP
+ directives in a way tat is (mostly) compatible by what is done
+ by the TAP::Parser module.
+ With this change, the tests `tap-escape-directive.test' and
+ `tap-escape-directive-2.test' now also pass with the shell/awk
+ implementation of the TAP driver.
+
+2011-08-25 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ coverage: more about escaping of TAP directives
+ * tests/tap-escape-directive.test: Make grepping of testsuite
+ progress output slightly stricter.
+ * tests/tap-escape-directive-2.test: New test (failing with the
+ awk implementation of the TAP driver).
+ * tests/Makefile.am (tap_with_common_setup_tests): Update.
+
+2011-08-25 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap: improve syncing between awk+shell and perl implementations
+ * lib/tap-driver.pl (stringify_test_result): Renamed ...
+ (stringify_result_obj): ... to this. Break up a clause in the
+ long "if/elsif/.../else" construct to avoid unaesthetic line
+ breaks and to be more synced with the sibling function in
+ `tap-driver.sh'. Rename the `$result', `$PASS' and `$FAIL'
+ variables to respectively `$result_obj', `$COOKED_PASS' and
+ `$COOKED_FAIL', for clarity and better syncing.
+ (handle_tap_test): Renamed ...
+ (handle_tap_result): ... to this, and change the name of the
+ `$test' local variable to `$result_obj'.
+ (extract_comment): Reimplement using the simpler `index' and
+ `substr' builtins, rather than with more advanced uses of
+ regular expressions.
+ (%test_results, @test_results): Renamed respectively ...
+ (%test_results_seen, @test_results_list): ... to these, and
+ related adjustments throughout the `TEST_RESULTS' block.
+ (main, get_global_test_result): Refactor and do some cosmetic
+ changes to make these functions clearer and better synced with
+ sibling code in `tap-driver.sh'.
+ Other minor cosmetic and typo fixes.
+ * lib/tap-driver.sh (extract_tap_comment): Remove outdated
+ "FIXME" comments.
+ (get_global_test_result): Small reordering to make it better
+ synced with its sibling function in `tap-driver.pl'.
+ (stringify_result_obj): Consistently use `result_obj' as the
+ parameter name.
+ Other minor cosmetic and typo fixes.
+
+2011-08-25 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap/perl: don't redirect perl warnings/errors to log files
+ With this change, the test `tap-driver-stderr.test' also passes
+ with the perl implementation of the TAP driver.
+ * lib/tap-driver.pl (start): Save the original stderr into the
+ `OLDERR' file handle, and call ...
+ (trap_perl_warnings_and_errors): ... this new function, trapping
+ the `__WARN__' and `__DIE__' "pseudo-signals" to ensure that the
+ warning and error messages goes to that original stderr stream.
+ Since we are at it, be sure to prepend all possible "die" message
+ with the name of the script as given by the `$ME' variable.
+
+2011-08-25 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap/perl: add copyright notice, version string, and emacs stuff
+ * lib/tap-driver.pl: Add proper copyright notice and bug reporting
+ address. Remove obsolete heading comments. Add trailing comments
+ for emacs w.r.t. code-formatting rules and automatic updating of
+ the date-based script version saved into the `$VERSION' variable.
+ ($VERSION): Define to the current UTC date.
+
+2011-08-24 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap/awk: don't redirect awk stderr to log files
+ * lib/tap-driver.sh: Handle the file descriptors redirections
+ more smartly, to avoid sending error messages from awk (about
+ e.g. syntax or I/O errors) to the log files instead that to the
+ console.
+ * tests/tap-driver-stderr.test: New test, verifying the improved
+ driver behaviour. Notice that this test still fails when using
+ the perl implementation of the TAP driver.
+ * tests/Makefile.am (tap_other_tests): Update.
+
+2011-08-24 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap/awk: remove obsolete "FIXME" comment
+ * lib/tap-driver.sh: Remove obsolete "FIXME" comment about our
+ driver losing the exit status of the tested program; this issue
+ has been solved in precedent commit `v1.11-1052-gd630a0d'. Fix
+ an unrelated typo in comments since we are at it.
+
+2011-08-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: avoid spurious failure on Solaris
+ * tests/tap-signal.test (signal_caught): Fix a regression from
+ commit `v1.11-1052-gd630a0d' that was causing this test to fail
+ spuriously on Solaris (due to an already worked-around Solaris
+ /bin/sh bug, see commit `v1.11-981-g0ef3ef5').
+
+2011-08-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: use the new awk+shell TAP driver in our own testsuite
+ * tests/Makefile.am (TAP_LOG_DRIVER): Redefine to use the new
+ awk+shell tap driver, which should be complete enough for use in
+ a "controlled" production environment.
+
+2011-08-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap/awk: handle non-zero exit status from the test command
+ * lib/tap-driver.sh (get_test_exit_message): New function in the
+ awk script, used to extract the exit status of the test program,
+ or at least a good guess of it.
+ (write_test_results): Use it, reporting an ERROR result if it
+ detects that the test program exited with a non-zero status.
+ * tests/tap-signal.test: Account for the differences in the
+ error messages generated by the awk and perl TAP drivers. Fix
+ an unrelated typo in comments since we are at it.
+
+2011-08-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap/awk: prepare to fetch the exit status of the test command
+ * lib/tap-driver.sh: Rewrite some logic in the main parsing loop,
+ to make it possible to read the exit status of the test command
+ from the last line of the input stream.
+
+2011-08-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap/awk: refactor for future changes
+ * lib/tap-driver.sh: Rewrite the awk script so that the parsing
+ of the input stream is implemented as a hand-rolled loop in the
+ BEGIN block, using the `getline' builtin.
+
+2011-08-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: avoid spurious failure if rst2html program is missing
+ * tests/tap-html.test ($required): Require `rst2html'.
+
+2011-08-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap/awk: support Solaris /usr/xpg4/bin/awk
+ * lib/tap-driver.sh: Use `\t', not `\\t', to represent tabulation
+ character in regexps, even when inside double-quoted strings; that
+ seems to be more portable to Solaris 10 XPG4 awk.
+
+2011-08-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap/awk: support Solaris /usr/bin/nawk
+ * lib/tap-driver.sh (close_or_die): Remove, the use of the `close'
+ builtin in there was confusing /usr/bin/nawk from Solaris 10 into
+ a syntax error.
+ (write_test_results): Simply use `close' on the `*.trs' file, that
+ should be enough.
+
+2011-08-21 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap/awk: correctly extract message from SKIP plans
+ * lib/tap-driver.sh (/^1\.\.0+[ \t]*#/): Add a forgotten `?' to
+ the regex used to extract the skip message from a "1..0" TAP plan.
+ * tests/planskip.test: Check for the just-fixed bug.
+ * tests/tap-planskip-unplanned-corner.test: Don't be too strict
+ w.r.t. the formatting of the "skip whole test" message, to avoid
+ failing due to bugs irrelevant for this test (like the one just
+ fixed).
+
+2011-08-21 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap/awk: support colorized output
+ * lib/tap-driver.sh: Pass definition of colors to the BEGIN block
+ of the awk script, using ...
+ ($init_colors): ... this new variable, which supersedes ...
+ ($red, $grn, $lgn, $blu, $mgn, $std): ... these variables, which
+ have been consequently removed.
+ ($color_tests): We don't have to pass this anymore to the awk
+ script, so do not convert it to a numeric boolean.
+ (decorate_result): Implement for real.
+ With this change, the test 'tap-color.test' now passes.
+
+2011-08-21 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap: real (but still incomplete) awk implementation of TAP driver
+ * lib/tap-driver.sh: Add an incomplete, but mostly working,
+ implementation of a TAP parser and driver in awk. It doesn't yet
+ support colorized output, fetching of exit status from test
+ programs, nor a way to escape TAP directives in TAP result lines,
+ but passes all the tests of TAP support in the automake testsuite,
+ apart from the following ones:
+ - tap-color.test
+ - tap-escape-directive.test
+ - tap-exit.test
+ - tap-missing-plan-and-bad-exit.test
+ - tap-passthrough-exit.test
+ - tap-planskip-badexit.test
+ - tap-planskip-unplanned-corner.test
+ - tap-signal.test
+ Tested on Debian GNU/Linux with GNU awk 3.1.7 and 3.0.2, "original
+ awk" 2010-05-23-1, and mawk 1.3.3-15 (with which also the test
+ `tap-realtime.test' fails, in addition to those listed above).
+
+2011-08-21 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: fix spurious failure due to Solaris 'wc' incompatibility
+ * tests/tap-number-wordboundary.test ($planned): Strip any extra
+ whitespace from the output of `wc', to cater to Solaris 10.
+
+2011-08-21 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ coverage: keyword "SKIP" in TAP plan is case-insensitive
+ * tests/tap-planskip-case-insensitive.test: New test.
+ * tests/tap-planskip.test: Remove now-duplicated checks.
+ * tests/Makefile.am (tap_with_common_setup_tests): Update.
+
+2011-08-21 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ coverage: ambiguous use of TAP "TODO"/"SKIP" directives
+ * tests/tap-ambiguous-directive.test: New test.
+ * tests/tap-todo-skip-together.test: Reference it in heading
+ comments.
+ * tests/Makefile.am (tap_with_common_setup_tests): Update.
+
+2011-08-21 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ coverage: non-directive comments in TAP results are preserved
+ * tests/tap-result-comment.test: New test.
+ * tests/Makefile.am (tap_with_common_setup_tests): Update.
+
+2011-08-20 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ coverage: TAP result number followed by non-whitespace word boundary
+ * tests/tap-number-wordboundary.test: New test.
+ * tests/Makefile.am (tap_with_common_setup_tests): Update.
+
+2011-08-20 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ coverage: a TAP result numbered "0" is always out-of-order
+ * tests/tap-test-number-0.test: New, checks that a test result
+ numbered as 0 is to be considered out-of-order; this is
+ consistent with the behaviour of the `prove' utility.
+ * tests/Makefile.am (tap_with_common_setup_tests): Update.
+
+2011-08-20 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ cosmetics: fix botched indentation in perl TAP driver
+ * lib/tap-driver.pl (main, Getopt::Long::GetOptions): Fix
+ improper or botched indentation.
+
+2011-08-20 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ coverage: some more tests on corner cases of TAP support
+ * tests/tap-no-spurious.test: Extend checks verifying that a line
+ matching, say, the regex "^ok[a-zA-Z0-9_]" is *not* considered a
+ TAP result.
+ * tests/tap-no-spurious-numbers.test: New test, checking that our
+ TAP driver doesn't spuriously recognize as TAP result numbers what
+ is not (even if it seems pretty close).
+ * tests/tap-negative-numbers.test: New test, checking that our
+ TAP driver doesn't spuriously recognize negative TAP result
+ numbers, but correctly interprets them as test descriptions
+ instead.
+ * tests/tap-plan-leading-zero.test, tap-numbers-leading-zero.test:
+ New tests, checking how our driver fares in recognizing numbers
+ with leading zeroes in TAP results or TAP plans.
+ * tests/tap-planskip-malformed.test: New test, checking that a
+ malformed TAP plan is not recognized as a valid plan.
+ * tests/tap-plan-whitespace.test: New test, checking that a TAP
+ plan line with trailing whitespace is recognized and handled
+ correctly.
+ * tests/Makefile.am (tap_with_common_setup_tests): Update.
+
+2011-08-19 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: various fixlets and tweakings
+ * tests/seenc.test: Make grepping of automake stderr stricter.
+ Add a trailing `:' command.
+ * tests/symlink.test: Likewise. Also, define `$am_create_testdir'
+ to "empty" to avoid bringing in unused auxiliary files (only to
+ have to remove them right away), and use proper m4 quoting in
+ `configure.in'.
+ * tests/vpath.test: Make grepping of generated `Makefile.in'
+ slightly stricter. Prefer trailing `:' over trailing `Exit 0'.
+ * tests/suffix6c.test: Unset OBJEXT to avoid interferences from
+ the environment.
+ * tests/suffix12.test: Do not whitespace-indent `##' comments
+ when they are embedded in a makefile rule: having them indented
+ is not part of the Automake API, and might cause failures with
+ e.g., Tru64 make.
+ * tests/syntax.test: Simplify the `Makefile.am' to ensure that
+ automake doesn't fail for the wrong reasons. Make grepping of
+ automake stderr slightly stricter.
+ * tests/test-harness-vpath-rewrite.test: Remove useless variable
+ definition from `Makefile.am'.
+ * tests/test-driver-custom-multitest.test: Fix typo in comments.
+ * tests/self-check-me.tap: Fix minor typo in test description.
+ * tests/vars3.test: Make grepping of automake stderr stricter
+ and safer.
+ * tests/version6.test: Add sanity check, verifying that the
+ version number extracted from `automake --version' output seems
+ legit.
+ * tests/auxdir2.test: Renamed ...
+ * tests/auxdir-compauted.tap: ... to this, and converted to the
+ use of TAP.
+ * tests/auxdir4.test: Renamed ...
+ * tests/auxdir-unportable.tap: ... to this, and converted to the
+ use of TAP.
+ * tests/auxdir3.test: Renamed ...
+ * tests/auxdir-misplaced.test: ... to this.
+ * tests/auxdir5.test: Renamed ...
+ * tests/auxdir-nonexistent.test: ... to this.
+ * tests/auxdir9.test: Renamed ...
+ * tests/auxdir-autodetect.test: ... to this.
+ * tests/Makefile.am (TESTS): Update.
+ (XFAIL_TESTS): Remove `auxdir2.test'.
+
+2011-08-19 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: fix some redundant autotools calls in tests on TAP
+ * tests/tap-deps.test: Do not call autotools and configure; there
+ is no need to, since this script sources `tap-setup.sh'.
+ * tests/tap-empty-diagnostic.test: Likewise.
+ * tests/tap-escape-directive.test: Likewise.
+ * tests/tap-fancy2.test: Likewise.
+ * tests/tap-no-spurious.test: Likewise.
+ * tests/tap-out-of-order.test: Likewise.
+
+2011-08-17 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ * THANKS (Daniel Richard G.): Update e-mail address.
+
+2011-08-16 Daniel Richard G. <skunk@iskunk.org> (tiny change)
+ Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ java: avoid compilation errors when CLASSPATH is empty
+ * lib/am/java.am (CLASSPATH_ENV): When redefining `$CLASSPATH',
+ do not append an empty component in case the previous value of
+ CLASSPATH is empty or unset.
+ * tests/java-empty-classpath.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+ Fixes automake bug#9306.
+
+2011-08-16 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ parallel-tests: no more spurious successes for FreeBSD make
+ Work around a bug of FreeBSD make bug that was causing the
+ automake-generated "check" target to complete with success
+ even if some tests failed; this happened only when FreeBSD
+ make was run in concurrent mode (as in, e.g., "make -j2
+ check"). The bug is not present in NetBSD make.
+ This change fixes automake bug#9245:
+ <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=9245>
+ See also FreeBSD PR bin/159730:
+ <http://www.freebsd.org/cgi/query-pr.cgi?pr=159730>
+ * lib/am/check.am [%?PARALLEL_TESTS%] $(TEST_SUITE_LOG): Use a
+ more "safe" (and apparently redundant) idiom to exit with error,
+ so that the non-zero exit status is picked up also by FreeBSD
+ make when it's running in concurrent mode.
+ * NEWS: Update.
+ * tests/check-concurrency-bug9245.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-08-11 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ hacking: we now require autoconf 2.68
+ * HACKING ("Working in git"): Use autoconf and autom4te 2.68,
+ not 2.67, in the examples.
+
+2011-08-17 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap: improve granularity for tests on problematic TAP messages
+ * tests/tap-message-0.test: Break up into ...
+ * tests/tap-msg0-result.test, tests/tap-msg0-directive.test,
+ tests/tap-msg0-planskip.test, tests/tap-msg0-misc.test,
+ tests/tap-msg0-bailout.test: ... these new tests, and extend
+ a little.
+ * tests/Makefile.am (tap_with_common_setup_tests): Update.
+
+2011-08-17 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap: correctly handle string "0" in TAP messages
+ * lib/tap-driver.pl (is_null_string): New function, can be used
+ to determine whether a given string variable is empty or undefined.
+ Useful to avoid pitfalls like:
+ if ($message) { print "$message\n"; }
+ which wouldn't print anything if $message is the literal "0".
+ (handle_tap_test, handle_tap_plan, handle_tap_bailout): Use it,
+ to avoid missing messages composed only by a literal "0" in TAP
+ result descriptions and in skip, todo and bailout explanations.
+ * tests/tap-message-0.test: Enhance.
+ * tests/Makefile.am (XFAIL_TESTS): Remove it, it passes now.
+
+2011-08-17 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap: a minor simplification in the perl TAP driver
+ * lib/tap-driver.pl: The `--disable-hard-errors' option is a
+ no-op, so just ignore it and its argument.
+
+2011-08-17 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ parallel-tests: fix help screen for test driver scripts
+ * lib/tap-driver.pl ($USAGE): The `--trs-file' option is mandatory
+ too.
+ * lib/tap-driver.sh (print_usage): Likewise.
+ * lib/test-driver (print_usage): Likewise.
+ ($scriptversion): Update.
+
+2011-08-17 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap: add a dummy TAP driver script implemented in shell + awk
+ The user can also now decide which implementation of the TAP driver
+ to use in the testsuite by defining the `$am_tap_implementation'
+ variable to either "perl" or "shell". Future enhancements will
+ allow the testsuite to automatically run the test scripts on TAP
+ support with both the TAP driver implementations, to improve
+ coverage.
+ * tests/defs (fetch_tap_driver): Honor the `$am_tap_implementation'
+ variable to decide which implementation of the TAP driver to fetch.
+ ($am_tap_implementation): Default to "perl".
+ * tests/tap-common-setup.test: Do not fetch the TAP driver, the
+ code in tap-setup.sh does that already (and respecting runtime
+ overriding of `$am_tap_implementation').
+ * lib/tap-driver: Renamed ...
+ * lib/tap-driver.pl: ... to this, and ...
+ ($ME): ... adjusted this.
+ * doc/automake.texi: Adjust to the renaming.
+ * tests/Makefile.am (TAP_LOG_DRIVER): Likewise.
+ * tests/tap-doc2.test: Likewise.
+ * lib/tap-driver.sh: New script, still mostly dummy.
+ * lib/Makefile.am (dist_script_DATA): Update, and since we are at
+ it, rewrite it to make it easier to add new entries in the future.
+
+2011-08-17 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: refactor tests on TAP support in view of future changes
+ * tests/defs (fetch_tap_driver): New subroutine; it fetches the
+ automake-provided TAP driver from the `lib/' directory into the
+ current directory, and edits its shebang line so that it will be
+ run with the perl interpreter determined at configure time.
+ * tests/tap-setup.sh: Use it.
+ * tests/tap-common-setup.test: There's no need to AC_SUBST `PERL'
+ anymore, nor to use it in the Makefile to run the TAP driver.
+ Also, use the `fetch_tap_driver' function instead of copying the
+ `tap-driver' auxiliary script directly.
+ * tests/tap-bad-prog.tap: Likewise.
+ * tests/tap-diagnostic-custom.test: Likewise.
+ * tests/tap-doc.test: Likewise.
+ * tests/tap-merge-stdout-stderr.test: Likewise.
+ * tests/tap-more.test: Likewise.
+ * tests/tap-more2.test: Likewise.
+ * tests/tap-recheck.test: Likewise.
+ * tests/tap-summary-aux.sh: Likewise.
+ * tests/tap-basic.test: Likewise, and fix a grammaro in comments
+ since we are at it.
+
+2011-08-17 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ test defs: fix typo in comments
+ * tests/defs (get_shell_script): Fix typo in the function
+ description.
+
+2011-08-14 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ coverage: missing tap plan and non-zero exit status
+ * tests/tap-missing-plan-and-bad-exit.test: New test.
+ * tests/Makefile.am (tap_with_common_setup_tests): Update.
+
+2011-08-12 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: fix an unportable use of sed
+ * tests/tap-todo-skip-whitespace.test: Alternation with "\|" in
+ sed regular expressions is not portable to (at least) FreeBSD
+ sed; do not use it.
+
+2011-08-12 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: avoid spurious failure if rst2html program is missing
+ * tests/test-driver-custom-no-html.test: Account for the
+ possibility of a lacking `rst2html' program in our final
+ grepping of make output.
+
+2011-08-12 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap: improve diagnosing and reporting of plan mismatches
+ Problem exposed by a failure in the test 'tap-plan-errors.test'.
+ * lib/tap-driver (NO_PLAN, EARLY_PLAN, LATE_PLAN): New constants.
+ (Throughout the file): Use more complex semantics for `$plan_seen',
+ which now also remember whether the plan that has been seen is an
+ "early" or "late" plan; in turn, this makes ...
+ ($tap_stopped): ... this variable redundant; remove it.
+ (handle_tap_plan): Adjust to avoid producing spurious or confusing
+ error messages about extra or mismatched "late" TAP plans.
+ * tests/tap-plan-corned.test: Adjust and extend.
+ * tests/tap-color.test: Likewise.
+
+2011-08-12 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap: log all TAP stream, even after a "Bail out!"
+ * lib/tap-driver ($bailed_out): New global boolean variable,
+ telling whether a "Bail out!" directive has been seen or not.
+ (handle_tap_bailout): This function does not anymore stop the
+ reading from TAP stream; instead, it sets `$bailed_out' to a
+ true value, so that only the subsequent parsing of the input
+ TAP stream is stopped.
+ (finish): Remove, no more needed, its contents inlined into ...
+ (main): ... this function, with related adjustments in the code
+ flow.
+ (get_test_exit_message): Do not "flush" the input TAP stream
+ to fetch the exit status of test script, it is not anymore
+ required. Add a sanity check.
+ * tests/tap-bailout-and-logging.test: New test.
+ * tests/Makefile.am (tap_with_common_setup_tests): Update.
+
+2011-08-12 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ coverage: TAP diagnostics after "Bail out!" aren't reported
+ This is compatible with the behaviour of the `prove' utility.
+ * tests/tap-bailout-suppress-later-diagnostic.test: New test.
+ * tests/Makefile.am (tap_with_common_setup_tests): Update.
+
+2011-08-12 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ coverage: TAP errors after a "Bail out!" directive aren't reported
+ This is compatible with the behaviour of the `prove' utility.
+ * tests/tap-bailout-suppress-later-errors.test: New test.
+ * tests/tap-bailout-badexit.test: Renamed ...
+ * tests/tap-bailout-suppress-badexit.test: ... to this, for
+ consistency.
+ * tests/Makefile.am (tap_with_common_setup_tests): Update.
+
+2011-08-12 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: reorganize tests on TAP plans
+ * tests/tap-skip-whole.test: Rename ...
+ * tests/tap-planskip.test: ... to this
+ * tests/tap-skip-whole-badexit.test: Rename ...
+ * tests/tap-planskip-badexit.test: ... to this.
+ * tests/tap-skip-whole-bailout.test: Rename ...
+ * tests/tap-planskip-bailout.test: ... to this.
+ * tests/tap-skip-whole-bailout.test: Rename ...
+ * tests/tap-planskip-later-errors.test: ... to this.
+ * tests/tap-skip-whole-unplanned.test: Rename ...
+ * tests/tap-planskip-unplanned.test: ... to this.
+ * tests/tap-skip-whole-whitespace.test: Rename ...
+ * tests/tap-planskip-whitespace.test: ... to this.
+ * tests/tap-skip-whole-continue.test: Rename ...
+ * tests/tap-planskip-and-logging.test: ... to this, extend to try
+ more cases, and fix heading comments.
+ * tests/tap-skip-whole-lastline.test: Rename ...
+ * tests/tap-planskip-late.test: ... to this, fix heading comments,
+ and remove some checks that are just a duplication of those already
+ performed in the previous script.
+ * tests/tap-results-with-planskip.test: Rename to ...
+ * tests/tap-planskip-unplanned-corner.test: ... this, and improve
+ hading comments.
+ * tests/tap-planskip-later-errors.test: New test.
+ * tests/Makefile.am (tap_with_common_setup_tests): Update.
+
+2011-08-12 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ coverage: more TAP driver consistency w.r.t. 'prove'
+ * tests/skip-results-with-planskip.test: New test, verifies that
+ test results seen in a TAP stream that has a "plan with SKIP" are
+ flagged as errors.
+ * tests/Makefile.am (tap_with_common_setup_tests): Update.
+
+2011-08-12 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap: improve some comments in the TAP driver
+ * lib/tap-driver (handle_tap_plan): Improve comments describing
+ possible errors in a "plan with SKIP" directive.
+
+2011-08-12 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap: non-zero exit status after "Bail out!" should not be reported
+ This new behaviour is more consistent with that of the `prove'
+ utility. Also, experience with the use of TAP in the Automake's
+ own test suite has shown that reporting non-zero exit status from
+ a script after it has issued a "Bail out!" directive is mostly
+ redundant, more introducing noise rather than conveying useful
+ information.
+ * lib/tap-driver (finish): Inline the part of it that was getting
+ the script exit status ...
+ (main): ... in here.
+ * tests/tap-bailout-badexit.test: New test.
+ * tests/Makefile.am (tap_with_common_setup_tests): Update.
+
+2011-08-11 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap: a "plan with SKIP" after test results is an error
+ This new behaviour is both more natural and more consistent with
+ that of the `prove' utility.
+ * lib/tap-driver (handle_tap_plan): Do not stop TAP parsing when
+ a "plan with SKIP" line (e.g., "1..0 # SKIP") is encountered, and
+ do not print a "SKIP" line if some TAP result has already been
+ seen.
+ * tests/tap-skip-whole.test: Adapt.
+ * tests/tap-skip-whole-lastline.test: Likewise.
+ * tests/tap-global-result.test: Adapt and extend.
+ * tests/tap-skip-plan-errors.test: Likewise, and fix an obsolete
+ small part of a comment.
+ * tests/tap-skip-whole-bailout.test: New test.
+ * tests/tap-skip-whole-unplanned.test: Likewise.
+ * tests/tap-skip-whole-continue.test: Likewise.
+ * tests/Makefile.am (tap_with_common_setup_tests): Update.
+
+2011-08-09 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ test harness: avoid possible fork bomb
+ This fixes a regression w.r.t. the master branch, exposed by
+ test 'parallel-tests-fork-bomb.test'.
+ * lib/am/check.am (am--redo-logs): Detect possible infinite
+ recursion due to a test log in $(TEST_LOGS) being the same
+ as $(TEST_SUITE_LOG).
+
+2011-08-09 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ coverage: enhance test against infinite recursion in test harness
+ * tests/parallel-tests-fork-bomb.test: Enhance and extend a
+ little now, for soon-to-be-implemented more explicit and safer
+ semantics.
+
+2011-08-09 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ coverage: possible infinite recursion in the test harness
+ Motivated by a regression in the 'test-protocols' branch.
+ * tests/parallel-tests-fork-bomb.test: New test, checking that
+ if $(TEST_SUITE_LOG) is in $(TEST_LOGS), we obtain a diagnosed
+ error rather than a make hang or a fork bomb.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-08-09 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ test defs: yet more environment cleanup
+ * tests/defs: Also unset the TEST_SUITE_LOG variable.
+
+2011-08-14 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ self tests: some minor refactoring
+ * tests/self-check-exit.tap: Disable the `errexit' shell flag;
+ this allow to remove some boilerplate idioms and to make some
+ code slightly less cumbersome.
+ * tests/self-check-me.tap: Likewise.
+
+2011-08-14 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ maintcheck: look for TAP-based tests without TAP plan
+ * Makefile.am (sc_tests_tap_plan): New maintainer check.
+ (syntax_check_rules): Add it.
+ * tests/suffix10.tap: Declare a TAP plan.
+ * tests/add-missing.tap: Likewise.
+
+2011-08-14 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: avoid confusing SKIP messages for errored tests
+ * tests/defs [$use_tap] (exit trap): Don't print the test plan
+ in case the client script exited with a non-zero status. This
+ avoids the display of redundant "SKIP" messages for tests with
+ lazy plans that error out before any test is run.
+
+2011-08-13 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: keep more debugging info around in 'add-missing.tap'
+ * tests/add-missing.tap: Use a different directory for each test,
+ so that in case of failure more information is kept around.
+ Since we are at it, remove redundant TAP diagnostic, and define
+ `$am_create_testdir' to "empty" to avoid bringing in unused
+ auxiliary files.
+
+2011-08-13 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: more granular count of test results in our TAP library
+ * tests/tap-functions.sh ($tap_bad_count_): Removed, superseded
+ by ...
+ ($tap_fail_count_, $tap_xpass_count_): ... these new variables,
+ which keep more granular counts.
+ ($tap_pass_count_: New variable.
+ * tests/defs (exit trap): Adjust and simplify accordingly.
+
+2011-08-13 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: fixlets and improvements in two long TAP-based tests
+ * tests/depmod.tap: Clean up the subdirectories used by tests that
+ passed, to avoid ending up with a too big test directory. This is
+ especially important since, on each and every system, at least some
+ tests in this script are expected to be skipped (which ones exactly
+ depends on the system), thus causing the test directory not to be
+ removed when the script terminates.
+ * tests/instspc.tap: Likewise (with the difference that tests here
+ are not expected to be skipped, but to xfail). Give more explicit
+ error message in case of setup failure. Skip the proper number of
+ tests when required, to avoid spurious errors due to mismatched
+ plan. Also, really avoid to run the unsupported test cases when
+ the need to skip them is detected.
+
+2011-08-09 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ test harness: recursive make invocations must use $(AM_MAKEFLAGS)
+ * lib/am/check.am ($(TEST_SUITE_LOG)): Pass $(AM_MAKEFLAGS)
+ to $(MAKE) when issuing a recursive make call.
+ Problem detected by the `sc_tests_make_without_am_makeflags'
+ maintainer check.
+
+2011-08-09 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failure in 'suffix-chain.tap'
+ * tests/suffix-chain.test: Use more uncommon suffixes that
+ don't trigger built-in recipes with FreeBSD make.
+
+2011-08-09 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: improvements to our shell TAP library and APIs
+ These improvements impact only the Automake's own testsuite.
+ * tests/tap-functions.sh (plan_): Allow new special arguments
+ "unknown" a.k.a. "later" and "lazy" a.k.a. "now". Perform
+ sanity check the given arguments. Adjust incorrect comments.
+ (lazy_plan_): Removed, superseded by the new version of `plan_'.
+ (not): New function, run a command and inverts its exit status.
+ (ok_, not_ok_, skip_): These are just shorthands for common
+ `result_' usages.
+ (xfail_, xpass_, reset_test_count_): Removed, they are not used,
+ nor does a legitimate use for them seem in sight.
+ (not): New function, to run a command inverting its exit status.
+ (command_not_ok_): Removed, superseded by `command_ok_' + `not'.
+ (command_ok_): Extended to accept TAP directives.
+ * tests/defs (trap): Don't use `late_plan_' anymore, use
+ `plan_ "now"' instead.
+ * tests/ac-output-old.tap: Update to take advantage of the new
+ APIs.
+ * tests/self-check-env-sanitize.tap: Likewise.
+ * tests/suffix-chain.tap: Likewise.
+ * tests/suffix10.tap: Likewise.
+ * tests/suffix11.tap: Likewise.
+ * tests/suffix3.tap: Likewise.
+ * tests/suffix8.tap: Likewise.
+ * tests/tap-bad-prog.tap: Likewise.
+ * tests/self-check-exit.tap: Likewise, plus a small improvement
+ in the name of a variable.
+
+2011-08-09 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: convert some `suffix*' tests to TAP
+ This will allow us to explicitly declare some expected failures
+ involving Solaris make as such, instead of partly papering over
+ them with skips and partly letting them fail too loudly.
+ * tests/suffix-chain.test: Rename ...
+ * tests/suffix-chain.tap: ... to this, and convert to the use of
+ TAP. Also, fix some bugs since we are at it, and ...
+ ($required): ... require `cc'.
+ * tests/suffix3.test: Rename ...
+ * tests/suffix3.tap: ... to this, and convert to the use of TAP.
+ Also, since we are at it, throw in some formatting fixes.
+ * tests/suffix8.test: Rename ...
+ * tests/suffix8.tap: ... to this, and convert to the use of TAP.
+ Also, since we are at it, throw in some formatting fixes.
+ * tests/suffix10.test: Rename ...
+ * tests/suffix10.tap: ... to this, and convert to the use of TAP.
+ * tests/suffix11.test: Rename ...
+ * tests/suffix11.tap: ... to this, and convert to the use of TAP.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-08-09 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: don't let a known Solaris make bug poison too many tests
+ See automake bug#7670 and bug#7824.
+ * tests/defs (make_can_chain_suffix_rules): New function, tell
+ whether the make implementation in use can chain suffix rules
+ automatically or not.
+ * tests/suffix3.test: Use it to avoid issuing calls to make that
+ are unportable to make implementations that are not smart enough
+ to chain suffix rules automatically.
+ * tests/suffix8.test: Use it to avoid issuing calls to make that
+ * tests/suffix10.test: Use it to avoid issuing calls to make that
+ * tests/suffix11.test: Use it to avoid issuing calls to make that
+ * tests/suffix-chain.test: New test, exposes the limitation that
+ we have papered over in the tests above.
+
+2011-08-09 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ gitignore: more use of anchors
+ * .gitignore: Anchor files that are intended to be ignored only
+ if found in the same directory of the `.gitignore' file, not also
+ in its subdirectories.
+ * doc/.gitignore, doc/amhello/.gitignore, lib/Automake/.gitignore,
+ lib/Automake/tests/.gitignore, tests/.gitignore: Likewise. Also,
+ where needed, add new entries that were once implied by the
+ non-anchored entries in the upper-level `.gitignore' files.
+
+2011-08-09 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ self tests: avoid spurious output on console, and related fixlets
+ * tests/self-check-cleanup.test: Set `$stderr_fileno_' to `2'
+ in the self tests, to avoid spurious diagnostic on console.
+ * tests/self-check-exit.tap: Only unset `am_explicit_skips' and
+ `$stderr_fileno_' in the self tests, not at the global level, it
+ is more correct.
+ ($init): New variable, to reduce code duplication.
+ Some refactoring and adjustments to the name of the tests.
+
+2011-08-09 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ test defs: few more sanity checks
+ * tests/defs: Catch some more (very unlikely) set-up or internal
+ errors, and diagnose them explicitly. This is intended mostly
+ to be a theoretic-only improvement.
+
+2011-08-09 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ test defs: really make them "set -e" clean
+ Motivated by a spurious failure of test `instsh3-w.shtst' on
+ Solaris 10.
+ * tests/defs: Make really "set -e" clean, to avoid spurious
+ failures in case this file is sourced by a test script that has
+ already set the `errexit' flag. To be sure we don't regress,
+ move the `set -e' call much earlier, and make the comment telling
+ about the expected "set -e" cleanliness more loud and outstanding.
+
+2011-08-09 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ self tests: register an expected failures with Solaris /bin/sh
+ Solaris 10 /bin/sh erroneously exit with success right away when
+ the following three conditions are met at the same time:
+ 1. the `errexit' flag is active,
+ 2. an exit trap is installed, and
+ 3. a non-existing command is issued.
+ * tests/self-exit.tap: When that bug is detected, issue an XFAIL
+ rather than a FAIL. Since we are at it, improve by avoiding
+ creation of stray temporary files when testing for non-executable
+ commands.
+
+2011-08-09 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ gitignore: update and improve for the testsuite files
+ * tests/.gitignore: Don't ignore temporary partial log files,
+ autogenerated tests and makefile fragments that are not used
+ anymore. Anchor all the remaining patterns.
+
+2011-08-09 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ self tests: some new uses of TAP, few extensions
+ * tests/self-check-me.test: Renamed ...
+ * tests/self-check-me.tap: .. to this, and converted to use TAP.
+ * tests/self-check-exit.test: Renamed ...
+ * tests/self-check-exit.tap: .. to this, and converted to use TAP.
+ Set `$stderr_fileno_' to `2', to avoid spurious messages on the
+ console. Add a new test, and relax another one.
+ * tests/self-check-env-sanitize.test: Renamed ...
+ * tests/self-check-env-sanitize.tap: .. to this, and converted to
+ the use TAP.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-08-09 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ test defs: test directory creation more configurable
+ After this change, the individual tests will be able to tell
+ `./defs' whether or not to create a temporary test directory
+ for them, and if yes, whether or not to pre-populate it.
+ * tests/defs: Only create the temporary test directory if the
+ variable `$am_create_testdir' is not set to "no". In this
+ case, only pre-populate it if that variable is not set to
+ `$empty'.
+ * tests/defs-static.in: Check that `$am_create_testdir' is not
+ exported in the environment.
+ * tests/self-check-env-sanitize.test: Update.
+ * tests/self-check-dir.test: Extend, and make deeper and more
+ robust.
+ * tests/README (Section "Writing test cases" subsection "Do"):
+ Update.
+ * tests/autodist.test: Set `$am_create_testdir' instead of
+ removing by hand files created by ./defs.
+ * tests/tap-doc2.test: Likewise.
+
+2011-08-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: more uses of the `seq_' function
+ * tests/parallel-tests-exit-statuses.test: Use the `seq_' function
+ from `tests/defs', instead of duplicating its semantics.
+ * tests/testsuite-summary-count.test: Likewise.
+
+2011-08-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: drop redundant environment sanitization
+ * tests/Makefile.am (TESTS_ENVIRONMENT): Don't remove `planned'
+ from the environment.
+ * tests/defs-static.in: Don't complain if `planned' is set in
+ the environment.
+ * tests/self-check-env-sanitize.test: Update.
+
+2011-08-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ test defs: fix bug in plain version of `skip_all_'
+ * tests/plain-functions.sh (skip_all_): Call `skip_', not `skip'.
+
+2011-08-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ test defs: small cleanups and tweakings
+ * tests/defs: Where possible, prefer `framework_failure_' or
+ `fatal_' to `Exit 99'. Try to catch more possible hard errors
+ and setup failures. Do not hide expected error messages. Avoid
+ a couple of forks when copying files from `$(top_srcdir)/lib'.
+ ($signal): Remove, no more needed.
+
+2011-08-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: improve interface for giving early TAP plan
+ Since commit `v1.11-976-g4740f56', an early TAP plan can also be
+ specified after input lines have already been seen, as long as
+ no one of them is a TAP result line. We can now take advantage
+ of this in our own testsuite, allowing the TAP-based scripts to
+ specify their earlier plan after having included `./defs'. In
+ particular, this offers the benefit of allowing those scripts to
+ issue a "skip all" plan (e.g., "1..0 # SKIP reason ...") after
+ the inclusion of `./defs', which wasn't possible with the older
+ interface (introduced in commit `v1.11-1114-g0286308').
+ * tests/defs: Don't try to call `plan_' if `$planned' is defined,
+ the calling scripts can do that directly now.
+ * tests/ac-output-old.tap: Use `plan_' directly instead of
+ setting `$planned' before including `./defs'.
+ * tests/automake-cmdline.tap: Likewise.
+ * tests/depmod.tap: Likewise.
+ * tests/instspc.tap: Likewise.
+ * tests/tap-bad-prog.tap: Likewise.
+ * tests/add-missing.tap: Don't set `$planned'.
+
+2011-08-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ test defs: fix bug in TAP version of `skip_all_'
+ * tests/tap-functions (skip_all_): Set `$have_tap_plan_' to "yes"
+ when called, so that the exit trap won't write another TAP plan.
+
+2011-08-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ test defs: fix skip directives to work also with TAP-based tests
+ * test/defs: Use `skip_all_', not `skip_', to issue a skip of the
+ whole calling test script.
+
+2011-08-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ test defs: more environment cleanup
+ * tests/defs: Also unset variables AM_COLOR_TESTS and
+ AM_TESTS_ENVIRONMENT.
+
+2011-08-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ test harness: more minor VPATH-rewrite issues
+ * tests/am/check.am (am__set_TESTS_bases, $(TEST_SUITE_LOGS),
+ am--redo-logs, recheck, recheck-html): Cosmetic fixlets to
+ minimize the risk of unwanted VPATH rewrites.
+ (check-TESTS): Likewise, and normalize trailing whitespace
+ since we are at it.
+ Bugs exposed by test cases `check6-p.test' and `check7-p.test'.
+
+2011-08-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ test harness: "make -n check" works correctly with Solaris make
+ To avoid some recipes being executed with "make -n", we used the
+ trick of issuing recursive make calls not directly with $(MAKE),
+ but with a simple indirection instead:
+ ...
+ am__stealth_MAKE = $(MAKE)
+ ...
+ target:
+ ... $(am__stealth_MAKE) ...
+ ...
+ This hack worked with GNU make, but, unfortunately, not with
+ Solaris make. The present change removes the hack, and uses more
+ proper idioms to avoid unwanted recipe executions with "make -n".
+ Bug exposed by test case `parallel-tests-dry-run.test'.
+ * lib/am/check.am (am__stealth_MAKE): Remove, no more used.
+ (.log.trs): Break recipe in multiple shell invocations.
+ ($(TEST_SUITE_LOG)): Likewise, and move some corner-case parts of
+ the recipe to ...
+ (am--redo-logs): ... this new internal helper .PHONY target.
+
+2011-08-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failure with Solaris make
+ * tests/distcheck-configure-flags-am.test: Avoid using `+=' too
+ liberally with AM_DISTCHECK_CONFIGURE_FLAGS, since the line breaks
+ so introduced, in conjunction with single quotes, might confuse
+ Solaris make.
+
+2011-08-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ test harness: fixlet in workaround for VPATH rewrite issue
+ Fixes a minor in previous commit `v1.11-983-gfda3de5'.
+ * lib/am/check.am (am__set_TESTS_bases): Add forgotten end-of-line
+ anchor to sed expression. In comments, add reference to ...
+ * tests/test-trs-basic.test: ... this test, which has been adapted
+ and tightened (and tweaked).
+
+2011-08-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ test harness: work around a VPATH rewrite issue
+ * lib/am/check.am (am__TEST_BASES): Removed, it's role taken
+ over by ...
+ (am__set_TESTS_bases): ... these new variable.
+ ($(TEST_SUITE_LOG): Use it, to avoid VPATH rewrite issues.
+ * automake.in (handle_tests): Update the code for the cleanup
+ of the `.trs' file to use `$(TEST_LOGS)' instead of
+ `$(am__TEST_BASES)'.
+ * tests/test-harness-vpath-rewrite.test: New test, better
+ exposing the problem fixed by this change
+ * tests/Makefile.am (TESTS): Add it.
+ * tests/test-trs-basic.test: Update and extend.
+
+2011-08-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ parallel-tests: work around Solaris XPG4 make segfault
+ Issue exposed by test `posixsubst-tests-p.test', and similar to
+ the problem solved by commit `v1.11-159-ge7aa360'.
+ * lib/am/check.am [%?PARALLEL_TESTS%] (check-TESTS): Trim trailing
+ whitespace from $list, to avoid triggering a nasty bug (potential
+ segfault) on Solaris XPG4 make and Heirloom make.
+
+2011-08-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: fix weird spurious failure with Solaris /bin/sh
+ Solaris /bin/sh, when killed with a SIGTERM or SIGINT signal, can
+ apparently end up exiting with exit status 208, instead of leaving
+ the correct wide exit status to the parent. See:
+ <http://dbaspot.com/shell/396118-bourne-shell-exit-code-term.html>
+ Work around this incompatibility.
+ * tap-signal.test: Look for the above Solaris bug.
+ (signal_caught): Adapt to handle it.
+
+2011-08-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: fix another spurious failure on Solaris make
+ * tests/parallel-tests-log-override-recheck.test: Filter make
+ output before grepping it, for make implementations that, like
+ Solaris' one, print the whole of the failed recipe on failure.
+
+2011-08-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: fix two spurious failures on Solaris make
+ * tests/tests-environment-and-log-compiler.test: Do not fail if
+ "make -n check" fails, as that is issued only for debugging, its
+ semantics being tested in other test scripts.
+ * tests/test-driver-strip-vpath.test: Likewise.
+
+2011-08-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap driver: refactor and remove dead code
+ * lib/tap-driver (get_tap_line): Removed, ...
+ (all callers): ... updated to use $parser->next directly instead.
+ (peek_tap_line, unget_tap_line, @tap_lines): Remove, they're not
+ used anymore.
+ (TAP_PEEKING): Block deleted, all its subroutines and variables
+ having been removed.
+
+2011-08-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: fix spurious failure in a test on TAP support
+ * tests/tap-passthrough-exit.test: When the `--ignore-exit' flag
+ of the TAP driver is used, don't look for a message reporting the
+ non-zero exit statuses of tests in the log files; such message is
+ not expected to be there anymore. Related simplifications.
+
+2011-08-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap: plan location is more liberal w.r.t. non-TAP lines
+ With this change, only lines that are TAP results will matter
+ w.r.t. the position of the TAP plan in the input; for example,
+ this input:
+ this is a non-TAP line
+ # and this a TAP diagnostic line
+ 1..1
+ ok 1
+ was considered to be an error, diagnosed with a message "test
+ plan in middle of output"; as effect of the current change, such
+ input is now valid. This is more consistent with the behaviour
+ of the `prove' utility.
+ * lib/tap-driver ($lineno): Removed, no more needed.
+ ($tap_stopped): New global variable.
+ (stringify_test_result): Return "ERROR" if a TAP result is found
+ when `$tap_stopped' is set to true.
+ (handle_tap_test): Diagnose TAP results that comes after a late
+ plan. Add a couple of blank lines, for clarity.
+ (handle_tap_plan): Set `$tap_stopped' to true after a late plan
+ is encountered. Do not complain anymore for extra non-TAP lines
+ preceding or following the plan. Adjust comments.
+ (main): Don't increment $lineno anymore.
+ * tests/tap-plan.test: Extend a bit, and remove stale comment.
+ * tests/tap-color.test: Adjust.
+ * tests/tap-passthrough.test: Likewise.
+ * tests/tap-plan-corner.test: Adjust and extend.
+ * tests/tap-plan-errors.test: Likewise.
+ * tests/tap-plan-middle.test: New test.
+ * tests/tap-plan-corner2.test: Delete, it's obsolete now.
+ * tests/Makefile.am (XFAIL_TESTS): Remove it.
+ (tap_with_common_setup_tests): Likewise, and add
+ `tap-plan-corner.test'.
+
+2011-08-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: remove now-passing test from XFAIL_TESTS
+ * tests/Makefile.am (XFAIL_TESTS): Remove `tap-signal.test',
+ which is passing since previous commit `v1.11-974-gc7fa872'.
+
+2011-08-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ test defs: get name of TAP-using tests correctly
+ This change fixes the names of the temporary directories used
+ by the TAP-based tests (e.g., test `foo.tap' now uses `foo.dir'
+ rather than `foo.tap.dir'); more importantly, this make the
+ variable `$destdir' defined in `tests/defs' usable also in the
+ TAP tests.
+ ($me): Also strip the any `.tap' suffix from the name of the
+ test.
+
+2011-08-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: TAP tests properly decide when to remove tempdirs
+ Before this change, the TAP tests in the Automake testsuite were
+ removing the temporary test directory even when they failed or
+ were skipped, thus making debugging more difficult.
+ * tests/tap-functions.sh (incr_tap_count): Removed, superseded
+ by ...
+ (incr_): ... this function, which can increment the value of any
+ variable passed to it.
+ (result_): Updated to use `incr_' instead of the now-removed
+ `incr_tap_count_'. Keep count of failures, xfailures, xpasses,
+ and skips, using ...
+ ($tap_skip_count_, $tap_bad_count, _$tap_xfail_count_): ...
+ these new variables.
+ * tests/defs (trap): Try to use their values to decide whether
+ the temporary directory being used by the test script should be
+ removed or not. Other code reorganizations. And move the code
+ for the removal of the temporary directory out to ...
+ (rm_rf_): ... this new subroutine.
+ (Main code): Use that instead of duplicating the code.
+
+2011-08-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: improve and refactor our custom TAP shell library
+ This change is mostly done in preparation for the next one.
+ * tests/tap-functions.sh (result_with_directive_): Merge into ...
+ (result_): ... this function, which has been greatly extended and
+ improved in various ways.
+ (ok_, not_ok_, skip_, xfail_, xpass_): Adjust.
+ Adjust comments. Remove an extra empty line.
+ * tests/instspc.tap: Use the new improved interface of `result_'.
+ * tests/tap-bad-prog.tap: Likewise.
+
+2011-08-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: update "user interface" description in tests/README
+ * tests/README (Subsection "Interpretation"): Mention the "ERROR"
+ outcome.
+ (Subsection "Getting details from failures"): Don't tell that the
+ test scripts can be run directly, this is not 100% true; anymore;
+ instead ...
+ (Subsection "About the tests"): ... use this new subsection to
+ explain how to run the tests (either simple or TAP-based) by hand.
+ (Subsection "Supported shells"): Extend to refer to TAP tests too.
+
+2011-08-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: TAP tests can have early plan now
+ * tests/defs: When using TAP, allow the user to specify the number
+ of tests through the `$planned' variable.
+ (trap): Do not print the auto-generated plan if an explicit one
+ has already been printed.
+ * tests/defs-static.in: Complain and bail out if the `$planned'
+ variable is exported in the environment. Reformat the code to
+ facilitate future additions.
+ * tests/Makefile.am (TESTS_ENVIRONMENT): Neutralize `$planned'.
+ * tests/self-check-env-sanitize.test: Update.
+ * tests/ac-output-old.tap: Give an explicit TAP plan, by defining
+ `$planned' just before including `./defs'.
+ * tests/depmode.tap: Likewise.
+ * tests/automake-cmdline.tap: Likewise.
+ * tests/tap-bad-prog.tap: Likewise.
+ * tests/instspc.tap: Likewise, and related adjustments.
+ * tests/add-missing.tap: Make it explicit that we have no a-priori
+ plan, and tell why.
+
+2011-08-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: run autogenerated tests with $(LOG_COMPILER) too
+ This change enhances consistency in the testsuite.
+ * tests/Makefile.am: Some cosmetic reordering, to keep the
+ definition of FOO_LOG_COMPILER near to the place where `.foo'
+ is added to $(TEST_EXTENSIONS).
+ (PTEST_LOG_COMPILER): Run `$(srcdir)/parallel-tests.sh' with
+ `$(LOG_COMPILER)', not with `$(SHELL)'.
+ (SHTST_LOG_COMPILER): Likewise.
+
+2011-08-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: run TAP and "plain" tests with the same $(LOG_COMPILER)
+ With this change, it will be easier to override, at make time, the
+ shell used to run the tests.
+ * tests/Makefile.am (LOG_COMPILER): Define to `$(SHELL)'.
+ (TEST_LOG_COMPILER): Re-define to `$(LOG_COMPILER)'.
+ (TAP_LOG_COMPILER): Likewise.
+
+2011-08-06 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: run TAP-based tests explicitly with $(SHELL)
+ * tests/Makefile.am (TAP_LOG_COMPILER): Define to `$(SHELL)'.
+
+2011-08-06 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap driver: handle signals received by the tests being run
+ * lib/tap-driver (get_test_exit_message): Also deal with signals,
+ by using the `wait' method of the TAP::Parser object instead of
+ the `exit' method. This required the use of the standard perl
+ module `POSIX'.
+ * doc/automake.texi (Use TAP with the Automake test harness):
+ Document that `--ignore-exit' has effect also on terminating
+ signals. Add a "synchronizing" comment that references the tests
+ 'tap-exit.test' and 'tap-signal.test'.
+ * tests/tap-signal.test: Extend and adjust.
+
+2011-08-06 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ test driver: a preparatory refactoring (2)
+ * lib/tap-driver (finish): Move code to fetch the message about
+ the exit status of the test being run to ...
+ (get_test_exit_message): ... this new subroutine.
+
+2011-08-06 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap driver: a preparatory refactoring (1)
+ * lib/tap-driver (finish): Do not flush the TAP stream nor
+ fetch the exit status of the TAP producer if running with
+ the `--ignore-exit' option. Obviously, don't try to write
+ such exit status in the test log anymore.
+
+2011-08-06 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ cosmetics: typofix in the name of a function in the TAP driver
+ * lib/tap-driver (testuite_error): Renamed ...
+ (testsuite_error): ... to this, and minor related reformatting.
+
+2011-08-06 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap: scripts with a SKIP plan but with exit status != 0 must error
+ This change has been motivated by Automake's own testsuite. Some
+ TAP tests there were erroring out (due to unexpected, unhandled
+ failures) before having encountered TAP result, so that the
+ simple-minded shell library implementing TAP generation ended up
+ printing a "1..0" trailing test plan; this caused the script to be
+ reported as a SKIP rather than an ERROR -- a nasty false negative.
+ * lib/tap-driver: Add prototypes for each subroutine, to free up
+ the order in which they can be defined and called.
+ (main): Move the code checking for a bad exit status of the TAP
+ producer ...
+ (finish): ... here, and flush the TAP stream to ensure that the
+ parser always obtains the producer's exit status.
+ * tests/tap-skip-whole-badexit.test: New test.
+ * tests/Makefile.am (tap_with_common_setup_tests): Add it.
+
+2011-08-06 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap: fix whitespace munging of diagnostic messages
+ * lib/tap-driver (extract_tap_comment): Pass the `g' flag to the
+ substitution operator, to strip also trailing whitespaces. Fixes
+ a failure in test `tap-whitespace-normalization.test'.
+
+2011-08-06 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: refactor and cleanup 'instspc.tap'
+ * tests/instspc.tap (is_in_list): New helper subroutine.
+ (expected_to_fail): Re-implement using it.
+ (define_problematic_string): Likewise. Also, rename the special
+ arguments `build-fail' and 'install-fail' to respectively
+ `builddir-fail' and `destdir-fail', and other related changes.
+ (Test data definition): Adapt.
+ ($instspc_xfail_builds_list): Renamed ...
+ ($builddir_xfails): ... to this.
+ ($instspc_xfail_installs_list): Renamed ...
+ ($destdir_xfails): ... to this.
+ ($instspc_names_list): Renamed ...
+ ($test_names_list): ... to this.
+ ($instspc_test_string): Renamed ...
+ ($test_string): ... to this.
+ Add some explicative and "FIXME" comments.
+
+2011-08-06 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: use TAP for `depmod*' tests, related simplifications
+ * tests/depmod-tests.sh: Delete this complex and multifarious
+ script, moving all it checks it used to perform into ...
+ * tests/depmod.tap: ... this TAP-based test script. And extend
+ it quite a bit, since the new form of the test was papering over
+ some pre-existing failures (this was due to the fact that the
+ values used for the VPATH were shorter in the new test script).
+ * tests/depmod-data.test: Deleted.
+ * tests/Makefile.am ($(srcdir)/depmod-tests.am): Don't include
+ nor generate it anymore.
+ (EXTRA_DIST): Don't distribute depmod-tests.sh anymore.
+ (TEST_EXTENSIONS): Remove '.depmod'.
+ (DEPMOD_LOG_COMPILER): Deleted.
+ (depmod-data.log, $(depmod_tests:.depmod=.log)): Delete
+ dependencies for these files, which are not used anymore.
+ ($(depmod_tests)): Delete this dummy dependency declaration.
+ (TESTS): Remove $(depmod_tests).
+ (handwritten_tests): Remove depmod-data.test, add depmod.tap.
+ * bootstrap: Don't generate tests/depmod-tests.am anymore.
+
+2011-08-06 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: use TAP for `instspc*' tests, related simplifications
+ * tests/instspc-tests.sh: Delete this complex and multifarious
+ script, moving all it checks it used to perform into ...
+ * tests/instspc.tap: ... this TAP-based test script.
+ * tests/instspc-data.test: Deleted.
+ * tests/Makefile.am ($(srcdir)/instspc-tests.am): Don't include
+ nor generate it anymore.
+ (EXTRA_DIST): Don't distribute instspc-tests.sh anymore.
+ (TEST_EXTENSIONS): Remove '.instspc'.
+ (INSTSPC_LOG_COMPILER): Deleted.
+ (XFAIL_TESTS): Remove $(instspc_xfail_tests).
+ (instspc-data.log, $(instspc_tests:.instspc=.log)): Delete
+ dependencies for these files, which are not used anymore.
+ ($(instspc_tests)): Delete this dummy dependency declaration.
+ (TESTS): Remove $(instspc_tests).
+ (handwritten_tests): Remove instspc-data.test, add instspc.tap.
+ * bootstrap: Don't generate tests/instspc-tests.am anymore.
+
+2011-08-06 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: do fd redirections with $(AM_TESTS_FD_REDIRECT)
+ * tests/Makefile.am: The redirections of file descriptors needed
+ by our test scripts is now done using the $(AM_TESTS_FD_REDIRECT)
+ variable (the new blessed way since commit `v1.11-906-gb9e9d54'),
+ not using an hack involving $(AM_TESTS_ENVIRONMENT). This has
+ the further benefit of allowing the use of $(TESTS_ENVIRONMENT)
+ again on part of the users.
+ * tests/Makefile.am (AM_TESTS_ENVIRONMENT): Remove redirection of
+ file descriptors.
+ (AM_TESTS_FD_REDIRECT): Redirect file descriptor 9 to original
+ stderr.
+ Comments adjusted.
+ * tests/plain-functions.sh ($stderr_fileno_): Update comment.
+
+2011-08-05 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: use custom TAP diagnostic in our own tests
+ This change allow us to easily and transparently avoid spurious
+ TAP diagnostic in our own testsuite, with the help of the new
+ `--diagnostic-string' option of our TAP test driver.
+ * tests/Makefile.am (TAP_LOG_DRIVER_FLAGS): Also pass option
+ `--diagnostic-string' with value `#%#' (necessarily obtained
+ through some shell indirections).
+ * tests/tap-functions.sh (diag_): Assume that the string denoting
+ TAP diagnostic is stored in the `$diag_string_' variable. Update
+ comments.
+ ($diag_string_): Initialize to "#".
+ * tests/defs ($diag_string_): Re-define to "#%#".
+ (show_): Remove, it's obsolete now.
+ * add-missing.tap: Don't use `show_' anymore to avoid spurious
+ TAP diagnostic; `cat' should suffice now.
+
+2011-08-05 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap: fix typo in TAP driver version message
+ * lib/tap-driver (anonymous subroutine printing the script version
+ message): Add missing trailing newline to the version message.
+
+2011-08-05 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap docs: we don't support pragma or version directives (yet)
+ * doc/automake.texi (Incompatibilities with other TAP parsers
+ and drivers): Document that limitation. Normalize an unrelated
+ "TODO" item.
+
+2011-08-05 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap: new option to change the string designating TAP diagnostic
+ Here we introduce a new option `--diagnostic-string' in our TAP
+ test driver, that allows the user to specify which string should
+ denote the beginning of a TAP diagnostic line. This change is
+ not gratuitous, nor result if over-engineering: it is motivated
+ by real issues that have emerged during the use of TAP in the
+ Automake's own testsuite (see the commit `v1.11-1082-g9b967c2'
+ "testsuite: yet more use of TAP, and related extensions").
+ * doc/automake.texi (Use TAP with Automake test harness): Document
+ the new option.
+ (Incompatibilities with other TAP parsers and drivers): Report it
+ as a potential source of incompatibility.
+ * lib/tap-driver ($diag_string): New global variable, defaulting
+ to "#", and whose value can be changed ...
+ (Getopt::Long::GetOptions): ... by the newly recognized option
+ `--diagnostic-string'.
+ (handle_tap_comment): Subroutine removed, some of its simple logic
+ inlined ...
+ (main): ... in here, where now ...
+ (extract_tap_comment): ... this new subroutine is used.
+ ($USAGE): Adjust.
+ * tests/tap-diagnostic.test: Make one check slightly stricter.
+ * tests/tap-diag-custom.test: New test.
+ * tests/Makefile.am (tap_other_tests): Add it.
+
+2011-08-05 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ check: add small "synchronization" comment to `test-driver'
+ * lib/test-driver: Add comment to the code initializing ANSI color
+ escapes, telling to keep it in sync with the similar initialization
+ in `lib/am/check.am'.
+
+2011-08-05 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ maintcheck: fix spurious failure w.r.t. use of bare "exit"
+ * tests/check12.test: Cosmetic changes to avoid triggering a
+ spurious failure of the `sc_tests_Exit_not_exit' maintainer
+ check.
+
+2011-08-05 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ check: update comments to reflect recent heavy changes
+ * lib/am/check.am [%?PARALLEL_TESTS%]: Update the comments to
+ reflect the recent changes. Remove quite many comments that
+ were merely duplicating excerpts from the Automake manual.
+
+2011-08-05 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ check: small cleanups and refactorings in test harness and drivers
+ * lib/tap-driver (yn): New subroutine, converts a boolean value to
+ a "yes" or "no" string.
+ (write_test_results): Use it, and related reformatting.
+ * lib/test-driver (trap): Also remove the `.trs' file on signals,
+ for extra safety.
+ (fatal): Remove this function, it's never used.
+ ($logfile, $trsfile): Renamed ...
+ ($log_file, $trs_file): ... to these, for clarity, and in order to
+ be more consistent with the `tap-driver' script.
+ Improve a couple of comments.
+ * automake.in (handle_tests): Don't define anymore the now-obsolete
+ make macro `$(TEST_LOGS_TMP)', nor add it to the list of files to
+ be removed upon "make mostlyclean".
+ * lib/am/check.am ($(TEST_SUITE_LOG)): New shell function `f_ok',
+ tells whether a path refers to an existing, regular, readable file.
+ Use it throughout.
+ (recheck): Be safer w.r.t. make implementation that run recipes
+ with `errexit' shell flag active.
+
+2011-08-05 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: use AM_TESTS_FD_REDIRECT where appropriate
+ * parallel-tests-interrupt.test: Use AM_TESTS_FD_REDIRECT, not
+ AM_TESTS_ENVIRONMENT, to define file descriptors' redirection
+ for "make check". Fix botched comment.
+
+2011-08-05 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ docs: some fixlets in documentation on testsuites support
+ * doc/automake.texi (Script-based Testsuites): Rename node ...
+ (Scripts-based Testsuites): ... to this. Break overly long lines
+ in an example (were causing problems with PDF output).
+ (Parallel Test Harness): Don't intend paragraphs that come after
+ examples or bulleted list.
+ (Overview of Custom Test Drivers Support): Fix typo s/the the/the/.
+ (Declaring Custom Test Drivers): When giving an aside, prefer comma
+ to parentheses, as it disrupts the reading flow less.
+ (API for Custom Test Drivers): Remove a sentence that was basically
+ duplicated from the previous subsection.
+ (Command-line arguments for test drivers): Don't intend paragraph
+ coming after an itemized list. Clarify wording and fix grammaros.
+ Add a couple of cross-references to earlier explanations of `.log'
+ and `.trs' files.
+ (Links and external resources): Node renamed ...
+ (Links and external resources on TAP): ... to this, for clarity.
+ Slightly extend and clarify introductory sentence.
+
+2011-08-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ test harness: be aware of more metadata, simplify test drivers
+ * lib/am/check.am ($(TEST_SUITE_LOG)): When producing the
+ global test log, take into account the new metadata field
+ `:global-test-result:, to write nicely formatted RST section
+ titles, instead of leaving this chore to the individual test
+ drivers.
+ (am_rst_section): Re-introduce this variable, as removed in
+ commit `v1.11-870-ga27c9c4'.
+ * lib/test-driver, lib/tap-driver: Write the global test result
+ as metadata in the `.trs' file, not as (part of) a formatted RST
+ subsection title in the `.log' file. Related simplifications;
+ in particular, get rid of temporary files usage.
+ * doc/automake.texi (Log files generation and test results
+ recording): Document the new metadata.
+ * tests/check12.test: Update.
+ * tests/parallel-tests-harderror.test: Likewise.
+ * tests/parallel-tests-interrupt.test: Likewise.
+ * tests/parallel-tests-log-override-2.test: Likewise.
+ * tests/parallel-tests-log-override-recheck.test: Likewise.
+ * tests/parallel-tests-unreadable.test: Likewise.
+ * tests/tap-global-result.test: Likewise.
+ * tests/test-metadata-results.test: Likewise.
+ * tests/test-log.test: Likewise, and another minor unrelated fix.
+ * tests/test-metadata-global-result.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-08-03 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap: check that also a trailing TAP plan can hold a skip directive
+ * tests/tap-skip-whole-lastline.test: New test.
+ * tests/Makefile.am (tap_with_common_setup_tests): Add it.
+
+2011-08-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: more correct names for a couple of tests
+ * tests/parallel-tests-ext-driver.test: Rename ...
+ * tests/parallel-tests-log-compiler-1.test: ... to this, and
+ adjust heading comments.
+ * tests/parallel-tests-ext-driver-prog.test: Rename ...
+ * tests/parallel-tests-log-compiler-2.test: ... to this, and
+ adjust heading comments.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-08-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: fix another spurious failure
+ * tests/parallel-tests-ext-driver.test: Name out custom/dummy
+ log compilers as `foo-compiler' rather `foo-driver'; not only
+ this is less confusing, it also avoids errors due to the dummy
+ log compiler `test-driver' overriding the `test-driver' helper
+ script installed by Automake.
+ * tests/parallel-tests-ext-driver-prog.test: Adjust heading
+ comments.
+
+2011-08-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: fix a spurious failure
+ * tests/parallel-tests-ext-driver.test: Exporting of environment
+ variables directly from $(LOG_COMPILER) variables is not allowed
+ anymore. Adjust to this.
+
+2011-08-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: yet more use of TAP, and related extensions
+ * tests/defs (show_): New function, display the contents of one or
+ more files on stdout, with bells & whistles (both for cosmetic and
+ practical reasons, the latter aimed at avoiding spurious TAP
+ diagnostic).
+ (AUTOMAKE_run): Extend and adapt to make it compatible with TAP
+ based tests. Since we are at it, make its implementation more
+ namespace-safe, and improve its command-line interface.
+ (AUTOMAKE_fails): Adapt to the new command-line interface of
+ `AUTOMAKE_run'.
+ * tests/add-missing.test: Renamed ...
+ * tests/add-missing.tap: ... to this, and converted to the use
+ of the TAP protocol, and of the new `show_' function.
+ * tests/automake.test: Renamed ...
+ * tests/automake-cmdline.tap: ... to this, and converted to the
+ use of the TAP protocol.
+ * tests/getopt.test: Adapt to the new command-line interface
+ of `AUTOMAKE_run'.
+ * tests/cond44.test: Likewise.
+ * tests/cond45.test: Likewise.
+ * tests/configure.test: Likewise.
+ * tests/license2.test: Likewise.
+ * tests/parallel-am.test: Likewise.
+ * tests/parallel-am3.test: Likewise.
+ * tests/tags2.test: Likewise.
+ * tests/werror3.test: Likewise.
+ * tests/werror4.test: Likewise.
+ * tests/amopts-variable-expansion.test: Likewise.
+ * tests/warnings-win-over-strictness.test: Likewise.
+ * tests/Makefile.am (TESTS): Update.
+ (TAP_LOG_DRIVER_FLAGS): Add `--merge', so that TAP diagnostic is
+ reported in the testsuite progress output.
+
+2011-08-03 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ maintcheck: fix more maintainer-check failures
+ * tests/test-driver-custom-no-html.test (no-rst): Use `EOF',
+ not `EoL', as the here-document delimiter.
+ * tests/test-trs-basic.test: Use `cat + here-doc' rather
+ than `echo' when creating the dummy test scripts, to please
+ maintainer-check.
+ * tests/test-trs-recover.test: Use creative quoting where
+ needed, to please maintainer-check.
+ * tests/parallel-tests-no-color-in-log.test: Likewise.
+ * tests/parallel-tests-dry-run.test: Likewise.
+
+2011-08-03 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ maintcheck: fix maintainer-check failures, both real and spurious
+ * tests/amhello-binpkg.test: Use "$MAKE", not bare "make".
+ * Makefile.am (sc_perl_local): Also allow perl special variable
+ `$~' to be localized. And be slightly laxer in the regexp, to
+ allow for usages like "local $_ = $foo;".
+ (sc_tests_overriding_macros_on_cmdline): Also allow for command
+ line overriding of the `DISABLE_HARD_ERRORS' make variable. Try
+ to avoid false positives for usages like "$MAKE || st=$?".
+
+2011-08-03 Bruno Haible <bruno@clisp.org>
+
+ docs: how to use '-I' option in AM_CPPFLAGS for best VPATH support
+ * doc/automake.texi (Program Variables): Recommend -I options to
+ both the build directory and the source directory when needed.
+
+2011-07-23 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: relax a test on amhello examples to cater to Solaris tar
+ * tests/amhello-binpkg.test: When the tar implementation in use
+ is not GNU tar, relax the tests on tar output, to avoid spurious
+ failures. For example, "tar cvf ..." with GNU tar can output
+ lines like "./usr/bin/hello" on the standard output, while with
+ Solaris tar it can output lines like "a ./usr/bin/hello 8K" on
+ standard output, and with Heirloom tar it can output lines like
+ "a ./usr/bin/hello 15 tape blocks" on standard error.
+
+2011-07-23 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ test defs: function 'is_newest' now works also with directories
+ * tests/defs (is_newest): Call `find' with the `-prune' option,
+ so that it won't descend in the directories (which could cause
+ spurious results).
+ * tests/self-check-is_newest: Extend accordingly.
+ From a report by Jim Meyering, see automake bug#9147.
+
+2011-07-15 Benoit Sigoure <tsunanet@gmail.com>
+
+ docs: add references between the 2 sections on java support
+ * doc/automake.texi (Java Support, Java): Add cross-references.
+
+2011-07-20 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Sync auxiliary files from upstream.
+ * INSTALL, lib/INSTALL, lib/config.guess, lib/config.sub,
+ lib/texinfo.tex: Sync from upstream.
+
+2011-07-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix weakness in 'tests-environment-backcompat.test'
+ * tests/tests-environment-backcompat.test: Do not override the
+ content of xfailing test `baz.test' with a "weaker" version that
+ fails unconditionally: the test must fail only when the 'strict'
+ pragma is in use, in order not to reduce coverage.
+
+2011-07-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ docs, tests: synchronize examples on silent-rules from config.site
+ * doc/automake.texi (Automake silent-rules Option): Reference test
+ 'silent-configsite.test' in comments.
+
+2011-07-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: portability fixes in tests on amhello examples
+ * tests/amhello-binpkg.test: Don't use "tar xzf too.tag.gz" to
+ extract a gzip-compressed tarball, that's unportable to some
+ tar implementations; use the "gzip -dc fo.tar.gz | tar xf -"
+ idiom instead.
+ * tests/amhello-cflags.test: Likewise.
+ * tests/amhello-cross-compile.test: Likewise.
+ Suggestion from Ralf Wildenhues.
+
+2011-07-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ remake: add test ensuring that slower remakes don't hang
+ * tests/remake-subdir-long-time.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+ Suggestion by Ralf Wildenhues.
+
+2011-07-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ remake: fix outdated comment in configure.am
+ * lib/am/configure.am: Fix comment falsified by changes in
+ commit `v1.11-366-gbee9871'.
+ Suggestion by Ralf Wildenhues.
+
+2011-07-01 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ docs, tests: synchronize examples from docs to tests
+ * tests/README (Writing test cases): Give suggestions on how to
+ keep test cases and examples in the documentation synchronized.
+ * doc/automake.texi: Improve or fix existing testcase-referencing
+ comments, and add many new ones.
+ * HACKING (Administrivia): Suggest to test complex examples and
+ idioms from the manual.
+ * tests/specflg8.test: Improve synchronization with the example
+ in the manual.
+ * tests/output11.test:Likewise.
+ * tests/txinfo21.test:Likewise.
+ * tests/interp.test: Likewise.
+ * tests/amhello-cflags.test: New test.
+ * tests/amhello-cross-compile.test: Likewise.
+ * tests/amhello-binpkg.test: Likewise.
+ * tests/tests-environment-backcompat.test: Likewise.
+ * tests/parallel-tests-log-compiler-example.test: Likewise.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-06-30 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ coverage: new test on parallel-tests TESTS runtime overriding
+ * tests/parallel-tests-cmdline-override.test: New test, check that
+ we can use indirections when overriding TESTS and TEST_LOGS from
+ the command line.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-08-03 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ gitignore: ignore `*.trs' files in lib/Automake/tests
+ * lib/Automake/tests/.gitignore: Add `*.trs' pattern.
+
+2011-08-03 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: list another "forgotten" test script in Makefile.am
+ * tests/Makefile.am (TESTS): Also list test script
+ `test-driver-trs-suffix-registered.test'; it had been introduced
+ in commit `v1.11-910-g0c81b43', but by mistake it wasn't added
+ to the list of tests in the Makefile back then.
+
+2011-08-03 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: list "forgotten" test script in Makefile.am
+ * tests/Makefile.am (TESTS): Also list the test script
+ `parallel-tests-no-color-in-log.test'; it had been introduced in
+ commit `v1.11-899-geaac33f', but by mistake it wasn't added to
+ the list of tests in the Makefile back then.
+
+2011-08-03 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: remove duplicated mention of a test in Makefile.am
+ * tests/Makefile.am (tap_other_tests): Remove `tap-empty.test',
+ it is already listed in `$(tap_with_common_setup_tests)'.
+
+2011-08-03 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: one more use of TAP in our own tests
+ * tests/tap-bad-prog.test, tests/tap-bad-prog2.test: Merged
+ into ...
+ * tests/tap-bad-prog.tap: ... this TAP-generating test.
+ * tests/Makefile.am (tap_other_tests): Remove plan-bad-prog.test
+ and plan-bad-prog2.test.
+ (XFAIL_TESTS): Remove plan-bad-prog2.test.
+ (plan-bad-prog2.log): Remove.
+
+2011-08-03 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: scaffolding to allow use of TAP in our own tests
+ Now that Automake has initial support for the TAP test protocol,
+ we can start "eating our own dog food" and rewrite some tests to
+ use TAP; this should allow for better granularity, especially in
+ the control of skips and expected failures. With this change, we
+ set up the initial scaffolding required by the planned TAP tests,
+ and convert few older tests to use TAP, mostly in order to verify
+ that there are no obvious errors. The tests in our testsuite that
+ use the TAP protocol will be marked by the new `.tap' extension.
+ * tests/plain-functions.sh: New file containing definition of
+ helper shell functions used by the "protocol-less" tests of the
+ Automake testsuite.
+ * tests/tap-functions.sh: New file containing definition of
+ helper shell functions used by the TAP-producing tests of the
+ Automake testsuite.
+ * tests/defs: Remove definitions of some functions that are
+ now defined in `plain-functions.sh'. Instead, source one of
+ `plain-functions.sh' or `tap-functions.sh', depending on whether
+ `$use_tap' is set to "no" or "yes".
+ (exit trap): Call `late_plan_' if `$use_tap' is true. Also,
+ unset shell traces before issuing the latest commands, to avoid
+ confusing the tap driver with spurious output.
+ * tests/defs-static.in ($use_tap): New variable, by default set
+ to "yes" if the calling test script has a `.tap' suffix, and to
+ "no" otherwise. The individual scripts can override it though.
+ In code sanity-checking the environment, verify that `$use_tap'
+ is not exported.
+ * tests/self-check-env-sanitize.test: Update, and small related
+ reformatting.
+ * tests/self-check-tap.test: New very minimal self test.
+ * tests/acoutbs.test, tests/acoutbs2.test, tests/acoutnoq.test,
+ tests/acoutpt.test, tests/acoutpt2.test, tests/acoutqnl.test:
+ Removed, merged into ...
+ * tests/ac-output-old.tap: ... this new test, that uses TAP.
+ * tests/Makefile.am (TAP_LOG_DRIVER): Define to invoke our own
+ `tap-driver' script.
+ (TAP_LOG_DRIVER_FLAGS): Define to `--merge', so that the stdout
+ and stderr of the test scripts remains synced.
+ (TEST_EXTENSIONS): Define, to add the `.tap' suffix; also list
+ the `.test' suffix explicitly.
+ (EXTRA_DIST): Distribute the new files `plain-functions.sh' and
+ `tap-functions.sh'.
+ ($(TEST_LOGS)): Depends on them.
+ (AM_TESTS_ENVIRONMENT): Ensure that `use_tap' is not exported in
+ the environment of the tests.
+ (TESTS): Update.
+
+2011-08-03 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ * NEWS: Fix typo, and related reformatting.
+
+2011-08-03 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ * NEWS: add mention of new experimental TAP support
+
+2011-08-02 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: rename some test scripts
+ * tests/parallel-tests-am_tests_environment.test: Renamed ...
+ * tests/am-tests-environment.test: ... to this.
+ * tests/check-tests_environment.test: Renamed ...
+ * tests/tests-environment.test: ... to this.
+ * tests/parallel-test-driver-install.test: Renamed ...
+ * tests/parallel-tests-driver-install.test: ... to this.
+ * tests/parallel-tests-make-n.test: Renamed ...
+ * tests/parallel-tests-dry-run.test: ... to this.
+ * tests/Makefile.am (TESTS): Updated.
+
+2011-08-02 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ coverage: parallel-tests and lazy dependencies on EXTRA_PROGRAMS
+ * tests/parallel-tests-extra-programs.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+ * doc/automake.texi (Parallel Test Harness): Add a comment
+ pointing to the new test.
+
+2011-08-02 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ docs: improve, extend and fix documentation on TAP support
+ * doc/automake.texi ("Using the TAP test protocol"): Divide this
+ section into ...
+ ("Introduction to TAP", "Use TAP with the Automake test harness",
+ "Incompatibilities with other TAP parsers and drivers", "Links
+ and external resources"): ... these subsections, extend them by
+ adding more information and examples, and improve them by removing
+ incomplete and/or temporary wordings and TODO items.
+ ("Script-based Testsuites", "Parallel Test Harness"): Add a couple
+ of anchors to improve the granularity of cross-references.
+ * tests/tap-doc2.test: New test, verifying the correctness of the
+ new examples given in the manual.
+ * tests/Makefile.am (tap_other_tests): Add the new test.
+
+2011-08-01 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: separate the only failing check of an xfailing test
+ * tests/plan-bad-prog.test: Move the only failing check of this
+ test (i.e., the one about the total number of "ERROR" outcomes)
+ into ...
+ * tests/plan-bad-prog2.test: ... this new test.
+ * tests/Makefile.am (XFAIL_TESTS): Remove `plan-bad-prog.test',
+ add `plan-bad-prog2.test'.
+ (tap_other_tests): Add `plan-bad-prog2.test'.
+ (plan-bad-prog2.log): Depend on `plan-bad-prog.test'.
+
+2011-08-01 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: fix spurious errors in an xfailing test on TAP support
+ * tests/plan-bad-prog.test: Fix typo in the name of the test
+ being made unreadable. Correct the wording of the potential
+ skip message, and simplify the condition under which the test
+ is to be skipped. Escape literal dots in grep regexps.
+
+2011-08-01 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: better granularity in a couple of tests on TAP support
+ * tests/tap-summary-aux.sh: New auxiliary script, filled with code
+ moved out from ...
+ * tests/tap-summary.test: ... this test, from which the checks on
+ colored testsuite have further been moved into ...
+ * tests/tap-summary-color.test: ... this new test, which in turn
+ * tests/Makefile.am (tap_other_tests): Add `tap-summary-color.test'.
+ (EXTRA_DIST): Distribute `tap-summary-aux.sh'
+ (tap-summary.log): Depend on `tap-summary-aux.sh'.
+ (tap-summary-color.log): Likewise.
+
+2011-08-01 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: optimize tests on TAP for speed and against duplication
+ The creation and configuration of common files and data used by
+ many tests on TAP is, with this change, factored out into a new
+ dedicated auxiliary test, from which those tests will depend upon.
+ This reduces code duplication in tests and, more importantly,
+ offers a noticeable speedup in the involved tests (30-40%).
+ * tests/tap-common-setup.test: New test, setting up the common
+ files and data used by various tests on TAP support.
+ * tests/tap-setup.sh: New file, to be sourced by tests wanting to
+ bring in data generated by `tap-common-setup.test'.
+ * tests/tap-autonumber.test: Update to use the pre-computed data
+ files.
+ * tests/tap-bailout.test: Likewise.
+ * tests/tap-color.test: Likewise.
+ * tests/tap-deps.test: Likewise.
+ * tests/tap-diagnostic.test: Likewise.
+ * tests/tap-empty-diagnostic.test: Likewise.
+ * tests/tap-empty.test: Likewise.
+ * tests/tap-escape-directive.test: Likewise.
+ * tests/tap-exit.test: Likewise.
+ * tests/tap-signal.test: Likewise.
+ * tests/tap-fancy.test: Likewise.
+ * tests/tap-fancy2.test: Likewise.
+ * tests/tap-global-log.test: Likewise.
+ * tests/tap-global-result.test: Likewise.
+ * tests/tap-html.test: Likewise.
+ * tests/tap-log.test: Likewise.
+ * tests/tap-merge-stdout-stderr.test: Likewise.
+ * tests/tap-no-merge-stdout-stderr.test: Likewise.
+ * tests/tap-message-0.test: Likewise.
+ * tests/tap-no-disable-hard-error.test: Likewise.
+ * tests/tap-no-spurious-summary.test: Likewise.
+ * tests/tap-no-spurious.test: Likewise.
+ * tests/tap-not-ok-skip.test: Likewise.
+ * tests/tap-numeric-description.test: Likewise.
+ * tests/tap-out-of-order.test: Likewise.
+ * tests/tap-passthrough.test: Likewise.
+ * tests/tap-passthrough-exit.test: Likewise.
+ * tests/tap-plan.test: Likewise.
+ * tests/tap-plan-corner.test: Likewise.
+ * tests/tap-plan-corner2.test: Likewise.
+ * tests/tap-plan-errors.test: Likewise.
+ * tests/tap-realtime.test: Likewise.
+ * tests/tap-recheck-logs.test: Likewise.
+ * tests/tap-skip-whole.test: Likewise.
+ * tests/tap-todo-skip-together.test: Likewise.
+ * tests/tap-todo-skip-whitespace.test: Likewise.
+ * tests/tap-todo-skip.test: Likewise.
+ * tests/tap-unplanned.test: Likewise.
+ * tests/tap-with-and-without-number.test: Likewise.
+ * tests/tap-xfail-tests.test: Likewise.
+ * tests/tap-skip-whole-whitespace.test: Likewise, and remove
+ redundant definitions of `$sp' and `$tab' (they are already
+ defined in `tests/defs').
+ * tests/tap-whitespace-normalization.test: Likewise.
+ * tests/Makefile.am (TESTS): Update.
+ (EXTRA_DIST): Distribute `tap-setup.sh'.
+ (tap_with_common_setup_tests, tap_with_common_setup_logs)): New
+ variables, holding respectively the list of tests using the files
+ pre-computed by `tap-common-setup.test', and the list of their
+ corresponding log files.
+ (tap_other_tests): New variable, holding the list of other tests
+ on TAP support.
+ ($(tap_with_common_setup_logs)): Depend on `tap-common-setup.log'
+ and `tap-setup.sh'.
+
+2011-08-01 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ test harness: use new `.trs' files to hold test metadata
+ With this change, the test harness will keep test metadata in
+ dedicated `.trs' files, instead of having them embedded into the
+ `.log' files. This allows for easier forward-compatibility and
+ extension of test metadata, and for more flexibility in the
+ format of the `.log' files. Note that this change makes the
+ `:end-metadata:' field obsolete.
+ * doc/automake.texi (Parallel Test Harness, Log files generation
+ and test results recording): Document the new APIs and behaviour;
+ some related minor rewordings and fixlets.
+ * NEWS: Update.
+ * automake.in (handle_tests): When bringing in the content of
+ `check2.am', substitute %BASE% with the basename of the `.log'
+ file being created by a rule. Add the generated `.trs' files
+ to the list of files to be cleaned by "make mostlyclean".
+ * lib/am/check.am (am__test_driver_flags): Rename ...
+ (am__common_driver_flags): ... to this, and remove the flags
+ `--test-name' and `--log-file' from it: they are now define in
+ the proper rules in `check2.am'.
+ (am__TEST_BASES): New internal variable, holding the names of
+ the tests, with any registered extension removed.
+ (am__stealth_MAKE): New internal variable, can be used instead of
+ $(MAKE) in recipes requiring a recursive call to make, but which
+ are not intended to be executed by "make -n".
+ (.log.trs): New suffix rule, to recover from deletion of `.trs'
+ files.
+ ($(TEST_SUITE_LOG)): Almost completely rewritten to follow the
+ new API of "test logs in `.log' files, test metadata in `.trs'
+ files". It goes to some length to work correctly in face of
+ unreadable or missing `.log' and `.trs' files, and to error out
+ with proper error messages when this is not possible.
+ [%?PARALLEL_TESTS%] (check-TESTS): Also remove relevant "stale"
+ `.trs' files (in addition to `.log files) before remaking the
+ $(TEST_SUITE_LOG).
+ (recheck, recheck-html): Look for the `:recheck:' field in the
+ `.trs' files, not in the `.log' files.
+ * lib/am/check2.am (?GENERIC?%EXT%.log, ?!GENERIC?%OBJ%): Adjust
+ the call to the test driver, in particularly passing the new
+ option `--trs-file'.
+ [%am__EXEEXT%] (?GENERIC?%EXT%$(EXEEXT).log): Likewise.
+ * lib/tap-driver ($USAGE): Adjust the help screen.
+ (Getopt::Long::GetOptions): Handle the `--trs-file' option,
+ through the use of ...
+ ($trs_file): ... this new global variable.
+ (finish): Write metadata for the test run to `$trs_file' rather
+ then to `$log_file', through the use of ...
+ (write_test_results): ... this new function.
+ * lib/test-driver (print_usage): Update the help screen.
+ (Option parsing): Handle the `--trs-file' option, through the
+ use of ...
+ ($resfile): ... this new global variable.
+ (Main code): Write metadata for the test run to `$trsfile' rather
+ than to `$logfile'.
+ Minor related adjustments to comments.
+ * tests/.gitignore: Ignore `*.trs' files.
+ * tests/parallel-tests-unreadable-log.test: Moved ...
+ * tests/parallel-tests-unreadable.test: ... to this, and extended
+ to also check the semantics for unreadable `.trs' files.
+ * tests/test-driver-end-metadata.test: Deleted as obsolete.
+ * tests/test-driver-metadata-no-leading-space.test: Likewise.
+ * tests/test-driver-global-log.test: Renamed ...
+ * tests/test-metadata-global-log.test: ... to this, and modified
+ as to verify the new APIs and semantics.
+ * tests/test-driver-recheck: Renamed ...
+ * tests/test-metadata-recheck.test: ... to this, and modified
+ likewise.
+ * tests/parallel-tests-once.test: New test.
+ * tests/parallel-tests-make-n.test: Likewise.
+ * test-metadata-results.test: Likewise.
+ * test-missing.test: Likewise.
+ * test-missing2.test: Likewise.
+ * test-trs-basic.test: Likewise.
+ * test-trs-recover.test: Likewise.
+ * test-trs-recover2.test: Likewise.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-07-27 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ test harness: allow more metadata in log files
+ This change reworks and improves the parallel test harness to use
+ more specialized reStructuredText fields in the log files (instead
+ of relying on specially-placed of "magic lines" and more indirect
+ semantical formatting); the new fields are the following:
+ - ":recheck:": tell whether the associated test will have to be
+ re-run by "make recheck";
+ - ":copy-in-global-log:": tell whether the content of the log
+ file should be copied in the "global log" `test-suite.log';
+ - ":end-metadata:", which inhibits the scanning of the rest of
+ the log file (for what concerns test metadata).
+ Also, the special `:test-result:' value "END" has been removed,
+ superseded by the new `:end-metadata:' field.
+ * doc/automake.texi (Log files generation and test results
+ recording): Document the new API and semantics. Remove or fix
+ some obsolete comments.
+ * lib/am/check.am ($(TEST_SUITE_LOG), recheck, recheck-html):
+ Adjust comments and code.
+ * lib/tap-driver (finish): Adjust, with the help of ...
+ (must_recheck, copy_in_global_log): ... these new functions.
+ * lib/test-driver (Main code): Adjust, with the help of ...
+ ($recheck, $gcopy): ... these new variables.
+ * tests/trivial-test-driver: Update to obey the new APIs.
+ * tests/test-driver-recheck.test: Likewise.
+ * tests/test-driver-global-log.test: Likewise.
+ * tests/tap-passthrough.test: Relax the test, avoiding to check
+ what is written in `test-suite.log'; such check has been moved ...
+ * tests/tap-global-log.test: ... in this new test, and extended.
+ * tests/test-driver-metadata-no-leading-space.test: New test.
+ * tests/test-driver-end-test-results.test: Removed, it checked
+ the old APIs; superseded by ...
+ * tests/test-driver-end-metadata.test: ... this new test.
+ * tests/tap-log.test: Improve syncing with ...
+ * tests/test-log.test: ... this new test.
+ * tests/parallel-tests.test: Remove some duplication w.r.t. this
+ last new test. Updated heading comments.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-07-27 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: fix a spurious failure with non-bash shells
+ * tests/tap-fancy2.test: Remove an unportable use of backslashes
+ with the `echo' builtin, which was causing some shells (among them
+ bash and Debian /bin/ksh) to print a `\\' string, while other
+ shells (among them zsh, dash, and Solaris /bin/sh and /bin/ksh)
+ were unexpectedly printing a single `\' character. Since we are
+ at it, add a sanity check to ensure that this issue does not
+ resurface.
+
+2011-07-27 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: fix spurious failures with Solaris /bin/sh
+ * tests/tap-more.test: Use `echo > file', not `: > file', to
+ create empty files in the "for" loops; this is required since,
+ as documented in the autoconf manual, Solaris 10 /bin/sh
+ "optimizes" away the `:' command after the first iteration,
+ even if it is redirected.
+ * tests/test-driver-custom-multitest-recheck2.test: Likewise.
+ * tests/tap-numeric-description.test: Partial rewrite to avoid
+ using positional parameters from the 10th onward, which are
+ unportable to Solaris /bin/sh (using `${10}' causes the shell
+ to die with "bad substitution").
+
+2011-07-31 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ simple tests: support developer-defined fd redirections
+ Motivated by coreutils bug#8846, and related discussions:
+ <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=8846>
+ <https://lists.gnu.org/archive/html/bug-autoconf/2011-06/msg00002.html>
+ In those threads it has been shown how problematic it can be to do
+ portable file descriptor redirections in the testsuite when using
+ the Automake testsuite harness. This change should remedy to that
+ situation.
+ * lib/am/check2.am (?GENERIC?%EXT%$(EXEEXT).log,
+ ?GENERIC?%EXT%.log, ?!GENERIC?%OBJ%): Append redirection defined
+ in $(AM_TESTS_FD_REDIRECT) to the command-line invocations of the
+ test scripts.
+ * lib/am/check.am [!%?PARALLEL_TESTS%] $(check-TESTS): Likewise.
+ * NEWS: Update.
+ * doc/automake.texi (Script-based Testsuites): Document the new
+ feature.
+ * tests/check-fd-redirect.test: New test.
+ * tests/parallel-tests-fd-redirect.test: Likewise.
+ * tests/parallel-tests-am_tests_environment.test: Remove checks
+ about the use of redirections in AM_TESTS_ENVIRONMENT: they would
+ check deprecated (if not undefined) behaviour now. Strengthen a
+ couple of still valid checks, to keep the test more in sync with
+ the documentation. Improve debugging information.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-07-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ docs: rework and extend documentation on testsuites support
+ * doc/automake.texi (Generalities about Testing): New section.
+ (Simple Tests using parallel-tests): Section removed, merged
+ into ...
+ (Simple Tests): ... this one, which on the other hand has been
+ subdivided into ...
+ (Script-based Testsuites, Serial Test Harness, Parallel Test
+ Harness): ... these new subsection.
+ (DejaGnu Tests): Minor adjustments.
+ Other related typofixes and rewordings throughout the manual;
+ in particular, avoid to use the term "test driver" for three
+ different concepts (and use instead "test harness" and "test
+ runner" where appropriate).
+ * tests/tap-doc.test: New test.
+ * tests/tap-no-disable-hard-error.test: Likewise.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-07-18 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap: support colorization of testsuite progress output
+ * lib/tap-driver (%COLORS): New variable (definition extracted
+ from `lib/am/check.am:$(am__tty_colors)', with some obvious
+ adjustments.
+ (report): Adjust to colorize console output when required,
+ using ...
+ (decorate_result): ... this new function.
+ (colored): New function, used by the one above.
+ * tests/tap-summary.test: Also run the checks when `color-tests'
+ is in use.
+ * tests/Makefile.am (XFAIL_TESTS): Remove `tap-color.test'.
+
+2011-07-18 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap: some preparatory refactoring (2)
+ This is a follow-up simplification.
+ * lib/tap-driver (console_output): Renamed ...
+ (report): ... to this, and extended to appropriately register
+ the test results when needed.
+ (testsuite_error, handle_tap_comment, handle_tap_test,
+ handle_tap_plan): Adjusted accordingly.
+
+2011-07-18 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap: some preparatory refactoring (1)
+ This refactoring is aimed at simplifying the introduction of
+ colored console output for the TAP driver.
+ * lib/tap-driver (console_output): Now accept two arguments, the
+ first one indicating which kind of thing is to be displayed (for
+ now only a test result or a diagnostic comment), and the second
+ one (if present) the message associated to it.
+ (handle_tap_test, handle_tap_comment, handle_tap_plan,
+ testsuite_error): Adapt to the new `console_output' interface.
+
+2011-07-18 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tap: add experimental TAP-aware driver
+ * doc/automake.texi (Using the TAP test protocol): New section.
+ (Overview of Custom Test Drivers Support): Minor updates.
+ * lib/tap-driver: New script, TAP-aware test driver for Automake;
+ implemented in perl and based on TAP::Parser.
+ * lib/Makefile.am (dist_script_DATA): Add it.
+ * tests/tap-autonumber.test: New test.
+ * tests/tap-bailout.test: Likewise.
+ * tests/tap-basic.test: Likewise.
+ * tests/tap-deps.test: Likewise.
+ * tests/tap-diagnostic.test: Likewise.
+ * tests/tap-empty.test: Likewise.
+ * tests/tap-empty-diagnostic.test: Likewise.
+ * tests/tap-escape-directive.test: Likewise.
+ * tests/tap-exit.test: Likewise.
+ * tests/tap-fancy.test: Likewise.
+ * tests/tap-fancy2.test: Likewise.
+ * tests/tap-global-result.test: Likewise.
+ * tests/tap-html.test: Likewise.
+ * tests/tap-log.test: Likewise.
+ * tests/tap-merge-stdout-stderr.test: Likewise.
+ * tests/tap-more.test: Likewise.
+ * tests/tap-more2.test: Likewise.
+ * tests/tap-no-merge-stdout-stderr.test: Likewise.
+ * tests/tap-no-spurious-summary.test: Likewise.
+ * tests/tap-no-spurious.test: Likewise.
+ * tests/tap-not-ok-skip.test: Likewise.
+ * tests/tap-numeric-description.test: Likewise.
+ * tests/tap-out-of-order.test: Likewise.
+ * tests/tap-passthrough.test: Likewise.
+ * tests/tap-plan.test: Likewise.
+ * tests/tap-plan-errors.test: Likewise.
+ * tests/tap-plan-corner.test: Likewise.
+ * tests/tap-realtime.test: Likewise.
+ * tests/tap-recheck-logs.test: Likewise.
+ * tests/tap-recheck.test: Likewise.
+ * tests/tap-skip-whole.test: Likewise.
+ * tests/tap-summary.test: Likewise.
+ * tests/tap-todo-skip.test: Likewise.
+ * tests/tap-todo-skip-together.test: Likewise.
+ * tests/tap-todo-skip-whitespace.test: Likewise.
+ * tests/tap-skipall-whitespace.test: Likewise.
+ * tests/tap-unplanned.test: Likewise.
+ * tests/tap-whitespace-normalization.test: Likewise.
+ * tests/tap-with-and-without-number.test: Likewise.
+ * tests/tap-xfail-tests.test: Likewise.
+ * tests/tap-bad-prog.test: New xfailing test.
+ * tests/tap-color.test: Likewise.
+ * tests/tap-plan-corner2.test: Likewise.
+ * tests/tap-message-0.test: Likewise.
+ * tests/tap-signal.test: Likewise.
+ * tests/Makefile.am (TESTS, XFAIL_TESTS): Update.
+
+2011-07-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ test defs: new auxiliary function 'count_test_results'
+ * tests/defs (count_test_results): New function.
+ * tests/check11.test: Use it.
+ * tests/test-driver-custom-multitest.test: Likewise.
+ * tests/test-driver-custom-multitest-recheck.test: Likewise.
+ * tests/test-driver-custom-multitest-recheck2.test: Likewise.
+ * tests/parallel-tests-log-override-recheck.test: Likewise.
+ * tests/parallel-tests-log-override-recheck.test: Likewise.
+ * tests/parallel-tests-no-spurious-summary.test: Likewise, and
+ slightly improve debugging output.
+ * tests/parallel-tests.test: Make use of `count_test_results'.
+ Also, make grepping of "make check" output slightly stricter
+ * tests/parallel-tests9.test: Likewise.
+ * tests/parallel-tests-log-override-2.test: Likewise, and throw
+ in a small optimization.
+
+2011-07-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ parallel-tests: simplify testsuite summary
+ Prefer a more deterministic, "tabular" format for the testsuite
+ summary, always listing the numbers of passed, failed, xfailed,
+ xpassed, skipped and errored tests, even when these numbers are
+ zero. This simplify the logic of testsuite summary creation,
+ makes it more easily machine-parseable, and will probably allow
+ for easier addition of new kinds of test results in the future.
+ * lib/am/check.am (am__tty_colors_dummy): New make variable, to
+ reduce code duplication. Extracted from previous versions of
+ $(am__tty_colors), and extended by defining two new variables
+ `$mgn' and `$brg'.
+ [%?COLOR%, %!?COLOR%] (am__tty_colors): Use that new variable.
+ (am__text_box): Delete, is not needed anymore.
+ ($(TEST_SUITE_LOG)): Rewrite associated rules to implement the
+ new testsuite summary format.
+ * NEWS: Update.
+ * tests/check10.test: Don't run with the parallel-tests harness
+ too, that makes no sense anymore.
+ * tests/color.test: Update and adjust.
+ * tests/color2.test: Likewise.
+ * tests/parallel-tests.test: Likewise.
+ * tests/parallel-tests3.test: Likewise.
+ * tests/parallel-tests6.test: Likewise.
+ * tests/parallel-tests9.test: Likewise.
+ * tests/parallel-tests-unreadable-log.test: Likewise.
+ * tests/parallel-tests-empty-testlogs.test: Likewise.
+ * tests/parallel-tests-log-override-recheck.test: Likewise.
+ * tests/parallel-tests-no-spurious-summary.test: Likewise.
+ * tests/test-driver-custom-multitest.test: Likewise.
+ * tests/test-driver-end-test-results.test: Likewise.
+ * tests/parallel-tests-no-color-in-log.test: New test.
+ * tests/testsuite-summary-color.test: Likewise.
+ * tests/testsuite-summary-count.test: Likewise.
+ * tests/testsuite-summary-count-many.test: Likewise.
+ * tests/testsuite-summary-reference-log.test: Likewise.
+ * tests/testsuite-summary-checks.sh: New auxiliary script, used
+ by the new tests above.
+ * tests/extract-testsuite-summary: Likewise.
+ * tests/trivial-test-driver: Optimize for speed when there are
+ lots of of tests.
+ * tests/Makefile.am (EXTRA_DIST): Distribute them.
+ (testsuite-summary-color.log, testsuite-summary-count.log): Depend
+ on them.
+ (testsuite-summary-count-many.log): Depend on the auxiliary scripts
+ 'trivial-test-driver' and 'extract-testsuite-summary'.
+ (TESTS): Update.
+
+2011-07-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ parallel-tests: new recognized test result 'ERROR'
+ * lib/am/check.am ($(TEST_SUITE_LOG)): Recognize a new test result
+ `ERROR'. Use it when encountering unreadable test logs (previously
+ a simple `FAIL' was used in this situations).
+ * lib/test-driver: Set the global test result to `ERROR' when the
+ test exit status is 99. When doing colorized output, color `ERROR'
+ results in magenta.
+ * doc/automake.texi (Log files generation and test results
+ recording): Update by listing `ERROR' too among the list of valid
+ `:test-results:' arguments.
+ * NEWS: Update.
+ * tests/trivial-test-driver: Update.
+ * tests/parallel-tests.test: Likewise.
+ * tests/parallel-tests-harderror.test: Likewise.
+ * tests/parallel-tests-no-spurious-summary.test: Likewise.
+ * tests/test-driver-global-log.test: Likewise.
+ * tests/test-driver-recheck.test: Likewise.
+ * tests/test-driver-custom-multitest-recheck.test: Likewise.
+ * tests/test-driver-custom-multitest-recheck2.test: Likewise.
+ * tests/test-driver-custom-multitest.test: Likewise.
+ * tests/test-driver-custom-no-html.test: Likewise.
+ * tests/test-driver-end-test-results.test: Likewise.
+ * tests/color.test: Likewise. Also, make stricter, and also test
+ from VPATH.
+ * tests/color2.test: Likewise, and improve syncing with color.test.
+ * tests/parallel-tests-exit-statuses.test: New test.
+ * tests/parallel-tests-console-output.test: Likewise.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-07-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ parallel-tests: make parsing of test results safer
+ The new code for parsing the testsuite-generated `.log' files,
+ as introduced in commit `v1.11-872-gc96b881', considers each
+ `:test-result:' field anywhere in a `.log' file as a declaration
+ of a test result, and accounts for it as such in the testsuite
+ summary. Unfortunately this could easily cause spurious test
+ failures being reported in the testsuite summary. This happened
+ in practice with the Automake's own testsuite; for example:
+ $ make check TESTS='check12-p.test'; echo exit: $?
+ ...
+ PASS: check12-p.test
+ =====================================
+ 4 of 5 tests failed
+ See tests/test-suite.log
+ Please report to bug-automake@gnu.org
+ =====================================
+ make[2]: *** [test-suite.log] Error 1
+ make: *** [check-am] Error 2
+ exit: 2
+ This change introduces a new special `:test-result:' "END", that,
+ when seen, prevents the rest of the log file from being parsed.
+ For more information, refer to the thread:
+ <https://lists.gnu.org/archive/html/automake-patches/2011-06/msg00199.html>
+ * lib/am/check.am ($(TEST_SUITE_LOG)): Stop the parsing of a log
+ file as soon as the special ":test-result:END" directive is seen.
+ Related changes and enhancements.
+ * lib/test-driver: Protect the rest of the log after the result
+ lined with a ":test-result:END" directive.
+ * doc/automake.texi (Log files generation and test results
+ recording): Update, and related improvements.
+ * tests/parallel-tests-no-spurious-summary.test: New test.
+ * tests/test-driver-end-test-results.test: Likewise.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-06-29 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ docs: document custom test drivers and protocols
+ * doc/automake.texi (Simple Tests): Note that the TESTS_ENVIRONMENT
+ use suggested here is not portable to 'parallel-tests'.
+ (Simple Tests using parallel-tests): Document new restrictions on
+ the uses of TESTS_ENVIRONMENT and AM_TESTS_ENVIRONMENT.
+ (Custom Test Drivers): New section and node.
+ (Overview of Custom Test Drivers Support): New subsection.
+ (Declaring Custom Test Drivers in @file{Makefile.am}): Likewise.
+ (APIs for Custom Test Drivers): Likewise.
+ (Options): Update description of color-tests.
+ * lib/am/check ($(TEST_SUITE_LOG)): Remove comments that have been
+ moved into the manual.
+ (recheck, recheck-html): Minor adjustments to better conform to the
+ documentation (this should cause no semantic changes w.r.t. the
+ former behaviour); minor improvements and extensions to existing
+ comments.
+ * tests/test-driver-create-log-dir.test: New test.
+ * tests/test-driver-strip-vpath.test: Likewise.
+ * tests/test-driver-global-log.test: Likewise.
+ * tests/test-driver-recheck.test: Likewise.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-07-24 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: small enhancement to 'primary3.test'
+ * tests/primary3.test: Also test that the program named `foo.la'
+ has been effectively created.
+
+2011-07-24 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: a small simplification in 'pr8365-remake-timing.test'
+ * tests/pr8365-remake-timing.test: Avoid redundant definition
+ and use of `$save_AUTOCONF' variable.
+
+2011-07-24 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: remove an extra leading blank line
+ * tests/override-conditional-1.test: Remove extra blank line
+ placed before the shebang line.
+
+2011-07-18 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix typos, grammaros and other blunders in comments
+ All affected files changed.
+
+2011-07-16 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ test defs: new subroutine 'seq_', simulating GNU seq(1)
+ * tests/defs (seq_): New subroutine.
+ * tests/instmany.test: Use it.
+ * tests/instmany-mans.test: Likewise.
+ * tests/instmany-python.test: Likewise.
+ * tests/self-check-seq.test: New self test.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-07-16 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: remove duplication about testing of config.* aux files
+ * tests/add-missing.test: Also check that the `AC_CANONICAL_SYSTEM'
+ autoconf macro causes the `config.sub' and `config.guess' scripts
+ to be installed by `automake --add-missing'. Since we are at it,
+ fix minor buglets and cosmetic issues in the `check_' function.
+ * tests/hosts.test: Removed, completely subsumed by the previous
+ test now.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-07-16 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: more uses of the 'unindent' subroutine
+ * tests/backcompat.test: Prefer `unindent' over plain `cat' for
+ here documents created from within a loop of if/else body.
+ * tests/backcompat2.test: Likewise.
+ * tests/backcompat4.test: Likewise.
+ * tests/init.test: Likewise.
+ * tests/instmany.test: Likewise.
+ * tests/instmany-mans.test: Likewise.
+ * tests/instmany-python.test: Likewise.
+ * tests/missing5.test: Likewise.
+ * tests/parallel-am2.test : Likewise.
+ * tests/parallel-am3.test : Likewise.
+ * tests/pr307.test: Likewise.
+ * tests/depend4.test: Likewise. Since we are at it, normalize
+ other code formatting.
+ * tests/instfail-java.test: Prefer `echo' over `cat' + here-doc
+ inside a for loop.
+
+2011-07-16 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: avoid '##'-style comments inside recipe commands
+ * tests/autodist.test: Do not whitespace-indent `##' comments when
+ they are embedded in a makefile rule: having them indented is not
+ part of the Automake API, and might cause failures with e.g., Tru64
+ make.
+ * tests/autodist-subdir.test: Likewise.
+ * tests/backcompat.test: Likewise.
+ * tests/backcompat6.test: Likewise.
+ * tests/colon7.test: Likewise.
+ * tests/posixsubst-scripts.test: Likewise.
+ * tests/posixsubst-sources.test: Likewise.
+
+2011-07-16 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: tweak, improve and extend tests on lisp support
+ * tests/lisp2.test: Prettify, and improve debugging output. Make
+ grepping of automake stderr stricter.
+ * tests/lisp7.test: Ensure verbose printing of captured make
+ output. Add trailing `:' command.
+ * tests/lisp8.test: Likewise.
+ * tests/lisp3.test: Likewise. Also, check that `.el' files and
+ compiled `.elc' files get installed by "make install", and
+ uninstalled by "make uninstall".
+ * tests/lisp4.test: Ensure installed `.el' files gets removed by
+ "make uninstall". Related changes. Add trailing `:' command.
+ * tests/lisp5.test: Likewise.
+ * tests/lisp6.test: Use proper m4 quoting in configure.in. Fix
+ use of blank lines, to improve clarity and symmetry. Fix typo in
+ comment. Add trailing `:' command.
+
+2011-07-16 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: drop useless requirement in 'license.test'
+ * tests/license.test: Drop useless requirement "makeinfo". Add
+ an extra blank line, for clarity.
+
+2011-07-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests defs: more uses of $top_testsrcdir
+ * tests/autodist-stamp-vti.test: Use `$top_testsrcdir' instead
+ of `$testsrcdir/..'.
+ * tests/repeated-options.test: Likewise.
+ * tests/suffix5.test: Likewise.
+ * tests/vtexi3.test: Likewise.
+
+2011-07-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ self tests: fix typo in comment
+ * tests/self-check-exit.test: Fix typo in heading comments.
+
+2011-07-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: remove redundant settings of `errexit' shell flag
+ * tests/amhello-binpkg.test: Do not set the `errexit' shell
+ flag, as it is already set by `tests/defs'.
+ * tests/amhello-cflags.test: Likewise.
+ * tests/amhello-cross-compile.test: Likewise.
+ * tests/ansi2knr-deprecation.test: Likewise.
+ * tests/autodist-no-duplicate.test: Likewise.
+ * tests/distcheck-configure-flags-am.test: Likewise.
+ * tests/distcheck-configure-flags-subpkg.test: Likewise.
+ * tests/distcheck-configure-flags.test: Likewise.
+ * tests/distcheck-hook.test: Likewise.
+ * tests/distcheck-hook2.test: Likewise.
+ * tests/parallel-tests-am_tests_environment.test: Likewise.
+ * tests/parallel-tests-harderror.test: Likewise.
+ * tests/parallel-tests-log-compiler-example.test: Likewise.
+ * tests/parallel-tests-log-override-1.test: Likewise.
+ * tests/parallel-tests-log-override-2.test: Likewise.
+ * tests/parallel-tests-log-override-recheck.test: Likewise.
+ * tests/primary-prefix-couples-documented-valid.test: Likewise.
+ * tests/primary-prefix-couples-force-valid.test: Likewise.
+ * tests/primary-prefix-invalid-couples.test: Likewise.
+ * tests/primary-prefix-valid-couples.test: Likewise.
+ * tests/remake-subdir-from-subdir.test: Likewise.
+ * tests/remake-subdir-gnu.test: Likewise.
+ * tests/remake-subdir-long-time.test: Likewise.
+ * tests/remake-subdir.test: Likewise.
+ * tests/remake-subdir2.test: Likewise.
+ * tests/silent-configsite.test: Likewise.
+ * tests/tests-environment-backcompat.test: Likewise.
+
+2011-06-29 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ docs: explain why AM_TESTS_ENVIRONMENT must be semicolon-terminated
+ * doc/automake.texi (Simple Tests using parallel-tests): Ditto, and
+ related adjustments.
+ Suggestion by Ralf Wildenhues.
+
+2011-06-29 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ docs: fix unportable example of AM_TESTS_ENVIRONMENT usage
+ * doc/automake.texi (Simple Tests using parallel-tests): The
+ old example on AM_TESTS_ENVIRONMENT relied on unportable shell
+ features, and in particular didn't work with various Korn
+ Shells (see also commit `v1.11-925-g29ca903'). Give another
+ example, simpler this time, but still inspired to real-world
+ usage (the GNU coreutils testsuite).
+
+2011-06-28 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ yacc tests: fix bug in 'yacc-cxx.test'
+ * tests/yacc-cxx.test: Enable `errexit' shell flag (the lack of
+ which was masking the bug).
+ (bar.cxx): Rename to ...
+ (bar2.cxx): ... this, otherwise automake will (correctly) complain
+ that object `bar.o' is created by both `bar.cxx' and `bar.c++'.
+ (Makefile.am): Adjust.
+
+2011-06-28 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ lex tests: fix spurious link errors on Solaris
+ On Solaris 10, linking of lex-generated programs was failing in a
+ couple of lex tests with errors like this:
+ g++ -g -O2 -o joe joe.o -ll
+ Undefined symbol first referenced in file
+ yywrap() joe.o
+ ld: fatal: Symbol referencing errors. No output written to joe
+ collect2: ld returned 1 exit status
+ This change fixes it, also fixing at once potential problems for
+ systems that don't have a "lex library" (this happens for example
+ when cross-compiling from GNU/Linux to MinGW).
+ * tests/lex-depend-cxx.test (joe.ll, moe.l++): Define a dummy
+ `yywrap()' function.
+ * tests/lex-clean-cxx.test (mainfoo.cc, mainbar.cpp, mainbaz.c++,
+ mainqux.cxx): Likewise.
+
+2011-06-23 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ docs: avoid a footnote, some related rewordings and improvements
+ * doc/automake.texi (Dist): Reword the part about automatically
+ distributed files to avoid a footnote. Since we are at it, extend
+ a bit, and add an example and a reference to a relevant test case.
+
+2011-06-23 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ docs: minor cosmetic fixes
+ * doc/automake.texi: Break few overly long lines, throughout the
+ file.
+ ("Simple Tests"): Move @vindex for XFAIL_TESTS to the correct
+ position, i.e., before and not after the paragraph where it is
+ introduced.
+ ("Options" @item ansi2knr): Use @pxref instead of @xref. This
+ fixes a texinfo warning.
+ ("Other things Automake recognizes" @item AM_C_PROTOTYPES): Use
+ @pxref instead of @ref.
+
+2011-06-23 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ help: improve text about automatically-distributed files
+ This change fixes automake bug#7819.
+ * automake.in (usage): Distinguish between files that are always
+ automatically distributed when found, and those which are only
+ "under certain conditions".
+ * doc/automake.texi (Basics of Distribution): Update accordingly.
+ * tests/autodist-subdir.test: Update.
+ * tests/autodist-no-duplicate.test: Likewise.
+ * tests/autodist.test: Likewise.
+ (configure.in): Remove useless call to AM_MAINTAINER_MODE.
+
+2011-06-23 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ refactor: split 'usage' subroutine in automake
+ This change is related to automake bug#7819.
+ * automake.in (print_autodist_files): New subroutine,
+ extracted from ...
+ (usage): ... this, which now uses it.
+ * tests/autodist-no-duplicate.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-06-23 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix bug in 'autodist.test'
+ * tests/autodist.test: Avoid spurious failure due to no
+ `defs-static' file being found in the parent directory.
+
+2011-06-21 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ parallel-tests: allow each test to have multiple results
+ With this change, we improve the code creating the `test-suite.log'
+ global log and the console testsuite summary to make it able to
+ grasp multiple results per test script. This is required in order
+ to introduce the planned support for test protocols, like TAP and
+ SubUnit, which can indeed run multiple tests per test script, each
+ with its individual result.
+ The implementation makes use of a custom reStructuredText field
+ `:test-result:'.
+ Note that no new documentation is added by this change; that is
+ be left for follow-up changes.
+ * lib/check.am ($(TEST_SUITE_LOG)): When processing .log files,
+ recognize a report of a test's result only if it is declared with
+ the custom `:test-result:' reStructuredText field placed at the
+ beginning of a line. Extend and add explanatory comments.
+ (recheck, recheck-html): Add explanatory comments.
+ * lib/test-driver: Write an appropriate reStructuredText field
+ `:test-result:' in the generated log file. Use a reStructuredText
+ transition to better separate the test outcome report from the
+ test script's registered output. Improve comments.
+ * tests/test-driver-custom-xfail-tests.test: Adjust.
+ * tests/parallel-tests7.test: Adjust.
+ * tests/parallel-tests-empty-testlogs.test: New test.
+ * tests/parallel-tests-recheck-override.test: Likewise.
+ * tests/parallel-tests2.test: Extend and keep more in-sync with ...
+ * tests/test-driver-custom-html.test: ... this new related test.
+ * tests/test-driver-custom-no-html.test: New test.
+ * tests/test-driver-custom-multitest.test: Likewise.
+ * tests/test-driver-custom-multitest-recheck.test: Likewise.
+ * tests/test-driver-custom-multitest-recheck2.test: Likewise.
+ * tests/trivial-test-driver: New file, used by the last four tests
+ above.
+ * tests/Makefile.am (TESTS): Update.
+ (EXTRA_DIST): Distribute `trivial-test-driver'.
+ (test-driver-custom-multitest.log): Depend on `trivial-test-driver'.
+ (test-driver-custom-multitest-recheck.log): Likewise.
+ (test-driver-custom-multitest-recheck2.log): Likewise.
+ (test-driver-custom-html.log): Likewise.
+
+2011-06-21 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ parallel-tests: allow custom driver scripts
+ Allow suffix-based definition of custom "driver script" for the
+ test scripts. These driver scripts will be responsible of
+ launching the tests (or their corresponding $(LOG_COMPILER), if
+ they have an associated one), interpreting and displaying the
+ test results, and writing the `.log' files.
+ This new API should allow easy and flexible use of different
+ test protocols in the future; in particular, we plan to use it
+ to implement TAP and SubUnit harnesses.
+ Note that no new documentation is added by this change; that is
+ be left for follow-up changes.
+ * automake.in (handle_tests): Define default for $(LOG_DRIVER),
+ and, for any registered test extension `<ext>', define defaults
+ for $(<ext>_LOG_DRIVER). Substitute %DRIVER% using these new
+ variables, instead of the old internal $(am__test_driver). When
+ processing check2.am, also substitute %DRIVER_FLAGS%.
+ Require auxiliary script `test-driver' only if no driver has been
+ explicitly defined for the test script kinds.
+ * am/check2.am (?GENERIC?%EXT%$(EXEEXT).log, ?GENERIC?%EXT%.log,
+ ?!GENERIC?%OBJ%): Pass the %DRIVER_FLAGS% to the %DRIVER% call.
+ * tests/parallel-tests-no-extra-driver.test: New test.
+ * tests/test-driver-custom.test: Likewise.
+ * tests/test-driver-custom-xfail-tests.test: Likewise.
+ * tests/test-driver-fail.test: Likewise.
+ * tests/Makefile.am: Update.
+ * NEWS: Update.
+
+2011-06-21 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ parallel-tests: add auxiliary script 'test-driver', refactor
+ This refactoring should cause no API of functionality change,
+ and is meant only to simplify the future implementation of TAP
+ and SubUnit testsuite drivers. More precisely, our roadmap is
+ to move most of the "testsuite driving" features out of the
+ Automake-generated Makefiles, and into external scripts with
+ well-defined interfaces. This will allow the user to define
+ its own personalized testsuite drivers, and will also offer us
+ a framework upon which to implement our new TAP and SubUnit
+ drivers, all in a very unobtrusive way and retaining an high
+ degree of code reuse and backward-compatibility.
+ * lib/test-driver: New auxiliary script.
+ * lib/Makefile.am (dist_SCRIPT_DATA): Add it.
+ * automake.in (handle_tests): Require the new auxiliary script
+ `test-driver', and define a new internal makefile variable
+ `$(am__test_driver)', used to call it. Perform new substitution
+ on `DRIVER' when processing the `check2.am' file.
+ * lib/check.am (am__tty_colors): Define new shell variable
+ `$am__color_tests'.
+ (am__rst_section): Removed, its role taken over by the new
+ `test-driver' script.
+ (am__test_driver_flags): New variable, contains the command
+ line options passed to `test-driver'.
+ (am__check_pre): Do not deal with temporary files and exit
+ traps anymore, as the `test-driver' script takes care of that
+ now. Define shell variable `$am__enable_hard_errors', used by
+ `$(am__test_driver_flags)'. Reorder so that we don't need to
+ save and restore the value of the `TERM' environment variable
+ anymore.
+ Other related adjustments.
+ (am__check_post): Remove, as its role has been completely taken
+ over by the `test-driver' script.
+ * am/check2.am (?GENERIC?%EXT%$(EXEEXT).log, ?GENERIC?%EXT%.log,
+ ?!GENERIC?%OBJ%): Call the test script through the Automake
+ substituted `%DRIVER%', and honor the command-line options
+ in `$(am__test_driver_flags)'. Do not call the obsoleted
+ `$(am__check_post)' anymore.
+ * doc/automake.texi (Auxiliary Programs): Mention the new
+ `test-driver' script.
+ (Optional): Mention `test-driver' in AC_CONFIG_AUX_DIR.
+ Since we are at it, break the list of auxiliary scripts by
+ placing one per line, to simplify potential future additions
+ of new scripts.
+ * tests/check.test: Adjust.
+ * tests/check2.test : Likewise.
+ * tests/check3.test : Likewise.
+ * tests/check4.test : Likewise.
+ * tests/check10.test: Likewise.
+ * tests/color.test: Likewise.
+ * tests/color2.test: Likewise.
+ * tests/comment9.test: Likewise.
+ * tests/dejagnu.test: Likewise.
+ * tests/exeext4.test: Likewise.
+ * tests/maken3.test: Likewise.
+ * tests/maken4.test: Likewise.
+ * tests/parallel-tests-interrupt.test: Likewise.
+ * tests/posixsubst-tests.test: Likewise.
+ * tests/repeated-options.test: Likewise.
+ * tests/check-no-test-driver.test: New test.
+ * tests/parallel-test-driver-install.test: Likewise.
+ * tests/Makefile.am (TESTS): Update.
+ * NEWS: Update.
+
+2011-06-21 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ maintcheck: extend 'sc_tests_plain_*' checks
+ * Makefile.am (sc_tests_plain_autom4te): New check.
+ (sc_tests_plain_autoreconf): Likewise.
+ (sc_tests_plain_autoheader): Likewise.
+ (syntax_check_rules): Update.
+
+2011-06-21 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: interactions between TESTS_ENVIRONMENT and LOG_COMPILER
+ * tests/tests-environment-and-log-compiler.test: New test,
+ checking that we can use variables and functions set by
+ TESTS_ENVIRONMENT and AM_TESTS_ENVIRONMENT in LOG_COMPILER
+ and LOG_FLAGS (for tests both with and without registered
+ extensions).
+ * tests/Makefile.am (TESTS): Update.
+
+2011-06-24 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: make 'subst-no-trailing-empty-line.test' more robust
+ * tests/subst-no-trailing-empty-line.test: Strengthen existing
+ checks, to try more scenarios and be slightly stricter in some
+ grepping checks.
+
+2011-06-24 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix an incomplete comment
+ * tests/subst-no-trailing-empty-line.test: Fix an incomplete
+ comment, and move it to a more proper place. Minor cosmetic
+ fixes to other comments.
+
+2011-06-20 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ maintcheck: avoid few more spurious failures
+ * tests/depmod-data.test: Use creative quoting to avoid
+ spuriously triggering the `sc_tests_Exit_not_exit' maintainer
+ check. Commit `v1.11-900-g3453b8e' attempted to fix it, but
+ succeeded only partially.
+ * tests/cond33.test: Fix header comments, not to reference
+ obsolescent make variable `$(mkdir_p)'.
+ * tests/cond4.test: Rewrite "$MAKE exp=..." as "exp=.. $MAKE -e",
+ to please `sc_tests_overriding_macros_on_cmdline'
+ * tests/cond19.test: Likewise.
+ * tests/cond32.test: Likewise.
+ * tests/add-missing.test: Use "AUTOMAKE_fails" instead of
+ "$AUTOMAKE ... && Exit 1", to please `sc_tests_automake_fails'.
+
+2011-06-20 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ maintcheck: avoid few spurious failures
+ * Makefile.am (sc_tests_plain_aclocal, sc_tests_plain_perl,
+ sc_tests_plain_autoconf, sc_tests_plain_automake,
+ sc_tests_plain_autoupate): Be stricter in matching an erroneous
+ literal command, i.e., `aclocal', `automake', `perl', etc.
+
+2011-06-20 Bert Wesarg <bert.wesarg@googlemail.com> (tiny change)
+
+ check: don't use multi-line coloring for the report
+ "less -R" can't handle multi-line coloring as it is done for the
+ check reports of the serial and parallel testsuite, because of
+ performance reasons. Thus, color each line of the check report
+ by its own.
+ * lib/am/check.am (am__text_box): Accept colors for lines, and
+ color each line by its own.
+ [%?PARALLEL_TESTS%] $(TEST_SUITE_LOG): Let am__text_box handle
+ the line coloring.
+ [!%?PARALLEL_TESTS%] $(check-TESTS): Color each report line by
+ its own.
+ * THANKS: Update.
+
+2011-06-18 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ docs: AM_DISTCHECK_CONFIGURE_FLAGS is for corner cases
+ * doc/automake.texi (Checking the Distribution): Explain that the
+ developers should take care of making their code buildable without
+ requiring any special configure options, so that in general
+ AM_DISTCHECK_CONFIGURE_FLAGS shouldn't be used. Give an example
+ of where its use is legitimate.
+ Suggestions from Ralf Wildenhues and Eric Blake.
+
+2011-06-14 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ ansi2knr: deprecate, it will go away in the next major release
+ * doc/automake.texi: Loudly and repeatedly state that the old
+ de-ANSI-fication features are now deprecated and will be removed
+ in the next major Automake release. Other related adjustments.
+ * lib/Automake/Options.pm (_process_option_list ): Give a warning
+ in the `obsolete' category when the `ansi2knr' option is used.
+ * m4/protos.m4 (AM_C_PROTOTYPES): Deprecate this macro: a warning
+ in the `obsolete' category will be emitted it if is used.
+ * tests/ansi2knr-deprecation.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+ * tests/ansi.test: Adjust, by calling autoconf and/or automake
+ with the `-Wno-obsolete' flag.
+ * tests/ansi10.test: Likewise.
+ * tests/ansi2.test: Likewise.
+ * tests/ansi3.test: Likewise.
+ * tests/ansi3b.test: Likewise.
+ * tests/ansi4.test: Likewise.
+ * tests/ansi5.test: Likewise.
+ * tests/ansi6.test: Likewise.
+ * tests/ansi7.test: Likewise.
+ * tests/ansi8.test: Likewise.
+ * tests/ansi9.test: Likewise.
+ * tests/cxxansi.test: Likewise.
+ * tests/libobj8.test: Likewise.
+ * NEWS: Update about the future planned backward-incompatibility
+ due to the removal of de-ANSI-fication feature.
+
+2011-06-19 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ docs: primary/prefix combination "pkglib_PROGRAMS" is now invalid
+ * doc/automake.texi (Program Sources): pkglib_PROGRAMS is not a
+ valid combination anymore, so don't document it. Inconsistency
+ introduced in commit `v1.11-373-g9ca6326'.
+
+2011-06-19 Jim Meyering <meyering@redhat.com>
+
+ docs: replace obsolete @vindex entry with a useful one
+ * doc/automake.texi (Program Sources): Do not index obsolete
+ pkglib_PROGRAMS here. Do index pkglibexec_PROGRAMS.
+
+2011-06-18 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: more checks on portable fd redirection in TESTS_ENVIRONMENT
+ * tests/tests-environment-fd-redirect.test: Extend by also using
+ a perl script among the tests. Run the test shell script with
+ the `errexit' flag active. Export `VERBOSE' to yes when running
+ "make check", to give more debugging information in case of
+ failures. Look for a Korn Shell also in `/usr/bin', not on only
+ in `/bin'.
+
+2011-06-13 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: optimize tests on primary/prefix mismatch for speed
+ * tests/primary-prefix-invalid-couples.test: Partial rewrite, in
+ order to use just a single automake invocation rather than one
+ invocation for each invalid primary/prefix couple. This improves
+ the test script execution time by an order of magnitude.
+ Since we are at it, throw in some other improvements to avoid
+ unrelated automake warnings and failures that could potentially
+ cause false positives w.r.t. the automake exit status.
+
+2011-06-13 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ news: update w.r.t. introduction of AM_DISTCHECK_CONFIGURE_FLAGS
+ * NEWS (Miscellaneous changes): Update.
+
+2011-06-10 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ maintcheck: DISTCHECK_CONFIGURE_FLAGS can be defined on make cmdline
+ * Makefile.am (sc_tests_overriding_macros_on_cmdline): It's now
+ acceptable that the test scripts override DISTCHECK_CONFIGURE_FLAGS
+ on the make command line. Update comments accordingly. Since we
+ are at it, make the relevant grepping rules slightly tighter.
+
+2011-06-10 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ distcheck: add support for AM_DISTCHECK_CONFIGURE_FLAGS
+ * doc/automake.texi (Checking the Distribution): Suggest to use
+ AM_DISTCHECK_CONFIGURE_FLAGS, not DISTCHECK_CONFIGURE_FLAGS, to
+ define (in the top-level Makefile.am) extra flags to be passed
+ to configure at "make distcheck" time; DISTCHECK_CONFIGURE_FLAGS
+ should be reserved for the user. Add proper `@vindex' directive.
+ Document that AM_DISTCHECK_CONFIGURE_FLAGS is not honoured in a
+ subpackage Makefile.am, but the flags in it are passed down to
+ the configure script of the subpackage.
+ * lib/am/distdir.am (distcheck): Also pass the flags in
+ $(AM_DISTCHECK_CONFIGURE_FLAGS) to the configure invocation.
+ Update comments.
+ * tests/defs.in.test (AM_DISTCHECK_CONFIGURE_FLAGS,
+ DISTCHECK_CONFIGURE_FLAGS): Unset in case they are exported in
+ the environment, they might improperly influence our testsuite.
+ * tests/distcheck-configure-flags.test: New test.
+ * tests/distcheck-configure-flags-am.test: Likewise.
+ * tests/distcheck-configure-flags-subpkg.test: Likewise.
+ * distcheck-hook.test: Likewise.
+ * distcheck-hook2.test: Likewise.
+ * tests/Makefile.am (TESTS): Update.
+ Closes automake bug#8784.
+
+2010-06-09 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ docs: better documentation for silent make rules
+ * doc/automake.texi (Options): Detailed description of the
+ automake option `silent-rules' moved from here ...
+ (Silent Make): ... into this new chapter, expanded, improved,
+ and subdivided into ...
+ (Make verbosity, Tricks For Silencing Make,
+ Automake silent-rules Option): ... these new sections.
+ (@menu, @detailmenu): Update.
+ * tests/silent-configsite.test: New test, checking that the
+ user can control default mode of silent-rules from config.site,
+ as is documented in the manual.
+ * tests/Makefile.am (TESTS): Updated.
+
+2011-06-11 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Warnings about primary/prefix mismatch fixed and extended.
+ * automake.in (%standard_prefix): Add `doc' and `locale'.
+ Rename `pkgdatadir' to `pkgdata'. Similarly for`pkglibdir',
+ `pkgincludedir' and `pkglibexecdir'.
+ (handle_programs): List `pkglibexec', not `pkglib', among the
+ prefixes valid for the `PROGRAMS' primary.
+ (handle_data): List also `doc' among the prefixes valid for
+ the `DATA' primary. This is required by automake's own build
+ system.
+ * tests/dirforbid.test: Test removed, superseded by ...
+ * tests/primary-prefix-invalid-couples.test: ... this new test.
+ * tests/primary-prefix-valid-couples.test: New test.
+ * tests/primary-prefix-couples-documented-valid.test: Likewise.
+ * tests/primary-prefix-couples-force-valid.test: Likewise.
+ * tests/java3.test: Adjusted, and extended a bit.
+ * tests/Makefile.am (TESTS): Updated.
+ * NEWS: Updated.
+ From a report by Eric Blake.
+
+2011-06-14 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: check portable fd redirection in TESTS_ENVIRONMENT
+ * tests/tests-environment-fd-redirect.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+ Motivated by coreutils bug#8846:
+ <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=8846>
+ See also following CC:ed thread on bug-autoconf list:
+ <https://lists.gnu.org/archive/html/bug-autoconf/2011-06/msg00002.html>
+
+2011-06-16 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: make test 'self-check-reexec.test' more portable
+ * tests/self-check-reexec.test: Rewrite not to require a Korn
+ Shell able to grok variable expansions such as `${.sh.version}';
+ Solaris 10 /bin/ksh fails on this for example. Instead, just
+ require bash and a shell that is not bash.
+
+2011-06-14 Stefano Lattarini <stefano.lattarini@gmail.com>
+ Jim Meyering <meyering@redhat.com>
+
+ test defs: fix ksh-related portability bug in warning messages
+ Running "make check" normally prints a diagnostic to the outermost
+ stderr (usually a tty) to explain why a test is skipped, thus
+ giving better and faster feedback to the user. It used to do
+ so by redirecting file descriptor 9 to stderr (via "exec 9>&2")
+ before invoking the test scripts, which then would write any skip
+ explanation to file descriptor 9 via the `skip_' function defined
+ in `tests/defs'.
+ However, various Korn Shells (at least Solaris 10's /bin/ksh and
+ Debian GNU/Linux's /bin/ksh) and the HP-UX's /bin/sh close open
+ file descriptors > 2 upon an `exec' system call; thus the effects
+ of "exec 9>&2" are cancelled upon fork-and-exec, so we would get
+ a "Bad file number" diagnostic and no skip explanation with those
+ shells.
+ The present change remedies this situation.
+ * tests/Makefile.am (AM_TESTS_ENVIRONMENT): Redirect more portably,
+ via a trailing "9>&2", rather than the prior "exec 9>&2; ...". Add
+ explanatory comments.
+ * tests/defs (stderr_fileno_): Update the advice in comments.
+ Based on commit v8.12-82-g6b68745 "tests: accommodate HP-UX and
+ ksh-derived shells" in GNU coreutils.
+ Further references, with lots of discussion:
+ <https://lists.gnu.org/archive/html/bug-autoconf/2011-06/msg00002.html>
+ <http://thread.gmane.org/gmane.comp.gnu.coreutils.bugs/22488>
+ <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=8846>
+
+2011-06-13 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: remove 'test_prefer_config_shell' from the environment
+ Since commit `v1.11-910-g7df1a9b', the once user-overridable
+ variable `$test_prefer_config_shell' has become an internal
+ detail, and the test scripts now complain and bail out if it is
+ set in the environment.
+ * tests/Makefile.am (AM_TESTS_ENVIRONMENT): Unset the variable
+ `test_prefer_config_shell' if it is set in the environment.
+
+2011-06-13 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: autogenerate list of wrapped tests for `lib/' shell scripts
+ * tests/gen-config-shell-tests: New script, generates distributed
+ makefile snippet `tests/config-shell-tests.am' to list all tests
+ that use the `get_shell_script' function, with names mangled to
+ use suffix `-w.shtst', in ...
+ * tests/Makefile.am (config_shell_tests): ... this macro, whose
+ definition has been consequently removed from Makefile.am.
+ (EXTRA_DIST): Distribute the new script.
+ ($(srcdir)/config-shell-tests.am): Generate using the new script.
+ (include): Include the `config-shell-tests.am' fragment.
+ * bootstrap: Invoke `tests/gen-config-shell-tests' to generate
+ `tests/config-shell-tests.am'.
+ * tests/.gitignore: Ignore `config-shell-tests.am'.
+ * tests/gen-parallel-tests: Fixlet in heading comments.
+
+2011-06-13 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: test mdate-sh with /bin/sh too
+ * tests/mdate5.test: Fetch the `mdate-sh' script using the
+ `get_shell_script' function, and run it directly instead of
+ using `$SHELL'.
+ * tests/mdate6.test: Likewise. Since we are at it, make checks
+ on the `mdate-sh' output stricter, remove now unneeded calls to
+ aclocal and automake and creation/extension of `configure.in',
+ `Makefile.am' and `textutils.tex' files, and add a trailing `:'
+ command.
+ * tests/Makefile.am (config_shell_tests): Add `mdate5-w.shtst'
+ and `mdate6-w.shtst'.
+
+2011-06-13 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: extend tests on `--add-missing' and `--copy' a bit
+ * tests/add-missing.test: Fix typo in heading comments. Try with
+ another testcase that install many (but not all) the auxiliary
+ scripts at once, and uses non-standard (but valid and documented)
+ setups (e.g., defining YACC in Makefile.am instead of calling
+ AC_PROG_YACC from configure.in).
+ * tests/copy.test: Reference `add-missing.test' in heading
+ comments. Try few more test scenarios.
+
+2011-06-16 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: few fixlets and improvements
+ * tests/cond31.test ($required): Remove `cc', it's not really
+ needed.
+ * tests/confh.test: Call autoheader too. The lack of this call
+ wasn't causing spurious failures because the automatic remake
+ rules were somehow invoking it on our behalf (at make time).
+ * tests/fn99subdir.test: Use $subdirname throughout, instead of
+ ${subdirname}, for consistency with the rest of the testsuite.
+ Avoid an unnecessary subshell, which could also cause spurious
+ passes, being guarded by a trailing `|| Exit 1', which neutralize
+ the `errexit' flag. Remove an unnecessary `|| Exit 1' guard.
+ * tests/insh2.test: Rewrite to avoid hackish Makefile.in munging,
+ and to also run configure and make.
+
+2011-06-13 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: don't hard-code test name in txinfo21.test
+ * tests/txinfo21.test: Use `$me' instead of hard-coding the
+ current testcase name "txinfo21". Add a trailing `:' command
+ since we are at it.
+
+2011-06-10 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: new test dedicated to `--add-missing' and `--copy'
+ * tests/add-missing.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+ Suggested by Peter Rosin.
+
+2011-06-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: use 'fatal_' and 'framework_failure_' for hard errors
+ * tests/defs (require_xsi): Use `fatal_', not `framework_failure',
+ to report an invalid usage.
+ * tests/remake-gnulib-remove-header.test: Prefer using `fatal_'
+ with a proper error message over a direct call to `Exit 99'.
+ * tests/pr8365-remake-timing.test: Likewise.
+ * tests/cygnus-imply-foreign.test: Likewise.
+ * tests/missing6.test: Likewise.
+ * tests/cond8.test: Likewise.
+ * tests/cond33.test: Likewise.
+ * tests/python-virtualenv.test: Prefer using `framework_failure_'
+ with a proper error message over a direct call to `Exit 99'.
+ * tests/instspc-tests.sh: Prefer using `framework_failure_' and
+ `fatal_' over direct calls to `Exit 99'.
+ (fatal_): Define this (which is a simplified version of the one
+ in `tests/defs') for early uses (i.e., before `tests/defs'
+ gets sourced).
+ * tests/depmode-tests.sh: Likewise. Also, simplify the
+ 'get_depmodes' function and calls to it accordingly.
+
+2011-06-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ self tests: check new 'fatal_' function
+ * tests/self-check-exit.test: Also check the new 'fatal_'
+ function.
+
+2011-06-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ test defs: new function 'fatal_', for hard errors
+ Before this patch, the only way offered by tests/defs to
+ properly signal a hard error was the `framework_failure_'
+ function. But the error message issued by that function,
+ as its name would suggest, refers to a set-up failure in the
+ testsuite, while hard errors can obviously also be due to
+ other reasons. The best way to fix this inconsistency is to
+ introduce a new function with a more general error message.
+ Inspired by a recent similar change to Gnulib's tests/init.sh.
+ * tests/defs (fatal_): New function.
+ * tests/README (Section "Writing test cases" subsection "Do"):
+ Suggest the use of `fatal_', not of `framework_failure_', for
+ generic hard errors. The latter should be reserved for "real"
+ set-up failures.
+
+2011-06-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ py-compile: '--' and non-option arguments terminate the option list
+ * lib/py-compile: Any non-option argument, or the special `--'
+ argument, now explicitly terminates the list of options.
+ * tests/py-compile-option-terminate.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+ * NEWS: Update.
+
+2011-06-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ py-compile: complain on unrecognized options
+ * lib/py-compile: Complain on unrecognized options. Don't be too
+ lax in matching `--help' and `--version' options.
+ * tests/py-compile-usage.test: Extend accordingly.
+ * NEWS: Update.
+
+2011-06-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ py-compile: normalize error and help messages
+ * lib/py-compile: Now error messages do not begin with a capital
+ letter, nor end with a period, as per GNU standards. Prepend the
+ error messages with the name of the script, not with its path.
+ When an invalid usage is recognized, always display the customary
+ message "Try `py-compile --help' ..." on a line of its own.
+ ($me): New variable, containing the name of the
+ program, i.e., `py-compile'. Use it throughout.
+ (usage_error): New function, used to display error messages about
+ invalid usage.
+ * tests/py-compile-usage.test: Extend and tighten accordingly.
+
+2011-06-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ python tests: add "unit tests" on py-compile
+ * tests/py-compile-basic.test: New test.
+ * tests/py-compile-basic2.test: New test.
+ * tests/py-compile-basedir.test: Likewise.
+ * tests/py-compile-destdir.test: Likewise.
+ * tests/py-compile-env.test: Likewise.
+ * tests/py-compile-usage.test: Likewise.
+ * tests/Makefile.am (TESTS): Update.
+ Tested with python 2.0.1, 2.4.6, 2.6.6, 2.7.1, and 3.1.3.
+
+2011-06-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ py-compile: the '--destdir' option now accepts a blank argument
+ * lib/py-compile (Option parsing): Do not count an empty argument
+ to `--destdir' or `--basedir' as a missing argument.
+ * lib/python.am: Simplify accordingly, passing the `--destdir'
+ option to py-compile unconditionally, even if `$(DESTDIR)' is
+ empty.
+ * NEWS: Update.
+
+2011-06-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ python: run the 'py-compile' script with $(SHELL)
+ * lib/python.am (install-%DIR%PYTHON): Run each instance of
+ py-compile using $(SHELL). Since we are at it, break overly
+ long lines.
+ (am__py_compile): New variable, to reduce code duplication.
+
+
+2011-06-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: `lib/' shell scripts transparently tested also with $SHELL
+ With the previous commit, the user could prefer the use of $SHELL
+ over /bin/sh in some tests checking the Automake-provided shell
+ scripts by manually exporting `test_prefer_config_shell' to "yes"
+ in the environment. With this commit, we ensure that such tests
+ *always* and *transparently* run using both $SHELL and /bin/sh
+ to execute the checked scripts. The `test_prefer_config_shell'
+ variable becomes an internal detail, and is no more meant to be
+ manually defined or overridden.
+ * tests/defs-static.in: Check that `test_prefer_config_shell' is
+ not exported in the environment. Error out if this is the case.
+ * tests/config-shell-tests.sh: New file, driver script to run
+ checks on the shell scripts in `lib/' using the $SHELL determined
+ at configure time instead of the default system shell /bin/sh.
+ * Makefile.am (TESTS_EXTENSIONS): Add `.shtst'.
+ (SHTST_LOG_COMPILER): Define, it calls `config-shell-tests.sh'.
+ (config_shell_tests): Define to a list of tests that wraps other
+ `*.test' tests using `config-shell-tests.sh'.
+ ($(config_shell_tests)): Dummy dependency declaration required
+ in order to have make actually produce expected log files from
+ the `.shtst.log' suffix rule.
+ (EXTRA_DIST): Distribute `config-shell-tests.sh'.
+ (TESTS): Add `$(config_shell_tests)'.
+ * tests/self-check-env-sanitize.test: Update, by checking that
+ `test_prefer_config_shell' isn't exported in the environment.
+
+2011-06-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: can use also $SHELL to check shell scripts from `lib/'
+ * tests/ar-lib.test: If the variable `$test_prefer_config_shell'
+ is set to "yes", run the script under test with configure-time
+ determined $SHELL, rather than with /bin/sh.
+ The `$test_prefer_config_shell' variable defaults to empty, but
+ can be overridden at runtime by the user, thus allowing more
+ coverage.
+ * tests/compile.test: Likewise.
+ * tests/compile2.test: Likewise.
+ * tests/compile3.test: Likewise.
+ * tests/compile4.test: Likewise.
+ * tests/compile5.test: Likewise.
+ * tests/compile6.test: Likewise.
+ * tests/instsh2.test: Likewise.
+ * tests/instsh3.test: Likewise.
+ * tests/mkinst3.test: Likewise.
+ * tests/missing.test: Likewise.
+ * tests/missing2.test: Likewise.
+ * tests/missing3.test: Likewise.
+ * tests/missing5.test: Likewise.
+ * tests/defs (get_shell_script): New subroutine, factoring out
+ code common to the tests above.
+ (xsi-lib-shell): If `$test_prefer_config_shell' is set to "yes",
+ check that $SHELL, not /bin/sh, supports XSI constructs, as we
+ expect the test will use $SHELL and not /bin/sh to run the
+ script being tested.
+
+2011-06-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests defs: better requirements for XSI shells
+ This change avoids potential spurious failures with tests using
+ the requirement 'xsi-shell' to mean that they want */bin/sh* (not
+ $SHELL) to be XSI-conforming. This idiom used to work before
+ commit `v1.11-874-g1321be7' (as back then the test scripts were
+ unconditionally run with /bin/sh), but has become inconsistent
+ now that the test scripts re-execute themselves with configure
+ determined $SHELL.
+ The described spurious failures have already occurred in practice,
+ for examples on Solaris systems which also had GNU Bash installed.
+ From a suggestion by Peter Rosin. See discussion at:
+ <https://lists.gnu.org/archive/html/automake-patches/2011-06/msg00016.html>
+ * tests/defs (xsi-shell): Now check that $SHELL, rather than the
+ shell currently running the test script, is an XSI shell.
+ (xsi-bin-sh): New requirement, checking that /bin/sh (which can
+ differ from $SHELL) is an XSI shell.
+ (xsi-lib-shell): New requirement, checking that the shell that
+ should be used to test the Automake-provided scripts from `lib/'
+ is an XSI shell. For the moment, this is just an alias for
+ `xsi-bin-sh'.
+ (require_xsi): New subroutine, used to factor out code common to
+ the requirements above.
+ ($xsi_shell_code): New variable, contains shell code supposed to
+ work only with XSI shells. Used by the new subroutine above.
+ * tests/ar-lib.test ($required): Require 'xsi-lib-shell' instead
+ of 'xsi-shell', since the script we test here is run with /bin/sh,
+ not with $SHELL.
+ * tests/compile3.test: Likewise.
+ * tests/compile6.test: Likewise.
+
+2011-06-05 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix typo-related error in auxdir2.test
+ * tests/auxdir2.test (configure.in): Close m4 quoting in the
+ argument to AC_CONFIG_AUX_DIR. Without this, aclocal fails with
+ "ERROR: end of file in string". This problem hasn't been exposed
+ by the testsuite before because this test is in XFAIL_TESTS, so
+ its failure went unnoticed, even if it was due to a wrong cause.
+ Bug introduced in commit v1.11-249-g49ac3de.
+
+2011-06-05 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ self tests: check that `$me' can be overridden
+ * tests/self-check-me.test: Check that `$me' can be overridden
+ before sourcing ./defs, with or without sourcing ./defs-static
+ beforehand, and that this override is honored. Update heading
+ comments.
+
+2011-06-02 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ self tests: fix another spurious failure
+ Our ad-hoc usage of `tests/defs' in the testsuite's self tests
+ stopped working properly when we made the test scripts re-execute
+ themselves with the configure-time $SHELL. Fix this.
+ Fixes a regression introduced by commit 'v1.11-874-g1321be7'.
+ * tests/self-check-exit.test: Export `AM_TESTS_REEXEC' to "no"
+ before running the self tests. This fixes a spurious failure
+ present only when the test was run by hand.
+
+2011-06-02 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ silent-rules tests: fix spurious failures with Sun Studio C++
+ * tests/silentcxx.test: The C++ compiler from Sun Studio is named
+ `CC'. Account for this in our grepping checks on the make output.
+ Since we are at it, throw in a couple of improvements to comments
+ and formatting.
+ * tests/silent-many-generic.test: The C++ compiler from Sun Studio
+ is named `CC', and this can cause spurious failures in our grepping
+ of the make output. Work around this by using a wrapper script
+ around the C++ compiler (generated on the fly), since filtering the
+ make output proved to be too fragile.
+
+2011-06-02 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failure in backcompat2.test on NetBSD
+ * tests/backcompat2.test: Add trailing `:' in the body of a `for'
+ loop, in case the last command there might have an exit status
+ different 0. This work around `set -e' issues in some BSD shells,
+ e.g., NetBSD /bin/ksh.
+
+2011-06-02 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failure in autohdr3.test
+ * tests/autohder3.test (Makefile.am): Let `test' depend on `all',
+ so that config.h header is truly remade.
+ Remove now useless call to `$MAKE' when non-GNU make is in use.
+ Failure introduced by commit `v1.11-895-g5e62b96'.
+
+2011-06-02 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failure of cond29.test on NetBSD
+ * tests/cond29.test: Skip if we cannot safely limit the maximal
+ size of used virtual memory to 20K. This fixes a spurious failure
+ on NetBSD.
+ Bug introduced in commit `v1.11-885-g908d335'.
+
+2011-06-02 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ maintcheck: fix again few more failures
+ * tests/cond29.test: To please the `sc_tests_Exit_not_exit'
+ maintainer check, avoid using `sh -c "exit 0"' where a simple
+ `sh -c :' will do.
+ * tests/depmod-data.test: Use creative quoting to avoid
+ spuriously triggering the `sc_tests_Exit_not_exit' maintainer
+ check.
+
+2011-06-02 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ maintcheck: fix some more failures
+ * tests/instdir-ltlib.test: Use creative quoting to avoid
+ spuriously triggering the `sc_rm_minus_f' maintainer check.
+ * tests/instdir-prog.test: Likewise.
+ * tests/instspc-data.test: Use creative quoting to avoid
+ spuriously triggering the `sc_tests_Exit_not_exit' maintainer
+ check.
+
+2011-06-02 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ maintcheck: fix some failures, extend some checks
+ * Makefile.am (sc_diff_automake_in_automake): Update, as we
+ now expect 9 lines, not 8, to be changed from `automake.in'
+ to `automake'.
+ (sc_diff_aclocal_in_aclocal): New maintainer check, similar to
+ the above, and checking that only 10 lines are changed from
+ `aclocal.in' to `aclocal'.
+ (syntax_check_rules): Update.
+ (sc_tests_Exit_not_exit): Exempt self tests `self-check-*.test'
+ from this check, as they can legitimately use the bare `exit'
+ builtin in various places.
+ * doc/automake.texi (Python): Remove stray `@' from the end of
+ a line. Typo introduced in commit `v1.11-312-g5bf7af6'.
+ * tests/depcomp8a.test: Pass DISTCHECK_CONFIGURE_FLAGS to make
+ from the environment rather than from the command line, to
+ pacify the `sc_tests_overriding_macros_on_cmdline' maintainer
+ check.
+ * tests/depcomp8b.test: Likewise.
+
+2011-06-02 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: don't require GNU make where it's not strictly needed
+ * tests/autohdr3.test: Rewrite to be stricter when make is GNU
+ make. Drop the requirement of GNU make.
+ * tests/aclocal5.test: Drop GNU make requirement, it's not truly
+ needed. Add reference to similar tests `remake-subdir*.test'.
+ * remake-subdir-gnu.test, remake-subdir-from-subdir.test,
+ remake-subdir.test, remake-subdir2.test: Add reference to
+ each other, and to related test `aclocal5.test'.
+ * tests/aclocal6.test: Drop GNU make requirement, it's not
+ truly needed.
+ * tests/confh6.test: Likewise.
+ * tests/lex3.test: Likewise.
+ * tests/remake11.test: Likewise.
+ * tests/subdir5.test: Likewise.
+ * tests/subdir8.test: Likewise.
+ * tests/werror2.test: Likewise.
+ * tests/conff.test: Likewise, and ensure verbose printing of
+ captured make output.
+ * tests/lex5.test: Tweak so that GNU make is no more required.
+ * tests/version7.test: Likewise.
+ * tests/maken2.test: Add explicative comment for why this test
+ requires GNU make.
+ * tests/maken4.test: Let it run also with BSD makes supporting
+ the `.MAKE' special target.
+ * tests/output6.test: Use proper m4 quoting in configure.in.
+ Expand make macros with one-character name using `$(x)', not
+ `$x', for portability. Move checks in the makefiles, rather
+ than relying on grepping the output from make. Drop the now
+ unneeded GNU make requirement.
+
+2011-05-29 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ remake: behave better with non-GNU make in subdirectories
+ Currently, with every decent make program, it is possible to
+ rebuild out-of-date autotools-generated files with a simple
+ "make Makefile" -- but for this to work reliably with non-GNU
+ make implementations, the command must be issued from the
+ top-level directory. This patch removes such limitation.
+ * lib/am/configure.am (am--refresh): Depend on `%MAKEFILE%'.
+ * tests/remake-subdir.test: New test.
+ * tests/remake-subdir2.test: Likewise.
+ * tests/remake-subdir-gnu.test: Likewise.
+ * tests/remake-subdir-from-subdir.test: Likewise.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-06-01 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ lex tests: fix spurious failures with Solaris lex
+ * tests/lex-lib.test (foo.l): Avoid empty "rules section", which
+ can confuse Solaris lex.
+ * tests/lex-libobj.test (foo.l): Likewise.
+
+2011-06-01 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ lex tests: do not force the use of flex unconditionally
+ * tests/defs (lex): Act more similarly to what the `yacc'
+ requirement does, i.e., only force the use of flex if the
+ $LEX variable is left unset by the user.
+ (flex): Use `skip_' to skip the test if flex is not found.
+
+2011-06-01 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ lex tests: avoid possible hang; fix and extend
+ * tests/lex3.test (foo.l:yywrap): Return 1, not 0, to avoid hangs.
+ Bug introduced in commit 'v1.11-871-geb147a1'.
+ (Makefile.am): Do not add `@LEXLIB@' to `$(LDADD)', as we define
+ our own `yywrap' function.
+ * tests/lex.test (tscan.l): In `yywrap', return 1, not 0, for
+ consistency with the default flex implementation.
+ * tests/lex-libobj.test (yywrap.c): Likewise.
+ * tests/lex-subobj-nodep.test (s1.l): Likewise.
+ * tests/lexvpath.test (foo.c): Likewise.
+ * tests/silent-lex-gcc (foo.l): Likewise.
+ * tests/silent-lex-generic (foo.l): Likewise.
+ * tests/silent-many-gcc (foo5.l): Likewise.
+ * tests/silent-many-generic (foo5.l): Likewise.
+ * tests/lex-lib.test (mu.c): Likewise.
+ Update heading comments, to refer to ...
+ * tests/lex-lib-external.test: ... this new test, which checks
+ that we can get use the `yywrap' function from a system-wide
+ library, if that's available.
+
+2011-06-01 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: prefer `skip_' over `echo ...; Exit 77'
+ * tests/self-check-cleanup.test: When the test must be skipped,
+ use `skip_ REASON' instead of `echo REASON; Exit 77'. Also,
+ make the skip message shorter and clearer.
+
+2011-06-01 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failures in self tests
+ Our ad-hoc usage of `tests/defs' in the testsuite's self tests
+ stopped working properly when we made the test scripts re-execute
+ themselves with the configure-time $SHELL. Fix this.
+ Fixes a bug introduced by commit 'v1.11-874-g1321be7'.
+ * tests/defs: Only check that we can find the client test script
+ when we must re-execute it.
+ * tests/self-check-cleanup.test: Export `AM_TESTS_REEXEC' to "no"
+ before running the self tests.
+ * tests/self-check-dir.test: Likewise.
+ * tests/self-check-explicit-skips.test: Likewise.
+ * tests/self-check-me.test: Likewise.
+ * tests/self-check-sanity.test: Likewise.
+ * tests/self-check-reexec.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-06-01 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: prefer ulimit over timeout in test on a memory-hogging bug
+ * tests/cond29.test: Use 'ulimit' instead of 'timeout' to ensure
+ that automake does not uses up too much resources. This is really
+ and improvement because the bug tested by this script wasn't just
+ a "it hangs" or "it runs too slow" bug, but rather a memory-hogging
+ bug (due to combinatorial explosion when many Automake conditionals
+ had to be handled) which could easily crash the whole system, which
+ is unacceptable. The requirement of a proper and working 'ulimit'
+ builtin might cause the test to be skipped on more systems, but
+ that shouldn't be a problem since the bug isn't about a portability
+ issue, but is rather an automake internal implementation problem.
+ I've verified that the test as updated by this patch still passes
+ with automake 1.8.5, automake 1.10.2, and obviously the development
+ version of automake, and that it fails with automake 1.7.9.
+
+2011-06-01 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: avoid generating `*-p.test' tests, use a wrapper script
+ The generated `*-p.test' tests had already become just thin layers
+ around the corresponding test scripts. This change makes the final
+ step, converting to the use of a generic wrapper script and thus
+ avoiding the extra test generation (similarly to what is done for
+ the `*.instspc' and `*.depmod' tests).
+ * tests/parallel-tests.sh: New file, driver script to run checks
+ the on the `parallel-tests' semantics by wrapping tests that use
+ the generic "Simple Tests" driver.
+ * tests/gen-parallel-tests: Update, mostly to reflect the new
+ `.ptest' extensions used for tests in $(parallel_tests).
+ * Makefile.am (TESTS_EXTENSIONS): Add `.ptest'.
+ (PTEST_LOG_COMPILER): Define, it calls `parallel-tests.sh'.
+ ($(parallel_tests)): Do not really generate `*-p.test' tests
+ anymore; this is now just a dummy dependency declaration required
+ in order to have make actually produce expected log files from
+ the `.ptest.log' suffix rule.
+ (EXTRA_DIST): Distribute `parallel-tests.sh'.
+ (MAINTAINERCLEANFILES): Don't remove the `$(parallel_tests)', it
+ is not necessary anymore.
+ (generated_tests): Variable definition removed.
+ (TESTS): Update, by listing `$(parallel_tests)' directly instead
+ of `$(generated_tests)'
+ (expected_list_of_tests): Remove `$(generated_tests)'.
+ (maintainer-check-list-of-tests): No need to explicitly depend on
+ `$(expected_list_of_tests)' anymore.
+
+2011-05-29 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ automake, aclocal: honour configure-time AUTOCONF and AUTOM4TE
+ Currently, the Automake's own configure script allow definition
+ of AUTOCONF and AUTOM4TE, expected to point respectively to an
+ autoconf and autom4te programs. But while these definitions are
+ honoured in the Automake's build systems and test suite, they
+ were *not* honoured in the generated `automake' and `aclocal'
+ scripts. This behaviour, apart from being wrong in that it does
+ not allow the user enough freedom in choosing his tools, also
+ caused inconsistencies in the test suite, brining to spurious
+ failures.
+ Problem reported by Graham Reitz on the automake list; see thread:
+ <https://lists.gnu.org/archive/html/automake/2011-05/msg00022.html>
+ * automake.in ($traces): Use `@am_AUTOCONF', not simply `autoconf'.
+ * aclocal.in ($traces): Use `@am_AUTOM4TE', not simply `autom4te'.
+ * Makefile.am (do_subst): Substitute also `@am_AUTOCONF' and
+ `@am_AUTOM4TE'.
+ * NEWS: Update.
+ * THANKS: Update.
+
+2011-05-29 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ build: the user can override AUTOM4TE, AUTORECONF and AUTOUPDATE too
+ Our build system allows the user to override AUTOCONF and AUTOHEADER
+ at configure time, and honours these overrides in our testsuite.
+ But it didn't do the same with AUTOM4TE, AUTORECONF and AUTOUPDATE.
+ This change fixes that inconsistency.
+ * configure.ac (am_AUTOM4TE, am_AUTOUPDATE, am_AUTORECONF): New
+ AC_SUBSTitutions. Update comments.
+ * tests/defs.in ($AUTOUPDATE): Default to `@am_AUTOUPDATE@' now.
+ ($AUTOM4TE): New variable, defaulting to `@am_AUTOM4TE@'.
+ ($AUTORECONF): New variable, defaulting to `@am_AUTORECONF@'.
+ * doc/Makefile.am ($(srcdir)/amhello-1.0.tar.gz): Update.
+
+2011-05-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ parallel-tests: stricter checks on DISABLE_HARD_ERRORS support
+ * tests/parallel-tests-harderror.test: New test, doing more
+ in-depth checks on DISABLE_HARD_ERRORS.
+ * tests/parallel-tests.test: Remove tests on DISABLE_HARD_ERRORS,
+ now redundant.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-05-22 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+ Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests/README: fix example about `make -e' usage
+ * tests/README (Section "Writing test cases" subsection "Do"): When
+ some variable is never initialized in the Makefile, `-e' is not
+ necessary in order to override it. DESTDIR is such a variable: we
+ ensure that we do not ever initialize it. And as such, it is quite
+ portable to use:
+ $ make DESTDIR=/foo/bar install
+ and in fact, quite widely used.
+ So our example about when `make -e' is required, which references
+ the `DESTDIR' variable, is poorly chosen, if not downright wrong.
+ Rewrite it to use `prefix' as the overridden variable instead.
+
+2011-05-29 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: don't require gfortran if any fortran compiler is enough
+ * tests/silentf90.test ($required): Require `fortran', not
+ `gfortran'.
+ * tests/silentf77.test ($required): Require `fortran77', not
+ `gfortran'.
+ * tests/silent-many-generic.test ($required): Require `fortran'
+ and `fortran77' rather than `gfortran'.
+
+2011-05-27 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: improve `ccnoco*.test', better cross-compiling support
+ * tests/ccnoco3.test (Mycomp): Use the `$CC' chosen by `tests/defs'
+ instead of forcing `gcc' unconditionally. This ensures better
+ coverage in case of cross-compiling, when GCC can be named e.g.,
+ `i586-mingw32msvc-gcc', instead of simply `gcc'.
+ * tests/ccnoco.test: Likewise. Remove redundant checks. Modernize
+ the created `configure.in'. Run tests both in-tree and in VPATH.
+ Export `CC' to the overridden value only once.
+ * tests/ccnoco2.test: Slightly stricter grepping of automake
+ stderr. Add trailing `:' command.
+
+2011-05-27 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: each test case depends on `defs-static'
+ * tests/Makefile.am ($(TEST_LOGS)): Depends on `defs-static' too.
+ Simplify comments.
+
+2011-05-27 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: use $SHELL to run tests which are shell scripts
+ * tests/Makefile.am (TEST_LOG_COMPILER): Define so that the
+ configure-time $SHELL is used to run the tests.
+ * tests/defs: Add code to re-execute by default the running
+ test script with configure-time $SHELL. Updated comments.
+ * configure.ac: Check that `set -e' is working for $SHELL,
+ not for /bin/sh.
+ * tests/defs-static.in: Update comments.
+ * tests/README (Supported shells): Updated.
+ (Getting details from failures): Don't tell that tests are
+ run by /bin/sh by default.
+
+2011-05-26 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: split 'subst2.test' to improve modularity and coverage
+ * tests/subst2.test: Test removed, split into ...
+ * tests/programs-primary-rewritten.test: ... this test ...
+ * tests/subst-no-trailing-empty-line.test: ... and this one ...
+ * tests/extra-programs-empty.test: ... and this one.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-05-26 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: tweak and improve tests on Automake conditionals
+ The "avoid the requirement of a working compiler" we refer about
+ below is obtained by disabling automatic dependency tracking and
+ defining `CC' (and `EXEEXT', `OBJEXT', `CXX', etc., if needed) to
+ dummy values, either directly in the `Makefile.am', or by AC_SUBST
+ in `configure.in'.
+ The "cosmetic changes" we refer about below consists in, e.g.,
+ adding a trailing `:' command to a script, using proper m4 quoting
+ in `configure.in' files, adding commands that offer more debugging
+ output, explicitly declaring phony targets as such in Makefiles,
+ making use of idioms more consistent with those employed in other
+ tests, following the GNU formatting standards more closely, etc.
+ * tests/cond.test: Cosmetic changes.
+ * tests/cond3.test: Likewise.
+ * tests/cond10.test: Likewise.
+ * tests/cond14.test: Likewise.
+ * tests/cond15.test: Likewise.
+ * tests/cond17.test: Likewise.
+ * tests/cond40.test: Likewise.
+ * tests/cond13.test: Likewise, and make grepping of the generated
+ `Makefile.in' slightly stricter.
+ * tests/cond6.test: Extend by also running ./configure, make and
+ "make install". Few cosmetic changes.
+ * tests/cond8.test: Likewise.
+ * tests/cond2.test: Do few cosmetic changes. Make grepping of
+ automake stderr stricter.
+ * tests/cond20.test: Likewise.
+ * tests/cond23.test: Likewise.
+ * tests/cond24.test: Likewise.
+ * tests/cond42.test: Likewise.
+ * tests/cond46.test: Likewise.
+ * tests/cond9.test: Move more checks in the `Makefile.am' instead
+ of grepping make's output.
+ * tests/cond38.test: Likewise.
+ * tests/cond11.test: Likewise. Avoid the requirement of a working
+ C compiler.
+ * tests/cond16.test: Likewise.
+ * tests/cond22.test: Likewise.
+ * tests/cond30.test: Likewise.
+ * tests/cond31.test: Likewise.
+ * tests/cond4.test: Likewise, and drop the now-useless GNU make
+ requirement as well.
+ * tests/cond18.test: Likewise.
+ * tests/cond19.test: Likewise.
+ * tests/cond22.test: Likewise.
+ * tests/cond25.test: Add trailing `:' command.
+ * tests/cond26.test: Likewise.
+ * tests/cond27.test: Likewise.
+ * tests/cond28.test: Likewise.
+ * tests/cond29.test: Use `unindent' function for better formatting.
+ Other minor cosmetic changes. Use a `timeout' program (if it's
+ available) to determine whether the script takes too long, instead
+ of just hoping that the user will notice an abnormally long test
+ execution time.
+ * tests/cond33.test: Extend a bit. Fix heading comments. Few more
+ cosmetic changes.
+ * tests/cond37.test: Ensure verbose printing of captured make
+ output. Minor cosmetic changes.
+ * tests/cond34.test: Likewise. Avoid the requirement of a working
+ C compiler. Make grepping of make output slightly stricter.
+ * tests/cond35.test: Quote literal dots in grep regexp. Add extra
+ debugging output. Minor cosmetic changes.
+ * tests/cond36.test: Likewise.
+ * tests/cond41.test: Do not simply check that aclocal fails, but
+ also grep its stderr for the expected error message.
+ * tests/cond43.test: Likewise (but the program being automake).
+ Few cosmetic changes.
+ * tests/condd.test: Avoid the requirement of a working C compiler.
+ * tests/condman3.test: Extend by using more man pages and more
+ manpage sections.
+ * tests/condman.test: Removed, it's completely superseded by
+ `condman3.test'.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-05-25 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ lex tests: avoid spurious failures when LEXLIB isn't found
+ The AC_PROG_LEX Autoconf macro does not diagnose a failure to find
+ the "lex library" expected to provide a `yywrap' function (function
+ which is required to link most lex-generated programs). On the
+ contrary, when all the link attempts (i.e., with `-ll' and `-lfl')
+ fail, configure declares that no lex library is needed, and simply
+ proceeds with the configuration process -- only for the build to
+ possibly fail later, at make time.
+ This behaviour might be (partly) intended; the Autoconf manual
+ reads:
+ ``You are encouraged to use Flex in your sources, since it is
+ both more pleasant to use than plain Lex and the C source
+ it produces is portable. In order to ensure portability,
+ however, you must either provide a function `yywrap' or, if
+ you don't use it (e.g., your scanner has no `#include'-like
+ feature), simply include a `%noyywrap' statement in the
+ scanner's source.''
+ This AC_PROG_LEX behaviour is causing some spurious failures of the
+ Automake testsuite in environments which lack a proper library
+ providing `yywrap' (this happens for example in Linux->MinGW cross
+ compilations). But at this point is clear that a proper workaround
+ is to simply provide a fall-back implementation of `yywrap' in our
+ lexers.
+ * tests/cond35.test: Provide a dummy `yywrap' function.
+ * tests/lex3.test: Likewise.
+ * tests/lexvpath.test: Likewise.
+ * tests/silent-many-gcc.test: Likewise.
+ * tests/silent-many-generic.test: Likewise.
+ * tests/silent-lex-gcc.test: Likewise, and a dummy `main' too.
+ * tests/silent-lex-generic.test: Likewise.
+ * tests/lex-lib.test: New test.
+ * tests/lex-libobj.test: New test.
+ * tests/lex-nowrap.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+ * THANKS: Update.
+ Thanks to Russ Allbery for the suggestion.
+
+2011-05-25 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: require C++ compiler explicitly in tests needing it
+ The list of the test scripts which needed a C++ compiler but
+ failed to require it explicitly has been found by running:
+ $ tests=`grep -lE 'CXX|\.c(c|\+\+|xx|pp)' *.test | tr '\n' ' '`
+ $ am_explicit_skips=yes CXX=false make check TESTS="$tests"
+ and looking for tests that reported FAIL instead of SKIP.
+ After the present change, all those previously failing tests
+ either pass or get correctly skipped.
+ * tests/subobj9.test: Require `c++', instead of explicitly
+ skipping on configure failure. Add excerpts and/or details from
+ the original bug report that prompted this tests to be written.
+ * tests/silentcxx-gcc.test: Require g++.
+ * tests/silentcxx.test: Require c++.
+ * tests/suffix3.test: Likewise.
+
+2011-05-25 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: don't require g++ where any C++ compiler is enough
+ * tests/specflg10.test ($required): Use `c++', not g++.
+ * tests/silent-many-generic.test: Likewise.
+
+2011-05-25 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: require C compiler explicitly in tests needing it
+ The list of the test scripts which needed a C compiler but
+ failed to require it explicitly has been found by running:
+ $ am_explicit_skips=yes CC=false make check
+ and looking for tests that reported FAIL instead of SKIP.
+ After the present change, all those previously failing tests
+ either pass or get correctly skipped.
+ * tests/aclocal4.test ($required): Add `cc'.
+ * tests/ansi.test: Likewise.
+ * tests/ansi10.test: Likewise.
+ * tests/ansi3.test: Likewise.
+ * tests/ansi3b.test: Likewise.
+ * tests/ansi5.test: Likewise.
+ * tests/ansi6.test: Likewise.
+ * tests/ansi7.test: Likewise.
+ * tests/ansi9.test: Likewise.
+ * tests/backcompat6.test: Likewise.
+ * tests/canon7.test: Likewise.
+ * tests/check5.test: Likewise.
+ * tests/check7.test: Likewise.
+ * tests/check8.test: Likewise.
+ * tests/cond4.test: Likewise.
+ * tests/cond11.test: Likewise.
+ * tests/cond16.test: Likewise.
+ * tests/cond18.test: Likewise.
+ * tests/cond19.test: Likewise.
+ * tests/cond22.test: Likewise.
+ * tests/cond30.test: Likewise.
+ * tests/cond31.test: Likewise.
+ * tests/cond32.test: Likewise.
+ * tests/cond34.test: Likewise.
+ * tests/cond35.test: Likewise.
+ * tests/cond39.test: Likewise.
+ * tests/condd.test: Likewise.
+ * tests/cygnus-dependency-tracking.test: Likewise.
+ * tests/depcomp2.test: Likewise.
+ * tests/depcomp6.test: Likewise.
+ * tests/depcomp7.test: Likewise.
+ * tests/depcomp8a.test: Likewise.
+ * tests/depcomp8b.test: Likewise.
+ * tests/depdist.test: Likewise.
+ * tests/depend2.test: Likewise.
+ * tests/depend5.test: Likewise.
+ * tests/distcleancheck.test: Likewise.
+ * tests/distname.test: Likewise.
+ * tests/exeext.test: Likewise.
+ * tests/exeext4.test: Likewise.
+ * tests/extradep.test: Likewise.
+ * tests/extradep2.test: Likewise.
+ * tests/gnits2.test: Likewise.
+ * tests/gnits3.test: Likewise.
+ * tests/instdir-ltlib.test: Likewise.
+ * tests/instdir-prog.test: Likewise.
+ * tests/instfail.test: Likewise.
+ * tests/instfail-libtool.test: Likewise.
+ * tests/lex3.test: Likewise.
+ * tests/lex5.test: Likewise.
+ * tests/lexvpath.test: Likewise.
+ * tests/lex-subobj-nodep.test: Likewise.
+ * tests/lflags.test: Likewise.
+ * tests/libobj-basic.test: Likewise.
+ * tests/libobj2.test: Likewise.
+ * tests/libobj7.test: Likewise.
+ * tests/libobj10.test: Likewise.
+ * tests/libobj16a.test: Likewise.
+ * tests/libobj16b.test: Likewise.
+ * tests/libobj17.test: Likewise.
+ * tests/libobj19.test: Likewise.
+ * tests/libtool2.test: Likewise.
+ * tests/libtool3.test: Likewise.
+ * tests/libtool7.test: Likewise.
+ * tests/libtool9.test: Likewise.
+ * tests/libtoo10.test: Likewise.
+ * tests/libtoo11.test: Likewise.
+ * tests/ltcond.test: Likewise.
+ * tests/ltcond2.test: Likewise.
+ * tests/ltconv.test: Likewise.
+ * tests/ltinit.test: Likewise.
+ * tests/ltlibsrc.test: Likewise.
+ * tests/ltorder.test: Likewise.
+ * tests/nobase.test: Likewise.
+ * tests/nobase-libtool.test: Likewise.
+ * tests/mmodely.test: Likewise.
+ * tests/parallel-tests5.test: Likewise.
+ * tests/parallel-tests-suffix-prog.test: Likewise.
+ * tests/parallel-tests-ext-driver-prog.test: Likewise.
+ * tests/posixsubst-ldadd.test: Likewise.
+ * tests/posixsubst-libraries.test: Likewise.
+ * tests/posixsubst-ltlibraries.test: Likewise.
+ * tests/posixsubst-programs.test: Likewise.
+ * tests/posixsubst-sources.test: Likewise.
+ * tests/pr87.test: Likewise.
+ * tests/pr204.test: Likewise.
+ * tests/pr224.test: Likewise.
+ * tests/pr300-lib.test: Likewise.
+ * tests/pr300-ltlib.test: Likewise.
+ * tests/pr300-prog.test: Likewise.
+ * tests/pr401.test: Likewise.
+ * tests/pr401b.test: Likewise.
+ * tests/pr401c.test: Likewise.
+ * tests/remake-gnulib-add-acsubst.test: Likewise.
+ * tests/remake-gnulib-add-header.test: Likewise.
+ * tests/regex.test: Likewise.
+ * tests/repeated-options.test: Likewise.
+ * tests/silent.test: Likewise.
+ * tests/silent3.test: Likewise.
+ * tests/silent9.test: Likewise.
+ * tests/silent-lex-generic.test: Likewise.
+ * tests/silent-many-generic.test: Likewise.
+ * tests/silent-yacc-generic.test: Likewise.
+ * tests/specflg7.test: Likewise.
+ * tests/specflg9.test: Likewise.
+ * tests/specflg10.test: Likewise.
+ * tests/stdinc.test: Likewise.
+ * tests/strip.test: Likewise.
+ * tests/strip2.test: Likewise.
+ * tests/strip3.test: Likewise.
+ * tests/subdirbuiltsources.test: Likewise.
+ * tests/subobj3.test: Likewise.
+ * tests/subobj6.test: Likewise.
+ * tests/subobj11a.test: Likewise.
+ * tests/subpkg.test: Likewise.
+ * tests/subst2.test: Likewise.
+ * tests/subst3.test: Likewise.
+ * tests/substref.test: Likewise.
+ * tests/substre2.test: Likewise.
+ * tests/suffix5.test: Likewise.
+ * tests/suffix8.test: Likewise.
+ * tests/suffix10.test: Likewise.
+ * tests/suffix11.test: Likewise.
+ * tests/suffix12.test: Likewise.
+ * tests/suffix13.test: Likewise.
+ * tests/target-cflags.test: Likewise.
+ * tests/transform.test: Likewise.
+ * tests/transform2.test: Likewise.
+ * tests/yacc-basic.test: Likewise.
+ * tests/yacc-d-basic.test: Likewise.
+ * tests/yacc-clean.test: Likewise.
+ * tests/yacc-dist-nobuild.test: Likewise.
+ * tests/yacc-nodist.test: Likewise.
+ * tests/yaccvpath.test: Likewise.
+ * tests/yacc-d-vpath.test: Likewise.
+ * tests/yacc4.test: Likewise.
+ * tests/yacc7.test: Likewise.
+ * tests/yacc8.test: Likewise.
+ * tests/yaccdry.test: Likewise.
+ * tests/yflags-cmdline-override.test: Likewise.
+ * tests/yflags-force-override.test: Likewise.
+ * tests/python-virtualenv.test: Likewise. Also, improve skip
+ messages.
+ * tests/subobj5.test ($required): Add `cc'.
+ (Makefile.am): Set `AUTOMAKE_OPTIONS' to `subdir-objects', and
+ add new checking rules `test-build' and `test-distdir'.
+ Extend the test by building and examining the distdir, the
+ program, and the object files.
+ * tests/postproc.test ($required): Add `cc'.
+ Avoid the explicit `|| Exit $?' after call to configure, which
+ is now either redundant (e.g., when `am_explicit_skips' is
+ unset), or counter-productive (e.g., when `am_explicit_skips'
+ is set to "yes").
+ * tests/pr243.test: Likewise.
+ * tests/pr266.test: Likewise.
+ * tests/pr220.test: Simplify so that it doesn't require a
+ C compiler anymore.
+ * tests/subdir5.test: Likewise.
+ * tests/subdir8.test: Likewise.
+ * tests/lflags.test: Likewise.
+ * tests/yflags.test: Likewise.
+ * tests/yflags-force-conditional.test: Likewise.
+ * tests/lflags2.test: Simplify so that it doesn't require a
+ C++ compiler anymore.
+ * tests/yflags2.test: Likewise.
+ * tests/autohdrdry.test (configure.in): Remove unneeded call
+ to `AC_PROG_CC'.
+ * tests/pr287.test: Likewise.
+ * tests/check6.test: Likewise.
+ * tests/cond21.test: Likewise, plus some cosmetic adjustments.
+ * tests/upc.test: Skip if configure fails with status `77'.
+ * tests/upc3.test: Likewise.
+ * tests/vala4.test: Likewise.
+ * tests/nostdinc.test: Likewise. Also, make grepping checks
+ on `Makefile.in'. Update heading comments.
+ * tests/compile5.test: When we must skip, skip explicitly,
+ and with a meaningful message.
+ * tests/instspc-tests.sh: When running in "test-build" or
+ "test-install" mode (as determined by the value of variable
+ `$instspc_action'), require `cc'. Adjust comments.
+ * tests/depmod-tests.sh: Likewise.
+
+2011-05-24 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: allow user to ask for stricter skip semantics
+ Given how the Automake testsuite is currently structured, if a
+ command in a test script fails with status `77', the global test
+ outcome is considered a SKIP, because the value of `77' for `$?'
+ is passed to the exit trap. Indeed, this happens in practice, as
+ an autoconf-generated configure script can exit with status `77'
+ if it fails to find, e.g., a required compiler.
+ While this behaviour is quite useful for avoiding spurious test
+ failures in the wild, it can also sometimes prevent the Automake
+ developers to easily see and declare the requirements of their
+ tests.
+ This change introduces a new variable `am_explicit_skips', meant to
+ be user-overridable, and which, when set to a "true" value (i.e.,
+ `yes' or `1'), require a direct call to `Exit 77' in order to make
+ the test outcome be considered a SKIP.
+ * tests/defs.in ($am__test_skipped): New variable, initialized
+ to `no'.
+ (Exit): Set `$am__test_skipped' to `yes' if passed an exit status
+ of 77.
+ (trap '...' 0): When `$am_explicit_skips' is set to a "true" value,
+ reset an exit status of `77' to `78' if $am__test_skipped is not
+ set to `yes'.
+ * tests/self-check-exit.test: Adjust: unset `am_explicit_skips'.
+ * tests/self-check-explicit-skips.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-05-24 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: user can force skipping of compiler-requiring tests
+ * tests/defs (cc, c++, fortran, fortran77): Skip the test if
+ the relevant compiler is disabled by having the corresponding
+ variable (CC, CXX, FC and F77, respectively) set to "false".
+ (yacc): For consistency, skip the test when the YACC variable
+ is set to "false", not when it's set to "no". Since we are at
+ it, fix the skip message to be shorter and more consistent.
+
+2011-05-23 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: tweak and improve tests on "Simple Tests" driver
+ * tests/check.test: Make grepping of generated Makefile.in
+ slightly stricter. Add trailing `:' command.
+ * tests/check2.test: Ensure verbose printing of captured make
+ output. Make grepping of generated Makefile.in and of make
+ output stricter. Add trailing `:' command.
+ * tests/check3.test: Likewise. Also, fix minor error in a
+ comment.
+ * tests/check4.test: Stricter grepping of make output. Use
+ `using_gmake' subroutine instead of copy&paste from defs.in
+ to determine whether $MAKE is GNU make. Add a trailing `:'
+ command.
+ * tests/check6.test: Add trailing `:' command.
+ * tests/check10.test: Prefer redirection `>' over `>>' when
+ creating new files. Ensure verbose printing of captured make
+ output.
+ * tests/check11.test: Likewise.
+ * tests/check7.test: Likewise. Make grepping of make output
+ stricter. Prefer "make distcheck" over a simple "make check"
+ in a VPATH build. Add trailing `:' command.
+ (a.c): Format following GNU coding standards.
+ (Makefile.am): Explicitly declare target `print-xfail-tests'
+ as PHONY. Distribute $(check_SCRIPTS), for distcheck.
+ * tests/parallel-tests.test: Prefer redirection `>' over `>>'
+ when creating new files.
+ * tests/parallel-tests2.test: Likewise.
+ * tests/parallel-tests9.test: Likewise.
+ * tests/parallel-tests8.test: Likewise. Make grepping of
+ automake stderr stricter.
+ * tests/check8.test: Likewise. Make formatting of created
+ *.c files more consistent with GNU Coding Standards.
+ * tests/check-subst-prog.test (configure.in): Break overly
+ long lines.
+ (pass-prog.c, xfail-prog.c): Format them more consistently
+ with GNU Coding Standards.
+ * tests/parallel-tests3.test: Use a shorter and clearer skip
+ message. Use the `unindent' subroutine to improve readability
+ of indented loop bodies. Simplify the hack used to please
+ maintainer-check.
+ * tests/parallel-tests5.test: Make formatting of created *.c
+ files more consistent with GNU Coding Standards. Use the
+ `unindent' subroutine to improve readability of indented loop
+ bodies.
+ * tests/parallel-tests10.test: Add blank line, for clarity.
+ Prefer trailing `:' over trailing `Exit 0', for consistency
+ with other tests.
+
+2011-05-21 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests/README: small consistency improvement
+ * tests/README (Section "User interface" subsection "Running the
+ tests"): In examples, be more consistent w.r.t. the differences
+ between GNU and non-GNU make.
+
+2011-05-21 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests/README: suggest how to run tests in cross-compile mode
+ * tests/README (Section "User interface" subsection "Running the
+ tests"): Briefly explain how to override 'host_alias' at runtime
+ to force the use of cross-compilers by the testsuite. Give an
+ example.
+
+2011-05-21 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ test defs: better detection of cross-compile mode
+ * configure.ac (AC_CANONICAL_HOST): New, probably not strictly
+ necessary, but useful to complements AC_CANONICAL_BUILD.
+ * tests/defs-static.in ($host_alias, $build_alias): New variables,
+ exported, user-overridable, defaults AC_SUBST'd by configure.
+ * tests/defs (cross_compiling): Consider cross-compilation mode
+ active only if `$host_alias' is not empty *and* it differs from
+ `$build_alias'. This is more faithful to the way configure
+ determines whether it is cross-compiling, but still allows the
+ user to easily force cross-compilation by overriding `host_alias'
+ and `build_alias' at runtime.
+ From a report by Ralf Wildenhues.
+
+2011-05-20 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: avoid re-running few tests with 'parallel-tests' option
+ Some tests in our testsuite use the 'simple-tests' driver only
+ marginally, or simply as a mean to conveniently check unrelated
+ invariants. It makes little sense to force these tests to also
+ run with the 'parallel-tests' Automake option active, as doing so
+ offers no real gain in coverage, while often causing a measurable
+ overhead in execution time (for an already too-slow testsuite).
+ * tests/pr401.test (parallel_tests): Define to "no", to prevent
+ the generation of a sibling test script using the 'parallel-tests'
+ driver.
+ * tests/pr401b.test: Likewise.
+ * tests/pr401c.test: Likewise.
+ * tests/java-flat.test: Likewise, and properly update heading
+ comments.
+ * tests/java-nested.test: Likewise, but defining `parallel_tests'
+ to "yes" instead, for improved coverage in conjunction with the
+ sister test `java-flat.test'.
+
+2011-05-20 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: allow tests to avoid the use of 'parallel-tests' option
+ * tests/gen-parallel-tests: Do not generate "siblings" for tests
+ that explicitly define the `parallel_tests', whether to "yes" or
+ to any other value. Extend heading comments to give a rationale
+ for this behaviour.
+ * tests/README: Update.
+
+2011-05-20 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests/README: update obsoleted advice
+ * tests/README (Section "Writing test cases" subsection "Do"):
+ Do not suggest to use the `*-p.test' pattern for the names of
+ hand-written tests which use the `parallel-tests' Automake option.
+ Not only is this not respected by the existing tests, but it is
+ more likely to cause conflicts with auto-generated tests.
+ So, suggest to *avoid* using the `*-p.test' pattern in names
+ of hand-written tests instead.
+ (Section "Writing test cases" subsection "Do not"): When
+ suggesting not to override Makefile variables using command
+ line arguments, do not use the badly outdated variables `U'
+ and 'ANSI2KNR' in the example; instead, use the more common
+ and typical `DESTDIR'.
+
+2011-05-18 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: avoid spurious failures in cross-compile mode
+ * tests/depcomp2.test: Ensure verbose printing of captured stderr
+ from configure.
+ * tests/ansi3.test ($required): Add 'native', as the ansi2knr
+ functionality is not meant to work with a cross-compiler.
+ * tests/ansi3b.test: Likewise.
+ * tests/ansi5.test: Likewise.
+ * tests/ansi6.test: Likewise.
+ * tests/ansi7.test: Likewise.
+ * tests/ansi8.test: Likewise.
+ * tests/ansi10.test: Likewise.
+ * tests/subobj3.test: Likewise.
+ * tests/check8.test ($required): Add 'native', as this test is
+ not meant to work with a cross-compiler.
+ * tests/gnits2.test: Likewise.
+ * tests/ltconv.test: Likewise.
+ * tests/ltcond2.test: Likewise.
+ * tests/parallel-tests5.test: Likewise.
+ * tests/specflg7.test: Likewise.
+ * tests/specflg8.test: Likewise.
+ * tests/check5.test: Likewise. Also, ensure verbose printing of
+ captured make output, and thrown in few cosmetic and consistency
+ improvements.
+ * tests/ltinit.test: Be laxer in grepping configure output, to
+ avoid spurious failures on systems which lack POSIX dynamic
+ linking (e.g., MinGW), or when cross-compiling for such systems.
+ * tests/ansi9.test: Skip parts of the test that would require a
+ native compiler.
+ * tests/backcompat6.test: Likewise.
+ * tests/depcomp8a.test: Likewise.
+ * tests/pr401.test: Likewise.
+ * tests/pr401b.test: Likewise.
+ * tests/pr401c.test: Likewise.
+ * tests/target-cflags.test: Likewise.
+ * tests/lex3.test: Likewise.
+ * tests/yacc-basic.test: Likewise.
+ * tests/autohdr4.test: Likewise. Also, extend the test to ensure
+ more coverage in cross-compile mode.
+ * tests/canon7.test: Likewise.
+ * tests/check9.test: Removed, split into two new tests ...
+ * tests/check-subst-prog.test: ... this one, which requires a
+ native C compiler ...
+ * tests/check-subst.test: ... and this one, which doesn't require
+ any compiler.
+ * tests/parallel-tests4.test: Removed, split into two new tests ...
+ * tests/parallel-tests-suffix-prog.test: ... this one, which
+ requires a native C compiler ...
+ * tests/parallel-tests-suffix.test: ... and this one, which
+ doesn't require any compiler.
+ * tests/parallel-tests7.test: Removed, split into two new tests ...
+ * tests/parallel-tests-ext-driver-prog.test: ... this one, which
+ requires a native C compiler ...
+ * tests/parallel-tests-ext-driver.test: ... and this one, which
+ doesn't require any compiler.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-05-19 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ test defs: rename requirement 'non-cross' -> 'native'
+ * tests/defs.in (non-cross): Rename requirement ...
+ (native): ... to this, which is clearer and fits the
+ existing lingo better.
+ Suggestion by Ralf Wildenhues.
+
+2011-05-15 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: be more cross-compile friendly
+ * tests/defs.in (cross_compiling): New subroutine.
+ (am__tool_prefix): New internal variable.
+ (gcc, g++, gcj): Force the use of the correct "tool prefix"
+ when cross compiling.
+ (gfortran, g77, non-cross): New requirements.
+
+2011-05-15 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix portability issues in 'repeated-options.test'
+ * tests/repeated-options.test: Do not assume that object files
+ have `.o' suffix and executables have no default suffix; instead,
+ use `$(OBJEXT)' and `$(EXEEXT)'.
+
+2011-05-11 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ check: document and test $(TEST_SUITE_LOG) overriding
+ * doc/automake.texi (Simple Tests using parallel-tests): Explain
+ how and why TEST_SUITE_LOG can be overridden at runtime.
+ * tests/parallel-tests-log-override-1.test: New test, check that
+ the newly documented idiom and similar usages are truly supported.
+ * tests/parallel-tests-log-override-2.test: Likewise.
+ * tests/parallel-tests-log-override-recheck.test: Likewise.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-05-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failure of extradep.test on FreeBSD
+ * tests/extradep.test: When using `ls -t' to determine whether a
+ file has been updated, make sure to use as reference a file whose
+ timestamp is expected to be *strictly* older that that of the file
+ being checked. This is required because at least FreeBSD `ls' do
+ not sort files with the same timestamp in alphabetical order when
+ using the `-t' option.
+ * tests/extradep2.test: Likewise.
+
+2011-05-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failure of txinfo21.test on FreeBSD
+ * tests/txinfo21.test: Use the `is_newest' subroutine instead of
+ the `ls -t' hack to to determine whether a file has been updated.
+ This is required because at least FreeBSD `ls' do not sort files
+ with the same timestamp in alphabetical order when using the `-t'
+ option.
+
+2011-05-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix syntax error in 'silentcxx-gcc.test'
+ * tests/silentcxx-gcc.test (for config_args in ...): Remove extra
+ trailing backslash from the list of looped-on items.
+
+2011-05-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ depmod tests: fix bug in depmodes list extraction
+ * tests/depmod-tests.sh (get_depmodes): Use `echo $all_depmodes'
+ instead of `... | tr "$nl" "$sp"' to strip extra whitespaces and
+ newlines from `$all_depmodes'. The latter idiom with `tr' is
+ wrong since it gets run before `./defs' is sourced, and thus `$nl'
+ and `$sp' are undefined.
+ Bug revealad by FreeBSD tr(1) implementation, which doesn't accept
+ empty strings as arguments.
+
+2011-05-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests defs: use `skip_' for skipping java-related tests
+ * tests/defs.in (java, javac): Use `skip_' to signal test
+ skipping.
+
+2011-05-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: add excerpts from few original bug reports, for clarity.
+ * tests/comment6.test: Add excerpts and/or details from the
+ original bug report that prompted this tests to be added and/or
+ extended.
+ * tests/dejagnu4.test: Likewise.
+ * tests/installdir.test: Likewise.
+
+2011-05-13 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ lex: "make clean" removes .c files from non-distributed .l
+ Previously, while automake did *not* distribute C source and header
+ files derived from non-distributed Lex sources, it still caused
+ them to be removed only by "make maintainer-clean" only, and not by
+ simply "make clean" or "make distclean".
+ This caused "make distcheck" to fail, unless the developer put
+ those generated .c files in CLEANFILES or in DISTCLEANFILES by
+ hand.
+ This change fixes this issue, by making non-distributed `.c' files
+ generated by non-distributed Lex sources cleaned by "make clean".
+ A similar problem for Yacc support had been fixed with the commit
+ v1.11-263-ged2c8bc.
+ * tests/automake.in (lang_lex_target_hook): Make C source files
+ derived from non-distributed Lex files cleaned by "make clean",
+ not only by "make maintainer-clean".
+ * tests/lex-clean.test: New test.
+ * tests/lex-clean-cxx.test: Likewise.
+ * tests/lex-nodist.test: Likewise.
+ * tests/lex-pr204.test: Likewise.
+ * tests/pr204.test: For consistency, renamed ...
+ * tests/yacc-pr204.test: ... to this, and updated to keep it
+ more in sync with 'lex-pr204.test'.
+ * tests/yacc-nodist.test: Updated to keep it more in sync with
+ 'lex-nodist.test'.
+ * tests/Makefile.am (TESTS): Update.
+ * NEWS: Update.
+
+2011-05-13 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ lex tests: make test on Lex dependency tracking more "semantic"
+ * tests/lex4.test: Renamed ...
+ * tests/lex-depend-grep.test: ... to this, and extended.
+ * tests/lex-depend.test, tests/lex-depend-cxx.test: ... these
+ new tests.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-05-13 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ lex tests: remove erroneous check about ylwrap distribution
+ * tests/lex5.test: Do not check that the ylwrap script is *not*
+ distributed when there is only one lexer, as ylwrap is in fact
+ expected to distributed unconditionally (at least starting from
+ commit `Release-1-9-323-gc5881cc' of 19-08-2006). Note that this
+ bogus check wasn't triggering any failure because it was done at
+ the wrong time (i.e. from the VPATH build directory), so that it
+ could never fail anyway.
+ Instead, check that ylwrap is distributed even when there is only
+ one lexer.
+ Since we are at it, add a couple of `ls -l' calls, to get better
+ debugging info.
+
+2011-05-13 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ yacc tests: "make clean" removes C++ files from non-distributed .y
+ * tests/yacc-clean-cxx.test: New test, sister of `yacc-clean.test'.
+ * tests/yacc-clean.test: Update heading comment to reference the
+ new sister test.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-05-06 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: add a workaround for automake bug#8485
+ * tests/yacc-d-cxx.test (Makefile.am): Add temporary workaround
+ for automake bug#8485. The bug is still exposed by the testcase
+ 'yacc-dist-nobuild-subdir.test'.
+
+2011-05-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: add a couple of inter-tests reference
+ * tests/yacc-nodist.test, tests/pr204.test: These tests are
+ related, so add references to each other in heading comments.
+
+2011-05-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ lex tests: require just `lex' instead of `flex'
+ * tests/lex-subobj-nodep.test ($required): Require `lex',
+ not `flex', as this test is expected to work with any lex
+ implementation.
+ * tests/silent-lex.test: Likewise.
+
+2011-05-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests defs: use `skip_' for skipping yacc/lex related tests
+ * tests/defs.in (lex, bison): Use `skip_' to signal test skipping.
+
+2011-05-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests defs: merge cleanup
+ * tests/defs.in (flex, bison): Requirements removed, we have real
+ `lex' and `yacc' requirements now.
+
+2011-05-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests defs: allow requirements for compilers (mostly dummy)
+ Most of the new requirements that are now accepted in `$required'
+ as consequence of this patch are still dummy. They are planned
+ to be implemented only in master (or in some derived branch), but
+ having them here (even just as no-op) will allow for an easier
+ integration/backporting of potential new testcases.
+ * tests/defs.in (cc, c++, fortran, fortran77): New requirements,
+ still dummy.
+ (flex): New requirement, picking LEX for configure.
+ (lex): New requirement, alias for `flex'. A more appropriate
+ implementation, looking for a generic `lex' program, will follow
+ in the future.
+
+2011-05-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: 'silent-many-gcc.test' improved and made more robust
+ * tests/silent-many-gcc.test: Also force "fast" gcc depmode
+ for C++ compilations. Add sanity checks verifying that the
+ cache variables we force are really used by configure. Fix
+ typo in comments.
+
+2011-05-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: drop useless requirements of 'g++'
+ * tests/lflags2.test ($required): Remove 'g++', as any working
+ C++ compiler should be enough, and ./configure will cause the
+ test to skip if no working C++ compiler is found.
+ * tests/yflags2.test: Likewise.
+ * tests/subobj9.test: Likewise.
+ * tests/silentcxx.test: Likewise. Also, do not force depmodes
+ that could cause non-GNU C++ compilers to fail.
+ * tests/silentcxx-gcc.test: New test, like `silentcxx.test',
+ but forcing "fast" gcc depmode (and thus requiring the GNU C++
+ compiler).
+ * tests/specflg10.test: Add proper "fixme" comment telling that
+ we should make this test work with a generic C++ compiler.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-05-03 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests defs: one more environment sanitization (corner case)
+ * tests/defs (am__using_gmake): Initialize. The `using_gmake'
+ subroutine was using this variable for caching, but wasn't
+ initializing it, which could cause problems in the (admittedly
+ very unlikely) case in which it was pre-existent in the
+ environment.
+
+2011-05-03 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: add forgotten test scripts to $(TESTS)
+ * tests/Makefile.am (TESTS): Added test scripts man[678].test,
+ which have been present on the filesystem and in the repository,
+ but which had erroneously been left out from $(TESTS).
+
+2011-05-03 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: ensure verbose printing of captured make output
+ * tests/libtool7.test: Ensure verbose printing of captured
+ make output.
+ * tests/libtool9.test: Likewise.
+
+2011-05-03 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ maintcheck: consistency of list of test scripts
+ * CheckListOfTests.am: New file.
+ (maintainer-check-list-of-tests): New target,
+ check for consistency between list of tests defined in the
+ including Makefile and list of tests on the filesystem.
+ (clean-maintcheck-testslist-tmp): New rule, to clean up the
+ temporary files that might be left around by the rules associated
+ with the previous target.
+ (clean-local): Depend on it.
+ * lib/Automake/tests/Makefile.am: Include `CheckListOfTests.am'.
+ (maintainer-check): Added dependency from the new target
+ `maintainer-check-list-of-tests'.
+ * tests/Makefile.am: Likewise. Also ...
+ (checked_test_extensions): Define to `.test'.
+ (expected_test_list): Define properly.
+ * Makefile.am (maintainer-check-list-of-test): New target,
+ calling recursively into `tests/' and `lib/Automake/tests/',
+ using ...
+ (TEST_SUBDIRS): ... this new variable.
+
+2011-05-03 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: drop useless requirements of gcc (plus testsuite tweakings)
+ * tests/libobj14.test ($required): Remove 'gcc', as we never run
+ the C compiler.
+ * tests/targetclash.test: Likewise.
+ * tests/ansi6.test ($required): Remove 'gcc', as any working
+ C compiler should be enough.
+ * tests/ansi7.test: Likewise.
+ * tests/ansi9.test: Likewise.
+ * tests/ansi10.test: Likewise.
+ * tests/lex5.test: Likewise.
+ * tests/lexvpath.test: Likewise.
+ * tests/mmodely.test: Likewise.
+ * tests/pr204.test: Likewise.
+ * tests/pr300-lib.test: Likewise.
+ * tests/pr300-prog.test: Likewise.
+ * tests/primary3.test: Likewise.
+ * tests/specflg7.test: Likewise.
+ * tests/specflg8.test: Likewise.
+ * tests/subdir5.test: Likewise.
+ * tests/subdir8.test: Likewise.
+ * tests/subobj6.test: Likewise.
+ * tests/subst3.test: Likewise.
+ * tests/substre2.test: Likewise.
+ * tests/yacc6.test: Likewise.
+ * tests/yacc8.test: Likewise.
+ * tests/depcomp2.test: Likewise. Also, avoid clobbering user-set
+ CFLAGS.
+ * tests/lex3.test: Likewise.
+ * tests/ansi3.test: Likewise. Also, avoid 'CC=gcc' in configure.
+ * tests/ansi3b.test: Likewise.
+ * tests/ansi5.test: Likewise.
+ * tests/autohdr4.test ($required): Remove 'gcc', as any working
+ C compiler should be enough.
+ Also, do not reject slow dependency extractors (which we might
+ be forced to use now that $CC is not necessarily gcc anymore).
+ * tests/cond16.test ($required): Remove 'gcc', as any working
+ C compiler should be enough.
+ Since we are at it, throw in few minor tweakings (mostly cosmetic,
+ stylistic, or consistency-related).
+ * tests/cond18.test: Likewise.
+ * tests/cond35.test: Likewise.
+ * tests/gnits2.test: Likewise.
+ * tests/libtool3.test: Likewise.
+ * tests/libtool7.test: Likewise.
+ * tests/libtool9.test: Likewise.
+ * tests/ltcond.test: Likewise.
+ * tests/ltcond2.test: Likewise.
+ * tests/ltconv.test: Likewise.
+ * tests/ltlibsrc.test: Likewise.
+ * tests/nobase.test: Likewise.
+ * tests/nobase-libtool.test: Likewise.
+ * tests/pr220.test: Likewise.
+ * tests/pr224.test: Likewise.
+ * tests/pr300-ltlib.test: Likewise.
+ * tests/pr401.test: Likewise.
+ * tests/pr401b.test: Likewise.
+ * tests/pr401c.test: Likewise.
+ * tests/subpkg.test: Likewise.
+ * tests/target-cflags.test: Likewise.
+ * tests/transform.test: Likewise.
+ * tests/yacc4.test: Likewise.
+ * tests/cond19.test: Likewise. Also, avoid clobbering user-set
+ CFLAGS.
+ * tests/cond4.test: Likewise.
+ * tests/depend2.test: Likewise.
+ * tests/pr87.test: Likewise.
+ * tests/subobj3.test: Likewise.
+ * tests/substref.test: Likewise.
+
+2011-05-03 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ test defs: increase coverage w.r.t. GNU make
+ * tests/defs (GNUmake): Instead of just skipping the tests
+ requiring GNU make if $MAKE is not GNU make, try to look for
+ it and, if found, redefine $MAKE accordingly. This will help
+ to transparently increase coverage on non-GNU systems which
+ have GNU make available in PATH.
+
+2011-05-03 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: improve few inter-tests references
+ * tests/acloca22.test: Improve and extend the heading comments.
+ Add reference to related tests 'remake-deleted-m4-file.test' and
+ 'remake-renamed-m4-macro-and-file.test'. Since we are at it,
+ add trailing `:' command, and few blank lines for readability.
+ * tests/remake-renamed-m4-macro-and-file.test: In the heading
+ comments, add reference to the related test 'acloca22.test'.
+
+2011-05-03 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failure in 'color2.test'
+ * tests/color2.test: If $MAKE contains command-line arguments (as
+ in e.g., "make -j2"), expect's directive "spawn $env(MAKE)" fails
+ spuriously, because it tries to run "$MAKE" as a single command.
+ Fix this with proper uses of the TCL `eval' builtin.
+
+2011-05-03 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: few more checks on automatic remake support
+ * tests/remake-all-1.test: New test, check that the "all" target
+ triggers rebuilt of outdated Makefiles.
+ * tests/remake-all-2.test: Likewise, but for when the makefiles
+ are not named `Makefile'.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-05-03 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: check some remake features with non-GNU make too
+ * tests/acloca14.test ($required): Drop "GNUmake". This test
+ works as-is with non-GNU make implementations.
+ * tests/remake1a.test: Likewise.
+ * tests/aclocal4.test ($required): Drop "GNUmake".
+ Modify the test to have it work also with non-GNU make.
+ * tests/remake5.test: Likewise.
+ * tests/remake8a.test: Likewise.
+ * tests/remake8b.test: Likewise.
+ * tests/remake9a.test: Likewise.
+ * tests/remake9b.test: Likewise.
+ * tests/remake9c.test: Likewise.
+ * tests/remake9d.test: Likewise.
+ * tests/remake10a.test: Likewise.
+ * tests/remake10b.test: Likewise.
+ * tests/remake10c.test: Likewise.
+ * tests/remake12.test: ($required): Drop "GNUmake".
+ Adapt the test to make it work also with non-GNU make (if
+ it supports an "include" directive).
+
+2011-05-01 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: extend tests on dependency tracking with VPATH
+ * tests/depmod-tests.sh: New script, fulfilling a threefold role:
+ 1. it is called to generate a Makefile.am snippet, containing the
+ definition of proper lists of tests;
+ 2. it is called to set up a directory containing some common data
+ files and autotools-generated files used by the aforementioned
+ tests (this is done for speed reasons only); and
+ 3. it is called to properly run those tests, one at a time.
+ * tests/depcomp9.test: Delete, it's obsolete now.
+ * tests/depcomp10.test: Likewise.
+ * tests/Makefile.am ($(srcdir)/depmod-tests.am): Include this
+ snippet, which defines ...
+ (depmode_tests): ... this new macro, containing the list of the
+ newly generated `*.depmod' tests.
+ (TESTS_EXTENSIONS): Add `.depmod'.
+ (DEPMOD_LOG_COMPILER): Define. It calls `depmod-tests.sh', so that
+ the "depmode tests" will be executed by passing that driver script
+ a proper parameter.
+ ($(depmod_tests)): New dependency declaration (dummy, but required
+ in order to have make actually produce expected log files from the
+ `.depmod.log' suffix rule).
+ (TESTS): Add $(depmod_tests).
+ (EXTRA_DIST): Distribute depmod-tests.sh.
+ Other minor cosmetic changes and reorderings.
+ * bootstrap: Generate depmod-tests.am.
+ * tests/.gitignore: Updated.
+
+2011-05-01 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: avoid extra test generation (for `instspc' tests)
+ We don't really need to generate tons and tons of wrapper test
+ scripts (presently, ~ 90) just to run what is basically a single
+ test (specifically, `instspc-tests.sh') with different parameters.
+ In fact, the possibility of running a single driver script with
+ multiple files/configurations/parameters is one of the major
+ selling points of the 'parallel-tests' testsuite driver of
+ automake. So why not use ourselves more extensively the best
+ features we provide?
+ * tests/instspc-tests.sh: Update heading comments. Expect
+ to be executed, not sourced. Update handling of command-line
+ arguments. Adjust to reflect the renaming of "instspc tests"
+ from `instspc-*.test' to `*.instspc'.
+ * tests/instspc-data.test: Update heading comments. Execute
+ driver script `instspc-tests.sh', instead of sourcing it.
+ Give more informative messages in case of internal errors.
+ * tests/Makefile.am (TESTS_EXTENSIONS): Define explicitly (to
+ `.test' and `.instspc').
+ (TESTS): Add `$(instspc_tests)'.
+ (generated_tests): Remove `$(instspc_tests)'.
+ (INSTSPC_LOG_COMPILER): Define. Calls `instspc-tests.sh', so
+ that the "instspc tests" will be now executed by passing that
+ driver script a proper parameter.
+ ($(instspc_tests)): Remove, we don't need anymore to generate
+ this tests.
+ ($(instspc_tests:.test=.log)): Remove, substituted by ...
+ ($(instspc_tests:.instspc=.log)): ... this.
+ ($(instspc_tests)): New dependency declaration (dummy, but
+ required in order to have make actually produce expected log
+ files from the `.instspc.log' suffix rule).
+ (MAINTAINERCLEANFILES, generated_tests): Don't extend with
+ $(instspc_tests) anymore.
+ Update comments.
+
+2011-05-01 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ build: improve the definition of the list of testcases
+ * tests/Makefile.am (handwritten_tests): New variable.
+ (generated_tests): Likewise.
+ (TESTS): Redefine as the union of the above.
+ (EXTRA_DIST): Extend using $(handwritten_tests) and
+ $(generated_tests) rather than $(TESTS).
+ * tests/gen-parallel-tests: Update accordingly, and
+ make more robust.
+
+2011-05-01 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests skips: shorter and clearer messages
+ * tests/defs: Use shorter messages when giving reasons for test
+ skipping; it turns out these shorter messages are also clearer.
+ If more info might be useful, send them to the log file only.
+
+2011-05-01 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix self check spurious failure with older bash versions
+ * tests/self-check-cleanup.test: Add trailing `:' to the test code
+ passed to $SHELL, otherwise older versions of bash (at least 2.05
+ and 3.2.39) fail to correctly remove the temporary directory in
+ the exit trap.
+
+2011-05-01 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: add sanity check to 'self-check-cleanup.test'
+ * tests/self-check-cleanup.test: Check that the "hacked" file
+ `defs-static' used by the test differs from the "vanilla" one
+ in builddir. This also offers a little more debugging output.
+
+2011-05-01 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: display reasons for skips to the console
+ * tests/Makefile.am (AM_TESTS_ENVIRONMENT): Open file descriptor
+ `9' to the original stderr; define `stderr_fileno_' to `9', and
+ export it.
+ * tests/self-check-report.test: Prevent new spurious failures by
+ removing from the environment any definition of `stderr_fileno_'.
+
+2011-05-01 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: use `skip_' for skipping of tests
+ * tests/defs: Use the `skip_' subroutine for test skipping. Also
+ give sometimes more detailed messages about the reasons for the
+ skipping.
+ * tests/canon7.test: Likewise.
+ * tests/color.test: Likewise.
+ * tests/color2.test: Likewise.
+ * tests/compile2.test: Likewise.
+ * tests/dejagnu7.test: Likewise.
+ * tests/depcomp6.test: Likewise.
+ * tests/depcomp9.test: Likewise.
+ * tests/depcomp10.test: Likewise.
+ * tests/distlinks.test: Likewise.
+ * tests/distlinksbrk.test: Likewise.
+ * tests/fn99.test: Likewise.
+ * tests/fn99subdir.test: Likewise.
+ * tests/forcemiss2.test: Likewise.
+ * tests/fort5.test: Likewise.
+ * tests/gettext3.test: Likewise.
+ * tests/install2.test: Likewise.
+ * tests/instfail-info.test: Likewise.
+ * tests/instfail-java.test: Likewise.
+ * tests/instfail-libtool.test: Likewise.
+ * tests/instfail.test: Likewise.
+ * tests/instmany-mans.test: Likewise.
+ * tests/instmany-python.test: Likewise.
+ * tests/instmany.test: Likewise.
+ * tests/instsh3.test: Likewise.
+ * tests/ltinit.test: Likewise.
+ * tests/makej2.test: Likewise.
+ * tests/mdate6.test: Likewise.
+ * tests/mkinst3.test: Likewise.
+ * tests/parallel-tests3.test: Likewise.
+ * tests/parallel-tests-reset-term.test: Likewise.
+ * tests/parallel-tests-unreadable-log.test: Likewise,
+ * tests/python-virtualenv.test: Likewise.
+ * tests/remake-gnulib-remove-header.test: Likewise.
+ * tests/subobj9.test: Likewise.
+ * tests/symlink2.test: Likewise.
+ * tests/tar.test: Likewise.
+ * tests/tar2.test: Likewise.
+ * tests/txinfo26.test: Likewise.
+ * tests/vala2.test: Likewise.
+ * tests/vala3.test: Likewise.
+ * tests/vala5.test: Likewise.
+ * tests/vtexi4.test: Likewise.
+ * tests/instdir-texi.test: Likewise.
+ * tests/txinfo21.test: Likewise.
+
+2011-04-29 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: more environment sanitization
+ * tests/defs: Move the checks verifying that the variables `me',
+ `parallel_tests' and `required' aren't set in the environment ...
+ * tests/defs-static.in: ... in here, with some optimizations to
+ avoid useless forks. Also, do the same checks for the variables
+ `original_AUTOMAKE' and `original_ACLOCAL' too.
+ * tests/self-check-env-sanitize.test: Update.
+ * tests/Makefile.am (TESTS_ENVIRONMENT): Unset also variables
+ `original_AUTOMAKE' and `original_ACLOCAL'.
+
+2011-04-24 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failure (non-renamed AM_TESTS_SETUP usage)
+ * tests/parallel-tests-reset-term.test: Use AM_TESTS_ENVIRONMENT
+ instead of AM_TESTS_SETUP (which has been removed in commit
+ v1.11-349-g12f48fa).
+ Fix spurious failure introduced by merge `v1.11-781-gfeed175'.
+
+2011-04-24 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failure in a test on TESTS (VPATH-related)
+ * tests/check-tests-in-builddir.test: When not using the
+ parallel-tests option, do not check that VPATH components are
+ not present in the displayed test name, since the simple-tests
+ driver do not try to strip them.
+
+2011-04-24 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failure in self-check-env-sanitize.test
+ * tests/self-check-env-sanitize.test: Open file descriptor `5'
+ to stdout.
+ Fix spurious failure introduced by merge `v1.11-788-g3b0c8d5'.
+
+2011-04-23 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ test: self check subroutines for skipping/failing of tests
+ * tests/self-check-report.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-04-23 Jim Meyering <meyering@redhat.com>
+ Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ test defs: new subroutines for test skipping/failing
+ * tests/defs.in (Exit): Move definition of this function earlier.
+ (warn_, skip_, fail_, framework_failure_): New functions, inspired
+ to the homonyms in gnulib's tests/init.sh.
+ ($stderr_fileno_): New global variable, used by the new functions
+ above.
+ * tests/README: Updated.
+ From a suggestion by Ralf Wildenhues.
+
+2011-04-23 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix typo (copy & paste blunder) in heading comment
+ * tests/maintclean-vpath.test: Correctly refer to the sister test
+ as `maintclean.test', not as `maintclean-vpath.test'.
+
+2011-04-23 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: remove redundant test `mclean.test'
+ * tests/mclean.test: Remove, it's a weak grepping test completely
+ superseded by the much more complete `maintclean.test'.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-05-03 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ java tests: use $PATH_SEPARATOR where appropriate
+ * tests/java-compile-run-nested.test: Use `$PATH_SEPARATOR', not
+ `:', to separate entries of extended PATH and CLASSPATH variables.
+ * tests/java-compile-run-flat.test: Likewise.
+
+2011-04-26 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ java coverage: test JAVACFLAGS and AM_JAVACFLAGS
+ * tests/javaflags.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-04-26 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ java coverage: test rebuild rules for java
+ * tests/java-rebuild.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-04-26 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ java coverage: try to build and run a java program
+ * tests/java-compile-run-flat.test: New test, try to build and run
+ a "UNIX-style" java program (complete with wrapper shell script
+ and the like) with a "flat" source-tree setup (i.e., everything in
+ the top-level directory).
+ * tests/java-compile-nested.test: Likewise, but using a more
+ typical "nested" source-tree setup.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-04-23 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ test defs: new requirement for the default java interpreter
+ * tests/defs.in (for tool in $required): New requirement 'java'.
+
+2011-04-23 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ java tests: tweak and make stricter a couple of tests
+ * tests/javasubst.test: Use proper m4 quoting. Add trailing `:'
+ command. Enable `errexit' shell flag, and related changes.
+ Prefer cat + here-doc over echo to append to configure.in.
+ Make grepping of Makefile.in stricter. Add debugging output.
+ Improve heading comments.
+ * tests/javaprim.test: Likewise.
+
+2011-04-23 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ java coverage: add test on uninstall with JAVA primary
+ * tests/java-uninstall.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-04-23 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ java tests: require java compiler more properly
+ * tests/java-extra.test: Use "required=javac" instead of ad-hoc
+ configure check.
+ * tests/java-noinst.test: Likewise.
+
+2011-04-23 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ java: allow both JAVA and nobase_JAVA in the same Makefile.am
+ * automake.in (handle_java): Also strip `nobase_' from the given
+ prefix, when needed.
+ * tests/java-clean.test: Update and extend.
+ * tests/java-compile-install.test: Likewise.
+ * tests/java-no-duplicate.test: Likewise.
+ * tests/java-sources.test: Likewise.
+ * tests/java-noinst.test: Likewise.
+ * tests/java-mix-dist-nodist.test: Renamed to ...
+ * tests/java-mix.test: ... this, and extended.
+ * tests/java-nobase.test: New test, still xfailing due to
+ unrelated issues.
+ * tests/Makefile.am (TESTS, XFAIL_TESTS): Update.
+
+2011-04-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ testsuite: more environment sanitization
+ * tests/defs.in: Sanity check: abort if any of `parallel_tests'
+ or `required' is in the environment.
+ ($sed_unindent_prog): Initialize to empty, to avoid interferences
+ from the environment.
+ * tests/self-check-me-in-env.test: Renamed to ...
+ * tests/self-check-env-sanitize.test: ... this, and extended.
+ * tests/Makefile.am (TESTS): Update.
+ (TESTS_ENVIRONMENT): Unset variables `parallel_tests' and
+ `required'. Adjust comments.
+
+2011-04-19 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: in self-checks, use $SHELL, not /bin/sh
+ * tests/self-check-me-in-env.test: Include `./defs-static' to get
+ the definition of `$SHELL'. Use `$SHELL' instead of `/bin/sh' to
+ execute the tests.
+
+2011-04-19 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: prefer AM_TESTS_ENVIRONMENT to TESTS_ENVIRONMENT
+ * tests/Makefile.am (TESTS_ENVIRONMENT): Renamed to ...
+ (AM_TESTS_ENVIRONMENT): ... this.
+
+2011-04-18 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: don't allow `$me' to be overridden from the environment
+ * tests/defs.in: Sanity check: abort if $me is in the environment.
+ * tests/self-check-me-in-env.test: New test.
+ * tests/Makefile.am (TESTS_ENVIRONMENT): Unset variable `me'.
+ (TESTS): Update.
+ Suggestion by Ralf Wildenhues.
+
+2011-04-18 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ check: rename AM_TESTS_SETUP -> AM_TESTS_ENVIRONMENT
+ The AM_TESTS_SETUP naming was not a good one after all. It may
+ be technically more correct than AM_TESTS_ENVIRONMENT, but the
+ latter is a better one simply because it is easier to remember,
+ and even if you've never heard of it and only know the semantics
+ of TESTS_ENVIRONMENT, you can have a straightforward way to
+ figure out how AM_TESTS_ENVIRONMENT would work.
+ * tests/check.am (am__check_pre): Update.
+ * doc/automake.in (Simple Tests using parallel-tests): Update.
+ * tests/parallel-tests-am_tests_setup.test: Renamed ...
+ * tests/parallel-tests-am_tests_environment.test: ... to this,
+ and updated.
+ * tests/Makefile.am (TESTS): Update.
+ Suggestion and motivation by Ralf Wildenhues.
+
+2011-04-17 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ test defs: allow overriding of `$me'
+ * tests/defs.in ($me): Allow overriding by the including test
+ script. Add some explicative comments.
+
+2011-04-17 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ coverage: more tests on the parallel-tests driver
+ * tests/parallel-tests-interrupt.test: New test.
+ * tests/parallel-tests-reset-term.test: Likewise.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-04-17 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ check: new developer-reserved AM_TESTS_SETUP variable
+ For reference, see the discussion at:
+ <https://lists.gnu.org/archive/html/automake-patches/2011-01/msg00213.html>
+ * lib/am/check.am [%?PARALLEL_TESTS%] (am__check_pre): Pass also
+ $(AM_TESTS_SETUP). Comments updated, and some typos fixed.
+ * doc/automake.texi (Simple Tests using parallel-tests): Document
+ AM_TESTS_SETUP. Reorder some of the existing documentation a bit.
+ * tests/parallel-tests-am_tests_setup.test: New test.
+ From a suggestion by Ralf Wildenhues.
+
+2011-04-17 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ depcomp tests: don't reject slower dependency extractors
+ * tests/depcomp8b.test: Add the `--enable-dependency-tracking'
+ option to `configure' invocations, so that slower dependency
+ extractors are not rejected.
+ * tests/depcomp8a.test: Likewise. Also ...
+ (foo.c): ... since we are at it, fix spacing to be consistent
+ with GNU coding standards.
+
+2011-04-17 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ m4: add missing serial numbers to a few files
+ Fixes automake bug#8483.
+ * m4/amversion.in: Add serial number.
+ * m4/auxdir.m4: Likewise.
+ * m4/gcj.m4: Likewise.
+ * m4/install-sh.m4: Likewise.
+ * m4/mkdirp.m4: Likewise.
+ * m4/python.m4: Likewise.
+ * m4/runlog.m4: Likewise.
+ * m4/strip.m4: Likewise.
+ * m4/upc.m4: Likewise.
+
+2011-04-16 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix few bugs in self checks
+ Related to automake bug#8508.
+ * tests/self-check-cleanup.test: Be laxer when grepping output
+ from `ls -l', to account for ACLs and SELinux-only files.
+ * tests/self-check-dir.test: Source `defs-static' to read in the
+ correct definition for $SHELL.
+ * tests/self-check-me.test: Likewise, and extend a bit.
+ Report from Jim Meyering.
+
+2011-04-16 Jim Meyering <meyering@redhat.com>
+
+ depcomp: correct invalid sed invocation
+ * lib/depcomp: Insert missing -e before '/:$/d'.
+ Otherwise, that use of sed would treat '/:$/d' as a file name.
+
+2011-04-14 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ maintainer check: quote literal `$' in Makefile rule
+ * Makefile.am (sc_tests_PATH_SEPARATOR): Escape literal `$'
+ character in double-quoted string. Fix a bug in which the rule
+ emitted an erroneously empty substring in its error message.
+
+2011-04-14 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix typo in python5b.test
+ * tests/python5b.test: Remove extra `:' from $PATH redefinition.
+
+2011-04-12 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ lex/yacc tests: remove redundant $distdir definition
+ * tests/lex3.test ($distdir): Remove definition, that's already
+ done in `tests/defs'.
+ * tests/lexvpath.test: Likewise.
+ * tests/yacc-basic.test: Likewise.
+ * tests/yacc-cxx.test: Likewise.
+ * tests/yacc-d-basic.test: Likewise.
+ * tests/yacc-d-cxx.test: Likewise.
+ * tests/yacc-d-vpath.test: Likewise.
+ * tests/yacc-dist-nobuild-subdir.test: Likewise.
+ * tests/yacc-dist-nobuild.test: Likewise.
+ * tests/yacc-mix-c-cxx.test: Likewise.
+ * tests/yaccvpath.test: Likewise.
+
+2011-04-14 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: remove redundant settings of `errexit' shell flag
+ * tests/autodist-acconfig.test: Do not set the `errexit'
+ shell flag, as it is already set by `tests/defs'.
+ * tests/autodist-acconfig-no-subdir.test: Likewise.
+ * tests/autodist-aclocal-m4.test: Likewise.
+ * tests/autodist-config-headers.test: Likewise.
+ * tests/autodist-configure-no-subdir.test: Likewise.
+ * tests/autodist-stamp-vti.test: Likewise.
+ * tests/autodist-subdir.test: Likewise.
+ * tests/autodist.test: Likewise.
+ * tests/check-exported-srcdir.test: Likewise.
+ * tests/check-tests-in-builddir.test: Likewise.
+ * tests/check-tests_environment.test: Likewise.
+ * tests/help-python.test: Likewise.
+ * tests/java-check.test: Likewise.
+ * tests/java-extra.test: Likewise.
+ * tests/java-noinst.test: Likewise.
+ * tests/lex-subobj-nodep.test: Likewise.
+ * tests/ltinit.test: Likewise.
+ * tests/m4-inclusion.test: Likewise.
+ * tests/maintclean-vpath.test: Likewise.
+ * tests/parallel-tests-subdir.test: Likewise.
+ * tests/pr8365-remake-timing.test: Likewise.
+ * tests/python-dist.test: Likewise.
+ * tests/python-vars.test: Likewise.
+ * tests/python-virtualenv.test: Likewise.
+ * tests/python5b.test: Likewise.
+ * tests/specflg-dummy.test: Likewise.
+ * tests/yacc-dist-nobuild-subdir.test: Likewise.
+
+2011-04-12 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ test defs: define default $distdir (help reducing duplication)
+ * tests/defs ($distdir): New variable, might be used in
+ testcases checking distribution-related features.
+ * tests/pr9.test: Use it.
+ * tests/subdir9.test: Likewise.
+ * tests/lex3.test: Likewise.
+ * tests/lexvpath.test: Likewise.
+ * tests/remake-moved-m4-file.test: Likewise.
+ * tests/remake-renamed-m4-file.test: Likewise.
+ * tests/remake-renamed-m4-macro-and-file.test: Likewise.
+ * tests/yacc-basic.test: Likewise.
+ * tests/yacc-d-basic.test: Likewise.
+ * tests/yacc-d-vpath.test: Likewise.
+ * tests/yacc-dist-nobuild.test: Likewise.
+ * tests/vtexi3.test: Add comment explaining why we redefine
+ $distdir in this test.
+
+2011-04-14 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ coverage: test lex-generated "#line" directives postprocessing
+ * tests/yacc-line.test: In heading comments, add reference to new
+ sister test `lex-line.test'.
+ * tests/lex-line.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-04-14 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: minor improvements to a couple of yacc tests
+ * tests/yacc-auxdir.test: Avoid running autoconf, it's not
+ needed.
+ * tests/yacc-line.test: Also check that the yacc-generated C
+ and header files do not contain "#line" directives referencing
+ `y.tab.c' or `y.tab.h'. Add a couple of explicative comments.
+
+2011-04-11 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: split yacc6.test, for better separation and coverage
+ * tests/yacc6.test: Test removed, its content extended and split
+ into ...
+ * tests/yacc-auxdir.test, tests/yacc-depend.test,
+ tests/yacc-line.test: ... these new tests.
+ * tests/yacc-depend2.test: New test, exposes the failure that
+ FreeBSD used to encounter in yacc6.test.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-04-11 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: do not uselessly require GNU make or gcc in a few tests
+ * tests/lex3.test: Remove gcc from requirements, as any working C
+ compiler should be ok. Consequently, do not clobber user CFLAGS.
+ Also, remove GNUmake from requirements; it was added (see commit
+ `Release-1-8-103-g0d2f592') because this test fails with FreeBSD
+ make due to VPATH issues -- but so do many other yacc-related and
+ lex-related tests currently, and requiring GNU make in all of
+ them would unacceptably reduce coverage.
+ * tests/lexvpath.test: Remove gcc from requirements, as any
+ working C compiler should be ok.
+ * tests/yacc4.test: Likewise.
+ * tests/yacc8.test: Likewise.
+ * tests/lex5.test: Likewise. Also, do not require anymore GNU
+ make; to compensate, explicitly call "$MAKE Makefile" to update
+ the out-of-date Makefile if $MAKE is not GNU make.
+
+2011-04-12 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failure in test 'yacc-d-cxx.test'
+ * tests/yacc-d-cxx.test: Create ylwrap script before calling
+ automake for the first time, so that the script gets correctly
+ distributed. Add checks verifying it indeed is.
+
+2011-04-12 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests cosmetics: remove redundant definitions of variable $tab
+ * tests/yacc-d-basic.test ($tab): Remove definition: it's already
+ defined in `tests/defs'.
+ * tests/yacc-d-cxx.test: Likewise.
+
+2011-04-12 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ yacc: add some tests on bison support (still xfailing)
+ Related to automake bug#7648 and PR automake/491.
+ * tests/bison-skeleton-cxx.test: New test.
+ * tests/bison-skeleton.test: New test.
+ * tests/Makefile.am (TESTS, XFAIL_TESTS): Updated.
+
+2011-04-12 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ coverage: test for automake bug#8485 (known regression)
+ * tests/yacc-dist-nobuild-subdir.test: New test.
+ * tests/Makefile.am (TESTS, XFAIL_TESTS): Update.
+
+2011-04-10 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ coverage: test mixed C/C++ yacc-generated parsers in the same dir
+ * tests/yacc-mix-c-cxx.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-04-10 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ cosmetics: fix typos and wording in some yacc tests
+ * tests/yacc-cxx.test (foo.cc): Clarify comment about the content
+ of this file being valid C++ but invalid C.
+ (parse1.yy): Likewise. Also, remove redundant parentheses in a
+ `return' statement.
+ * tests/yacc-d-cxx.test (write_parse): Clarify comment about the
+ content of the generated files being valid C++ but invalid C.
+ (write_main): Likewise.
+ * tests/yacc-basic.test: Remove redundant parentheses in a
+ `return' statement.
+ * tests/yacc-d-vpath.test: Adjust spacing around curly brackets.
+ * tests/yaccvpath.test: Likewise.
+ * tests/yaccdry.test: Likewise.
+ * tests/yacc8.test: Likewise.
+ * tests/yacc4.test: Likewise.
+ Suggested by Ralf Wildenhues.
+
+2011-04-10 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ yacc: update NEWS and docs about yacc-generated headers extensions
+ * doc/automake.texi (Yacc and Lex): Document explicitly that
+ extensions of yacc-generated headers are modelled after the
+ extension of the corresponding sources.
+ * NEWS: Update.
+
+2011-01-28 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ yacc: extension of headers modelled after extension of sources
+ With this change, if '-d' is in *YFLAGS, a yacc input file named
+ foo.y++ will cause a foo.h++ header to be generated, instead of a
+ foo.h header. Similarly for foo.ypp, foo.yxx and foo.yy.
+ This way, the name of the files generated by an automake-created
+ `ylwrap' invocation should be consistent with those generated by
+ a `bison -o' call.
+ Related to automake bug#7648 and PR automake/491.
+ * lib/am/yacc.am (am__yacc_c2h): New internal variable.
+ (?GENERIC?%EXT%%DERIVED-EXT%, ?!GENERIC?%OBJ%): Get the name of
+ the header dynamically at make runtime, so that its extension is
+ modelled after the extension of the source.
+ * automake.in (lang_yacc_target_hook): Adjust the calculation of
+ `$header' accordingly.
+ * tests/yacc-cxx.test: New test.
+ * tests/yacc-d-cxx.test: Likewise.
+ * tests/yacc-weirdnames.test: Likewise.
+ * tests/yacc-basic.test: Update comments.
+ * tests/yacc-d-basic.test: Likewise.
+ * tests/yaccpp.test: Updated and extended.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-01-29 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: don't define YACC and LEX in the Makefiles
+ We don't want YACC and LEX defined as make variables, otherwise
+ the values determined at configure time will override those from
+ the environment, even in the make-spawned testcases. For example,
+ before this change, with the following usage:
+ $ ./configure YACC=yacc
+ $ export YACC='bison -y'
+ $ make check
+ the testsuite would have ended up, very counterintuitively, with
+ YACC defined to 'yacc' in the testcases' environment.
+ * configure.ac: Call `AM_SUBST_NOTMAKE' on YACC and LEX.
+
+2011-01-29 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failures in lflags*.test
+ * tests/lflags.test: Remove 'LEX' from the environment, so
+ that it won't be erroneously picked up by `make -e'.
+ * tests/lflags2.test: Likewise.
+
+2011-01-29 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ coverage: more on 'yacc -d' and recovery from deleted headers
+ * tests/yacc-deleted-headers.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-01-29 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: remove redundancy from silent lex/yacc tests
+ * tests/silent-yacc-gcc.test, tests/silent-yacc-generic.test: Merge
+ these two testcases into ...
+ * tests/silent-yacc.test: ... this new one, which doesn't fiddle
+ which dependency tracking, as that shouldn't impact on generation
+ of yacc-derived C source and header files (and, for what concerns
+ compilation of C files, is already tested in other testcases).
+ * tests/silent-lex-gcc.test, tests/silent-lex-generic.test: Merge
+ these two testcases into ...
+ * tests/silent-lex.test: ... this new test, for similar reasons.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-01-29 Stefano Lattarini <stefano.lattarini@gmail.com>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ tests init: better messages for 'yacc' and 'lex' requirements
+ * tests/defs.in: Give better diagnostic messages when a test must
+ be skipped to the unavailability of yacc or lex program. Also,
+ improve syncing between code for requiring yacc and lex.
+
+2011-01-28 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ configure: look for a lex program to be used by the testsuite
+ This will allow the testcases requiring a 'lex' program to run also
+ with vendor/legacy lex implementations, not only with 'flex'.
+ * configure.ac: Look for a lex program, using AC_CHECK_PROGS.
+ * tests/defs.in: New required entry 'lex'.
+ ($LEX): Let the user override the lex program to be used by the
+ testsuite.
+ * tests/cond35.test ($required): Require 'lex', not 'flex'.
+ * tests/cond36.test: Likewise.
+ * tests/lexv3.test: Likewise.
+ * tests/lexv3.test: Likewise.
+ * tests/silent-lex-gcc.test: Likewise.
+ * tests/silent-lex-generic.test: Likewise.
+ * tests/silent-many-gcc.test: Likewise.
+ * tests/silent-many-generic.test:likewise.
+ * tests/lexvpath.test: Likewise, and fix typo in comments.
+
+2011-01-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ configure: look for a yacc program to be used by the testsuite
+ Instead of forcing the user to manually export 'YACC' in the
+ testsuite to use a non-bison yacc, we now look for a yacc program
+ at configure time, and use that as the default in the testsuite.
+ * configure.ac: Look for a yacc program, using AC_CHECK_PROGS.
+ * tests/defs.in: Updated to use the value of $YACC precomputed by
+ configure, unless the user overrides that in the environment.
+
+2011-01-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: more coverage on yacc/lex silent-rules, plus minor cleanups
+ * tests/silent-yacc-gcc.test: Add sanity checks verifying that the
+ generated Makefile.in files really contains the non-generic rules
+ we expect. Do not redundantly manually remove files we know to be
+ already removed "make maintainer-clean".
+ (Makefile.am): Ensure we cover also non-generic yacc rules, by
+ setting target-specific YFLAGS.
+ (sub/Makefile.am): Likewise.
+ * tests/silent-yacc-generic.test: Likewise.
+ * tests/silent-lex-gcc.test: Likewise, but with LFLAGS instead of
+ YFLAGS.
+ * tests/silent-lex-generic.test: Likewise.
+ * tests/silent-many-gcc.test: Likewise, but with both LFLAGS and
+ YFLAGS. Also ...
+ (do_and_check_verbose_build): Remove redundant blank line.
+ * tests/silent-many-generic.test: Likewise.
+ * tests/silent-yacc-headers.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-01-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failures in yflags*.test
+ * tests/yflags.test: Remove 'YACC' from the environment, so
+ that it won't be erroneously picked up by `make -e'.
+ * tests/yflags2.test: Likewise.
+
+2011-01-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: cover yacc target-specific flags, and `-v' flag handling
+ * tests/yacc-basic.test: Also try to build a parser having `-v'
+ as target-specific flags. Add a couple of `ls -l' commands, for
+ debugging. Update and extend comments. Escape literal dots in
+ grep regular expressions.
+
+2011-01-12 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ docs: clustered '-d' not recognized in YFLAGS
+ This change fixes automake bug#7828.
+ * doc/automake.texi (Yacc and Lex): Document that automake
+ recognizes '-d' in AM_YFLAGS only if it's not clustered with
+ other options.
+ From a report by Юрий ПухальÑкий.
+
+2011-01-11 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: do not force yacc-requiring tests to use bison
+ * tests/defs.in: New required entry 'yacc'. Remove old
+ required entry 'bison'.
+ * tests/cond35.test ($required): Require yacc, not bison.
+ * tests/cond36.test: Likewise.
+ * tests/pr204.test: Likewise.
+ * tests/silent-many-gcc.test: Likewise.
+ * tests/silent-many-generic.test: Likewise.
+ * tests/silent-yacc-gcc.test: Likewise.
+ * tests/silent-yacc-generic.test: Likewise.
+ * tests/subpkg.test: Likewise.
+ * tests/suffix10.test: Likewise.
+ * tests/yacc-basic.test: Likewise.
+ * tests/yacc-clean.test: Likewise.
+ * tests/yacc-d-basic.test: Likewise.
+ * tests/yacc-d-vpath.test: Likewise.
+ * tests/yacc-dist-nobuild.test: Likewise.
+ * tests/yacc-nodist.test: Likewise.
+ * tests/yacc4.test: Likewise.
+ * tests/yacc6.test: Likewise.
+ * tests/yacc7.test: Likewise.
+ * tests/yacc8.test: Likewise.
+ * tests/yaccdry.test: Likewise.
+ * tests/yaccvpath.test: Likewise.
+
+2011-01-10 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ yacc: warn about conditional content in *YFLAGS variables
+ This change fixes automake bug#7804.
+ * automake.in (lang_yacc_target_hook): Warn if any of the relevant
+ *YFLAGS variables has conditional contents (not only a conditional
+ definition). Related refactoring.
+ * NEWS: Updated.
+ * tests/yflags-conditional.test: Updated and extended.
+ * tests/yflags-conditional-force.test: New test.
+ * tests/Makefile.am (TESTS): Updated.
+
+2011-01-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ yacc: support variable expansions in *YFLAGS definition.
+ This change fixes automake bug#7800.
+ * automake.in (lang_yacc_target_hook): Use 'value_as_list_recursive'
+ instead of 'variable_value' to get the value of *YFLAGS variables.
+ Related changes.
+ ($DASH_D_PATTERN): Removed.
+ * tests/Makefile.am (XFAIL_TESTS): Remove yflags-var-expand.test.
+ * tests/yacc-clean.test: Remove workaround for now-fixed bug.
+ * NEWS: Update.
+
+2011-01-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ yacc: more tests on *YFLAGS support
+ * tests/yflags-var-expand.test: New test, still xfailing. It
+ exposes automake bug#7800 -- "automake fails to honor `-d' in
+ AM_YFLAGS when variable expansions are involved".
+ * tests/yflags-d-false-positive.test: New test, checking that
+ automake do not spuriously see `-d' in *YFLAGS when that isn't
+ really there.
+ * tests/yflags-force-override.test: New test, checking that
+ automake can cope with definition of the YFLAGS variable in
+ Makefile.am (even if that is an extremely bad practice, as that
+ variable is user-reserved).
+ * tests/yflags-cmdline-override.test: New test, checking that
+ automake can cope with user-redefinition of YFLAGS at configure
+ time and/or at make time.
+ * tests/yflags-conditional.test: New test, checks that automake
+ warns on conditionally-defined *YFLAGS variables.
+ * tests/Makefile.am (TESTS, XFAIL_TESTS): Update.
+
+2011-01-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ yacc: extend and improve tests
+ * tests/yacc-basic.test: Also check that the intermediate C file
+ is mentioned in the generated Makefile.in, and that it is created
+ by the first make invocation.
+ * tests/yacc3.test: Test removed, superseded by ...
+ * tests/yacc-d-basic.test: ... this new test.
+ * tests/yacc2.test: Add reference to that new test in the heading
+ comments.
+ * tests/yacc-d-vpath.test: New test.
+ * tests/yaccvpath.test: Updated heading comments. Do not require
+ gcc anymore, as any working C compiler should be enough. Remove
+ redundant comments.
+ * tests/yacc-nodist.test: New test.
+ * tests/yacc-dist-nobuild.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+
+2010-12-13 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Extend, fix and improve tests on Lex and Yacc support.
+ * tests/lexcpp.test: New test script, on support for Lex + C++.
+ * tests/lexvpath.test: New test script, test build and rebuild
+ rules for lexers in VPATH setup.
+ * tests/yacc-basic.test: New test script, run simple "semantic"
+ checks on basic Yacc support (similarly to what lex3.test does
+ for Lex support).
+ * tests/lex.test: Don't create useless dummy source file joe.l.
+ Remove extra blank lines.
+ * tests/lex4.test: Add trailing `:' command. Do not create dummy
+ useless lex source file.
+ * tests/lex2.test: Likewise. Call automake with the `-a' option,
+ so that it doesn't fail for the absence of `ylwrap' script. Make
+ grepping of automake stderr stricter.
+ * tests/yacc7.test: Add trailing `:' command. Enable `errexit'
+ shell flag earlier (just after having sourced ./defs).
+ * tests/yacc4.test: Likewise. Also ...
+ (configure.in): Use pre-populated skeleton set up by ./defs,
+ instead of writing one from scratch.
+ Other minor cosmetic changes.
+ * tests/yacc5.test: Likewise.
+ * tests/yaccvpath.test: Likewise. Also ...
+ ($distdir): New variable.
+ Use it throughout.
+ * tests/lex5.test: Likewise.
+ * tests/lex3.test: Likewise. Check the distdir, rather than
+ grepping the distribution tarball. Extend the test on the
+ created binary, and be sure to avoid hangs. Add some comments.
+ * tests/yacc.test: Use stricter grepping. Add trailing `:'.
+ * tests/yacc6.test: Likewise.
+ * tests/yacc3.test: Likewise. Do not create the unused file
+ `Makefile.sed'. Remove useless rules from Makefile.am. Other
+ minor cosmetic changes.
+ * tests/yacc2.test: Make grepping of generated `Makefile.in' and
+ of automake error messages stricter. Do not redirect output of
+ grep to /dev/null. Move call to aclocal earlier. Reduce the
+ number of empty blank lines. Fix a typo in comments.
+ * tests/yacc8.test: Fixed bugs that reduced the completeness of
+ the tests. Added trailing `:' command.
+ (configure.in): Use pre-populated skeleton set up by ./defs,
+ instead of writing one from scratch.
+ * tests/yaccpp.test: Test also extensions `.y++', `.ypp', and
+ `.yxx', rather than only `.yy'.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-01-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ yacc: "make clean" removes .c and .h files from non-distributed .y
+ Previously, while automake did *not* distribute C source and header
+ files derived from non-distributed Yacc sources, it still caused
+ them to be removed only by "make maintainer-clean" only, and not by
+ simply "make clean" or "make distclean".
+ This caused "make distcheck" to fail, unless the developer put
+ those generated .c and .h files in CLEANFILES or in DISTCLEANFILES
+ by hand.
+ This change fixes this issue, by making non-distributed `.c' and
+ `.h' files generated by non-distributed Yacc sources cleaned by
+ "make clean".
+ * tests/automake.in (lang_yacc_target_hook): Make C source and
+ header files derived from non-distributed Yacc files cleaned by
+ "make clean", not only by "make maintainer-clean".
+ * tests/yacc-clean.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+ * NEWS: Update.
+
+2011-04-11 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ depcomp: fix bugs in tests and in the depcomp script
+ * lib/depcomp (gcc): Remove duplicated `-e' from sed invocation.
+ * tests/depcomp10.test: Make it executable. Fix a blunder that
+ has left part of an intended comment not prefixed by `#', thus
+ causing shell syntax errors. In this same comment, break a
+ too-long reported error message on multiple lines, for clarity.
+ Add reference to the relevant bug report. Add a comment which
+ explains why the test result 'skipped' if the first "make" call
+ fails. Add other useful comments.
+ * tests/depcomp9.test: Slightly improve comments.
+
+2011-04-11 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix hp depmode for VPATH builds with GNU make.
+ * lib/depcomp: Be sure to remove VPATH-prefixed object from
+ dependency output when creating stub rule.
+ * tests/depcomp10.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+ * NEWS: Update.
+ Report by Bruno Haible.
+
+2011-04-18 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ java: allow both dist_JAVA and nodist_JAVA in the same Makefile.am
+ Fixes automake bug#8434.
+ * automake.in (handle_java): Strip `dist_' and `nodist_' from
+ the given prefix. Define a new internal Makefile variable
+ `am__java_sources'. Related adjustments.
+ * lib/am/java.am (JAVAC, JAVAROOT, CLASSPATH_ENV): Define only the
+ first time this am file is processed.
+ (class%DIR%.stamp): Stamp file renamed ...
+ (class%NDIR%.stamp): ... to this, so that the `dist_' and `nodist_'
+ prefixes are stripped from the name of the stampfile. Adjust
+ declaration of dependencies by using the new automake-generated
+ internal variable `$(am__java_sources)'. In the rule, use `$@'
+ as the name of the target, rather than hard-coding it.
+ * tests/java.test: Update and extend.
+ * tests/java-no-duplicate.test: New test.
+ * tests/java-mix-dist-nodist.test: Likewise.
+ * tests/java-compile-and-install.test: Likewise.
+ * tests/java-clean.test: Likewise.
+ * tests/java-sources.test: Likewise.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-04-06 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ coverage: more on java support EXTRA_ and noinst_ prefixes
+ * tests/java-extra.test: New test, checking support for the
+ prefix `EXTRA_' with the JAVA primary.
+ * tests/java-noinst.test: New test, checking support for the
+ prefix `noinst_' with the JAVA primary.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-04-10 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ test defs: fix 'javac' requirement for older JDK versions
+ The Java compiler from JDK 1.5 (and presumably earlier versions)
+ cannot handle the `-version' option by itself; and while it does
+ print the version number, it then errors out with an usage error:
+ $ javac -version
+ javac 1.5.0_22
+ javac: no source files
+ Usage: javac <options> <source files>
+ ...
+ Luckily, adding the `-help' option to the `javac' invocation
+ seems to fix this problem.
+ * tests/defs.in (javac): Pass also the `-help' option to the
+ `javac' program. Add a comment explaining why it is needed.
+ Report from Ralf Wildenhues.
+
+2011-04-10 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ test defs: new requirement for the default java compiler
+ * tests/defs.in (for tool in $required): New requirement 'javac'.
+ * tests/java.test: Use it instead of ad-hoc configure check.
+ * tests/java-check.test: Likewise.
+ * tests/java-extra.test: Likewise.
+ * tests/java-noinst.test: Likewise.
+ * tests/instfail-java.test: Likewise.
+ * tests/instdir-java.test: Likewise.
+
+2011-04-09 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ java: check_JAVA does not cause compilation by "make all" anymore
+ Fixes automake bug#8234.
+ * automake.in (handle_java): Make stamp of class files built from
+ java sources in $(check_JAVA) a dependency of `check' target, not
+ `all' target.
+ * tests/java-check.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+ * NEWS: Update.
+ * THANKS: Update.
+ Report from Petteri Räty.
+
+2011-04-09 Stefano Lattarini <stefano.lattarini@gmail.com>
+ Bruno Haible <bruno@clisp.org>
+
+ coverage: add tests on remake rules in more complex situations
+ * tests/defs (using_gmake): New function.
+ (for tool in $required): Use it when $tool is 'GNUmake'.
+ * tests/remake-moved-m4-file.test: New test.
+ * tests/remake-deleted-m4-file.test: Likewise.
+ * tests/remake-renamed-m4-file.test: Likewise.
+ * tests/remake-renamed-m4-macro-and-file.test: Likewise.
+ * tests/remake-renamed-m4-macro.test: Likewise.
+ * tests/remake-add-acsubst-gnulib.test: Likewise.
+ * tests/remake-add-header-gnulib.test: Likewise.
+ * tests/remake-remove-header-gnulib.test: Likewise.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-04-09 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ typofix in 'tests/defs'
+ * tests/defs: Fix typo (`itslef' instead of `itself') in
+ comments.
+
+2011-04-09 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Clarify regex code in depcomp.
+ * lib/depcomp: Add comment why we don't need regex-escaping here.
+ Suggested by Stefano Lattarini.
+
+2011-04-08 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix makedepend depmode for VPATH builds.
+ * lib/depcomp [makedepend]: Remove any VPATH prefix from the
+ object file name, so a rebuild doesn't attempt to update the
+ .Po files in the source tree.
+ * tests/depcomp9.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+ * NEWS: Update.
+
+2011-04-02 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix timestamp-related failures
+ Fixes automake bug#8365.
+ * tests/aclocal6.test: Sleep before modifying m4 files that should
+ trigger remake rules. Remove incorrect/obsoleted comments.
+ * tests/subdir5.test: Likewise, and extend a bit.
+ * tests/subdir8.test: Likewise.
+ * tests/pr8365-remake-timing.test: New xfailing test.
+ * tests/Makefile.am (TESTS): Update.
+ Report from Sam Steingold.
+
+2011-04-02 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Create subdirs for generated sources even when not dep tracking.
+ * automake.in (handle_single_transform): If $object is derived
+ and lands in subdir, be sure to output a dirstamp dependency.
+ * tests/yacc5.test: Avoid falsely matching the dirstamp
+ dependency when grepping for a rule.
+ * tests/lex-subobj-nodep.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+ * THANKS: Update.
+ Report by Ignacy Gawedzki.
+
+ Fix locale issue in check-exported-srcdir.test.
+ * tests/check-exported-srcdir.test: Reformulate glob to not fail
+ in a locale that ignores or interleaves character case.
+
+2011-04-01 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ docs: better visibility for aclocal in the index
+ * doc/automake.texi (@menu): Rename title for entry 'configure'
+ from "Scanning configure.ac or configure.in" to the more precise
+ "Scanning configure.ac, using aclocal".
+ (@detailmenu): Adjust.
+ (@node configure): Adjust, and extend @cindex calls accordingly.
+ * THANKS: Update.
+ From a report by Maynard Johnson.
+
+2011-03-30 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: improve tests on "maintainer-clean" target
+ * tests/aclocal6.test: Move checks related to "maintainer-clean"
+ functionalities into ...
+ * tests/maintclean-vpath.test: ... this new test.
+ * tests/maintclean.test: Update heading comments. Extend to also
+ test subdirs. Remove useless disabling of YACC. Fix m4 quoting
+ in configure.in. Add a trailing `:' command. Remove extra blank
+ lines.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-03-21 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ tests: fix unindent to use printf not echo for script.
+ * tests/defs.in: Use printf rather than echo, as the latter may
+ interpret the backslashes in the sed script. Fixes test
+ failures with dash as /bin/sh.
+
+2011-03-17 Stefano Lattarini <stefano.lattarini@gmail.com>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ maintcheck: look for problematic names of testcases
+ The configure.in stub created by default by `tests/defs' obtains
+ the first argument of AC_INIT from the test name, and this can
+ cause some supported autoconf versions to fail with a spurious
+ error if that test name contains the name of an m4 or m4sugar
+ builtin or macro (e.g., `defn' or `m4_undefine').
+ See for example the bug fixed by commit v1.11-287-g1325a8a.
+ This change add a maintainer check that warns about test names
+ which are possibly problematic in this regard.
+ * Makefile.am (sc_test_names): New maintainer-check target.
+ (syntax_check_rules): Add it.
+ (m4_builtins): New helper variable.
+ (TESTS): Updated according to the following renamings.
+ * tests/include.test: Renamed ...
+ * tests/hdr-vars-defined-once.test: ... to this.
+ * tests/sinclude.test: Renamed ...
+ * tests/m4-inclusion.test: ... to this, and simplified
+ accordingly.
+ * tests/include2.test: Renamed ...
+ * tests/dist-included-parent-dir.test: ... to this, for
+ consistency.
+
+2011-03-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix bug in alloca*.test
+ * tests/alloca.test: Make grepping of automake stderr stricter,
+ add a trailing `:' command; also, add AC_PROG_CC to configure.in,
+ and create a dummy alloca.c file, to ensure that we fail for the
+ proper reason.
+ * tests/alloca2.test: Likewise. Also, look for LT_INIT, not
+ AC_PROG_LIBTOOL, in the error message (bug introduced with commit
+ v1.11-315-gd51e7b7 "libtool: suggest LT_INIT if LTLIBRARIES
+ primary is used").
+ From a report by Patrick Welche.
+
+2011-03-17 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ cosmetics: better use of m4 quoting and m4sugar macros
+ * m4/dmalloc.m4: Better use of m4 quoting. Bump serial number.
+ * m4/gcj.m4: Likewise.
+ * m4/init.m4: Likewise.
+ * m4/install-sh.m4: Likewise.
+ * m4/lex.m4: Likewise.
+ * m4/multi.m4: Likewise.
+ * m4/option.m4: Likewise.
+ * m4/python.m4: Likewise.
+ * m4/sanity.m4: Likewise.
+ * m4/cond.m4: Likewise. Also, prefer the m4sugar macro 'm4_if'
+ over the plain m4 macro 'ifelse'.
+ * m4/depend.m4: Likewise.
+
+2011-03-17 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: add test about deprecated use of AC_INIT
+ * tests/deprecated-acinit.test: New test, check that automake
+ and autoconf complain about an old-style AC_INIT call used with
+ a new-style AM_AUTOMAKE_INIT call.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-03-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix bug (comments-in-var-defn.test + autoconf 2.62)
+ * tests/comments-in-var-defn.test: The configure.in stub created
+ by default, which has the AC_INIT first argument obtained by the
+ test name, causes autoconf 2.62 to fail with a spurious error
+ message like: "configure.in:1: error: defn: undefined macro:".
+ Thus, to prevent this, the test is renamed to ...
+ * tests/comments-in-var-def.test: ... this.
+ * tests/Makefile.am (TESTS): Updated.
+
+2011-03-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ cosmetics: convert encoding from ISO-8859 to UTF-8
+ * ChangeLog.03: Convert encoding to UTF-8.
+ * ChangeLog.96: Likewise.
+ * ChangeLog.98: Likewise.
+ * NEWS: Likewise.
+ * TODO: Likewise.
+
+2011-03-01 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: extend checks on the 'unindent' shell function
+ * tests/self-check-unindent.test: Also check that multiple
+ instances of 'unindent' can run in parallel (this was not
+ the case when that function used temporary files).
+
+2011-03-01 Peter Rosin <peda@lysator.liu.se>
+
+ test defs: unindent without temporary file
+ * tests/defs.in (commented_sed_unindent_prog): Commented Sed program
+ that strips the "proper" amount of leading whitespace.
+ (unindent): Lazily strip comments from the above program and use it
+ to unindent without using a temporary file.
+
+2011-02-26 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ libtool: suggest LT_INIT if LTLIBRARIES primary is used
+ When the LTLIBRARIES primary was used, but $(LIBTOOL) wasn't
+ defined, automake suggested to add a call to AC_PROG_LIBTOOL
+ in configure.ac. But that macro is deprecated since Libtool
+ version 1.9b (2004-08-29), in favor of the newer LT_INIT. So
+ suggest the use of this latter macro instead.
+ * lib/Automake/Variable.pm (%_am_macro_for_var): Pair 'LIBTOOL'
+ with 'LT_INIT', not with 'AC_PROG_LIBTOOL'.
+ * tests/libtool4.test: Adjust and extend. Also, add a call to
+ macro AC_PROG_CC in configure.in, to help ensuring that automake
+ does not fail for the wrong reasons.
+ * tests/ltinit.test: New test, ensure that automake's libtool
+ support works with LT_INIT-based interface.
+ Thanks to Jack Kelly for the suggestion.
+
+2011-02-25 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: add testcases sanity-checking the testsuite
+ Helper subroutines, variables and other pieces of code defined
+ in the `tests/defs' and used by many testcases are non-obvious,
+ and tricky to get to work portably; but until now, they weren't
+ tested at all in a clear and self-contained way.
+ This change should remedy to the situation.
+ * tests/self-check-cleanup.test: New test, check removal of
+ temporary test working directory by `./defs'.
+ * tests/self-check-dir.test: New test, check that tests using
+ `./defs' create a proper temporary directory, and run in it.
+ * tests/self-check-exit.test: New test, check that, in case of
+ failing commands, the correct exit status is passed to the exit
+ trap installed by the `./defs' script.
+ * tests/self-check-is_newest.test: New test, checking the
+ `is_newest' subroutine.
+ * tests/self-check-me.test: New test, checking that $me gets
+ defined automatically by `tests/defs' if not set, and that it
+ can be overridden from either the shell or the environment.
+ * tests/self-check-sanity.test: New test, check that the sanity
+ checks performed by the `tests/defs' script works correctly.
+ * tests/self-check-unindent.test: New test, checking the
+ `unindent' subroutine.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-02-20 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: tempdirs with restrictive permissions are cleaned correctly
+ Before this change, the removal of a temporary test directory
+ containing subdirectories with restrictive permissions (such as
+ 'r--r--r--') could fail.
+ * tests/defs: Ensure that all the subdirectories of a temporary
+ test directory have the 'read', 'write' and 'execute' bits set,
+ before trying to remove it with `rm -rf'.
+ * tests/Makefile.am (clean-local-check): Likewise.
+
+2011-02-16 Stefano Lattarini <stefano.lattarini@gmail.com>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ test defs: add subroutine for input unindenting
+ * tests/defs.in (unindent): New subroutine.
+ * tests/instspc-tests.sh: Use it.
+
+2011-02-15 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ python: report the 'PYTHON' influential environment variable
+ * m4/python.m4 (AM_PATH_PYTHON): Call AC_ARG_VAR on PYTHON.
+ * doc/automake.texi (Python): Update and extend.
+ * tests/help-python.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+ * THANKS (Jack Kelly): Update e-mail address.
+ Suggestion by Jack Kelly.
+
+2011-02-10 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests defs: clear TESTS_ENVIRONMENT variable
+ * tests/defs.in (TESTS_ENVIRONMENT): Unset it, so that values
+ from environment won't interfere with the testcases.
+ Suggestion by Ralf Wildenhues.
+
+2011-02-15 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: `instspc-*.test': do not create useless source file
+ * tests/instspc-tests.sh (create_input_data): Do not create
+ unused source file `source2.c'.
+
+2011-02-15 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: optimize `instspc-*.test' for speed
+ After the split of `instspc.test' into various generated tests,
+ the running time of the testsuite has noticeably increased, since
+ all of these new generated tests must run aclocal, autoconf and
+ automake, whereas previously they were run only once (at the
+ beginning of `instspc.test'). But luckily, since the new tests
+ share the same input files for the autotools, this situation can
+ be easily worked around (at the expenses of a slight increase of
+ complexity for the testsuite scaffolding).
+ * tests/instspc-data.test: New helper test, properly calling
+ the `instspc-tests.sh' script to generate input data for the
+ others `instspc-*.test' tests.
+ * tests/Makefile.am (TESTS): Add `instspc-data.test'.
+ ($(instspc_tests:.test=.log)): Depend on its log file.
+ (instspc-data.log): Depend on `instspc-tests.sh'.
+ * tests/instspc-tests.sh: Recognize new action `generate-data',
+ and use it to create hand-written and autotools-generated static
+ files shared by all the `instspc-*.test' tests.
+ When sourced by the `instspc-*.test' tests, use those previously
+ created files instead of recreating them from scratch.
+ (unindent, create_input_data): New subroutines.
+ Some other related changes and refactorings.
+ From a suggestion by Ralf Wildenhues.
+
+2011-02-14 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ python: fix spurious failure in tests
+ * tests/python-vars.test: Ignore cached values from config.site
+ by exporting CONFIG_SITE=/dev/null. Be laxer in matching the
+ expected values of output variables `pythondir' and `pyexecdir',
+ since they can change quite unpredictably among different python
+ installations. Also, avoid "hyping" debugging output, thus
+ offering smaller trace output and more informative diff.
+ Report and suggestions by Ralf Wildenhues.
+ * tests/python-virtualenv.test: Require python, since we call it
+ even after the virtualenv has been deactivated. Ignore cached
+ values from config.site by exporting CONFIG_SITE=/dev/null.
+
+2011-02-06 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: tweak few tests on simple and parallel test drivers
+ * tests/check-exported-srcdir.test: Improve heading comments.
+ * tests/check-tests-in-builddir.test: Likewise. Also, unset the
+ `FOO_EXIT_STATUS' variable, so that any pre-existing value in the
+ environment won't risk to interfere with the test.
+ Suggestions by Ralf Wildenhues.
+
+2011-02-06 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ python: extend and improve tests, fix minor glitches
+ * m4/python.m4 (AM_PATH_PYTHON): Ensure the "checking ..." messages
+ from configure are always complete, even in case of failure. Tiny
+ cosmetic improvement in info/error messages.
+ * tests/python.test: Also check that automake complains if the
+ PYTHON primary is used but the `py-compile' script is not present.
+ Make grepping of generated Makefile.in laxer w.r.t. whitespace.
+ Add trailing `:' command.
+ * tests/python2.test: Remove repeated calls aclocal: they are
+ useless because configure.in is never modified. Make grepping
+ of automake stderr more comprehensive. Remove the pre-existing
+ `py-compile' file before trying to install it with `--add-missing'.
+ Add trailing `:' command.
+ * tests/python3.test: Add trailing `:' command.
+ * tests/python11.test: Likewise.
+ * tests/python4.test: Likewise. Also, try to pass PYTHON config
+ variable to configure from the environment, rather than only from
+ the command line.
+ * tests/python5.test: Ensure that the "checking ..." messages from
+ configure are always complete. Use proper m4 quoting. Add a
+ trailing `:' command.
+ * tests/python6.test: Simplify test logic, by checking for files
+ created by configure rather then grepping its output.
+ * tests/python7.test: Likewise.
+ * tests/python8.test: Also check that `$PYTHON' is meaningfully
+ set in the ACTION-IF-TRUE argument of AM_PATH_PYTHON.
+ * tests/python9.test: Likewise.
+ * tests/python10.test: Add trailing `:' command.
+ (Makefile.am): Declare `disttest' target as `.PHONY', and add
+ an `ls -l' to its recipe, for debugging.
+ * tests/nobase-python.test: In testing "make uninstall" and
+ "make install" results, prefer idioms that make verbose logs
+ more helpful. Remove a couple of lines of dead code. Add a
+ trailing `:' command.
+ * tests/python5b.test: New test, checking that configure performs
+ the check on the python version even when the choice of the python
+ interpreter is forced by the user.
+ * tests/python-dist.test: New test, checking the distribution of
+ *_PYTHON files.
+ * tests/python-vars.test: New test, checking that AM_PATH_PYTHON
+ correctly set all the output variables advertised in the manual.
+ * tests/python-virtualenv.test: New test, checking that python
+ support offered by automake works well with "virtual python
+ environments" created by the `virtualenv' program.
+ * tests/instdir-prog.test: Also check `$(pyexecdir)'. Existing
+ checks made slightly stricter.
+ * tests/instdir-prog.test: Also check `$(pyexecdir)'. Existing
+ * tests/instdir-ltlib.test: Likewise.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-02-01 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ coverage: more tests on simple and parallel test drivers
+ * tests/parallel-tests-subdir.test: New test.
+ * tests/check-exported-srcdir.test: Likewise.
+ * tests/check-tests-in-builddir.test: Likewise.
+ * tests/check-tests_environment.test: Likewise.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-01-29 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failures in lflags*.test
+ * tests/lflags.test: Remove 'LEX' from the environment, so
+ that it won't be erroneously picked up by `make -e'.
+ * tests/lflags2.test: Likewise.
+
+2011-01-24 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ docs: color-tests issues with parallel make
+ * doc/automake.texi (Simple Tests): Document that automatic
+ recognition of a capable terminal attached to stdout can fail
+ with some make implementation when running in parallel mode,
+ thus causing colored test output not to be automatically
+ activated when it should.
+
+2011-01-23 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ coverage: test semantics of "dummy" per-target flags
+ * tests/specflg-dummy.test: New test, ensuring that even "dummy"
+ per-target flags triggers the use of renamed objects.
+ * tests/Makefile.am (TESTS): Update.
+ Suggestion by Ralf Wildenhues.
+
+2011-01-23 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests defs: sanitize IFS
+ * tests/defs ($IFS): Define to <space>, <tab>, <newline>.
+ ($sp): New variable, holding a single whitespace character.
+ ($tab): New variable, holding a tabulation character.
+ ($nl): New variable, holding a newline character.
+
+2011-01-23 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ tests: avoid instspc* failures due to make's whitespace trimming
+ * tests/instspc-tests.sh: Prepend './' when passing the test
+ characters, to avoid leading whitespace characters to be trimmed
+ from macros set from environment variables. Fixes testsuite
+ failures with HP-UX and Tru64/OSF make.
+
+2011-01-22 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ tests: fix VPATH auto-expansion workarounds.
+ * tests/suffix10.test, tests/suffix11.test, tests/suffix12.test,
+ tests/suffix3.test, tests/suffix5.test, tests/suffix8.test:
+ Ensure $< is not surrounded by white space, to prevent Solaris
+ make from applying automatic VPATH text expansion.
+
+ tests: fix VPATH auto-expansion workarounds.
+ * tests/parallel-tests8.test, tests/suffix13.test:
+ Ensure $< is not surrounded by white space, to prevent Solaris
+ make from applying automatic VPATH text expansion.
+
+2011-01-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failures in yflags*.test
+ * tests/yflags.test: Remove 'YACC' from the environment, so
+ that it won't be erroneously picked up by `make -e'.
+ * tests/yflags2.test: Likewise.
+
+2011-01-22 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ tests: avoid fn99*.test failures due to buggy AIX 5.3 cp -R.
+ * tests/fn99.test, tests/fn99subdir.test: Skip if an initial
+ `cp -R' of the subdir tree already fails; AIX 5.3 cp messes
+ up its internal memory when copying this tree.
+
+2011-01-22 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+ Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Add comment to check-TESTS rule working around make 3.80 bug.
+ * lib/am/check.am (check-TESTS): Update comment.
+
+2011-01-20 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ tests: less strict double-colon spy.test again.
+ * tests/spy.test: We know BSD make doesn't invoke more than one
+ double-colon rule, so no need to expose that failure.
+
+2011-01-19 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ install-sh: avoid Tru64 sh `test' operator precedence issues.
+ * lib/install-sh: Protect file names and directory components
+ that consist of `=', `(', `)', or `!'. Move protection as early
+ as possible, to avoid errors such as with Tru64 sh `test -z ='.
+ * tests/instsh2.test: Extend test to cover more possibilities.
+ Fixes 1.12 instspc-equal-install.test failure on Tru64/OSF 5.1.
+
+2011-01-19 Stefano Lattarini <stefano.lattarini@gmail.com>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ docs: automake testsuite doesn't use TESTS_ENVIRONMENT anymore
+ * doc/automake.texi (Simple Tests): Do not claim Automake uses
+ TESTS_ENVIRONMENT for the perl driver. Instead, point to the
+ parallel-tests driver.
+
+2011-01-21 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ tests: check for presence of cscope with redirected input.
+ * tests/defs: Add required test for cscope.
+ Fixes cscope3.test hang with Sun C 5.9 cscope.
+
+ tests: avoid false failure in cygnus-dependency-tracking.test.
+ * tests/cygnus-dependency-tracking.test: Be less restrictive
+ when grepping the compiler error message, GCC 3.4.6 on FreeBSD
+ does not mention an undefined symbol.
+
+2011-01-20 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ tests: revert not turning off errexit in instspc-test.sh
+ * tests/instspc-tests.sh: Turn off errexit while sourcing defs,
+ the scripts might still not be clean.
+
+2011-01-19 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ tests: work around Tru64 sh -e issues for instspc*.test.
+ Apparently, Tru64 sh does not like turning off errexit mode,
+ and gets confused.
+ * tests/defs: Document 'errexit' cleanliness requirement.
+ * tests/defs-static.in: Likewise. Avoid error from command
+ substitution to abort instspc*.test with Tru64/OSF 5.1 sh.
+ * tests/instspc-tests.sh: Drop now-unneeded temporary errexit
+ dropping. Add strategic '|| Exit' to let tests work on Tru64.
+
+2011-01-19 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Allow _AM_DEPENDENCIES to be used later in configure.
+ * m4/depend.m4 (_AM_DEPENDENCIES): Remove a previously existing
+ conftest.dir before recreating it.
+ Fixes bug#7864.
+ Report by Eric Blake, from report by Scott McCreary against M4.
+
+2011-01-18 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ tests: avoid failure on w32 file systems.
+ * tests/parallel-tests-unreadable-log.test: SKIP if file cannot
+ be turned unreadable.
+
+2011-01-17 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ tests: allow double-colon spy.test to work with HP-UX make.
+ * tests/spy.test: Fix comment typos. Ensure prerequisites we
+ do not want to depend on are strictly older than the target.
+ Also test with a target out of date wrt. more than one rule.
+
+2011-01-17 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Avoid local $_ perl variable, for Perl before 5.9.1.
+ * lib/Automake/Options.pm (_process_option_list): Do not
+ lexically localize $_. Fixes bootstrap on AIX 5.1.
+ Bug introduced in commit `v1.11-622-gf90a06c'.
+
+2011-01-16 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: remove useless requirements from cond36.test
+ * tests/cond36.test ($required): Remove.
+ Since we are at it, add a trailing `:' command.
+
+2011-01-16 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ tests: avoid failing command substitution in errexit mode.
+ * tests/vartypo2.test, tests/vartypos.test: Rewrite to not use
+ a command substitution with a nonzero exit status, that causes
+ IRIX and Tru64/OSF sh to fail the whole test.
+
+2011-01-16 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+ Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ parallel-tests: work around Tru64/OSF 5.1 sh read bugs.
+ * lib/am/check.am ($(TEST_SUITE_LOG), recheck, recheck-html):
+ Test file readability before redirecting input from it, to avoid
+ exiting Tru64/OSF 5.1 sh which treats read as special builtin.
+ * tests/parallel-tests-unreadable-log.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+ * NEWS: Update.
+
+2011-01-16 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * NEWS, README: Update copyright years.
+
+2011-01-15 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: hard error in case of internal failures or signal caught
+ * tests/defs: Exit with status 99 (hard error) rather than
+ 1 (failure) on unexpected/internal errors, or when a signal
+ is caught by the client script.
+
+ Tests defs: don't let useless variables leak in test scripts.
+ * tests/defs ($priv_check_temp, $overwrite_status, $ro_dir_temp,
+ $create_status, $r2h, $libtool_found, $gettext_found, $aclocaldir,
+ $extra_includes): Unset once they've served their purpose.
+
+2011-01-16 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix parallel-tests.test failure with HP-UX make.
+ * tests/parallel-tests.test: Sleep inside inner tests, so logs
+ are newer than logs of tests they depend on, for HP-UX make.
+
+2011-01-15 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ docs: ensure example are separated with empty lines in the input
+ * doc/automake.texi (Extending aclocal, Emacs Lisp, Rebuilding)
+ (API Versioning, Renamed Objects, Multiple Outputs): Add empty
+ lines before `@example' and after `@end example' lines, so info
+ output is rendered correctly, and a following @noindent honored.
+ Report by Stefano Lattarini.
+
+2011-01-15 Jim Meyering <meyering@redhat.com>
+
+ tests: fix comment typo
+ * tests/substref.test: Fix grammar in a comment.
+
+2011-01-13 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failures in two texinfo tests
+ * tests/txinfo.test ($required): Add 'makeinfo'.
+ * tests/txinfo8.test: Create a dummy 'textutils.info' file, so
+ that make won't try to run makeinfo (which could be unavailable)
+ to build it.
+ Found by NixOS Hydra, reported by Ralf Wildenhues.
+
+2011-01-15 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Update docs w.r.t. warning and strictness options.
+ * doc/automake.texi (Strictness): Document that some warnings are
+ turned off by default in `foreign' strictness.
+ (Options): Divide into new sections "Options generalities" and
+ "List of Automake options". Fix typo (colon instead of full
+ stop). Document option precedence (AUTOMAKE_OPTIONS wins over
+ AM_INIT_AUTOMAKE which wins over command line). Also document
+ interactions between options specifying strictness and those
+ specifying warnings.
+
+ More tests on warnings/strictness precedence.
+ * tests/warning-groups-win-over-strictness.test: New test, similar
+ to `warnings-win-over-strictness.test', but checking the explicit
+ catch-all warning flags (like `-Wall' and `-Wnone').
+ * tests/Makefile.am (TESTS): Update.
+
+ Update NEWS about the warnings-over-strictness precedence.
+ * NEWS: Automake explicit warning levels always take precedence
+ over the implicit warning levels implied by Automake strictness.
+
+ For PR automake/547:
+ Warnings win over strictness in AUTOMAKE_OPTIONS.
+ Ensure that, for what concerns the options specified in
+ AUTOMAKE_OPTIONS, explicitly-defined warnings always take
+ precedence over implicit strictness-implied warnings.
+ This finally fixes Automake bug#7669 a.k.a. PR/547.
+ * automake.in (handle_options): Call 'process_option_list'
+ only once per set of options.
+ * lib/Automake/Options.pm (process_global_option_list,
+ process_option_list): Add sanity checks.
+ ($_options_processed, $_global_options_processed): New
+ internal variables, used by the sanity checks above.
+ * tests/warnings-win-over-strictness.test: Extend.
+
+ For PR automake/547:
+ Change signature of 'Automake::Options::_process_option_list()'.
+ This only modifies internal details in the automake implementation,
+ bearing no externally visible effect, but preparing the way for the
+ final fix of Automake bug#7669 a.k.a. PR/547.
+ * lib/Automake/Options.pm (_process_option_list): Accept as
+ arguments a list of hash references with keys 'option' and 'where',
+ where 'option' is an option as might occur in AUTOMAKE_OPTIONS or
+ AM_INIT_AUTOMAKE, and 'where' is the location where it occurred.
+ (process_option_list, process_global_option_list): Updated.
+ * automake.in (handle_options, scan_autoconf_traces): Update.
+
+ Add more tests about AUTOMAKE_OPTIONS.
+ In view of soon-to-follow refactorings (still in the pursuit of a
+ fix for Automake bug#7669 a.k.a. PR/547), add some more tests on
+ AUTOMAKE_OPTIONS support, to prevent obvious regressions.
+ * tests/amopts-variable-expansion.test: New test.
+ * tests/amopts-location.test: Likewise.
+ * tests/Makefile.am (TESTS): Update.
+
+ For PR automake/547:
+ Warnings win over strictness in AM_INIT_AUTOMAKE.
+ This change ensures that, for what concerns the options specified
+ in AM_INIT_AUTOMAKE, explicitly-defined warnings always take
+ precedence over implicit strictness-implied warnings. Related to
+ Automake bug#7669 a.k.a. PR/547.
+ * lib/Automake/Options.pm (_process_option_list): Parse explicit
+ warnings only after the strictness level has been set. Fix POD
+ documentation.
+ * tests/warnings-win-over-strictness.test: Extend.
+
+ For PR automake/547:
+ Warnings win over strictness on command line.
+ Ensure that, on the command line at least, explicitly defined
+ warnings always take precedence over implicit strictness-implied
+ warnings. Related to Automake bug#7669 a.k.a. PR/547.
+ * automake.in (parse_arguments): Parse warnings only after the
+ strictness level has been processed.
+ * tests/gnuwarn.test: Update, plus miscellaneous improvements.
+ * tests/warnings-win-over-strictness.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+
+ More tests on warnings and strictness.
+ * tests/warnings-strictness-interactions.test: New test.
+ * tests/warnings-unknown.test: Likewise.
+ * tests/Makefile.am (TESTS): Update.
+
+ New test on silent-rules mode and portability warnings.
+ * tests/silent-nowarn.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+
+ Add new tests on strictness and warnings precedence and overriding.
+ * tests/strictness-override.test: New test.
+ * tests/strictness-precedence.test: New test.
+ * tests/warnings-override.test: New test.
+ * tests/warnings-precedence.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-01-15 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix remake rule-induced test failures with HP-UX make.
+ * tests/remake1a.test: Require GNU make.
+
+2011-01-15 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix remake rule-induced test failures with HP-UX make.
+ * tests/colon6.test: Update timestamp of subdir Makefile, so we
+ do not spuriously invoke the nonexistent toplevel am--refresh
+ rule.
+
+ tests: fix typos in colon6.test
+ * tests/colon6.test: Fix typos.
+
+2011-01-15 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+ Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: explain MSYS setup failure issue, improve test.
+ * tests/defs: Add comment and failure message, improve fail
+ logic.
+
+2011-01-15 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix libobj2.test failure with non-GNU make: define $(AR).
+ * tests/libobj2.test: Ensure $(AR) is suitably defined.
+
+2011-01-15 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ tests: avoid spurious failures due to fork failure in test setup
+ * tests/defs: Ensure $me is always nonempty, to avoid spurious
+ failures on MinGW/MSYS in case the preceding sed command could
+ not be spawned.
+
+ Avoid configure warnings from wait about reused PIDs.
+ * m4/sanity.m4 (AM_SANITY_CHECK): Hide wait stderr output.
+ Fixes spurious failure of depcomp2.test.
+
+2011-01-13 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Avoid testsuite failures due to Autoconf Fortran change.
+ Autoconf v2.68-21-g727ce95 causes AC_F77_LIBRARY_LDFLAGS to
+ require computing the canonical host name. Ensure config.guess
+ and config.sub files are present for respective checks.
+ * tests/compile_f_c_cxx.test: Add stub files.
+ * tests/flibs.test: Likewise.
+ * tests/fort4.test: Use $AUTOMAKE -a for installing files.
+
+2011-01-12 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ docs: clustered '-d' not recognized in YFLAGS
+ This change fixes automake bug#7828.
+ * doc/automake.texi (Yacc and Lex): Document that automake
+ recognizes '-d' in AM_YFLAGS only if it's not clustered with
+ other options.
+ From a report by Юрий ПухальÑкий.
+
+2011-01-10 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: add checks on automatically-distributed files
+ Related to automake bug#7819.
+ * tests/autodist.test: New test.
+ * tests/autodist-subdir.test: Likewise.
+ * tests/autodist-acconfig.test: Likewise.
+ * tests/autodist-acconfig-no-subdir.test: Likewise.
+ * tests/autodist-aclocal-m4.test: Likewise.
+ * tests/autodist-config-headers.test: Likewise.
+ * tests/autodist-configure-no-subdir.test: Likewise.
+ * tests/autodist-stamp-vti.test: Likewise.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-01-11 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: do not force yacc-requiring tests to use bison
+ * tests/defs.in: New required entry 'yacc'. Remove old
+ required entry 'bison'.
+ * tests/cond35.test ($required): Require yacc, not bison.
+ * tests/cond36.test: Likewise.
+ * tests/pr204.test: Likewise.
+ * tests/silent-many-gcc.test: Likewise.
+ * tests/silent-many-generic.test: Likewise.
+ * tests/silent-yacc-gcc.test: Likewise.
+ * tests/silent-yacc-generic.test: Likewise.
+ * tests/subpkg.test: Likewise.
+ * tests/suffix10.test: Likewise.
+ * tests/yacc-basic.test: Likewise.
+ * tests/yacc-clean.test: Likewise.
+ * tests/yacc-d-basic.test: Likewise.
+ * tests/yacc-d-vpath.test: Likewise.
+ * tests/yacc-dist-nobuild.test: Likewise.
+ * tests/yacc-nodist.test: Likewise.
+ * tests/yacc4.test: Likewise.
+ * tests/yacc6.test: Likewise.
+ * tests/yacc7.test: Likewise.
+ * tests/yacc8.test: Likewise.
+ * tests/yaccdry.test: Likewise.
+ * tests/yaccvpath.test: Likewise.
+
+2011-01-11 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: more consistent checks about invalid options
+ * tests/aclocal.test: Grepping of automake stderr for messages
+ reporting invalid options made stricter.
+ * tests/no-outdir-option.test: Likewise. Also, create a dummy
+ `Makefile.am', to ensure that the automake failures are really
+ caused only by unrecognized options.
+ * tests/automake.test: Added trailing `:' command. Removed
+ redundant checks on `--help' and `--version' option (already
+ performed in the test `help*.test').
+
+2011-01-11 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: enable 'errexit' shell flag by default.
+ * tests/defs: Enable `errexit' shell flag (near the end).
+ Removed redundant comment about the enabling of shell traces.
+ * tests/README (Writing test cases): Update, and use nicer
+ formatting in a couple of places.
+ * All tests: Adjusted by removing now-redundant calls to
+ 'set -e'.
+
+2011-01-11 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: work around a texi+cygnus bug causing a spurious XFAIL
+ * tests/txinfo5b.test: New test, like txinfo5.test but calling
+ automake with the `-Wno-override' option to work around a bug
+ in the texinfo + cygnus interaction.
+ * tests/txinfo5.test: Update heading comments.
+ * tests/Makefile.am (TEST): Updated.
+
+2011-01-09 Dave Hart <davehart@gmail.com> (tiny change)
+
+ Fix another typo in Rule.pm comment.
+ * lib/Automake/Rule.pm: Fix typo.
+
+2011-01-09 Peter Rosin <peda@lysator.liu.se>
+
+ Fix another typo in Rule.pm comment.
+ * lib/Automake/Rule.pm: Fix typo.
+
+2011-01-11 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: texinfo unrecognized extensions
+ * tests/txinfo-unrecognized-extension.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+
+ Improve, extend and tweak tests on Texinfo support.
+ * tests/instdir-texi.test: Add a call to `ls -l' after that to
+ `make', for debugging. When looking for required tools, do not
+ redirect the output of "$tool --help" to /dev/null, and do not
+ uselessly run it in a subshell.
+ * tests/txinfo.test: Rewritten to run autoconf, ./configure and
+ make. All checks moved into Makefile.am.
+ * tests/txinfo8.test: Likewise, and modernize the generated
+ configure.in.
+ * tests/txinfo2.test: Moved checks into Makefile.am, and other
+ minor improvements.
+ * tests/txinfo5.test: Enable `errexit' shell flag, and related
+ changes. Add trailing `:' command.
+ * tests/txinfo6.test: Likewise, and make grepping of generated
+ Makefile.in stricter.
+ * tests/txinfo7.test: Enable `errexit' shell flag, and related
+ changes. Add trailing `:' command. Do not add unnecessary stuff
+ to Makefile.am.
+ * tests/txinfo9.test: Verify that more targets which are expected
+ to be generated only once really are. Make grepping less strict,
+ to avoid exposing too much internal details. More minor changes.
+ * tests/txinfo16.test: Add trailing `:'. Prefer cat over echo
+ for appending to configure.in. Updated/fixed heading comments.
+ * tests/txinfo23.test: Likewise, and extended a little by making
+ it check that no info file is created in the $(srcdir).
+ * tests/txinfo24.test: Likewise.
+ * tests/txinfo25.test: Likewise.
+ * tests/txinfo18.test: Add trailing `:'. Prefer cat over echo
+ for appending to configure.in. Also, check that index files are
+ cleaned also by "make clean", not only by "make distclean".
+ * tests/txinfo22.test: Prefer `$me' over hard-coded test name,
+ and added trailing `:' command. This testcase also used to check
+ that automake ignores in-line comments when using variables, but
+ preserves them in the output; these checks (added in commit
+ "Release-1-7f-4-g9177ef8") do not really pertain to this test,
+ so they have been moved ...
+ * tests/comments-in-var-defn.test: ... into this new test.
+ * tests/txinfo4.test: Escape literal dots in grep regexps. Add
+ trailing `:' command.
+ * tests/txinfo29.test: Likewise. Relax grepping of generated
+ Makefile.in w.r.t. whitespaces. Prefer `cat' over `echo' to
+ append to configure.in.
+ * tests/txinfo3.test: Likewise.
+ * tests/vtexi.test: Improve grepping of Makefile.in (sometimes
+ make it stricter, sometimes laxer). Move `set -e' setting just
+ after the inclusion of ./defs. De-uglify a sed command. Other
+ minor cosmetic improvements.
+ * tests/vtexi2.test: Make grepping of Makefile.in stricter. Add
+ trailing `:' command.
+ * tests/vtexi3.test: New test on version.texi support.
+ * tests/vtexi4.test: Likewise.
+ * tests/Makefile.am (TESTS): Updated.
+
+2011-01-11 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failure in 'tests/yflags-conditional.test'
+ * tests/yflags-conditional.test: Filter out message "warnings are
+ treated as errors" from automake stderr, to avoid a false positive
+ when grepping for extraneous warning messages.
+
+2011-01-10 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ yacc: warn about conditional content in *YFLAGS variables
+ This change fixes automake bug#7804.
+ * automake.in (lang_yacc_target_hook): Warn if any of the relevant
+ *YFLAGS variables has conditional contents (not only a conditional
+ definition). Related refactoring.
+ * NEWS: Updated.
+ * tests/yflags-conditional.test: Updated and extended.
+ * tests/yflags-conditional-force.test: New test.
+ * tests/Makefile.am (TESTS): Updated.
+
+2011-01-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ yacc: support variable expansions in *YFLAGS definition.
+ This change fixes automake bug#7800.
+ * automake.in (lang_yacc_target_hook): Use 'value_as_list_recursive'
+ instead of 'variable_value' to get the value of *YFLAGS variables.
+ Related changes.
+ ($DASH_D_PATTERN): Removed.
+ * tests/Makefile.am (XFAIL_TESTS): Remove yflags-var-expand.test.
+ * tests/yacc-clean.test: Remove workaround for now-fixed bug.
+ * NEWS: Update.
+
+2011-01-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ yacc: more tests on *YFLAGS support
+ * tests/yflags-var-expand.test: New test, still xfailing. It
+ exposes automake bug#7800 -- "automake fails to honor `-d' in
+ AM_YFLAGS when variable expansions are involved".
+ * tests/yflags-d-false-positive.test: New test, checking that
+ automake do not spuriously see `-d' in *YFLAGS when that isn't
+ really there.
+ * tests/yflags-force-override.test: New test, checking that
+ automake can cope with definition of the YFLAGS variable in
+ Makefile.am (even if that is an extremely bad practice, as that
+ variable is user-reserved).
+ * tests/yflags-cmdline-override.test: New test, checking that
+ automake can cope with user-redefinition of YFLAGS at configure
+ time and/or at make time.
+ * tests/yflags-conditional.test: New test, checks that automake
+ warns on conditionally-defined *YFLAGS variables.
+ * tests/Makefile.am (TESTS, XFAIL_TESTS): Update.
+
+2011-01-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ yacc: extend and improve tests
+ * tests/yacc-basic.test: Also check that the intermediate C file
+ is mentioned in the generated Makefile.in, and that it is created
+ by the first make invocation.
+ * tests/yacc3.test: Test removed, superseded by ...
+ * tests/yacc-d-basic.test: ... this new test.
+ * tests/yacc2.test: Add reference to that new test in the heading
+ comments.
+ * tests/yacc-d-vpath.test: New test.
+ * tests/yaccvpath.test: Updated heading comments. Do not require
+ gcc anymore, as any working C compiler should be enough. Remove
+ redundant comments.
+ * tests/yacc-nodist.test: New test.
+ * tests/yacc-dist-nobuild.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+
+2010-12-13 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Extend, fix and improve tests on Lex and Yacc support.
+ * tests/lexcpp.test: New test script, on support for Lex + C++.
+ * tests/lexvpath.test: New test script, test build and rebuild
+ rules for lexers in VPATH setup.
+ * tests/yacc-basic.test: New test script, run simple "semantic"
+ checks on basic Yacc support (similarly to what lex3.test does
+ for Lex support).
+ * tests/lex.test: Don't create useless dummy source file joe.l.
+ Remove extra blank lines.
+ * tests/lex4.test: Add trailing `:' command. Do not create dummy
+ useless lex source file.
+ * tests/lex2.test: Likewise. Call automake with the `-a' option,
+ so that it doesn't fail for the absence of `ylwrap' script. Make
+ grepping of automake stderr stricter.
+ * tests/yacc7.test: Add trailing `:' command. Enable `errexit'
+ shell flag earlier (just after having sourced ./defs).
+ * tests/yacc4.test: Likewise. Also ...
+ (configure.in): Use pre-populated skeleton set up by ./defs,
+ instead of writing one from scratch.
+ Other minor cosmetic changes.
+ * tests/yacc5.test: Likewise.
+ * tests/yaccvpath.test: Likewise. Also ...
+ ($distdir): New variable.
+ Use it throughout.
+ * tests/lex5.test: Likewise.
+ * tests/lex3.test: Likewise. Check the distdir, rather than
+ grepping the distribution tarball. Extend the test on the
+ created binary, and be sure to avoid hangs. Add some comments.
+ * tests/yacc.test: Use stricter grepping. Add trailing `:'.
+ * tests/yacc6.test: Likewise.
+ * tests/yacc3.test: Likewise. Do not create the unused file
+ `Makefile.sed'. Remove useless rules from Makefile.am. Other
+ minor cosmetic changes.
+ * tests/yacc2.test: Make grepping of generated `Makefile.in' and
+ of automake error messages stricter. Do not redirect output of
+ grep to /dev/null. Move call to aclocal earlier. Reduce the
+ number of empty blank lines. Fix a typo in comments.
+ * tests/yacc8.test: Fixed bugs that reduced the completeness of
+ the tests. Added trailing `:' command.
+ (configure.in): Use pre-populated skeleton set up by ./defs,
+ instead of writing one from scratch.
+ * tests/yaccpp.test: Test also extensions `.y++', `.ypp', and
+ `.yxx', rather than only `.yy'.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-01-09 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ cosmetics: remove trailing whitespaces
+ * doc/automake.texi: Remove trailing whitespaces.
+ * tests/cond13.test: Likewise.
+ * tests/cond14.test: Likewise.
+ * tests/fort4.test: Likewise.
+ * tests/fort5.test: Likewise.
+ * tests/libobj17.test: Likewise.
+ * tests/suffix7.test: Likewise.
+ * tests/vtexi2.test: Likewise.
+
+ automake: minor fixes in comments
+ * automake.in: Some minor fixes and enhancements in comments.
+
+2011-01-09 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Add test coverage for deleted header files.
+ * tests/depcomp6.test, tests/depcomp7.test: Update tests to
+ also check for the deleted header bug. If no dependency
+ tracking mechanism could be found, SKIP rather than exit
+ successfully. Use GNU style spacing and ANSI C prototypes.
+
+ Fix typos in Rule.pm comments.
+ * lib/Automake/Rule.pm: Fix typos in comments.
+
+ docs: split 'amhello Explained' node.
+ * doc/automake.texi (amhello Explained): Split node ...
+ (amhello's configure.ac Setup Explained)
+ (amhello's Makefile.am Setup Explained) : ... into these two.
+ (Top, Hello World): Adjust, and add @anchor for stable URL links.
+ Suggestion by Karl Berry in automake bug#7766.
+
+2011-01-08 Karl Berry <karl@freefriends.org>
+ Eric Blake <eblake@redhat.com>
+
+ docs: reference defining directories in amhello node.
+ * doc/automake.texi (amhello Explained): Point to Autoconf
+ manual for how to convert directory values into macros.
+ (Optional): Fix grammar nit.
+
+2011-01-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ yacc: "make clean" removes .c and .h files from non-distributed .y
+ Previously, while automake did *not* distribute C source and header
+ files derived from non-distributed Yacc sources, it still caused
+ them to be removed only by "make maintainer-clean" only, and not by
+ simply "make clean" or "make distclean".
+ This caused "make distcheck" to fail, unless the developer put
+ those generated .c and .h files in CLEANFILES or in DISTCLEANFILES
+ by hand.
+ This change fixes this issue, by making non-distributed `.c' and
+ `.h' files generated by non-distributed Yacc sources cleaned by
+ "make clean".
+ * tests/automake.in (lang_yacc_target_hook): Make C source and
+ header files derived from non-distributed Yacc files cleaned by
+ "make clean", not only by "make maintainer-clean".
+ * tests/yacc-clean.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+ * NEWS: Update.
+
+2011-01-02 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ * NEWS: Fix typo (forgotten word).
+
+2011-01-02 Stefano Lattarini <stefano.lattarini@gmail.com>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ docs: how to work around checks on invalid primary/directory couples
+ * doc/automake.texi (Uniform): Document the blessed idiom which can
+ be used to work around automake checks on invalid primary/directory
+ couples (such as `lib_PROGRAMS' or `doc_LIBRARIES').
+
+2010-01-03 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Tests: normalize use of the 'errexit' shell flag.
+ * tests/maken3.test (check_targets): Remove redundant call to
+ 'set -e'.
+ * tests/maken4.test: Likewise.
+ * tests/ansi5.test: Call 'set -e' just after './defs' has been
+ sourced.
+ * tests/ansi6.test: Likewise.
+ * tests/ansi7.test: Likewise.
+ * tests/cond16.test: Likewise.
+ * tests/cond17.test: Likewise.
+ * tests/cond18.test: Likewise.
+ * tests/cond19.test: Likewise.
+ * tests/cond20.test: Likewise.
+ * tests/cond21.test: Likewise.
+ * tests/instdat2.test: Likewise.
+ * tests/instdir-texi.test: Likewise.
+ * tests/parallel-tests3.test: Likewise.
+ * tests/remake1a.test: Likewise.
+ * tests/ccnoco.test: Likewise, and add trailing `:' command.
+ * tests/comment4.test: Likewise.
+ * tests/gcj4.test: Likewise.
+ * tests/nodist2.test: Likewise.
+ * tests/nodist3.test: Enable 'errexit' shell flag (this should
+ have been done in commit v1.11-248-g317e17b, but the relevant
+ hunk has been forgotten somehow).
+ * tests/output.test: Likewise.
+ * tests/gnits2.test: Likewise, and display captured stderr to
+ script's stderr, not to script's stdout.
+ * tests/gnits3.test: Likewise. Also, prefer 'cat' over 'echo'
+ to append to Makefile.am, and really check that the exit status
+ of "make installcheck" indicates failure.
+
+2011-01-02 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Sync auxiliary files from upstream.
+ * lib/config.guess, lib/config.sub, lib/texinfo.tex:
+ Sync from upstream.
+
+ Avoid caching bug in cygnus mode test.
+ * tests/cygnus-requires-maintainer-mode.test: Remove
+ autom4te.cache directory before rerunning aclocal, to
+ remove trace caches.
+
+ Fix maintainer-check regression.
+ * tests/subobj11a.test: Pass DISTCHECK_CONFIGURE_FLAGS in the
+ environment.
+
+ Bump copyright years.
+ * aclocal.in (write_aclocal, version): Bump copyright years.
+ * automake.in (gen_copyright, version): Likewise.
+ * doc/automake.texi: Likewise.
+
+2010-12-23 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ * NEWS: Add missing blank line between two entries.
+
+2010-12-23 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Improve and extend tests `suffix*.test'.
+ * tests/suffix.test: Check that suffix rules for C compilation are
+ only included once. Try also with a static library.
+ * tests/suffix2.test: Add a new grep to help potential debugging.
+ Do not run automake with the `--add-missing' options, since we
+ already create all the needed auxiliary files. Try also *without*
+ the `no-dependencies' automake option.
+ * tests/suffix4.test: Make grepping of Makefile.in stricter.
+ * tests/suffix3.test: Rewritten to run also autoconf, ./configure
+ and make.
+ * tests/suffix5.test: Likewise.
+ * tests/suffix6.test: Fix botched recipe indentation (eight spaces
+ were used instead of a tabulation character). Extend to check
+ that `.obj' is handled like `.$(OBJEXT)' (as is done for `.o').
+ Improved parsing & grepping of generated Makefile.in. Other minor
+ fixes and improvements.
+ * tests/suffix10.test: Move some checks in Makefile.am. Also run
+ "make all".
+ * tests/suffix12.test: Likewise, and account for VPATH issues in
+ weaker make implementations.
+ * tests/suffix11.test: Likewise. Also, run "make distcheck", for
+ completeness, and related changes.
+ * tests/suffix8.test: Likewise. Also, do not put `gcc' anymore
+ in $required.
+ * tests/suffix13.test: Do not use the `--force-missing' automake
+ option unnecessarily.
+ * tests/suffix6b.test: New test, semantic sister of `suffix6.test'.
+ * tests/suffix6c.test: Likewise.
+ * tests/Makefile.am (TESTS): Updated.
+
+2010-12-23 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+ Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Work around a bug in file-inclusion mechanism of Solaris make.
+ * automake.in (handle_single_transform): In the name of the
+ dependency file: collapse multiple slash characters into a single
+ one.
+ * tests/subobj11a.test: New test.
+ * tests/subobj11b.test: Likewise.
+ * tests/subobj11c.test: Likewise.
+ * tests/depcomp8a.test: Likewise.
+ * tests/depcomp8b.test: Likewise.
+ * tests/Makefile.am (TESTS): Updated.
+ * NEWS: Updated.
+ Report by Stefano Lattarini, quick fix by Ralf Wildenhues, final
+ patch and tests by Stefano Lattarini.
+
+2010-12-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Fix two spurious testsuite failures on IRIX 6.5.
+ * tests/suffix13.test (Makefile.am): Account for VPATH issues on
+ weaker make implementations (e.g. IRIX 6.5).
+ * tests/parallel-tests8.test: Likewise, plus a required related
+ change.
+ Reported by Ralf Wildenhues. The bugs have been there from the
+ first versions of the affected test scripts.
+
+2010-12-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ docs: cygnus mode doesn't require AM_CYGWIN32 macro.
+ * doc/automake.texi (Cygnus): Mode 'cygnus' does not require
+ the AM_CYGWIN32 macro (and indeed hasn't required it since at
+ least commit Release-1-2-31-g3038064 "merged changes from
+ Cygnus" of 1997-08-25).
+
+2010-12-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Add some tests on 'cygnus' mode.
+ * tests/clean2.test: Extend.
+ * tests/cygnus-check-without-all.test: New test.
+ * tests/cygnus-dependency-tracking.test: Likewise.
+ * tests/cygnus-distclean.test: Likewise.
+ * tests/cygnus-imply-foreign.test: Likewise.
+ * tests/cygnus-no-dist.test: Likewise.
+ * tests/cygnus-no-installinfo.test: Likewise.
+ * tests/cygnus-requires-maintainer-mode.test: Likewise.
+ * tests/Makefile.am (TESTS): Update.
+
+2010-12-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Fix parallel testsuite run with Zsh.
+ This change deals with a Zsh incompatibility in the handling
+ of the special shell variable `$0' in sourced files; this
+ incompatibility used to cause utter breakage when the
+ Automake testsuite was run in parallel mode with Zsh as
+ the $(TEST_LOG_COMPILER).
+ For more information, please refer to the thread "Fix parallel
+ testsuite run with zsh" on automake-patches, dated 2010-12-22:
+ <https://lists.gnu.org/archive/html/automake-patches/2010-12/msg00135.html>
+ This change works around the problems described above for Zsh 4.3
+ or later, and offers better error messages (instead of random
+ failures) for earlier Zsh version.
+ * tests/README (Supported shells): When describing the manual
+ workaround about the Zsh incompatibility in the handling of `$0',
+ tell that it is now needed only with Zsh versions preceding 4.3.
+ Done also some minor rewordings.
+ * tests/defs-static.in ($argv0): New variable, offers a workaround
+ for the Zsh incompatibility in the handling of `$0'.
+ Abort if that variable cannot be correctly set (can happen only
+ in older Zsh version).
+ * tests/defs ($me): Define using `$argv0', not `$0'.
+
+2010-12-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Tests defs: keep track of original $AUTOMAKE and $ACLOCAL values.
+ This is especially useful for tests which might want to run
+ automake and aclocal without additional flags and warnings.
+ * tests/defs-static.in ($original_ACLOCAL): New variable.
+ ($original_AUTOMAKE): Likewise.
+ * tests/help.test: Use them.
+ * tests/help2.test: Likewise.
+ * tests/help3.test: Likewise.
+ * tests/help4.test: Likewise.
+ From a suggestion by Ralf Wildenhues.
+
+2010-12-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ distlinksbrk.test: Work around botched "make -k".
+ * tests/distlinksbrk.test: Run "make" multiple times and grep
+ its output each time for a single error message, rather than
+ running "make -k" one single time and grepping its output for
+ all the expected error messages. This should work around make
+ implementations with limited (broken?) `-k' support; for more
+ information, see these subthreads on the automake-patches list:
+ - 2010-11-15, "Testsuite failures on HP-UX 11.23",
+ <https://lists.gnu.org/archive/html/automake-patches/2010-11/msg00162.html>
+ - 2010-11-15, "Testsuite failures on IRIX 6.5",
+ <https://lists.gnu.org/archive/html/automake-patches/2010-11/msg00166.html>
+
+2010-12-21 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Minor improvements to test 'amopts.test'.
+ * tests/amopts.test: Remove botched comment. Make grepping of
+ automake stderr slighty stricter. Add trailing `:' command.
+
+2010-12-21 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ backcompat6.test: avoid comments inside recipe commands.
+ * tests/backcompat6.test: Remove shell comments from makefile rule
+ commands, as they are not portable to (at least) Tru64 make.
+
+2010-12-21 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ man8.test: avoid comments inside recipe commands.
+ * tests/man8.test: Remove shell comments from makefile rule
+ commands, as they are not portable to (at least) Tru64 make.
+
+2010-12-21 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Fix sed-related buglet in test "subdir5.test"
+ * tests/subdir5.test: Always terminate text passed to the
+ `i' sed command with a newline, to work around limitations
+ in e.g. older OpenBSD sed.
+
+2010-12-21 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Fix spurious failures in tests on AC_CONFIG_AUX_DIR.
+ * tests/auxdir7.test: Do not try to needlessly overwrite the files
+ `install-sh' and `missing'. This avoid spurious failures in "make
+ distcheck", when those files might be copied as read-only from the
+ `lib' directory.
+ * tests/auxdir8.test: Likewise.
+
+2010-12-18 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Make test 'posixsubst-script' portable to MinGW/MSYS.
+ * tests/posixsubst-script.test: Ensure that the generated dummy
+ scripts really start with a shebang line, to work around a
+ limitation of 'test -x' on MinGW/MSYS.
+ Reported by Ralf Wildenhues.
+
+ Improve comments in tests `posixsubst*.test'.
+ * tests/posixsubst-data.test: Improve comment explaining why we
+ try also empty match suffix.
+ * tests/posixsubst-extradist.test: Likewise.
+ * tests/posixsubst-ldadd.test: Likewise.
+ * tests/posixsubst-libraries.test: Likewise.
+ * tests/posixsubst-ltlibraries.test: Likewise.
+ * tests/posixsubst-programs.test: Likewise.
+ * tests/posixsubst-scripts.test: Likewise.
+ * tests/posixsubst-sources.test: Likewise.
+ * tests/posixsubst-tests.test: Likewise.
+ Suggested by Ralf Wildenhues.
+
+2010-12-18 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ docs: fix blunder in example about python extension modules
+ * doc/automake.texi (Python): Use `quaternion_la_SOURCES',
+ not `quaternion_SOURCES', to declare the sources of python
+ extension module `quaternion.la'.
+
+2010-12-16 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ docs: list LTLIBRARIES among Automake primaries
+ * doc/automake.texi (Uniform): List `LTLIBRARIES' among
+ the Automake primaries.
+
+2010-12-13 Stefano Lattarini <stefano.lattarini@gmail.com>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Tests defs: requirement 'xsi-shell' must be synced with libtool.
+ * tests/defs (xsi-shell): Add comment telling to keep the
+ XSI-conformance checks in sync with libtool.
+
+2010-12-17 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Minor cleanups in canon7.test.
+ * tests/canon7.test (_foo_bar_SOURCES): Remove libs.c.
+ (configure.in): Remove AC_PROG_CXX.
+
+2010-12-16 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Avoid false positive in sc_tests_plain_make maintainer-check.
+ * Makefile.am (sc_tests_plain_make): Ensure to only match full
+ `make' words. Avoid false positive with remake11.test.
+
+2010-12-16 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix canon7.test failure.
+ * tests/canon7.test (_foo_bar_SOURCES): Add foobar.c.
+ (lib.h, libd.c, libs.c): Use const for constant strings.
+
+2010-12-16 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix typos in test comments.
+ * tests/posixsubst-data.test, tests/posixsubst-extradist.test,
+ tests/posixsubst-ldadd.test, tests/posixsubst-libraries.test,
+ tests/posixsubst-ltlibraries.test, tests/posixsubst-programs.test,
+ tests/posixsubst-scripts.test, tests/posixsubst-sources.test,
+ tests/posixsubst-tests.test: Fix typos.
+
+2010-12-14 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ More uses of AS_HELP_STRING in automake macros.
+ * m4/depend.m4 (AM_DEP_TRACK): Use `AS_HELP_STRING' to format
+ the help message added to the generated configure.
+ * m4/dmalloc.m4 (AM_WITH_DMALLOC): Likewise.
+ * m4/lispdir.m4 (AM_PATH_LISPDIR): Likewise.
+ * m4/maintainer.m4 (AM_MAINTAINER_MODE): Likewise.
+ * m4/multi.m4 (AM_ENABLE_MULTILIB): Likewise.
+ Also, bumped all serial numbers of the modified m4 files.
+
+2010-12-14 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Improve tests on generated portions of configure help screen.
+ * tests/help-depend.test: Grepping of configure help screen
+ relaxed to cater for possible line wrapping, and tightened in
+ other respects.
+ * tests/help-depend2.test: Likewise.
+ * tests/help-dmalloc.test: Likewise.
+ * tests/help-lispdir.test: Likewise.
+ * tests/help-maintainer.test: Likewise.
+ * tests/help-multilib.test: Likewise.
+ * tests/help-silent.test: Likewise.
+ * tests/help-upc.test: Likewise.
+ * tests/help-init.test: Grepping of configure help screen
+ tightened.
+
+2010-12-15 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Extended tests on AC_CONFIG_AUX_DIR.
+ * tests/auxdir.test: Enable `errexit' shell flag. Prefer `$me'
+ over hard-coded test name. Use proper m4 quoting. Add trailing
+ `:' command.
+ * tests/auxdir2.test: Likewise. Try to call automake also with
+ the `-a' option, so that it will not fail for spurious reasons.
+ * tests/auxdir3.test: Add an explanatory comment and a trailing
+ `:' command.
+ * tests/auxdir4.test: Prefer `$me' over hard-coded test name.
+ Make grepping of automake stderr slightly stricter. Also, now
+ this test just checks about Automake's reaction to unportable
+ auxiliary directory names (and it has been extended in this
+ respect). Moved the checks about non-existent auxiliary
+ directories to ...
+ * tests/auxdir5.test: ... this new test.
+ * tests/auxdir6.test: New test.
+ * tests/auxdir7.test: Likewise.
+ * tests/auxdir8.test: Likewise.
+ * tests/auxdir9.test: Likewise.
+ * tests/Makefile.am (TESTS): Updated.
+
+2010-12-06 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Tests: extend checks on remake rules.
+ This adds proper semantical tests (i.e. run make to check the
+ rebuild rules are correctly triggered) in addition to tentative
+ grepping of the generated Makefile.in(s).
+ * tests/remake.test: Enable `errexit' shell flag, and related
+ changes. Modernize `configure.in'. Add trailing `:' command.
+ Improve heading comments, and add a reference to new sister test
+ remake1a.test.
+ * tests/remake3.test: Likewise (but with sister test being
+ remake3a.test).
+ * tests/remake2.test: Improve heading comments. Enable `errexit'
+ shell flag, and related changes. Modernize `configure.in'. Make
+ grepping of `Makefile.in' slightly stricter. Add trailing `:'
+ command.
+ * tests/remake5.test: Also run the `distcheck' target. Add
+ trailing `:' command. Use proper m4 quoting in configure.in.
+ * tests/remake4.test: Prefer `$me' over hard-coded test name.
+ * tests/remake7.test: Use the `configure.in' stub created by
+ ./defs, rather than writing it from scratch.
+ * tests/remake6.test: Likewise. Also, add trailing `:' command,
+ and ensure verbose printing of captured make output.
+ * tests/remake1a.test: New test, sister of remake.test.
+ * tests/remake3a.test: New test, sister of remake3.test.
+ * tests/remake8a.test: New test.
+ * tests/remake8b.test: Likewise.
+ * tests/remake9a.test: Likewise.
+ * tests/remake9b.test: Likewise.
+ * tests/remake9c.test: Likewise.
+ * tests/remake9d.test: Likewise.
+ * tests/remake10a.test: Likewise.
+ * tests/remake10b.test: Likewise.
+ * tests/remake10c.test: Likewise.
+ * tests/remake11.test: Likewise.
+ * tests/remake12.test: Likewise.
+ * tests/Makefile.am (TESTS): Updated.
+
+2010-12-11 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Improve and extend tests on canonicalization.
+ * tests/canon-name.test: Add trailing `:' command. When writing
+ configure.in, prefer to use $me instead of hard-coding the test
+ name.
+ * tests/canon3.test: Prefer trailing `:' over trailing `Exit 0'.
+ * tests/canon4.test: Likewise. Make grepping of Makefile.in
+ stricter. Improve heading comment, and add reference to ...
+ * tests/canon6.test: ... this new test (sister test of the
+ previous one).
+ * tests/canon.test: Prefer cat + here-doc over echo to append
+ text to configure.in. Extend grepping of Automake stderr. Add
+ trailing `:' command.
+ * tests/canon5.test: Likewise.
+ * tests/canon7.test: New file, stress test on canonicalization.
+ * tests/canon8.test: New test, for better coverage (check that
+ the `@' character is not transliterated in canonicalizations).
+ * tests/Makefile.am: Updated.
+
+2010-12-13 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Libobj tests: refer to automake bug tracker for limitations.
+ * tests/libobj15b.test (configure.in): In the comment explaining
+ why an apparently redundant AC_OUTPUT is indeed needed, refer
+ to the relevant entry in the Automake bug tracker rather than
+ describing the bug in detail with a FIXME-style comment.
+ * tests/libobj15c.test: Likewise.
+ * tests/libobj20b.test: Likewise.
+
+ Libobj tests: do not use `##' automake comments in-line.
+ * tests/libobj19.test (Makefile.am): Do not use inline `##'
+ comments in the definition of AUTOMAKE_OPTIONS.
+ * tests/libobj20c.test: Likewise.
+ Report by Ralf Wildenhues.
+
+2010-12-12 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Tests defs: more uses of $top_testsrcdir.
+ * tests/compile6.test: Use `$top_testsrcdir' instead of
+ `$testsrcdir/..'.
+
+2010-11-12 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Tests required tools: also try `-v' option for GNU compilers.
+ * tests/defs.in: In the loop on "$required" tools, for gcc
+ and g++, also run "gcc -v" (resp. "g++ -v"), to get more
+ information, and for consistency with gcj.
+
+2010-11-12 Stefano Lattarini <stefano.lattarini@gmail.com>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Tests defs: avoid some useless subshells.
+ * tests/defs: In the loop on "$required" tools: avoid subshells
+ where not needed.
+
+2010-12-09 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Extend tests on AC_LIBOBJ and friends.
+ * tests/aclibobj.test: Removed, superseded by ...
+ * tests/libobj-basic.test: ... this new test, which runs autoconf,
+ ./configure and make, to ensure everything really works.
+ * tests/libobj3.test: Add trailing `:' command. Escape literal
+ dot in grep regexp.
+ * tests/libobj4.test: Enable `errexit' shell flag, and related
+ changes. Add trailing `:' command. Use proper m4 quoting.
+ * tests/ltlibobjs.test: Likewise.
+ * tests/libobj5.test: Enable `errexit' shell flag, and related
+ changes. Add trailing `:' command. Make more robust by using
+ longer filenames to be grepped.
+ * tests/libobj8.test: Enable `errexit' shell flag, and related
+ changes. Add trailing `:' command. Use the configure.in
+ stub provided by ./defs, rather than writing it from scratch.
+ * tests/libobj2.test: Likewise. Also, add calls to autoconf,
+ ./configure and make, to ensure everything really works.
+ * tests/libobj7.test: Likewise, and ensure that at least one
+ function listed in AC_REPLACE_FUNCTIONS is truly replaced.
+ * tests/libobj13.test: Make grepping of Automake stderr slightly
+ stricter. Add trailing `:' command.
+ * tests/libobj12.test: Likewise. Also, prefer "cat + here-doc"
+ over "echo" to append to Makefile.am, and some cosmetic changes
+ in spacing.
+ * tests/libobj14.test: Call `Exit 1' if sourcing of ./defs fails.
+ Slighty improve m4 quoting. Add trailing `:' command.
+ * tests/libobj10.test: Add calls to autoconf, ./configure and
+ make, to ensure everything really works. Also, remove tests that
+ nonexistent source for AC_LIBOBJ cause an Automake failure: this
+ is already checked by ...
+ * tests/libobj15a.test: ... this new test.
+ * tests/libobj15b.test: New test, sister test of libobj15a.test,
+ checks AC_LIBSOURCE instead of AC_LIBOBJ.
+ * tests/libobj15c.test: New test, sister test of libobj15a.test,
+ checks AC_LIBSOURCES instead of AC_LIBOBJ.
+ * tests/libobj11.test: Removed, superseded by ...
+ * tests/libobj16a.test: ... this new test.
+ * tests/libobj16b.test: New test, sister test of libobj16a.test,
+ but using oldish/deprecated idioms.
+ * tests/libobj17.test: New test.
+ * tests/libobj18.test: Likewise.
+ * tests/libobj19.test: Likewise.
+ * tests/libobj20a.test: Likewise.
+ * tests/libobj20b.test: Likewise.
+ * tests/libobj20c.test: Likewise.
+ * tests/Makefile.am (TESTS): Updated.
+
+2010-12-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Test `$(var:suf=rpl)' expansion in special automake variables.
+ * tests/posixsubst-data.test: New test.
+ * tests/posixsubst-extradist.test: Likewise.
+ * tests/posixsubst-ldadd.test: Likewise.
+ * tests/posixsubst-libraries.test: Likewise.
+ * tests/posixsubst-ltlibraries.test: Likewise.
+ * tests/posixsubst-programs.test: Likewise.
+ * tests/posixsubst-scripts.test: Likewise.
+ * tests/posixsubst-sources.test: Likewise.
+ * tests/posixsubst-tests.test: Likewise.
+ * tests/Makefile.am (TESTS): Update.
+
+2010-12-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Make tests `colon*.test' more "semantic".
+ Prefer running configure and make over grepping the generated
+ files; this is both more correct and less fragile.
+ * tests/colon.test: Made more "semantic", as described above.
+ * tests/colon5.test: Likewise.
+ * tests/colon6.test: Likewise.
+ * tests/colon7.test: Likewise.
+ * tests/colon2.test: Likewise, and improve syncing with sister
+ test `colon3.test'.
+ * tests/colon3.test: Likewise (but with the sister test being
+ `colon2.test' here).
+
+2010-12-10 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Avoid running installed automake from 'libtool --help'.
+ * tests/subobj9.test: Export AUTOCONF and AUTOMAKE.
+ Together with fixed Libtool, this fixes check-coverage to not
+ invoke installed automake.
+
+2010-12-06 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Separate checks on target overriding into multiple test scripts.
+ * tests/overrid.test: Deleted, its contents separated into ...
+ * tests/override-suggest-local.test: ... this new test ...
+ * tests/override-html.test: ... and this new test ...
+ * tests/override-conditional-1.test: ... and this new test ...
+ * tests/override-conditional-2.test: ... and this new test (still
+ xfailing).
+ * tests/Makefile.am (TESTS, XFAIL_TESTS): Updated.
+
+ Enable `set -e' in more tests (plus some tweakings).
+ * tests/implicit.test: Enable `errexit' shell flag, and related
+ changes. Add trailing `:' command.
+ * tests/insh2.test: Likewise.
+ * tests/instman2.test: Likewise.
+ * tests/interp.test: Likewise.
+ * tests/interp2.test: Likewise.
+ * tests/library.test: Likewise.
+ * tests/mclean.test: Likewise.
+ * tests/info.test: Enable `errexit' shell flag, and related
+ changes. Add trailing `:' command. Remove useless chaff from
+ generated Makefile.am. Add a "FIXME" comment.
+ * tests/include.test: Enable `errexit' shell flag, and related
+ changes. Add trailing `:' command. Prefer cat + here-doc over
+ echo to append to configure.in. Make tests more robust by using
+ longer and less common names to grep. Remove an useless call to
+ echo. Remove an useless subshell.
+ * tests/header.test: Enable `errexit' shell flag, and related
+ changes. Use proper m4 quoting. Add excerpts from the original
+ report of the bug tested for by this script.
+ * tests/gcj.test: Enable `errexit' shell flag, and related
+ changes. Use proper m4 quoting. Add trailing `:' command.
+ * tests/gcj3.test: Likewise.
+ * tests/ldflags.test: Likewise.
+ * tests/libtool.test: Likewise.
+ * tests/listval.test: Likewise.
+ * tests/javaprim.test: Likewise, and prefer cat + here-doc over
+ echo to append to configure.in.
+ * tests/javasubst.test: Likewise.
+ * tests/discorver.test: Enable `errexit' shell flag. Prefer
+ trailing `:' over trailing `Exit 0'.
+ * tests/instdat.test: Enable `errexit' shell flag, and related
+ changes. Use proper m4 quoting. Avoid useless subshell. Prefer
+ cat + here-doc over echo to append to configure.in.
+ * tests/libtool2.test: Enable `errexit' shell flag, and related
+ changes. Add trailing `:' command. Use the configure.in
+ stub provided by ./defs, rather than writing it from scratch.
+
+ Modernize, improve and/or tweak some test scripts.
+ * tests/maintclean.test: Use proper m4 quoting. Add trailing `:'
+ command.
+ * tests/sinclude.test: Likewise, and add a couple of blank lines,
+ for clarity.
+ * tests/make.test: Move setting of `errexit' shell flag earlier in
+ the script (just after inclusion of ./defs). Use the configure.in
+ stub created by ./defs, rather than writing it from scratch. Some
+ cosmetic changes in spacing. Ensure we wait enough time before
+ touching configure.in to trigger the rebuild rules.
+ * tests/makej.test: Use `$me' instead of hard-coding the test
+ name. Add trailing `:' command.
+ * tests/version7.test: Likewise.
+ * tests/space.test: Enable `errexit' shell flag, and related
+ changes.
+ * tests/makevars.test: Likewise. Also, prefer trailing `:' over
+ trailing `Exit 0', and be more tolerant of white spaces when
+ grepping Makefile.in.
+
+2010-12-02 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ * tests/silent8.test: Use "|| Exit 1" after ". ./defs".
+
+ Enable `set -e' in more tests (plus some tweakings).
+ * tests/mkinstall.test: Enable `errexit' shell flag, and related
+ changes. Add a trailing `:' command, if needed.
+ * tests/mdate2.test: Likewise.
+ * tests/objc.test: Likewise.
+ * tests/noinst.test: Likewise.
+ * tests/outdir.test: Likewise.
+ * tests/number.test: Likewise.
+ * tests/pluseq.test: Likewise.
+ * tests/req.test: Likewise.
+ * tests/rulepat.test: Likewise.
+ * tests/specflg6.test: Likewise.
+ * tests/spell3.test: Likewise.
+ * tests/parse.test: Likewise, and ...
+ (configure.in): Use the stub created by ./defs, rather than
+ writing it from scratch. Remove useless calls to AC_PROG_RANLIB
+ and AC_OUTPUT.
+ * tests/mdate4.test: Likewise.
+ * tests/mkinstall.test: Likewise, and ...
+ (configure.in): ... drop useless call to `AC_OUTPUT'.
+ * tests/output.test: Enable `errexit' shell flag, and related
+ changes. Add a trailing `:' command.
+ (configure.in): Modernize.
+ * tests/output2.test: Likewise.
+ * tests/output3.test: Likewise.
+ * tests/output4.test: Likewise.
+ * tests/mdate3.test: Enable `errexit' shell flag, and related
+ changes. Prefer `$me' over hard-coded test name. Do not move
+ non-existent or useless files in the build auxiliary directory.
+ * tests/nodistdir.test: Enable `errexit' shell flag, and related
+ changes. Prefer trailing `:' over trailing `Exit 0'.
+ * tests/nodist.test: Likewise. Also, prefer cat + here-doc over
+ echo to create input test files, and do not create useless dummy
+ C source files.
+ * tests/nodist2.test: Likewise.
+ * tests/ppf77.test: Enable `errexit' shell flag, with related
+ changes. Add a trailing `:' command. Do not create useless
+ dummy source files.
+ * tests/spelling.test: Enable `errexit' shell flag, with related
+ changes. Add a trailing `:' command. Also, grep Automake error
+ message.
+ * tests/specflg3.test: Enable `errexit' shell flag, with related
+ changes. Avoid unportable use of `-e' option of fgrep. Prefer
+ trailing `:' over trailing `Exit 0'. Remove extra empty lines,
+ and cosmetic changes to whitespaces.
+ * tests/obsolete.test: Enable `errexit' shell flag, with related
+ changes. Improve verbosity. Other miscellaneous changes.
+
+2010-11-30 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Improve and extend tests on `:=' variable assignments.
+ * tests/colneq.test: Avoid redundant use of variable assignments
+ in Makefile.am. Use command-line automake options instead of
+ editing AUTOMAKE_OPTIONS in Makefile.am. Make grepping of the
+ generated Makefile.in slightly stricter. Add a trailing `:'
+ command.
+ * tests/colneq2.test: Do not create unneeded dummy files. Run
+ also autoconf, ./configure and make. Add trailing `:' command.
+ * tests/colneq3.test: New test, similar to colneq.test, but
+ running also autoconf, ./configure and make.
+ * tests/Makefile.am (TESTS): Update.
+
+2010-11-26 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Remove long-deprecated options --Werror and --Wno-error.
+ These options has been deprecated at least since commit
+ "Release-1-6-1b-35-gc037f20", dated 2002-07-06.
+ * automake.in (parse_arguments): Do not recognize anymore options
+ `--Werror' and `--Wno-error' as synonyms of respectively `-Werror'
+ and `-Wno-error'.
+ * tests/werror.test: Update: use `-Werror' instead of `--Werror'.
+ * NEWS: Update.
+
+2010-11-25 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Fix spurious failures in `silent*.test' for $CC != gcc
+ In some tests on automake-produced silent rules, we forced the
+ use of gcc depmode to improve testsuite coverage; but this has
+ unsurprisingly led to spurious failures when some non-GNU C
+ compilers were used. So we are now careful to require GCC in
+ tests that force gcc depmode.
+ From reports by Ralf Wildenhues.
+ * tests/silent5.test: Test removed, its content split into ...
+ * tests/silent-many-generic.test, tests/silent-many-gcc.test: ...
+ these new sister tests, the latter of which forces gcc depmode
+ and lists "gcc" in $required.
+ * tests/silentlex.test: Test removed, its content split into ...
+ * tests/silent-lex-generic.test, tests/silent-lex-gcc.test: ...
+ these new sister tests, the latter of which forces gcc depmode
+ and lists "gcc" in $required.
+ * tests/silentyacc.test: Test removed, its content split into ...
+ * tests/silent-yacc-generic.test, tests/silent-yacc-gcc.test: ...
+ these new sister tests, the latter of which forces gcc depmode and
+ lists "gcc" in $required.
+ * tests/Makefile.am (TESTS): Updated.
+
+2010-11-21 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Tests: consistently use "|| Exit 1" after ". ./defs".
+ * tests/autohdr.test: Use `. ./defs || Exit 1', not bare
+ `. ./defs', for consistency with other tests.
+ * tests/autohdr2.test: Likewise.
+ * tests/autohdr3.test: Likewise.
+ * tests/autohdr4.test: Likewise.
+ * tests/cond23.test: Likewise.
+ * tests/cond24.test: Likewise.
+ * tests/cond25.test: Likewise.
+ * tests/cond26.test: Likewise.
+ * tests/cond27.test: Likewise.
+ * tests/cond28.test: Likewise.
+ * tests/cond29.test: Likewise.
+ * tests/cond30.test: Likewise.
+ * tests/cond31.test: Likewise.
+ * tests/cond32.test: Likewise.
+ * tests/cond33.test: Likewise.
+ * tests/cond34.test: Likewise.
+ * tests/cond35.test: Likewise.
+ * tests/cond36.test: Likewise.
+ * tests/cond37.test: Likewise.
+ * tests/cond38.test: Likewise.
+ * tests/cond39.test: Likewise.
+ * tests/cond40.test: Likewise.
+ * tests/cond41.test: Likewise.
+ * tests/cond42.test: Likewise.
+ * tests/cond43.test: Likewise.
+ * tests/cond44.test: Likewise.
+ * tests/cond45.test: Likewise.
+ * tests/dollarvar.test: Likewise.
+ * tests/dollarvar2.test: Likewise.
+ * tests/hfs.test: Likewise.
+ * tests/libobj14.test: Likewise.
+ * tests/percent.test: Likewise.
+ * tests/percent2.test: Likewise.
+ * tests/phony.test: Likewise.
+ * tests/silent.test: Likewise.
+ * tests/silent2.test: Likewise.
+ * tests/silent3.test: Likewise.
+ * tests/silent4.test: Likewise.
+ * tests/silent5.test: Likewise.
+ * tests/silent6.test: Likewise.
+ * tests/silent7.test: Likewise.
+ * tests/silent9.test: Likewise.
+ * tests/silentcxx.test: Likewise.
+ * tests/silentf77.test: Likewise.
+ * tests/silentf90.test: Likewise.
+ * tests/silentlex.test: Likewise.
+ * tests/silentyacc.test: Likewise.
+
+ Avoid useless cleaning in some `silent*.test' tests.
+ * tests/silentf77.test: Removed useless calls to "make clean"
+ and "make maintainer-clean".
+ * tests/silentf90.test: Likewise.
+ * tests/silent3.test: Removed useless call to "make distclean".
+ * tests/silent4.test: Likewise.
+ * tests/silent9.test: Likewise.
+
+2010-11-19 Ian Lance Taylor <iant@google.com>
+
+ Sync config-ml.in from GCC.
+ * config-ml.in: Add Go support: treat GOC and GOCFLAGS like other
+ compiler/flag environment variables.
+
+2010-11-20 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ release-stats: account for more generated tests.
+ * Makefile.am (release-stats): Be sure to take into account all
+ the generated tests, by grepping the test scripts to decide which
+ ones of them are automatically generated.
+
+2010-11-20 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Code cleanup after removal of option `--output-directory'.
+ * automake.in ($output_directory): Remove, it's unconditionally
+ defined to `.' and used only ...
+ (generate_makefile): ... in this subroutine, which now has been
+ edited and simplified accordingly.
+
+ Remove obsolete automake option `--output-directory'.
+ This option has been deprecated since version 1.7 (2002/2003).
+ * automake.in ($output_directory): Define to `.' unconditionally.
+ (parse_arguments): Remove handling of equivalent options `-o' and
+ `--output-directory'.
+ * tests/outdir.test: Removed.
+ * tests/no-outdir-option.test: New test.
+ * tests/Makefile.am (TESTS): Updated.
+ * NEWS: Updated.
+
+2010-11-19 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Automake::Config: remove extra trailing semicolon.
+ * lib/Automake/Config.in: Remove extra trailing semicolon.
+
+ help4.test: fix botched heading comment.
+ * tests/help4.test: Fixed the heading comment, since it
+ didn't correctly describe what checks the testcase was
+ supposed to perform.
+
+ help2.test: add checks on aclocal too.
+ * tests/help2.test: Check that also `aclocal --version' and
+ `aclocal --help' work with configure.in and acinclude.m4 both
+ broken.
+
+2010-11-19 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ New test on repeated automake options.
+ * tests/repeated-options.test: New test, check that automake
+ does not complain on repeated options, nor generate broken or
+ incorrect makefiles.
+ * tests/Makefile.am (TESTS): Updated.
+
+2010-11-17 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Fix spurious failures of silent-rules tests with Sun Fortran.
+ * tests/silentf77.test: Strip from the make output some verbose
+ messages possibly printed by the SunStudio fortran compilers, to
+ avoid spurious failures. Add a trailing `:' command.
+ * tests/silentf90.test: Likewise.
+
+2010-11-17 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Fix spurious failures of silent5.test with Sun Fortran.
+ * tests/silent5.test: Strip from the make output some verbose
+ messages possibly printed by the SunStudio fortran compilers,
+ to avoid spurious failures. This bug has been there from the
+ very first version of this test script.
+
+2010-11-16 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Fix regression in colon{5,6}.test (failures on AIX 5.3).
+ * tests/colon5.test: Also substitute `@SHELL@' with `$SHELL' when
+ post-processing the generated Makefile.in, to work around a bug
+ of AIX 5.3 make which doesn't allow setting the `$(SHELL)' macro
+ on the commend line. Calls to `$MAKE' adjusted accordingly.
+ * tests/colon6.test: Likewise.
+ Regression introduced in commit v1.11-175-gf9fe878 "Modernize,
+ improve and/or extend tests `colon*.test", and reported by Ralf
+ Wildenhues.
+
+2010-11-16 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Fix regression in ansi.test (failure on AIX 5.3).
+ * tests/ansi.test: Remove redundant hackish check done using a
+ hand-postprocessed Makefile.in. This check worked by setting
+ the `$(SHELL)' macro on the command line of make, but this is
+ not supported by the AIX 5.3 make implementation.
+ This bug has been lurking for a long time, and was activated by
+ commit v1.11-125-gc1f6cdb "Enable `errexit' shell flag in various
+ tests". Report by Ralf Wildenhues.
+
+2010-11-16 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ backcompat5.test: avoid '##'-style comments inside recipe commands.
+ * tests/backcompat5.test: Remove double-hash comments
+ from makefile rule commands, they are not part of the
+ Automake API. Fixes testsuite failure with Tru64 make.
+
+ tests: avoid '##'-style comments inside recipe commands.
+ * tests/confh.test, tests/confh8.test: Remove
+ double-hash comments from makefile rule commands, they
+ are not part of the Automake API.
+
+2010-11-14 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ tests: work around dash quoting issue in case statements.
+ * tests/color.test, tests/color2.test: Quote variable in case
+ pattern, to avoid skipping tests with dash 0.5.5.1.
+
+2010-11-16 Peter Rosin <peda@lysator.liu.se>
+
+ Skip MSVC oriented tests if the shell is not capable.
+ * tests/defs: New required entry 'xsi-shell'.
+ * tests/ar-lib.test, tests/compile3.test, tests/compile6.test:
+ Require a XSI capable shell.
+ Reported by Ralf Wildenhues.
+
+2010-11-15 Peter Rosin <peda@lysator.liu.se>
+
+ compile: clear the `eat' variable earlier.
+ * lib/compile: Clear the `eat' variable earlier.
+ ($scriptversion): Update.
+ * tests/compile3.test: Prevent regressions.
+
+2010-11-14 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ More stable configure output from sanity check.
+ * m4/sanity.m4 (AM_SANITY_CHECK): Always print check line
+ about ensuring newer files, even if we don't actually need
+ to wait any more.
+
+2010-11-14 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Rebuild menus in the manual.
+ * doc/automake.texi: Rebuild menus (using ^C ^U ^A in emacs).
+ Thanks to Ian Lance Taylor for the suggestion.
+
+ Fix install-strip when $(STRIP) contains several words.
+ * lib/am/install.am (install-strip): Update comment. Use
+ separate sub-make invocations for empty and nonempty $(STRIP),
+ to fix quoting issues.
+ * tests/strip2.test, tests/strip3.test: New tests.
+ * tests/Makefile.am (TESTS): Adjust.
+
+2010-11-10 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix yaccdry.test failure: require bison.
+ * tests/yaccdry.test: Require bison.
+ Found by NixOS Hydra.
+
+2010-11-12 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Fix bug in test `backcompat6.test' (MSYS portability).
+ * tests/backcompat6.test (Makefile.am): Grep the output from the
+ test program, rather than diffing it, to avoid spurious failures
+ on MinGW/MSYS due to LF vs. CRLF line endings.
+ Reported by Ralf Wildenhues.
+
+2010-11-13 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Deprecate obsolete macro AM_WITH_REGEX.
+ * m4/regex.m4: Document the `AM_WITH_REGEX' macro as obsolete,
+ and state that it should be removed two years from now.
+ (AM_WITH_REGEX): Raise an m4-time warning of the "obsolete"
+ category when this macro is used.
+ * doc/automake.texi (Public Macros): Move description of
+ `AM_WITH_REGEX' from here ...
+ (Obsolete Macros): ... to here, and declare it as obsolete
+ and "to be removed in a future version".
+ * tests/regex-obsolete.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+
+2010-11-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Improve and extend tests on man pages support.
+ * tests/man.test: Enable `errexit' shell flag, and related changes.
+ Make grepping of generated Makefile.in slightly stricter.
+ * tests/man3.test: Add trailing `:' command.
+ * tests/man5.test: Prefer cat + here-doc over echo to append to
+ configure.in.
+ * tests/man2.test: Likewise, and add trailing `:' command.
+ * tests/man4.test: More thorough and consistent checking of make
+ error messages. Place fake `help2man' program in a new `bin'
+ directory rather than in `.'. Move the checks using the real
+ `help2man' program to ...
+ * tests/man6.test: ... this new test, and extend them. This test
+ passes with GNU make and Solaris make, still fails with BSD make.
+ * tests/man7.test: New test, extracted from old man4.test, which
+ checks for a bug in maintainer-clean w.r.t. generated manpages.
+ * tests/man8.test: New test, extracted from old man4.test, which
+ checks for a bug in distcheck w.r.t. generated manpages. Passes
+ with GNU make and Solaris make, still fails with BSD make.
+
+2010-11-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Minor improvements and extensions to various tests.
+ * tests/defun.test: Also run autoconf and grep the generated
+ configure to make sure that aclocal truly picks up all the
+ required macros.
+ * tests/compile_f_c_cxx.test: Prefer trailing `:' over trailing
+ `Exit 0'. Do not create useless dummy source files. Do not set
+ useless `$(foo_LDADD)' variable in `Makefile.am'. Do not call
+ useless macro `AC_F77_LIBRARY_LDFLAGS' in `configure.in'.
+ * tests/compile_f90_c_cxx.test: Likewise.
+ * tests/suffix10.test: Slightly stricter grepping of make output.
+ * tests/compile.test: Add trailing `:' command.
+ * tests/defun2.test: Likewise.
+ * tests/vars3.test: Likewise.
+ * tests/vartar.test: Likewise.
+ * tests/vars.test: Likewise. Also, extend test by checking
+ that the definition of `MY_FLAGS*' variables is preserved in
+ the generated `Makefile.in'.
+ * tests/stamph2.test: Prefer trailing `:' over trailing `Exit 0'.
+ Use proper m4 quoting in `configure.in'.
+
+2010-11-11 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Tests defs: improve messages for skipped tests.
+ * tests/defs: Give meaningful messages about the reasons of a
+ test skip; this is especially useful as this file is run without
+ verbose xtraces on. Related reorderings in the code and new
+ comments.
+
+2010-11-10 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Tests defs: move static definitions in a new file `defs-static'.
+ The new file is meant to be idempotent w.r.t. multiple inclusions.
+ * tests/defs.in: Removed, its contents split among ...
+ * tests/defs-static.in: ... this new file ...
+ * tests/defs: ... and this new file, including the former.
+ * configure.ac (AC_CONFIG_FILES): Remove `tests/defs', add
+ `tests/defs-static'.
+ (AC_CONFIG_LINKS): Add `tests/defs'.
+ * tests/Makefile.am ($(parallel_tests)): Update.
+ ($(instspc_tests)): Likewise.
+ * tests/.gitignore: Update.
+
+ Tests defs: $testsbuilddir is now AC_SUBST'ed.
+ * tests/defs.in ($testsbuilddir): Substitute from @abs_builddir@.
+ Add sanity check on $testsbuilddir, similar to those on
+ $testsrcdir and $top_testsrcdir.
+
+ Tests defs: do not print message "Running test $0" anymore.
+ * tests/defs.in: Printing the message "=== Running test $0" at
+ the beginning of each tests made sense when Automake used the old
+ test-driver, which sent all the output directly to stdout/stderr.
+ Now that the parallel test-driver is used, which saves output of
+ each test in its corresponding log file, that old message is just
+ useless noise.
+
+ Tests defs: rename $curdir -> $testbuilddir
+ * tests/defs.in: Rename $curdir to $testbuildir, for clarity and
+ consistency with $testsrcdir and $top_testsrcdir.
+
+ Tests defs: prefer "$curdir" over "`pwd`".
+ * tests/defs.in: We already save the value of `pwd` in $curdir
+ early in the file, so there no need to recalculate it later, when
+ the current working directory is not changed.
+
+ Tests defs: use `$me' in more error messages.
+ * tests/defs.in: Also use `$me' in error messages referring to
+ missing `defs' or `defs.in', since that variable is now defined
+ before those checks.
+
+ Tests defs: do not use `Exit' where plain `exit' suffices.
+ * tests/defs.in: Use "exit 77" rather than "Exit 77" to skip the
+ test when required libtool/gettext macros are not found, since
+ such skips would take place before the exit trap is installed.
+
+ Tests defs: improve and extends comments.
+ * tests/defs.in: Improve and extends some comments, especially in
+ relation with the changes introduced by the previous reordering.
+
+ Tests defs: various reorderings.
+ * tests/defs.in: Reordered various snippets of code in a
+ clearer way.
+
+2010-11-09 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Fix bug in test `backcompat4.test' (stale autom4te cache).
+ * tests/backcompat4.test: Remove stale autom4te cache directory
+ before re-running aclocal and automake. Also, since we are at
+ it, be more verbose in displaying contents of generated files,
+ to ease debuggability.
+ Reported by Ralf Wildenhues.
+
+2010-11-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Fix a bug in variable concatenation with `+='.
+ * lib/Automake/VarDef.pm (append): Since the content of the
+ "appended-to" variable is going to be unconditionally normalized
+ later, simply separate the appended value with a single whitespace
+ character, instead of trying to be uselessly smarter by using
+ escaped newlines. This fixes a bug in which extra backslashes
+ where erroneously inserted in the variable's final value.
+ * tests/pluseq11.test: New test, exposing the bug.
+ * tests/Makefile.am (TESTS): Update.
+ Reported by Andy Wingo.
+
+2010-11-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Modernize, improve and/or tweak various test scripts.
+ * tests/stamph2.test: Improve m4 quoting in `configure.in', and
+ prefer trailing `:' over trailing `Exit 0'.
+ * tests/syntax.test: Escape literal dots in grep regexps.
+ * tests/copy.test: Enable `errexit' shell flag. Extend test by
+ checking with `test' utility that the script `install-sh' is
+ copied, but not symlinked.
+ * tests/depdist.test: Move setting of `errexit' shell flag earlier
+ in the script (just after inclusion of ./defs). Avoid obsoleted
+ constructs in generated `configure.in'. Prefer to do our checks
+ by running configure and make over grepping Makefile.in.
+ * tests/target-cflags: Move setting of `errexit' shell flag
+ earlier in the script (just after inclusion of ./defs). Use the
+ `configure.in' stub created by `./defs', rather than writing it
+ from scratch.
+ * tests/target-clash: Do not uselessly run autoconf.
+ * tests/ctarget1.test: Renamed ...
+ * tests/cond-basic.test: ... to this. Use the `configure.in' stub
+ created by `./defs', rather than writing it from scratch.
+ Move setting of `errexit' shell flag earlier in the script (just
+ after inclusion of ./defs). Other minor cosmetic changes.
+ * tests/Makefile.am (TESTS): Updated.
+
+2010-11-06 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ New tests on obsoleted usages of automake/autoconf macros (such
+ as AC_INIT, AM_INIT_AUTOMAKE and AC_OUTPUT).
+ * tests/backcompat.test: New test script.
+ * tests/backcompat2.test: Likewise.
+ * tests/backcompat3.test: Likewise.
+ * tests/backcompat4.test: Likewise.
+ * tests/backcompat5.test: Likewise.
+ * tests/backcompat6.test: Likewise.
+ * tests/init.test: Extended and improved, esp. by trying more
+ combinations of calls to AC_INIT and AM_INIT_AUTOMAKE with few
+ arguments.
+ * tests/Makefile.am (TESTS): Updated.
+
+2010-11-06 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Fix bug in rules for creating vala vapi/header files.
+ * automake.in (lang_vala_finish_target): Add forgotten "fi" in an
+ if control structure in a generated make rules. Bug introduced
+ by previous commit `v1.11-221-gd7c1679', and revealed by failure
+ of test `vala2.test'.
+
+2010-11-01 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix and document rules to not touch the tree with `make -n'.
+ * doc/automake.texi (Multiple Outputs): Document the problem of
+ modifications during dry-run execution, propose solution.
+ * NEWS: Update.
+ * automake.in (lang_vala_finish_target): Split recipe so the
+ stamp file is not removed with GNU `make -n'.
+ (lang_yacc_target_hook): Separate removal of parser output file
+ and header remaking.
+ * lib/am/lisp.am ($(am__ELCFILES)): Determine whether -n was
+ passed to make, take care not to remove any files in that case.
+ * lib/am/remake-hdr.am (%CONFIG_H%): Separate removal of
+ %STAMP% file from induced remaking of config header.
+ * tests/autohdrdry.test, tests/lispdry.test, tests/yaccdry.test:
+ New tests.
+ * tests/Makefile.am (TESTS): Update.
+
+2010-11-05 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Fix potential bug in generated tests `instpc-*.test'.
+ This bug is due to the changes introduced by the recently-merged
+ "tests-init" branch. In that branch, `tests/defs' didn't define
+ anymore `$srcdir', instead defining directly `$testsrcdir'; but
+ the generated tests were using `$srcdir', hence the bug.
+ Luckily, since the Automake parallel test driver automatically
+ exports `srcdir' to a proper value, that prevented the bug from
+ manifesting itself.
+ * tests/Makefile.am ($(instspc_tests)): In the generated test
+ scripts, use `$testsrcdir', not `$srcdir'.
+
+2010-11-03 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Overhauled and modularized tests in `instspc.test'.
+ The test `instspc.test' was way too big and fragile. Its running
+ time was very long. It also produced a log that was nearly
+ unreadable due to its length, making it very difficult to find
+ out the reason for failures.
+ Also, it was too much monolithic, with a single (maybe spurious)
+ failure in a corner case causing the whole test to fail (even if
+ everything worked as expected in the other 99% of cases).
+ The present change should solve these problems, by separating
+ `instspc.test' into many smaller, self-contained, auto-generated
+ tests.
+ * tests/instspc.test: Removed.
+ * tests/instspc-tests.sh: New script, fulfilling a double role:
+ 1. it generates a Makefile.am snippet `tests/instspc-tests.am',
+ containing the definition of a list of new tests which will take
+ over the older `instspc.test', and
+ 2. it is sourced by said generated tests with proper parameters
+ pre-set, to run the "meat" of the checks.
+ This apparent abuse is indeed required because the test generation
+ code and test execution code are inevitably intertwined.
+ * tests/Makefile.am ($(srcdir)/instspc-tests.am): Include this
+ snippet, which (among the other things) defines ...
+ (instspc_tests): ... this new macro, containing the list of the
+ newly generated `instspc*.test' tests, and ...
+ (instspc_xfail_tests): ... this new macro, containing the list
+ of the `instspc*.test' tests expected to fail.
+ ($(instspc_tests)): New rule, generates the `instspc*.test' tests.
+ ($(instspc_tests:.test=.log)): New rule, registers the dependency
+ of all `instspc*.test' tests on the `instspc-tests.sh' script.
+ (TESTS): Add `$(instspc_tests)', remove `instspc.test'.
+ (XFAIL_TESTS): Add `$(xfail_instspc_tests)'.
+ (EXTRA_DIST): Distribute instspc-tests.sh.
+ (MAINTAINERCLEANFILES): Added $(instspc_tests).
+ Other minor cosmetic changes.
+ * bootstrap: Generate instspc-tests.am.
+ * tests/.gitignore: Updated.
+
+2010-11-01 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Add FAQ entry for bug reporting instructions.
+ * doc/automake.texi (Reporting Bugs): New section.
+ (Introduction): Refer to it.
+
+2010-10-07 Peter Rosin <peda@lysator.liu.se>
+
+ depcomp: add new one-pass depmode for MSVC 7 and later.
+ * lib/depcomp: Add new depmodes 'msvc7' and 'msvc7msys' which
+ make use of the -showIncludes option added in MSVC 7.
+ * m4/depend.m4 (_AM_DEPENDENCIES): Handle the new depmodes
+ similarly to 'msvisualcpp' and 'msvcmsys' as MSVC does not
+ support the -o option.
+
+2010-10-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Add support for newer python versions.
+ * m4/python.m4 (AM_PATH_PYTHON): Add python2.7 and python3.2 to
+ _AM_PYTHON_INTERPRETER_LIST. Since we are at it, break a long
+ line and fix indentation.
+ * THANKS: Updated.
+ From a report by Thomas Klausner.
+
+ Add test for `AM_WITH_DMALLOC' macro.
+ * tests/dmalloc.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+
+ Fix nits and bugs in tests `help*.test'.
+ * tests/help4.test: Fix broken sed commands used to strip `-W...'
+ flags away from "$AUTOMAKE" and "$ACLOCAL".
+ * tests/help3.test: Likewise, and fix a botched comment.
+ * tests/help.test: Likewise. Also, use "AUTOMAKE_fails ..."
+ instead of "$AUTOMAKE ... && Exit 1", for consistency and to
+ please maintainer-check.
+ * tests/help2.test: Likewise.
+
+2010-10-03 Stefano Lattarini <stefano.lattarini@gmail.com>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Improve tests `help*.test' (also fixes maintcheck failures).
+ * tests/help.test: To run automake, use `$AUTOMAKE' with all `-W'
+ flags stripped away rather than hard-coded `automake-$APIVERSION',
+ to better honour user-overrides. Similarly for aclocal.
+ * tests/help2.test: Likewise.
+ * tests/help3.test: Likewise.
+ * tests/help4.test: Likewise.
+
+2010-10-03 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ tests: fix ar-lib.test for echo that interprets backslashes.
+ * tests/ar-lib.test: Use printf instead of echo. Avoid test -a.
+ More robust quoting.
+
+2010-10-03 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ maintainer-check coverage for variables before rules.
+ * Makefile.am (sc_ensure_testsuite_has_run): Suggest keeping
+ around the test directories.
+ (sc_tests_makefile_variable_order): New rule with a heuristic to
+ catch ordering violations.
+
+ Document and fix expansion of variables before rules.
+ * doc/automake.texi (General Operation): Document that variables
+ are expanded before rules.
+ * lib/am/check.am (am__check_post): Reword a bit so it does not
+ get matched as a rule.
+ Suggestion by Ben Pfaff.
+
+2010-10-02 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Coverage and minor fixes for variable typo detection.
+ * automake.in (check_typos): Remove `EXTRA_' prefix when
+ computing canonical name.
+ * tests/vartypo2.test, tests/vartypos.test: New tests.
+ * tests/Makefile.am (TESTS): Update.
+
+ Implement EXTRA_maude_DEPENDENCIES for programs and libraries.
+ * automake.in (handle_programs, handle_libraries)
+ (handle_ltlibraries): Mark EXTRA_*_DEPENDENCIES as recognized.
+ * doc/automake.texi (Linking, Program and Library Variables)
+ (LIBOBJS): Document EXTRA_*_DEPENDENCIES.
+ * lib/am/library.am (%LIBRARY%): Also depend on
+ $(EXTRA_%XLIBRARY%_DEPENDENCIES).
+ * lib/am/ltlibrary.am (%LTLIBRARY%): Also depend on
+ (%XLTLIBRARY%_DEPENDENCIES).
+ * lib/am/program.am (%PROGRAM%%EXEEXT%): Also depend on
+ $(EXTRA_%XPROGRAM%_DEPENDENCIES).
+ * tests/extradep.test, tests/extradep2.test: New tests.
+ * tests/Makefile.am (TESTS): Update.
+ * NEWS: Update.
+ Suggested by Eric Blake.
+
+ tests: avoid running into timing issues due to sanity change.
+ * tests/acloca10.test, tests/acloca18.test, tests/aclocal9.test:
+ Insert strategic sleep before aclocal reruns, to ensure files
+ are newer.
+ * tests/python11.test: Use --force for repeated autotools runs.
+ Reports from the NixOS Hydra build daemon via Ludovic Courtès.
+
+ Fix timestamp issues by ensuring configure takes at least a second.
+ * m4/sanity.m4 (AM_SANITY_CHECK): If we didn't sleep here,
+ start a sleep in the background and wait for it to finish
+ before creating config.status, hopefully fixing all spurious
+ testsuite failures involving botched time stamps.
+ * NEWS: Update.
+ Reports by Ludovic Courtès, Peter Breitenlohner, and others.
+
+2010-10-02 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Revert "parallel-tests: avoid command-line length limit issue."
+ This reverts commit 24e3b4ee2f8cb9f72dd94a05a893f3d4e88b7835,
+ because it re-opened the bug fixed by v1.11-10-g218e678.
+
+ 2010-09-07 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ parallel-tests: avoid command-line length limit issue.
+ * automake.in (handle_tests): New argument $makefile, new
+ substitution %MAKEFILE%.
+ (generate_makefile): Adjust.
+ * lib/am/check.am [%?PARALLEL_TESTS%] (check-TESTS): Pass
+ sanitized TEST_LOGS value as makefile snippet on standard
+ input to $(MAKE), to avoid exceeding the command line limit on
+ w32 (MSYS).
+ * NEWS: Update.
+ Report by Bob Friesenhahn.
+
+2010-09-26 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Extend tests on `--help' and `--version' options.
+ * tests/help.test: Create a new empty directory and chdir into
+ it, rather than removing already present files. Run the aclocal
+ and automake wrapper scripts directly, instead of relying on
+ $AUTOMAKE and $ACLOCAL. Be sure to correctly match literal dots
+ in aclocal's and automake's stderr. Add a trailing `:' command.
+ * tests/help2.test: New test, checking that options `--help' and
+ `--version' works in directories with broken `configure.in'.
+ * tests/help3.test: New test, checking that options `--help' and
+ `--version' take precedence on the other options.
+ * tests/help4.test: New test, checking that the first among the
+ `--help' and `--version' options to be specified on the command
+ line wins.
+ * tests/Makefile.am (TESTS): Updated.
+
+2010-09-25 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Testsuite: Use `$PATH_SEPARATOR', not `:', when extending PATH.
+ * tests/compile2.test: Do no uselessly (implicitly) repeat the
+ computation of PATH_SEPARATOR again.
+ * tests/instmany-mans.test: Use `$PATH_SEPARATOR', not `:', when
+ extending/redefining PATH.
+ * tests/instmany-python.test: Likewise.
+ * tests/instmany.test: Likewise.
+ * tests/man4.test: Likewise.
+ * tests/mkinst3.test: Likewise.
+ * tests/mmodely.test: Likewise.
+ * tests/multlib.test: Likewise.
+ * tests/txinfo30.test: Likewise.
+ * tests/README (Section "Writing test cases" subsection "Do"):
+ Updated.
+ * Makefile.am (sc_tests_PATH_SEPARATOR): New maintainer check.
+ (syntax_check_rules): Updated.
+
+ Testsuite: new variables `$PATH_SEPARATOR' and `$APIVERSION'.
+ * tests/defs.in ($APIVERSION): New AC_SUBST'd variable.
+ ($ACLOCAL, $AUTOMAKE): Use it.
+ ($PATH_SEPARATOR): New AC_SUBST'd variables.
+ ($PATH): Use it.
+
+2010-09-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Manual: be more agnostic w.r.t. version control system used.
+ * doc/automake.texi (Basics of Distribution): Also refer to `.svn'
+ directories as a type of probably-unwanted files that are copied
+ regardless when adding directories to EXTRA_DIST.
+ (The dist Hook): Show a dist-hook example which removes Subversion
+ `.svn' private directories from distdir, rather than CVS private
+ directories.
+ (missing and AM_MAINTAINER_MODE): Try to be more agnostic w.r.t.
+ the version control system used.
+
+ Manual: index refer to target "git-dist", not "cvs-dist".
+ * doc/automake.texi (General Operation): Index the non-standard
+ example about "git-dist" under the "git-dist" label, not under
+ the "cvs-dist" one.
+
+ Perl modules: remove references to "Automake CVS repository".
+ * lib/Automake/Channels.pm: Update comments to refer to "Automke's
+ git repository" rather than to "Automake's CVS repository".
+ * lib/Automake/Configure_ac.pm: Likewise.
+ * lib/Automake/FileUtils.pm: Likewise.
+ * lib/Automake/Struct.pm: Likewise.
+ * lib/Automake/XFile.pm: Likewise.
+ * lib/Automake/Version.pm (=head1 DESCRIPTION): Refer to "git
+ branches" rather than "CVS branches".
+
+ Remove obsolete .cvsignore files.
+ * .cvsignore, doc/.cvsignore, lib/.cvsignore, lib/am/.cvsignore,
+ lib/Automake/.cvsignore, lib/Automake/tests/.cvsignore,
+ m4/.cvsignore, tests/.cvsignore: Files deleted. Even when using
+ savannah's CVS readonly mirror there's no way to commit back to
+ the real repository, so this files are not worth maintaining or
+ keeping around.
+
+2010-09-21 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ * m4/dmalloc.m4: Bump serial number and copyright years.
+
+2010-09-20 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Fix broken link in `AM_WITH_DMALLOC' help screen.
+ * m4/dmalloc.m4 (AM_WITH_DMALLOC): Refer only to the dmalloc site
+ `http://www.dmalloc.com', not to the dmalloc tarball there (which
+ seems to have been removed, substituted by multiple release
+ tarballs now).
+
+2010-09-21 Peter Rosin <peda@lysator.liu.se>
+
+ compile: implement library search to support MSVC static linking
+ * lib/compile (func_cl_wrapper): Implement library search and
+ -static option so that the user can select whether to prefer
+ dll import libraries or static libraries. This enables MSVC to
+ link against dlls generated by libtool without requiring libtool
+ or workarounds such as -lfoo.dll etc. Makes the tests/static.at
+ test case in libtool pass.
+ * tests/compile3.test: Don't trip up if there happens to exist
+ a "foo" library in the library search path.
+ * tests/compile6.test: New test, verifying the library search.
+ * tests/Makefile.am (TESTS): Update.
+
+2010-09-17 Eric Blake <eblake@redhat.com>
+
+ Avoid triple-space after period.
+ * automake.in (handle_single_transform): Avoid 3 spaces at
+ sentence end.
+ * ChangeLog.03: Likewise.
+ * lib/Automake/ChannelDefs.pm: Likewise.
+ * lib/Automake/Channels.pm (_print_message): Likewise.
+ * lib/Automake/Rule.pm (rule): Likewise.
+ * lib/Automake/Variable.pm (var): Likewise.
+ * lib/am/distdir.am: Likewise.
+ * tests/insthook.test: Likewise.
+
+2010-09-15 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Test automake-generated portions of configure help screen.
+ * tests/help-depend.test: New test.
+ * tests/help-depend2.test: Likewise.
+ * tests/help-dmalloc.test: Likewise.
+ * tests/help-init.test: Likewise.
+ * tests/help-lispdir.test: Likewise.
+ * tests/help-maintainer.test: Likewise.
+ * tests/help-multilib.test: Likewise.
+ * tests/help-regex.test: Likewise.
+ * tests/help-silent.test: Likewise.
+ * tests/help-upc.test: Likewise.
+ * tests/mmode.test: Remove tests on `configure --help' output,
+ they are superseded by tests in `help-maintainer.test'.
+ * tests/Makefile.am (TESTS): Update.
+
+2010-09-14 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ * tests/README: Don't put GCS mandated tools in $required.
+
+2010-09-13 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * HACKING: Hint at old commits with `git describe' output.
+
+2010-09-14 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Prefer `$(am__cd)' to plain `cd' in our Makefiles.
+ * Makefile.am (recheck, dist-hook, git-dist, path-check, fetch)
+ (release-stats): Use `$(am__cd)' rather than plain `cd'.
+ * tests/Makefile.am ($(srcdir)/parallel-tests.am): Likewise.
+
+2010-09-12 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Fix regression in test `colon4.test'.
+ * tests/colon4.test: Fix botched editing to `configure.in'
+ that made the test useless. Since we are at it, improve
+ comments and make grepping of generated Makefile.in slightly
+ stricter.
+ Regression introduced by change "Modernize, improve and/or
+ extend tests `colon*.test" (Stefano Lattarini, 2010-08-08).
+
+2010-09-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Do not require "gzip" explicitly in tests.
+ The gzip utility is simply expected to be present on any decent
+ target system for Automake. So it's pointless to put it in
+ $required.
+ * tests/install2.test ($required): Do not require "gzip".
+ * tests/lex3.test: Likewise.
+ * tests/pr9.test: Likewise.
+ From a suggestion by Ralf Wildenhues.
+
+2010-09-09 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Use AS_HELP_STRING in AM_SILENT_RULES.
+ * m4/silent.m4 (AM_SILENT_RULES): Use `AS_HELP_STRING' to format
+ help message regarding configure options `--enable-silent-rules'
+ and `--disable-silent-rules'. Also throw in a couple of cosmetic
+ changes in the related `case' statement (indentation, balancing
+ of parentheses).
+ * THANKS: Update.
+ From a report by Jeff A. Daily.
+
+2010-09-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Make some `confh*.test' tests more "semantic" (plus tweakings).
+ * tests/confh.test: Run "autoconf", "configure" and "make check",
+ instead of munging/grepping the generated `Makefile.in'.
+ * tests/confh4.test: Relax the grepping of Makefile.in w.r.t.
+ white spaces. Do not create useless dummy source file `foo.c'
+ and useless dummy header file `acconfig.h'.
+ (configure.in): Remove superfluous call to `AC_OUTPUT'.
+ * tests/confh6.test: Add trailing `:' command.
+ * tests/confh7.test: In comments, add reference to ...
+ * tests/confh8.test: ... this new test, "semantic" sister
+ of `confh7.test'.
+ * tests/Makefile.am (TESTS): Updated.
+ Prompted by a report from Ralf Wildenhues.
+
+2010-09-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Remove useless whitespace padding in XFAIL_TESTS definition.
+ * tests/Makefile.am (XFAIL_TESTS): Remove whitespace padding.
+
+2010-09-07 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ parallel-tests: avoid command-line length limit issue.
+ * automake.in (handle_tests): New argument $makefile, new
+ substitution %MAKEFILE%.
+ (generate_makefile): Adjust.
+ * lib/am/check.am [%?PARALLEL_TESTS%] (check-TESTS): Pass
+ sanitized TEST_LOGS value as makefile snippet on standard
+ input to $(MAKE), to avoid exceeding the command line limit on
+ w32 (MSYS).
+ * NEWS: Update.
+ Report by Bob Friesenhahn.
+
+ Posix 2008 requires make to set errexit.
+ * lib/am/check.am: Update comment.
+
+2010-09-06 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Tests defs: remove variable $testaclocaldir.
+ * tests/defs.in ($testaclocaldir): Removed.
+ * tests/aclocal.test: Use `$top_testsrcdir/m4' directly, not
+ `$testaclocaldir'.
+
+ Tests defs: $srcdir and $top_srcdir renaming.
+ * tests/defs.in ($srcdir): Remove, define $testsrcdir directly.
+ * tests/Makefile.am ($(parallel_tests)): Generation of derived
+ tests updated.
+
+ Tests defs: new variable $top_testsrcdir.
+ * tests/defs.in ($top_testsrcdir): Define unconditionally
+ to @abs_top_srcdir@. Use it throughout.
+ * tests/ar-lib.test: Use `$top_testsrcdir' instead of
+ `$testsrcdir/..'.
+ * tests/auxdir.test: Likewise.
+ * tests/compile.test: Likewise.
+ * tests/compile2.test: Likewise.
+ * tests/compile3.test: Likewise.
+ * tests/compile5.test: Likewise.
+ * tests/mdate6.test: Likewise.
+ * tests/mkinst3.test: Likewise.
+ * tests/multlib.test: Likewise.
+ * tests/txinfo22.test: Likewise.
+
+ Tests defs: $srcdir is unconditionally substituted.
+ * tests/defs.in ($srcdir): Define unconditionally to @abs_srcdir@.
+ Remove code for $srcdir normalization, which is now useless.
+
+2010-09-02 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Tests defs: make spacing more consistent.
+ * tests/defs.in: Make spacing more consistent in indentation.
+ Especially, indent using only spaces, not tabs. Also, move
+ a comment to a better position.
+
+ Improve code for requiring libtool and gettext in tests.
+ * tests/defs.in: Stricter (and more correct) detection of wheter
+ libtool, libtoolize and/or gettext are in $required.
+
+
+2010-08-27 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Fix bug in test missing6.test.
+ * tests/missing6.test: Fix the hack used to edit `configure.in',
+ to avoid producing a configure script that breaks with shells
+ that do not support $LINENO. Also throw in a couple of cosmetic
+ changes.
+
+2010-09-02 Peter Rosin <peda@lysator.liu.se>
+
+ Make ar-lib support backslashed files in archives.
+ * lib/ar-lib: If an archive member contains a backslash, make sure
+ it is escaped when the archive member is extracted.
+ * tests/ar-lib.test: Test the above.
+
+2010-08-31 Peter Rosin <peda@lysator.liu.se>
+
+ Do file name conversion for object files in the compile wrapper.
+ * lib/compile (func_cl_wrapper): Do file name conversion for object
+ files (i.e. extensions .obj, .OBJ, .o and .O) if needed.
+ * tests/compile4.test: Test the above.
+
+2010-08-21 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Speed up removal of auxiliary linker output files for ltlibraries.
+ * lib/am/ltlib.am (clean-%DIR%LTLIBRARIES): Rewrite using just
+ one `rm' invocation.
+ Report by Bob Friesenhahn.
+
+ Improve robustness of mdate-sh script.
+ * lib/mdate-sh: Sanitize zsh behavior on startup, to ensure
+ $ls_command is word-split properly upon invocation.
+ (error): New function.
+ (main): Use it. Improve error checking to avoid endless loop
+ in case $ls_command gave bogus output. Fix eval quotation.
+ * tests/mdate6.test: New test, to expose eval quotation error.
+ * tests/Makefile.am: Update.
+
+2010-08-18 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Fix potential regressions in depcomp{3,5}.test.
+ * tests/depcomp3.test: Do not uselessly escape the character `$'
+ in makefile rules, when it's used to expand a make macro.
+ * tests/depcomp5.test: Likewise.
+
+2010-08-17 Stefano Lattarini <stefano.lattarini@gmail.com>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Docs: clarify how to avoid automatic dependencies tracking.
+ * doc/automake.texi (Automatic dependency tracking): Mention that
+ automatic dependencies tracking is enabled by default, but that
+ the package developer can disable it altogether. Add a reference
+ to the proper section for a more in-depth explanation.
+
+ Fix typo in manual (`Makefile.in' instead of `Makefile.am').
+ * doc/automake.texi (Automatic dependency tracking): Fix typo.
+
+2010-08-16 Bruno Haible <bruno@clisp.org>
+
+ Don't hide the table of contents.
+ * doc/automake.texi: Move the table of contents to the beginning.
+
+2010-08-16 Peter Rosin <peda@lysator.liu.se>
+
+ Optimize compile script on MSYS.
+ * lib/compile (func_file_conv): Add new argument 'lazy' which
+ takes an optional list of conversion types where the requested
+ conversion isn't needed.
+ (func_cl_wrapper): Take advantage of the above for cases where
+ MSYS is doing the conversion for us.
+ Suggested by Ralf Wildenhues.
+
+2010-08-16 Peter Rosin <peda@lysator.liu.se>
+
+ Support more C++ file extensions for MSVC in the compile script.
+ * lib/compile (func_cl_wrapper): MSVC only recognizes the .cpp
+ file extension as C++, unless it's given a hint. So hint about
+ .cc, .CC, .cxx, .CXX, c++ and C++. Also do path conversion on
+ .c, .cpp, .CPP, .lib, .LIB and .Lib files.
+ * tests/compile3.test: Test the C++ hinting.
+
+2010-08-12 Peter Rosin <peda@lysator.liu.se>
+
+ Enable the use of "link -lib" as the wrapped archiver.
+ * lib/ar-lib: Enable the use of "link -lib" as the wrapped
+ archiver, as well as allowing some other options to be passed
+ through to the wrapped archiver.
+ * tests/ar-lib.test: Test the above.
+
+2010-08-10 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Tweak and/or extend some `acloca*.test' tests.
+ * tests/aclocal8.test: Ensure verbose printing of captured
+ output.
+ * tests/aclocal.test: Likewise. Also, add trailing `:'
+ command.
+ * tests/acloca19.test: Likewise.
+ * tests/aclocal5.test: Add trailing `:' command, and prefer
+ `$me' over hard-coded test name.
+ * tests/aclocal6.test: Likewise.
+ * tests/aclocal18.test: Add trailing `:' command, and make
+ some grepping slightly stricter.
+ * tests/acloca14.test: Likewise. Also, prefer `diff' over
+ `cmp', and add some "cosmetic" blank lines.
+
+2010-08-09 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Tweak and extend tests `pr[!0-9]*.test'.
+ * tests/primary3.test: Add trailing `:' command.
+ * tests/primary.test: Make grepping of Automake's stderr stricter.
+ Also, add trailing `:' command, and cosmetic changes in spacing.
+ * tests/primary2.test: Likewise.
+ * tests/prefix.test: Enable `errexit' shell flags, and related
+ changes. Add a trailing `:' command.
+ * tests/proginst.test: Likewise.
+
+ Modernize, improve and extend tests for PR (`pr[0-9]*.test').
+ * tests/pr2.test: Add trailing `:' command.
+ * tests/pr229.test: Likewise.
+ * tests/pr401.test: Likewise.
+ * tests/pr401b.test: Likewise.
+ * tests/pr401c.test: Likewise.
+ * tests/pr300-prog.test: Likewise, plus cosmetic changes in
+ spacing.
+ * tests/pr300-lib.test: Likewise.
+ * tests/pr300-ltlib.test: Likewise, and ensure verbose printing
+ of captured make stdout.
+ * tests/pr211.test: Add trailing `:' command. Also, use the
+ `configure.in' stub created by ./defs, rather than writing it
+ from scratch.
+ * tests/pr204.test: Likewise, plus cosmetic spacing changes.
+ * tests/pr287.test: Likewise, and move setting of `errexit' shell
+ flag earlier in the script (just after inclusion of ./defs).
+ * tests/pr220.test: Make grepping of Automake's stderr stricter.
+ Also, add trailing `:' command, and cosmetic changes in spacing.
+ * tests/pr224.test: Move setting of `errexit' shell flag earlier
+ in the script (just after inclusion of ./defs). Do not export
+ `CC=gcc' to configure explicitly (it's already exported globally
+ in ./defs, since we have "gcc" in $required). Use the stub for
+ `configure.in' created by ./defs, rather than writing it from
+ scratch. Do not create dummy files required by "gnu" mode (e.g.
+ README, NEWS), since we run automake in foreign mode anyway.
+ * tests/pr72.test: Enable `errexit' shell flags, and related
+ changes. Extend existing checks a bit.
+ * tests/pr9.test: Likewise. Also, avoid obsolescent constructs in
+ the generated `configure.in', and extend existing checks over the
+ generated tarball a bit.
+ * tests/pr87.test: Enable `errexit' shell flags, and related
+ changes. Add a trailing `:' command. Also, do not create dummy
+ files required by "gnu" mode (e.g. README, NEWS), since we run
+ automake in foreign mode anyway.
+ * tests/pr243.test: Avoid obsolescent constructs in the generated
+ `configure.in'. Enable the `errexit' shell flag, and related
+ changes. Cosmetic changes to spacing, add trailing `:' command,
+ and add a "FIXME" comment.
+ * tests/pr266.test: Likewise, and add explicit command line switch
+ `--enable-dependency-tracking' to the ./configure call.
+ * tests/pr279.test: Avoid obsolescent constructs in the generated
+ `configure.in'; also, use the `configure.in' stub created by
+ ./defs, rather than writing it from scratch. Enable `errexit'
+ shell flag, and related changes. Add trailing `:' command.
+ * tests/pr279-2.test: Likewise, and make grepping of Makefile.in
+ stricter.
+ * tests/pr307.test: Move setting of `errexit' shell flag earlier
+ in the script (just after inclusion of ./defs). Escape literal
+ dots in grep regular expressions. Also, add a trailing `:'
+ command, and cosmetic changes to spacing.
+
+ Tests for PR: add excerpts from original bug report, for clarity.
+ * tests/pr2.test: Ditto.
+ * tests/pr9.test: Likewise.
+ * tests/pr72.test: Likewise.
+ * tests/pr87.test: Likewise.
+ * tests/pr211.test: Likewise.
+ * tests/pr220.test: Likewise.
+ * tests/pr224.test: Likewise.
+ * tests/pr229.test: Likewise.
+ * tests/pr243.test: Likewise.
+ * tests/pr266.test: Likewise.
+ * tests/pr279.test: Likewise, and tell to keep it in sync
+ with its sister test.
+ * tests/pr279-2.test: Likewise.
+
+2010-08-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Tweak, extend and improve tests `cond[a-z]*.test'.
+ * tests/condd.test: Add trailing `:' command. Typofix in
+ comment.
+ * tests/condhook.test: Make sure target `install-data-hook' is
+ not called by `make install', but that data files are installed.
+ Use proper m4 quoting in configure.in. Add trailing `:' command.
+ * tests/condhook2.test: New test, sister test of condhook, with
+ inverted semantic.
+ * tests/condinc2.test: Use proper m4 quoting in configure.in.
+ Prefer trailing `:' command over trailing `Exit 0'.
+ * tests/condman2.test: Enable errexit shell flag, and related
+ changes. Add trailing `:' command.
+ * tests/condman.test: Likewise. Also, do not create useless
+ dummy manpages, and use proper m4 quoting in configure.in.
+ * tests/condman3.test: New test, similar to condman.test, but
+ it also runs ./configure and "make install", and check the
+ installed files.
+ * tests/Makefile.am (TESTS): Updated.
+
+ Modernize, improve and/or extend tests `colon*.test.
+ * tests/colon.test: Rely on the `configure.in' stub created by
+ `./defs', rather than writing one from scratch. Do not create
+ a useless dummy file. Add trailing `:' command.
+ * tests/colon4.test: Enable the `errexit' shell flag, and
+ related changes. Rely on the `configure.in' stub created by
+ `./defs', rather than writing one from scratch.
+ * tests/colon7.test: Enable `errexit' shell flag, and related
+ changes. Improve the generated `configure.in' file. Add
+ trailing `:' command.
+ * tests/colon2.test: Likewise. Also, add some new checks.
+ * tests/colon5.test: Improve the generated `configure.in' file.
+ Add new, much deeper checks. Add trailing `:' command.
+ * tests/colon6.test: Likewise.
+ * tests/colon3.test: Add trailing `:' command. Remove useless
+ comments and echos. Improve the generated `configure.in' file.
+ make some grepping tests stricter. Add a "FIXME" comments about
+ planned improvements.
+
+ Improve and extend tests `asm*.test'.
+ * tests/asm.test: Use configure.in stub generated by ./defs,
+ and avoid obsoleted autoconf constructs. Make grepping of
+ Automake stderr stricter. Do not create useless source file.
+ Improve verbose messages. Minor cosmetic changes. Tell to
+ keep it in sync with other sister tests asm*.test.
+ * tests/asm2.test: Likewise.
+ * tests/asm3.test: Likewise.
+
+ Modernize, improve and/or extend test scripts `conf*.test'.
+ * tests/confh5.test: Cosmetic changes.
+ * tests/conff.test: Likewise.
+ * tests/confdeps.test: Likewise.
+ * tests/conflnk.test: Likewise.
+ * tests/conflnk2.test: Likewise.
+ * tests/confsub.test: Likewise.
+ * tests/confvar.test: Likewise, and make grepping of Makefile.in
+ stricter.
+ * tests/confvar2.test: Likewise.
+ * tests/conflnk3.test: Cosmetic changes. Re-enable a temporarily
+ disabled test (which didn't work with autoconf <= 2.59, but now we
+ are requiring autoconf 2.62, so...)
+ * tests/conflnk4.test: Cosmetic changes, and extend existing tests
+ accordingly to "TODO" comments.
+ * tests/conff2.test: Make grepping of Automake's stderr stricter.
+ Add some comments explaining why we don't use the `configure.in'
+ stub preset be ./defs.
+ * tests/confh.test: Use the `configure.in' stub created by ./defs,
+ rather than writing one from scratch, and do not call AC_OUTPUT.
+ Enable `errexit' shell flag, and related changes. Prefer diff over
+ cmp to compare text files. Prefer perl over sed to fetch the value
+ of $(DIST_COMMON) from Makefile.in. Make grepping of the contents
+ of $(DIST_COMMON) stricter.
+ * tests/confh4.test: Use the `configure.in' stub created by ./defs,
+ rather than writing one from scratch. Make grepping of Makefile.in
+ stricter.
+ * tests/confh5.test: Make grepping of `config.h' stricter. Add a
+ comment.
+ * tests/configure.test: Avoid obsolescent constructs in generated
+ `configure.ac'. Do not write `configure.in' two times. Escape
+ literal dots in grep regular expressions.
+ * tests/confincl.test: Enable `errexit' shell flag, and related
+ changes. Prefer fgrep over grep. Other cosmetic changes.
+ * tests/config.test: Renamed to ...
+ * tests/confh6.test: ... this. Fix m4 quoting in `configure.in',
+ and make grepping of `config.h' and `config.h.in' stricter.
+ * tests/conf2.test: Renamed ...
+ * tests/confh7.test: ... to this. Use the `configure.in' stub
+ created by ./defs, rather than writing one from scratch. Try to
+ run the checks both with and without AC_PROG_CC and AC_OUTPUT in
+ `configure.in'.
+ * tests/Makefile.am (TESTS): Updated.
+
+ Minor improvements and fixes in tests `depcomp*.test'.
+ * tests/depcomp.test: Do not create useless dummy source files.
+ Add a trailing `:' command.
+ * tests/depcomp2.test: Use `unset' on the CFLAGS variable to ensure
+ it's not in in the environment, rather than exporting it with an
+ empty value. Do not pass CC=gcc to configure, as that's already
+ done in ./defs since we have gcc in $required. Ensure verbose
+ printing of captured stderr, and normalize its checking. Add a
+ trailing `:' command.
+ * tests/depcomp3.test: Quote literal dots and dollar characters in
+ grep regexps. Always use `: >' rather than `touch' to create empty
+ files. Explicitly declare phony targets as such in the created
+ Makefile.am. Add a trailing `:' command.
+ * tests/depcomp4.test: Quote literal dots and dollar characters in
+ grep regexp. Explicitly declare phony targets as such in the
+ created Makefile.am. Ensure verbose printing of captured makes'
+ stoud/stderr. Add a trailing `:' command.
+ * tests/depcomp5.test: Move setting of `errexit' shell flag earlier
+ in the script (just after inclusion of ./defs). Quote literal dots
+ and dollar characters in grep regexps. Explicitly declare phony
+ targets as such in the created Makefile.am. Add a trailing `:'
+ command.
+ * tests/depcomp6.test: Consistently use m4 quoting in the generated
+ configure.in. Cosmetic fixes to spacing. Make the "dummy" `if'
+ statement required by OpenBSD's sh `set -e' more robust, and add
+ explanatory comments to it.
+ * tests/depcomp7.test: Likewise, and add a trailing `:' command.
+
+ Separate failing part of test `all.test'.
+ * tests/all.test: Keep only (x)failing part of the test. Working
+ checks moved out to ...
+ * tests/all2.test: ... this new test.
+ * tests/Makefile.am (TESTS): Updated.
+
+ Modernize, improve and extend tests `subobj*.test'.
+ * tests/subobjname.test: Add trailing `:' command.
+ * tests/subobj.test: Make grepping of `Makefile.in' stricter.
+ Escape literal dots in grep regexps.
+ * tests/subobj2.test: Add trailing `:' command. Do not use the
+ unportable fgrep option `-e'.
+ * tests/subobj3.test: Add trailing `:' command.
+ (configure.in): Use proper m4 quoting, and avoid obsolescent
+ constructs.
+ * tests/subobj8.test: Likewise. Also, enable `errexit' shell
+ flag, with related changes
+ * tests/subobj4.test: Likewise. Also, make grepping of
+ `Makefile.in' stricter.
+ * tests/subobj5.test: Add trailing `:' command. Move setting of
+ `errexit' shell flag earlier in the script (just after inclusion
+ of ./defs).
+ (configure.in): Use the stub created by `./defs', rather than
+ writing it from scratch, and avoid obsolescent constructs.
+ * tests/subobj6.test: Add trailing `:' command. Move setting of
+ `errexit' shell flag earlier in the script (just after inclusion
+ of ./defs). Do not create useless dummy ac-init file `f'.
+ * tests/subobj7.test: Do not create useless dummy ac-init file
+ `f'.
+ (configure.in): Use the stub created by `./defs', rather than
+ writing it from scratch, and avoid obsolescent constructs.
+ * tests/subobj9.test: Move setting of `errexit' shell flag earlier
+ in the script (just after inclusion of ./defs). Fail the test if
+ `make distcheck' fails. Ensure verbose printing of captured make
+ stdout. Avoid useless fork by doing simple grep instead of using
+ test -n "`COMMAND | grep ...`".
+ (configure.in): Normalize the call to AC_INIT w.r.t. other tests.
+ (Makefile.am): Explicitly mark target "print" as phony.
+ * tests/subobj10.test: Removed duplicated call to `set -e'. Add
+ trailing `:' command.
+ (configure.in): Normalize the call to AC_INIT w.r.t. other tests.
+
+ Remove a couple of obsoleted tests.
+ * tests/fpinstall.test: Removed.
+ * tests/fpinst2.test: Likewise.
+ * tests/Makefile.am (TESTS): Updated.
+
+ Bootstrap: updated HACKING entry.
+ * HACKING ("Working with git"): Explain how to override the
+ autoconf and autom4te programs used by the bootstrap process.
+
+ Bootstrap: fixlet.
+ * bootstrap: Do not remove `lib/Automake/Config.pm' anymore,
+ since we don't generate it. Correctly quote arguments of
+ `eval' builtin. Fixed a botched error message. Removed an
+ extra blank line.
+
+ Bootstrap: don't search perl in $PATH.
+ * bootstrap: Do not explicitly search perl in $PATH anymore.
+ ($PATH_SEPARATOR): Removed, it's no more needed.
+
+ Bootstrap: let the user choose which autoconf to use.
+ * bootstrap ($AUTOCONF): New variable, from the environment.
+ ($AUTOM4TE): Likewise, for clarity.
+ Use "$AUTOCONF" instead of calling "autoconf" directly.
+
+ Minor improvements to tests ar*.test.
+ * tests/ar.test: Add trailing `:' command.
+ * tests/ar2.test: Likewise, and make grepping of generated
+ Makefile.in stricter.
+
+2010-08-06 Peter Rosin <peda@lysator.liu.se>
+
+ Add new auxiliary 'ar-lib' script, wrapping Microsoft lib.
+ * lib/ar-lib: New auxiliary script.
+ * lib/Makefile.am: Add above.
+ * tests/ar-lib.test: New test.
+ * tests/Makefile.am: Add above.
+ * automake.in (@common_files): Distribute the 'ar-lib' script.
+ * doc/automake.texi (Auxiliary Programs): Mention the new
+ 'ar-lib' script.
+ (Optional): Mention 'ar-lib' in AC_CONFIG_AUX_DIR.
+ * NEWS: Update.
+
+2010-08-07 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix shell pattern negation in compile script.
+ * lib/compile (func_file_conv): Use `!' not `^' for pattern
+ negation.
+
+2010-08-08 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix maintainer-check failure.
+ * tests/cond5.test: Quote sleep argument, this isn't about
+ time stamp differences.
+
+ Sync auxiliary files from upstream.
+ * lib/config.guess, lib/config.sub, lib/texinfo.tex:
+ Sync from upstream.
+
+2010-08-06 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Work around a nasty bug (segfault) of Solaris make.
+ * lib/am/check.am (recheck, recheck-html): Trim trailing spaces
+ from $list, to avoid triggering a nasty bug (potential segfault)
+ on Solaris make.
+
+2010-08-06 Peter Rosin <peda@lysator.liu.se>
+
+ Make cond5.test more robust on MSYS.
+ * tests/cond5.test: Add delay before the first kill attempt to
+ cater for problems with MSYS bash.
+
+2010-08-01 Peter Rosin <peda@lysator.liu.se>
+
+ Wrap some MSVC options in the compile script.
+ * lib/compile: MSVC supports naming the output file, the option
+ is just not called -o, so transform -o into the appropriate form
+ for MSVC. Also wrap some other options while at it (-L, -l, -Wl,
+ -Xlinker and -I) and convert file names to windows form where
+ needed for those options to make MSVC more usable in an
+ autotooled environment.
+ * doc/automake.texi (Auxiliary Programs): Document the above
+ extension of the compile script.
+ * NEWS: Updated.
+ * tests/defs.in: New required entry 'cl'.
+ * tests/compile3.test: New test.
+ * tests/compile4.test: New test.
+ * tests/compile5.test: New test.
+ * tests/Makefile.am: Update.
+
+2010-07-31 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Add example git work flow; discuss merge --log in HACKING.
+ * HACKING: Update.
+ Suggestion by Stefano Lattarini.
+
+ Add more hints for debugging make rules.
+ * doc/automake.texi (Debugging Make Rules): Show command to find
+ out expanded values of variables; point to makefile debugger.
+ * THANKS: Update.
+ Prompted by suggestion from Ludovic Courtès and Andy Wingo.
+
+2010-07-27 Patrick Welche <prlw1@cam.ac.uk> (tiny change)
+
+ Fix typo in the manual.
+ * doc/automake.texi (Scripts): Fix typo.
+
+2010-07-27 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Document current policy for development with git.
+ * HACKING (Working with git): Overhaul.
+ Prompted by suggestion from Stefano Lattarini.
+
+ Fix AM_COND_IF for gone-invalid condition shell expression.
+ * m4/cond-if.m4 (AM_COND_IF): test contents of $COND_TRUE
+ variable, rather than re-evaluating the shell expression for
+ the condition.
+ * tests/cond40.test: Extend test.
+ * NEWS: Update.
+
+ Avoid syntax error if IF-TRUE part of AM_COND_IF expands empty.
+ * m4/cond-if.m4 (AM_COND_IF): Ensure IF-TRUE part is never empty
+ to avoid shell syntax error if the m4 expansion is empty.
+ * tests/cond40.test: Enhance test.
+
+ Coverage: bogus option to AM_INIT_AUTOMAKE.
+ * tests/init2.test: New test.
+ * tests/Makefile.am: Update.
+
+2010-07-21 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Modernize and improve test scripts `subdir*.test'.
+ * tests/subdir.test: Enable `errexit' shell flag, and related
+ changes. Use the `configure.in' stub created by `./defs',
+ rather than writing one from scratch.
+ * tests/subdir2.test: Likewise.
+ * tests/subdir4.test: Likewise.
+ * tests/subdir3.test: Enable `errexit' shell flag, and related
+ changes. Do not create useless dummy source files.
+ * tests/subdir5.test: Make grepping of Makefile.in (in topdir
+ and in subdirs) stricter. Some minor changes to keep it more
+ in sync with the related test `subdir8.test'.
+ * tests/subdir8.test: Likewise (but with the related test being
+ `subdir5.test' here).
+ * tests/subdir6.test: Cosmetic change in spacing.
+ * tests/subdir9.test: Define and use new variable `$distdir'. Add
+ trailing `:' command.
+ * tests/subdir10.test: Cosmetic consistency-related change.
+ * tests/subdirbuiltsources.test: Cosmetic changes in spacings.
+ (configure.in): Use stub created by `./defs', rather than writing
+ it from scratch. Do not use obsoleted and/or deprecated forms of
+ autoconf/automake macros.
+
+ Modernize and improve test scripts `dist*.test'.
+ * tests/distcleancheck.test: Do not add useless `-e' option to
+ a $MAKE call. Extend test by grepping stderr of make.
+ * tests/distcom2.test: Do not run the same test script on the
+ Makefile.in twice, but save its output in an intermediate file
+ instead. Make grepping of DIST_COMMON definition stricter.
+ Display the content of more files, to ease debugging. Add a
+ trailing `:' command. Improved heading comments w.r.t. sister
+ test(s).
+ * tests/distcom6.test: Likewise, and avoid to uselessly run
+ autoconf.
+ * tests/distcom3.test: Ensure verbose printing of captured stdout
+ and stderr. Make grepping of captured stderr stricter. Also,
+ add trailing `:' command.
+ * tests/distcom4.test: Declare the target `test' in the generated
+ Makefile.am as `.PHONY'. Display content of more files, to ease
+ debugging. Add trailing `:' command.
+ * tests/distcom5.test: Likewise. Also, factor out common sed
+ script in subroutine `extract_distcommon'.
+ * tests/distcom7.test: Prefer cat + here-doc over echo to write
+ test Makefile.am files. Add a trailing `:' command.
+ * tests/distname.test: Prefer `gzip -d' over `gunzip'. Move the
+ call to `set -e' earlier. Be stricter and more verbose in the
+ checking of the generated tarball.
+ (configure.in): Use the stub provided by ./defs, instead of
+ writing it from scratch. Avoid obsoleted constructs. Remove
+ useless call to `AM_PROG_CC_C_O'.
+ * tests/distdir.test: Various minor improvements/normalizations.
+ * tests/distlinks.test: Likewise.
+
+2010-07-18 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Improve and extend test cond5.test.
+ * tests/cond5.test: Do not blindly sleep 60 seconds before polling
+ the background automake process, but poll it every 10 seconds for
+ at most 30 times (this makes the test both faster on good machines,
+ and more resilient to spurious timeout-due failures when in low
+ priority or on heavily-loaded systems).
+ Check also that automake writes the expected error messages on the
+ standard error.
+ Enable `errexit' flag, and related changes.
+ Rely on the `configure.in' stub created by `./defs', rather than
+ writing one from scratch.
+
+2010-06-26 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Update program --help output to match current GCS.
+ * configure.ac: Set and substitute PACKAGE_URL if AC_PACKAGE_URL
+ is not defined, for compatibility to Autoconf < 2.64.
+ * Makefile.am (do_subst): Substitute PACKAGE_BUGREPORT and
+ PACKAGE_URL.
+ (sc_diff_automake_in_automake): Update number of diff lines for
+ additional substitutions.
+ * aclocal.in (usage): Use PACKAGE_BUGREPORT. Point to Automake
+ home page and GNU general help page.
+ * automake.in (usage): Likewise.
+ * doc/automake.texi: New flag PACKAGE_BUGREPORT, to factor email
+ address.
+ (Introduction, Creating amhello, amhello Explained, Options):
+ Use it throughout.
+ * lib/Automake/Makefile.am (do_subst): Substitute
+ PACKAGE_BUGREPORT.
+ * lib/Automake/Config.in ($PACKAGE_BUGREPORT): New global.
+ * lib/Automake/ChannelDefs.pm: Use it for footer of fatal
+ messages.
+
+ Clean up @var handling in the manual.
+ * doc/automake.texi: Throughout the manual, lower-case @var
+ names, replace a few one-character names.
+
+2010-06-26 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Fix typo-related bug in test script silent5.test.
+ * tests/silent5.test: Use $EGREP, not $GREP (which is not even
+ defined).
+
+ Tests: remove useless repetitions of `foreign' automake option.
+ * tests/multlib.test (configure.in): Remove useless use of
+ `foreign' option in AM_INIT_AUTOMAKE (the `--foreign' option is
+ already in $AUTOMAKE by default, so no point in repeating it).
+ * tests/subobj10.test: Likewise.
+ * tests/subobj9.test: Likewise.
+ * tests/lex3.test (Makefile.am): Similarly, remove useless use
+ of `foreign' option in AUTOMAKE_OPTIONS.
+ * tests/lex5.test: Likewise.
+ * tests/pr279.test: Likewise.
+ * tests/pr279-2.test: Likewise.
+ * tests/specflg3.test: Likewise.
+ * tests/target-cflags.test: Likewise.
+
+ Drop useless requirement "gzip" in lex5.test.
+ * tests/lex5.test ($required): Do not list "gzip", as it's
+ never used.
+
+2010-06-24 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Fix bugs in test script silent5.test.
+ * tests/silent5.test: Fixed a nasty bug (due to the use of grep
+ instead of egrep) that could have led to false negatives.
+
+2010-06-21 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Add a test checking that distributed broken symlinks cause
+ `make dist' to fail.
+ * tests/distlinksbrk.test: New test.
+ * tests/Makefile.am (TESTS): Updated.
+
+2010-06-21 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix minor testsuite issues, update docs, for Yacc/Lex changes.
+ * doc/automake.texi (Yacc and Lex): Mention AM_YFLAGS, YFLAGS
+ and AM_LFLAGS, LFLAGS in the order in which they now appear in
+ the rules.
+ * NEWS: Update.
+ * tests/lflags.test, tests/lflags2.test, tests/yflags.test,
+ tests/yflags2.test: Prefer `make -e' over `make VAR=VAL', to
+ please maintainer-check. Ensure generated C files contain a
+ declaration, to please compilers.
+
+2010-06-21 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Fix bugs in Automake Yacc/Lex support w.r.t. $(AM_FLAGS) and
+ $(FLAGS) precedence.
+ * automake.in: Fix registration of languages "Lex", "Lex (C++)",
+ "Yacc" and "Yacc (C++)", so that $(LFLAGS) has precedence over
+ $(AM_LFLAGS) and $(YFLAGS) has precedence over $(AM_YFLAGS).
+ * tests/Makefile.am (XFAIL_TESTS): Updated accordingly.
+ * NEWS: Updated.
+
+ New tests, exposing bugs in Automake Yacc/Lex support w.r.t.
+ $(AM_FLAGS) and $(FLAGS) precedence.
+ * tests/lflags.test: New test, check that user $(LFLAGS) takes
+ precedence over automake (AM_LFLAGS) and (foo_LFLAGS). Still
+ xfailing.
+ * tests/lflags2.test: Likewise.
+ * tests/yflags.test: New test, check that user $(YFLAGS) takes
+ precedence over automake (AM_YFLAGS) and (foo_YFLAGS). Still
+ xfailing.
+ * tests/yflags2.test: Likewise.
+ * tests/Makefile.am (TESTS, XFAIL_TESTS): Extended accordingly.
+
+2010-06-20 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Modernize, improve and extend tests `suffix*.test'.
+ * tests/suffix3.test: Enable `errexit' shell flag, and related
+ changes.
+ * tests/suffix4.test: Likewise.
+ * tests/suffix6.test: Likewise, and do not create a useless dummy
+ source file.
+ * tests/suffix7.test: Likewise.
+ * tests/suffix5.test: Enable `errexit' shell flag, and related
+ changes. Make grepping of Makefile.in slightly stricter.
+ * tests/suffix.test: Enable `errexit' shell flag, and related
+ changes. Also, do not redirect grep output to /dev/null, as this
+ might unmotivatedly hide useful information.
+ * tests/suffix2.test: Move setting of `errexit' shell flag earlier
+ in the script (just after inclusion of ./defs). Use a more
+ idiomatic way to count text occurrences in Makefile.in with
+ grep. Do not create useless dummy source files.
+ * tests/suffix10.test: Ensure verbose printing of captured make
+ stdout. Minor cosmetic changes.
+ * tests/suffix8.test: Likewise. Also, drop useless call to the
+ env(1) utility, and make grepping of make output stricter by using
+ $FGREP rather than plain grep.
+ * tests/suffix11.test: Likewise.
+ * tests/suffix12.test: Likewise.
+ * tests/suffix9.test: Prefer cat + here-doc over echo to append to
+ the `configure.in' stub. Cosmetic changes.
+ * tests/suffix13.test: Cosmetic spacing change.
+
+2010-06-13 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Add useful comment in test script ext.test.
+ * tests/ext.test: Add a comment explaining why an apparently
+ useless `if' statement is indeed required.
+
+2010-06-13 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Add useful comment in test script obsolete.test.
+ * tests/obsolete.test: Add a comment explaining why we need
+ an indirection in adding $AUTOUPDATE to $required.
+
+ Normalize whitespaces in 'tests/Makefile.am'.
+ * tests/Makefile.am (TESTS): Use only spaces, not tabs, in the
+ definition of this variable.
+
+ Parallel tests generation: improve comments (tiny change).
+ * tests/Makefile.am ($(parallel_tests)): Added useful comment to
+ generated tests.
+
+ Tests defs: truly get rid of `$am_defs_included' (unused variable)
+ * tests/defs.in ($am_defs_included): Remove, its now unused. It
+ should have been removed in a previous changeset, but the removal
+ was done only partially (oversight).
+
+2010-06-12 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Remove a couple of unneeded conditionals from tests.
+ * tests/pr243.test, tests/pr266.test, tests/strip.test: No need
+ for the FOOTEST conditional.
+
+2010-06-12 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Modernize, improve and/or fix various test scripts.
+ * tests/symlink3.test: Deleted, separated into two new, more
+ complete tests ...
+ * tests/forcemiss.test: ... this one ...
+ * tests/forcemiss2.test: ... and this one.
+ * tests/symlink2.test: Enable `errexit' shell flag, make test
+ stricter, and skip it if symlink creation is not supported.
+ * tests/postproc.test: Enable `errexit' shell flag, related
+ changes, and a couple of unrelated cosmetic changes.
+ * tests/recurs.test: Use the `configure.in' stub created by
+ `./defs', rather than writing one from scratch. Make grepping
+ of Automake stderr slightly stricter.
+ * tests/substtarg.test: Likewise.
+ * tests/strip.test: Likewise, and move the call to `set -e'
+ earlier (just after the inclusion of `./defs'). Also, make sure
+ that the script installed by `make install-script' is equal to
+ the original one.
+ * tests/substref.test: Use the `configure.in' stub created by
+ `./defs', rather than writing one from scratch. Move the call
+ to `set -e' earlier (just after the inclusion of `./defs').
+ Avoid to explicitly export CC for configure (that's already done
+ in ./defs). Avoid potential problems with unpredictable make
+ output. Finally, make grepping of Makefile.in stricter.
+ * tests/substre2.test: Ensure verbose printing of the captured
+ make's output, and make its grepping slightly stricter.
+ * tests/cygwin32.test: Enable `errexit' shell flag, and related
+ changes. Also, do not create useless dummy source/data files.
+ * tests/scripts.test: Likewise.
+ * tests/recurs2.test: Likewise. Also, use the `configure.in'
+ stub created by `./defs'.
+ * tests/Makefile.am (TESTS): Updated.
+
+ Modernize, improve and/or fix tests `pluseq*.test.
+ * tests/pluseq5.test: Append to configure.in using cat with an
+ here-doc, not using echo.
+ * tests/pluseq10.test: Make sure that the captured output of
+ `make' command is always displayed. Where possible, use $FGREP
+ instead of grep (this change makes some checks slightly stricter).
+ * tests/pluseq8.test: Enable `errexit' shell flag, with related
+ changes.
+ * tests/pluseq.test: Likewise. Also, do not create useless dummy
+ data files, and use better m4 quoting in generated configure.in.
+ * tests/pluseq2.test: Likewise. Also, append to configure.in
+ using cat with an here-doc, not using echo.
+ * tests/pluseq3.test: Likewise.
+ * tests/pluseq4.test: Likewise.
+ * tests/pluseq6.test: Likewise.
+ * tests/pluseq7.test: Do not create useless dummy source file.
+ * tests/pluseq9.test: Slightly extended w.r.t. the grepping of
+ Automake stderr. Some unrelated cosmetic changes.
+
+2010-06-12 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ cscope.test: ensure verbose printing of captured stderr.
+ * tests/cscope.test: Print captured stderr before failing.
+
+2010-06-12 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Testsuite: ensure verbose printing of captured stderr.
+ * tests/acloca18.test: Print captured stderr before either failing
+ or grepping it. Be sure to send captured stderr to stderr, not to
+ stdout.
+ * tests/ansi3b.test: Likewise.
+ * tests/cond39.test: Likewise.
+ * tests/configure.test: Likewise.
+ * tests/missing3.test: Likewise.
+ * tests/missing6.test: Likewise.
+ * tests/output-order.test: Likewise.
+ * tests/pr300-ltlib.test: Likewise.
+ * tests/python6.test: Likewise.
+ * tests/python7.test: Likewise.
+ * tests/python8.test: Likewise.
+ * tests/python9.test: Likewise.
+ * tests/subobj.test: Likewise.
+ * tests/vars3.test: Likewise.
+ * tests/missing4.test: Likewise, and fix a call to grep not to use
+ the `-c' flag.
+ * tests/ansi3.test: Likewise, and rely on the `configure.in' stub
+ created by `./defs', rather than writing one from scratch.
+
+ Enable `errexit' shell flag in various tests.
+ * tests/backsl.test: Enable the `errexit' shell flag, and
+ related changes.
+ * tests/backsl2.test: Likewise.
+ * tests/block.test: Likewise.
+ * tests/canon2.test: Likewise.
+ * tests/canon4.test: Likewise.
+ * tests/comment2.test: Likewise.
+ * tests/condlib.test: Likewise.
+ * tests/cond15.test: Likewise, and prefer $FGREP over grep.
+ * tests/canon3.test: Likewise. Also, avoid to create an useless
+ dummy source file.
+ * tests/acoutpt2.test: Enable the `errexit' shell flag, and some
+ related changes. Do some cosmetic improvements in the generated
+ `configure.in' file.
+ * tests/cond4.test: Likewise.
+ * tests/cond14.test: Likewise.
+ * tests/condinc.test: Likewise.
+ * tests/cond7.test: Likewise. Also, remove useless setting of
+ AUTOMAKE_OPTIONS to `foreign' in the generated Makefile.am.
+ * tests/ansi.test: Enable the `errexit' shell flag, and related
+ changes. Extended, esp. by running autoconf, ./configure and
+ make, and by looking into the distdir.
+
+2010-06-12 Stefano Lattarini <stefano.lattarini@gmail.com>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Extend tests/README w.r.t. trailing `:' in test scripts.
+ * tests/README (section "Writing test cases" subsection "Do"):
+ Explain why apparently redundant trailing `:' and `Exit 0' in
+ test scripts can indeed be useful.
+
+2010-06-11 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Improve determination of PATH separator in bootstrap script.
+ * bootstrap: Determine what the PATH separator is the same way
+ autoconf does.
+
+ Minor improvements in bootstrap script.
+ * bootstrap: Consistently use two-spaces indentation. Cosmetic
+ improvement to comments.
+ ($me): New variable, containing program basename.
+ Prepend it to all error messages.
+
+ Testsuite now works with BSD make in parallel mode.
+ * tests/defs.in: Unset variables __MKLVL__ and MAKE_JOBS_FIFO,
+ which are exported by BSD make when run in parallel mode, and
+ which can confuse make processes spawned by our testsuite.
+ This change fixes a lot of spurious failure when the testsuite
+ is run with BSD make in parallel mode.
+
+2010-06-09 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Modernize, improve and/or fix various test scripts.
+ * tests/sanity.test: Rely on the `configure.in' stub created by
+ `./defs', rather than writing one from scratch.
+ * tests/depend2.test: Likewise. Also, call `set -e' just after
+ the inclusion of `./defs', instead that later in the script.
+ * tests/canon5.test: Avoid a useless `|| Exit 1' after a call to
+ $AUTOMAKE, and improve the positioning of an $ACLOCAL call.
+ * tests/exeext4.test: Use $FGREP instead of grep, where possible.
+ Make auxiliary rules in the generated Makefile more silent.
+ These changes make some checks slightly stricter.
+ * tests/ext2.test: Call `Exit 1' if inclusion of `./defs' fails.
+ * tests/gettext2.test: Place final `:' at the end of the script,
+ rather than in the middle.
+ * tests/exeext.test: Call `set -e' just after the inclusion of
+ `./defs', instead that later in the script.
+ * tests/extra5.test: Likewise.
+ * tests/confdeps.test: Likewise. Also, prefer `mv -f' over
+ plain `mv', just to be sure.
+ * tests/depcomp.test: Enable `errexit' shell flag, with related
+ changes. Also, modernize the generated configure.in.
+ * tests/cond9.test: Likewise. Also, rely on the `configure.in'
+ stub created by `./defs', rather than writing one from scratch.
+ * tests/cond10.test: Likewise.
+ * tests/depcomp2.test: Likewise.
+ * tests/depend3.test: Likewise.
+ * tests/distcom7.test: Likewise.
+ * tests/fortdep.test: Likewise. Also, remove definition of
+ AUTOMAKE_OPTIONS to `foreign' in the generated Makefile.am,
+ since that flag is already provided by $AUTOMAKE.
+ * tests/mdate.test: Made stricter, by checking that Automake
+ actually failed, and by making a stricter grep on the error
+ message. Also, set shell `errexit flag'.
+ * tests/python2.test: Improved verbose messages.
+
+ Make test `ammissing.test' stricter.
+ * tests/ammissing.test: Fail if $ACLOCAL succeeds unexpectedly.
+ Enable `errexit' shell flag.
+
+2010-06-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix error in generation of parallel tests.
+ * tests/defs.in ($am_skip_defs): New variable, to be used when
+ ./defs must be sourced multiple times. If set, unset it and
+ only define $srcdir; otherwise, also go through the rest of
+ the script.
+ ($am_defs_included): Remove, no more needed.
+ * tests/Makefile.am ($(parallel_tests)): Update accordingly,
+ using only $srcdir from defs.
+ Fixes potential test failures of tests that use $required.
+
+2010-06-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Enable `errexit' shell flag in some test scripts.
+ * tests/subcond.test: Enabled `errexit' shell flag, and related
+ minor changes.
+ * tests/subst.test: Likewise.
+ * tests/vars.test: Likewise.
+ * tests/version4.test: Likewise.
+ * tests/vpath.test: Likewise.
+ * tests/vtexi2.test: Likewise.
+ * tests/werror.test: Likewise.
+ * tests/whoami.test: Likewise.
+ * tests/tags.test: Likewise, and avoid to crate an useless dummy
+ header file.
+ * tests/acsilent.test: Likewise, and don't use an easily-avoided
+ command substitution.
+ * tests/unused.test: Likewise, and don't use an easily-avoided
+ command substitution.
+ * tests/version.test: Likewise, and avoid deprecated constructs
+ in the generated `configure.in'.
+ * tests/version2.test: Likewise, and avoid deprecated constructs
+ in the generated `configure.in'.
+
+2010-06-07 Stefano Lattarini <stefano.lattarini@gmail.com>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Improve declaration of dependencies in the testsuite.
+ * tests/Makefile.am (check_SCRIPTS): Remove. Instead, let ...
+ ($(TEST_LOGS)): ... all test logs depend on the scripts.
+ * test/gen-parallel-tests: For each parallel test foo-p.test,
+ let `foo-p.log' also depend on `foo.test', since it is sourced.
+
+2010-06-06 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Coverage for TAGS_DEPENDENCIES warning.
+ * tests/tags2.test: New test.
+ * tests/Makefile.am: Update.
+
+ Coverage for use of anachronistic variables.
+ * tests/oldvars.test: New test.
+ * tests/Makefile.am: Update.
+
+ Testsuite coverage for bogus macro file serial numbers.
+ * tests/acloca18.test: Also test ill-formed serial numbers
+ and serial numbers after macro definitions.
+
+ Coverage for aclocal diagnosing underquoted macros.
+ * tests/acloca23.test: New test.
+ * tests/Makefile.am: Update.
+
+2010-06-06 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Prefer AUTOMAKE_fails over `$AUTOMAKE | grep' in tests.
+ * tests/ldadd.test: Enable errexit. Use AUTOMAKE_fails so
+ the verbose log contains all output.
+ * tests/mdate.test: Likewise.
+ Prompted by Stefano Lattarini's change to discover.test.
+
+2010-06-06 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ More minor message fixes.
+ * aclocal.in (scan_file): Fix recommended info command line.
+ * automake.in (handle_lib_objects): No need to prepend function
+ name to prog_error message.
+ (handle_tags): Add missing word and missing space in error
+ message.
+ (handle_dist): Add missing closing single quote in message.
+ Line-wrap one long message for readability.
+
+2010-06-06 Stefano Lattarini <stefano.lattarini@gmail.com>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix distcheck failure with distributed generated parallel tests.
+ * tests/Makefile.am ($(parallel_tests)): Cope with $(srcdir)
+ being different from the value at developer `make dist' time.
+ * tests/defs.in: Protect against multiple inclusion, by using ...
+ ($am_defs_included): ... this new variable.
+ ($srcdir): Do not compute, but simply define to `@abs_srcdir@'
+ as substituted by configure.
+ Report, suggestions and first fix by Ralf Wildenhues, final
+ patch by Stefano Lattarini.
+
+2010-06-06 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Improve tests link*.test (enable `errexit' shell flag).
+ * tests/link_c_cxx.test: Enable `errexit shell flag, and related
+ changes. Also, do not create useless source files.
+ * tests/link_dist.test: Likewise.
+ * tests/link_f90_only.test: Likewise.
+ * tests/link_f_only.test: Likewise.
+ * tests/link_fc.test: Likewise.
+ * tests/link_fccxx.test: Likewise.
+ * tests/link_fcxx.test: Likewise.
+
+2010-06-06 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Improve ext.test semantics, avoid OpenBSD sh errexit issue.
+ * tests/ext.test: Inside shell compound command, use
+ `if $cmd; then Exit 1; fi' rather than `$cmd && Exit 1', to
+ fix failure with OpenBSD sh introduced with last patch.
+ Actually ensure that a rule for .EXT.o is created for each
+ known extension EXT.
+
+2010-06-06 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Enable `errexit' shell flag in some test scripts.
+ * tests/dash.test: Enable `errexit' shell flag, and related
+ changes.
+ * tests/defun.test: Likewise.
+ * tests/defun2.test: Likewise.
+ * tests/dejagnu.test: Likewise.
+ * tests/double.test: Likewise.
+ * tests/distcom2.test: Likewise.
+ * tests/empty2.test: Likewise.
+ * tests/empty3.test: Likewise.
+ * tests/empty4.test: Likewise.
+ * tests/exdir.test: Likewise.
+ * tests/ext.test: Likewise.
+ * tests/extra.test: Likewise.
+ * tests/extra2.test: Likewise.
+ * tests/extra3.test: Likewise.
+ * tests/extra4.test: Likewise.
+ * tests/flibs.test: Likewise.
+ * tests/fnoc.test: Likewise.
+ * tests/fo.test: Likewise.
+ * tests/instexec.test: Likewise.
+ * tests/ltdeps.test: Likewise.
+ * tests/nodep.test: Likewise.
+ * tests/nodepcomp.test: Likewise.
+ * tests/f90only.test: Likewise, and remove botched/obsoleted
+ comments and unnecessary commands.
+ * tests/fonly.test: Likewise, and remove botched/obsoleted
+ comments and unnecessary commands.
+ * tests/discover.test: Likewise, and made stricter.
+
+ Enable `errexit' shell flag in all tests cxx*.test.
+ * tests/cxx.test: Enabled `errexit' shell flag, and related
+ minor changes.
+ * tests/cxxansi.test: Likewise.
+ * tests/cxxcpp.test: Likewise.
+ * tests/cxxlibobj.test: Likewise.
+ * tests/cxxlink.test: Likewise.
+ * tests/cxxo.test: Likewise.
+
+ Enable `errexit' shell flag in various tests.
+ * tests/acoutnoq.test: Enabled `errexit' shell flag, and related
+ minor changes.
+ * tests/acoutpt.test: Likewise.
+ * tests/acoutqnl.test: Likewise.
+ * tests/amassign.test: Likewise.
+ * tests/ansi2.test: Likewise.
+ * tests/ansi4.test: Likewise.
+ * tests/badprog.test: Likewise.
+ * tests/checkall.test: Likewise.
+ * tests/clean.test: Likewise.
+ * tests/colneq2.test: Likewise.
+ * tests/colon.test: Likewise.
+ * tests/colon5.test: Likewise.
+ * tests/colon6.test: Likewise.
+ * tests/comment.test: Likewise.
+ * tests/compile_f90_c_cxx.test: Likewise.
+ * tests/compile_f_c_cxx.test: Likewise.
+ * tests/cond3.test: Likewise.
+ * tests/cond6.test: Likewise.
+ * tests/cond13.test: Likewise.
+ * tests/conf2.test: Likewise.
+ * tests/confvar.test: Likewise.
+ * tests/confvar2.test: Likewise.
+ * tests/cond8.test: Likewise, plus a cosmetic change.
+ * tests/confh4.test: Likewise. Also, add in the heading comments
+ an excerpt from the original bug report which motivated the
+ creation of this test, to make its purpose clearer.
+
+2010-06-06 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Rewrite manual to be gender-neutral.
+ * doc/automake.texi (GNU Build System)
+ (Standard Directory Variables, General Operation, CVS)
+ (Hard-Coded Install Paths, Dependencies As Side Effects):
+ Rewrite text to not contain gender-specific pronouns when
+ speaking about developers or users, either by avoiding pronouns
+ or by addressing them as `you' instead.
+ * THANKS: Update.
+ Report by Christina Gratorp.
+
+ * AUTHORS: Update.
+
+2010-06-06 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Tiny fix in silent8.test (display output of `make' command).
+ * tests/silent8.test: Make sure that the captured output of `make'
+ command is always displayed.
+
+ Make tests on user extensibility of silent-rules mode stricter.
+ * tests/silent6.test: Made stricter w.r.t. the grepping of the
+ output produced by `make'.
+ * tests/silent7.test: Likewise.
+
+ Tests on silent-mode for C/Libtool made stricter.
+ * tests/silent.test: Made stricter w.r.t. the grepping of the
+ output produced by `make'.
+ * tests/silent2.test: Likewise.
+ * tests/silent4.test: Likewise.
+ * tests/silent9.test: Likewise.
+ * tests/silent3.test: Likewise, and add a final `make distclean'
+ command to keep it better in sync with tests/silent{4,9}.test.
+
+ Improved test silent5.test.
+ * tests/silent5.test: Remove by hand all generated C files after
+ non-verbose builds, to ensure the following builds are clean.
+ Try to clean and rebuild with the same verbosity and without
+ removing generated sources in between, to check that this does
+ not trigger a different set of rules. Make grepping of make's
+ output stricter. Improved/added some comments.
+
+ New tests for Automake silent-mode with Fortran.
+ * tests/silentf77.test: New test.
+ * tests/silentf90.test: Likewise.
+ * tests/Makefile.am (TESTS): Updated accordingly.
+
+ New test `silentcxx.test' (Automake silent-mode with C++).
+ * tests/silentcxx.test: New test.
+ * tests/Makefile.am (TESTS): Updated accordingly.
+
+ New test `silentyacc.test' (Automake silent-mode with Yacc).
+ * tests/silentyacc.test: New test.
+ * tests/Makefile.am (TESTS): Updated accordingly.
+
+ New test `silentlex.test' (Automake silent-mode with Lex).
+ * tests/silentlex.test: New test.
+ * tests/Makefile.am (TESTS): Updated accordingly.
+
+ Relax tests on silent-rules to cater to overly verbose makes.
+ * tests/silent.test: When testing silent builds, don't fail if
+ make's output simply contains the `mv' substring, but only if
+ it contains the `mv ' substring (note the trailing space).
+ * tests/silent2.test: Likewise.
+ * tests/silent3.test: Likewise.
+ * tests/silent4.test: Likewise.
+ * tests/silent5.test: Likewise.
+ * tests/silent9.test: Likewise.
+
+2010-05-23 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Extend test on `nostdinc' automake option.
+ * tests/nostdinc.test: Enable `errexit' shell flag. Related and
+ unrelated minor changes. Make the grepping of the generated
+ Makefile.in slightly stricter. Generate and run configure, so that
+ the generated Makefile can be grepped too.
+
+2010-05-23 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Make gnupload portable to EBCDIC hosts.
+ * lib/gnupload: Use literal newline as argument for 'tr' rather
+ than \015, for EBCDIC hosts. Also, avoid unportable nested
+ double-quotes and backquotes.
+ * THANKS: Update.
+ Report from Eric Blake and Steve Goetze via gnulib.
+
+2010-05-23 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Fix Autoconf version required by Automake's configure.
+ Automake configure script used to tell that automake required
+ autoconf 2.60 or later, but then it checked for autoconf >= 2.62,
+ and if that was not found, it gave an error saying that Automake
+ required configure 2.61a-341 or later. This change should
+ eliminate such inconsistencies.
+ * configure.ac ($required_autoconf_version): New variable.
+ Use it throughout.
+
+2010-05-23 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix truncated comment in Makefile.am.
+ * Makefile.am (sc_tests_logs_duplicate_prefixes): Fix unfinished
+ sentence in comment.
+ Report by Stefano Lattarini.
+
+ Relax silent8.test for NetBSD make.
+ * tests/silent8.test: Accept ./foo.info in output as well.
+
+ Fix unportable sed script in maintainer-check test.
+ * Makefile.am (sc_tests_Exit_not_exit): Rewrite sed script to
+ not contain semicolon after 'b' or brace commands, for NetBSD.
+
+ Wildcards are not portable to NetBSD make.
+ * doc/automake.texi (Wildcards): Document portability issue.
+ * tests/extra10.test, tests/extra11.test, tests/extra12.test:
+ Require GNU make.
+
+2010-05-23 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Make test for configure.in vs. configure.ac stricter.
+ * tests/configure.test: Use a configure.in file that provokes
+ an automake error, to ensure configure.ac is preferred.
+
+ Avoid possible false negatives in dejagnu7.test.
+ * tests/dejagnu7.test: Enable shell `errexit' flag. Also, avoid
+ unportable use of fgrep option `-e'.
+
+ Fix conflnk3.test to work with Solaris/Heirloom Sh.
+ * tests/conflnk3.test: Use `test -r FILE' and `test ! -r FILE'
+ instead of respectively `test -e FILE' and `test ! -e FILE',
+ since Solaris Sh doesn't grok the latter. Do not SKIP the test
+ if the shell doesn't support `test -e'.
+
+2010-04-25 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Warning and error message formatting cleanups.
+ * aclocal.in (parse_arguments, main): Remove trailing period or
+ newline in error or warning messages, avoid capitalization of
+ the first word of a message.
+ * automake.in (check_user_variables, handle_languages)
+ (handle_ltlibraries, scan_aclocal_m4, scan_autoconf_config_files)
+ (scan_autoconf_files, cond_stack_if, require_file_internal)
+ (usage, generate_makefile, parse_arguments): Likewise.
+ * lib/Automake/ChannelDefs.pm (set_strictness): Likewise.
+ * lib/Automake/Configure_ac.pm (find_configure_ac): Likewise.
+ * lib/Automake/Options.pm (set_strictness): Likewise.
+ * lib/Automake/Rule.pm (define): Likewise.
+ * lib/Automake/Variable.pm (define, variables_dump): Likewise.
+ * tests/ltinstloc.test, tests/suffix11.test: Adjust expected
+ error message.
+ * lib/Automake/Channels.pm (setup_channel): Reword error message
+ to be the same as in msg.
+
+ Fix placing of ellipses in English text and synopses.
+ * Makefile.am: Be sure to add a space before `...' in natural
+ language text.
+ * automake.in (scan_autoconf_traces): Likewise.
+ * lib/Automake/Rule.pm (define): Likewise.
+ * lib/Automake/Variable.pm (define): Likewise.
+ * lib/am/dejagnu.am: Likewise.
+ * lib/am/progs.am: Likewise.
+ * lib/gnupload (dprint, upload): Likewise.
+ * tests/confdeps.test: Likewise.
+ * tests/location.test: Adjust expected output.
+ * automake.in (usage): In synopsis, use singular for OPTION,
+ * remove space before ellipsis.
+ * aclocal.in (usage): Likewise. Also, fix indentation.
+
+ Fix more duplicate message prefixes.
+ * lib/Automake/XFile.pm (seek): Do not prepend $me.
+ ($me): Remove now-unused package-global.
+ * aclocal.in (check_acinclude): Remove duplicate 'warning: '
+ prefix.
+
+ Fix typo in manual.
+ * doc/automake.texi (Simple Tests using parallel-tests): Add
+ missing closing parenthesis.
+
+ Fix leftover call to removed function macros_dump.
+ * automake.in (read_main_am_file): Call variables_dump, not
+ macros_dump. Print actual error before list of variables.
+
+2010-04-22 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Minor improvements in comments of test `silent3.test'.
+ * tests/silent3.test: Tell to keep it in sync with `silent9.test'
+ too.
+
+2010-04-25 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ testsuite: ensure verbose printing of captured output.
+ * tests/acloca14.test, tests/acloca18.test, tests/aclocal.test,
+ tests/fort2.test, tests/help.test, tests/missing3.test,
+ tests/missing6.test: Print captured stdout or stderr before
+ grepping it.
+
+2010-04-20 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Make test badopt.test stricter (by enabling `set -e').
+ * tests/badopt.test: Add call to `set -e'. Due to this change,
+ an unexpected failure in the call to `$ACLOCAL' (whose outcome
+ was previously unchecked) would cause the whole test to fail.
+ Also, bumped the copyright years.
+
+ Make test for configure.in vs. configure.ac stricter.
+ * tests/configure.test: Use a configure.in file that provokes
+ an automake error, to ensure configure.ac is preferred.
+
+ Use `set -e' in confsub.test (avoids possible false negatives).
+ * tests/confsub.test: Enable shell `errexit' flag, and related
+ changes (this helps avoiding some possible minor false negatives).
+ Also, bumped copyright years.
+
+2010-04-20 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix -Werror handling for presence of configure.in and configure.ac.
+ * lib/Automake/Variable.pm (Automake::Variable): Do not initialize
+ $configure_ac at the global level, before command-line arguments
+ have been parsed.
+ (require_variables): Initialize it here.
+ * tests/configure.test: New test.
+ * tests/Makefile.am: Update.
+ Report by Stefano Lattarini.
+
+2010-04-20 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Avoid possible false negatives in confh5.test.
+ * tests/confh5.test: Enable shell `errexit' flag, and bumped
+ copyright years. Due to this change, any unexpected failure
+ in calls to $ACLOCAL, $AUTOMAKE, $AUTOCONF or $AUTOHEADER, or
+ a failure in grepping expected text in output files should now
+ cause the whole test to fail.
+
+2010-04-17 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Fixed typo in POD documentation of Automake::Channels.
+ * lib/Automake/Channels.pm: Fixed typo in POD documentation:
+ @<...> was used instead of C<...>.
+
+2010-04-14 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Refactor tests on Automake TESTS color output.
+ * tests/color.test: Tests using the expect program moved out to...
+ * tests/color2.test: ... this new file.
+ * tests/Makefile.am (TESTS): Extended accordingly.
+
+2010-04-12 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Fix typos in comments in test confh5.test
+ * tests/confh5.test: Fix a couple of typos in comments.
+
+ Avoid possible false negatives in canon-name.test.
+ * tests/canon-name.test: Enable shell `errexit' flag. Improve
+ test description.
+
+2010-04-11 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Print 'warnings are treated as errors' note if needed.
+ * lib/Automake/Channels.pm: Fix typo in comment.
+ (_print_message): If -Werror is enabled, print a 'warnings are
+ treated as errors' note before the first such warning.
+ * tests/warnopts.test: Adjust comment to mention expected warning.
+ Adjust code to ignore 'warnings are treated as errors' note.
+ * tests/location.test: Adjust expected output with -Werror.
+ * tests/werror4.test: New test.
+ * tests/Makefile.am: Update.
+ * NEWS: Update.
+
+ Ensure we don't print 'warning:' or 'error:' twice.
+ * Makefile.am (sc_ensure_testsuite_has_run): New helper rule.
+ (sc_tests_logs_duplicate_prefixes): New rule, to check for
+ wrong-looking warning and error messages in the test suite logs.
+ * aclocal.in (scan_configure_dep, scan_file): Remove duplicate
+ `warning: ' prefix.
+ * tests/vars3.test: Rename variable to avoid false positive.
+
+ Prepend type to warning, error, and fatal messages.
+ For the first part of messages of types `error' or `fatal',
+ prepend `error: ' to the message. Prepend `warning: ' to
+ warning messages, whatever the setting of -Werror.
+ * lib/Automake/Channels.pm (partial): Move up definition.
+ (_format_message): Emit `header' and `footer' strings only with
+ the first resp. last part of a set of partial messages.
+ * lib/Automake/ChannelDefs.pm: Add missing '1;' statement at the
+ end of the module.
+ (Automake::ChannelDefs): Setup warning channels with header
+ `warning: ', error and fatal messages with header `error: '.
+ * tests/condinc2.test, tests/ltinstloc.test: Adjust expected
+ error messages.
+ * tests/comment5.test: Likewise. Also, include stack notes
+ should not start with `error:'.
+ * tests/location.test: Likewise. Also, try both -Werror and
+ -Wno-error.
+ * NEWS: Update.
+ Report by Bruno Haible.
+
+ Fix capitalization of error messages, reword one message.
+ * lib/Automake/Variable.pm (define): Do not capitalize the first
+ word in the error message.
+ * automake.in (require_file_internal): Likewise. Also, reword
+ and line-wrap for better readability.
+ * tests/distcom7.test, tests/pluseq5.test, tests/pluseq9.test:
+ Adjust tests.
+
+ Fix connected warnings about obsolete exeext override.
+ * lib/Automake/Rule.pm (define): Merge two warnings that belong
+ together, by setting the 'partial' flag for the first one.
+
+ Fix per-Makefile.am setting of -Werror.
+ Before this patch, 'AUTOMAKE_OPTIONS = -Werror' in one
+ Makefile.am would carry over to other Makefile.am files
+ treated afterwards by the same thread, causing inconsistent
+ and unstable exit status values.
+ * lib/Automake/Channels.pm (dup_channel_setup)
+ (drop_channel_setup): Save and restore the setting of
+ $warnings_are_errors.
+ * tests/werror3.test: New test.
+ * tests/Makefile.am: Adjust.
+ * NEWS: Update.
+
+2010-04-11 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Bugfix in confh5.test w.r.t. Solaris/Heirloom Sh.
+ * tests/confh5.test: In the generated Makefile.am: do not use
+ `test ! -e FILE' to check for the non-existence of a file, since
+ that is not supported by Solaris/Heirloom Sh.
+
+ Make test `aclocal3.test' stricter.
+ * tests/aclocal3.test: Add call to `set -e'. Fail if $ACLOCAL
+ succeeds unexpectedly.
+
+ Add tests checking that symlinks are resolved by `make dist'.
+ * tests/distlinks.test: New test.
+ * tests/Makefile.am (TESTS): Updated accordingly.
+ Suggested by observations from Ralf Wildenhues.
+
+2010-04-11 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Use -9 for maximum xz compression with dist-xz.
+ * lib/am/distdir.am (dist-xz, dist, dist-all): Pass -9 to xz.
+ * NEWS, THANKS: Update.
+ Report by Pavel Sanda.
+
+2010-04-11 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Avoid possible false negatives in cond46.test.
+ * tests/cond46.test: Enable shell `errexit' flag (and bumped
+ copyright years). Due to this change, the testcase should now
+ fail on unexpected failures in calls to $ACLOCAL/$AUTOMAKE (whose
+ outcomes were previously unchecked), and on failures in grepping
+ the expected diagnostic in Automake stderr.
+
+2010-04-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Generated tests are now just a thin layer around other tests.
+ * tests/Makefile.am: Rewrite the rule to generate the `*-p.test'
+ test scripts so that any of them simply includes the corresponding
+ `*.test' script (after setting `$parallel_tests' to `yes').
+ * tests/.gitignore: Add wildcard for temporary files used in the
+ generation of `*-p.test' tests.
+
+2010-03-30 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Avoid an unportable use of `$status' shell variable.
+ * Makefile.am (path-check): Don't use the `$status' shell variable
+ in the target's rules, as it's special in Zsh (equivalent to `$?',
+ and readonly).
+
+ Avoid another use of `chmod -R'.
+ * Makefile.am (path-check): To be safe, do not use `chmod -R' on
+ $(distdir) before removing it (as Solaris `chmod -R' touches
+ symlink targets). Instead, use the cleanup strategy used in
+ distdir.am.
+
+2010-03-28 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Remove uses of @acronym and @sc.
+ * doc/automake.texi (Public Macros, Limitations on File Names):
+ Remove all usage of @acronym and @sc in the manual.
+ Suggested by Karl Berry.
+
+2010-03-13 Karl Berry <karl@freefriends.org>
+
+ GNU hello uses fdl.texi, not gpl.texi.
+ * doc/automake.texi (Texinfo): Adjust example to upstream
+ change.
+
+2010-03-06 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Formatting cleanups in macro comments.
+ * automake.in, lib/Automake/Channels.pm,
+ lib/Automake/FileUtils.pm, lib/Automake/Options.pm,
+ lib/Automake/Variable.pm, lib/Automake/XFile.pm,
+ m4/options.m4, m4/substnot.m4: Fix macro comment format.
+
+2010-03-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Avoid generation of `tests/defs-p' file.
+ * tests/defs.in: In the generated `configure.in' snippet: call
+ `AM_INIT_AUTOMAKE' with the `parallel-tests' option if the shell
+ variable `parallel_tests' is set to `yes'.
+ * tests/Makefile.am (defs-p): Target removed.
+ (check_SCRIPTS): Removed `defs-p'.
+ (clean-local-check): Do not unlink `defs-p' anymore.
+ ($(parallel_tests)): Transformation rules for the test scripts
+ adjusted.
+ * tests/gen-parallel-tests: Selection rules for the test
+ scripts adjusted.
+ * tests/parallel-tests.test: Set `$parallel_tests' to `yes'
+ then include `./defs' (rather than simply including `./defs-p').
+ * tests/parallel-tests2.test: Likewise.
+ * tests/parallel-tests3.test: Likewise.
+ * tests/parallel-tests4.test: Likewise.
+ * tests/parallel-tests5.test: Likewise.
+ * tests/parallel-tests6.test: Likewise.
+ * tests/parallel-tests7.test: Likewise.
+ * tests/parallel-tests8.test: Likewise.
+ * tests/parallel-tests9.test: Likewise.
+ * tests/parallel-tests10.test: Likewise.
+ * tests/README (Section "Writing Test Cases" subsection "Do"):
+ Adjusted the parts referring to tests checking `parallel-tests'
+ behaviour. Some other minor related improvements.
+ * tests/.gitignore (defs-p): Removed.
+
+2010-03-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Remove redundant unset of variable TESTS from some test scripts.
+ * tests/color.test: Do not unset the `TESTS' variable, as it's
+ already unset in the `defs' file.
+ * tests/check5.test: Likewise.
+ * tests/check8.test: Likewise.
+ * tests/check9.test: Likewise.
+ * tests/check10.test: Likewise.
+ * tests/check11.test: Likewise.
+ * tests/parallel-tests.test: Likewise.
+ * tests/parallel-tests3.test: Likewise.
+ * tests/parallel-tests4.test: Likewise.
+ * tests/parallel-tests5.test: Likewise.
+ * tests/parallel-tests6.test: Likewise.
+ * tests/parallel-tests7.test: Likewise.
+
+2010-03-01 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix cscope test on systems without working Fortran compiler.
+ * tests/cscope.test: Skip remainder of test if `$MAKE all' fails.
+ * THANKS: Update.
+ Report by Peter Johansson.
+
+2010-02-24 Antonio Diaz Diaz <ant_diaz@teleline.es> (tiny change)
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Add lzip compression support.
+ * automake.in (handle_dist): Recognize dist-lzip.
+ (make_paragraphs): Map LZIP to dist-lzip.
+ * doc/automake.texi (Dist): Add dist-lzip.
+ (Options): Likewise.
+ * lib/Automake/Options.pm (_process_option_list): Add dist-lzip.
+ * lib/am/distdir.am
+ (dist dist-all): Add command to create an lzip-compressed tarball.
+ (distcheck): Handle lzip-compressed tarballs just like the others.
+ * tests/defs.in: Test for lzip, too.
+ * tests/lzip.test: New file, based on nogzip.test.
+ * tests/Makefile.am (TESTS): Add lzip.test.
+ * NEWS: Update.
+
+2010-02-22 Karl Berry <karl@gnu.org>
+
+ Improve help message of mdate-sh.
+ * mdate-sh: mention actual output format in help message.
+
+2010-02-22 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Deprecate dist-lzma in favor of dist-xz.
+ * doc/automake.texi (The Types of Distributions, Options):
+ Adjust text to reflect renaming of lzma to xz.
+ * NEWS: Update.
+ Missing deprecation noted by Antonio Diaz Diaz.
+
+2010-02-20 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Add tests about support of wildcards in EXTRA_DIST.
+ * tests/extra10.test: New test, check basic support of wildcards
+ in EXTRA_DIST.
+ * tests/extra11.test: New test, check more complex usage of
+ wildcards in EXTRA_DIST.
+ * tests/extra12.test: New test, check usage of wildcards in
+ EXTRA_DIST when $builddir != $srcdir.
+ * tests/Makefile.am (TESTS): Updated accordingly.
+ Necessity of these new tests suggested by Braden McDaniel
+ and Ralf Wildenhues.
+
+2010-02-08 Simon Josefsson <simon@josefsson.org>
+
+ Fix copyright statement in gnupload script.
+ * lib/gnupload: Fix copyright statement.
+
+2010-02-06 Dmitry V. Levin <ldv@altlinux.org> (tiny change)
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix exit status of signal handlers in shell scripts.
+ The value of `$?' on entrance to signal handlers in shell scripts
+ cannot be relied upon, so set the exit code explicitly to
+ 128 + SIG<SIGNAL>.
+ * lib/am/check.am (am__check_pre): Use `exit 143' in signal handler.
+ * lib/elisp-comp: Likewise.
+ * lib/install-sh: Likewise.
+ * lib/ylwrap: Likewise. Also, fix script to trap signal 13, not 3.
+ * NEWS, THANKS: Update.
+ Bug report, analysis, and initial patch by Dmitry V. Levin.
+
+2010-02-06 Karl Berry <karl@gnu.org>
+
+ Improve gnupload usage text.
+ * gnupload (usage): Shorten to make more likely to fit on a tty
+ line. Mention CMD in the synopsis. With ..., plural is implied.
+
+2010-01-28 Christos Kontas <xakon@yahoo.com> (tiny change)
+
+ Fix some typos in the manual
+ * doc/automake.texi (Nested Packages, Rebuilding): Fix typos.
+
+2010-01-24 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix silent-rules output for disabled dependency tracking.
+ * lib/am/depend2.am [!%FASTDEP%]: Rework silent-rules variable
+ expansion code to also work in the case where %AMDEP% expands
+ to FALSE at config.status time, using new substitution string
+ %VERBOSE-NODEP%.
+ * automake.in (verbose_nodep_flag): New function, appending
+ `@am__nodep@' to the verbose-variable name.
+ (handle_languages): If dependencies are not disabled, use it to
+ set %VERBOSE-NODEP%.
+ * m4/depend.m4: Substitute am__nodep as '_no', so the second
+ verbose-variable will always expand to an empty string, if
+ dependencies are enabled.
+ * tests/silent5.test: Also test --disable-dependency-tracking;
+ also test per-target flags for non-C language files.
+ * tests/silent9.test: New test, like silent4.test but disable
+ dependency tracking.
+ * tests/Makefile.am: Adjust.
+ * NEWS, THANKS: Update.
+ Report by Dmitry V. Levin <ldv@altlinux.org>.
+
+2010-01-17 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Slighty improve tests acoutbs.test and acoutbs2.test.
+ * tests/acoutbs2.test: Enable `errexit' shell flag. Check that
+ autoconf and configure work, that the file `zot' is created by
+ configure, and that no file containing a backslash in its name is
+ created.
+ * tests/acoutbs.test: Likewise, plus updated copyright years.
+
+ Fix test acoutbs2.test.
+ * tests/acoutbs2: In the generated configure.in: add proper calls
+ to AC_INIT and AM_INIT_AUTOMAKE, and remove explicit definition of
+ PACKAGE and VERSION. Add a call to aclocal before calling automake.
+ Updated copyright years.
+ * tests/Makefile.am (XFAIL_TESTS): Removed acoutbs2.test.
+
+ Add forgotten test scripts to $(TESTS).
+ * tests/Makefile.am (TESTS): Added test scripts present on the
+ filesystem, which were erroneously left out from $(TESTS):
+ acoutbs2.test, badopt.test, extra2.test.
+ (XFAIL_TESTS): Added acoutbs2.test.
+
+2010-01-17 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Sync auxiliary files from upstream.
+ * INSTALL, lib/INSTALL, lib/config.guess, lib/config.sub:
+ Sync from upstream.
+
+ Bump copyright years.
+ * aclocal.in (write_aclocal, version): Bump copyright years.
+ * automake.in (gen_copyright, version): Likewise.
+ * doc/automake.texi: Likewise.
+
+ Rotate ChangeLog.
+ * ChangeLog.09: New file, rotated from ...
+ * ChangeLog: ... here.
+ * Makefile.am (EXTRA_DIST): Distribute ChangeLog.09.
+
+-----
+
+Copyright (C) 2010-2017 Free Software Foundation, Inc.
+
+Copying and distribution of this file, with or without modification, are
+permitted provided the copyright notice and this notice are preserved.
+
+;; Variables:
+;; coding: utf-8
+;; End:
diff --git a/old/ChangeLog.96 b/old/ChangeLog.96
new file mode 100644
index 000000000..eaf1a9c6d
--- /dev/null
+++ b/old/ChangeLog.96
@@ -0,0 +1,3685 @@
+Wed Dec 18 15:27:09 1996 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (read_am_file): Sort configure_vars before adding to
+ output_vars.
+ (handle_yacc_lex_cxx): Sort de_ansi_objects.
+ (handle_man_pages): Sort %section keys.
+
+Tue Dec 10 00:41:17 1996 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (AC_SUBST_PATTERN): Check for alphanumeric variable
+ names only. Test subst.test.
+ (scan_one_configure_file): Skip AC_DEFUN lines. Test
+ defun2.test.
+
+Mon Dec 9 08:18:42 1996 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (file_contents_with_transform): Use ne, not !=, to
+ compare strings. Compare against correct string. From Jim
+ Meyering.
+ (handle_texinfo): Use rm -f to remove info files. From Gord
+ Matzigkeit.
+
+ * Released 1.1l.
+
+ * automake.in (handle_texinfo): Put .ps on @suffixes.
+
+Sun Dec 8 12:29:52 1996 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (am_install_var): Directory with 'exec' in its name
+ is installed by install-exec.
+
+ * subdirs.am (maintainer-clean-recursive): Make commands quiet.
+ * texinfos.am: Make commands quiet.
+ * scripts.am: Make commands quiet.
+ * progs.am: Make commands quiet.
+ * ltlibs.am: Make comamnds quiet.
+ * lisp.am: Make commands quiet.
+ * libs.am: Make commands quiet.
+ * header.am: Make commands quiet.
+ * data.am: Make commands quiet.
+
+ * automake.in (variable_value_as_list): Handle := substitution
+ references.
+ (am_conf_line_error): Take file argument. Changed all callers.
+ (scan_one_configure_file): Skip config header of [$1].
+ (scan_dependency_file): Don't add top_builddir to regex if it is
+ ".". Don't include top_builddir in output if it is ".".
+ (scan_one_configure_file): Skip version of [$2].
+
+Sat Dec 7 11:34:39 1996 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (scan_one_configure_file): New sub.
+ (scan_configure): Scan aclocal.m4 as well as configure.in.
+ (handle_configure): Makefile.in now depends on $(ACLOCAL), because
+ automake scans it.
+
+ * automake.in (handle_configure): Put full path to file onto
+ @rewritten_inputs. Test output4.test.
+
+ * automake.in (handle_configure): Put proper name onto @inputs.
+ Test output3.test.
+
+ * automake.in (handle_configure): Pass correct args to automake
+ invocations. Test remake2.test.
+
+ * automake.in (handle_configure): Check dirname of $file, not of
+ $local. Test output2.test.
+
+ * automake.in (handle_dependencies): Added some missing ";"s in
+ transforms.
+ (get_object_extension): Ditto.
+ (handle_tags): Ditto.
+ (handle_tests): Ditto.
+ (read_am_file): Ditto.
+ (am_install_var): Ditto.
+ (file_contents_with_transform): Die if transform missing trailing
+ ";".
+
+ * automake.in (am_install_var): Quote $ in regexp substitution.
+ From Ulrich Drepper.
+
+Fri Dec 6 18:54:10 1996 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_configure): Require actual input files, not
+ rewritten input files. From Ulrich Drepper.
+
+Thu Dec 5 02:52:20 1996 Tom Tromey <tromey@cygnus.com>
+
+ Suggestion from Mark Galassi:
+ * texinfos.am (DVIPS): New macro.
+ (.dvi.ps): New rule.
+
+ * automake.in (handle_dependencies): Check to make sure
+ --build-directory specified before searching for .P files.
+ (handle_configure): Correctly handle ":" syntax when running
+ config.status.
+
+ * remake.am: Removed rules to regenerate Makefile and Makefile.in;
+ now handled by handle_configure.
+
+ * remake-subd.am: Removed.
+
+ * automake.in (scan_configure): Handle multiple ":"s in AC_OUTPUT
+ arg.
+ (parse_arguments): Ditto.
+ (handle_configure): Ditto.
+ (%other_output_files): Removed.
+ (rewrite_inputs_into_dependencies): New sub.
+ (handle_configure): Use it.
+ (handle_configure): Ditto.
+
+ From Gord Matzigkeit:
+ * automake.in (generate_makefile): Handle ":" in AC_OUTPUT arg.
+ (handle_configure): Ditto.
+
+ * automake.in (handle_single_transform_list): .S is assembly
+ source. From Anthony Green.
+
+ * automake.in (handle_single_transform_list): Correctly rewrite
+ C++ and Fortran source to objects ending in ".o". Test
+ cxxo.test.
+
+ * automake.in: Better error message if file missing.
+
+ * aclocal.in (@obsolete_macros): ud_GNU_GETTEXT is obsolete.
+ * automake.in (handle_gettext): Use AM_GNU_GETTEXT, not
+ ud_GNU_GETTEXT.
+ (scan_configure): Ditto. ud_GNU_GETTEXT is now obsolete.
+
+Wed Dec 4 00:41:23 1996 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (scan_configure): Skip empty elements when adding to
+ libsources. Perl 4 bug reported by Greg A Woods.
+
+ * Makefile.am (perl4-check): New target.
+ (cvs-dist): Run perl4-check.
+
+ Perl 4 fixes. Reported by Greg A. Woods:
+ * automake.in (file_contents_with_transform): If transform caused
+ all chars to go away, then skip rest of loop.
+ (handle_texinfo): Don't use "next" in arg to
+ file_contents_with_transform.
+ (handle_dependencies): Ditto.
+ (handle_tests): Ditto.
+
+ * m4/regex.m4 (AM_WITH_REGEX): Check for GNU regex in libc. From
+ Andreas Schwab.
+
+ * automake.in (parse_arguments): Removed --strictness.
+ (handle_dist_worker): Don't use --strictness.
+ (handle_configure): Ditto.
+ (initialize_global_constants): Don't mention --strictness.
+
+ * automake.in (handle_merge_targets): Use all-recursive-am instead
+ of all-recursive-hack. The latter is ugly, according to Joel
+ Weber.
+
+ * automake.in (handle_emacs_lisp): Push $(ELCFILES) onto @all.
+
+ * automake.in (do_one_clean_target): Allow -local version of clean
+ targets.
+
+Tue Dec 3 18:58:40 1996 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_dependencies): Skip C-only lines in
+ depend2.am when appropriate.
+ * depend2.am (.deps/%.P): Omit modification of $o if language is
+ not C.
+
+Tue Dec 3 11:29:01 1996 Gordon Matzigkeit <gord@gnu.ai.mit.edu>
+
+ * compile-kr.am: Quote arguments to echo.
+
+ * progs.am: Fix up problems when LIBTOOL is not defined (by
+ setting shell variable instprog to the installation program).
+
+ * aclocal.in (scan_file): Allow the acinclude.m4 file to override
+ any other macro files (but still prevent multiple definitions
+ within acinclude.m4).
+
+Tue Dec 3 10:40:48 1996 Tom Tromey <tromey@cygnus.com>
+
+ From Ulrich Drepper:
+ * automake.in (handle_emacs_lisp): Typo fix.
+ (scan_configure): Only recognize VERSION after whitespace.
+
+ * texinfos.am: install-info requires path to info file.
+
+ * progs.am: Use @LIBTOOL@, not $(LIBTOOL).
+
+ * automake.in (am_install_var): If -ltlibs passed, substitute
+ @LIBTOOL@.
+
+Mon Dec 2 13:51:11 1996 Gordon Matzigkeit <gord@gnu.ai.mit.edu>
+
+ * automake.in (get_object_extension): Unshift ansi2knr onto the
+ all target, so that it builds before any other targets.
+ [de_ansi_objects]: Delete, since unshifting ansi2knr is an easier
+ solution.
+
+Mon Dec 2 12:13:27 1996 Tom Tromey <tromey@cygnus.com>
+
+ * Released 1.1i.
+
+ From Janos Farkas:
+ * automake.in (handle_texinfo): Must quote $ for make.
+
+Sun Dec 1 15:08:09 1996 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_configure): Correctly handle common case of
+ multiple non-Makefiles in AC_OUTPUT. Require all input files when
+ using ":" syntax.
+
+Sun Nov 24 00:33:50 1996 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_source_transform): Don't define
+ EXTRA_prog_SOURCES unnecessarily. Test extra2.test.
+
+ * automake.in (initialize_per_input): New variables
+ included_generic_compile, included_knr_compile,
+ included_libtool_compile.
+ (get_object_extension): Use them.
+
+ * automake.in (handle_single_transform_list): Removed
+ Objective-C/C++ support (didn't really work anyway).
+ (handle_single_transform_list): Handle assembly specially.
+
+ * automake.in (handle_yacc_lex_cxx): Set --mode=compile or
+ --mode=link when running libtool.
+
+ * ltlibs.am: Set --mode=install when running libtool.
+ (uninstall-@DIR@PROGRAMS): Set --mode=uninstall when running
+ libtool.
+ * libtool.am (.c.lo): Set --mode=compile when running libtool.
+ * progs.am: Set --mode=install when running libtool.
+
+ Fix for bug reported by François Pinard:
+ * automake.in (do_check_merge_target): New sub.
+ (do_one_merge_target): No longer handle `check'.
+ (handle_merge_targets): Use do_check_merge_target.
+ (initialize_per_input): Set @check_tests.
+ (handle_tests): Push onto @check_tests, not @check.
+
+ * automake.in (am_install_var): Typo fix.
+ (handle_configure): Require $inputs[0].
+
+Fri Nov 22 00:01:45 1996 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_lib_objects): Fixed error message
+ processing.
+
+Thu Nov 21 22:29:30 1996 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (scan_configure): AC_FUNC_FNMATCH doesn't add to
+ LIBOBJS.
+ (handle_configure): Support multi-":" mode for AC_OUTPUT.
+
+ * m4/header.m4: New file.
+
+ * automake.in (scan_configure): Recognize AM_CONFIG_HEADER.
+
+Wed Nov 20 00:23:42 1996 Tom Tromey <tromey@cygnus.com>
+
+ * acinstall: Allow commentary at end of "serial" line. From Gord
+ Matzigkeit.
+
+ * automake.in (handle_yacc_lex_cxx): Only replace output header if
+ it has changed.
+
+Tue Nov 19 19:03:30 1996 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (am_primary_prefixes): Allow configure variables to
+ be named after primary.
+ (am_install_var): Ditto.
+
+ * automake.in (initialize_per_input): Initialize output_header.
+ (generate_makefile): Set up output_header; print it before
+ output_rules.
+ (handle_footer): Put .SUFFIXES into output_header, for AIX.
+
+Mon Nov 18 19:11:53 1996 Gordon Matzigkeit <gord@gnu.ai.mit.edu>
+
+ * automake.in: Added a lot of libtool support. New variable
+ prog_LDFLAGS to pass linker flags. Use libtoolize to install
+ libtool support files.
+
+Mon Nov 18 13:29:55 1996 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_lib_objects): Push @LIBOBJS@ and @ALLOCA@
+ onto dependency list.
+
+ * aclocal.in (obsolete_macros): Include AM_SANITY_CHECK_CC; now
+ part of autoconf proper.
+ * m4/ccsanity.m4: Removed.
+
+Sun Nov 17 12:25:17 1996 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (check_typos): Check to make sure EXTRA_ variables
+ don't contain configure subs.
+ (handle_dist_worker): Removed EXTRA_DIST_DIRS; not needed.
+
+Fri Nov 15 18:58:04 1996 Tom Tromey <tromey@cygnus.com>
+
+ * tags-subd.am: Removed.
+
+ * tags.am (tags-recursive): Removed.
+ (TAGS): Depend on @DIRS@, @CONFIG@. Use @CONFIG@ in rule.
+ (ID): From tags-subd.am.
+
+ * aclocal.in (obsolete_macros): Include AM_FUNC_FNMATCH.
+ * automake.in (scan_configure): Recognize AC_FUNC_FNMATCH.
+ * m4/fnmatch.m4: Removed (now in autoconf).
+
+ * automake.in (initialize_per_input): Init de_ansi_objects.
+ (handle_single_transform_list): Error if extension unrecognized.
+ Set elements of de_ansi_objects.
+ (get_object_extension): Don't push ANSI2KNR onto @all.
+ (handle_yacc_lex_cxx): Put ANSI2KNR into dependency of all ._o
+ files.
+ (pretty_print_internal): Initialize $bol depending on the column.
+
+Fri Nov 15 16:22:15 1996 Gordon Matzigkeit <gord@gnu.ai.mit.edu>
+
+ * library.am: Fixed references to LIBRARY according to new scheme.
+
+ * libs.am, libs-clean.am: Removed references to LIBFILES.
+
+ * automake.texi (A Library): doc fix
+
+ * automake.in (handle_libraries): Deleted references to *LIBFILES,
+ since we now have the full library name in the *LIBRARIES
+ variable.
+ (am_install_var): Removed `-no-all' option, which was only required
+ for the LIBFILES hack.
+
+Fri Nov 15 16:39:29 1996 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in: Applied libtool-related patches from Gord.
+ (scan_configure): Set CC configure var if AM_PROG_LIBTOOL seen.
+ Also indicate that AC_CANONICAL_HOST was run.
+
+ * Makefile.am (pkgdata_DATA): Removed aclocal.m4.
+
+Thu Nov 14 23:11:09 1996 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_yacc_lex_cxx): Don't auto-define YACC, LEX,
+ CXX, CC.
+
+ * dejagnu.am: Print warning if runtest missing.
+
+ From Joerg-Martin Schwarz:
+ * automake.in (handle_aclocal_m4): Find aclocal.m4 in srcdir.
+ (require_file_internal): Unlink file before creating it.
+
+ * depend2.am (.deps/%.P): Don't print commands when running.
+
+Mon Nov 11 10:35:08 1996 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_single_transform_list): Simplified C++
+ matching expression.
+
+Fri Nov 8 09:49:09 1996 Tom Tromey <tromey@cygnus.com>
+
+ * Released 1.1g.
+
+ * compile-kr.am ($(OBJECTS)): Removed.
+
+ * automake.in (get_object_extension): Define ANSI2KNR. Push onto
+ @all if ansi2knr is in this directory.
+
+ * configure.in: Don't run AC_ARG_PROGRAM, AC_PROG_MAKE_SET.
+
+ * m4/init.m4: Run AM_SANITY_CHECK.
+
+ * m4/sanity.m4: New file.
+
+ * automake.in (handle_dist_worker): In Cygnus mode, possibly find
+ files to dist in build dir, not srcdir.
+ (%omit_dependencies): New global.
+ (scan_dependency_file): Handle OMIT_DEPENDENCIES.
+ (scan_configure): Put rx.h, regex.h on %omit_dependencies. Ditto
+ libintl.h.
+ (handle_tests): Remove CYGNUS strings in Cygnus mode.
+ (handle_texinfo): Ditto.
+
+ * texinfos.am (dist-info): New target.
+
+ * automake.in (handle_dist_worker): Use DISTFILES, not
+ DEP_DISTFILES.
+ (initialize_per_input): Initialize dist_targets.
+ (handle_texinfo): Don't compute @infos_list; don't define or use
+ INFOS. Put dist-info onto @dist_targets.
+ (handle_dist_worker): Handle @dist_targets. Don't use the "echo
+ trick" for expanding DISTFILES any more.
+
+ * dist-vars.am (DEP_DISTFILES): Removed.
+ (DISTFILES): Don't include INFOS.
+
+ * automake.in (handle_texinfo): Handle Cygnus mode.
+ * texinfos.am (.texi.info, .texinfo.info): Handle Cygnus mode.
+
+ * automake.in (handle_single_transform_list): New sub.
+ (handle_source_transform): Use it.
+ (handle_built_sources): New sub.
+
+Thu Nov 7 14:49:16 1996 Tom Tromey <tromey@cygnus.com>
+
+ * remake.am ($(srcdir)/Makefile.in): Pass @ARGS@ to automake.
+ * remake-subd.am ($(srcdir)/Makefile.in): Pass @ARGS@ to
+ automake.
+ * automake.in (handle_configure): Pass --cygnus when running
+ automake again.
+
+ * remake-hdr.am ($(srcdir)/stamp-h.in): Depend on @FILES@, not
+ ACCONFIG, CONFIG_TOP, CONFIG_BOT.
+ * automake.in (handle_aclocal_m4): Always find aclocal.m4 in
+ top_srcdir.
+ (handle_configure): Don't define ACCONFIG, CONFIG_TOP, CONFIG_BOT;
+ instead substitute files directly.
+
+Wed Nov 6 10:22:26 1996 Tom Tromey <tromey@cygnus.com>
+
+ * remake-hdr.am (stamp-h): Look in top_builddir for
+ config.status.
+ ($(srcdir)/stamp-h.in): Look in top_srcdir for configure.in.
+
+Thu Oct 31 10:55:59 1996 Tom Tromey <tromey@cygnus.com>
+
+ * texinfos.am (.texi.dvi): Set MAKEINFO when running texi2dvi.
+ From Jim Meyering.
+
+ * automake.in (handle_texinfo): Push install-info-am, not
+ install-info.
+ (handle_merge_targets): Handle no-installinfo option.
+
+ * texinfos.am (install-info-am): Renamed from install-info.
+
+ * automake.in (handle_subdirs): Include install-info-recursive if
+ no-installinfo given.
+
+ * subdirs.am: Include INSTALLINFO token.
+
+ * automake.in (handle_texinfo): Explicitly define MAKEINFO,
+ TEXI2DVI.
+ (cygnus_mode): New global.
+ (handle_dist_worker): Pass --cygnus to automake.
+ (initialize_global_constants): Document --cygnus.
+ (check_cygnus): New sub.
+ (handle_texinfo): Don't require texinfo.tex in Cygnus mode.
+
+ * texi-vars.am: Removed.
+
+ * dejagnu.am (check-DEJAGNU): Don't define rootme.
+
+ * automake.in (handle_tests): Define EXPECT, RUNTEST.
+
+ * dejagnu.am (EXPECT): Removed.
+ (RUNTEST): Removed.
+
+ * automake.in (define_program_variable): New sub.
+
+Mon Oct 28 10:43:48 1996 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_dependencies): Use -M, not -MM, for C++
+ dependencies.
+
+Thu Oct 24 20:21:50 1996 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (check_libobjs_sources): New sub. Test
+ libobj4.test.
+ (handle_source_transform): Don't check for auto-discovered source
+ files here.
+ (handle_programs): Run check_libobjs_sources here.
+ (handle_libraries): Ditto.
+
+ * automake.in (define_configure_variable): New function.
+ (get_object_extension): Use define_configure_variable.
+ (handle_yacc_lex_cxx): Ditto.
+ (handle_emacs_lisp): Ditto.
+ (configure_vars): New global.
+ (AC_CHECK_PATTERN): New global.
+ (seen_ranlib, seen_prog_cc, seen_prog_cxx, seen_prog_lex):
+ Removed.
+ (handle_yacc_lex_cxx): Use configure_vars, not seen_prog_*.
+ (AC_SUBST_PATTERN): New global.
+ (scan_configure): Use AC_SUBST_PATTERN; don't set seen_prog_*.
+ (handle_libraries): Don't use seen_ranlib.
+ (read_am_file): Run define_configure_variable on each discovered
+ variable.
+
+Mon Oct 21 23:06:49 1996 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (scan_configure): Handle AM_INIT_GUILE_MODULE.
+ (handle_libraries): Pass configure substitutions directly on to
+ LIBFILES.
+
+ * automake.in (AM_PACKAGE_VERSION_PATTERN): New global.
+ (scan_configure): Use it. Test version.test.
+
+Sun Oct 20 12:08:46 1996 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_dist_worker): Explicitly pass distdir to
+ dist-hook make. From Tatu Ylonen.
+
+ * m4/strtod.m4: Use correct cache variable.
+
+Thu Oct 17 13:45:20 1996 Tom Tromey <tromey@cygnus.com>
+
+ Lisp fixes from Erick Branderhorst:
+ * m4/lispdir.m4: Define lispdir, not LISPDIR.
+ * lisp.am: Added missing \.
+
+Fri Oct 11 00:44:49 1996 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_source_transform): Only rewrite c, yacc, lex
+ to use de-ansi-fication.
+ (scan_configure): Handle multi-line AC_REPLACE_FUNCS. Test
+ libobj5.test.
+
+ * automake.in (handle_lib_objects): Added $lex_seen argument.
+ Error if lex file used but LEXLIB not seen.
+ (handle_programs): Ditto.
+ (handle_yacc_lex_cxx): Define LEXLIB variable.
+ (handle_lib_objects): Don't allow LEXLIB to end up on dependency
+ list.
+
+Thu Oct 10 16:12:38 1996 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_gettext): Moved check for SUBDIRS and
+ ABOUT-NLS here.
+
+ * automake.in (handle_configure): Run mkinstalldirs under
+ $(SHELL).
+ (handle_yacc_lex_cxx): Run interlock under $(SHELL).
+
+ * remake-subd.am (Makefile): Run config.status under $(SHELL).
+ * remake-hdr.am (stamp-h): Run config.status under $(SHELL).
+ * remake.am (Makefile): Run config.status under $(SHELL).
+ (config.status): Ditto.
+
+ * automake.in (read_am_file): Removed UNMAINT code.
+ (file_contents_with_transform): Ditto.
+ * m4/maintainer.m4: Removed bogus UNMAINT code.
+
+ * automake.in (handle_emacs_lisp): Define EMACS variable.
+ (handle_emacs_lisp): Make sure EMACS is in environment when
+ elisp-comp is run.
+
+ * elisp-comp: Exit with status 1 if usage bad.
+ Use "emacs -q". Use EMACS environment variable if set (unless set
+ to t).
+
+ * m4/lispdir.m4: Unset EMACS if it is set to `t'.
+
+ * automake.in (handle_dist_worker): Allow EXTRA_DIST items to be
+ in subdirs.
+ (do_one_merge_target): Use all-am, not all, in subdirs case.
+ (handle_merge_targets): Always generate all-am in subdirs case.
+
+ * remake.am (Makefile): Depend on BUILT_SOURCES.
+ * remake-subd.am (Makefile): Depend on BUILT_SOURCES.
+ * depend.am (.deps/.P): Don't depend on BUILT_SOURCES.
+
+ * automake.in (handle_yacc_lex_cxx): Handle y.tab.h in non-ylwrap
+ case.
+
+ * ylwrap: Bug fix. From Jim Meyering.
+
+Wed Oct 9 22:51:16 1996 Tom Tromey <tromey@cygnus.com>
+
+ * m4/mktime.m4: Don't define AC_HEADER_SYS_TIME_H; instead just
+ check directly for header.
+
+Mon Oct 7 13:08:15 1996 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (scan_configure): fp_WITH_DMALLOC and fp_WITH_REGEX
+ are obsolete.
+
+Sun Oct 6 00:43:01 1996 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (AC_CONFIG_AUX_DIR_PATTERN): New global.
+ (AM_INIT_AUTOMAKE_PATTERN): New global.
+ (scan_configure): Use them.
+
+ * aclocal.in (add_file): Search contents of included files. Test
+ req.test.
+ (scan_m4_files): Don't skip acinclude.m4 when constructing
+ search. Test acsilent.test.
+ (scan_m4_files): Scan acinclude.m4.
+
+ * aclocal.in (add_file): Removed debugging print.
+ (scan_configure): Set $file_contents when scanning acinclude.m4.
+ Test acinclude.test.
+
+ * configure.in: Upped to 1.1g.
+
+ * Released 1.1f.
+
+ * texinfos.am: Run : after install-info.
+
+ * aclocal.in (parse_arguments): Better error message.
+ * automake.in (parse_arguments): Better error message.
+
+ * remake.am (Makefile): Depend on $(srcdir)/Makefile.in, to work
+ around broken makes. From David A. Swierczek.
+ * remake-subd.am (Makefile): Ditto.
+
+Sat Oct 5 11:29:48 1996 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (generate_makefile): Put BUILT_SOURCES onto @all if
+ appropriate.
+ (handle_source_transform): Error if discovered source file is
+ mentioned.
+ (do_one_merge_target): Move all-vs-check test here.
+
+ * m4/obstack.m4: New file.
+ * m4/error.m4: New file.
+
+ * automake.in (scan_configure): Support AM_FUNC_MKTIME,
+ AM_FUNC_ERROR_AT_LINE, AM_FUNC_OBSTACK.
+
+ * texinfo.tex: New version from texinfo 3.9.
+
+ * automake.in (handle_yacc_lex_cxx): Updated for new ylwrap.
+ Also, handle y.tab.h file when "yacc -d" is used.
+ (do_one_merge_target): Use pretty_print_rule.
+
+ * ylwrap: Changed usage.
+
+ * m4/mktime.m4: New file.
+
+ * m4: Renamed all .m4 files to fit into 14-char limits.
+
+ * m4/Makefile.am (EXTRA_DIST): New macro.
+
+ * aclocal.in ($ac_defun_rx, %map, %file_contents): New globals.
+ (scan_m4_files): Use $ac_defun_rx.
+ (add_file): Ditto.
+ Run scan_m4_files.
+ (scan_configure): Scan acinclude.m4 before anything else.
+ (scan_file): New sub.
+ (check_acinclude): New sub.
+ (add_file): Rewrote.
+
+ * progs-clean.am, progs.am: Renamed from programs-clean.am,
+ programs.am.
+ * libs-clean.am, libs.am: Renamed from libraries-clean.am,
+ libraries.am.
+ * texi-vars: Renamed from texinfos-vars.am.
+ * comp-vars.am: Renamed from compile-vars.am.
+ * texi-vers.am: Renamed from texi-version.am.
+
+ * automake.in (require_file_internal): Give error if symlink can't
+ be made.
+ (require_config_file): Error message references configure.in.
+ (handle_yacc_lex_cxx): Fix order of arguments to ylwrap; from
+ Joerg-Martin Schwarz.
+ (handle_texinfo): Use texi-vers, not texi-version.
+ (get_object_extension): Use comp-vars, not compile-vars.
+ (handle_texinfo): Use texi-vars, not texinfos-vars.
+ (handle_libraries): Use `libs' prefix, not `libraries'.
+ (handle_programs): Use `progs' prefix, not `programs'.
+
+Fri Oct 4 01:14:08 1996 Tom Tromey <tromey@cygnus.com>
+
+ * aclocal.in (scan_m4_files): New sub.
+
+ * m4/AM_FUNC_STRTOD.m4 (am_cv_func_strtod_needs_libm): Set
+ am_cv_func_strtod_needs_libm, so we can avoid linking with -lm
+ everywhere.
+
+Thu Oct 3 20:11:16 1996 Tom Tromey <tromey@cygnus.com>
+
+ * texinfos.am (uninstall-info): Run install-info --remove.
+
+ * automake.in (read_am_file): Define all variables after reading
+ .am file. Test vpath.test. Reported by Anthony Green.
+
+Mon Sep 30 08:31:51 1996 Tom Tromey <tromey@cygnus.com>
+
+ * texinfos.am: Run install-info.
+
+ * automake.in (variable_value_as_list): Just return if comment
+ seen. Report from Mark Galassi.
+ (handle_options): Don't bother with explicit comment checking.
+
+Tue Sep 24 09:15:46 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (read_am_file): Cleaned up dejagnu variables.
+
+Mon Sep 23 00:04:48 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (parse_arguments): New usage to conform to GNU
+ standards.
+
+ * aclocal.in (parse_arguments): New usage to conform to GNU
+ standards.
+
+ * automake.in (handle_scripts): Push new target onto @check.
+ * scripts.am (check-@DIR@SCRIPTS): New target.
+
+ * automake.in (initialize_global_constants): Define %dist,
+ dist_header, dist_trailer.
+ (handle_dist): Make dist-all target.
+ (generate_makefile): Run check_typos later.
+ (examine_variable): New sub.
+ (handle_tags): Examine TAGS_DEPENDENCIES. Test spell3.test.
+ Error if TAGS_DEPENDENCIES but no sources used.
+ (handle_configure): Examine CONFIGURE_DEPENDENCIES.
+
+Sat Sep 21 13:59:15 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (am_install_var): More error checking.
+
+Fri Sep 20 09:06:37 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * tags.am (TAGS): Minor cleanup.
+
+ * clean.am (distclean-generic): Don't remove CONFIG_HEADER.
+
+ * remake-hdr.am (mostlyclean-hdr, clean-hdr, distclean-hdr,
+ maintainer-clean-hdr): New targets.
+
+ * automake.in (handle_configure): Define CONFIG_HEADER correctly
+ when it is in current directory.
+ (handle_configure): Push "hdr" on @clean.
+
+ * remake-hdr.am (stamp-h): Run config.status in top_builddir.
+ ($(srcdir)/stamp-h.in): Run autoheader in top_srcdir.
+
+ * automake.in (scan_configure): Check for install.sh here.
+ (basename): New sub.
+ (handle_configure): Handle case where config.h is in subdir.
+ (handle_configure): Make stamp-in.h for user if it doesn't already
+ exist.
+ (touch): New sub.
+
+Tue Sep 17 23:35:14 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * Makefile.am (EXTRA_DIST): Include pkgdata_DATA.
+
+ * dist-vars.am (DISTFILES): Don't distribute BUILT_SOURCES or
+ DATA.
+ (DEP_DISTFILES): Ditto.
+
+Mon Sep 16 22:28:56 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (check_typos): Renamed.
+ (check_typos): Check for _LDADD, _LIBADD, and _DEPENDENCIES.
+ (variable_defined): Note variable as being "seen".
+ (handle_lib_objects): Don't push configure substitutions onto
+ _DEPENDENCIES.
+
+Sun Sep 15 22:45:43 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (initialize_per_input): Init content_seen.
+ (variable_value_as_list): Set content_seen entry.
+ (define_variable): Ditto.
+ (define_pretty_variable): Ditto.
+ (check_source_typos): New sub.
+ (generate_makefile): Call it.
+
+Thu Sep 12 15:03:19 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (handle_source_transform): Removed extraneous
+ space. Test implicit.test.
+ (read_am_file): Make sure "canonical" variables are mentioned in
+ %contents.
+ (scan_configure): AC_CHECK_TOOL sets $seen_canonical to
+ $AC_CANONICAL_HOST conditionally.
+ (handle_footer): Don't use define_pretty_variable in all cases.
+
+Wed Sep 11 11:54:44 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * clean.am (distclean-generic): Remove CONFIG_CLEAN_FILES here,
+ per GNU/Gnits standards.
+
+ * libraries.am (install-@DIR@LIBRARIES): Use two loops, so new
+ NORMAL_INSTALL and POST_INSTALL variables can work when empty.
+
+ * automake.in (handle_options): Rewrote version handling. Now
+ returns error indicator.
+ (MACRO_PATTERN, BOGUS_MACRO_PATTERN): Handle `:=' definitions.
+ (RULE_PATTERN): Exclude `:=' from being a rule.
+
+ * m4/AM_PROG_CC_STDC.m4 (ac_save_CC): Bug fix from Jim Meyering.
+
+ * automake.in (variable_value_as_list): Always use am_line_error.
+ (define_variable): New sub.
+ (get_object_extension): Use define_variable.
+ (handle_yacc_lex_cxx): Ditto.
+ (handle_source_transform): Ditto.
+ (handle_programs): Ditto.
+ (handle_libraries): Ditto.
+ (handle_texinfo): Ditto.
+ (handle_man_pages): Ditto.
+ (handle_dependencies): Ditto.
+ (handle_aclocal_m4): Ditto.
+ (define_pretty_variable): New sub.
+ (handle_source_transform): Use define_pretty_variable.
+ (handle_lib_objects): Ditto.
+ (handle_libraries): Ditto.
+ (handle_dist): Ditto.
+ (handle_dependencies): Ditto.
+ (handle_configure): Ditto.
+ (handle_footer): Ditto.
+ (handle_emacs_lisp): Ditto.
+ (am_install_var): Ditto.
+
+ * Released version 1.1e.
+
+ * automake.in ($GNITS_VERSION_PATTERN): Handle non-alpha
+ releases.
+
+ * configure.in: Version 1.1e.
+
+ * automake.in (handle_texinfo): Distribute .info file.
+
+Sun Sep 8 09:00:37 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * Makefile.am (EXTRA_DIST): New macro.
+ (maintainer-clean): Don't run "make check".
+ (pathchk): New target.
+
+ * automake.in (check_gnits_standards): Only check version number
+ syntax at top level.
+ ($package_version_line): New variable.
+ (scan_configure): Set it.
+ (check_gnits_standards): Use am_conf_line_error.
+ (scan_configure): Remove extraneous whitespace from version
+ number.
+ (handle_dist): Handle distcheck-hook.
+
+ * m4/AM_PROG_CC_STDC.m4: Applied patch from Jim Meyering.
+
+ * automake.in (scan_configure): Handle AM_WITH_REGEX.
+ (handle_lib_objects): Require .h files in %libsources but don't
+ generate dependencies for them.
+ (scan_configure): Also require rx.h and regex.h.
+
+ * m4/Makefile.am (m4data_DATA): Don't include AM_PROG_LIBTOOL,
+ AM_FEATURE_CTYPE, AM_FEATURE_ERRNO, AM_FEATURE_EXIT,
+ AM_SYSTEM_HEADER.
+
+ * texi-version.am: Use "cp; rm" and not "mv", to work around
+ broken mvs.
+
+ * automake.in ($package_version): New global.
+ (scan_configure): Set it.
+ (check_gnits_standards): Verify version string; require
+ README-alpha if alpha version.
+ (scan_configure): Recognize AM_FUNC_FNMATCH,
+ AM_REPLACE_GNU_GETOPT.
+
+ * Makefile.am (installcheck-local): Check all scripts.
+
+Sat Sep 7 19:22:32 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * tags-clean.am: Do deletions here again.
+
+Thu Sep 5 09:06:23 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (usage): Include bug-reporting information.
+ (handle_lib_objects): Error if LIBOBJS seen but never set.
+
+ * aclocal.in ($acdir): Use @datadir@/aclocal.
+ (usage): Include bug-reporting information.
+
+Wed Sep 4 11:36:06 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (handle_source_transform): .deps no longer in
+ srcdir.
+ (handle_lib_objects): Ditto.
+ (handle_dist_worker): Pass --build-dir to automake.
+ ($build_directory): New global.
+ (parse_arguments): Handle --build-dir.
+ (initialize_global_constants): Include --build-dir in help.
+ (scan_dependency_file): New sub.
+ (handle_dependencies): Use it. Also, use $build_directory.
+ (initialize_global_constants): Added --srcdir-name.
+ (parse_arguments): Ditto.
+ (handle_dist_worker): Ditto.
+ ($srcdir_name): New global.
+ ($srcdir_rx): New global.
+ (parse_arguments): Set it.
+
+ * depend2.am: Removed all mention of $(srcdir).
+
+ * depend.am (MKDEP): Use gcc -M, not gcc -MM.
+ Removed all mention of $(srcdir); dependencies now put into build
+ dir.
+
+ * depend2.am ($(srcdir)/.deps/%.P): Fixed computation of `top'.
+ Don't do work silently.
+
+ * automake.in (handle_merge_targets): Error if invalid uninstall
+ targets are given.
+ (read_am_file): Fix for test block.test.
+
+Tue Sep 3 18:50:32 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * texinfos.am (install-info): Added NORMAL_INSTALL.
+ * scripts.am (install-@DIR@SCRIPTS): Added NORMAL_INSTALL.
+ * programs.am (install-@DIR@PROGRAMS): Added NORMAL_INSTALL.
+ * lisp.am (install-@DIR@LISP): Added NORMAL_INSTALL.
+ * libraries.am (install-@DIR@LIBRARIES): Added NORMAL_INSTALL.
+ Also, use POST_INSTALL when running ranlib.
+ * header.am (install-@DIR@HEADERS): Added NORMAL_INSTALL.
+ * data.am (install-@DIR@DATA): Added NORMAL_INSTALL.
+
+ * automake.in (handle_man_pages): Added NORMAL_INSTALL invocation.
+ (handle_merge_targets): Ditto.
+ (handle_merge_targets): Error if PRE_INSTALL, POST_INSTALL, or
+ NORMAL_INSTALL defined.
+
+ * m4/AM_PROG_INSTALL.m4: INSTALL_SCRIPT defaults to
+ ${INSTALL_PROGRAM}. From François Pinard.
+
+Tue Aug 27 08:25:05 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (file_contents_with_transform): Correctly remove
+ @(UN)?MAINT@ from input when maintainer mode not active.
+ (handle_aclocal_m4): Handle no-maintainer-mode case.
+
+ * remake-hdr.am ($(CONFIG_HEADER)): Removed @MAINT@.
+
+ * m4/AM_SANITY_CHECK_CC.m4: New file (from Jim Meyering).
+
+Mon Aug 26 21:37:32 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (handle_lib_objects): Bug fix from Steve M Robbins.
+ (handle_libraries): Don't include libraries from EXTRA_LIBRARIES
+ in LIBFILES definition. Reported by Steve M Robbins. Test
+ alllib.test.
+
+ * automake.in (variable_value_as_list): New sub.
+ (handle_source_transform): Use it.
+ (handle_lib_objects): Ditto.
+ (handle_libraries): Ditto.
+ (handle_texinfo): Ditto.
+ (handle_man_pages): Ditto.
+ (am_install_var): Ditto.
+ (handle_options): Ditto.
+
+Sat Aug 24 09:30:46 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ Reported by Jim Meyering:
+ * automake.in (get_object_extension): Look in "./" for ansi2knr if
+ no path found.
+ (handle_aclocal_m4): Protect aclocal.m4 rule with @MAINT@.
+
+ * remake.am (.PHONY): New target.
+
+ * m4/AM_MAINTAINER_MODE.m4: Also define UNMAINT.
+
+ * automake.in (check_gnu_standards): Disallow no-installman,
+ no-installinfo.
+ (read_am_file): Sed out UNMAINT too.
+ (file_contents_with_transform): Ditto.
+
+ * acinstall: New file.
+
+ * m4/AM_INIT_AUTOMAKE.m4: Define PACKAGE and VERSION.
+
+ * m4/AM_WITH_REGEX.m4: New version from François Pinard.
+
+ * m4/AM_TYPE_PTRDIFF_T.m4: Use am_cv, not ac_cv.
+ * m4/AM_C_PROTOTYPES.m4: Ditto.
+ * m4/AM_FUNC_STRTOD.m4: Ditto.
+ * m4/AM_PROG_CC_STDC.m4: Ditto.
+ * m4/AM_PROG_LIBTOOL.m4: Ditto.
+
+Fri Aug 23 22:23:50 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * m4/Makefile.am (m4datadir): New macro
+ (m4data_DATA): Renamed.
+
+ * Makefile.am (cvs-dist): Depend on distcheck target.
+
+Mon Aug 19 15:37:32 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (initialize_global_constants): [common_files]
+ Include acinclude.m4.
+
+ * m4/AM_PROG_CC_STDC.m4: Patch from Jim Meyering/Kaveh Ghazi.
+
+Sat Aug 17 11:27:14 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (handle_dependencies): Push `depend'-clean targets
+ on @clean.
+ * depend.am (mostlyclean-depend, clean-depend, distclean-depend,
+ maintainer-clean-depend): New targets.
+
+Tue Aug 13 17:53:58 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * texinfos.am (.texinfo.info): New target.
+ (.texinfo.dvi): New target.
+
+ From Jim Meyering:
+ * automake.in (handle_texinfo): Use `.info[-0-9]*' as pattern to
+ match info files.
+ (handle_texinfo): Handle `.texinfo' files.
+
+Mon Aug 12 10:28:46 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (require_file_internal): Special-case `.' when
+ finding files to distribute. Test libobj2.test.
+
+ * aclocal.in (add_file): Fixed regexp for matching AC_DEFUN. Test
+ order.test.
+
+ * m4/AM_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL.m4: New file.
+ * m4/AM_SYS_POSIX_TERMIOS.m4: New file.
+
+ * compile-kr.am: Removed duplicate ansi2knr rules.
+
+Sun Aug 11 00:20:16 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (handle_yacc_lex_cxx): Bug fix from Josh MacDonald.
+ (handle_yacc_lex_cxx): Put C++ extensions on suffix list.
+ (mkdir): Removed.
+
+ * automake.in (initialize_global_constants): [common_files]
+ Include interlock and ylwrap.
+
+ * Released version 1.1c.
+
+ * aclocal.in (obsolete_macros): md_TYPE_PTRDIFF_T and
+ ud_PATH_LISPDIR are obsolete names.
+
+ * m4/AM_LC_MESSAGES.m4, m4/AM_WITH_NLS.m4, m4/AM_GNU_GETTEXT.m4:
+ Removed.
+
+ * automake.in (handle_lib_objects): Changed interface. Now
+ generates _DEPENDENCIES variable if appropriate.
+ (handle_emacs_lisp): Use AM_PATH_LISPDIR.
+ (scan_configure): Ditto.
+
+ * Makefile.am (CLEANFILES): Removed.
+
+ * automake.in (handle_configure): Define CONFIG_CLEAN_FILES.
+
+ * clean.am (clean-generic): Remove $(CONFIG_CLEAN_FILES).
+
+ * compile-vars.am (CC, CFLAGS, COMPILE, LINK): Removed.
+
+ * automake.in (handle_yacc_lex_cxx): Require ylwrap in
+ multi-lex/yacc case.
+ (handle_source_transform): Changed return result.
+ (handle_programs): Use linker returned by
+ handle_source_transform.
+ (seen_prog_cc, seen_prog_cxx): New globals.
+ (scan_configure): Recognize AC_PROG_CC and AC_PROG_CXX.
+ (handle_yacc_lex_cxx): Error message if AC_PROG_CXX or
+ AC_PROG_YACC missing.
+ (seen_decl_yytext, seen_prog_lex): New globals.
+ (scan_configure): Set them.
+ (handle_yacc_lex_cxx): Warn about missing AC_PROG_LEX or
+ AC_DECL_YYTEXT.
+ (handle_yacc_lex_cxx): Use $(LEX_OUTPUT_ROOT).
+ (initialize_per_input): Initialize seen_c_source.
+ (handle_yacc_lex_cxx): Define CC, CFLAGS, COMPILE, LINK only when
+ C source seen.
+ (handle_source_transform): Set seen_c_source.
+
+ * interlock: Changed usage.
+
+ * ylwrap: New file.
+
+ * automake.in (handle_yacc_lex_cxx): Renamed.
+
+ * automake.in (handle_dependencies): Handle %cxx_extensions.
+ Include depend2.am when appropriate.
+
+ * depend2.am: New file; contents from depend.am but templatized.
+
+ * automake.in (initialize_per_input): Initialize
+ %cxx_extensions.
+ (handle_source_transform): Set %cxx_extensions.
+
+Sat Aug 10 10:29:30 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * interlock: New file.
+
+ * automake.in (handle_yacc_lex): New sub.
+ (handle_source_transform): Removed most yacc/lex handling.
+ (initialize_per_input): Init yacc_sources, lex_sources.
+ (generate_makefile): Run handle_yacc_lex.
+ (handle_merge_targets): Use `scalar' and not $# to find length of
+ array.
+
+ * m4/AM_FEATURE_EXIT.m4: Wrote.
+ * m4/AM_FEATURE_CTYPE.m4: Wrote.
+ * m4/AM_FEATURE_ERRNO.m4: Wrote.
+
+ * aclocal.in (macro_seen): New global.
+ (add_file): Set macro_seen entry. Only push required macro on
+ @rlist if not already seen. Test defun.test.
+
+ * automake.in (get_object_extension): Handle directory prefix on
+ `ansi2knr' option.
+
+ * kr-extra.am: New file.
+
+ * kr-vars.am: Removed.
+
+ * automake.in (handle_options): Handle directory prefix on
+ `ansi2knr' option.
+
+ * automake.in (scan_configure): Recognize AM_FUNC_STRTOD.
+
+ * aclocal.in (add_file): Error if macro is duplicated. Test
+ dup.test.
+
+Fri Aug 9 09:18:46 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (handle_programs): Substitute @XLINK@. Make sure
+ linker variable is transformed name.
+ * program.am (@PROGRAM@): Use @XLINK@ to link.
+
+ * automake.in (handle_scripts): Fixed call to
+ am_primary_prefixes.
+ (handle_libraries): Better error message when AC_PROG_RANLIB
+ required.
+
+ * automake.in (handle_libraries): Canonicalize library name. Test
+ canon4.test.
+ * library.am (lib@LIBRARY@.a): Use @XLIBRARY@ where appropriate.
+ (lib@LIBRARY@.a): Look at _DEPENDENCIES variable.
+
+Thu Aug 8 10:57:21 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (handle_scripts): Correctly compute
+ $scripts_installed. Test scripts.test.
+
+Wed Aug 7 12:13:15 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * ansi2knr.c: New version.
+
+Tue Aug 6 10:58:37 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (handle_source_transform): Handle more C++ file
+ extensions. "Handle" Objective C. Handle more FORTRAN
+ extensions.
+
+ * compile-vars.am (LEX): Removed.
+ (YACC): Removed.
+
+ * automake.in (handle_source_transform): Correctly handle lex
+ source. Test lex.test.
+ (handle_source_transform): Skip more C++ headers. Generate macro
+ definitions for YACC and LEX on first use.
+
+ * aclocal.in (parse_arguments): Mention GNU.
+ * automake.in (parse_arguments): Mention GNU.
+
+Mon Aug 5 00:12:45 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (handle_programs): Define program_LINK.
+ * program.am (@PROGRAM@): Use program_LINK to link.
+
+ * Released version 1.1b
+
+ * automake.in (scan_configure): AM_INIT_AUTOMAKE sets
+ seen_prog_install to `2'.
+
+ * configure.in: Don't run AM_PROG_INSTALL.
+
+ * automake.in (parse_arguments): Use $PACKAGE.
+ ($PACKAGE): New global.
+ ($am_c_prototypes): Renamed.
+ (get_object_extension): Use am_c_prototypes.
+ (scan_configure): Ditto.
+ (scan_configure): Use AM_MAINTAINER_MODE.
+ (scan_configure): Warn about obsolete macros.
+
+ * aclocal.in (parse_arguments): Use $PACKAGE.
+ ($PACKAGE): New global.
+
+ * Makefile.am (CLEANFILES): Added aclocal.
+ (ETAGS_ARGS): Added aclocal.in.
+ (TAGS_DEPENDENCIES): Ditto.
+ (maintainer-check): Depend on aclocal.
+ (maintainer-check): Check aclocal.
+ (bin_SCRIPTS): Include aclocal.
+
+ * automake.in (scan_configure): Handle AM_INIT_AUTOMAKE.
+ (scan_configure): Use AM_PROG_INSTALL.
+
+ * configure.in: Use AM_INIT_AUTOMAKE.
+
+ * automake.in (keyed_aclocal_warning): Warning tells about
+ aclocal.
+ (handle_aclocal_m4): New sub.
+ (handle_configure): Use it.
+
+ * aclocal.in (output_file): New global.
+ (usage): Handle --output.
+ (parse_arguments): Handle --output.
+
+ * m4/AM_INIT_AUTOMAKE.m4: New file.
+
+ * m4/AM_PROG_CC_STDC.m4: Require AC_PROG_CC.
+ Don't touch CFLAGS.
+
+ * automake.in (handle_dist_worker): Reverted erroneous "-chmod".
+ (handle_texinfo): Don't generate `.info-[0-9]' as a filename.
+
+ * texinfos.am (.texi.info): Force .info file to be built in
+ srcdir. From Franc,ois Pinard.
+
+ From Jim Meyering:
+ * m4/AM_PROG_CC_STDC.m4: (fp_PROG_CC_STDC): Include sys/stat.h in
+ test program so that DYNIX/ptx V4.1.3 doesn't use `-Xc
+ -D__EXTENSIONS__' -- with those options on that system, sys/stat.h
+ gets compile errors. With help from Marcus Daniels.
+
+ * automake.in (initialize_global_constants): Put elisp-comp into
+ @common_files. Bug from Glenn Amerine.
+
+Sun Aug 4 12:52:43 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (handle_dist_worker): Use fgrep, not grep.
+
+ * m4/AM_C_PROTOTYPES.m4: Changes from François Pinard.
+
+ * automake.in (handle_emacs_lisp): Include lisp-clean.am in
+ output.
+ (initialize_global_constants): [install_man_format] Don't hide
+ "ugliness" at install time.
+
+ * lisp-clean.am: New file.
+
+ * tags-clean.am (maintainer-clean-tags): Remove TAGS and ID here.
+
+ * automake.in (handle_man_pages): Patch from Janos Farkas to fix
+ bug when installing man pages. Test man.test.
+ (initialize_global_constants): [install_man_format] Make sure man
+ page can actually be found in either source or build dirs.
+ (handle_dist_worker): Use "755" permissions on distdir.
+
+ * automake.in (handle_dist): Allow chmod's to fail.
+ (am_primary_prefixes): New function.
+ (am_install_var): Use it.
+ (handle_libraries): Use it. Test libfiles.test.
+ (handle_dist): For dist-tarZ, assume traditional "tar" and
+ "compress".
+
+ * m4/AM_FUNC_STRTOD.m4: New file.
+
+ * automake.in (handle_dist): Only generate `distdir' variable if
+ it doesn't already exist.
+
+ Fix for bug reported by Harlan Stenn. Test tags.test.
+ * automake.in (initialize_per_input): Define dir_holds_sources.
+ (handle_tags): Check dir_holds_headers.
+ (handle_headers): Set dir_holds_headers.
+
+ * automake.in (handle_texinfo): Generate "version.texi" dependency
+ for .dvi file. Bug reported by Glenn Amerine. Test vtexi2.test.
+
+ * automake.in (handle_configure): Require file $input, not
+ "$local.in". From Nyul Laszlo. Test colon.test.
+
+Sun Jul 28 11:14:52 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * aclocal.in: New file.
+ * configure.in: Generate m4/Makefile, aclocal.
+ * Makefile.am (SUBDIRS): Include m4.
+ * m4/Makefile.am: New file.
+
+Fri Jul 19 10:12:27 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (initialize_global_constants): Put ansi2knr.c and
+ ansi2knr.1 into common_files. Bug report from François Pinard.
+
+Mon Jul 15 10:28:29 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * install-sh: Updated copyright notice.
+
+Fri Jul 5 08:23:00 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * subdirs.am (maintainer-clean-recursive): Don't be so noisy.
+ Report from Josh MacDonald.
+
+ Bugs from Gord Matzigkeit:
+ * automake.in (handle_footer): Push contents of $(SUFFIXES), not
+ `$(SUFFIXES)'.
+ (handle_dist): Ignore chmod return results.
+
+ * programs-clean.am (clean-@DIR@PROGRAMS): Work around failing
+ Solaris "rm -f". Bug from Kaveh R. Ghazi.
+ * libraries-clean.am (clean-@DIR@LIBRARIES): Likewise.
+
+Fri Jun 21 10:42:06 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * texinfos.am (install-info): Use "if", not "&&", to avoid
+ install problem when glob doesn't match.
+
+ * automake.in (initialize_global_constants): [USAGE] Added
+ --no-force.
+ (force_generation): New global.
+ (parse_arguments): Handle --no-force.
+ (generate_makefile): Handle --no-force.
+
+ * Makefile.am (maintainer-check): Ensure all invocations of
+ mkinstalldirs are correct.
+
+Tue Jun 18 10:53:54 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (handle_tests): Don't directly generate site.exp.
+
+Sun Jun 16 22:21:16 1996 Harlan Stenn <harlan@brown.pfcs.com>
+
+ * automake.in: Treat an initial `#' on a word in AUTOMAKE_OPTIONS
+ as a comment start. Add support for a dist-tarZ target.
+
+Tue Jun 11 22:14:21 1996 Marcus Daniels <marcus@sayre.sysc.pdx.edu>
+
+ * depend.am ($(srcdir)/.deps/%.P): Convert absolute $(top_srcdir)
+ paths into relative paths.
+
+Mon Jun 10 21:11:20 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * texinfo.tex: New version.
+
+ * automake.in: Look for AM_PROG_LIBTOOL. From Gord Matzigkeit.
+ (initialize_global_constants): Added libtool to
+ @common_sometimes.
+ (handle_source_transform): Pass YFLAGS to yacc and LFLAGS to lex.
+
+Sun Jun 9 17:45:48 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * texinfos.am (install-info): Don't install ~ files. Bug report
+ from Greg McGary.
+ * automake.in (handle_texinfo): Don't push '.info*' onto
+ @infos_list.
+
+ * automake.in (handle_gettext): Ensure po and intl in SUBDIRS when
+ using gettext.
+ (handle_dist): Pass --with-included-gettext to configure if using
+ gettext.
+
+ * compile-kr.am (._c._o): Pass -c to $(COMPILE).
+ (.c._o): Ditto.
+ * compile.am (.c.o): Pass -c to $(COMPILE).
+ * compile-vars.am (COMPILE): Don't include -c.
+
+ * remake.am ($(srcdir)/Makefile.in): Pass --strictness to
+ automake.
+ * automake.in (handle_configure): Supply --strictness arg to
+ automake.
+
+Fri Jun 7 12:31:31 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (handle_tests): Fix quoting on `pwd`.
+ (handle_options): Recognize no-installinfo option.
+ (handle_man_pages): Don't put man directory on @installdirs if
+ no-installman is specified.
+ (handle_texinfo): Handle no-installinfo option.
+ (handle_options): Compare version against $num_version, not
+ $VERSION.
+ (handle_source_transform): Generate rules for output of lex,
+ yacc. Bug report from Thomas Morgan. Test yacc.test.
+ (handle_dist): "distcheck" now runs "make dvi".
+ (handle_tests): Support $(TESTS_ENVIRONMENT). Idea from Ulrich
+ Drepper.
+
+ * dejagnu.am (check-DEJAGNU): Depend on site.exp.
+
+Sun Jun 2 10:33:10 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (handle_emacs_lisp): New function.
+ (initialize_global_constants): Added elisp-comp to
+ @common_sometimes.
+ (seen_lispdir): New global.
+ (scan_configure): Handle ud_PATH_LISPDIR.
+
+ * elisp-comp: New file.
+
+ * lisp.am: New file.
+
+ * automake.in (generate_makefile): Run handle_emacs_lisp.
+
+ * aclocal.m4 (ud_PATH_LISPDIR): New macro, from Ulrich Drepper.
+
+ * automake.in (initialize_global_constants): Removed version.texi
+ from common_sometimes.
+ (initialize_global_constants): Added texinfo.tex to common_files.
+ Test texinfo.test.
+ (handle_tests): Allow dejagnu- and automake-style test suites to
+ coexist. Test dejagnu.test.
+ (initialize_global_constants): New constants AC_CANONICAL_HOST,
+ AC_CANONICAL_SYSTEM.
+ (scan_configure): Use new constants.
+ (handle_tests): Put target specific information into site.exp if
+ AC_CANONICAL_* used.
+ (read_am_file): Generate some extra variables when AC_CANONICAL_*
+ used.
+ (handle_options): Allow version number to have letters appended.
+ (handle_tests): Error if RUNTEST, RUNTESTFLAGS defined but dejagnu
+ option not specd.
+ (initialize_global_constants): install_man_format changed to
+ handle built man pages.
+
+Wed May 29 10:35:01 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * config.guess, config.sub: New versions.
+
+Tue May 28 19:27:11 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * configure.in (VERSION): Upped to 1.0.
+
+Sat May 25 10:19:53 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (handle_tests): Handle dejagnu.
+ (handle_options): Recognize dejagnu option.
+
+ * dejagnu.am: New file.
+
+Thu May 23 10:01:13 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (handle_dist): Run installcheck target from
+ distcheck.
+
+ * configure.in (VERSION): Upped to 0.34.
+
+ * automake.in (scan_configure): Always allow upgrading to
+ fp_PROG_INSTALL. Test fpinstall.test.
+
+Wed May 22 14:45:28 1996 Joshua Cowan <jcowan@hermit.reslife.okstate.edu>
+
+ (handle_dist): Make `distcheck' check `install' target, too.
+
+Wed May 22 09:49:27 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (initialize_per_input): Don't initialize
+ $output_directory here; initialize it globally. From Joshua
+ Cowan. Test outdir.test.
+
+Sat May 18 10:57:40 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (handle_tests): Don't push TESTS onto dist_common.
+ (initialize_global_constants): Put install-sh and mkinstalldirs
+ into @common_files. Test insh2.test.
+
+Fri May 17 09:02:02 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (handle_source_transform): Don't generate _OBJECTS
+ when no source files specified. Test number.test.
+
+ From Joerg-Martin Schwarz:
+ * automake.in (seen_package, seen_version): New globals.
+ (scan_configure): Look for PACKAGE= and VERSION=.
+
+ * automake.in (handle_options): Recognize dist-zip.
+ (handle_dist): Handle dist-zip.
+ (handle_options): Use ' ', not \s+, with split. Test
+ backsl.test.
+ (handle_source_transform): Likewise.
+ (handle_lib_objects): Likewise.
+ (handle_libraries): Likewise.
+ (handle_texinfo): Likewise.
+ (handle_man_pages): Likewise.
+ (handle_subdirs): Likewise.
+ (handle_gettext): Likewise.
+ (handle_footer): Likewise.
+ (handle_tests): Likewise.
+ (scan_configure): Likewise.
+ (am_install_var): Likewise.
+
+ * Makefile.am (TAGS_DEPENDENCIES): New macro.
+
+ * tags.am (tags-recursive): New target.
+ (TAGS): Depend on it.
+
+ * automake.in (handle_tags): Put tags-recursive on @phony.
+
+ * tags-subd.am (TAGS): Depend on HEADERS, SOURCES,
+ TAGS_DEPENDENCIES.
+ * tags.am (TAGS): Depend on HEADERS, SOURCES, TAGS_DEPENDENCIES.
+
+Thu May 16 09:21:48 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * remake.am (configure): Depend on $(CONFIGURE_DEPENDENCIES).
+
+ * automake.in (scan_configure): Look for install-sh and
+ mkinstalldirs here.
+ (initialize_global_constants): Moved mdate-sh from
+ common_sometimes to common_files. Test mdate2.test.
+
+Tue May 14 21:52:01 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (seen_maint_mode): New global.
+ (scan_configure): Handle jm_MAINTAINER_MODE.
+ (read_am_file): Handle seen_maint_mode.
+ (file_contents_with_transform): Handle seen_maint_mode.
+ (handle_source_transform): Changed interface, all callers.
+
+ From Jim Meyering:
+ * remake-hdr.am, remake-subd.am, remake.am, texi-version.am:
+ Handle @MAINT@.
+ * aclocal.m4 (jm_MAINTAINER_MODE): New macro.
+
+ * automake.in (handle_configure): Check $config_aux_dir against
+ empty string. From Markku Rossi. Test mkinstall.test.
+
+Fri May 10 14:38:47 1996 Gord Matzigkeit <gord@gnu.ai.mit.edu>
+
+ * automake.in (distcheck): Added new rule to top level
+ Makefile.in.
+
+Wed May 8 21:57:21 1996 Gord Matzigkeit <gord@gnu.ai.mit.edu>
+
+ * automake.in (scan_configure): Make sure that gm_PROG_LIBTOOL
+ sets seen_ranlib.
+ (generate_makefile): libtool, config.sub, and config.guess should
+ only ever appear in the top directory of a package.
+
+Tue May 14 10:24:30 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (initialize_global_constants): Added libversion.in
+ to @common_files.
+
+ * configure.in (VERSION): Upped to 0.33.
+
+ * automake.in (am_install_var): Fixed problem in EXTRA_ handling.
+ Test extra.test.
+
+Mon May 13 10:41:41 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * install-sh (transformbasename): Correct misspelling of
+ transformbasename. From Ian Lance Taylor.
+
+Sat Apr 27 11:39:10 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (handle_configure): Set mkinstalldirs variable
+ here.
+ (handle_dist_worker): Explicitly set distdir in subdir makes.
+ (handle_dist): Handle separate distdir target.
+ (handle_dist_worker): Only generate distdir target.
+
+ * texinfos.am (install-info): Use $(mkinstalldirs).
+ * scripts.am (install-@DIR@SCRIPTS): Use $(mkinstalldirs).
+ * programs.am (install-@DIR@PROGRAMS): Use $(mkinstalldirs).
+ * libraries.am (install-@DIR@LIBRARIES): Use $(mkinstalldirs).
+ * header.am (install-@DIR@HEADERS): Use $(mkinstalldirs).
+ * data.am (install-@DIR@DATA): Use $(mkinstalldirs).
+
+ * automake.in (read_am_file): Set mkinstalldirs variable.
+ (handle_man_pages): Use it.
+ (handle_installdirs): Ditto.
+
+Fri Apr 26 15:10:48 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (handle_man_pages): Fix mkinstalldirs invocation.
+
+Thu Apr 25 18:40:06 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (handle_dist_worker): Use $(TAR), not tar.
+ (handle_merge_targets): Make sure config header is built before
+ recursing into subdirs.
+ (handle_libraries): Generate LIBFILES for check_LIBRARIES.
+ (handle_merge_targets): Handle case where nothing is installed but
+ something must be built -- "make install" must still work.
+
+ * dist-vars.am (TAR): New macro.
+
+ * automake.in (scan_configure): Support AC_REPLACE_GNU_GETOPT.
+ (handle_configure): Require stamp-h.in when config header used.
+
+Tue Apr 23 17:57:13 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * doc/mdate-sh: Extract the last field from the date output, not
+ the sixth, which will fail when the timezone name has more than
+ one word or is missing.
+
+Wed Apr 24 20:29:26 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (am_install_var): Use delete, not undef, to remove
+ EXTRA entry. From Gord Matzigkeit.
+
+Mon Apr 22 17:48:50 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (read_am_file): Handle case where last line doesn't
+ end in newline.
+
+Tue Apr 9 22:53:16 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (variable_defined): New function.
+ (read_am_file): Ensure a blank line comes before starting comments
+ from Makefile.am.
+ (initialize_per_input): Initialize %targets.
+ (read_am_file): Set appropriate entry in %targets.
+ Many changes to use variable_defined.
+ (check_gnu_standards): Only require ChangeLog at top level. From
+ Gord Matzigkeit.
+ (handle_tests): check-TESTS depends on $(TESTS). From Gord
+ Matzigkeit.
+
+Mon Apr 8 22:51:41 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (parse_arguments): Added short options.
+ (initialize_global_constants): Ditto.
+
+Fri Apr 5 00:22:14 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * mkinstalldirs (errstatus): Don't necessarily die if mkdir
+ fails.
+
+ * automake.in (handle_source_transform): Typo fix.
+
+Thu Apr 4 15:10:50 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (handle_dist_worker): Renamed dist-local to
+ dist-hook.
+ (handle_merge_targets): Added install-data-hook and
+ install-exec-hook.
+ (handle_source_transform): Handle EXTRA_prog_SOURCES form.
+
+ * automake.in (handle_scripts): Never allow scripts_installed to
+ become 0.
+
+ * scripts.am (install-@DIR@SCRIPTS): Scripts can be found in
+ srcdir.
+
+ * automake.in (generate_makefile): Derived file names from given
+ input; don't assume Makefile.in and Makefile.am.
+ (am_file_name, in_file_name): New globals.
+ (read_am_file): Use them.
+
+ * program.am (@PROGRAM@): Use transformed program name.
+
+ * remake-hdr.am (stamp-h): Actually touch stamp-h.
+
+Wed Apr 3 15:16:06 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (require_file_internal): Use correct file for error
+ messages. Test insh.test.
+
+Mon Apr 1 09:47:44 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * texinfos.am (.texi.info): Build output file in srcdir.
+
+ * automake.in (require_file_internal): If $dir is ".",then look in
+ relative directory.
+ (handle_texinfo): Canonicalize name of texi file before looking
+ for dependency variable.
+
+Thu Mar 28 08:33:21 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (require_conf_file_with_conf_line): Yet another
+ function of this form.
+ (libtool_line): New variable.
+ (handle_libraries): Handle libtool.
+
+ * libraries-vars.am: Removed.
+
+ * automake.in (seen_libtool): New variable.
+ (scan_configure): Look for gm_PROG_LIBTOOL or AC_PROG_LIBTOOL.
+
+ * automake.in (handle_dist_worker): Handle dist-local.
+
+ * Makefile.am (maintainer-check): Do "make check" after all syntax
+ checks.
+
+ * texi-version.am (stamp-@VTI@): Look for mdate-sh in appropriate
+ directory.
+
+ * automake.in ($seen_arg_prog): New global.
+ (handle_programs): Error if AC_ARG_PROGRAM not seen.
+ (handle_scripts): Ditto.
+ (handle_configure): mkinstalldirs now a config file.
+ (handle_installdirs): Find mkinstalldirs in config_aux_dir.
+ (handle_dist_worker): Removed DIST_SUBDIRS.
+ (require_file_path): New variable.
+ (require_file_with_conf_line): Set it.
+ (require_file_with_line): Ditto.
+ (require_file): Ditto.
+ (require_file_internal): Incorporated code from
+ require_config_file.
+ (require_config_file): Rewrote.
+ (require_conf_file_with_line): New function.
+ (handle_texinfo): Use it for mdate-sh.
+ (handle_texinfo): Look for mdate-sh in appropriate directory.
+
+Tue Mar 26 13:47:54 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * Makefile.am (cvs-dist): Find NEWS in srcdir.
+ * automake.in (handle_dist_worker): Find NEWS in srcdir.
+ ($RULE_PATTERN): Include chars "$(){}/" in allowable patterns in a
+ rule.
+ (require_config_file): Set config_aux_path when file found.
+ ($config_aux_dir): New variable.
+ (require_config_file): Set it.
+ (handle_man_pages): Find mkinstalldirs in config_aux_dir.
+
+Mon Mar 25 15:32:57 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * data.am (install-@DIR@DATA): Also allow data to be in build
+ directory.
+
+Sun Mar 24 19:56:28 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (am_install_var): Don't look in EXTRA_primary
+ variable any more; it is handled in the main loop.
+
+Wed Mar 20 16:22:35 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * data.am (install-@DIR@DATA): Find data in srcdir.
+
+Fri Mar 15 18:30:31 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (require_config_file): Use correct filename when
+ looking for errors. Also, install file in `.' if not found. Bug
+ reported by Gord Matzigkeit. Test installsh.test.
+
+Thu Mar 14 09:28:21 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * Makefile.am (cvs-diff): New target.
+
+ Fix for bug when install var substitutes empty. Test empty.test.
+ * header.am (install-@DIR@HEADERS): Allow empty list of headers.
+ (uninstall-@DIR@HEADERS): Ditto.
+ * scripts.am (install-@DIR@SCRIPTS): Allow empty list of scripts.
+ (uninstall-@DIR@SCRIPTS): Ditto.
+ * libraries.am (install-@DIR@LIBRARIES): Allow empty list of
+ libraries.
+ (uninstall-@DIR@LIBRARIES): Ditto.
+ * data.am (install-@DIR@DATA): Allow empty list of data.
+ (uninstall-@DIR@DATA): Ditto.
+ * programs.am (install-@DIR@PROGRAMS): Added missing semicolon.
+ From François Pinard.
+ (install-@DIR@PROGRAMS): Fixed bug when list of programs empty.
+ (uninstall-@DIR@PROGRAMS): Ditto.
+
+Wed Mar 13 19:50:23 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * tags-subd.am (ID): Name of ID file must be flush against -f.
+
+ * configure.in (VERSION): Version 0.32.
+
+Mon Mar 11 17:50:58 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (seen_linguas, all_linguas_line): New variables.
+ (handle_gettext): New function.
+ (generate_makefile): Run it.
+ (scan_configure): Recognize ALL_LINGUAS.
+
+Mon Mar 11 14:34:36 1996 Gord Matzigkeit <gord@enci.ucalgary.ca>
+
+ * automake.texi: doc fix.
+
+ * automake.in (am_install_var): Added support for check and
+ installcheck special prefixes.
+
+Sun Mar 10 10:44:42 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (handle_subdirs): Don't do SUBDIRS check for
+ gettext.
+
+Tue Mar 5 18:12:04 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (OBJECT_PATTERN): Removed.
+ (am_install_var): No error if name is invalid.
+ (handle_programs): Canonicalize program names.
+ (BOGUS_MACRO_PATTERN): New variable.
+ (read_am_file): Error if bad macro name given.
+ (require_file_internal): Use am_line_error, not am_conf_error.
+
+ * program.am (@PROGRAM@): Recognize @PROGRAM@_DEPENDENCIES.
+
+Mon Mar 4 19:30:24 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (handle_lib_objects): New function.
+ (handle_libraries): Use it.
+ (handle_programs): Ditto.
+ (handle_dist_worker): Deprecate DIST_SUBDIRS.
+ (am_install_var): Allow extended directory mechanism to work.
+ Test exdir.test.
+
+ * dist-vars.am (DISTFILES): Use EXTRA_DIST.
+ (DEP_DISTFILES): Ditto.
+
+ * automake.in (OBJECT_PATTERN): New variable.
+ (am_install_var): Use it.
+ (handle_dist): DIST_OTHER is an anachronism.
+
+Sat Mar 2 17:04:38 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (handle_dist_worker): Only cause Automake to be
+ re-run if not making a distribution. Fixes bug reported by
+ Joerg-Martin Schwarz.
+ (require_file_with_line): New function.
+ (require_file): Use it.
+ (am_line_error): Don't print line number if $symbol is empty.
+ (get_object_extension): Use require_file_with_line.
+ (handle_libraries): Use require_file_with_line.
+ (handle_texinfo): Use require_file_with_line.
+ (handle_configure): Use am_conf_line_error and
+ require_file_with_conf_line.
+ (handle_subdirs): Use require_file_with_conf_line.
+ (handle_configure): Use require_file_with_conf_line.
+ (handle_tests): Push check-TESTS on @phony.
+ (am_conf_line_error): New function.
+ (require_file_with_conf_line): New function.
+ (require_file_internal): New function.
+ (require_file_with_line): Use it.
+ (require_file): Ditto.
+ (am_conf_line_error): Handle empty line number.
+ (ac_gettext_line, ac_output_line): New variables.
+ (scan_configure): Set them.
+
+Fri Mar 1 00:13:04 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (parse_arguments): Default strictness is gnu.
+ Changed `normal' to `foreign' everywhere.
+ (parse_arguments): Handle --foreign.
+ (initialize_global_constants): Document --foreign.
+ (handle_dependencies): Better error message.
+ (handle_texinfo): Don't push $vtexi on @texis.
+ (handle_texinfo): Only push $vtexi on @texi_deps if not null.
+ (handle_configure): install-sh is a config file; require it as
+ such.
+ (parse_arguments): Renamed --install-missing to --add-missing.
+ (add_missing): Renamed from install_missing.
+ (am_install_var): Check to make sure contents of install variable
+ are correct if primary requires it. Test badprog.test.
+ (initialize_global_constants): Initialize
+ %primary_uses_subobjects.
+ (handle_source_transform): Skip configure substitutions. Test
+ depend.test. Also, skip empty elements.
+
+Thu Feb 29 22:00:30 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * texinfo.tex: New version.
+
+ * automake.in (am_install_var): Allow extended range of
+ installation directories.
+
+ * automake.in (get_object_extension): Don't allow
+ @CONFIG_INCLUDE_SPEC@ in the Makefile.in when config.h not used.
+ From Gord Matzigkeit. Test confincl.test.
+
+ * texinfos.am (install-info): Changed usage of install-info (in
+ comment). Per Feb 25 GNU Standards document.
+
+Wed Feb 28 07:40:55 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (handle_tests): New function.
+ (generate_makefile): Call it.
+ (handle_subdirs): Skip directories whose names look like configure
+ substitutions.
+ (handle_subdirs): Require intl and po, not @INTLSUB@ and @POSUB@,
+ when using gettext.
+ (scan_configure): Clear in_ac_output if "]" found. Test
+ acoutqnl.test.
+ (require_config_file): New function.
+ (generate_makefile): Use require_config_file.
+ (config_aux_path): New variable.
+ (scan_configure): Check for AC_CONFIG_AUX_DIR.
+ (handle_merge_targets): Add install-strip rule.
+
+Tue Feb 27 20:00:36 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * mdate-sh: New version from Ulrich Drepper.
+
+ * automake.in (handle_source_transform): Changed fill back to
+ empty string.
+ (handle_libraries): Ditto.
+ (handle_dist): Ditto.
+ (handle_dependencies): Ditto.
+ (handle_footer): Ditto.
+ (handle_phony): Ditto.
+
+ * Makefile.am (DIST_SUBDIRS): Removed.
+ (installcheck-local): Use Perl, not test -x.
+ (PERL): New macro.
+ (maintainer-check): Use $(PERL), not @PERL@.
+
+ * configure.in (VERSION): Upped to 0.31.
+
+Sat Feb 24 18:02:19 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (scan_configure): AC_CHECK_TOOL requires config.sub
+ and config.guess.
+
+ * automake.in: Use keyed_aclocal_warning when warning about
+ fp_PROG_INSTALL.
+ (get_object_extension): Use keyed_aclocal_warning when warning
+ about fp_C_PROTOTYPES.
+ (keyed_aclocal_warning): New function.
+
+ * Makefile.am (pkgdata_DATA): Install aclocal.m4.
+ * aclocal.m4: Include fp_C_PROTOTYPES, fp_PROG_CC_STDC.
+
+ * automake.in (get_object_extension): Only give error about
+ fp_C_PROTOTYPES once.
+
+ * automake.in (seen_ranlib): New variable.
+ (scan_configure): Recognized AC_PROG_RANLIB.
+ (handle_libraries): Error if ranlib not checked for.
+
+ * automake.in (default_strictness): Default to GNU.
+ (default_strictness_name): Ditto.
+
+Wed Feb 21 18:15:02 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (read_am_file): Removed @kr@ support.
+ (get_object_extension): Ditto.
+
+ * Makefile.am (pkgdata_DATA): Include ansi2knr.c and ansi2knr.1.
+
+Tue Feb 20 17:25:18 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * depend.am ($(srcdir)/.deps/%.P): Regexp fix.
+
+Mon Feb 19 19:53:09 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * remake.am ($(srcdir)/Makefile.in): Depend on configure.in.
+ * remake-subd.am ($(srcdir)/Makefile.in): Depend on configure.in.
+
+ * automake.in (handle_scripts): Ensure $scripts_installed set to
+ boolean value. Test proginst.test.
+
+ * Makefile.am (installcheck-local): New target.
+
+ * automake.in (require_file): No error if missing file is
+ installed.
+
+Sun Feb 18 17:10:00 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (handle_scripts): SCRIPTS no longer automatically
+ cleaned. Now possible to install scripts in pkgdatadir.
+ ($seen_canonical): New variable.
+ (generate_makefile): Check for config.guess and config.sub here;
+ fixes bug reported by Gord Matzigkeit.
+
+ * Makefile.am (pkgdata_SCRIPTS): New variable.
+ (CLEANFILES): New macro.
+
+ * scripts-clean.am: Removed.
+
+Sat Feb 17 00:15:20 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (am_install_var): Error if primary variable actually
+ defined.
+ (am_install_var): Skip elements that look like configure
+ substitutions.
+ (am_install_var): "EXTRA" is a valid prefix.
+ (am_install_var): Push contents EXTRA_PRIMARY onto @result.
+ (handle_merge_targets): Treat "all" target like "install".
+ (handle_subdirs): Don't push all-recursive.
+
+ * header.am (install-@DIR@HEADERS): Don't depend on all.
+ * data.am (install-@DIR@DATA): Don't depend on all.
+ * libraries.am (install-@DIR@LIBRARIES): Don't depend on all.
+ * programs.am (install-@DIR@PROGRAMS): Don't depend on all.
+ * scripts.am (install-@DIR@SCRIPTS): Don't depend on all.
+
+ * automake.in (am_install_var): Push generated install targets
+ onto @phony.
+
+ * subdirs.am: No longer depend on Makefile and $(CONFIG_HEADER).
+ * automake.in (handle_merge_targets): Correctly handle recursive
+ calls of uninstall, install-exec, and install-data.
+ (handle_merge_targets): Put Makefile, and possibly $config_name,
+ onto @all.
+ (handle_merge_targets): Push 'all' onto @install as appropriate.
+
+Fri Feb 16 18:27:04 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (handle_configure): config.status is in
+ $(top_builddir), not $(top_srcdir). Reported by Anthony Green.
+
+ * automake.in (scan_configure): Recognize (AC|fp)_FUNC_FNMATCH.
+
+Thu Feb 15 19:12:45 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in: (seen_prog_yacc): New variable.
+ (scan_configure): Look for yacc.
+ (handle_source_transform): Skipp C++ header files.
+ (handle_source_transform): .cxx is a C++ source file.
+
+Wed Feb 14 08:36:02 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * depend.am ($(srcdir)/.deps/.P): Use "echo", not ":".
+
+ Implemented --verbose feature; idea from Greg Woods:
+ * automake.in (verbose): New global.
+ (generate_makefile): Print creating message if verbose.
+ (grep_for_vers_texi): Print message if verbose.
+ (handle_dependencies): Ditto.
+ (scan_configure): Ditto.
+ (read_am_file): Ditto.
+ (parse_arguments): Added --verbose.
+ (initialize_global_constants): Ditto.
+
+ * automake.in (get_object_extension): Use am_line_error.
+ (handle_source_transform): Ditto.
+ (handle_libraries): Ditto.
+ (handle_texinfo): Ditto.
+ (handle_man_pages): Ditto.
+ (handle_dist): Ditto.
+ (handle_dist): Ditto.
+ (handle_subdirs): Ditto.
+ (handle_configure): Ditto.
+ (handle_merge_targets): Ditto.
+ (am_install_var): Ditto.
+ (am_line_error): Allow actual line number as argument.
+ (handle_configure): Use am_line_error.
+ (scan_configure): Set config_header_line.
+ (config_header_line): New global.
+ Use @PERL@ to find perl during exec. From Greg Woods.
+
+Tue Feb 13 22:06:51 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (initialize_per_input): Init %content_lines.
+ (read_am_file): Set appropriate content_lines elements while
+ reading.
+ (am_line_error): New function.
+ (read_am_file): Use it.
+ (handle_options): Ditto.
+
+ * automake.in (scan_configure): Handle case where more than one .o
+ is put into LIBOBJS at once. Test libobj.test.
+
+Mon Feb 12 20:39:28 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (scan_configure): Ignore "\" in AC_OUTPUT line.
+ Test acouttbs.test.
+ (handle_subdirs): Restored intl, po warnings.
+
+ * automake.in (scan_configure): Delete everything after "," or
+ ")". Test acoutnoq.test.
+ (handle_dist): Use $relative_dir, not nonexistent $subdir.
+ (handle_subdirs): 'po' and 'intl' are sometimes substituted into
+ SUBDIRS; don't warn about their absence.
+
+Sun Feb 11 16:55:15 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (handle_texinfo): Removed bogus error message.
+
+ * automake.in (handle_texinfo): Push $(INFO_DEPS), not 'info',
+ onto @all.
+ (handle_options): Handle version number.
+
+ * automake.in ($maint_charset, $dist_charset): New variables.
+ (initialize_per_input): Init $local_maint_charset.
+ (handle_dist): Handle DIST_CHARSET and MAINT_CHARSET.
+ (generate_makefile): Don't print "creating...".
+
+Sat Feb 10 16:45:07 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (get_object_extension): Substitute
+ @CONFIG_INCLUDE_SPEC@ if CONFIG_HEADER defined.
+ (handle_source_transform): Use $1, not \1.
+ (pretty_print_internal): Handle Tabs in fill when computing indent
+ on new line.
+ (handle_merge_targets): Always generate install-exec and
+ install-data targets. Test instexec.test.
+ Fixed error message if fp_PROG_INSTALL missing.
+
+ * compile-vars.am (DEFS): Include -I., -I$(srcdir), and
+ @CONFIG_INCLUDE_SPEC@.
+
+ * automake.in (scan_configure): Delete everything after "]". Test
+ acoutput.test.
+
+ * configure.in (AC_OUTPUT): Create tests/Makefile.
+ * Makefile.am (SUBDIRS): New macro.
+
+ * automake.in (handle_texinfo): Put $vtexi on texi_deps. From Jim
+ Meyering.
+
+ * configure.in (AC_OUTPUT): Ensure automake is executable.
+
+Thu Feb 8 17:30:29 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (handle_subdirs): Error if directory in SUBDIRS does
+ not exist.
+
+ * automake.in (handle_configure): Handle AC_OUTPUT ":" syntax.
+
+ From Jim Meyering:
+ * libraries.am (install-@DIR@LIBRARIES): Depend on all, not
+ (@DIR@_LIBFILES).
+ * header.am (install-@DIR@HEADERS): Depend on all, not
+ $(@DIR@_HEADERS).
+ * data.am (install-@DIR@DATA): Depend on all, not $(@DIR@_DATA).
+ * scripts.am (install-@DIR@SCRIPTS): Depend on all, not
+ $(@DIR@_SCRIPTS).
+ * programs.am (install-@DIR@PROGRAMS): Depend on all, not
+ $(@DIR@_PROGRAMS).
+
+ * automake.in (initialize_per_input): Initialize
+ $use_dependencies.
+ ($seen_path_xtra): New variable.
+ (scan_configure): Look for AC_PATH_XTRA.
+ (get_object_extension): Add variables to output if X seen.
+
+Thu Feb 8 10:02:45 1996 Greg A. Woods <woods@most.weird.com>
+
+ * automake.in (handle_programs): add pkglib to list of
+ directories for C
+ (various): include a tab as fill for continuation lines
+ printed with pretty_print*, esp. for macro variable assignments.
+ [ changed to 4 spaced by me ]
+
+Wed Feb 7 18:00:29 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * configure.in (VERSION): Upped to 0.30.
+
+ * Makefile.am (automake): Removed.
+ (DIST_OTHER): Removed.
+
+ * automake.in (handle_source_transform): All dep_files are
+ relative to $(srcdir).
+ (handle_libraries): Ditto.
+ (scan_configure): Test for AC_PROG_INSTALL as well as
+ fp_PROG_INSTALL. Don't error here.
+ (seen_prog_install): Now global.
+ (scripts_installed): New global.
+ (handle_scripts): Set it.
+ Give error if appropriate install macro not seen.
+ (handle_subdirs): Ensure $seen_gettext before requiring
+ gettext-specific files.
+ (handle_configure): Automatically rebuild
+
+ From Jim Meyering:
+ * automake.in (handle_source_transform): Use \W when quoting
+ regexp. When blah_SOURCES not explicitly defined, still create
+ entry in %deps.
+ * depend.am ($(srcdir)/.deps/%.P): Don't use \< in regexp.
+ * subdirs.am (maintainer-clean-recursive): Now depends on
+ $(CONFIG_HEADER) and Makefile.
+
+ * automake.in (handle_source_transform): Skip macro references.
+
+Mon Feb 5 14:58:58 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (handle_texinfo): Include "rm" when deleting files.
+
+ * Makefile.am (maintainer-check): Expect only one ${...}.
+ * texinfos.am (install-info): Remove unneeded ${...}. From Jim
+ Meyering.
+
+ * automake.in (handle_configure): Only define CONFIG_HEADER if
+ $config_name.
+ ($seen_gettext): New variable.
+ (handle_subdirs): Do all gettext-related checking here.
+ (scan_configure): Just set $seen_gettext.
+ (handle_man_pages): Properly quote $(MANS).
+
+Wed Jan 31 09:51:30 1996 Tom Tromey (tromey@gerbil.cygnus.com)
+
+ * depend.am: Don't use srcdir anywhere.
+ * automake.in (handle_libraries): Don't make .deps relative to
+ srcdir.
+ (handle_options): Recognize no-dependencies.
+
+ * depend.am (MKDEP): From Jim Meyering: Do nothing if srcdir is
+ ".". Properly quote regexp.
+
+Tue Jan 30 12:19:09 1996 Tom Tromey (tromey@gerbil.cygnus.com)
+
+ * automake.in (handle_configure): Only defined CONFIG_HEADER if
+ $config_name.
+ (read_am_file): Quote regexp when substituting top_builddir.
+ (handle_source_transform, handle_libraries): Look in
+ $(srcdir)/.deps for .P files.
+
+Fri Jan 26 00:15:25 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (am_conf_error): New function.
+ (scan_configure): Use it.
+ (scan_configure): A comma also ends AC_OUTPUT macro.
+
+ * automake.in (read_am_file): Compute top_builddir when including
+ header-vars.am.
+ (handle_configure): Use $top_builddir, not $top_reldir.
+ (other_input_files): New variable.
+ (dirname): Fixed bug where dirname of 'a/b/c' was 'a', not 'a/b'.
+
+ Changes from Gord Matzigkeit to enabled hierarchies deeper than 2:
+ * automake.in (input_files, seen_make_set): Declare globally.
+ (parse_arguments): Use input_files, not make_list.
+ Only scan configure.in once.
+ (handle_dist): Use SUBDIRS to determine when to make
+ subdirectories and recurisvely dist. Use $(topdir), not "..", to
+ find top of dist tree.
+ (handle_configure): Check for AC_PROG_MAKE_SET here. Don't require
+ configure.in (done elsewhere).
+ (scan_configure): seen_make_set is global. Allow arbitrary space
+ in LIBOBJS assignment.
+ (top_builddir): New variable.
+ * header-vars.am (top_builddir): New variable.
+ * remake-subd.am (Makefile): Look in top_builddir, not .., when
+ remaking.
+ * automake.in (handle_merge_targets): Run 'all' before
+ check-recursive.
+
+ * automake.in (file_contents_with_transform): Changed error
+ message.
+ (handle_configure): Define $contents{'CONFIG_HEADER'}.
+
+ * texi-version.am: Many changes to support multiple .texi files.
+ Replaced "version.texi" with "@VTEXI@". Replaced "vti" with
+ "@VTI@".
+ * automake.in (handle_configure): install.sh is an anachronism.
+ (handle_texinfo): Generalized for multiple .texi files. Handle
+ 'clean-info' internally.
+ * texi-clean.am: Removed.
+ * Makefile.am: Updated for removal.
+
+Wed Jan 24 22:55:32 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (grep_for_vers_texi): New function.
+ (handle_texinfo): Use grep_for_vers_texi, not system("grep").
+ (handle_texinfo): Changes to generalize to multiple .texi files.
+
+Tue Jan 23 14:22:16 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ Fixes from Gord Matzigkeit:
+ * libraries.am (install-@DIR@LIBRARIES): Use top_srcdir, not
+ topsrcdir.
+ * header.am: New file.
+ * Makefile.am (pkgdata_DATA): Install header.am.
+ * automake.in (handle_headers): Use header.am, not data.am.
+ (am_install_var): Allow pattern to be compiled multiple times.
+
+ * config.guess, config.sub: New files.
+ * Makefile.am (pkgdata_DATA): Install config.guess and
+ config.sub.
+ * automake.in (scan_configure): Recognize AC_CANONICAL_HOST and
+ AC_CANONICAL_SYSTEM.
+
+Sun Jan 21 15:51:48 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (handle_texinfo): Use info_TEXINFOS, not TEXINFOS.
+ (handle_man_pages): Use man_MANS, not MANS.
+
+ * Makefile.am (info_TEXINFOS): Renamed.
+
+ * automake.in (scan_configure): Remove comments from input line.
+ (am_variable): Removed.
+
+ * remake-hdr.am (stamp-h): Use new macro CONFIG_HEADER_IN.
+
+ * automake.in (config_name, config_header): New globals.
+ (scan_configure): Look for AC_CONFIG_HEADER.
+ (handle_configure): Handle more uses of AC_CONFIG_HEADER.
+
+Sat Jan 20 15:54:24 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (handle_dist_worker): Bug fix.
+
+Fri Jan 19 00:50:29 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (require_file): Install missing files only according
+ to desired strictness.
+ (initialize_per_input): Don't init libsources.
+ (scan_configure): Reinit libsources.
+ (handle_libraries): Search _LIBADD for @LIBOBJS@ and @ALLOCA@.
+ (fp_c_prototypes): New global.
+ (scan_configure): Set it.
+ (get_object_extension): Error if fp_C_PROTOTYPES not in
+ configure.in when using ansi2knr.
+ (handle_source_transform): Skip header files.
+
+ * automake.in (handle_dist_worker): Explicitly make 'dist' in
+ subdirs.
+
+Thu Jan 18 00:25:56 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ From François Pinard:
+ * automake.in (handle_source_transform): Transform $o file into .P
+ file.
+ (handle_dist_worker): Handle case where DISTFILES includes
+ wildcard. Bug fix in subdir case.
+
+ * automake.in (parse_arguments): Initialize strictness to
+ 'normal'.
+
+Sun Jan 14 13:54:16 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (scan_configure): Look for NLS support.
+
+ Changes from François Pinard:
+ * texinfos.am (install-info): Correctly install when build dir is
+ not srcdir.
+ * tags-subd.am (ID): Indentation change.
+ * kr-vars.am (o): Use ".@U@o", not "@U@o".
+ * depend.am ($(srcdir)/.deps/%.P): Remove temporary file.
+ * automake.in (handle_dist_worker): Fixlets.
+ (handle_dist): Sort keys going into dist_common.
+
+Sat Jan 13 00:18:06 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (handle_dist_worker): If Gnits, don't allow release
+ until NEWS is updated.
+
+ * configure.in (VERSION): Version 0.29.
+
+ * Makefile.am (maintainer-check): Look for perl4.036 in path.
+
+ * dist-vars.am (DISTFILES): Include BUILT_SOURCES.
+ (DEP_DISTFILES): Ditto.
+
+ * automake.in (handle_dist_worker): Depend on DEP_DISTFILES.
+ * dist-vars.am (DEP_DISTFILES): New variable.
+
+ * automake.in (handle_options): Support dist-shar option.
+ (handle_dist_worker): New function.
+ (handle_dist): Use it.
+
+ * texi-version.am (mostlyclean-vti): Remove version.tmp, not
+ *.tmp.
+
+ * automake.in (handle_dist): Chmod distdir 777. From François
+ Pinard.
+
+ * automake.in (scan_configure): New function.
+ (initialize_per_input): Init libsources.
+ (generate_makefile): Run handle_configure first.
+ (handle_configure): Run scan_configure.
+ (handle_configure): Don't look for AC_PROG_MAKE_SET here.
+
+Thu Jan 11 23:14:18 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * Makefile.am (AUTOMAKE_OPTIONS): New variable.
+
+ * automake.in (strictness, strictness_name): Renamed.
+ (initialize_per_input): Set strictness, strictness_name.
+ Initialize %options.
+ (generate_makefile): Run handle_options.
+ (handle_options): New function.
+ (handle_man_pages): Make install-man depend on $(MANS). Turn off
+ man page install if no-installman option given.
+ (read_am_file): Deprecate @kr@.
+ (get_object_extension): Look at ansi2knr option.
+ (parse_arguments): Take global strictness from command-line
+ options.
+
+Tue Jan 9 11:24:14 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ Fixes from François Pinard:
+ * depend.am ($(srcdir)/.deps/%.P): Handle deansification.
+ * automake.in (get_object_extension): Use $o, not $(kr)o.
+ (handle_source_transform): Don't look for $(kr)c files.
+ * kr-vars.am (o): New macro.
+ (kr): Removed.
+
+ * depend.am (DEP_FILES): Removed.
+ * automake.in (handle_source_transform): Push .P file onto
+ dep_files.
+ (initialize_per_input): New variable %dep_files.
+ (handle_dependencies): Generate DEP_FILES here.
+
+Mon Jan 8 22:27:33 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * automake.in (do_one_clean_target): Only remove config.status in
+ top-level directory.
+ (handle_tags): Removed 'id' from .PHONY list. From Jim Meyering.
+
+ * clean.am (maintainer-clean-generic): Remove BUILT_SOURCES.
+
+ * automake.in (handle_dist): Make "ln" quiet.
+
+ * tags-subd.am (ID): Depend on HEADERS and SOURCES.
+
+Sat Jan 6 10:58:23 1996 Tom Tromey <tromey@cambric.colorado.edu>
+
+ * automake.in (handle_merge_targets): 'check' shouldn't depend on
+ 'all' at top level.
+ (file_contents_with_transform): New function.
+ (am_install_var): Use file_contents_with_transform.
+ (handle_programs): Ditto.
+ (handle_libraries): Ditto.
+ (handle_texinfo): Ditto.
+ (handle_merge_targets): Let 'install' depend on 'all' if no other
+ dependencies exist. From Jim Meyering.
+ (check_gnu_standards): GNU requires AUTHORS file. (See
+ maintain.text).
+ (require_file): Put body in loop.
+ (get_object_extension): Only call require_file once.
+ (handle_configure): Ditto.
+
+ From Jim Meyering:
+ * depend.am ($(srcdir)/.deps/.P): Depend on $(BUILT_SOURCES).
+ * tags-subd.am (id): Removed.
+
+Fri Jan 5 10:31:19 1996 Tom Tromey <tromey@cambric.colorado.edu>
+
+ * Added copyright notice to each .am file.
+
+ * automake.in: Cleanups from François Pinard to avoid $#.
+ (require_argument): Fixed sense of test.
+ (set_strictness): Bug fix.
+
+Thu Jan 4 21:21:29 1996 Tom Tromey <tromey@cambric.colorado.edu>
+
+ * Makefile.am (pkgdata_DATA): Removed old dist files.
+
+ * dist-subd-top.am, dist-subd.am, dist.am: Removed.
+
+ * automake.in (set_strictness): Set $strictness_name.
+ (strictness_name): New variable.
+ (handle_dist): Substantially rewrote.
+
+ * configure.in: Point AC_INIT at automake.in.
+
+ * automake.in (generate_makefile): Report errors against
+ Makefile.in, not Makefile.am.
+
+Wed Jan 3 00:05:40 1996 Tom Tromey <tromey@cambric.colorado.edu>
+
+ * mdate-sh: Bug fix from Jim Meyering.
+
+ * dist.am (dist): Changed in parallel with dist-subd-top.am.
+
+ * mkinstalldirs: Reverted.
+
+ * automake.in (initialize_global_constants): Allow COPYING.LIB
+ again.
+ (check_gnits_standards): Disallow COPYING.LIB.
+
+ * texinfos.am (install-info): Only look in $(srcdir) for info
+ files.
+
+ * automake.in (initialize_global_constants): New variable
+ gen_copyright.
+ (read_am_file): Put a copyright in each Makefile.in.
+
+ * dist-vars.am (DISTFILES): Put DIST_COMMON first.
+
+ * automake.in (am_install_var): Put space before "=".
+ (handle_dist): Put README first in DIST_COMMON.
+
+ * Makefile.am (pkgdata_DATA): Include COPYING.
+
+ * COPYING: New file.
+
+ * automake.in (parse_arguments): Added --gnu and --gnits as
+ synonyms.
+ (initialize_global_constants): Ditto.
+ (initialize_global_constants): Don't auto-distribute COPYING.LIB.
+ (initialize_global_constants): Look for README first.
+ (initialize_global_constants): Auto-distribute AUTHORS, BACKLOG,
+ ABOUT-GNU.
+ (check_gnu_standards): Require file COPYING.
+
+ From François Pinard:
+ * automake.in (file_contents): Comment out "warn"s.
+ (usage): Use 4 columns.
+ (USAGE_FORMAT): Ditto.
+
+ * texinfos.am (install-info): Look for info file relative to $$d.
+
+ * Makefile.am (cvs-dist): Suppress output of "grep".
+
+ * configure.in (VERSION): Version 0.28.
+
+ * automake.in (pretty_print_internal): Fix for Perl 4
+ compatibility.
+
+ * configure.in (VERSION): Version 0.27.
+
+ * depend.am ($(srcdir)/.deps/%.P): Must regexp-quote srcdir in sed
+ invocation.
+
+ * automake.in (initialize_global_constants): Don't quote "@" in
+ $install_man_format.
+ (handle_merge_targets): use "@:" as empty command, not ":".
+
+Tue Jan 2 23:33:24 1996 Tom Tromey <tromey@cambric.colorado.edu>
+
+ * texinfos.am (install-info): Look in $d for info files. From
+ François Pinard.
+
+ * depend.am ($(srcdir)/.deps/%.P): Fixed regexp.
+
+ * automake.in (read_am_file): Correctly deal with continued
+ variable definitions.
+
+Mon Jan 1 15:43:25 1996 Tom Tromey <tromey@cambric.colorado.edu>
+
+ * automake.in (handle_merge_targets): 'check' target depends on
+ 'all'.
+ (file_contents): Don't be so verbose.
+ (read_am_file): Ditto.
+ (read_am_file): Must use substr to check for trailing \.
+ (am_install_var): Use push_phony_cleaners.
+ (file_contents): Set $was_rule when assuming a rule is seen.
+ (read_am_file): Ditto.
+ (do_one_clean_target): Removed spurious newline.
+
+ Some changes from François Pinard:
+ * Removed trailing whitespace from all '.am' files.
+ * tags-subd.am (ID): Use &&, not ;.
+ (TAGS): Ditto.
+ * automake.in (parse_arguments): Removed useless message.
+ (parse_arguments): Don't explicitly referenced STDERR.
+ (require_argument): Ditto.
+ (am_error): Ditto.
+ (set_strictness): Ditto.
+ (file_contents): Ditto.
+ (read_am_file): Ditto.
+ (generate_makefile): Style tweaks.
+ (handle_programs): Ditto.
+ (handle_libraries): Ditto.
+ (handle_texinfo): Ditto.
+ (handle_man_pages): Ditto.
+ (handle_tags): Ditto.
+ (handle_dist): Ditto.
+ (handle_subdirs): Ditto.
+ (handle_configure): Ditto.
+ (handle_footer): Don't put newline before footer.am contents.
+ (handle_merge_targets): Style tweaks.
+ (do_one_clean_target): Ditto.
+ (dirname): Ditto.
+ (am_variable): Ditto.
+ Defined some new constants.
+ (generate_makefile): Don't call generate_header.
+ (generate_header): Removed.
+ (file_contents): Rewrote.
+ (read_am_file): Rewrote.
+
+ * automake.in (generate_makefile): Handle phony target.
+ (do_one_clean_target): Pretty-print dependencies.
+ (handle_installdirs): Pretty-print rule.
+
+ * Makefile.am (maintainer-check): Made some commands silent.
+
+ * automake.in (initialize_global_constants): Don't install or
+ uninstall cat'd man pages.
+ (initialize_per_input): Added phony target.
+ (push_phony_cleaners): New function.
+ (get_object_extension): Handle phony targets.
+ (handle_texinfo): Ditto.
+ (handle_man_pages): Ditto.
+ (handle_tags): Ditto.
+ (handle_dist): Ditto.
+ (handle_subdirs): Ditto.
+ (handle_installdirs): Ditto.
+ (handle_merge_targets): Ditto.
+ (handle_clean): Ditto.
+ (do_one_merge_target): Ditto.
+ (am_install_var): Ditto.
+ (handle_phony): New function.
+ (generate_makefile): Call it.
+ (pretty_print_internal): New function.
+ (pretty_print_rule): Ditto.
+
+Sun Dec 31 13:04:59 1995 Tom Tromey <tromey@cambric.colorado.edu>
+
+ * automake.in (initialize_global_constants): Don't print body of
+ loop at make time.
+
+ Changes from François Pinard:
+ * depend.am (MKDEP): Include DEFS, INCLUDES, CPPFLAGS, CFLAGS.
+ (DEP_FILES): Put dependency files in $(srcdir).
+ Look in $(srcdir) when including dependency files.
+ ($(srcdir)/.deps/.P): .deps/.P is in $(srcdir).
+ (.deps/%.P): MKDEP includes all macro expansions.
+ * dist-subd-top.am (dist): Get absolute path for distdir. Don't
+ be so verbose.
+ * dist-subd.am (dist): Don't be so verbose.
+ * dist.am (dist): Don't be so verbose.
+
+ * automake.in (do_one_clean_target): Remove config.status in
+ maintainer-clean. From Jim Meyering.
+
+ * programs-clean.am (clean-@DIR@PROGRAMS): Bug fix. From Jim
+ Meyering.
+
+ * automake.in (handle_merge_targets): Add dummy command for empty
+ install target. From Jim Meyering.
+
+Tue Dec 12 10:06:28 1995 Tom Tromey <tromey@cambric.colorado.edu>
+
+ * texinfos.am (uninstall-info): Bug fix.
+
+ * Makefile.am (maintainer-check): Error if ${...} used.
+ * depend.am (DEP_FILES): Prefer $(...).
+
+ * scripts.am (install-@DIR@SCRIPTS): Only install script if it
+ exists.
+ * libraries.am (install-@DIR@LIBRARIES): Only install library if
+ it exists.
+ * programs.am (install-@DIR@PROGRAMS): Only install program if it
+ exists.
+
+ * texinfos-vars.am (TEXFILES): Removed.
+
+ * Makefile.am (pkgdata_DATA): Removed libprograms.am.
+
+ * automake.in (do_one_merge_target): Never generate trailing
+ whitespace.
+ (pretty_print): New function.
+ (handle_footer): Prettyprint definitions.
+ (am_install_var): Ditto.
+ (handle_source_transform): Ditto.
+ (handle_dist): Ditto.
+ (handle_libraries): Ditto.
+ (read_am_file): Put comments nearer appropriate code.
+
+ * texi-clean.am (mostlyclean-info): Use continued lines, not
+ multiple rm's. From Jim Meyering.
+
+Sun Dec 10 11:59:33 1995 Tom Tromey <tromey@cambric.colorado.edu>
+
+ * Makefile.am (pkgdata_DATA): Cause INSTALL, install-sh, mdate-sh,
+ mkinstalldirs, texinfo.tex to be installed.
+ * automake.in (symlink_exists): New global.
+ (install_missing): Ditto.
+ (require_file): Install missing files if possible.
+ (parse_arguments): Handle --install-missing option.
+ (initialize_global_constants): Document --install-missing.
+
+ * Makefile.am (cvs-dist): Don't release unless NEWS updated.
+ Ensure 'checks' pass before release.
+ (maintainer-check): Renamed. Look in $(srcdir) for sources. From
+ Franc,ois Pinard.
+ (cvs-dist): Depend on maintainer-check instead of explicitly
+ running check.
+
+ * configure.in (VERSION): Version 0.26.
+
+ * Makefile.am (check-local): Only look at [a-z]*.am. Fixed sense
+ of 'if' test.
+
+ * depend.am (DEP_FILES): Bug fix.
+
+ * automake.in (do_one_clean_target): Typo.
+
+ * Makefile.am (check-local): Run syntax check under Perl 4.
+
+ * automake.in: Fixes for Perl 4, from Gord Matzigkeit.
+ (handle_source_transform): Loop variable is now $_. From Gor
+
+ * Makefile.am (check-local): Check for 'true' in source.
+ * texinfos.am (install-info): Can't use "true" in any rule.
+
+Sat Dec 9 10:16:48 1995 Tom Tromey <tromey@cambric.colorado.edu>
+
+ * Makefile.am (cvs-dist): New target.
+
+ * tags.am (TAGS): Use "test -z ... ||" to avoid spurious
+ failures.
+
+ * texinfos.am (install-info): Don't do install-info for now.
+
+ * clean.am (distclean-generic): Don't remove config.status here.
+ * automake.in (do_one_clean_target): Remove config.status later,
+ for 'make -j2'. From Jim Meyering.
+
+Fri Dec 8 16:30:48 1995 Tom Tromey <tromey@cambric.colorado.edu>
+
+ * configure.in (VERSION): Version 0.25.
+
+ * automake.in (handle_texinfo): Use "$? >> 8", not "$?".
+ (handle_configure): Check for AC_PROG_MAKE_SET.
+
+ * depend.am (DEP_FILES): Handle deANSIfication case. From Jim
+ Meyering.
+
+ * automake.in (am_install_var): Changed how 'clean' handled for
+ uniform name targets.
+ * Makefile.am (pkgdata_DATA): Added new files.
+ * data-clean.am: New file.
+ * scripts-clean.am: New file.
+ * libraries-clean.am: New file.
+ * programs-clean.am: New file.
+
+Wed Dec 6 00:06:11 1995 Tom Tromey <tromey@cambric.colorado.edu>
+
+ * automake.in (am_install_var): Error if variable name
+ "misspelled".
+ (handle_source_transform): Automatically include .c file
+ corresponding to .y or .l.
+
+Tue Dec 5 00:46:14 1995 Tom Tromey <tromey@cambric.colorado.edu>
+
+ * programs.am: Changed for uniform naming scheme.
+
+ * automake.in (read_am_file): Allow '-' and '.' in target names.
+ (generate_makefile): Don't pass arguments to handle_libraries.
+ (initialize_per_input): Define @sources, @objects.
+ (generate_makefile): Init @sources, @objects if needed.
+ (handle_source_transform): Push onto @sources, @objects here.
+ (am_install_var): Push primary onto @all, for configure-time
+ customization.
+ (handle_programs): Use new uniform naming scheme.
+
+ * Makefile.am (check-local): New target.
+
+ * automake.in (handle_libraries): Use uniform naming scheme.
+
+ * libraries.am: Rewrote for uniform naming scheme.
+
+ * scripts.am: Updated names of all clean targets.
+
+ * automake.in (handle_programs): Split on all whitespace.
+ (handle_libraries): Ditto.
+ (handle_texinfo): Ditto.
+ (handle_man_pages): Ditto.
+ (am_install_var): Changed return result.
+ (am_install_var): Changed interface.
+ (am_install_var): Push onto @clean@ if requested.
+ (handle_scripts): Pass -clean to am_install_var.
+
+Mon Dec 4 11:55:36 1995 Tom Tromey <tromey@cambric.colorado.edu>
+
+ * automake.in (am_install_var): Push target onto @all.
+ (get_object_extension): Use $(...).
+ (handle_source_transform): Ditto.
+ (handle_programs): Ditto.
+
+ * automake.in (require_argument): New function.
+ (parse_arguments): Use it.
+ (push_dist_common): New function.
+ (generate_makefile): Use it.
+ (handle_texinfo): Ditto.
+ (handle_dist): Ditto.
+ (handle_configure): Ditto.
+ (require_file): Ditto.
+ (generate_makefile): Don't pass arguments to handle_scripts.
+ (handle_configure): Require configure.in.
+ (check_gnu_standards): New function.
+ (check_gnits_standards): Ditto.
+ (generate_makefile): Check standards.
+
+ * Makefile.am (bin_SCRIPTS): Changed name from SCRIPTS.
+
+ * automake.in (LENIENT, GNU, GNITS): New constants.
+ (initialize_per_input): New function.
+ (generate_makefile): Use it.
+ (initialize_global_constants): Renamed from init_globals.
+ (require_file): Added strictness argument.
+ (parse_arguments): Added --strict option.
+ (set_strictness): New function.
+ (parse_arguments): use it.
+ (initialize_global_constants): Document --strictness.
+
+ * automake.in: Use ${1+"$@"} to preserve quoting when running
+ under sh.
+
+ * texinfos.am (install-info): Don't use "true".
+ * tags.am (TAGS): Don't use "true".
+
+ * dist.am, dist-subd-top.am, remake-hdr.am, remake-subd.am,
+ remake.am, subdirs.am, texinfos.am: Use "&&" after cd.
+
+ * program.am (@PROGRAM@): Use LINK macro.
+ * compile.am (.c.o): Use COMPILE macro.
+
+ * clean.am, remake-hdr.am, remake.am, texinfos.am: Use $(...), not
+ ${...}.
+
+ * subdirs.am (RECURSIVE): Removed macro.
+
+ * clean.am: Changed to not be so verbose.
+
+ * Makefile.am (pkgdata_DATA): Include texi-clean.am.
+ * automake.in (handle_texinfo): Transform texi-clean and put into
+ output rules.
+ * texinfos-vars.am (TEXFILES): Removed.
+ * texinfos.am: Removed 'clean' targets.
+ * texi-clean.am: New file.
+
+ * Makefile.am (ETAGS_ARGS): Just use 'automake.in'.
+
+ * texinfos-vars.am (TEXFILES): Added *.op.
+
+ * dist-vars.am (DISTFILES): Renamed from DIST_FILES, per GNU
+ standards.
+ * dist.am (dist): Use DISTFILES.
+ * dist-subd.am (dist): Use DISTFILES.
+ * dist-subd-top.am (dist): Use DISTFILES.
+
+Sun Dec 3 00:24:08 1995 Tom Tromey <tromey@cambric.colorado.edu>
+
+ * Makefile.am (ETAGS_ARGS): Define.
+
+ * depend.am (.deps/.P): Use ":", not "echo timestamp". From Jim
+ Meyering.
+
+ * dist-vars.am (DIST_FILES): Removed PACKAGEDATA.
+
+ * automake.in (handle_scripts): Use am_install_var.
+
+ * scripts.am: Rewrote for new uniform naming scheme.
+
+ * Makefile.am (pkgdata_DATA): Removed libscripts.am.
+
+ * libscripts.am: Removed.
+
+ * packagedata.am: Removed.
+
+ * Makefile.am (PACKAGEDATA): Removed packagedata.am.
+ (pkgdata_DATA): Renamed from PACKAGEDATA.
+
+ * automake.in (handle_data): Use am_install_var.
+ (init_globals): Init %exec_dir_p.
+
+ * data.am: Rewrote for new uniform naming scheme.
+
+ * automake.in (get_object_extension): New function.
+ (handle_programs): Use it.
+ (dir_holds_sources): Changed interpretation.
+ (handle_headers): New function.
+ (am_install_var): New function.
+ (generate_makefile): Call handle_headers.
+
+ * header-vars.am (pkgdatadir): New macro.
+ (pkglibdir): Ditto.
+ (pkgincludedir): Ditto.
+
+ * automake.in (handle_source_transform): New function.
+ (am_error): New function.
+ (generate_makefile): Use it.
+ (handle_source_transform): Ditto.
+ (handle_texinfo): Ditto.
+ (handle_dependencies): Ditto.
+ (handle_merge_targets): Ditto.
+ (require_file): Ditto.
+
+Sat Dec 2 21:39:56 1995 Tom Tromey <tromey@cambric.colorado.edu>
+
+ * automake.in: Updated FSF address. From Jim Meyering.
+ * header-vars.am: Updated FSF address.
+
+ * distname.am: Removed.
+
+ * automake.in (file_contents): Strip "##" comments.
+ * Various files: Added "##" comments for strange things.
+
+ * automake.in (handle_tags): Generate TAGS rule for every
+ directory.
+
+ * subdirs.am (RECURSIVE): Include installcheck-recursive.
+ * automake.in (installcheck): New variable.
+ (generate_makefile): Initialize it.
+ (handle_subdirs): Push 'installcheck-recursive'.
+ (handle_merge_targets): Handle installcheck target.
+
+Thu Nov 30 20:13:16 1995 Tom Tromey <tromey@cambric>
+
+ * automake.in ($PACKAGE): Removed.
+
+ * header-vars.am (ALL): Removed.
+
+ * automake.in: Reworked 'all' target handling.
+
+ * automake.in (generate_makefile):
+ Don't use AM_ forms in call to am_variable.
+
+ * automake.in: Changes for Perl 5, from Gord Matzigkeit
+
+ * clean.am (MOSTLYCLEANFILES, MAINTAINERCLEANFILES): New variables.
+
+ * automake.in (handle_footer): Allow SUFFIXES variable.
+
+ * automake.in (am_variable): New function.
+ (handle_texinfo): Use it.
+ (generate_makefile): Use it.
+
+ * configure.in: Version 0.24.
+
+Wed Nov 29 23:50:14 1995 Tom Tromey <tromey@cambric>
+
+ * automake.in (handle_libraries):
+ Generate blah_LIBADD defines if required.
+
+ * library.am (lib@LIBRARY@.a): Look at $(@LIBRARY@_LIBADD)
+
+ * libraries-vars.am (LIBOBJS, ALLOCA): Removed.
+
+ * compile-kr.am: ($(OBJECTS)): Depend on $(ANSI2KNR), not ansi2knr.
+
+ * configure.in: Version 0.23
+
+ * dist-subd-top.am (dist): Don't die if a subdirectory already exists.
+
+ * dist-subd-top.am, dist.am (dist): Give automake --output-dir option.
+
+ * automake.in: New option --output-dir
+
+ * automake.in (handle_configure): Fixed typo.
+
+ * automake.in (handle_installdirs): Always make installdirs target.
+
+ * subdirs.am (RECURSIVE): Removed uninstall-data-recursive and
+ uninstall-exec-recursive. Added installdirs-recursive.
+
+ * automake.in (handle_installdirs): Handle installdirs-recursive.
+ (handle_man_pages): 'all' depends on $(MANS)
+
+ * Makefile.am: Removed mans.am.
+
+ * automake.in: More man-related fixes
+
+ * automake.in: Bug fixes
+
+ * automake.in: Rewrote man page handling.
+
+ * texi-version.am, remake-hdr.am, depend.am: Don't use touch.
+
+ * automake.in (handle_installdirs): New function.
+ (@installdirs): New global.
+ Many changes to deal with installdirs.
+
+ * clean.am (clean-generic): Always supply 'else' clause to 'if'
+
+ * automake.in (generate_header): Don't use header.am.
+ (handle_dist): Don't use dist-subd-vars.am.
+
+ * Makefile.am (PACKAGEDATA): Removed dist-subd-vars.am, header.am.
+
+ * Makefile.am (DISTCLEANFILES): Removed.
+
+ * clean.am (clean-generic): Bug fix.
+
+ * clean.am (clean-generic): Only remove CLEANFILES if nonempty
+
+ * texi-version.am (clean-vti): No such macro as VTI
+
+Tue Nov 28 19:56:07 1995 Tom Tromey <tromey@cambric>
+
+ * automake.in: Bug fix for maintainer-clean
+
+ * automake.in (do_one_clean_target):
+ Print special text in maintainer-clean.
+ (handle_clean): Always include clean.am
+
+ * clean.am: Use -generic clean targets.
+
+ * compile.am: Added clean targets.
+
+ * configure.in: Version 0.22.
+
+ * automake.in (handle_dependencies):
+ Put trailing newline after all deps.
+
+ * automake.in (handle_dependencies): Another dependency bug fix.
+
+ * automake.in (handle_dependencies):
+ Bug fix when including dependencies.
+
+ * automake.in (handle_configure):
+ Verify existence of install-sh, mkinstalldirs
+
+ * automake.in (handle_texinfo): Include stamp-vti in distribution
+
+ * dist-subd-vars.am, dist-vars.am (DIST_FILES):
+ Include DATA, PACKAGEDATA.
+
+ * Makefile.am: Nothing
+
+ * Makefile.am (DIST_OTHER): Don't distribute gettext-sh
+
+ * automake.in (handle_texinfo): Typo
+
+ * automake.in: If script ends up in shell, feed to perl
+
+ * automake.in: Rewrote 'clean' rules.
+ Documentation made and installed first.
+ 'all' depends on 'info'
+
+Mon Nov 27 23:57:29 1995 Tom Tromey <tromey@cambric>
+
+ * configure.in, Makefile.am: Turned off internationalization.
+
+ * clean-kr.am: Rewrote for new clean scheme.
+
+ * tags-clean.am: Remove TAGS in distclean, not maintainer-clean
+
+ * Makefile.am (PACKAGEDATA): Include tags-clean.am
+
+ * subdirs.am: Removed bogus local clean targets
+
+ * tags-clean.am: Initial revision
+
+ * texi-version.am: Added clean targets
+
+ * texinfos.am: Fixes to clean targets.
+
+ * texinfos.am, libscripts.am, scripts.am, libraries.am, libprograms.am, programs.am:
+ Added clean targets
+
+ * compile-kr.am (ansi2knr.o): Depend on CONFIG_HEADER
+
+ * automake.in: Completely revamped automatic de-ANSI-fication
+
+ * compile-kr.am: (ansi2knr, $(OBJECTS)): New targets
+
+ * compile-vars.am (LINK): New macro
+
+ * kr-vars.am: Trailing blank line
+
+ * compile-kr.am: Rewrote
+
+ * compile-vars.am (COMPILE): New macro
+
+ * compile-vars.am (ANSI2KNR): Removed
+
+ * Makefile.am (PACKAGEDATA): Removed all sed scripts. Added kr-vars.am
+
+ * kr-vars.am: Initial revision
+
+ * automake.in (require_file): New function.
+ (handle_texinfo): Require 'mdate-sh'
+ (common_sometimes): New variable
+ (usage): Use it.
+
+ * texi-version.am (stamp-vti): Use Ulrich's mdate-sh script
+
+ * mdate-sh: Initial revision
+
+ * automake.in (handle_footer): Don't define SOURCES or OBJECTS if empty
+
+ * automake.in (generate_makefile):
+ Put Makefile.in, Makefile.am in @dist_common
+ (handle_configure): Use @dist_common as appropriate
+
+ * dist-subd-vars.am, dist-vars.am (DIST_CONF): Removed
+
+ * configure.in: Abort if perl not found
+
+ * configure.in: Look for perl
+
+ * automake.in: Reimplemented in Perl
+
+ * automake.in: Fixlet
+
+Sun Nov 26 08:09:30 1995 Tom Tromey <tromey@cambric>
+
+ * automake.in: Always print ".SUFFIXES:" rule.
+
+ * automake.in: Distribution config.h.in if required
+
+ * automake.in: Bug fix when including texi-version.am
+
+ * automake.in: Bug fix when looking for .texi file in $am_reldir
+
+ * depend.am: Comment fix
+
+ * automake.in: Look for .texi file in $am_reldir
+
+ * automake.in: Fixlet
+
+ * automake.in: Blank line after targets from user's Makefile.am
+
+ * automake.in: Move footer items to actual footer
+
+ * automake.in: Include stamp-h.in in DIST_COMMON if necessary
+
+ * automake.in (common):
+ Don't include acconfig.h, config.h.top, config.h.bot
+
+ * Makefile.am (CONFIG_HEADER): Renamed from CONFIG_H
+
+ * Makefile.am (CONFIG_H): Define
+
+ * acconfig.h: Initial revision
+
+ * configure.in: Use AC_CONFIG_HEADER.
+
+ * automake.in: Put blah_TEXINFOS into DIST_COMMON
+
+ * automake.in: .info file explicitly depends on primary .texi file
+
+ * texinfos.am (install-info): Always supply 'else' clause to 'if'
+
+ * tags.am (TAGS): Always supply 'else' clause to 'if'
+
+ * subdirs.am (.NOEXPORT): Removed (now in footer.am)
+
+ * automake.in: Always include footer.am in output
+
+ * mans.am (install-man): Always supply 'else' clause to 'if'
+
+ * automake.in: More version.texi fixes
+
+ * automake.in: Only do version.texi processing if requested.
+
+ * automake.in: Minor internationalization fixes.
+ Subshell can now exit with nonzero status.
+ Fixed up .texi handling; now uses texi-version.am
+ Make sure '.c' and '.o' are in .SUFFIXES if required.
+
+ * Makefile.am (PACKAGEDATA): Include texi-version.am
+ (stamp-vti, version.texi): Removed
+ (TEXINFOS): Don't reference version.texi
+
+ * texi-version.am: Initial revision
+
+ * dist.am, dist-subd-top.am (dist):
+ [DIST_SUBDIRS] Follow symlinks when copying.
+
+ * dist-subd-top.am (dist): Removed unneeded subdir= option to make
+
+Sat Nov 25 23:23:39 1995 Tom Tromey <tromey@cambric>
+
+ * automake.in: Added --amdir option
+
+ * Makefile.am, configure.in: Turned on internationalization
+
+ * Makefile.am: Set EDITION
+
+ * configure.in: Version 0.21
+
+ * tags.am, tags-subd.am: Don't use double-colon rules
+
+ * automake.in: Redid install-data, install-exec, uninstall handling
+
+ * configure.in: Turn off i18n
+
+Fri Nov 24 23:51:37 1995 Tom Tromey <tromey@cambric>
+
+ * automake.in (common): Remove NLS
+
+ * automake.in (common): Include ABOUT-NLS.
+
+ * automake.in: Test for install-sh and mkinstalldirs
+
+ * automake.in: Blank line after OBJECTS= line
+
+ * automake.in: Start subshell in loop after check for Makefile.am
+
+ * automake.in: --use-deps now the default
+
+ * automake.in (am_dir): Don't apply transform to install directory name
+
+ * packagedata.am: Don't apply transform to install directory name
+
+ * Makefile.am (SUBDIRS): Hold off on internationalization
+
+Thu Nov 23 18:02:38 1995 Tom Tromey <tromey@cambric>
+
+ * automake.in:
+ Write 'SOURCES =' line after copying Makefile.am variables
+
+ * automake.in: Fixed bug in "--" option processing
+
+ * subdirs.am: ($(RECURSIVE)): Removed trailing \ from last line
+
+ * Makefile.am (DIST_OTHER): Include gettext-sh
+
+ * Makefile.am (SUBDIRS): Define
+
+ * configure.in: Include internationalization bits
+
+ * automake.in: Many changes to avoid double-colon rules.
+
+ * subdirs.am: ($(RECURSIVE)): Print name of target actually used
+
+ * subdirs.am: Removed "::" rules
+
+ * header.am: Removed install, uninstall
+
+ * header.am: Added install, uninstall targets
+
+ * hack-make.sed: Rewrite targets like "all-local" to "all_local"
+
+ * header.am, libraries.am, mans.am, texinfos.am, footer.am:
+ Removed "::" rules
+
+ * Makefile.am (PACKAGEDATA): Include libscripts.am
+
+ * libprograms.am: Don't install libscripts here
+
+ * libscripts.am: Initial revision
+
+ * scripts.am, programs.am, libprograms.am: Removed "::" rules
+
+ * automake.in (am_dir): Run package name through name transform.
+
+ * automake.in: Don't use packagedata.sed or data.sed
+
+ * Makefile.am (PACKAGEDATA): Removed data.sed, packagedata.sed. Added
+ packagedata.am
+
+ * data.am: No longer run through sed
+
+ * packagedata.am: Initial revision
+
+Wed Nov 22 22:31:02 1995 Tom Tromey <tromey@cambric>
+
+ * automake.in: No blank line after Usage
+
+ * automake.in: Removed "NLS nuisances" section.
+ Now uniformly uses $echo for user-visible messages (in advance of
+ internationalization)
+
+ * subdirs.am (maintainer-clean): Don't use realclean-local
+
+ * Makefile.am: Use PACKAGEDATA, not custom code
+
+ * data.am: Use @LONG@, not $(@LONG@)
+
+ * automake.in: Handle DATA and PACKAGEDATA
+
+ * packagedata.sed: Initial revision
+
+ * data.am: Use @DIR@, not $(@DIR@)
+
+ * data.sed: Use $(datadir), not datadir
+
+ * data.sed: Initial revision
+
+ * data.am: Wrote uninstall targets
+
+ * data.am: Initial revision
+
+ * dist-subd.am (dist): Don't link a file that has already been linked
+
+ * dist-subd-top.am, dist.am (dist):
+ Run `automake --include-deps' before making distribution
+
+ * automake.in: More dependency-tracking bug fixes
+
+ * dist-vars.am (DIST_FILES): Rearranged to be like dist-vars-subd.am
+
+ * dist-subd-vars.am (DIST_FILES): Include DIST_COMMON
+
+ * tags-subd.am, tags.am: Added trailing blank line
+
+ * depend.am: Use ".P", not "empty.P", as placeholder.
+
+ * automake.in: Only include depend.am if SOURCES not empty
+
+ * automake.in: Added --use-deps and --include-deps options.
+ Handle auto-generating dependencies.
+
+ * Makefile.am (am_DATA): Include depend.am
+
+ * depend.am: Initial revision
+
+ * automake.in: Look for acconfig.h, config.h.top, and config.h.bot
+
+ * automake.in: Put blank line after .SUFFIXES
+
+ * scripts.am: Added blank line at end
+
+ * scripts.am: Removed unnecessary comment
+
+ * scripts.am: Removed unnecessary workarounds
+
+ * automake.in: Don't include programs.am if PROGRAMS empty
+
+ * header-vars.am (INSTALL_SCRIPT): Typo
+
+ * texinfos.am, compile-kr.am: Don't include .SUFFIXES
+
+ * automake.in: Handle .SUFFIXES here.
+
+ * configure.in: Use fp_PROG_INSTALL
+
+ * header-vars.am: Changes for autoconf 2.5.
+ Now includes INSTALL_SCRIPTS.
+
+ * texinfos.am (install-info): Bug fix
+
+ * automake.in:
+ Include scripts.am or libscripts.am in output if appropriate
+
+ * programs.am (install-programs, uninstall-programs):
+ Don't install SCRIPTS
+
+ * Makefile.am (am_DATA): Include scripts.am
+
+ * scripts.am: Initial revision
+
+Tue Nov 21 09:11:38 1995 Tom Tromey <tromey@cambric>
+
+ * automake.in:
+ Cleaned up how "prog_SOURCES" variable is found in input.
+ Ditto prog_OBJECTS.
+ Put static sed scripts into separate, installed files.
+
+ * Makefile.am (am_DATA): Include hack-make.sed and nl-remove.sed
+
+ * hack-make.sed, nl-remove.sed: Initial revision
+
+ * texinfos.am (install-info): Rewrote
+
+ * subdirs.am (all-recursive): Put with other -recursive rules
+
+ * configure.in: Version 0.20
+
+ * automake.in: Another bug fix
+
+ * automake.in: Bug fix when looking for texinfo.tex
+
+ * texinfo.tex: Initial revision
+
+ * automake.in:
+ If TEXINFOS defined but texinfo.tex does not exist, give warning.
+
+ * subdirs.am (all): Renamed from _all. Now uses all-recursive
+ (all-recursive): Don't fail immediately if -k specified.
+
+Mon Nov 20 22:48:03 1995 Tom Tromey <tromey@cambric>
+
+ * subdirs.am (_all):
+ New target. Now use Jim Meyering's formulation of AIX
+ workaround.
+ (install-exec, install-data): New targets
+
+Sat Nov 18 19:07:30 1995 Tom Tromey <tromey@cambric>
+
+ * remake.am (Makefile.in): automake "Makefile", not "Makefile.am"
+
+ * automake.in: Use @datadir@
+
+ * automake.in: Added @configure_input@ line
+
+Fri Nov 17 23:32:43 1995 Tom Tromey <tromey@cambric>
+
+ * automake.in: "--help" option now prints auto-recognized file names.
+ Allow AM_ overriding of more variables.
+
+ * texinfos.am (install-info):
+ Don't cd to srcdir to avoid breaking install-sh
+ Other bug fixes
+
+ * Makefile.am: Handle automake.texi
+
+Thu Nov 16 18:43:43 1995 Tom Tromey <tromey@cambric>
+
+ * subdirs.am (all): Separated out due to AIX 3.2.5 bug.
+
+ * tags.am (TAGS): bug fix
+
+ * automake.in: Use am_dir, not AM_DIR.
+ Use version, not VERSION.
+ Bug fix in TAGS code.
+
+ * Makefile.am (am_DATA): Include tags.am and tags-subd.am
+
+ * subdirs.am: TAGS target now in tags.am
+
+ * footer.am: TAGS and ID targets now in tags-subd.am
+
+ * tags-subd.am, tags.am: Initial revision
+
+ * automake.in: Cleaned up AM_PROGRAM code.
+ Handle TAGS target better
+
+ * remake.am, remake-subd.am (Makefile.in): Bug fix.
+
+ * automake.in (usage): Updated
+
+ * remake-subd.am, remake.am:
+ Added rule where Makefile.in depends on Makefile.am
+
+ * automake.in: Entire body of 'for' loop now in subshell
+
+ * automake.in (common): config.guess and config.sub are common files.
+
+ * dist-subd-top.am, dist.am (dist): Bug fix.
+
+ * Makefile.am (DIST_OTHER): Don't include TODO
+
+ * automake.in: Auto-include TODO and THANKS files.
+
+ * dist-subd-top.am, dist.am (dist): Don't depend on DIST_DIRS
+
+ * automake.in: More bug fixes in "look for Makefile.am" code.
+
+ * automake.in: Bug fix in "look for Makefile.am" code.
+
+ * automake.in:
+ If no arguments given, look for all Makefile.am's in this
+ directory and in immediate subdirs
+
+ * automake.in: Bug fixes for LDADD-override feature.
+
+ * program.am: Use @PROGRAM@_LDADD, and put after LDFLAGS
+
+ * automake.in: Allow `prog_LDADD', if specified, to override LDADD.
+
+ * automake.in: Use AM_PROGRAMS, not ALLPROGRAMS, and invert sense.
+
+ * header-vars.am (ALL): Use PROGRAMS, not ALLPROGRAMS.
+
+Wed Nov 15 01:54:43 1995 Tom Tromey <tromey@cambric>
+
+ * automake.in: No longer look for _SOURCES or _OBJECTS
+
+ * header-vars.am:
+ Remove "automatically created" header (now in automake).
+ Updated copyright.
+
+ * automake.in: Put version info in Makefile header
+
+Tue Nov 14 23:38:17 1995 Tom Tromey <tromey@cambric>
+
+ * automake.in: Minor cleanups
+
+ * dist-subd-top.am, dist.am (dist):
+ Don't link or copy file if it already exists.
+
+ * automake.in:
+ Look for _SOURCES (common sources) and generate _OBJECTS.
+
+ * footer.am (ID, TAGS): Include HEADERS
+
+ * dist-vars.am, dist-subd-vars.am (DIST_FILES): Include HEADERS
+
+Mon Nov 13 22:20:02 1995 Tom Tromey <tromey@cambric>
+
+ * dist-subd.am (distdir): Is relative to ".."
+
+ * dist-subd-vars.am (PACKAGE, VERSION): Define
+
+ * dist-subd.am (dist): Don't handle DIST_DIRS.
+
+ * mans.am (uninstall-man): Another bug fix.
+
+ * mans.am (uninstall-man): Bug fix.
+
+ * dist.am, dist-subd-top.am (dist): Bug fix
+
+ * Makefile.am (DIST_SUBDIRS): New macro
+
+ * dist-subd-top.am, dist.am (dist): Handle DIST_SUBDIRS
+
+ * Makefile.am (DIST_OTHER): Include automake.in
+
+ * Makefile.am (DISTCLEANFILES): New macro.
+
+ * automake.in (common): Include COPYING.LIB
+
+ * Makefile.am (automake): New rule.
+
+ * texinfos.am (install-info): Changed per GNU standards
+
+ * remake-hdr.am (stamp-h.in):
+ Use "touch", not "date", per GNU standards.
+
+ * automake.in (common): Include texinfo.tex
+
+Sun Nov 12 23:59:08 1995 Tom Tromey <tromey@cambric>
+
+ * automake.in: More fixes when finding common files.
+
+ * Makefile.am (DIST_OTHER): Another removal.
+
+ * automake.in: Special-case when amdir=.
+
+ * Makefile.am (DIST_OTHER): Removed auto-detected files.
+
+ * automake.in:
+ Search for commonly-used files and auto-include them in distribution
+
+ * dist-vars.am (DIST_FILES): Include DIST_COMMON.
+ (DIST_CONF): Removed files searched for by automake.
+
+ * automake.in: More arg-parsing bug fixes.
+
+ * Makefile.am (DIST_OTHER): Include install-sh
+
+ * Makefile.am (DIST_OTHER): Don't include auto-included files.
+
+ * automake.in: Bug fixes to argument parsing code.
+
+ * automake.in: Handle --version and --help.
+ NLS stuff from autoconf.
+
+ * Makefile.am (amdatadir): Fixed typo.
+ (install): Make install directories
+
+ * Makefile.am: Use "install::", not "install:"
+
+ * install-sh, mkinstalldirs: Initial revision
+
+ * configure.in: Use AC_PROG_INSTALL
+
+ * automake.in: Set AM_DIR based on configure results.
+
+ * Makefile.am (install): New target.
+ (amdatadir): New variable.
+
+ * automake.in: Use "#! /", not "#!/".
+
+ * Makefile.am, configure.in: Initial revision
+
+ * automake.in: Renamed from "automake".
+ Set VERSION.
+
+ * dist.am (PACKAGE, VERSION): Now in dist-vars.am
+
+ * automake.in: Insert remake-subd.am if appropriate.
+
+ * subdirs.am (TAGS): Include $(CONFIG_HEADER) when making tags.
+
+ * automake.in: Handle ALLPROGRAMS variable.
+
+ * header-vars.am (ALL): Use ALLPROGRAMS, not PROGRAMS.
+
+ * automake.in: Fixlet when printing "subdir=DIR"
+
+ * automake.in: Put "subdir=DIR" into subdir Makefile
+
+ * automake.in: Don't refer to distname.am.
+ Only put footer.am in subdir Makefiles.
+
+ * subdirs.am (id, ID): New target.
+ (.NOEXPORT): Copied from footers.am.
+
+ * subdirs.am (TAGS): Bug fixes.
+
+ * subdirs.am (TAGS): Don't fail if a subdir doesn't have TAGS target.
+
+ * subdirs.am (maintainer-clean-local): Remove TAGS
+
+ * subdirs.am (TAGS): Make tags file that includes all subdir tags files
+
+ * subdirs.am: Use maintainer-clean, per GNU standards
+
+ * dist-subd-top.am: Some variables defined in dist-vars.am
+
+ * dist-vars.am (PACKAGE, VERSION):
+ New variables, initialized by configure
+
+ * footer.am (id, ID): New targets
+ (TAGS): Put TAGS file in build, not source, directory
+
+ * remake-subd.am (Makefile): Don't assume subdir is 'src'
+
+ * dist.am: Changed to assume PACKAGE and VERSION are set by configure.
+
+ * dist-subd.am: Changed to conform to new top-level dist target.
+
+ * dist-subd-top.am:
+ Changed to assume PACKAGE and VERSION are set by configure.
+
+ * clean-kr.am, clean.am (maintainer-clean):
+ Updated rules per GNU standards.
+
+ * clean.am, clean-kr.am (maintainer-clean): Renamed from realclean.
+
+Sat Nov 5 14:39:50 1994 djm <djm@cambric>
+
+ * automake.in, texinfos.am: kludge for multiple-part info files
+
+Thu Nov 3 13:33:44 1994 djm <djm@cambric>
+
+ * clean.am, clean-kr.am: remove INFOS
+
+Wed Nov 2 06:15:42 1994 djm <djm@cambric>
+
+ * texinfos.am: add path
+
+ * remake.am, remake-hdr.am: account for VPATH limitations
+
+Mon Oct 24 23:01:59 1994 djm <djm@cambric>
+
+ * automake.in, dist-subd-top.am, dist-subd.am, dist.am, header-vars.am, libprograms.am, programs.am:
+ handle SCRIPTS and LIBSCRIPTS similar to PROGRAMS
+
+Sun Oct 23 01:50:41 1994 djm <djm@cambric>
+
+ * texinfos.am: install-info depends on info files
+
+ * dist-subd-vars.am, dist-vars.am: distrib info files
+
+Sun Oct 2 02:03:06 1994 djm <djm@cambric>
+
+ * clean-kr.am, clean.am: fix up distclean
+
+ * subdirs.am: fix typo
+
+ * clean.am: do more in distclean
+
+Sat Oct 1 23:52:51 1994 djm <djm@cambric>
+
+ * libraries.am: make install depend on all
+
+ * automake.in: fix typo
+
+Wed Sep 28 21:15:26 1994 djm <djm@cambric>
+
+ * dist-subd-vars.am, dist-vars.am, header-vars.am: fix doc bugs
+
+ * automake.in, compile-vars.am, dist.am: fix dist for no subdirs
+
+ * dist-subd-top.am: Initial revision
+
+ * automake.in, header-vars.am, libraries-vars.am, mans-vars.am, texinfos-vars.am:
+ centralize prefix var setting
+
+ * header-vars.am: set all the std vars based on prefix
+
+Tue Sep 27 01:32:22 1994 djm <djm@cambric>
+
+ * automake.in: don't add kr stuff if not needed
+
+ * dist-vars.am: add config vars to dist
+
+Mon Sep 26 23:09:09 1994 djm <djm@cambric>
+
+ * program.am: add LDADD
+
+ * compile-vars.am: remove LDADD from LDFLAGS
+
+ * clean.am: move knr stuff to another file
+
+ * automake.in: use different clean file for ansi2knr
+
+ * clean-kr.am: Initial revision
+
+Thu Sep 22 03:45:02 1994 djm <djm@cambric>
+
+ * automake.in, dist-subd.am, dist.am: fix rules and dist
+
+Tue Sep 20 21:29:40 1994 djm <djm@cambric>
+
+ * compile.am, automake.in: split out knr
+
+ * compile-kr.am: Initial revision
+
+ * libprograms.am: fix typo
+
+ * automake.in, clean.am, compile-vars.am, header-vars.am, libprograms.am:
+ make libprograms work
+
+ * libprograms.am: Initial revision
+
+ * automake.in, compile.am, header-vars.am: fix little bugs
+
+ * compile.am: allow parallel K&R
+
+ * clean.am: remove kerb temps
+
+ * automake.in: fix recognizing start of rules
+
+ * dist-subd.am, dist.am: fix dist
+
+ * automake.in, compile.am, footer.am, texinfos.am: fix ansi2knr
+
+Mon Sep 19 23:39:21 1994 djm <djm@cambric>
+
+ * automake.in: works on m4 too
+
+ * automake.in, mans.am: works on fileutils
+
+ * automake.in, clean.am, compile.am, dist-subd.am, dist.am, footer.am, header-vars.am, header.am, libraries.am, library.am, mans-vars.am, mans.am, programs.am, remake-hdr.am, remake-subd.am, remake.am, subdirs.am, texinfos.am:
+ works on fileutils except for all
+
+ * automake.in: vars thing
+
+ * header-vars.am: Initial revision
+
+ * texinfos-vars.am, mans-vars.am, libraries-vars.am, dist-vars.am, dist-subd-vars.am:
+ entered into RCS
+
+ * compile-vars.am: Initial revision
+
+ * automake.in: many improvements
+
+ * footer.am: Initial revision
+
+ * dist.am: remove distname
+
+ * automake.in: namespace cleanup
+
+ * distname.am: Initial revision
+
+ * automake.in, clean.am, compile.am, dist-subd.am, dist.am, header.am, libraries.am, library.am, mans.am, program.am, programs.am, remake-hdr.am, remake.am, subdirs.am, texinfos.am:
+ might work
+
+ * mans.am, libraries.am, texinfos.am, library.am, compile.am, program.am, programs.am, clean.am, subdirs.am, remake-subd.am, remake.am, remake-hdr.am, dist.am, dist-subd.am, header.am, automake.in:
+ Initial revision
+
+
+-----
+
+Copyright 1994-2017 Free Software Foundation, Inc.
+
+Copying and distribution of this file, with or without modification, are
+permitted provided the copyright notice and this notice are preserved.
diff --git a/old/ChangeLog.98 b/old/ChangeLog.98
new file mode 100644
index 000000000..0dad2bdc3
--- /dev/null
+++ b/old/ChangeLog.98
@@ -0,0 +1,2191 @@
+1998-12-22 Marcus G. Daniels <mgd@chama.santafe.edu>
+
+ * automake.in (handle_dependencies): Transform EXT & PFX in
+ Objective C case.
+
+1998-12-11 Marcus G. Daniels <mgd@chama.santafe.edu>
+
+ * automake.in: Register Objective C language.
+ (finish_languages): Consider Objective C to be non_c.
+ (lang_objc_rewrite, lang_objc_finish): New functions.
+ (resolve_linker): Recognize OBJCLINK before LINK.
+
+1999-01-10 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_texinfo): Handle empty $config_aux_dir.
+
+ * automake.in (handle_texinfo): Set $conf_pat correctly when
+ config_aux_dir not used.
+ (handle_texinfo): Run maintainer-clean-aminfo rules in srcdir.
+ From Erez Zadok.
+ * texi-vers.am (maintainer-clean-@VTI@): Prefix file names with
+ $(srcdir). From Erez Zadok.
+ ($(srcdir)/stamp-@VTI@): Don't run mdate-sh from srcdir.
+
+1999-01-08 Thomas Tanner <tanner@gmx.de>
+
+ * depend.am: remove the dependencies (.deps)
+ in "make distclean", not "make maintainer-clean"
+
+1999-01-10 Tom Tromey <tromey@cygnus.com>
+
+ * aclocal.in (write_aclocal): Updated copyright.
+ (parse_arguments): Likewise.
+ * automake.in (parse_arguments): Updated copyright.
+ (initialize_global_constants): Likewise.
+
+ * Makefile.am (pkgdata_DATA): Renamed from pkgdata_SCRIPTS.
+ (install-data-hook): New hook. Report from Petter Reinholdtsen.
+
+ * remake-hdr.am: Provide `else' clause for each `if'.
+
+1999-01-10 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * remake-hdr.am: recover from removal of config headers, and try
+ to get real timestamps, which is useful for CVS files
+
+1999-01-10 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_merge_targets): Don't special-case "-local"
+ targets. Test all.test.
+
+ * automake.in (handle_texinfo): Prepend $(srcdir) to directory
+ used to find texinfo.tex. Report from Glenn Amerine.
+
+1999-01-07 Tom Tromey <tromey@cygnus.com>
+
+ Based on report from Marcus G. Daniels. Fixes include.test.
+ * automake.in (generate_makefile): Call read_main_am_file.
+ (read_main_am_file): New sub.
+ (read_am_file): Moved header generation code into
+ read_main_am_file.
+
+1999-01-06 Gary V. Vaughan <garyv@oranda.demon.co.uk>
+
+ * automake.in (require_file_internal): qub perl on win32 hangs
+ on a call to unlink for a non-existant file, which in turn causes
+ tests/symlink.test to hang on win32. Check that the file exists
+ before unlinking it!
+
+1998-12-24 Thomas Tanner <tanner@gmx.de>
+
+ * automake.in (handle_ltlibraries): check whether -module was
+ defined for libraries names without 'lib' prefix.
+
+Fri Dec 11 10:20:42 1998 Matthew D. Langston <langston@SLAC.Stanford.EDU>
+
+ * compile_f_c_cxx.test: Change to use F77 and F77LINK instead of
+ FC and FLINK, respectively.
+ * flibs.test: same
+ * fnoc.test: same
+ * fo.test: same
+ * fonly.test: same
+ * link_f_c.test: same
+ * link_f_c_cxx.test: same
+ * link_f_cxx.test: same
+ * link_f_only.test: same
+
+Fri Dec 11 10:23:17 1998 Matthew D. Langston <langston@SLAC.Stanford.EDU>
+
+ * automake.in, automake.texi: Change all of the Fortran 77 code to
+ use the new `F77' prefix instead of the older `FC' prefix.
+ Specifically this changed FC, FCOMPILE, LTFCOMPILE, FLINK and FLD
+ to F77, F77COMPILE, LTF77COMPILE, F77LINK and F77LD, respectively.
+
+1999-01-05 Tom Tromey <tromey@cygnus.com>
+
+ * depend2.am (%.o): Use \012, not \n, to avoid losing `tr's. From
+ Bill Currie.
+ (%.lo): Likewise.
+
+1998-12-22 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * depend2.am: Don't assume backslash can't occur in the middle of
+ filename; it loses on M$W
+
+1998-12-21 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_libraries): Reverted Thomas Tanner's
+ change. Non-libtool libraries still must fit naming
+ requirements.
+
+1998-12-21 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * automake.in (handle_configure): Dist inputs for AC_OUTPUT.
+
+1998-12-21 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * depend2.am: don't use .p and .P for dependencies; it loses on
+ case-insensitive filesystems.
+ Reported by Henrik Frystyk Nielsen <frystyk@w3.org>
+
+1998-12-20 Thomas Tanner <tanner@gmx.de>
+
+ * automake.in (handle_libraries, handle_ltlibraries): relax the
+ name checking to not enforce `^lib.*' for the sake of building libtool
+ modules.
+
+1998-12-21 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (do_one_merge_target): Special case
+ install-data-hook and install-exec-hook.
+ (handle_merge_targets): Removed install-data-hook and
+ install-exec-hook code. Test insthook.test.
+
+1998-12-16 Tom Tromey <tromey@cygnus.com>
+
+ * tags.am (ID): Uniquify list of sources. Report from Jim
+ Meyering.
+
+1998-12-11 Tom Tromey <tromey@cygnus.com>
+
+ Bug report from Paul D. Smith:
+ * automake.in (handle_merge_targets): Set
+ AM_INSTALL_PROGRAM_FLAGS, not INSTALL_PROGRAM.
+ * header-vars.am (INSTALL_PROGRAM): Added
+ AM_INSTALL_PROGRAM_FLAGS.
+
+1998-12-03 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_dist): Print prettier banner when
+ `make dist' succeeds. From Akim Demaille.
+
+1998-12-02 Tom Tromey <tromey@cygnus.com>
+
+ * configure.in: Upped version to 1.3e (1.3d was just released).
+
+ * configure.in: Upped version to 1.3d.
+
+ * texinfo.tex, config.guess, config.sub, install-sh: New
+ versions.
+ * ansi2knr.c: New version.
+
+ * automake.in (handle_configure): Quote @MAINTAINER_MODE_TRUE@ to
+ avoid problems where AM_MAINTAINER_MODE is put into automake's own
+ configure.in.
+
+ * Makefile.am (cvs-dist): Run `cvs tag' operation in srcdir.
+
+ Some bugs from François Pinard:
+ * automake.in (usage): Remove duplicates in file list.
+
+ * automake.in (usage): Print files in column-major order.
+ (handle_gettext): Only require ABOUT-NLS for GNU programs.
+
+1998-12-01 Tom Tromey <tromey@cygnus.com>
+
+ * automake.texi (Dist): Documented GZIP_ENV.
+ * automake.in (handle_dist): Define and use GZIP_ENV, not GZIP.
+ (initialize_global_constants): Use GZIP_ENV, not GZIP.
+
+1998-11-27 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (quote_cond_val): Use "\002", not '\002', to
+ represent null string.
+ (unquote_cond_val): Removing all "\002" strings from result. Test
+ cond7.test.
+
+ * automake.texi: Formatting changes for latest texinfo.
+
+ * automake.in (handle_java): Removed debugging print.
+
+1998-11-18 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (finish_languages): Use CCLD, not CLD.
+
+ * automake.in (finish_languages): Define CLD; use it in LINK
+ definition.
+ (lang_cxx_finish): Define CXXLD; use it in CXXLINK definition.
+ (lang_f77_finish): Define FLD; use it in FLINK definition.
+ (lang_ppf77_finish): Likewise.
+ (lang_ratfor_finish): Likewise.
+
+1998-11-10 Matthew D. Langston <langston@SLAC.Stanford.EDU>
+
+ * automake.in (scan_one_configure_file): Recognize
+ AC_F77_LIBRARY_LDFLAGS, and recognize FLIBS as a configure
+ substitution.
+
+ * automake.texi: Fix several little Fortran 77 references to now
+ point to autoconf.texi. Rename associated Fortran 77 macros from
+ `AM_' to `AC_'.
+
+1998-11-10 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (read_am_file): Handle configure_vars case. Test
+ pluseq4.test.
+
+1998-11-09 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (read_am_file): `conditional_stack' isn't a
+ function. Correctly add new value to existing value in `+='
+ case.
+
+1998-10-29 Gary V. Vaughan <gvaughan@oranda.demon.co.uk>
+
+ * automake.in (parse_arguments): Fixed type of -c for copying
+
+1998-10-30 Tom Tromey <tromey@cygnus.com>
+
+ * automake.texi (Install): Documented DESTDIR more fully. From
+ Jeff Garzik.
+
+ * automake.in (MACRO_PATTERN): Recognize `+='.
+ (BOGUS_MACRO_PATTERN): Likewise.
+ (read_am_file): Handle `+=' assignments.
+
+1998-10-28 Tom Tromey <tromey@cygnus.com>
+
+ * Makefile.am (maintainer-check): Changed code to be acceptable to
+ bash 2.01.1.
+
+ * automake.in (do_one_clean_target): Special-case config.status.
+ Report from Jeff Garzik.
+
+ * m4/Makefile.am (m4data_DATA): Don't mention f77.m4.
+ * m4/f77.m4: Removed; macro now in autoconf proper.
+
+1998-10-24 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_dist_worker): Typo fix in code testing to
+ see if subdir is `.'. From Raja R Harinath.
+
+ * m4/lispdir.m4: Fixed sed invocation. From Akim Demaille.
+
+1998-10-20 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (scan_dependency_file): Fixed test on `while' loop.
+ Fixes depend2.test. Report from Akim Demaille.
+
+1998-10-16 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_ltlibraries): Specify `noinst' when
+ computing valid prefixes. From Ulrich Drepper.
+
+ * automake.in (scan_dependency_file): Don't give an error if there
+ is text after the last line. Report from Matthew D. Langston.
+
+ * m4/mktime.m4: Detect glibc mktime bug. From Jim Meyering.
+
+ * Makefile.am (SUBDIRS): Added `.' again.
+
+ * Makefile.am (EXTRA_DIST): Removed automake.spec.in. From
+ Matthew D. Langston.
+ (info_TEXINFOS): Removed am-f77.texi.
+
+ * automake.in (handle_ltlibraries): Allow `noinst' LTLIBRARIES.
+ These are libtool convenience libraries.
+
+1998-10-13 Tom Tromey <tromey@cygnus.com>
+
+ * m4/f77.m4: New file.
+ * m4/Makefile.am (m4data_DATA): Added f77.m4.
+
+Thu Oct 8 15:00:57 1998 Matthew D. Langston <langston@SLAC.Stanford.EDU>
+
+ * automake.in (resolve_linker): Put the Fortran 77 linker where it
+ needs to be.
+
+ * automake.in (lang_f77_finish): Add support for Fortran 77.
+
+ * automake.in (f77_extensions): New helper function for function
+ `lang_f77_finish'.
+
+ * automake.in (lang_f77_rewrite): Change to return success.
+
+ * automake.in (scan_one_configure_file): Add test for the Fortran
+ 77 compiler.
+
+ * automake.in (finish_languages): Changed tests for "C++ only" to
+ "C++ and/or Fortran 77 only", and renamed `all_cxx' to `non_c'.
+
+ * automake.in: Registered the ppf77 language (`.F' extension) for
+ preprocessed Fortran 77.
+
+ * automake.in: Registered the ratfor language (`.r' extension).
+
+ * automake.in: Registered Fortran 77 header files with the "header
+ language" (`.inc' extension).
+
+Tue Sep 8 14:50:50 1998 Matthew D. Langston <langston@SLAC.Stanford.EDU>
+
+ * automake.texi: Added several new index entries.
+
+Sun Aug 30 16:10:31 1998 Matthew D. Langston <langston@SLAC.Stanford.EDU>
+
+ * automake.texi:
+ - Add `@ovindex' (output variable index).
+ - Merge `@defmac' (Autoconf macros) and `@ovindex' to the General
+ Index.
+
+ * automake.texi (Macros):
+ - Changed the `@table @code' list of macros to `@defmac'.
+ - Add `AC_PROG_FC' and `MDL_F77_LIBRARY_LDFLAGS' to the list.
+
+Tue Aug 11 10:42:39 1998 Matthew D. Langston <langston@SLAC.Stanford.EDU>
+
+ * automake.texi (C++): Change `@table' to `@vtable'.
+
+ * automake.texi (Fortran 77): Add Fortran 77 documentation.
+
+1998-10-11 Tom Tromey <tromey@cygnus.com>
+
+ Preliminary (completely untested) multilib support.
+ * automake.texi (Macros): Document AM_ENABLE_MULTILIB.
+ * m4/Makefile.am (m4data_DATA): Added multi.m4.
+ * Makefile.am (amfiles): Added multilib.am.
+ * automake.in (seen_multilib): New global.
+ (scan_one_configure_file): Recognize AM_ENABLE_MULTILIB.
+ (generate_makefile): Call handle_multilib.
+ (handle_multilib): New function.
+ * multilib.am: New file.
+ * m4/multi.m4: New file.
+
+1998-10-08 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_dist): Always include configure.in and
+ configure in distribution. Fixes confdist.test.
+
+ * automake.in (do_one_merge_target): Be silent when running
+ install-exec-am and install-data-am. Fixes extra3.test and
+ extra4.test.
+
+1998-10-07 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (am_install_var): Added -noextra option.
+ (handle_data): Pass -noextra to am_install_var.
+
+Sun Oct 4 22:24:10 1998 Tom Tromey <tromey@cygnus.com>
+
+ * m4/winsz.m4 (AM_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL): Use
+ 3-argument form of AC_DEFINE.
+ * m4/regex.m4 (AM_WITH_REGEX): Use 3-argument form of AC_DEFINE.
+ * m4/ptrdiff.m4 (AM_TYPE_PTRDIFF_T): Use 3-argument form of
+ AC_DEFINE.
+ * m4/protos.m4 (AM_C_PROTOTYPES):Use 3-argument form of
+ AC_DEFINE.
+ * m4/obstack.m4 (AM_FUNC_OBSTACK): Use 3-argument form of
+ AC_DEFINE.
+ * m4/init.m4 (AM_INIT_AUTOMAKE): Use 3-argument form of
+ AC_DEFINE.
+ * m4/dmalloc.m4 (AM_WITH_DMALLOC): Use 3-argument form of
+ AC_DEFINE.
+
+Tue Oct 6 00:02:15 1998 Tom Tromey <tromey@cygnus.com>
+
+ * depend2.am (%.lo): Handle case where compiler does not put space
+ before ":". From Raja R Harinath.
+
+Mon Oct 5 13:05:43 1998 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (scan_one_configure_file): AC_CONFIG_HEADER is not
+ obsolete; it simply isn't preferred with automake.
+ (scan_one_configure_file): Likewise for AC_DECL_YYTEXT and
+ AC_PROG_LEX.
+
+ * automake.in (am_line_error): Handle case where variable defined
+ in configure.in. Fixes test badline.test.
+ (%configure_vars): Redefined meaning of values.
+ (scan_one_configure_file): Set $configure_vars values
+ appropriately.
+
+Sat Oct 3 14:53:34 1998 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_aclocal_m4): Use new MAINTAINER_MODE
+ conditional.
+ (handle_configure): Likewise.
+ (read_am_file): Likewise.
+ (file_contents_with_transform): Likewise.
+ (scan_one_configure_file): Recognize that AM_MAINTAINER_MODE
+ defines a conditional.
+ * automake.texi (Optional): Document new AM_MAINTAINER_MODE.
+ * texi-vers.am ($(srcdir)/@VTEXI@): Look at MAINTAINER_MODE
+ conditional.
+ (maintainer-clean-@VTI@): Likewise.
+ * remake.am ($(srcdir)/configure): Look at MAINTAINER_MODE
+ conditional.
+ * remake-hdr.am ($(srcdir)/@CONFIG_HEADER_IN@): Look at
+ MAINTAINER_MODE conditional.
+ * m4/maintainer.m4 (AM_MAINTAINER_MODE): Defined MAINTAINER_MODE
+ conditional.
+
+1998-10-03 Jim Blandy <jimb@zwingli.cygnus.com>
+
+ * depend2.am (%.lo): When editing the dependency file to add the
+ .lo file to the targets, allow for whitespace between the end of
+ the filename and the colon. Some compilers (notably the Cygnus
+ release of GCC 2.7-97r1) put space there: "alist.o : ..."
+
+Sat Oct 3 12:07:21 1998 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_configure): Handle case where there is no
+ Makefile in the config header directory. Fixes test config.test.
+
+Thu Oct 1 00:51:51 1998 Tom Tromey <tromey@cygnus.com>
+
+ * depend2.am (%.o): Append sed results to .P file in this case
+ too. From Raja R Harinath.
+
+ * m4/lispdir.m4 (AM_PATH_LISPDIR): Correctly find xemacs and
+ xemacs install directories. From Robert Bihlmeyer.
+
+ * depend2.am: Don't bother trying to delete source file from
+ list.
+
+ * depend2.am (%.o): Handle deleted header file problem.
+ (%.lo): Likewise.
+
+ * texinfos.am (install-info-am): Handle case where INFO_DEPS is
+ empty. Reported by Andrew Cagney.
+ (uninstall-info): Likewise.
+ (dist-info): Likewise.
+
+ * automake.in (handle_texinfo): Error if user tries to generate
+ HTML.
+
+Wed Sep 30 00:41:40 1998 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (do_one_clean_target): Don't push previous clean
+ target if this target is `mostly'. Report from Raja R Harinath.
+
+ * subdirs.am (mostlyclean-recursive ...): Build local_target, not
+ target. From Raja R Harinath.
+
+ Completely changed how languages and source files are handled:
+ * automake.in: Call register_language for each language.
+ (lang_c_rewrite): New function.
+ (lang_cxx_rewrite): Likewise.
+ (lang_header_rewrite): Likewise.
+ (lang_yacc_rewrite): Likewise.
+ (lang_yaccxx_rewrite): Likewise.
+ (lang_lex_rewrite): Likewise.
+ (lang_lexxx_rewrite): Likewise.
+ (lang_asm_rewrite): Likewise.
+ (lang_fortran_rewrite): Likewise.
+ (register_language): Likewise.
+ (extension_map): New global.
+ (language_map): Likewise.
+ (resolve_linker): New function.
+ (handle_single_transform_list): Rewrote to use lang_X_rewrite
+ functions. Changed meaning of first argument.
+ (initialize_per_input): Removed seen_any_source. Initialize
+ language_scratch, extension_seen. Removed cxx_extensions,
+ seen_c_source, dir_holds_headers, dir_holds_sources.
+ (handle_source_transform): Don't compute $objpat. Pass $obj
+ directly to handle_single_transform_list.
+ (handle_built_sources): Fixed call to
+ handle_single_transform_list.
+ (lang_c_finish): New function.
+ (lang_cxx_finish): Likewise.
+ (lang_header_finish): Likewise.
+ (lang_yacc_finish): Likewise.
+ (lang_yaccxx_finish): Likewise.
+ (lang_lex_finish): Likewise.
+ (lang_lexxx_finish): Likewise..
+ (lang_asm_finish): Likewise.
+ (lang_fortran_finish): Likewise.
+ (yacc_lex_finish_helper): Likewise.
+ (libtool_compiler): Likewise.
+ (saw_extension): New function.
+ (handle_lib_objects_cond): Use saw_extension, not old variables.
+ (handle_yacc_lex_cxx): Removed.
+ (finish_languages): New function.
+ (get_object_extension): Don't set dir_holds_sources.
+ (handle_headers): Don't set dir_holds_headers. Instead, call
+ saw_extension.
+ (saw_sources_p): New function.
+ (handle_tags): Use it.
+ (handle_dependencies): Likewise.
+ (cxx_extensions): New function.
+ (handle_dependencies): Use it.
+ (generate_makefile): Call finish_languages, not
+ handle_yacc_lex_cxx.
+
+1998-05-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * texi-vers.am: Use the correct target names. Fix generation of
+ stamp file.
+
+ * automake.in (handle_tests): In commands generating site.exp copy
+ the old contents from site.exp, not site.bak, which does not
+ exist.
+
+Tue Sep 29 00:10:22 1998 Tom Tromey <tromey@cygnus.com>
+
+ Fixed noinst.test again:
+ * automake.in (do_one_merge_target): Special-case `install-am'.
+ (handle_merge_targets): Don't compute @install variable.
+
+ Fixes for recurs2.test. Report from Jim Meyering.
+ * automake.in (vars_scanned): Define globally.
+ (variable_value_as_list_worker): Delete $var entry in
+ %vars_scanned after local work is done.
+
+1998-05-26 Marcus G. Daniels <mgd@ute.santafe.edu>
+
+ * automake.in: New pattern: INCLUDE_PATTERN.
+ (read_am_file): Make AM_FILE a local filehandle.
+ For INCLUDE_PATTERN, store included paths on @include_stack and call
+ read_am_file with argument.
+ (handle_configure): When printing the dependencies for
+ Makefile.in, print the items on include_stack (if any) as
+ dependencies, too.
+
+ * automake.texi: Make a command index `cm' that goes into the
+ concept index. Put if, endif, else, and include in the command index.
+ (Include): Show usage of include directive.
+
+Mon Sep 28 00:03:45 1998 Tom Tromey <tromey@cygnus.com>
+
+ `.' in SUBDIRS changes order of builds:
+ * Makefile.am (SUBDIRS): Added `.'. Put tests last.
+ * tags.am (TAGS): Don't look for TAGS file in `.'.
+ * automake.texi (Top level): Document SUBDIRS change.
+ * automake.in (handle_installdirs): Create separate installdirs-am
+ target.
+ (handle_merge_targets): Don't put all-am onto @all. Fixed error
+ message. Correctly handle install-info. Give error if
+ install-info-local inappropriately defined. Don't special-case
+ install-data, install-exec, install, uninstall, or all.
+ (handle_subdirs): Don't push `-recursive' target names onto
+ corresponding lists.
+ (do_one_merge_target): Always define `-am' form of rule, and point
+ ordinary form to `-am' or `-recursive' as appropriate.
+ Special-case `all'.
+ (do_check_merge_target): Generate check-am target.
+ (handle_dist_worker): Use target_defined.
+ (handle_dist): Likewise.
+ (handle_merge_targets): Likewise.
+ (do_one_merge_target): Likewise.
+ (do_check_merge_target): Likewise.
+ (do_one_clean_target): Likewise.
+ (initialize_per_input): Initialize $all_target.
+ (do_one_clean_target): Always generate -am form of rule; other
+ changes for new SUBDIRS change.
+ (handle_clean): Always generate clean-am form of rule.
+ (handle_tags): Only build subdir if not `.'.
+ (handle_dist_worker): Skip `.' directory.
+ * subdirs.am: Allow `.' to be specified in SUBDIRS.
+
+Sun Sep 27 20:02:21 1998 Tom Tromey <tromey@cygnus.com>
+
+ * automake.texi (Dist): Document EXTRA_DIST change.
+ * automake.in (handle_dist_worker): Allow subdirs in EXTRA_DIST.
+
+ * automake.in (handle_ltlibraries): Wrote better comment about
+ EXTRA_LTLIBRARIES.
+
+ * automake.texi (Invoking Automake): Document --copy.
+ * automake.in (copy_missing): New global.
+ (parse_arguments): Recognize --copy/-c.
+ (require_file_internal): Handle $copy_missing. Fixed error
+ message.
+ (initialize_global_constants): Document -c/--copy.
+
+ * automake.texi: Document LIBOBJS trick.
+
+ * automake.in (handle_dist_worker): If DIST_SUBDIRS defined, use
+ it even when SUBDIRS not conditional.
+
+ * automake.in (quote_cond_val): Turn tabs into \003.
+ (unquote_cond_val): Turn \003 back into tabs. Fixes test
+ cond6.test.
+
+ * automake.in (read_am_file): Treat backslash-newline as
+ whitespace. Test parse.test.
+
+Sat Sep 26 19:31:22 1998 Tom Tromey <tromey@cygnus.com>
+
+ * configure: Rebuilt.
+ * configure.in: Upped version to 1.3c.
+
+ Track recent autoconf changes:
+ * m4/Makefile.in: Rebuilt.
+ * m4/Makefile.am (m4data_DATA): Updated for deleted files.
+ * m4/init.m4 (AM_INIT_AUTOMAKE): Use AC_PROG_INSTALL.
+ * m4/mingw.m4: Removed.
+ * m4/cygwin.m4: Removed.
+ * m4/install.m4: Removed.
+ * m4/exeext.m4: Removed.
+ * automake.in (scan_one_configure_file): Don't look for
+ AM_EXEEXT.
+ (check_cygnus): Only mention AC_EXEEXT.
+ (obsolete_macros): Mention AM_PROG_INSTALL, AM_EXEEXT,
+ AM_CYGWIN32, AM_MINGW32.
+ ($seen_prog_install): Changed interpretation; changed all users.
+ (scan_one_configure_file): Don't look for AM_PROG_INSTALL.
+ ($scripts_installed): Removed.
+ (handle_scripts): Use local $scripts_installed.
+ * aclocal.in (obsolete_macros): Added AM_PROG_INSTALL, AM_EXEEXT,
+ AM_CYGWIN32, AM_MINGW32.
+
+Mon Jul 6 14:52:49 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * compile.am (mostlyclean-compile): If OBJEXT, remove *.$(OBJEXT)
+ along with *.o.
+
+Thu May 28 18:49:47 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * automake.in (seen_objext): New variable.
+ (get_object_extension): If seen_objext, use .$(OBJEXT) rather than
+ .o. When including compile.am, keep or discard OBJEXT lines
+ according to whether seen_objext is set. If seen_objext, add .obj
+ to @suffixes. If seen_objext, use .$(OBJEXT) rather than .o when
+ building ansi2knr.
+ (handle_yacc_lex_cxx): If seen_objext, add a rule to create .obj
+ files. If seen_objext, use .$(OBJEXT) rather than .o when
+ building ansi2knr.
+ (scan_one_configure_file): Check for .obj as well as .o in
+ LIBOBJS. Set seen_exeext if we see AC_EXEEXT. Look for
+ AC_OBJEXT, and if found set seen_objext and set OBJEXT in
+ configure_vars.
+ (check_cygnus): Change error message to permit AC_EXEEXT.
+ * compile.am: Add OBJEXT lines for .c.obj compilation.
+ * Makefile.in: Rebuild.
+ * m4/Makefile.in: Rebuild.
+ * tests/Makefile.in: Rebuild.
+
+Mon Sep 11 16:07:55 1997 Chris Provenzano <proven@cygnus.com>
+
+ * header-vars.am: SHELL=@SHELL@
+ Ran aclocal, autoconf, and automake.
+
+Sat Sep 26 16:31:29 1998 Tom Tromey <tromey@cygnus.com>
+
+ * ltlib.am: Use $(INSTALL) and not $(INSTALL_DATA).
+
+Mon Sep 14 08:27:38 1998 Per Cederqvist <ceder@lysator.liu.se>
+
+ * automake.in (handle_texinfo): The logic for when to provide
+ texinfo.tex was broken. Attempt to fix.
+
+Mon Sep 14 00:55:12 1998 Per Cederqvist <ceder@lysator.liu.se>
+
+ Fix for Dynix 3.1.1.
+ * automake.in (handle_yacc_lex_cxx): Transform "# " to "#line";
+ some compilers (such as /bin/cc on Dynix 3.1.1) don't accept the
+ output from the preprocessor.
+
+Tue Aug 25 18:40:51 1998 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_tests): Don't create site.exp target if it
+ is already in Makefile.am.
+
+Sun Aug 16 23:26:26 1998 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_configure): Use @inputs, not
+ @rewritten_inputs, when constructing CONFIG_FILES. Use different
+ list to test for file existence. Test colon6.test.
+ (rewrite_inputs_into_dependencies): Added add_srcdir argument.
+ Updated all callers.
+
+Wed Aug 12 14:16:57 1998 Tom Tromey <tromey@cygnus.com>
+
+ * Released 1.3b.
+
+Tue Aug 11 12:18:59 1998 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_clean): Added missing close-paren. Quote
+ `$' so it doesn't expand when replacing. From Markus
+ F.X.J. Oberhumer.
+
+ * aclocal.in (usage): Changed bug address.
+ * automake.in (usage): Changed bug address.
+
+ * clean.am (distclean-generic): Don't mention
+ DISTCONFIGCLEANFILES. From Markus F.X.J. Oberhumer.
+
+Mon Aug 10 20:57:35 1998 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_yacc_lex_cxx): Redirect ansi2knr output to
+ correct file. From Kave Ghazi.
+
+Sun Aug 2 16:05:16 1998 Tom Tromey <tromey@cygnus.com>
+
+ * Released 1.3a.
+
+ * config.sub, config.guess, texinfo.tex: New versions from FSF.
+
+Sun Jul 19 00:04:25 1998 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (variable_conditions): Initialize %vars_scanned.
+ (variable_conditions_sub): Check it. Test cond5.test.
+
+Sat Jul 18 00:24:14 1998 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (variable_value_as_list_worker): Renamed from
+ variable_value_as_list. Set entry in vars_scanned, and give error
+ if variable recursively defined. Test recurs.test.
+ (value_to_list): Call it instead.
+ (variable_value_as_list): New function.
+
+ * automake.in (variable_conditions_sub): If var is not
+ conditional, but does have conditional subvariables, then return
+ value should be all permutations of subvariable conditions. Test
+ cond4.test.
+ (handle_source_transform): Define _OBJECTS variable with each
+ condition; no need to define multiple new variables.
+
+Fri Jul 17 12:56:14 1998 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (am_install_var): Use DESTDIR, not DATADIR. From
+ Motoyuki Kasahara.
+
+ * automake.in (scan_dependency_file): Recognize DOS-style paths as
+ absolute.
+ * ylwrap: Recognize DOS-style paths as absolute. From Ian Lance
+ Taylor.
+
+Fri Jul 17 07:37:20 1998 H.J. Lu (hjl@gnu.org)
+
+ * ylwrap: Don't use absolute path if the input is in the
+ current directory.
+
+Fri Jul 17 11:58:27 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * automake.in: Use $(AM_MAKEFLAGS) in every invocation of $(MAKE).
+ * subdirs.am: Likewise.
+
+Thu Jul 16 18:09:03 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * remake.am (config.status): Depend upon
+ $(CONFIG_STATUS_DEPENDENCIES).
+ * automake.in (handle_configure): Examine
+ CONFIG_STATUS_DEPENDENCIES.
+
+Tue Jul 14 13:37:48 1998 Tom Tromey <tromey@cygnus.com>
+
+ * Makefile.am: Always look in srcdir for automake.in.
+
+Tue Jun 23 14:00:27 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * progs.am: Don't let $(EXEEXT) interfere with $(transform).
+ Report from Mike Stump <mrs@wrs.com>.
+
+Tue Jun 2 13:27:34 1998 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (scan_one_configure_file): Make CONFIGURE file
+ handle local. From Kevin Street.
+
+ * automake.in (read_am_file): Error if blank line or comment
+ follows trailing backslash. Test syntax.test.
+ (file_contents_with_transform): Likewise.
+
+Thu May 28 18:49:47 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * automake.in (handle_configure): Always use $(SHELL) when running
+ config.status.
+
+Mon Jun 1 14:23:29 1998 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_yacc_lex_cxx): Use AM_CPPFLAGS, AM_CXXFLAGS,
+ AM_CFLAGS.
+ (output_yacc_build_rule): Use AM_YFLAGS, AM_LFLAGS.
+ (handle_dependencies): Don't define CXXMKDEP.
+
+ * clean.am (mostlyclean-generic): Prefix rule with MOSTLYCLEAN.
+ (clean-generic): Prefix rule with CLEAN.
+ (distclean-generic): Prefix rule with DISTCLEAN.
+ (maintainer-clean-generic): Prefix rule with MAINTAINERCLEAN.
+ BUILT_SOURCES now handled in automake itself.
+ * automake.in (initialize_per_input): Initialize
+ maintainer_clean_files.
+ (handle_yacc_lex_cxx): Put lex and yacc output files onto
+ @maintainer_clean_files.
+ (handle_clean): Handle @maintainer_clean_files. Transform
+ clean.am when installing; try to remove unnecessary tests in
+ generated code.
+
+ * automake.in (do_check_merge_target): Only generate $(MAKE)
+ command if there are check targets to make. Report from Karl
+ Heuer.
+
+Sun May 17 23:05:55 1998 Tom Tromey <tromey@cygnus.com>
+
+ * aclocal.in (write_aclocal): Fixed generated copyright message.
+ From Eleftherios Gkioulekas.
+
+ * automake.in (parse_arguments): Typo fix from Paul D. Smith.
+
+Fri May 8 12:14:03 1998 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_yacc_lex_cxx): Put lex and yacc output files
+ onto @clean.
+
+Wed May 6 01:18:05 1998 Tom Tromey <tromey@cygnus.com>
+
+ * header-vars.am (DESTDIR): Changed from DISTDIR.
+
+Fri Apr 24 10:16:20 1998 Tom Tromey <tromey@cygnus.com>
+
+ * libs.am: Don't display loop while it runs.
+
+Sun Apr 5 13:58:24 1998 Tom Tromey <tromey@cygnus.com>
+
+ * Released 1.3.
+
+ * automake.in (handle_options): Correctly handle trailing alpha
+ version letter or lack thereof. Test version3.test.
+
+ * automake.in (am_conf_line_warning): Perl 4 fixlet; typo fix.
+
+ * automake.in (handle_ltlibraries): Examine _DEPENDENCIES
+ variable. Report from Chris Provenzano. Test library.test.
+ (handle_libraries): Likewise.
+
+ * m4/lex.m4: Allow AM_PROG_LEX to be called with no arguments.
+
+Sun Apr 5 13:54:25 1998 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * automake.in (scan_one_configure_file): Only warn about
+ AC_DECL_YYTEXT and AC_PROG_LEXX.
+ (am_conf_line_warning): New function.
+
+Fri Apr 3 15:43:46 1998 Doug Evans <devans@seba.cygnus.com>
+
+ * automake.in (handle_configure): Fix setting of colon_infile
+ in case where multiple files are used to build Makefile.
+ [ Test colon5.test ]
+
+Fri Apr 3 13:07:58 1998 Tom Tromey <tromey@cygnus.com>
+
+ * ansi2knr.c, texinfo.tex: New versions from respective
+ maintainers.
+
+ * automake.in (scan_one_configure_file): Exclude INSTALL_DATA from
+ configure_vars. Test instdata.test.
+
+Tue Mar 31 21:07:42 1998 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_yacc_lex_cxx): Changed to use new version of
+ ansi2knr.
+ * ansi2knr.c: New version from L. Peter Deutsch.
+
+Thu Mar 26 11:00:04 1998 Tom Tromey <tromey@cygnus.com>
+
+ * m4/exeext.m4: Correctly eliminate bad cases when computing
+ am_cv_exeext. Report from Markus F.X.J. Oberhumer.
+
+Wed Mar 25 15:09:56 1998 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_options): Support alpha version numbers.
+
+ * lisp.am (install-@DIR@LISP): Allow .el files to appear in build
+ directory. From Gary V Vaughan.
+
+Mon Mar 23 07:55:04 1998 Tom Tromey <tromey@cygnus.com>
+
+ * Released 1.2h.
+
+ * header.am (install-@DIR@HEADERS): A header can appear in the
+ build directory as well as the source directory. From Gary V
+ Vaughan.
+
+ * automake.in (handle_yacc_lex_cxx): Push lib sources onto
+ de_ansi_files before generating ._c dependencies. Test
+ libobj8.test.
+
+ * m4/mktime.m4: New version from Jim Meyering.
+
+ * aclocal.in (usage): Document --print-ac-dir.
+ (parse_arguments): Added --print-ac-dir.
+
+ * ansi2knr.c, ansi2knr.1: New versions from ghostscript.
+ (main): Reapplied "-" change from Harlan Stenn.
+
+Fri Mar 20 22:42:30 1998 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (scan_one_configure_file): Use &am_conf_line_error,
+ not warn. Check to make sure warnings happen only for
+ configure.in, not for "not aclocal.m4".
+
+Fri Mar 20 22:35:31 1998 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * automake.in: understand AM_PROG_LEX as a replacement for
+ AC_PROG_LEX and AC_DECL_YYTEXT
+ warn if the replaced macros are used.
+ * m4/Makefile.am: add lex.m4
+ * m4/lex.m4 (AM_PROG_LEX): new file and macro
+ * missing: added lex/flex support
+ instead of touching flex and bison output files, try to copy
+ them from a filename based on the last given argument
+
+Fri Mar 20 00:26:10 1998 Tom Tromey <tromey@cygnus.com>
+
+ * m4/protos.m4: Require AC_PROG_CPP.
+
+ * aclocal.in (add_file): If &search fails, and macro matches AM_,
+ then print error. Test aclocalii.test.
+
+ De-ansi-fication fixes from Harlan Stenn:
+ * ansi2knr.c (main): Accept "-" argument to mean stdin.
+ * automake.in (handle_yacc_lex_cxx): Preprocess C source before
+ running through ANSI2KNR.
+ (get_object_extension): Generate rule for <dir>/ansi2knr.o.
+
+ * texinfos.am: Include $(DESTDIR).
+ * lisp.am: Include $(DESTDIR).
+ * java.am: Include $(DESTDIR).
+ * mans.am (install-man@SECTION@): Include $(DESTDIR).
+ * automake.in (handle_man_pages): Include $(DESTDIR) in
+ installdirs variable.
+ (handle_texinfo): Likewise.
+ (am_install_var): Likewise.
+ * header-vars.am (DISTDIR): Define.
+ * data.am, header.am, libs.am, ltlib.am, progs.am, scripts.am:
+ Support $(DESTDIR) at install time. From Assar Westerlund.
+
+ * automake.in (handle_java): Put Java sources in distribution.
+
+Thu Mar 19 01:33:35 1998 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_java): Put JAVACFLAGS after -d option. From
+ Per Bothner.
+
+ * automake.in (handle_java): Use $(JAVAROOT) in place of `../..'
+ in default CLASSPATH.
+ (am_install_var): Allow `JAVA' variable to be defined. Don't
+ define `JAVA' primary.
+
+ * automake.in (scan_one_configure_file): Check for `sinclude' and
+ turn into recursive call.
+
+ * automake.in (initialize_per_input): Set $output_all.
+ (generate_makefile): Don't set $output_header or generate
+ `default' target. Print $output_all before $output_header.
+ (handle_merge_targets): Put `all' target into $output_all.
+
+Wed Mar 18 14:48:44 1998 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_configure): Put secondary dependencies from
+ multi-":" AC_OUTPUT entry into dependency list for file created by
+ config.status, not file created by automake. Test colon3.test.
+ (generate_makefile): Pass $output, not $makefile, to
+ handle_merge_targets.
+
+ * Makefile.am (pkgdata_DATA): Added java.am, java-clean.am.
+ * java-clean.am: New file.
+ * java.am: New file.
+ * automake.in (generate_makefile): Call handle_java.
+ (handle_java): New sub.
+ (am_install_var): Only push primary variable on @all if not doing
+ Java.
+
+Sun Mar 8 15:43:09 1998 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_configure): When recognizing AC_OUTPUT ":"
+ syntax, make regexp less greedy. From Maciej W. Rozycki. Test
+ colon4.test.
+
+Fri Mar 6 21:20:53 1998 Tom Tromey <tromey@cygnus.com>
+
+ * m4/exeext.m4 (AM_EXEEXT): Ignore am_c_test.o. From Bruno
+ Haible.
+
+Tue Feb 24 12:10:44 1998 Tom Tromey <tromey@cygnus.com>
+
+ * Released 1.2f.
+
+ * mans.am (install-man@SECTION@, uninstall-man@SECTION@): Quote
+ `$' in sed expression.
+
+ * config.guess, config.sub, texinfo.tex: New versions from FSF.
+
+ * Makefile.am (pkgdata_DATA): Added mans.am.
+ * automake.in (handle_man_pages): Rewrote for new man page
+ handling.
+ (initialize_global_constants): Removed install_man_format,
+ uninstall_man_format.
+ * mans.am: New file.
+
+ * data.am, header.am, libs.am, lisp.am, ltlib.am, progs.am,
+ scripts.am, texinfos.am: Put `@' before NORMAL_UNINSTALL
+ invocation.
+
+Mon Feb 23 13:38:56 1998 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (get_object_extension): Remove .c.lo rule from
+ libtool when dependencies turned on.
+ * libtool.am (.c.lo): Disable when dependency checking turned on.
+
+ Dependency fixes from Alexandre Oliva:
+ * automake.in (handle_dependencies): Fixed quoting when
+ substituting @PFX@ and @EXT@. Don't look for the `.P' file.
+ * depend2.am (%.o): Use @PFX@ and @EXT@.
+ (%.lo): New rule.
+
+ * texinfos.am (.txi.info, .txi.dvi, .txi): New rules.
+ * automake.in (handle_texinfo): Recognize .txi files. From Karl
+ Berry.
+
+ * automake.in (handle_single_transform_list): $objpat now a
+ parameter. Set $objpat when suffix rule found.
+
+ * aclocal.in (parse_arguments): Only put current year in --version
+ output.
+ * automake.in (parse_arguments): Only put current year in
+ --version output.
+
+Mon Feb 16 00:12:03 1998 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_aclocal_m4): When processing -I options,
+ directory is separate argument. Test aclocali.test.
+
+Fri Feb 13 14:35:39 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * automake.in (handle_texinfo): Correct condition for whether
+ texinfo.tex is required. [Test texinfo5.test]
+
+Fri Feb 13 00:28:53 1998 Tom Tromey <tromey@cygnus.com>
+
+ * Released 1.2e.
+
+ * Makefile.am: Removed bogus line.
+
+Thu Feb 12 22:27:05 1998 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (get_object_extension): Conditionally include .c.o
+ rule from compile.am.
+ (handle_dependencies): Generate correct code when including new
+ depend2.am.
+ (file_contents_with_transform): Better error reporting.
+ * depend.am (MKDEP): Removed.
+ (.deps/.P): Removed. Don't include .deps/.P.
+ * compile.am (.c.o): Now conditional on dependencies not being
+ generated by compiles.
+ * depend2.am (%.o): New rule.
+ (.deps/%.P): Removed.
+
+ * tags.am (TAGS): Uniquify list of files. From Harlan Stenn.
+
+ * aclocal.in (scan_m4_files): Reverse-sort keys when constructing
+ `search' function. From Johan Danielsson.
+
+Tue Sep 16 14:13:15 1997 Paul D. Smith <psmith@baynetworks.com>
+
+ * automake.in: Create new option --generate-deps. This option has
+ automake generate a .dep_segment file containing just the
+ dependencies created from the .P list. This is needed to maintain
+ other makefiles that automake doesn't deal with (Makefile.DOS,
+ SMakefile, etc.)
+ * automake.texi (Invoking Automake): Document it.
+
+Thu Feb 12 19:45:16 1998 Tom Tromey <tromey@cygnus.com>
+
+ * aclocal.in (scan_configure): Tightened regexp a bit. Test
+ whoami.test. From Johan Danielsson.
+
+ Report from H.J. Lu.
+ * automake.in (output_yacc_build_rule): Don't write rule to create
+ `.h' file.
+ (handle_yacc_lex_cxx): Generate rule to build each .h file.
+
+ * automake.in (handle_options): Set readme-alpha and check-news
+ for Gnits after main processing. Test alpha.test. From Jim
+ Meyering.
+
+ * aclocal.in (usage): Updated bug-reporting address.
+ * automake.in (usage): Updated bug-reporting address.
+
+ * compile.am: Remove *.core for 4.4BSD systems. From Assar
+ Westerlund.
+
+ * automake.in (handle_single_transform_list): Don't set
+ seen_any_source if all sources are C++.
+
+Wed Feb 11 17:30:01 1998 Tom Tromey <tromey@cygnus.com>
+
+ * aclocal.in (write_aclocal): Write to $output_file, not
+ aclocal.m4. From Alexandre Oliva.
+
+Thu Feb 5 13:38:55 1998 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (scan_one_configure_file): Put CXCPP before CXX in
+ regexp. From Garth Corral. Test cxxxcpp.test.
+
+Sun Jan 25 11:16:53 1998 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (generate_makefile): Run handle_minor_options before
+ handle_dist, to make sure README-alpha ends up in distribution.
+ From Jim Meyering.
+
+Tue Jan 13 09:19:33 1998 Tom Tromey <tromey@cygnus.com>
+
+ * aclocal.in (add_file): Hack for Perl 4. From Seth Alves.
+
+Thu Dec 11 12:29:46 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * scripts.am: Don't add @EXEEXT@ to installed scripts. Scripts
+ are not executables.
+
+Tue Dec 2 20:07:18 1997 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (initialize_global_constants): Bug fix in
+ uninstall_man_format. Report from Eric Backus.
+
+Mon Dec 1 13:52:39 1997 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_source_transform): Correctly generate
+ _OBJECTS when _SOURCES is defined conditionally. Reported by Rob
+ Savoye. Test cond3.test.
+
+ Fixes for test objc.test:
+ * automake.in (initialize_per_input): New global seen_any_source.
+ (handle_yacc_lex_cxx): Use seen_any_source to decide when to
+ define LINK, et al.
+ (handle_single_transform_list): Set seen_any_source.
+ (handle_lib_objects_cond): Likewise.
+
+Wed Nov 26 13:41:57 1997 Tom Tromey <tromey@cygnus.com>
+
+ * Released 1.2d.
+
+ * m4/ccstdc.m4: Don't force AM_PROG_CC_STDC before AC_PROG_CPP.
+ Temporary hack.
+
+ * m4/mktime.m4 (AM_FUNC_MTIME): New version from Paul Eggert.
+
+ * header-vars.am (NORMAL_INSTALL, PRE_INSTALL, POST_INSTALL,
+ NORMAL_UNINSTALL, PRE_UNINSTALL, POST_UNINSTALL): Define as `:',
+ not `true'.
+
+ * automake.in (output_yacc_build_rule): Don't overwrite .h file in
+ non-ylwrap case.
+
+ * tags.am (ID): Scan lisp files.
+ (TAGS): Make tags for lisp files.
+
+Tue Nov 25 14:20:42 1997 Tom Tromey <tromey@cygnus.com>
+
+ * ltlib.am: Use INSTALL_DATA, not INSTALL_PROGRAM. From Gord
+ Matzigkeit.
+
+Fri Nov 21 15:15:50 1997 Tom Tromey <tromey@cygnus.com>
+
+ * m4/mingw.m4, m4/cygwin.m4: Argument to AC_TRY_COMPILE is
+ function body, not entire function. From Ian Taylor.
+
+Sat Oct 25 12:39:19 1997 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (scan_one_configure_file): Skip empty string for
+ Perl 4. From Assar Westerlund.
+
+ * config.guess, config.sub, texinfo.tex: New versions from FSF.
+
+Fri Oct 24 23:15:09 1997 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (output_yacc_build_rule): Use YFLAGS again.
+ (handle_yacc_lex_cxx): Error if YACCFLAGS used.
+
+Wed Aug 27 19:26:45 1997 Rob Savoye <rob@chinadoll.cygnus.com>
+
+ * compile.am: Add suffix rules for ".s.o" and ".S.o" so assembler
+ files can be used.
+ * libtool.am: Add suffix rules for ".s.lo" and ".S.lo" so assembler
+ files can be used.
+ * automake.in: Add .S and .s to the standard list of suffixes so
+ assembler files can be used.
+
+Fri Oct 24 13:39:01 1997 Tom Tromey <tromey@cygnus.com>
+
+ * m4/exeext.m4: Require AM_MINGW32. Check MINGW32 setting.
+
+Thu Oct 23 21:16:28 1997 Tom Tromey <tromey@cygnus.com>
+
+ * m4/init.m4 (missing_dir): AC_REQUIRE AM_SANITY_CHECK,
+ AC_ARG_PROGRAM, and AC_PROG_MAKE_SET.
+
+Tue Oct 21 16:49:36 1997 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_options): Recognize `cygnus'.
+
+Tue Sep 9 17:09:47 1997 Rob Savoye <rob@chinadoll.cygnus.com>
+
+ * m4/mingw.m4: New file for mingw32 support.
+ * m4/exeext.m4: Also check for the mingw32 environment.
+
+Tue Oct 21 00:39:44 1997 Tom Tromey <tromey@cygnus.com>
+
+ * m4/Makefile.am (m4data_DATA): Added mingw.m4.
+
+ * automake.in (handle_lib_objects_cond): Don't require @LEXLIB@.
+ (handle_programs): Likewise.
+
+ * subdirs.am (check-recursive installcheck-recursive
+ info-recursive dvi-recursive): Handle case when SUBDIRS is empty.
+ (maintainer-clean-recursive): Likewise. From Assar Westerlund.
+
+ * aclocal.in (scan_m4_files): If macro recognized, &search will
+ return 1.
+ (scan_configure): If AM_ macro not found, give error.
+
+ * m4/sanity.m4: If `ls' completely fails, die. From Jim
+ Meyering.
+
+Mon Oct 20 16:13:48 1997 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_single_transform_list): Fixlet for Fortran.
+ From Bernard Urban.
+
+ * libtool.am: Remove _libs, for libtool 1.0d. From Gord
+ Matzigkeit.
+
+Sun Oct 19 22:59:35 1997 Tom Tromey <tromey@cygnus.com>
+
+ * texinfos.am: Bug fix. From John W. Coomes.
+
+Mon Sep 29 12:57:00 1997 Tom Tromey <tromey@cygnus.com>
+
+ * Released 1.2c.
+
+ * automake.in (handle_dist_worker): In topmost directory of
+ project, use `distdir', not `top_distdir', as argument to
+ --output-dir; likewise when building in subdirs.
+
+Sun Sep 28 15:55:46 1997 Tom Tromey <tromey@cygnus.com>
+
+ * m4/sanity.m4: Test $*, not $@. From Akim Demaille.
+
+ * automake.in (handle_minor_options): New sub.
+ (check_gnits_standards): Don't handle README-alpha here.
+ (handle_dist_worker): Check NEWS file if `check-news' option
+ requested.
+ (generate_makefile): Run handle_minor_options.
+ (handle_options): Handle readme-alpha and check-news. Set them if
+ --gnits.
+
+ * depend.am (MKDEP): Use $(CC), not gcc.
+
+Wed Sep 24 23:48:26 1997 Tom Tromey <tromey@cygnus.com>
+
+ * Release 1.2b.
+
+ * m4/ccstdc.m4 (AM_PROG_CC_STDC): Make sure this is run before
+ AC_PROG_CPP. From Markus Oberhumer.
+
+Fri Sep 12 00:04:19 1997 Paul Eggert <eggert@twinsun.com>
+
+ * m4/ccstdc.m4 (AM_PROG_CC_STDC): Don't look at __STDC__;
+ look only at whether function prototypes are supported.
+
+Wed Sep 24 16:10:37 1997 Tom Tromey <tromey@cygnus.com>
+
+ * Various: Put "-" before each `rm' line. This avoids a bug in
+ some losing makes (Ultrix, 4.3 BSD).
+
+ * automake.in (handle_dist_worker): Correctly handle subdirs that
+ have their own configure.in. From Peter Mattis.
+
+ * automake.in (handle_yacc_lex_cxx): Handle de-ansi-fied sources
+ in srcdir as well as build dir.
+
+ * automake.in (scan_one_configure_file): Detect AC_OUTPUT().
+ (handle_single_transform_list): Don't apply length() to a list.
+
+ * automake.in (handle_programs): Define _DEPENDENCIES variable if
+ not defined by user.
+
+Thu Sep 18 19:43:38 1997 Tom Tromey <tromey@cygnus.com>
+
+ * m4/sanity.m4: Quote "$@" for m4. From Gord Matzigkeit.
+
+Mon Sep 1 23:50:38 1997 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_texinfo): Set need_texi_file only when
+ TEXINFO_TEX not defined.
+
+Thu Aug 28 09:37:29 1997 Tom Tromey <tromey@cygnus.com>
+
+ From Juergen Erhard:
+ * automake.in (SUFFIX_RULE_PATTERN): New global.
+ (handle_single_transform_list): If suffix matches a source suffix,
+ rewrite.
+ (read_am_file): Add suffix rules to %suffix_rules.
+ (initialize_per_input): Initialize %suffix_rules.
+
+Wed Aug 27 12:56:50 1997 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_texinfo): Also remove .kys and .ps files.
+
+ * automake.in (handle_yacc_lex_cxx): Quoting fixlet. From Kaveh
+ Ghazi.
+
+ * aclocal.in (write_aclocal): Print copyright and copying
+ permissions. From RMS.
+ * automake.in (initialize_global_constants): More copyright stuff
+ from RMS.
+
+ * automake.in (handle_texinfo): Only require texinfo.tex in
+ appropriate situations. Report from Paul D. Smith.
+
+Mon Aug 25 15:45:52 1997 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (scan_dependency_file): Fix so that
+ OMIT_DEPENDENCIES will work. From Alexander Lukyanov.
+
+ * automake.in (handle_texinfo): texi2dvi can generate `.cn'
+ files. From Akim Demaille.
+
+Wed Aug 6 10:51:37 1997 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_texinfo): Reversed sense of test.
+
+Tue Aug 5 17:49:54 1997 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_dependencies): Always mark OMIT_DEPENDENCIES
+ as seen.
+
+ * automake.in (handle_yacc_lex_cxx): Make each _.c file depend on
+ ansi2knr.
+
+ * automake.in (handle_yacc_lex_cxx): Fix for makes which don't
+ allow $< in non-suffix rules. From Akim Demaille.
+
+ * automake.in (value_to_list): If variable name contains configure
+ substitution, then just ignore it.
+
+ * automake.in (variable_defined): Mark variable is seen, even if
+ only conditionally seen.
+
+ * Makefile.am: Check for bad splits.
+ * automake.in (various): Use split(' ',...), not split(/ /,...).
+
+Tue Aug 5 14:08:51 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * ylwrap: If the program is a relative path, force it to be
+ absolute.
+
+Tue Aug 5 16:59:41 1997 Tom Tromey <tromey@cygnus.com>
+
+ * missing: Examine A[CM]_CONFIG_HEADER for name of files to
+ touch. From Markus F.X.J. Oberhumer.
+
+ * automake.in (require_file_internal): Better error message when
+ installing.
+
+ * automake.in (handle_texinfo): Smarter test when deleting output
+ of makeinfo.
+
+Sat Aug 2 13:32:45 1997 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (do_check_merge_target): In --cygnus mode, check
+ doesn't depend on all.
+
+ * automake.in (output_yacc_build_rule): Use YACCFLAGS, not
+ YFLAGS. Per GNU Standards.
+
+ * dejagnu.am (RUNTESTDEFAULTFLAGS): New macro.
+ (check-DEJAGNU): Use it.
+
+ * subdirs.am (maintainer-clean-recursive): Actually reverse subdir
+ list. From Alexander Lukyanov.
+
+ * automake.in (initialize_global_constants): Changed generated
+ copyright. From RMS.
+
+ * automake.in (handle_configure): Pass correct value for
+ CONFIG_FILES. From Ian Taylor.
+
+Thu Jul 31 17:36:10 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * ylwrap (pairlist): Shift out trailing "--"; don't pass it to
+ $prog.
+
+Thu Jul 24 00:52:02 1997 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (initialize_global_constants): Changed index names
+ in dist hash so that alternate dist targets will be generated.
+ Report from Glenn Amerine.
+
+ Suggestion from Karl Berry:
+ * automake.in (usage): Added short info line.
+
+ * aclocal.in (usage): Updated bug-reporting address. Added short
+ info line.
+
+ * automake.in (handle_emacs_lisp): Put contents of lisp-clean.am
+ into output. Report from Karl Berry.
+
+Mon Aug 25 16:14:32 1997 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_configure): Only generate ":" syntax for
+ CONFIG_FILES when really needed.
+
+Wed Aug 6 14:47:12 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * remake-hdr.am (@CONFIG_HEADER@): Use a dummy command to force
+ GNU make to recheck the file modification time.
+
+Tue Aug 5 14:44:10 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * ylwrap: If the program is a relative path, force it to be
+ absolute.
+
+Mon Aug 4 14:52:08 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * automake.in ($RULE_PATTERN): Accept $ in body of rule name.
+ (handle_programs): Don't append $(EXEEXT) if the
+ program name contains '.'.
+ (am_install_var): When rewriting _PROGRAMS, don't append $(EXEEXT)
+ if the program names contains '.'. Also, handle conditionals.
+
+Sat Aug 2 14:43:41 1997 Tom Tromey <tromey@cygnus.com>
+
+ * m4/exeext.m4: Fixed quoting.
+
+ * m4/exeext.m4 (am_cv_exeext): Use echo, not ls.
+
+ * automake.in (handle_programs): Transform @EXEEXT@ when including
+ program.am.
+
+Fri Aug 1 17:09:09 1997 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_programs): Don't transform CYGWIN or
+ NOTCYGWIN.
+ (am_install_var): Likewise.
+
+ * progs-clean.am (clean-@DIR@PROGRAMS): Never include EXEEXT.
+
+ * progs.am: Removed @EXEEXT@; it is now implicit.
+ * program.am: Add @EXEEXT@ in appropriate places; removed
+ cygwin-dependent code.
+ * automake.in (seen_exeext): Renamed from seen_cygwin32.
+ (handle_programs): Use seen_exeext.
+ (scan_one_configure_file): Look for AM_EXEEXT, not AM_CYGWIN32.
+ (check_cygnus): Use seen_exeext.
+ (am_install_var): Likewise.
+ (am_install_var): When handling PROGRAMS primary, append EXELIST
+ to program names as necessary.
+ * m4/exeext.m4: Require AM_CYGWIN32.
+
+Thu Jul 31 17:36:10 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * ylwrap (pairlist): Shift out trailing "--"; don't pass it to
+ $prog.
+
+ * texinfos.am: Add -I $(srcdir) when invoking $(MAKEINFO) for
+ CYGNUS .texinfo.info case and .texinfo case.
+
+ * automake.in (handle_configure): Correct handling of inputs for
+ for AC_OUTPUT files when invoking config.status.
+
+Mon Jul 28 15:29:25 1997 Rob Savoye <rob@chinadoll.cygnus.com>
+
+ * m4/cygwin.m4: Set a variable CYGWIN32, rather than EXEEXT.
+ * m4/exeext.m4: New autoconf test for an executable suffix.
+ * m4/Makefile.in: Install the new exeext.m4 test.
+
+Sun Jun 22 14:01:59 1997 Tom Tromey <tromey@cygnus.com>
+
+ * Released version 1.2.
+
+ * automake.in (handle_texinfo): Look for texinfo.tex in aux dir.
+
+ * automake.in (require_file_internal): Only print "installing"
+ when actually installing. From Gord Matzigkeit.
+
+ * automake.in (handle_tests): Exit status `77' means `ignore
+ test'. From François Pinard.
+ (handle_tests) Also, make banner same size as text.
+
+ * automake.in (handle_configure): Don't handle PRE_BUILT_SOURCES.
+ (handle_built_sources): Likewise; don't have `all' depend on
+ BUILT_SOURCES.
+
+ * depend.am (DEPS_MAGIC): New variable.
+ (.deps/.P): Depend on BUILT_SOURCES again.
+
+ * texinfos.am: Use ||, not ;.
+
+Tue Jun 10 11:04:16 1997 Tom Tromey <tromey@cygnus.com>
+
+ * m4/cygwin.m4: Examine output of compiler to see if .exe needed.
+
+Sun Jun 1 13:16:05 1997 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_built_sources): Handle PRE_BUILT_SOURCES.
+ (handle_configure): Likewise.
+
+ * depend2.am (.deps/%.P): Don't generate file if MKDEP fails.
+ From Alexandre Oliva.
+
+ * depend.am (.deps/.P): Depend on PRE_BUILT_SOURCES, not
+ BUILT_SOURCES.
+
+ * automake.in (initialize_global_constants): Added 1997 to
+ copyright info.
+
+ * automake.in (output_yacc_build_rule): Never move y.tab.c over
+ the .h file. From Jim Meyering.
+
+Thu May 29 23:16:02 1997 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (scan_one_configure_file): Avoid defining ACLOCAL,
+ AUTOCONF, AUTOMAKE, AUTOHEADER. From David Zaroski.
+
+Sat Feb 22 16:05:24 1997 Gordon Matzigkeit <gord@gnu.ai.mit.edu>
+
+ * Makefile.am (pkgdata_DATA): Under this new scheme, we no longer
+ need compile-kr.am. Delete it.
+
+ * automake.in (handle_yacc_lex_cxx, get_object_extension): Use
+ _.c, _.o, _.lo instead of ._c, ._o, .l_o for de-ansification.
+
+ * ansi2knr.c (main): Parse our arguments a little differently so
+ that we don't create null output files when we can't read the
+ input file.
+
+Wed May 28 23:40:33 1997 Tom Tromey <tromey@cygnus.com>
+
+ * depend.am (.deps/.P): Depend on $(BUILT_SOURCES) again. From
+ Gord Matzigkeit.
+
+Mon May 26 22:50:49 1997 Tom Tromey <tromey@cygnus.com>
+
+ * remake-hdr.am ($(srcdir)/@STAMP@.in): Make echo silent. Report
+ from Alexandre Oliva.
+
+ * automake.in (generate_makefile): If --no-force, check
+ Makefile.in against configure.in and aclocal.m4. Report from
+ Alexandre Oliva.
+
+ * automake.in (handle_dist_worker): Put --include-deps on command
+ line if specified originally.
+ (handle_configure): Likewise.
+
+ * configure.in: Error if Perl 5.001 is used.
+
+ * ylwrap: Don't quote $prog when executing it. From Jim
+ Meyering.
+
+Thu May 15 12:05:20 1997 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_merge_targets): Set INSTALL_SCRIPT in
+ install-strip target.
+
+Tue May 13 08:20:02 1997 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_dependencies): Don't generate dependencies
+ if DEP_FILES would be empty.
+
+Sun May 11 13:59:14 1997 Tom Tromey <tromey@cygnus.com>
+
+ * config.guess: New version from FSF.
+
+ * automake.in (get_object_extension): If ansi2knr in another
+ directory, always define ANSI2KNR to full path. From Akim
+ Demaille.
+
+ * kr-extra.am (clean-krextra): Remove ansi2knr here, not in
+ distclean-krextra.
+
+ * missing: Regularized grammar. From François Pinard.
+
+Sat May 10 16:48:47 1997 Tom Tromey <tromey@cygnus.com>
+
+ * Released 1.1p.
+
+ * m4/init.m4: Error if source directory already configured.
+
+ * automake.in (scan_dependency_file): Always use srcdir name as
+ passed in on command line.
+
+Thu May 1 12:53:46 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * automake.in (value_to_list): Don't fail when a variable
+ substitution is not a complete word.
+
+Tue May 6 15:22:41 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * subdirs.am: Fix check for make -k to use $(MAKEFLAGS) and to not
+ get fooled by command line arguments.
+
+Sat May 10 15:48:46 1997 Tom Tromey <tromey@cygnus.com>
+
+ * m4/ccstdc.m4: Print "none needed" if compiler accepts ANSI C by
+ default.
+
+Mon May 5 23:24:09 1997 Tom Tromey <tromey@cygnus.com>
+
+ * mkinstalldirs, config.guess, config.sub, COPYING, texinfo.tex:
+ New versions from FSF.
+
+Sun May 4 15:21:22 1997 Tom Tromey <tromey@cygnus.com>
+
+ * texinfos.am (install-info): Avoid the Debian install-info.
+ (uninstall-info): Likewise.
+
+ * automake.in (handle_single_transform_list): Strip any directory
+ name before processing name.
+
+Thu May 1 19:24:08 1997 Tom Tromey <tromey@cygnus.com>
+
+ * depend2.am (.deps/%.P): Don't put $(srcdir)/ into dependency.
+
+Wed Apr 30 19:15:47 1997 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_dist_worker): Change how top_distdir is
+ computed. Based on patch from Ian Taylor.
+ (handle_dist): Define top_distdir.
+
+ * automake.in (handle_yacc_lex_cxx): Include CXXFLAGS in CXXLINK.
+ (handle_yacc_lex_cxx): Include CFLAGS in LINK.
+
+Wed Apr 30 14:46:37 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * automake.in (handle_dist_worker): When building a distribution,
+ if SUBDIRS is defined conditionaly, recur into each possible
+ subdirectory.
+
+ * clean.am (distclean-generic): Remove stamp-h[0-9]*.
+
+Tue Apr 29 19:11:45 1997 Tom Tromey <tromey@cygnus.com>
+
+ * INSTALL, mkinstalldirs, install-sh: Update from François
+ Pinard.
+
+ * aclocal.in (add_macro): If AC_ macro was defined, then mark it
+ as seen. Report from Janos Farkas.
+
+ * subdirs.am: Clean targets now run in reverse order. From Kevin
+ Dalley.
+
+ * automake.in (handle_texinfo): Put `aminfo', not `info' on
+ @clean.
+
+ * mdate-sh: New version from Ulrich Drepper.
+
+Mon Apr 28 01:18:05 1997 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_configure): Makefile only depends on
+ BUILT_SOURCES when generating dependencies.
+
+ * Released 1.1o.
+
+Sun Apr 27 23:58:20 1997 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_dist): Use variable_value, not
+ variable_contents.
+
+Wed Apr 23 14:04:28 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * automake.in (IF_PATTERN): Define.
+ (ELSE_PATTERN, ENDIF_PATTERN): Define.
+ (AM_CONDITIONAL_PATTERN): Define.
+ (%configure_cond): New global hash table.
+ (handle_source_transform): If xx_SOURCES is defined conditionally,
+ define xx_OBJECTS using the same conditions.
+ (handle_lib_objects): If variable is defined conditionally, define
+ xx_DEPENDENCIES conditionally. Most code moved into subroutine.
+ (handle_lib_objects_cond): New function, broken out of
+ handle_lib_objects.
+ (scan_one_configure_file): Look for $AM_CONDITIONAL_PATTERN.
+ (conditional_true_when): New function.
+ (variable_defined): Add new parameter: cond. Change some
+ callers.
+ (variable_conditions): New function.
+ (variable_conditionally_defined): New function.
+ (variable_value): New function. Change most uses of $contents to
+ call variable_value instead.
+ (value_to_list): New function, from variable_value_as_list.
+ (variable_value_as_list): Add new parameter: cond. Change all
+ callers. Move some code into subroutine value_to_list.
+ (define_pretty_variable): Add new parameter: cond. Change call
+ callers.
+ (read_am_file): Handle conditionals.
+ (initialize_per_input): Initialize %conditional and
+ @conditional_stack.
+ * m4/cond.m4: New file.
+ * m4/Makefile.am (m4data_DATA): Add cond.m4.
+
+Sun Apr 27 11:03:36 1997 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_dist_worker): Run automake once per
+ directory, instead of once at the top.
+ (handle_dist_worker): Changed interface.
+ (handle_dist): Likewise.
+ (generate_makefile): Better error message if can't write the
+ file.
+ (handle_dist_worker): Pass top_distdir to subdir makes.
+
+ * automake.in (handle_dist_worker): Use mode 777 on directories in
+ distribution. GNU Standards compliance.
+
+ * automake.in (handle_yacc_lex_cxx): Don't use interlock.
+ (output_yacc_build_rule): Don't use interlock; just use new ylwrap
+ instead. The new ylwrap builds in a subdir; idea from Mark
+ Eichin.
+ (output_lex_build_rule): Likewise.
+ (initialize_global_constants): [common_files] Don't include
+ interlock.
+
+ * Makefile.am (pkgdata_SCRIPTS): Removed interlock.
+ * interlock: Removed.
+ * ylwrap: Changed interface. Now runs command in subdir.
+
+ * remake.am (config.status): Look in srcdir for config header.
+ ($(srcdir)/configure): Likewise.
+ * remake-hdr.am (@STAMP@): Look in srcdir for config header. From
+ Phil Nelson.
+ ($(srcdir)/@CONFIG_HEADER_IN@): Likewise.
+
+ * automake.in (handle_aclocal_m4): Make target $(ACLOCAL_M4), not
+ value spelled out. From Phil Nelson
+
+ * automake.in (handle_configure): Don't skip Makefiles; instead
+ skip automake inputs.
+ (handle_merge_targets): Changed interface; put $makefile at
+ beginning of @all (rather than Makefile at end).
+
+ * automake.in (handle_yacc_lex_cxx): Correctly compute
+ de_ansi_sources.
+
+ * clean-kr.am (distclean-kr): Do nothing; ansi2knr is removed in
+ kr-extra.am.
+
+ * Makefile.am: Check to make sure there are no accidental
+ configure substitutions.
+
+ * automake.in (handle_texinfo): Don't allow configure substitution
+ on @MAKEINFO@ here.
+
+ * automake.in (handle_yacc_lex_cxx): ._c and ._o files both depend
+ on $(ANSI2KNR).
+
+ * kr-extra.am (ansi2knr): Removed.
+ (ansi2knr.o): Likewise.
+
+ * automake.in (get_object_extension): Allow ansi2knr to be built
+ from any directory.
+
+Fri Apr 25 12:33:23 1997 Tom Tromey <tromey@cygnus.com>
+
+ * missing: Changed bison text. From Ian Taylor.
+
+ * m4/missing.m4: Redirect stdin of testee. From Bill Fenner.
+
+ * automake.in (output_yacc_build_rule): Generate rule to create .h
+ file.
+ (handle_footer): Generate unique, sorted list of suffixes.
+
+ * automake.in (scan_one_configure_file): Recognize AC_PROG_AWK,
+ _CPP, _CXCPP, _LN_S. From Ralph Schleicher.
+
+Mon Apr 21 12:35:57 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * automake.in (@config_fullnames): New array.
+ (@config_names): New array, replacing $config_name.
+ (@config_headers): New array, replacing $config_header.
+ (get_object_extension): Handle multiple header files.
+ (handle_tags, handle_merge_targets): Likewise.
+ (scan_one_configure_file): Likewise.
+ (handle_configure): Likewise. Don't check for the configuration
+ header file in AC_OUTPUT; it won't be there.
+ * remake-hdr.am: Handle multiple header files.
+ * clean-hdr.am: New file, broken out of remake-hdr.am.
+ * m4/header.m4: Handle multiple header files.
+ * Makefile.am (pkgdata_DATA): Add clean-hdr.am.
+
+Wed Apr 16 00:05:47 1997 Tom Tromey <tromey@cygnus.com>
+
+ * texinfos.am (.texi.info, .texi, .texinfo.info, .info): Remove
+
+ * automake.in (define_program_variable): Added `override' argument.
+ (handle_texinfo): Pass override arg when defining MAKEINFO.
+ (AC_MISSING_PROG): New constant.
+ (scan_one_configure_file): Use it.
+
+Tue Apr 15 12:12:28 1997 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_texinfo): In --cygnus mode, reserve
+ clean-info for the user.
+
+ * automake.in (handle_subdirs): Typo fix. From Akim Demaille.
+
+ * automake.in (handle_tags): Only use SUBDIRS if it is actually
+ defined. Report from Ian Taylor.
+
+ * tags.am: Added prefix to SUBDIRS rules.
+
+Wed Apr 9 17:09:40 1997 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_ltlibraries): Use correct rpath
+ substitution. Bug from Jim Blandy.
+
+Mon Apr 7 17:40:18 1997 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (AM_INIT_AUTOMAKE_PATTERN): Fixed for new 3rd arg.
+ Test version2.test.
+
+Thu Apr 3 19:07:59 1997 Tom Tromey <tromey@cygnus.com>
+
+ * Released 1.1n.
+
+ * tags.am (TAGS): Run "cd && etags" in subshell for proper
+ associativity.
+
+ * texinfos.am (install-info-am): If --cygnus, then info file can
+ be in build dir. From David Zaroski.
+
+ * ltlibrary.am (@LTLIBRARY@): use @RPATH@, not explicit -rpath.
+
+ * automake.in (handle_ltlibraries): Treat EXTRA_ libraries
+ specially.
+
+Wed Apr 2 00:03:50 1997 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_source_transform): Don't generate dependency
+ on config.h.
+ (scan_dependency_file): Strip the .P file from the target.
+
+ * automake.in (handle_tags): Use single, not double, quotes when
+ setting list variable.
+
+ * data.am, header.am, libs.am, lisp.am, ltlib.am, progs-clean.am,
+ progs.am, scripts.am, tags.am: Use single quotes to fill list
+ variable; otherwise `$' in filename will not work. From Per
+ Bothner.
+
+ * mdate-sh: Use "ls -d" so mdate-sh can be run on a directory.
+ From Bruno Haible.
+
+ * automake.in (handle_programs): Error if LIBADD used where LDADD
+ meant.
+ (handle_libraries): Error if LDADD used where LIBADD meant.
+ (handle_ltlibraries): Likewise.
+
+Tue Apr 1 22:46:33 1997 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (check_canonical_spelling): New sub.
+ (handle_programs): Use it.
+ (handle_libraries): Likewise.
+ (handle_ltlibraries): Likewise.
+
+Mon Mar 31 12:13:08 1997 Tom Tromey <tromey@cygnus.com>
+
+ * depend2.am (.deps/%.P): Make .P file depend on everything the .c
+ file includes.
+
+Fri Mar 28 23:34:49 1997 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_configure): Error if stamp-h appears in
+ AC_OUTPUT line.
+
+Thu Mar 27 17:28:47 1997 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_dist_worker): Avoid automake rules in
+ generated Makefile when no-dependencies specified. From Greg
+ Woods.
+
+ * m4/lispdir.m4: Don't AC_SUBST ELCFILES. From Greg Woods.
+
+ * texi-vers.am (stamp-@VTI@): Make commands silent.
+
+ * Makefile.am (maintainer-check): "true" is ok now.
+
+ * m4/init.m4: Added optional 3rd argument, which avoids
+ AC_DEFINE.
+
+ * automake.in (scan_one_configure_file): Explicitly avoid
+ INSTALL_SCRIPT to avoid defining it twice.
+
+ * header-vars.am: Change _INSTALL variable definitions to `true'.
+ Updated all users to put `@' before invocation.
+
+Tue Mar 25 22:09:45 1997 Tom Tromey <tromey@cygnus.com>
+
+ Update to follow GNU Standards:
+ * automake.in (handle_man_pages): Use NORMAL_UNINSTALL before
+ uninstall-man.
+ * texinfos.am (uninstall-info): Use two loops, and have
+ PRE_UNINSTALL before running install-info.
+ * data.am, header.am, libs.am, lisp.am, ltlib.am, progs.am,
+ scripts.am, texinfos.am: Use NORMAL_UNINSTALL.
+ * header-vars.am (PRE_UNINSTALL, POST_UNINSTALL,
+ NORMAL_UNINSTALL): Define.
+
+ * automake.in (scan_one_configure_file): Don't define ANSI2KNR as
+ a configure varriable.
+
+ * m4/missing.m4: Run test in a subshell. From Gord Matzigkeit.
+
+Mon Mar 24 23:28:59 1997 Tom Tromey <tromey@cygnus.com>
+
+ * m4/sanity.m4: Sleep before creating temp file.
+
+ * header-vars.am (NORMAL_INSTALL, PRE_INSTALL, POST_INSTALL):
+ Define.
+
+Sat Mar 22 00:06:00 1997 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (am_install_var): Make sure to delete
+ CYGWIN/NOTCYGWIN tokens as appropriate.
+ (handle_programs): Remove NOTCYGWIN tokens as well.
+ (file_contents_with_transform): A single newline makes an empty
+ line.
+
+ * program.am: Remove executable before linking.
+
+ * texinfos.am (.texi.dvi): Look in @TEXINFODIR@ for texinfo.tex.
+ (.texinfo.dvi): Likewise.
+
+ * automake.in (handle_texinfo): TEXINFO_TEX variable can set
+ location of texinfo.tex.
+
+Fri Mar 21 10:22:51 1997 Tom Tromey <tromey@cygnus.com>
+
+ * texinfos.am (.texinfo.dvi): Mirror .texi.dvi.
+
+ * ansi2knr.c, ansi2knr.1: New versions from L. Peter Deutsch.
+
+ * scripts.am: Add @EXEEXT@ to installed scripts.
+
+Wed Jan 22 20:12:31 1997 Jim Meyering <meyering@na-net.ornl.gov>
+
+ * m4/mktime.m4 (AM_FUNC_MKTIME): Run tests for each of a few values
+ for the TZ environment variable. Andre Novaes Cunha provided the
+ hairy TZ setting that exercized the Solaris tzset bug.
+
+1997-01-22 Paul Eggert <eggert@twinsun.com>
+
+ * m4/mktime.m4: (AM_FUNC_MKTIME): Fix bug in mktime test -- don't
+ test now, test a couple of thousand times.
+
+Thu Mar 20 00:16:54 1997 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_programs): Remove CYGWIN lines unless
+ AM_CYGWIN32 seen.
+ (am_install_var): Remove CYGWIN lines from -clean file as well.
+
+ * progs.am: Put @EXEEXT@ where appropriate.
+
+ * program.am (@PROGRAM@): If using Cygwin32, then create actual
+ name in addition to ".exe" name.
+
+ * progs-clean.am (clean-@DIR@PROGRAMS): Conditionalize on CYGWIN.
+
+ * automake.in (check_cygnus): Require AM_CYGWIN32 in --cygnus mode.
+ (am_install_var): If AM_CYGWIN32 not seen, then remove @EXEEXT@
+ from .am files.
+
+ * automake.in (seen_cygwin32): New global.
+ (scan_one_configure_file): Check for AM_CYGWIN32.
+
+ * m4/cygwin.m4: New file.
+
+ * automake.in (scan_one_configure_file): Explicitly handle
+ AC_CONFIG_HEADER so we can avoid spurious warnings.
+ (obsolete_macros): Removed AC_CONFIG_HEADER.
+
+ * automake.in (handle_yacc_lex_cxx): Perl 4 fixes. From Greg
+ A. Woods.
+
+Wed Mar 19 00:35:13 1997 Tom Tromey <tromey@cygnus.com>
+
+ * Released 1.1m.
+
+ * m4/missing.m4: Print message saying what is happening.
+
+ * m4/sanity.m4: sleep before testing.
+
+Tue Mar 18 17:20:03 1997 Tom Tromey <tromey@cygnus.com>
+
+ * config.guess, config.sub: New from the FSF.
+
+ * automake.in (initialize_global_constants): [common_files]
+ Include `missing'.
+ (scan_configure): Require `missing'.
+
+ * header-vars.am (MAKEINFO): Don't define.
+
+ * m4/init.m4 (missing_dir): Use AM_MISSING_PROG.
+ * m4/missing.m4: New file.
+
+ `missing' changes from François Pinard:
+ * Everywhere: Use ACLOCAL_M4 to name aclocal.m4 file; ACLOCAL now
+ names aclocal program.
+ * m4/init.m4: Replace programs with `missing' if not found.
+ * automake.in (handle_texinfo): Define MAKEINFO as @MAKEINFO@.
+ (AC_CHECK_PATTERN): Check for alphanumeric names only.
+ (handle_aclocal_m4): Use ACLOCAL, not aclocal.
+ * Makefile.am (pkgdata_SCRIPTS): Include missing.
+ * missing: New file.
+
+ * automake.in (target_defined): New sub.
+ (handle_footer): Error if target .SUFFIXES used.
+
+Sun Mar 16 14:33:41 1997 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_lib_objects): Set seen_c_source to line
+ number.
+ (handle_yacc_lex_cxx): Use seen_c_source as line number.
+ (am_line_error): Line of -1 means skip line-number check.
+
+ * automake.in (read_am_file): Change to keep perl -w quiet.
+ (check_typos): Removed extra check of EXTRA_ containing config
+ subs.
+
+Mon Mar 10 23:17:19 1997 Tom Tromey <tromey@cygnus.com>
+
+ * remake-hdr.am (stamp-h): Set CONFIG_HEADERS to
+ $(CONFIG_HEADER_FULL).
+ * automake.in (handle_configure): Define CONFIG_HEADER_FULL.
+
+ * automake.in (handle_lib_objects): Set seen_c_source as
+ appropriate. From Alexander V. Lukyanov. Test cxxlibobj.test.
+
+Sat Mar 8 22:54:35 1997 Tom Tromey <tromey@cygnus.com>
+
+ * texinfo.tex: New version.
+
+ * automake.in (handle_emacs_lisp): If EMACS is `no', then we
+ couldn't find an Emacs. So don't bother running elisp-comp. From
+ Ulrich Drepper.
+
+ * automake.in (handle_texinfo): Added .tr and .cv to list of
+ texinfo clean extensions. From Karl Berry.
+
+Fri Feb 28 22:14:53 1997 Tom Tromey <tromey@cygnus.com>
+
+ * Makefile.am: Make sure we never use "undef".
+
+ * automake.in (usage): Changed bug-reporting address.
+ (handle_dist): Use undef, not delete.
+
+Wed Feb 26 08:41:11 1997 Gordon Matzigkeit <gord@gnu.ai.mit.edu>
+
+ * automake.in (%obsolete_macros): Reintroduce, with hints for what
+ to do to upgrade the support.
+
+ * automake.in, ltlib-clean.am, ltlib.am, ltlibrary.am: Revamped
+ libtool support to use the _LTLIBRARIES primary.
+
+Wed Feb 26 00:20:39 1997 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_tags): In default case, add @tags_deps to
+ dependencies of tags target.
+
+Tue Feb 25 23:46:29 1997 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_tests): If a test failed, then make should
+ fail. From Jim Meyering.
+
+Mon Feb 24 19:02:21 1997 Tom Tromey <tromey@cygnus.com>
+
+ * texi-vers.am (@VTEXI@): Copy stamp file into output.
+
+Sun Feb 23 00:10:36 1997 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (handle_programs): Give correct error line for lex
+ error.
+ (am_line_error): Avoid uninitialized value errors from perl -w.
+
+ * aclocal.in (scan_m4_files): Fixed perl -w warning.
+
+ * texinfos.am (.texi, .texinfo): New targets.
+
+ * automake.in (scan_texinfo_file): Renamed.
+ (handle_texinfo): Handle files without ".info" extension.
+
+ * automake.in (handle_subdirs): Error if directory contains "/".
+ (handle_yacc_lex_cxx): Quoting fix.
+ (handle_single_transform_list): Use transformed (non-ansi) version
+ of $obj instead of explicit ".o". From Gord Matzigkeit.
+
+ * m4/sanity.m4: Pass -L to ls if possible.
+
+Sat Feb 22 15:22:31 1997 Tom Tromey <tromey@cygnus.com>
+
+ * dist-vars.am (DISTFILES): Don't distribute MANS.
+
+ * automake.in (handle_dist): Use define_variable to define TAR,
+ GZIP.
+ (handle_dist): Pass GZIP in environment to tar.
+ (initialize_global_constants): Likewise.
+
+ From Kaveh Ghazi:
+ * m4/protos.m4: Don't put any dependencies on AC_C_INLINE or
+ AC_C_CONST.
+ * m4/ccstdc.m4: Force AM_PROG_CC_STDC to come before AC_C_INLINE
+ or AC_C_CONST.
+
+Fri Feb 21 00:39:17 1997 Tom Tromey <tromey@cygnus.com>
+
+ From The Crimson Binome:
+ * automake.in (handle_yacc_lex_cxx): Handle C++ yacc/lex source.
+ (output_yacc_build_rule): New sub for C++ yacc/lex.
+
+ * automake.in (my_glob): New sub.
+ (handle_dependencies): Use my_glob.
+ (handle_aclocal_m4): Scan ACLOCAL_AMFLAGS for dependencies.
+
+ * ltlibs.am, lisp.am, libs.am, header.am, data.am, progs.am,
+ scripts.am, texinfos.am: Add leading space to echo.
+
+ * automake.in (handle_texinfo): Added .tps and .vrs to list of TeX
+ endings. From Jim Blandy.
+ (install_man_format): Make rule silent; instead print actual
+ command.
+
+Tue Feb 4 18:29:42 1997 Tom Tromey <tromey@cygnus.com>
+
+ * dist-vars.am (TAR): Removed.
+ * automake.in (TAR): New variable.
+ (handle_dist): Explicitly define TAR.
+ * configure.in: Compute TAR.
+
+ * automake.in (handle_lib_objects): Put @ALLOCA@ on @dep_list, not
+ @dep_files.
+ (AC_SUBST_PATTERN): Typo fix.
+ (handle_aclocal_m4): Use ACLOCAL_AMFLAGS.
+ (handle_clean): Put -recursive target before -am target.
+ (handle_merge_targets): Put basename of $config_name on @all.
+ Test confsub.test. From Ramón García Fernández.
+
+Tue Jan 28 22:19:04 1997 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (initialize_global_constants): Put libtoolize files
+ into @common_files, not @common_sometimes. From Gord Matzigkeit.
+
+Sun Jan 26 17:46:08 1997 Tom Tromey <tromey@cygnus.com>
+
+ * texinfos.am (.texi.info): If --cygnus, set -I $(srcdir). From
+ Per Bothner.
+
+Sun Jan 12 18:28:16 1997 Fred Fish (fnf@ninemoons.com)
+
+ * automake.in: Use 'interlock' and 'ylwrap' from source
+ directory or aux config directory, not build directory.
+
+Tue Jan 7 18:35:10 1997 Tom Tromey <tromey@cygnus.com>
+
+ * aclocal.in (parse_arguments): Handle -I.
+ (usage): Ditto.
+ (scan_m4_files): Ditto.
+
+ * automake.in (handle_single_transform_list): Don't give error
+ message if extension unrecognized.
+
+Tue Dec 17 11:18:20 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * m4/header.m4 (AM_CONFIG_HEADER): Check for $CONFIG_HEADERS, not
+ $CONFIG_HEADER.
+
+Tue Jan 7 17:59:26 1997 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (scan_one_configure_file): AM_INIT_GUILE_MODULE runs
+ AM_PROG_INSTALL, not AC_PROG_INSTALL. From Jim Blandy.
+ (handle_texinfo): Handle no-texinfo.tex option.
+ (handle_options): Ditto.
+
+Thu Jan 2 14:16:17 1997 Tom Tromey <tromey@cygnus.com>
+
+ * automake.in (am_install_var): Ignore EXTRA libtool libraries.
+ From Marius Vollmer.
+
+-----
+
+Copyright 1997-2017 Free Software Foundation, Inc.
+
+Copying and distribution of this file, with or without modification, are
+permitted provided the copyright notice and this notice are preserved.
diff --git a/old/TODO b/old/TODO
new file mode 100644
index 000000000..5d78c6b34
--- /dev/null
+++ b/old/TODO
@@ -0,0 +1,504 @@
+the new YFLAGS code doesn't correctly handle srcdir
+
+allow foo_NAME to rename an object (library or program)
+at build/install time
+
+remove _LTLIBRARIES and just use _LIBRARIES
+then use this for zip/jar as well
+
+add an error if the user makefile.am violates our
+ namespace rules
+
+we need a document describing automake from the end user's point of view
+eg describe INSTALL_HEADER there, among other things
+
+* maintainer-clean
+
+Akim:
+> @@ -31,5 +31,9 @@
+> DISTCLEAN -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+>
+> maintainer-clean-generic:
+> +## FIXME: shouldn't we really print these messages before running
+> +## the dependencies?
+> + @echo "This command is intended for maintainers to use"
+> + @echo "it deletes files that may require special tools to rebuild."
+> -rm -f Makefile.in
+
+Tom:
+> I'd like to eventually fix the FIXME comment by having
+> maintainer-clean look like:
+>
+> maintainer-clean:
+> @echo ...
+> $(MAKE) whatever
+>
+> We're left with the question of whether we should repeat them in every
+> subdir.
+
+*
+Alexandre Oliva:
+> Hmm... Interesting. It must have been a side effect of the enabling
+> of forced `relink' on GNU/Linux/x86. Anyway, on platforms that
+> actually require relinking, this problem remains, and I see no way to
+> overcome it other than arranging for automake to install libraries
+> before executables, as you suggest. This shouldn't be a big problem,
+> anyway.
+>
+> A bigger problem could show up if two libraries in the same directory,
+> one dependent on the other, are installed concurrently. If relinking
+> is needed for the dependent library, we have a problem. It appears to
+> me that user will have to live without `make -j install', in this
+> case.
+
+Alex Hornby
+> Here's an Automake patch and changelog entry allow make -j install on
+> such degenerate systems (and Linux with buggy libtool <g>)
+>
+> If you install to locations other that bin_ and lib_ then a larger fix
+> is necessary, but this should fix the 90% case.
+
+* think about how per-object flags should work. in particular:
+ * how should they be specified?
+ using the object name is confusing when .lo/.obj in use
+ however, the object name provides a nice interaction with
+ per-exe flags
+ * how should they interact with per-executable flags?
+ [ this is probably a feature in search of a problem ]
+
+* cross-compilation support:
+ programs built and used by the build process need to be
+ built for CC_FOR_BUILD
+ introduce a new prefxi for this, e.g. `build_PROGRAMS'
+ [ we can do this in an automatic way I think.
+ unfortunately it isn't that useful until autoconf has support
+ for this sort of thing as well ]
+
+* one performance enhancement would be to have autoconf write
+ a single file containing all the macro assignments.
+ then read this file via `include'
+ unfortunately this can't be done because of conditionals
+ -- but it could be made to work if we also changed:
+ * automake to rewrite @FOO@ to $(FOO), and
+ * the implementation of conditionals to rely on some new
+ config.status magic
+
+* support prog_LIBS as override for LIBS
+
+* Test subdir-objects option with yacc, lex, ansi2knr
+ Our locking scheme won't prevent a parallel make from losing
+ if there are two `bar.o' files and the timing is just right
+ This only happens with parallel make and no-`-c -o' compiler,
+ so it probably isn't very important
+ `-c -o' when doing libtool
+ try to find a losing compiler and see if it really works.
+ (actually: hack config.cache and do it)
+
+* per-exe flags
+** LIBOBJS shouldn't be used when there are per-exe flags (?)
+
+* Allow creation of Java .zip/.jar files in natural way
+ If you are building a compiled Java library, then the .zip/.jar
+ ought to be made automatically.
+
+* examine possibility of using any character in a macro name
+ and rewriting names automatically. this means we must rewrite
+ all references as well.
+ [ this is a 2.0-style feature ]
+
+* `distcheck' and `dist' should depend on `all'
+
+* Add code to generate foo-config script like gnome, gtk
+
+* document user namespace for macro/target names
+ adopt some conventions and use uniformly
+ [ this is a good thing for the rewrite ]
+
+* distclean must remove config.status
+ can't this cause problems for maintainer-clean?
+ shouldn't maintainer-clean print the message before running
+ any part of the make? (just to slow things down long enough
+ for the user to stop it)
+ (maybe doesn't matter since people who even know about
+ maintainer-clean already have a clue)
+
+* reintroduce AM_FUNC_FNMATCH which sets LIBOBJS
+ Then have automake know about fnmatch.h.
+ [ probably should wait for autoconf to get right functionality ]
+
+* "make diff" capability
+ look at gcc's Makefile.in to see what to do
+ or look at maint program
+
+* in --cygnus, clean-info not generated at top level
+
+* what if an element of a scanned variable looks like
+ $(FOO).$(BAR) ?
+ or some other arbitrary thing?
+ right now we try to cope, but not very well
+ [ this is only of theoretical interest for now ]
+ [ We now have an 'inner_expand' option to traverse_recursively,
+ but it is not yet used. ]
+
+* make sure every variable that is used is also defined
+ [ we don't really look at variable uses in detail.
+ 2.0 thing ]
+
+* make sure `missing' defines are generated
+
+* missing should handle install -d and rmdir -p (for uninstall)
+
+* NORMAL_INSTALL / NORMAL_UNINSTALL -vs- recursive rules
+ [ requires changes to the standard ]
+
+* should not put texiname_TEXINFOS into distribution
+ should rename this macro anyway, to foo_texi_DEPENDENCIES
+
+* For now I guess I'll just have automake give an error if it encounters
+non-C source in a libtool library specification.
+
+* if program has the same name as a target, do something sensible:
+ - if the target is internal, rename it
+ - if the target is mandated (eg, "info"), tell the user
+ consider auto-modifying the program name to work around this
+
+* should separate actual options from strictness levels
+ strictness should only cover requirements
+ You should be able to pick and choose options
+
+having just one Makefile for a project would give a big speed increase
+for a project with many directories, eg glibc. ideally (?) you'd
+still be able to have a Makefile.am in each directory somehow; this
+might make editing conceptually easier.
+
+* finish up TAGS work
+
+* only remove libtool at top level?
+
+* clean up source directory by moving stuff into subdirs
+
+* consider adding other variables similar to pkglibexecdir?
+ requests for pkg-dirs with version included
+
+Avoid loops when installing; instead unroll them in automake
+[ Impossible when @AC_SUBST@ values are used. ]
+
+Some long-term projects:
+* if $(FOO) is used somewhere, ensure FOO is defined, either by
+ user or by automake if possible
+
+[ include, += support ]
+* even better would be allowing targets in different included
+ fragments to be merged. e.g., `install-local'.
+
+consider putting all check-* targets onto @check?
+
+take diff-n-query code from libit
+
+Per Bothner says:
+Per> 1) Being able to build a set of non-source programs
+Per> from source programs, without necessarily linking them together.
+Per> I.e. one should be able to say something like:
+Per> dummy_SOURCES=foo.c bar.c
+Per> and automake should realize that it needs to build foo.o and bar.o.
+Per> 2) Being intelligent about new kinds of suffixes.
+Per> If it sees:
+Per> SUFFIXES = .class .java
+Per> and a suffix rule of the form:
+Per> .java.class:
+Per> then it should be able to realize it can build .class files from
+Per> .java files, and thus be able to generate a list of
+Per> .class files from a list of .java source files.
+[What Per wanted here was a way to have automate automatically follow
+suffix rules. So for instance if you had a `.x.y:' rule, and automake
+saw a `.x' file, it would automatically build and install the
+corresponding `.y' file.]
+
+Jim's idea: should look for @setfilename and warn if filenames too long
+* guess split size
+
+from joerg-martin schwarz:
+ -- If Makefile.am contains $(CC), $(COMPILE), $(YLWRAP), ....
+ in an explicitly written rule, you should emit the corresponding
+ Makefile variables automatically.
+
+From the GNU Standards. These things could be checked, and probably
+should be if --gnu.
+* Make sure that the directory into which the distribution unpacks (as
+well as any subdirectories) are all world-writable (octal mode 777).
+* Make sure that no file name in the distribution is more than 14
+characters long.
+* Don't include any symbolic links in the distribution itself.
+ (ditto hard links)
+* Make sure that all the files in the distribution are world-readable.
+
+should be able to determine what is built by looking at rules (and
+configure.in). Then built man pages (eg) could automatically be
+omitted from the distribution.
+
+Right now, targets generated internally (eg "install") are not
+overridable by user code. This should probably be possible, even
+though it isn't very important. This could be done by generating all
+internal rules via a function call instead of just appending to
+$output_rules.
+ [ this will be harder to implement when scanning a rule like all-recursive
+ from subdirs.am ]
+
+Other priorities:
+* Must rewrite am_install_var. Should break into multiple functions.
+ This will allow the callers to be a little smarter.
+* Rewrite clean targets.
+* Fix up require_file junk.
+
+djm wants ``LINKS'' variable; list of things to link together after
+install. In BSD environment, use:
+ LINKS = from1 to1 from2 to2 ...
+
+Need way to say there are no suffixes in a Makefile (Franc,ois'
+"override" idea suffices here)
+
+Check to make sure various scripts are executable (IE when looking for
+them in a directory)
+
+Add support for html via an option. Use texi2html. Use
+"html_TEXINFOS", and htmldir = .../html. Include html files in
+distribution. Also allow "html_DATA", for raw .html files.
+ [ when will texinfo directly support html? ]
+See also Karl Berry's message on a roadmap for a "info -> html"
+transition:
+<https://lists.gnu.org/archive/html/texinfo-devel/2012-03/msg00018.html>
+
+uninstall and pkg-dirs should rm -rf the dir.
+
+In general most .am files should be merged into automake. For
+instance all the "clean" targets could be merged by keeping lists of
+things to be removed. This would be a lot nicer looking. Note that
+the install targets probably should not be merged; it is sometimes
+useful to only install a small part.
+
+* Lex, yacc support:
+** It would be nice to automatically support using bison's better features
+ to rename the output files. This requires autoconf support
+** Consider supporting syntax from autoconf "derived:source", eg:
+ y.tab.c:perly.y
+ for yacc and lex source
+** what if you use flex and the option to avoid -lfl?
+ should support this?
+
+* Multi-language support:
+** should have mapping of file extensions to languages
+** should automatically handle the linking issue (special-case C++)
+** must get compile rules for various languages; FORTRAN probably
+ most important unimplemented language
+This should be integrated in some way with Per's idea.
+Eg .f.o rules should be recognized & auto-handled in _SOURCES
+That way any random language can be treated with C/C++ on a first-class
+basis (maybe)
+
+It might be cool to generate .texi dependencies by grepping for
+@include. (If done, it should be done the same way C dependencies are
+done)
+[ Ask Karl Berry for a -M option to makeinfo and texi2dvi? ]
+
+It would be good to check some parts of GNU standards. Already check
+for install-sh and mkinstalldirs. What else is required to be in
+package by GNU standards or by automake?
+Some things for --strictness=gnits:
+* "cd $(foo); something" is an error in a rule. Should be:
+ "cd $(foo) && something"
+* Look for 'ln -s' and warn about using $(LN_S) and AC_PROG_LN_S
+* Look for $(LN_S) and require AC_PROG_LN_S
+
+Auto-distribute "ChangeLog.[0-9]+"? "ChangeLog.[a-z]+"?
+
+Check all source files to make sure that FSF address is up-to-date.
+--gnits or --gnu only.
+
+Merge each -vars.am file with corresponding ".am" file. Can do this
+because of changes to &file_contents.
+
+Should libexec programs have the name transform done on them?
+
+Order the output rules sensibly, so FOO_SOURCES and FOO_OBJECTS are
+together and rules are in the usual order.
+
+djm says:
+David> To avoid comments like the one about subdirs getting buried in
+David> the middle of a Makefile.in, how about pushing comments that
+David> start with ### to the top of the Makefile.in (in order)? Sort
+David> of like how Autoconf uses diversions to force initialization
+David> code to the top of configure.
+
+================================================================
+
+Stuff for aclocal:
+
+probably should put each group of m4 files into a subdir owned by the
+containing application.
+
+================================================================
+
+Document:
+
+AM_MISSING_PROG
+
+how to use the generated makefiles
+ - standard targets
+ - required targets
+ - NORMAL_INSTALL junk
+
+rationale for avoiding
+ make CFLAGS="$CFLAGS" ...
+in subdirs make rule
+
+write example of using automake with dejagnu
+follow calc example in dejagnu docs
+
+document which variables are actually scanned and which are not.
+
+Document customary ordering of Makefile.am. From François.
+
+Should include extended version of diagram from Autoconf (suggested by
+Greg Woods)
+
+Make a definition of the term "source"
+
+document how to use Automake with CVS. Idea from Mark Galassi. Also
+include Greg Woods' more sophisticated "cvs-dist" target.
+
+-- must document all variables that are supposed
+ to be public knowledge
+
+must document the targets required for integration with
+non-automake-using subdirs
+
+document the "make SHELL='/bin/sh -x'" trick for debugging
+
+section on relationship to GNU make. include notes on parallel makes
+
+add a concept index
+
+move discussion of cygwin32, etags, mkid under other gnu tools
+
+CCLD, CXXLD, FLD
+
+================================================================
+
+Libraries:
+
+* Should support standalone library along with subdir library in same
+ Makefile.am. Maybe: turn off "standalone" mode if library's Makefile.am
+ is not only one specd? [ add an option for this ]
+
+================================================================
+
+Longer term:
+
+Would it be useful to integrate in some way with the Debian package
+building utility? Must check. maybe it would be possible to deal
+with all the different package utilities somehow. Lately I've been
+hearing good things about the RedHat packaging utilities. Why are
+there so many of these? Are they fun to write or something?
+The RedHat package utility is called RPM; see
+ http://rpm.org/
+It actually has problems, like no configure script and no documentation.
+
+For Cygnus it would probably be good to be able to handle the native
+package utility on each platform. There are probably 3 or 4 of these
+(sysv, solaris?, aix?)
+
+tcl/unix/Makefile.in has some code to generate a Solaris package.
+
+Automake probably can't do all of this on its own. A new tool might
+be a better idea
+
+I have some notes from a Debian developer on how the integration
+should work
+
+================================================================
+
+A tool to guess what the local Makefile.am should look like:
+(see Gord's Maint program!)
+
+* Probably integrate with autoscan
+* Use various simple rules to determine what to do:
+ * get name of top directory, sans version info
+ * search for .c files with 'main' in them
+ * if in main.c, use directory name for program
+ * if in more than one, generate multiple programs
+ * if not found, generate a library named after directory
+ * order subdir searches correctly: lib first, src last
+ * assume 'testsuite' dir means we are using dejagnu
+* maybe be smart about reading existing Makefile.am, so tool
+ can be run for incremental changes? You could imagine:
+
+ Makefile.am:
+ autoproject --incremental
+
+================================================================
+
+Stuff NOT to do, and why:
+
+consider auto-including any file that matches "*.in".
+ [ no: po/Makefile.in shouldn't be included ]
+
+must look at mkid to see how it works (for subdir usage)
+ [ right now, it doesn't. i don't see a simple fix right now ]
+
+if configure.in not found, move up a directory and try again? This
+could eliminate a common source of problems.
+ [ this is just a bad idea ]
+
+* scripts are installed in $exec_prefix/bin, not $prefix/bin
+ Bug or feature?
+ [ the consensus on Gnits is that this isn't required.
+ doubters can work around it anyway ]
+
+Scan source directories and warn about missing files, eg .c/.h files
+that aren't mentioned?
+ [ distcheck makes this less useful ]
+
+* quoting bugs
+ - how to install file with a space in its name?
+ [ don't bother with this -- make is just too losing ]
+
+* notice when a .c file is a target somewhere, and auto-add it to
+ BUILT_SOURCES
+ [ BUILT_SOURCES are for files that need to be built before anything
+ else because of hidden dependencies (something .c files are
+ unlikely to be) ]
+
+* Scan multiple input files when Makefile is generated?
+ This would provide flexibility for large projects; subsumes
+ the "Makefile.tmpl" idea
+ [ can't do this. must explain why in manual.
+ basically, solving all the problems is too hard
+ like: how to remove redundancies between generated .in files
+ instead should implement `include' directive for Makefile.am ]
+
+* Should be a way to have "nobuild_PROGRAMS" which aren't even built,
+ but which could be by running the magic make command.
+ [ We already have EXTRA_PROGRAMS for this. ]
+
+
+* copyright notice
+
+Copyright 1994-2017 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 <https://www.gnu.org/licenses/>.
+
+
+Local Variables:
+mode: outline
+End:
diff --git a/pre-inst-env.in b/pre-inst-env.in
new file mode 100644
index 000000000..3f895075f
--- /dev/null
+++ b/pre-inst-env.in
@@ -0,0 +1,41 @@
+#! /bin/sh
+# Copyright © 2017 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 <https://www.gnu.org/licenses/>.
+
+abs_top_srcdir="@abs_top_srcdir@"
+abs_top_builddir="@abs_top_builddir@"
+
+sep='@PATH_SEPARATOR@';
+
+PERL5LIB="$abs_top_builddir/lib/${sep}$abs_top_srcdir/lib/${PERL5LIB:+${sep}}$PERL5LIB"
+export PERL5LIB
+
+PATH="$abs_top_builddir/bin${sep}$PATH"
+export PATH
+
+# Trigger the use of local modules.
+AUTOMAKE_UNINSTALLED=1
+export AUTOMAKE_UNINSTALLED
+
+AUTOMAKE_LIBDIR="$abs_top_srcdir/lib"
+export AUTOMAKE_LIBDIR
+
+ACLOCAL_AUTOMAKE_DIR="$abs_top_srcdir/m4"
+export ACLOCAL_AUTOMAKE_DIR
+
+ACLOCAL_PATH="$abs_top_srcdir/m4/acdir"
+export ACLOCAL_PATH
+
+exec "$@"
diff --git a/t/CheckListOfTests.am b/t/CheckListOfTests.am
new file mode 100644
index 000000000..b741a2176
--- /dev/null
+++ b/t/CheckListOfTests.am
@@ -0,0 +1,68 @@
+## -*- Automake -*-
+##
+## Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+##
+
+## Temporary files used in the 'check-list-of-tests' recipe.
+am__tmk = tests-in-makefile-list.tmp
+am__tfs = tests-on-filesystem-list.tmp
+am__tdf = diff-in-tests-lists.tmp
+
+## 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:
+## Prefer unified diffs over plain diffs, for readability.
+ @if diff -u /dev/null /dev/null >/dev/null 2>&1; then \
+ diff='diff -u'; \
+ else \
+ diff='diff'; \
+ fi; \
+## List of tests in Makefile.
+ lst='$(expected_list_of_tests)'; \
+ test -n "$$lst" || lst='$(TESTS)'; \
+ for t in $$lst; do \
+ echo "$$t"; \
+ done | sort >$(am__tmk); \
+## List of subdirs where to look for tests.
+ dirs='$(test_subdirs)'; \
+ test -n "$$dirs" || dirs=.; \
+## List of tests on filesystem. Be careful to cater for VPATH builds too.
+ test_extensions='$(TEST_EXTENSIONS)'; \
+ for ext in $$test_extensions; do \
+ for dir in $$dirs; do \
+ ls $$dir/*$$ext 2>/dev/null; \
+ if test $(srcdir) != $(builddir); then \
+ ($(am__cd) $(srcdir) && ls $$dir/*$$ext 2>/dev/null); \
+ fi; \
+ done; \
+ done | sed 's,^\./,,' | sort | uniq >$(am__tfs); \
+## Compare the two lists, complain if they differ.
+ if $$diff $(am__tmk) $(am__tfs) >$(am__tdf); then \
+ result=0; \
+ else \
+ echo '$@: list of tests in Makefile an on filesystem differ' >&2; \
+ echo "+ $$diff in-makefile on-filesystem" >&2; \
+ cat $(am__tdf) >&2; \
+ result=1; \
+ fi; \
+ rm -f $(am__tmk) $(am__tfs) $(am__tdf); \
+ exit $$result;
+
+.PHONY: clean-maintcheck-testslist-tmp
+clean-local: clean-maintcheck-testslist-tmp
+clean-maintcheck-testslist-tmp:
+ rm -f $(am__tmk) $(am__tfs) $(am__tdf)
diff --git a/t/README b/t/README
new file mode 100644
index 000000000..23dd943f5
--- /dev/null
+++ b/t/README
@@ -0,0 +1,303 @@
+ The Automake test suite
+
+
+User interface
+==============
+
+
+Running the tests
+-----------------
+
+ To run all tests:
+
+ make -k check
+
+ By default, verbose output of a test 't/foo.sh' or 't/foo.tap' is retained
+ in the log file 't/foo.log'. Also, a summary log is created in the file
+ 'test-suite.log' (in the top-level directory).
+
+ You can use '-jN' for faster completion (it even helps on a uniprocessor
+ system, due to unavoidable sleep delays, as noted below):
+
+ make -k -j4
+
+ To rerun only failed tests:
+
+ make -k recheck
+
+ To run only tests that are newer than their last results:
+
+ make -k check RECHECK_LOGS=
+
+ To run only selected tests:
+
+ make -k check TESTS="t/foo.sh t/bar.tap" (GNU make)
+ env TESTS="t/foo.sh t/bar.tap" make -e -k check (non-GNU make)
+
+ To run the tests in cross-compilation mode, you should first configure
+ the automake source tree to a cross-compilation setup. For example, to
+ run with a Linux-to-MinGW cross compiler, you will need something like
+ this:
+
+ ./configure --host i586-mingw32msvc --build i686-pc-linux-gnu
+
+ To avoid possible spurious error, you really have to *explicitly* specify
+ '--build' in addition to '--host'; the 'lib/config.guess' script can help
+ determine the correct value to pass to '--build'.
+ Then you can just run the testsuite in the usual way, and the test cases
+ using a compiler should automatically use a cross-compilation setup.
+
+
+Interpretation
+--------------
+
+ Successes:
+ PASS - success
+ XFAIL - expected failure
+
+ Failures:
+ FAIL - failure
+ XPASS - unexpected success
+
+ Other:
+ SKIP - skipped tests (third party tools not available)
+ ERROR - some unexpected error condition
+
+
+About the tests
+---------------
+
+ There are two kinds of tests in the Automake testsuite (both implemented
+ as shell scripts). The scripts with the '.sh' suffix are "simple"
+ tests, their outcome completely determined by their exit status. Those
+ with the '.tap' suffix use the TAP protocol.
+
+ If you want to run a test by hand, you should be able to do so using the
+ 'runtest' script provided in the Automake distribution:
+
+ ./runtest t/nogzip.sh
+ ./runtest t/add-missing.tap
+
+ This will run the test using the correct shell, and should also work in
+ VPATH builds. Note that, to run the TAP tests this way, you'll need to
+ have the prove(1) utility available in $PATH.
+
+
+Supported shells
+----------------
+
+ By default, the tests are run by a proper shell detected at configure
+ time. Here is how you can run the tests with a different shell, say
+ '/bin/my-sh':
+
+ # Running through the makefile test driver.
+ make check AM_TEST_RUNNER_SHELL=/bin/my-sh (GNU make)
+ AM_TEST_RUNNER_SHELL=/bin/my-sh make -e check (non-GNU make)
+
+ # Run a test directly from the command line.
+ AM_TEST_RUNNER_SHELL=/bin/my-sh ./runtest t/foo.sh
+
+ The test scripts are written with portability in mind, and should run
+ with any decent POSIX shell. However, it is worth nothing that older
+ versions of Zsh (pre-4.3) exhibited several bugs and incompatibilities
+ with our uses, and are thus not supported for running Automake's test
+ scripts.
+
+
+Reporting failures
+------------------
+
+ Send verbose output, i.e., the contents of test-suite.log, of failing
+ tests to <bug-automake@gnu.org>, along with the usual version numbers
+ (which Automake, which Autoconf, which operating system, which make
+ version, which shell, etc.)
+
+
+
+Writing test cases
+==================
+
+* If you plan to fix a bug, write the test case first. This way you'll
+ make sure the test catches the bug, and that it succeeds once you have
+ fixed the bug.
+
+* Add a copyright/license paragraph.
+
+* Explain what the test does, i.e., which features it checks, which
+ invariants it verifies, or what bugs/issues it guard against.
+
+* Cite the PR number (if any), and the original reporter (if any), so
+ we can find or ask for information if needed.
+
+* If a test checks examples or idioms given in the documentation, make
+ sure the documentation reference them appropriately in comments, as
+ with:
+
+ @c Keep in sync with autodist-config-headers.sh
+ @example
+ ...
+ @end example
+
+* Use "required=..." for required tools. Do not explicitly require
+ tools which can be taken for granted because they're listed in the
+ GNU Coding Standards (for example, 'gzip').
+
+* Include 'test-init.sh' in every test script (see existing tests for
+ examples of how to do this).
+
+* Use the 'skip_' function to skip tests, with a meaningful message if
+ possible. Where convenient, use the 'warn_' function to print generic
+ warnings, the 'fail_' function for test failures, and the 'fatal_'
+ function for hard errors. In case a hard error is due to a failed
+ set-up of a test scenario, you can use the 'framework_fail_' function
+ instead.
+
+* For those tests checking the Automake-provided test harnesses that
+ are expected to work also when the 'serial-tests' Automake option
+ is used (thus causing the serial testsuite harness to be used in the
+ generated Makefile), place a line containing "try-with-serial-tests"
+ somewhere in the file (usually in a comment).
+ That will ensure that the 'gen-testsuite-part' script generates a
+ sibling of that test which uses the serial harness instead of the
+ parallel one. For those tests that are *not* meant to work with the
+ parallel testsuite harness at all (these should be very very few),
+ set the shell variable 'am_serial_tests' to "yes" before including
+ test-init.sh.
+
+* Some tests in the Automake testsuite are auto-generated; those tests
+ might have custom extensions, but their basename (that is, with such
+ extension stripped) is expected to end with "-w" string, optionally
+ followed by decimal digits. For example, the name of a valid
+ auto-generated test can be 'color-w.sh' or 'tap-signal-w09.tap'.
+ Please don't name hand-written tests in a way that could cause them
+ to be confused with auto-generated tests; for example, 'u-v-w.sh'
+ or 'option-w0.tap' are *not* valid name for hand-written tests.
+
+* test-init.sh brings in some commonly required files, and sets a skeleton
+ configure.ac. If possible, append to this file. In some cases you'll
+ have to overwrite it, but this should be the exception. Note that
+ configure.ac registers Makefile.in but do not output anything by
+ default. If you need ./configure to create Makefile, append AC_OUTPUT
+ to configure.ac. In case you don't want your test directory to be
+ pre-populate by test-init.sh (this should be a rare occurrence), set
+ the 'am_create_testdir' shell variable to "empty" before sourcing
+ test-init.sh.
+
+* By default, the testcases are run with the errexit shell flag on,
+ to make it easier to catch failures you might not have thought of.
+ If this is undesirable in some testcase, you can use "set +e" to
+ disable the errexit flag (but please do so only if you have a very
+ good reason).
+
+* End the test script with a ':' command. Otherwise, when somebody
+ changes the test by adding a failing command after the last command,
+ the test will spuriously fail because '$?' is nonzero at the end.
+ Note that this is relevant even if the errexit shell flag is on, in
+ case the test contains commands like "grep ... Makefile.in && exit 1"
+ (and there are indeed a lot of such tests).
+
+* Use $ACLOCAL, $AUTOMAKE, $AUTOCONF, $AUTOUPDATE, $AUTOHEADER,
+ $PERL, $MAKE, $EGREP, and $FGREP, instead of the corresponding
+ commands.
+
+* When you want to redirect the output from a make invocation, use the
+ 'run_make' function rather than calling $MAKE directly. Not only is
+ this more idiomatic, but it also avoid possible spurious racy failures
+ when the make invocations in the testsuite are run in parallel mode
+ (as with "make check AM_TESTSUITE_MAKE='make -j4"').
+
+* Do not override Makefile variables using make arguments, as in e.g.:
+
+ $MAKE prefix=/opt install # BAD
+
+ This is not portable for recursive targets (with non-GNU make,
+ targets that call a sub-make may not pass "prefix=/opt" along).
+ Instead, use the 'run_make' function, which automatically uses
+ the AM_MAKEFLAGS to propagate the variable definitions along to
+ sub-make:
+
+ run_make prefix=/opt install # GOOD
+
+* Use '$sleep' when you have to make sure that some file is newer
+ than another.
+
+* Use cat or grep or similar commands to display (part of) files that
+ may be interesting for debugging, so that when a user send a verbose
+ output we don't have to ask him for more details. Display stderr
+ output on the stderr file descriptor. If some redirected command is
+ likely to fail, display its output even in the failure case, before
+ exiting.
+
+* Use '$PATH_SEPARATOR', not hard-coded ':', as the separator of
+ PATH's entries.
+
+* It's more important to make sure that a feature works, than make
+ sure that Automake's output looks correct. It might look correct
+ and still fail to work. In other words, prefer running 'make' over
+ grepping Makefile.in (or do both).
+
+* If you run $ACLOCAL, $AUTOMAKE or $AUTOCONF several times in the
+ same test and change configure.ac by the meantime, do
+
+ rm -rf autom4te*.cache
+
+ before the following runs. On fast machines the new configure.ac
+ could otherwise have the same timestamp as the old autom4te.cache.
+
+* Use filenames with two consecutive spaces when testing that some
+ code preserves filenames with spaces. This will catch errors like
+ `echo $filename | ...`.
+
+* Make sure your test script can be used to faithfully check an
+ installed version of automake (as with "make installcheck"). For
+ example, if you need to copy or grep an automake-provided script,
+ do not assume that they can be found in the '$top_srcdir/lib'
+ directory, but use '$am_scriptdir' instead. The complete list of
+ such "$am_...dir" variables can be found in the 't/ax/test-defs.in'
+ file.
+
+* When writing input for lex, include the following in the definitions
+ section:
+
+ %{
+ #define YY_NO_UNISTD_H 1
+ %}
+
+ to accommodate non-ANSI systems, since GNU flex generates code that
+ includes unistd.h otherwise. Also add:
+
+ int isatty (int fd) { return 0; }
+
+ to the definitions section if the generated code is to be compiled
+ by a C++ compiler, for similar reasons (i.e., the isatty(3) function
+ from that same unistd.h header would be required otherwise).
+
+* Add any new test to handwritten_TESTS in 't/list-of-tests.mk', and
+ to XFAIL_TESTS in addition if needed (that is, if the test is expected
+ to fail).
+
+* In test scripts, prefer using POSIX constructs over their old
+ Bourne-only equivalents:
+
+ - use $(...), not `...`, for command substitution;
+ - use $((...)), not `expr ...`, for arithmetic processing;
+ - liberally use '!' to invert the exit status of a command, e.g.,
+ in idioms like "if ! CMD; then ...", instead of relying on clumsy
+ paraphrases like "if CMD; then :; else ...".
+ - prefer use of ${param%pattern} and ${param#pattern} parameter
+ expansions over processing by 'sed' or 'expr'.
+
+* Note however that, when writing Makefile recipes or shell code in a
+ configure.ac, you should still use `...` instead, because the Autoconf
+ generated configure scripts do not ensure they will find a truly POSIX
+ shell (even though they will prefer and use it *if* it's found).
+
+* Do not test an Automake error with "$AUTOMAKE && exit 1", or in three
+ years we'll discover that this test failed for some other bogus reason.
+ This happened many times. Better use something like
+
+ AUTOMAKE_fails
+ grep 'expected diagnostic' stderr
+
+ Note this doesn't prevent the test from failing for another reason,
+ but at least it makes sure the original error is still here.
diff --git a/t/ac-output-old.tap b/t/ac-output-old.tap
new file mode 100644
index 000000000..2022681b5
--- /dev/null
+++ b/t/ac-output-old.tap
@@ -0,0 +1,177 @@
+#!/bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for various older bugs related to quoting, escaping and
+# line breaking in the use of AC_OUTPUT. Synthesised by a bunch
+# of older tests (referenced below).
+
+. test-init.sh
+
+plan_ 22
+
+rm -f configure.ac depcomp # Not required.
+
+# -----------------------------------------------------------------------
+
+# Test for bug reported by François Pinard.
+# If \ is in AC_OUTPUT, automake barfs.
+# This was the old test 'acoutbs.test'.
+
+# Also test for bug reported by David A. Swierczek.
+# Another bug with \ in AC_OUTPUT (this time with whitespace).
+# This was the old test 'acoutbs2.test'.
+
+acoutbs_check ()
+{
+ dir=acoutbs$1
+ mkdir $dir
+ cd $dir
+ cat > configure.ac
+ touch Makefile.am zot.in
+ command_ok_ "aclocal groks '\\' in AC_OUTPUT ($dir)" $ACLOCAL
+ command_ok_ "automake groks '\\' in AC_OUTPUT ($dir)" $AUTOMAKE
+ command_ok_ "autoconf groks '\\' in AC_OUTPUT ($dir)" $AUTOCONF
+ command_ok_ "can ./configure in $dir" ./configure
+ command_ok_ "zot created in $dir" test -f zot
+ ls -a > lst || bailout_ "cannot get file listing in $dir"
+ command_ok_ "'\\' not leaked in filenames in $dir" not grep '\\' lst
+ cd ..
+}
+
+acoutbs_check 1 << 'END'
+AC_INIT([acoutbs1], [1.0])
+AM_INIT_AUTOMAKE
+AC_OUTPUT(Makefile \
+zot)
+END
+
+acoutbs_check 2 << 'END'
+AC_INIT([acoutbs2], [1.0])
+AM_INIT_AUTOMAKE
+AC_OUTPUT(\
+ Makefile \
+ zot
+)
+END
+
+# -----------------------------------------------------------------------
+
+# Test for bug reported by Jerome Santini.
+# If I put this line in my configure.ac:
+# AC_OUTPUT(Makefile src/Makefile tests/Makefile, echo timestamp > stamp-h)dnl
+# automake is not happy:
+# [ ... ]
+# This was the old test 'acoutnoq.test'.
+
+mkdir acoutnoq
+cd acoutnoq
+
+cat > configure.ac << 'END'
+AC_INIT([acoutnoq], [1.0])
+AM_INIT_AUTOMAKE
+AC_OUTPUT(Makefile, [true])
+END
+
+: > Makefile.am
+
+command_ok_ "aclocal and quoted AC_OUTPUT second argument" $ACLOCAL
+command_ok_ "automake and quoted AC_OUTPUT second argument" $AUTOMAKE
+
+cd ..
+
+# -----------------------------------------------------------------------
+
+# Test for bug when AC_OUTPUT has 2 args on the same line, eg:
+# AC_OUTPUT([Makefile automake tests/Makefile],[chmod +x automake])
+# This was the old test 'acoutpt.test'.
+
+mkdir acoutpt
+cd acoutpt
+
+cat > configure.ac << 'END'
+AC_INIT([acoutpt], [1.0])
+AM_INIT_AUTOMAKE
+AC_OUTPUT([Makefile], [true])
+END
+
+: > Makefile.am
+
+command_ok_ "aclocal and two AC_OUTPUT arguments on same line" $ACLOCAL
+command_ok_ "automake and two AC_OUTPUT arguments on same line" $AUTOMAKE
+
+cd ..
+
+# -----------------------------------------------------------------------
+
+# Test for bug reported by Eric Magnien.
+# This was the old test 'acoutpt2.test'.
+
+mkdir acoutpt2
+cd acoutpt2
+
+# Name of the current "subtest".
+cur=acoutput2
+
+cat > configure.ac <<END
+AC_INIT([$cur], [1.0])
+AM_INIT_AUTOMAKE
+AC_OUTPUT([subdir/Makefile subdir/foo Makefile foo], [true])
+END
+
+mkdir subdir
+
+: > Makefile.am
+: > subdir/Makefile.am
+: > foo.in
+: > subdir/foo.in
+
+command_ok_ "aclocal and AC_OUTPUT ($cur)" $ACLOCAL
+command_ok_ "automake and AC_OUTPUT ($cur)" $AUTOMAKE
+command_ok_ "foo.in mentioned two times in Makefile.in ($cur)" \
+ test $($FGREP -c 'foo.in' Makefile.in) -eq 2
+
+# This ought to work as well.
+command_ok_ "'automake -a -f' and AC_OUTPUT ($cur)" \
+ $AUTOMAKE --add-missing --force-missing
+
+cd ..
+
+# -----------------------------------------------------------------------
+
+# Test for bug reported by François Pinard.
+# This was the old test 'acoutqnl.test'.
+
+mkdir acoutqnl
+cd acoutqnl
+
+cat > configure.ac << 'END'
+AC_INIT([acoutqnl], [1.0])
+AM_INIT_AUTOMAKE
+AC_OUTPUT([Makefile],
+[echo zardoz has spoken])
+END
+
+: > Makefile.am
+
+command_ok_ "aclocal and two AC_OUTPUT arguments on two lines" $ACLOCAL
+command_ok_ "automake and two AC_OUTPUT arguments on two lines" $AUTOMAKE
+
+cd ..
+
+# -----------------------------------------------------------------------
+
+# And we're done.
+exit 0
diff --git a/t/aclocal-I-and-install.sh b/t/aclocal-I-and-install.sh
new file mode 100644
index 000000000..33f7bb15b
--- /dev/null
+++ b/t/aclocal-I-and-install.sh
@@ -0,0 +1,100 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure aclocal define macros in the same order as -I's.
+# This is the similar to aclocal-I-order-1.sh, with the macro calls
+# reversed (it did make a difference).
+#
+# Also check for --install.
+
+# TODO: write a sister test that doesn't use a 'dirlist' file, but
+# TODO: puts third-party macros directly into 'acdir'.
+
+am_create_testdir=empty
+. test-init.sh
+
+cat > configure.ac << 'END'
+AC_INIT
+MACRO2
+MACRO1
+MACRO3
+END
+
+ACLOCAL="$ACLOCAL --system-acdir acdir"
+
+mkdir m4_1 m4_2 acdir acdir2
+echo ./acdir2 > acdir/dirlist
+
+cat >m4_1/somedefs.m4 <<EOF
+AC_DEFUN([MACRO1], [:macro11:])
+AC_DEFUN([MACRO2], [:macro21:])
+EOF
+
+cat >m4_2/somedefs.m4 <<EOF
+AC_DEFUN([MACRO1], [:macro12:])
+EOF
+
+cat >acdir2/macro.m4 <<EOF
+AC_DEFUN([MACRO3], [:macro33:])
+EOF
+
+$ACLOCAL -I m4_1 -I m4_2
+$AUTOCONF
+$FGREP ':macro11:' configure
+$FGREP ':macro21:' configure
+$FGREP ':macro33:' configure
+grep MACRO3 aclocal.m4
+test ! -e m4_1/macro.m4
+test ! -e m4_2/macro.m4
+
+$sleep
+
+$ACLOCAL -I m4_2 -I m4_1
+$AUTOCONF
+$FGREP ':macro12:' configure
+$FGREP ':macro21:' configure
+$FGREP ':macro33:' configure
+grep MACRO3 aclocal.m4
+test ! -e m4_1/macro.m4
+test ! -e m4_2/macro.m4
+
+$sleep
+
+$ACLOCAL -I m4_1 -I m4_2 --install
+$AUTOCONF
+$FGREP ':macro11:' configure
+$FGREP ':macro21:' configure
+$FGREP ':macro33:' configure
+grep MACRO3 aclocal.m4 && exit 1
+test -f m4_1/macro.m4
+test ! -e m4_2/macro.m4
+cp aclocal.m4 copy.m4
+
+$sleep
+
+echo '#GREPME' >>acdir2/macro.m4
+$ACLOCAL -I m4_1 -I m4_2 --install
+$AUTOCONF
+$FGREP ':macro11:' configure
+$FGREP ':macro21:' configure
+$FGREP ':macro33:' configure
+grep MACRO3 aclocal.m4 && exit 1
+grep GREPME m4_1/macro.m4 && exit 1
+test -f m4_1/macro.m4
+test ! -e m4_2/macro.m4
+diff aclocal.m4 copy.m4
+
+:
diff --git a/t/aclocal-I-order-1.sh b/t/aclocal-I-order-1.sh
new file mode 100644
index 000000000..c844079c4
--- /dev/null
+++ b/t/aclocal-I-order-1.sh
@@ -0,0 +1,49 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure aclocal define macros in the same order as -I's.
+
+am_create_testdir=empty
+. test-init.sh
+
+cat > configure.ac << 'END'
+AC_INIT
+MACRO1
+MACRO2
+END
+
+mkdir m4_1 m4_2
+
+cat >m4_1/somedefs.m4 <<EOF
+AC_DEFUN([MACRO1], [:macro11:])
+AC_DEFUN([MACRO2], [:macro21:])
+EOF
+
+cat >m4_2/somedefs.m4 <<EOF
+AC_DEFUN([MACRO1], [:macro12:])
+EOF
+
+$ACLOCAL -I m4_1 -I m4_2
+$AUTOCONF
+$FGREP ':macro11:' configure
+$FGREP ':macro21:' configure
+
+$ACLOCAL --force -I m4_2 -I m4_1
+$AUTOCONF --force
+$FGREP ':macro12:' configure
+$FGREP ':macro21:' configure
+
+:
diff --git a/t/aclocal-I-order-2.sh b/t/aclocal-I-order-2.sh
new file mode 100644
index 000000000..096b4fdb6
--- /dev/null
+++ b/t/aclocal-I-order-2.sh
@@ -0,0 +1,46 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that when two files define the same macro in the same
+# directory, the macro from the lexically greatest file is used.
+# See also sister test 'aclocal-I-order-3.sh'.
+
+am_create_testdir=empty
+. test-init.sh
+
+cat > configure.ac << 'END'
+AC_INIT
+MACRO2
+MACRO1
+END
+
+mkdir m4
+
+cat >m4/version1.m4 <<EOF
+AC_DEFUN([MACRO1], [:macro11:])
+AC_DEFUN([MACRO2], [:macro21:])
+EOF
+
+cat >m4/version2.m4 <<EOF
+AC_DEFUN([MACRO1], [:macro12:])
+EOF
+
+$ACLOCAL -I m4
+$AUTOCONF
+$FGREP ':macro12:' configure
+$FGREP ':macro21:' configure
+
+:
diff --git a/t/aclocal-I-order-3.sh b/t/aclocal-I-order-3.sh
new file mode 100644
index 000000000..c0a5f6d7d
--- /dev/null
+++ b/t/aclocal-I-order-3.sh
@@ -0,0 +1,46 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that when two files define the same macro in the same
+# directory, the macro from the lexically greatest file is used.
+# Same as aclocal-I-order-2.sh, but without calling MACRO2.
+
+am_create_testdir=empty
+. test-init.sh
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+MACRO1
+END
+
+mkdir m4
+
+cat >m4/version1.m4 <<EOF
+AC_DEFUN([MACRO1], [:macro11:])
+AC_DEFUN([MACRO2], [:macro21:])
+EOF
+
+cat >m4/version2.m4 <<EOF
+AC_DEFUN([MACRO1], [:macro12:])
+EOF
+
+$ACLOCAL --verbose -I m4
+$AUTOCONF
+$FGREP ':macro11:' configure && exit 1
+$FGREP ':macro21:' configure && exit 1
+$FGREP ':macro12:' configure
+
+:
diff --git a/t/aclocal-acdir.sh b/t/aclocal-acdir.sh
new file mode 100644
index 000000000..07c624430
--- /dev/null
+++ b/t/aclocal-acdir.sh
@@ -0,0 +1,78 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test aclocal's '--automake-acdir' and '--system-acdir' options. Also
+# check that stuff in the automake acdir takes precedence over stuff in
+# the system acdir.
+
+. test-init.sh
+
+mkdir am sys
+# FIXME: remove in Automake 2.0
+mkdir am/internal
+: > am/internal/ac-config-macro-dirs.m4
+
+cat >> configure.ac <<'END'
+MY_MACRO
+END
+
+cat > am/foo.m4 <<'END'
+AC_DEFUN([AM_INIT_AUTOMAKE], [fake--init--automake])
+END
+
+cat > sys/foo.m4 <<'END'
+AC_DEFUN([MY_MACRO], [my--macro])
+END
+
+$ACLOCAL --automake-acdir am
+$AUTOCONF --force
+$FGREP 'fake--init--automake' configure
+$FGREP 'MY_MACRO' configure
+
+rm -rf autom4te*.cache
+
+$ACLOCAL --system-acdir sys
+$AUTOCONF --force
+$FGREP 'am__api_version' configure
+$FGREP 'my--macro' configure
+
+rm -rf autom4te*.cache
+
+$ACLOCAL --automake-acdir am --system-acdir sys
+$AUTOCONF --force
+$FGREP 'fake--init--automake' configure
+$FGREP 'my--macro' configure
+
+rm -rf autom4te*.cache
+
+$ACLOCAL --system-acdir sys --automake-acdir am
+$AUTOCONF --force
+$FGREP 'fake--init--automake' configure
+$FGREP 'my--macro' configure
+
+rm -rf autom4te*.cache
+
+# Stuff in automake acdir takes precedence over stuff in system acdir.
+cat > am/bar.m4 <<'END'
+AC_DEFUN([MY_MACRO], [am--macro])
+END
+$ACLOCAL --automake-acdir am --system-acdir sys
+$AUTOCONF --force
+$FGREP 'fake--init--automake' configure
+$FGREP 'am--macro' configure
+$FGREP 'my--macro' configure && exit 1 # Just to be sure.
+
+:
diff --git a/t/aclocal-amflags.sh b/t/aclocal-amflags.sh
new file mode 100644
index 000000000..ca89b21a6
--- /dev/null
+++ b/t/aclocal-amflags.sh
@@ -0,0 +1,68 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that the obsolescent idiom of setting $(ACLOCAL_AMFLAGS) in
+# Makefile.am still works. Remove this test once support for this
+# obsolescent idiom is removed.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+MACRO_FOO || AS_EXIT([1])
+AC_OUTPUT
+END
+
+mkdir m4_1 m4_2
+cat > m4_1/foo.m4 <<'END'
+AC_DEFUN([MACRO_FOO], [: > foo])
+END
+cat > m4_2/bar.m4 <<'END'
+AC_DEFUN([MACRO_BAR], [: > bar])
+END
+
+cat > Makefile.am <<'END'
+ACLOCAL_AMFLAGS = -I m4_2 --verbose
+check-local:
+ test ! -r foo
+ test -f bar
+DISTCLEANFILES = bar
+END
+
+$ACLOCAL -I m4_1 >output 2>&1 || { cat output; exit 1; }
+cat output
+grep 'found macro' output && exit 1 # Sanity check.
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+test -f foo
+rm -f foo
+
+# ACLOCAL_AMFLAGS is used in rebuild rules, so trigger them.
+$sleep
+
+sed 's/MACRO_FOO/MACRO_BAR/' configure.ac > t
+mv -f t configure.ac
+
+run_make -M Makefile
+grep "^aclocal.*:.*found macro.*MACRO_BAR.*m4_2/bar\.m4" output
+grep "macro.*MACRO_FOO" output && exit 1
+test ! -r foo
+test -f bar
+
+$MAKE distcheck
+
+:
diff --git a/t/aclocal-autoconf-version-check.sh b/t/aclocal-autoconf-version-check.sh
new file mode 100644
index 000000000..00f68b02b
--- /dev/null
+++ b/t/aclocal-autoconf-version-check.sh
@@ -0,0 +1,50 @@
+#! /bin/sh
+# Copyright (C) 2008-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure autoconf version checks in aclocal.m4 are robust.
+
+am_create_testdirs=empty
+. test-init.sh
+
+cat > configure.ac <<END
+m4_define([AC_AUTOCONF_VERSION], [9999a])
+dnl!! m4_define([a], [oops])
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+END
+
+: > Makefile.am
+
+$ACLOCAL
+$AUTOCONF 2>stderr || { cat stderr >&2; exit 1; }
+cat stderr >&2
+grep 'You have another version of autoconf' stderr
+grep 'aclocal.m4:.*this file was generated for' stderr
+$AUTOMAKE -a
+./configure
+$MAKE
+
+sed 's/^dnl!! //' < configure.ac > configure.tmp
+cmp configure.ac configure.tmp && fatal_ 'failed to edit configure.ac'
+mv -f configure.tmp configure.ac
+
+run_make -E
+grep 'You have another version of autoconf' stderr
+grep 'aclocal.m4:.*this file was generated for autoconf 9999a' stderr
+
+:
diff --git a/t/aclocal-comments-respected.sh b/t/aclocal-comments-respected.sh
new file mode 100644
index 000000000..364bb82ca
--- /dev/null
+++ b/t/aclocal-comments-respected.sh
@@ -0,0 +1,31 @@
+#! /bin/sh
+# Copyright (C) 2006-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure aclocal ignores include() commands in comments.
+# Report from Mike Frysinger.
+# Also make sure aclocal does not think 'include' is
+# an Autoconf macro.
+
+am_create_testdir=empty
+. test-init.sh
+
+cat >>configure.ac <<EOF
+dnl m4_include(__some_really_bogus_nonexistent_file__.m4)
+ # m4_include(__some_really_bogus_nonexistent_file__.m4)
+## m4_include(__some_really_bogus_nonexistent_file__.m4)
+echo 'include(foobar)' is OK
+EOF
+$ACLOCAL
diff --git a/t/aclocal-deleted-header-aclocal-amflags.sh b/t/aclocal-deleted-header-aclocal-amflags.sh
new file mode 100644
index 000000000..098c9558b
--- /dev/null
+++ b/t/aclocal-deleted-header-aclocal-amflags.sh
@@ -0,0 +1,60 @@
+#! /bin/sh
+# Copyright (C) 2007-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure the "deleted header file" issue is fixed wrt. aclocal.m4
+# dependencies.
+# NOTE: this test works by using the obsolete 'ACLOCAL_AMFLAGS' make
+# variable; see sister test 'aclocal-deleted-header.sh' for a modern
+# equivalent.
+
+. test-init.sh
+
+cat >>configure.ac <<EOF
+FOO
+AC_OUTPUT
+EOF
+
+cat >foo.m4 <<EOF
+AC_DEFUN([FOO], [AC_SUBST([GREPFOO])])
+EOF
+
+cat >bar.m4 <<EOF
+AC_DEFUN([BAR], [AC_SUBST([GREPBAR])])
+EOF
+
+cat >Makefile.am <<EOF
+ACLOCAL_AMFLAGS = -I .
+EOF
+
+$ACLOCAL -I .
+$AUTOMAKE
+$AUTOCONF
+
+./configure
+
+$MAKE
+grep GREPFOO Makefile
+grep GREPBAR Makefile && exit 1
+
+sed 's/FOO/BAR/' < configure.ac > t
+mv -f t configure.ac
+rm -f foo.m4
+
+$MAKE
+grep GREPFOO Makefile && exit 1
+grep GREPBAR Makefile
+
+:
diff --git a/t/aclocal-deleted-header.sh b/t/aclocal-deleted-header.sh
new file mode 100644
index 000000000..c33f461b5
--- /dev/null
+++ b/t/aclocal-deleted-header.sh
@@ -0,0 +1,57 @@
+#! /bin/sh
+# Copyright (C) 2007-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure the "deleted header file" issue is fixed w.r.t. aclocal.m4
+# dependencies. See also related the tests 'remake-deleted-m4-file.sh'
+# and 'remake-renamed-m4-macro-and-file.sh'.
+
+. test-init.sh
+
+cat >>configure.ac <<EOF
+AC_CONFIG_MACRO_DIR([.])
+FOO
+AC_OUTPUT
+EOF
+
+cat >foo.m4 <<EOF
+AC_DEFUN([FOO], [AC_SUBST([GREPFOO])])
+EOF
+
+cat >bar.m4 <<EOF
+AC_DEFUN([BAR], [AC_SUBST([GREPBAR])])
+EOF
+
+: >Makefile.am
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+./configure
+
+$MAKE
+grep GREPFOO Makefile
+grep GREPBAR Makefile && exit 1
+
+sed 's/FOO/BAR/' < configure.ac > t
+mv -f t configure.ac
+rm -f foo.m4
+
+$MAKE
+grep GREPFOO Makefile && exit 1
+grep GREPBAR Makefile
+
+:
diff --git a/t/aclocal-deps-subdir.sh b/t/aclocal-deps-subdir.sh
new file mode 100644
index 000000000..77ec5a460
--- /dev/null
+++ b/t/aclocal-deps-subdir.sh
@@ -0,0 +1,69 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure that aclocal.m4's dependencies are honored in
+# sub-directories. See also related tests 'remake-subdir*.sh'.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_MACRO_DIR([m4])
+FOO_TEST([GREPME])
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+SUBDIRS = sub
+END
+
+mkdir sub
+: > sub/Makefile.am
+
+mkdir m4
+echo 'AC_DEFUN([FOO_TEST], [echo $@])' > m4/moredefs.m4
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --copy --add-missing
+./configure
+$MAKE
+
+# Update an aclocal.m4 dependency, then make sure all Makefiles are
+# updated, even from a sub-directory. Check that AU_ALIAS is
+# recognized. Change the definition of FOO_TEST to check that its new
+# definition is used.
+$sleep # Modified configure dependencies must be newer than config.status.
+echo 'AU_ALIAS([FOO_TEST], [AC_SUBST])' > m4/moredefs.m4
+cd sub
+$MAKE
+cd ..
+grep GREPME Makefile
+grep GREPME sub/Makefile
+
+# Make sure configure dependencies are distributed.
+$MAKE distdir
+test -f $me-1.0/m4/moredefs.m4
+
+# Change the definition of FOO_TEST to check that its new definition is
+# used. Check that AC_DEFUN_ONCE is caught.
+$sleep # Modified configure dependencies must be newer than config.status.
+echo 'AC_DEFUN_ONCE([FOO_TEST], [AC_SUBST(__$1__)])' > m4/moredefs.m4
+$MAKE
+grep 'm4/moredefs\.m4' aclocal.m4
+grep '__GREPME__' configure
+
+:
diff --git a/t/aclocal-deps.sh b/t/aclocal-deps.sh
new file mode 100644
index 000000000..18adc213c
--- /dev/null
+++ b/t/aclocal-deps.sh
@@ -0,0 +1,75 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure dependencies on aclocal.m4 are set correctly.
+# Report from Jim Meyering.
+
+required=cc
+. test-init.sh
+
+cat >>configure.ac <<EOF
+AC_CONFIG_MACRO_DIR([m4])
+AC_PROG_RANLIB
+AM_PROG_AR
+AC_PROG_CC
+MY_MACRO
+AC_CONFIG_FILES([lib/Makefile])
+AC_OUTPUT
+EOF
+
+mkdir m4
+cat >m4/mymacro.m4 <<EOF
+AC_DEFUN([MY_MACRO], [])
+EOF
+
+mkdir lib
+: > lib/foo.c
+: > lib/bar.c
+cat >lib/Makefile.am <<'EOF'
+noinst_LIBRARIES = liberi.a
+liberi_a_SOURCES = bar.c
+liberi_a_LIBADD = $(LIBOBJS)
+EOF
+
+cat >Makefile.am <<'EOF'
+SUBDIRS = lib
+EXTRA_DIST = m4/mymacro.m4
+check-foo: distdir
+ test -f $(distdir)/lib/foo.c
+ test -f $(distdir)/lib/bar.c
+
+check-not-foo: distdir
+ test ! -f $(distdir)/lib/foo.c
+ test -f $(distdir)/lib/bar.c
+EOF
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+./configure
+$MAKE check-not-foo
+
+# Update one of the macros. This should cause ./configure, Makefile.in,
+# Makefile, lib/Makefile.in, and lib/Makefile to be updated.
+
+cat >m4/mymacro.m4 <<'EOF'
+AC_DEFUN([MY_MACRO], [AC_LIBOBJ([foo])])
+EOF
+
+using_gmake || $MAKE
+$MAKE check-foo
+
+:
diff --git a/t/aclocal-dirlist-abspath.sh b/t/aclocal-dirlist-abspath.sh
new file mode 100644
index 000000000..ec65299c5
--- /dev/null
+++ b/t/aclocal-dirlist-abspath.sh
@@ -0,0 +1,42 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check use of absolute paths in dirlist.
+
+am_create_testdir=empty
+. test-init.sh
+
+mkdir acdir-more sub sub/acdir
+echo "$(pwd)/acdir-more" > sub/acdir/dirlist
+
+echo 'AC_DEFUN([AM_FOO], [foo-foo--foo])' > acdir-more/foo.m4
+
+cd sub
+
+cat > configure.ac <<EOF
+AC_INIT([$me], [1.0])
+AM_FOO
+EOF
+
+$ACLOCAL --system-acdir acdir
+$AUTOCONF
+
+# Only -I directories are subject to file inclusion.
+grep m4_include aclocal.m4 && exit 1
+
+grep 'foo-foo--foo' configure
+
+:
diff --git a/t/aclocal-dirlist-globbing.sh b/t/aclocal-dirlist-globbing.sh
new file mode 100644
index 000000000..9479ea55f
--- /dev/null
+++ b/t/aclocal-dirlist-globbing.sh
@@ -0,0 +1,55 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check dirlist globbing support.
+
+. test-init.sh
+
+cat > configure.ac <<EOF
+AC_INIT([$me], [1.0])
+AM_INIT_GUILE_MODULE
+AM_FOO_BAR
+EOF
+
+mkdir dirlist21-test dirlist22-test
+
+cat >dirlist21-test/dirlist21-check.m4 <<'END'
+AC_DEFUN([AM_INIT_GUILE_MODULE],[. $srcdir/../GUILE-VERSION])
+END
+
+cat >dirlist22-test/dirlist22-check.m4 <<'END'
+AC_DEFUN([AM_FOO_BAR],[
+: foo bar baz
+])
+END
+
+mkdir my-acdir
+cat > my-acdir/dirlist <<'END'
+dirlist2*-test
+END
+
+$ACLOCAL --system-acdir my-acdir
+$AUTOCONF
+
+# There should be no m4_include in aclocal.m4, even though m4/dirlist
+# contains './dirlist-test' as a relative directory. Only -I directories
+# are subject to file inclusion.
+grep m4_include aclocal.m4 && exit 1
+
+grep 'GUILE-VERSION' configure
+grep 'foo bar baz' configure
+
+:
diff --git a/t/aclocal-dirlist.sh b/t/aclocal-dirlist.sh
new file mode 100644
index 000000000..7cea8f9fa
--- /dev/null
+++ b/t/aclocal-dirlist.sh
@@ -0,0 +1,56 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check dirlist support.
+
+. test-init.sh
+
+cat > configure.ac <<EOF
+AC_INIT([$me], [1.0])
+AM_INIT_GUILE_MODULE
+EOF
+
+mkdir acdir dirlist-test
+echo ./dirlist-test > acdir/dirlist
+
+cat >dirlist-test/dirlist-check.m4 <<'END'
+AC_DEFUN([AM_INIT_GUILE_MODULE],[
+. $srcdir/../GUILE-VERSION
+AM_INIT_AUTOMAKE(foreign)
+AC_CONFIG_AUX_DIR(..)
+module=[$1]
+AC_SUBST(module)])
+END
+
+cat >dirlist-test/init.m4 <<EOF
+AC_DEFUN([AM_INIT_AUTOMAKE], [I should not be included])
+EOF
+
+$ACLOCAL --system-acdir acdir
+$AUTOCONF
+
+# There should be no m4_include in aclocal.m4, even though m4/dirlist
+# contains './dirlist-test' as a relative directory. Only -I directories
+# are subject to file inclusion.
+grep m4_include aclocal.m4 && exit 1
+
+grep 'GUILE-VERSION' configure
+
+# This bug can occur only when we do a VPATH build of Automake
+# but it's OK because VPATH builds are done by 'make distcheck'.
+grep 'I should not be included' configure && exit 1
+
+:
diff --git a/t/aclocal-install-absdir.sh b/t/aclocal-install-absdir.sh
new file mode 100644
index 000000000..c71935f41
--- /dev/null
+++ b/t/aclocal-install-absdir.sh
@@ -0,0 +1,33 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure "aclocal --install" install files also in directories
+# passed to '-I' as absolute paths. Now that we support the
+# ACLOCAL_PATH variable, it is clear that this is the right thing
+# to do. See also automake bug#8407.
+
+. test-init.sh
+
+mkdir loc sys
+
+echo 'AM_DUMMY_MACRO' >> configure.ac
+echo 'AC_DEFUN([AM_DUMMY_MACRO], [:])' >> sys/foo.m4
+
+cwd=$(pwd) || fatal_ "cannot get current working directory"
+env ACLOCAL_PATH="$cwd/sys" $ACLOCAL --verbose --install -I "$cwd/loc"
+diff sys/foo.m4 loc/foo.m4
+
+:
diff --git a/t/aclocal-install-fail.sh b/t/aclocal-install-fail.sh
new file mode 100644
index 000000000..ac6810681
--- /dev/null
+++ b/t/aclocal-install-fail.sh
@@ -0,0 +1,63 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that "aclocal --install" fails when it should.
+# FIXME: this is a good candidate for a conversion to TAP.
+
+am_create_testdir=empty
+required=ro-dir
+. test-init.sh
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+MY_MACRO
+END
+
+mkdir sys-acdir
+cat > sys-acdir/my-defs.m4 <<END
+AC_DEFUN([MY_MACRO], [:])
+END
+
+ACLOCAL="$ACLOCAL -Wnone --system-acdir=sys-acdir"
+
+: > a-regular-file
+mkdir unwritable-dir
+chmod a-w unwritable-dir
+
+$ACLOCAL -I a-regular-file --install 2>stderr \
+ && { cat stderr >&2; exit 1; }
+cat stderr >&2
+$EGREP '(mkdir:|directory ).*a-regular-file' stderr
+test ! -e aclocal.m4
+
+$ACLOCAL --install -I unwritable-dir/sub 2>stderr \
+ && { cat stderr >&2; exit 1; }
+cat stderr >&2
+$EGREP '(mkdir:|directory ).*unwritable-dir/sub' stderr
+test ! -e aclocal.m4
+
+$ACLOCAL -I unwritable-dir --install 2>stderr \
+ && { cat stderr >&2; exit 1; }
+cat stderr >&2
+$EGREP '(cp:|copy ).*unwritable-dir' stderr
+test ! -e aclocal.m4
+
+# Sanity check.
+mkdir m4
+$ACLOCAL -I m4 --install && test -f aclocal.m4 \
+ || fatal_ "aclocal failed also when expected to succeed"
+
+:
diff --git a/t/aclocal-install-mkdir.sh b/t/aclocal-install-mkdir.sh
new file mode 100644
index 000000000..24f1da71c
--- /dev/null
+++ b/t/aclocal-install-mkdir.sh
@@ -0,0 +1,70 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that "aclocal --install" creates the local m4 directory if
+# necessary.
+# FIXME: this is a good candidate for a conversion to TAP.
+
+am_create_testdir=empty
+. test-init.sh
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+MY_MACRO
+END
+
+mkdir sys-acdir
+cat > sys-acdir/my-defs.m4 <<END
+AC_DEFUN([MY_MACRO], [:])
+END
+
+ACLOCAL="$ACLOCAL --system-acdir=sys-acdir"
+
+$ACLOCAL -I foo --install
+test -f foo/my-defs.m4
+
+$ACLOCAL --install -I "$(pwd)/bar"
+test -f bar/my-defs.m4
+
+$ACLOCAL --install -I baz/sub/sub2
+test -f baz/sub/sub2/my-defs.m4
+
+# What should happen:
+# * zardoz1 should be created, and required m4 files copied into there.
+# * zardoz2 shouldn't be preferred to quux, even if the former exists
+# while the latter does not.
+mkdir zardoz2
+$ACLOCAL --install -I zardoz1 -I zardoz2
+test -d zardoz1
+grep MY_MACRO zardoz1/my-defs.m4
+ls zardoz2 | grep . && exit 1
+
+# Directories in ACLOCAL_PATH should never be created if they don't
+# exist.
+ACLOCAL_PATH="$(pwd)/none:$(pwd)/none2" $ACLOCAL --install && exit 1
+test ! -e none
+test ! -e none2
+ACLOCAL_PATH="$(pwd)/none:$(pwd)/none2" $ACLOCAL --install -I x
+test -f x/my-defs.m4
+test ! -e none
+test ! -e none2
+
+# It's better if aclocal doesn't create the first include dir on failure.
+$ACLOCAL --install -I none -I none2 && exit 1
+test ! -e none
+test ! -e none2
+
+:
diff --git a/t/aclocal-m4-include-are-scanned-aclocal-amflags.sh b/t/aclocal-m4-include-are-scanned-aclocal-amflags.sh
new file mode 100644
index 000000000..333d5d1ce
--- /dev/null
+++ b/t/aclocal-m4-include-are-scanned-aclocal-amflags.sh
@@ -0,0 +1,108 @@
+#! /bin/sh
+# Copyright (C) 2004-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure m4_included files are also scanned for definitions.
+# Report from Phil Edwards.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_PROG_LIBTOOL
+AC_OUTPUT
+END
+
+echo 'm4_include([a.m4])' > acinclude.m4
+echo 'm4_include([b.m4])' > a.m4
+
+cat >b.m4 <<EOF
+m4_include([c.m4])
+AC_DEFUN([AM_PROG_LIBTOOL],
+[AC_REQUIRE([SOMETHING])dnl
+AC_REQUIRE([SOMETHING_ELSE])dnl
+])
+
+AC_DEFUN([SOMETHING])
+EOF
+
+echo 'm4_include([d.m4])' > c.m4
+echo 'AC_DEFUN([SOMETHING_ELSE])' >d.m4
+
+mkdir defs
+echo 'AC_DEFUN([SOMETHING_ELSE])' >defs/e.m4
+echo 'AC_DEFUN([ANOTHER_MACRO])' >defs/f.m4
+
+cat >>Makefile.am<<\EOF
+ACLOCAL_AMFLAGS = -I defs
+testdist1: distdir
+ test -f $(distdir)/acinclude.m4
+ test -f $(distdir)/a.m4
+ test -f $(distdir)/b.m4
+ test -f $(distdir)/c.m4
+ test -f $(distdir)/d.m4
+ test ! -d $(distdir)/defs
+testdist2: distdir
+ test -f $(distdir)/acinclude.m4
+ test -f $(distdir)/a.m4
+ test -f $(distdir)/b.m4
+ test -f $(distdir)/c.m4
+ test -f $(distdir)/d.m4
+ test ! -f $(distdir)/defs/e.m4
+ test -f $(distdir)/defs/f.m4
+EOF
+
+$ACLOCAL -I defs
+
+$FGREP acinclude.m4 aclocal.m4
+# None of the following macro should be included. acinclude.m4
+# includes the first four, and the last two are not needed at all.
+$FGREP a.m4 aclocal.m4 && exit 1
+$FGREP b.m4 aclocal.m4 && exit 1
+$FGREP c.m4 aclocal.m4 && exit 1
+$FGREP d.m4 aclocal.m4 && exit 1
+$FGREP defs/e.m4 aclocal.m4 && exit 1
+$FGREP defs/f.m4 aclocal.m4 && exit 1
+
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+$MAKE testdist1
+
+cp aclocal.m4 aclocal.old
+$sleep
+echo 'AC_DEFUN([FOO], [ANOTHER_MACRO])' >> c.m4
+$MAKE
+# Because c.m4 has changed, aclocal.m4 must have been rebuilt.
+is_newest aclocal.m4 aclocal.old
+# However, since FOO is not used, f.m4 should not be included
+# and the contents of aclocal.m4 should remain the same
+diff aclocal.m4 aclocal.old
+
+# If FOO where to be used, that would be another story, of course:
+# f.m4 should be included
+$sleep
+echo FOO >> configure.ac
+$MAKE
+$FGREP defs/f.m4 aclocal.m4
+$MAKE testdist2
+
+# Make sure aclocal diagnose missing included files with correct 'file:line:'.
+rm -f b.m4
+$ACLOCAL 2>stderr && { cat stderr >&2; exit 1; }
+cat stderr >&2
+grep 'a\.m4:1: .*b\.m4.*does not exist' stderr
+
+:
diff --git a/t/aclocal-m4-include-are-scanned.sh b/t/aclocal-m4-include-are-scanned.sh
new file mode 100644
index 000000000..0d340f6b8
--- /dev/null
+++ b/t/aclocal-m4-include-are-scanned.sh
@@ -0,0 +1,108 @@
+#! /bin/sh
+# Copyright (C) 2004-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure m4_included files are also scanned for definitions.
+# Report from Phil Edwards.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_MACRO_DIR([defs])
+AM_PROG_LIBTOOL
+AC_OUTPUT
+END
+
+echo 'm4_include([a.m4])' > acinclude.m4
+echo 'm4_include([b.m4])' > a.m4
+
+cat >b.m4 <<EOF
+m4_include([c.m4])
+AC_DEFUN([AM_PROG_LIBTOOL],
+[AC_REQUIRE([SOMETHING])dnl
+AC_REQUIRE([SOMETHING_ELSE])dnl
+])
+
+AC_DEFUN([SOMETHING])
+EOF
+
+echo 'm4_include([d.m4])' > c.m4
+echo 'AC_DEFUN([SOMETHING_ELSE])' >d.m4
+
+mkdir defs
+echo 'AC_DEFUN([SOMETHING_ELSE])' >defs/e.m4
+echo 'AC_DEFUN([ANOTHER_MACRO])' >defs/f.m4
+
+cat >>Makefile.am<<\EOF
+testdist1: distdir
+ test -f $(distdir)/acinclude.m4
+ test -f $(distdir)/a.m4
+ test -f $(distdir)/b.m4
+ test -f $(distdir)/c.m4
+ test -f $(distdir)/d.m4
+ test ! -d $(distdir)/defs
+testdist2: distdir
+ test -f $(distdir)/acinclude.m4
+ test -f $(distdir)/a.m4
+ test -f $(distdir)/b.m4
+ test -f $(distdir)/c.m4
+ test -f $(distdir)/d.m4
+ test ! -f $(distdir)/defs/e.m4
+ test -f $(distdir)/defs/f.m4
+EOF
+
+$ACLOCAL -I defs
+
+$FGREP acinclude.m4 aclocal.m4
+# None of the following macro should be included. acinclude.m4
+# includes the first four, and the last two are not needed at all.
+$FGREP a.m4 aclocal.m4 && exit 1
+$FGREP b.m4 aclocal.m4 && exit 1
+$FGREP c.m4 aclocal.m4 && exit 1
+$FGREP d.m4 aclocal.m4 && exit 1
+$FGREP defs/e.m4 aclocal.m4 && exit 1
+$FGREP defs/f.m4 aclocal.m4 && exit 1
+
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+$MAKE testdist1
+
+cp aclocal.m4 aclocal.old
+$sleep
+echo 'AC_DEFUN([FOO], [ANOTHER_MACRO])' >> c.m4
+$MAKE
+# Because c.m4 has changed, aclocal.m4 must have been rebuilt.
+is_newest aclocal.m4 aclocal.old
+# However, since FOO is not used, f.m4 should not be included
+# and the contents of aclocal.m4 should remain the same
+diff aclocal.m4 aclocal.old
+
+# If FOO where to be used, that would be another story, of course:
+# f.m4 should be included
+$sleep
+echo FOO >> configure.ac
+$MAKE
+$FGREP defs/f.m4 aclocal.m4
+$MAKE testdist2
+
+# Make sure aclocal diagnose missing included files with correct 'file:line:'.
+rm -f b.m4
+$ACLOCAL 2>stderr && { cat stderr >&2; exit 1; }
+cat stderr >&2
+grep 'a\.m4:1: .*b\.m4.*does not exist' stderr
+
+:
diff --git a/t/aclocal-m4-sinclude.sh b/t/aclocal-m4-sinclude.sh
new file mode 100644
index 000000000..f4c850e67
--- /dev/null
+++ b/t/aclocal-m4-sinclude.sh
@@ -0,0 +1,73 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure changes to m4_included files also cause aclocal.m4 to change.
+
+. test-init.sh
+
+cat > configure.ac << 'END'
+AC_INIT([m4sinclude], [1.0])
+AM_INIT_AUTOMAKE
+m4_include([somefile.m4])
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+END
+
+cat >Makefile.am <<'EOF'
+check-local:
+ test -f "$(srcdir)/somefile.m4"
+ test -f "$(srcdir)/m4/version1.m4"
+ test -f "$(srcdir)/m4/otherfile.m4"
+EOF
+
+mkdir m4
+
+echo MACRO1 >somefile.m4
+echo 'AC_PREREQ([2.58])' >m4/otherfile.m4
+
+cat >m4/version1.m4 <<EOF
+AC_DEFUN([MACRO1])
+AC_DEFUN([MACRO2])
+m4_sinclude(m4/otherfile.m4)
+EOF
+
+cat >m4/version2.m4 <<EOF
+AC_DEFUN([MACRO1])
+EOF
+
+$ACLOCAL -I m4
+grep version2 aclocal.m4
+grep version1 aclocal.m4 && exit 1
+
+$sleep
+echo MACRO2 >somefile.m4
+
+$ACLOCAL -I m4
+grep version2 aclocal.m4 && exit 1
+grep version1 aclocal.m4
+
+$sleep
+# aclocal.m4 should change if we touch otherfile.m4
+touch m4/otherfile.m4
+$ACLOCAL -I m4
+is_newest aclocal.m4 m4/otherfile.m4
+
+$AUTOCONF
+$AUTOMAKE
+./configure
+$MAKE distcheck
+
+:
diff --git a/t/aclocal-macrodir.tap b/t/aclocal-macrodir.tap
new file mode 100644
index 000000000..823268423
--- /dev/null
+++ b/t/aclocal-macrodir.tap
@@ -0,0 +1,239 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Several tests on the use of the m4 macro AC_CONFIG_MACRO_DIR with
+# aclocal. See also related test 'aclocal-macrodir.tap'.
+
+am_create_testdir=empty
+. test-init.sh
+
+plan_ 7
+
+ocwd=$(pwd) || fatal_ "getting current working directory"
+unset ACLOCAL_PATH
+
+#
+# General utility functions and variables.
+#
+# TODO: These should maybe be refactored, generalized and
+# moved into 't/ax/tap-functions.sh' ...
+#
+
+tcount=0
+r=invalid
+description=''
+directive=''
+
+test_begin ()
+{
+ if test -n "$description"; then
+ fatal_ "'test_begin' called, but another test seems active already"
+ else
+ r=ok
+ description=$1
+ directive=${2-}
+ echo "$description" > README.txt
+ shift
+ fi
+ tcount=$(($tcount + 1)) && test $tcount -gt 0 \
+ || fatal_ "failed to bump the test count"
+ mkdir $tcount.d
+ cd $tcount.d
+}
+
+test_end ()
+{
+ if test -z "$description"; then
+ fatal_ "'test_end' called, but no test seems active"
+ else
+ cd "$ocwd" || fatal_ "cannot chdir back to top-level directory"
+ result_ "$r" -D "$directive" -- "$description"
+ # Don't leave directories for successful subtests hanging around.
+ if test -z "$directive" && test "$r" = ok; then
+ rm -rf "$tcount.d" || fatal_ "removing subdir $tcount.d"
+ fi
+ r=invalid directive= description=
+ fi
+}
+
+#---------------------------------------------------------------------------
+
+test_begin "AC_CONFIG_MACRO_DIR is honored"
+
+cat > configure.ac <<'END'
+AC_INIT([md], [10.0])
+AC_CONFIG_MACRO_DIR([macro-dir])
+MY_FOO
+END
+
+mkdir macro-dir
+echo 'AC_DEFUN([MY_FOO], [::my::foo::])' > macro-dir/foo.m4
+
+$ACLOCAL \
+ && $FGREP 'm4_include([macro-dir/foo.m4])' aclocal.m4 \
+ && $AUTOCONF \
+ && not $FGREP 'MY_FOO' configure \
+ && $FGREP '::my::foo::' configure \
+ || r='not ok'
+
+test_end
+
+#---------------------------------------------------------------------------
+
+test_begin "AC_CONFIG_MACRO_DIR([foo]) interaction with --install"
+
+cat > configure.ac << 'END'
+AC_INIT([inst], [1.0])
+AC_CONFIG_MACRO_DIR([the-dir])
+THE_MACRO
+END
+
+mkdir sys-dir the-dir
+echo 'AC_DEFUN([THE_MACRO], [:])' > sys-dir/my.m4
+
+test ! -r the-dir/my.m4 \
+ && $ACLOCAL --install --system-acdir ./sys-dir \
+ && diff sys-dir/my.m4 the-dir/my.m4 \
+ || r='not ok'
+
+test_end
+
+#---------------------------------------------------------------------------
+
+test_begin "'-I' option wins over AC_CONFIG_MACRO_DIR"
+
+cat > configure.ac <<'END'
+AC_INIT([md], [4.6])
+AC_CONFIG_MACRO_DIR([dir1])
+MY_FOO
+END
+
+mkdir dir1 dir2
+echo 'AC_DEFUN([MY_FOO], [::ko::ko::])' > dir1/1.m4
+echo 'AC_DEFUN([MY_FOO], [::ok::ok::])' > dir2/2.m4
+
+$ACLOCAL -I dir2 \
+ && $FGREP 'm4_include([dir2/2.m4])' aclocal.m4 \
+ && not $FGREP 'm4_include([dir1/1.m4])' aclocal.m4 \
+ && $AUTOCONF \
+ && not $FGREP '::ko::ko::' configure \
+ && $FGREP '::ok::ok::' configure \
+ || r='not ok'
+
+test_end
+
+#---------------------------------------------------------------------------
+
+test_begin "AC_CONFIG_MACRO_DIR([foo]) can create directory 'foo'"
+
+cat > configure.ac << 'END'
+AC_INIT([x], [1.0])
+AC_CONFIG_MACRO_DIR([foo])
+MY_MACRO
+END
+
+mkdir acdir
+echo 'AC_DEFUN([MY_MACRO], [:])' > acdir/bar.m4
+
+test ! -d foo \
+ && $ACLOCAL --install --system-acdir ./acdir \
+ && diff acdir/bar.m4 foo/bar.m4 \
+ || r='not ok'
+
+test_end
+
+#---------------------------------------------------------------------------
+
+test_begin "AC_CONFIG_MACRO_DIR([non-existent]) warns with -Wunsupported"
+
+cat > configure.ac << 'END'
+AC_INIT([oops], [1.0])
+AC_CONFIG_MACRO_DIR([non-existent])
+AM_INIT_AUTOMAKE
+END
+
+$ACLOCAL -Wno-error 2>stderr \
+ && cat stderr >&2 \
+ && grep "couldn't open directory 'non-existent'" stderr \
+ && test -f aclocal.m4 \
+ || r='not ok'
+
+rm -rf aclocal.m4 autom4te*.cache
+
+$ACLOCAL -Werror -Wno-unsupported \
+ && test -f aclocal.m4 \
+ || r='not ok'
+
+test_end
+
+#---------------------------------------------------------------------------
+
+test_begin "AC_CONFIG_MACRO_DIR([not-exist]) and ACLOCAL_AMFLAGS = -I not-exist"
+
+cat > configure.ac << 'END'
+AC_INIT([oops], [1.0])
+AC_CONFIG_MACRO_DIR([not-exist])
+END
+
+cat > Makefile.am << 'END'
+ACLOCAL_AMFLAGS = -I not-exist
+END
+
+$ACLOCAL -Wno-error 2>stderr \
+ && cat stderr >&2 \
+ && test $(grep -c "couldn't open directory 'not-exist'" stderr) -eq 1 \
+ || r='not ok'
+
+test_end
+
+#---------------------------------------------------------------------------
+
+# Avoid spurious failures with pre-2.70 autoconf.
+# FIXME: remove this in automake 2.0, once we require Autoconf 2.70.
+if echo 'AC_INIT AC_CONFIG_MACRO_DIRS' | $AUTOCONF -o/dev/null -; then
+
+ test_begin "AC_CONFIG_MACRO_DIR interaction with AC_REQUIRE"
+
+ unindent > configure.ac <<'END'
+ AC_INIT([req], [1.0])
+ AC_CONFIG_MACRO_DIR([macro-dir])
+ AC_DEFUN([MY_FOO], [AC_REQUIRE([MY_BAR])])
+ MY_FOO
+END
+
+ mkdir macro-dir
+ echo 'AC_DEFUN([MY_BAR], [//my//bar//])' > macro-dir/x.m4
+
+ st=0; $ACLOCAL 2>stderr || st=$?
+ cat stderr >&2
+
+ test $st -eq 0 \
+ && test ! -s stderr \
+ && $FGREP 'm4_include([macro-dir/x.m4])' aclocal.m4 \
+ && $AUTOCONF \
+ && not $EGREP 'MY_(FOO|BAR)' configure \
+ && $FGREP '//my//bar//' configure \
+ || r='not ok'
+
+ test_end
+
+else
+
+ skip_ -r "autoconf is too old (AC_CONFIG_MACRO_DIRS not defined)"
+
+fi
+
+:
diff --git a/t/aclocal-macrodirs.tap b/t/aclocal-macrodirs.tap
new file mode 100644
index 000000000..b6bb946bd
--- /dev/null
+++ b/t/aclocal-macrodirs.tap
@@ -0,0 +1,445 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Several tests on the use of the m4 macro AC_CONFIG_MACRO_DIRS with
+# aclocal. See also related test 'aclocal-macrodir.tap'.
+
+am_create_testdir=empty
+. test-init.sh
+
+plan_ 15
+
+ocwd=$(pwd) || fatal_ "getting current working directory"
+unset ACLOCAL_PATH
+
+#
+# General utility functions and variables.
+#
+# TODO: These should maybe be refactored, generalized and
+# moved into 't/ax/tap-functions.sh' ...
+#
+
+tcount=0
+r=invalid
+description=''
+directive=''
+
+test_begin ()
+{
+ if test -n "$description"; then
+ fatal_ "'test_begin' called, but another test seems active already"
+ else
+ r=ok
+ description=$1
+ directive=${2-}
+ echo "$description" > README.txt
+ shift
+ fi
+ tcount=$(($tcount + 1)) && test $tcount -gt 0 \
+ || fatal_ "failed to bump the test count"
+ mkdir $tcount.d
+ cd $tcount.d
+}
+
+test_end ()
+{
+ if test -z "$description"; then
+ fatal_ "'test_end' called, but no test seems active"
+ else
+ cd "$ocwd" || fatal_ "cannot chdir back to top-level directory"
+ result_ "$r" -D "$directive" -- "$description"
+ # Don't leave directories for successful subtests hanging around.
+ if test -z "$directive" && test "$r" = ok; then
+ rm -rf "$tcount.d" || fatal_ "removing subdir $tcount.d"
+ fi
+ r=invalid directive= description=
+ fi
+}
+
+#---------------------------------------------------------------------------
+
+test_begin "AC_CONFIG_MACRO_DIRS is honored"
+
+cat > configure.ac <<'END'
+AC_INIT([md], [10.0])
+AC_CONFIG_MACRO_DIRS([macro-dir])
+MY_FOO
+END
+
+mkdir macro-dir
+echo 'AC_DEFUN([MY_FOO], [::my::foo::])' > macro-dir/foo.m4
+
+$ACLOCAL \
+ && $FGREP 'm4_include([macro-dir/foo.m4])' aclocal.m4 \
+ && $AUTOCONF \
+ && not $FGREP 'MY_FOO' configure \
+ && $FGREP '::my::foo::' configure \
+ || r='not ok'
+
+test_end
+
+#---------------------------------------------------------------------------
+
+three_dirs_check ()
+{
+ mkdir dir1 dir2 dir3
+ echo 'AC_DEFUN([MY_FOO], [::my::foo::])' > dir1/foo.m4
+ echo 'AC_DEFUN([MY_BAR], [!!my!!bar!!])' > dir2/zap.m4
+ echo 'AC_DEFUN([MY_BAZ], [==my==baz==])' > dir3/0.m4
+ $ACLOCAL \
+ && $FGREP 'm4_include([dir1/foo.m4])' aclocal.m4 \
+ && $FGREP 'm4_include([dir2/zap.m4])' aclocal.m4 \
+ && $FGREP 'm4_include([dir3/0.m4])' aclocal.m4 \
+ && $AUTOCONF \
+ && not $EGREP 'MY_(FOO|BAR|BAZ)' configure \
+ && $FGREP '::my::foo::' configure \
+ && $FGREP '!!my!!bar!!' configure \
+ && $FGREP '==my==baz==' configure \
+ || r='not ok'
+}
+
+#---------------------------------------------------------------------------
+
+test_begin "AC_CONFIG_MACRO_DIRS several arguments"
+
+cat > configure.ac <<'END'
+AC_INIT([more-args], [0.2])
+AC_CONFIG_MACRO_DIRS([dir1 dir2 dir3])
+MY_FOO
+MY_BAR
+MY_BAZ
+END
+
+three_dirs_check
+
+test_end
+
+#---------------------------------------------------------------------------
+
+test_begin "AC_CONFIG_MACRO_DIRS several calls"
+
+cat > configure.ac <<'END'
+AC_INIT([more-calls], [2.0])
+AC_CONFIG_MACRO_DIRS([dir1])
+AC_CONFIG_MACRO_DIRS([dir2 dir3])
+MY_FOO
+MY_BAR
+MY_BAZ
+END
+
+three_dirs_check
+
+test_end
+
+#---------------------------------------------------------------------------
+
+test_begin "AC_CONFIG_MACRO_DIRS extra whitespace"
+
+bslash=\\
+
+cat > configure.ac <<END
+AC_INIT([more-args], [0.2])
+AC_CONFIG_MACRO_DIRS([ dir1${bslash}
+${tab} dir2 ${tab}${tab}dir3
+${bslash}
+
+])
+MY_FOO
+MY_BAR
+MY_BAZ
+END
+
+three_dirs_check
+
+test_end
+
+#---------------------------------------------------------------------------
+
+test_begin "AC_CONFIG_MACRO_DIRS precedence"
+
+cat > configure.ac <<'END'
+AC_INIT([more-calls], [2.0])
+AC_CONFIG_MACRO_DIRS([dir1])
+AC_CONFIG_MACRO_DIRS([dir2 dir3])
+MY_FOO
+MY_BAR
+MY_BAZ
+END
+
+mkdir dir1 dir2 dir3
+echo 'AC_DEFUN([MY_FOO], [OK-Foo])' > dir1/b.m4
+echo 'AC_DEFUN([MY_FOO], [KO-Foo])' > dir2/a.m4
+echo 'AC_DEFUN([MY_BAR], [OK-Bar])' > dir2/1.m4
+echo 'AC_DEFUN([MY_BAR], [KO-Bar])' > dir3/0.m4
+echo 'AC_DEFUN([MY_BAZ], [OK-Baz])' > dir3/x.m4
+
+$ACLOCAL \
+ && $FGREP 'm4_include([dir1/b.m4])' aclocal.m4 \
+ && $FGREP 'm4_include([dir2/1.m4])' aclocal.m4 \
+ && $FGREP 'm4_include([dir3/x.m4])' aclocal.m4 \
+ && test $($FGREP -c 'm4_include([dir1' aclocal.m4) -eq 1 \
+ && test $($FGREP -c 'm4_include([dir2' aclocal.m4) -eq 1 \
+ && test $($FGREP -c 'm4_include([dir3' aclocal.m4) -eq 1 \
+ && $AUTOCONF \
+ && not $EGREP 'MY_(FOO|BAR|BAZ)' configure \
+ && $FGREP 'OK-Foo' configure \
+ && $FGREP 'OK-Bar' configure \
+ && $FGREP 'OK-Baz' configure \
+ && not $FGREP 'KO-' configure \
+ || r='not ok'
+
+test_end
+
+#---------------------------------------------------------------------------
+
+test_begin "AC_CONFIG_MACRO_DIRS interaction with --install"
+
+cat > configure.ac << 'END'
+AC_INIT([inst], [1.0])
+AC_CONFIG_MACRO_DIRS([the-dir])
+THE_MACRO
+END
+
+mkdir sys-dir the-dir
+echo 'AC_DEFUN([THE_MACRO], [:])' > sys-dir/my.m4
+
+test ! -r the-dir/my.m4 \
+ && $ACLOCAL --install --system-acdir ./sys-dir \
+ && diff sys-dir/my.m4 the-dir/my.m4 \
+ || r='not ok'
+
+test_end
+
+#---------------------------------------------------------------------------
+
+two_dirs_install_check ()
+{
+ mkdir sys-dir dir1 dir2
+ echo 'AC_DEFUN([THE_MACRO], [:])' > sys-dir/my.m4
+ echo 'AC_DEFUN([AX_FOO], [:])' > dir2/zap.m4
+ test ! -r dir1/my.m4 \
+ && $ACLOCAL --install --system-acdir ./sys-dir \
+ && diff sys-dir/my.m4 dir1/my.m4 \
+ && test ! -e dir2/my.m4 \
+ && $FGREP 'm4_include([dir1/my.m4])' aclocal.m4 \
+ && $FGREP 'm4_include([dir2/zap.m4])' aclocal.m4 \
+ || r='not ok'
+}
+
+#---------------------------------------------------------------------------
+
+test_begin "several AC_CONFIG_MACRO_DIRS arguments and --install"
+
+cat > configure.ac << 'END'
+AC_INIT([inst2a], [1.0])
+AC_CONFIG_MACRO_DIRS([dir1 dir2])
+THE_MACRO
+AX_FOO
+END
+
+two_dirs_install_check
+
+test_end
+
+#---------------------------------------------------------------------------
+
+
+test_begin "several AC_CONFIG_MACRO_DIRS calls and --install"
+
+cat > configure.ac << 'END'
+AC_INIT([inst2b], [1.0])
+AC_CONFIG_MACRO_DIRS([dir1])
+AC_CONFIG_MACRO_DIRS([dir2])
+THE_MACRO
+AX_FOO
+END
+
+two_dirs_install_check
+
+test_end
+
+#---------------------------------------------------------------------------
+
+test_begin "'-I' option wins over AC_CONFIG_MACRO_DIRS"
+
+cat > configure.ac <<'END'
+AC_INIT([md], [4.6])
+AC_CONFIG_MACRO_DIRS([dir1])
+MY_FOO
+END
+
+mkdir dir1 dir2
+echo 'AC_DEFUN([MY_FOO], [::ko::ko::])' > dir1/1.m4
+echo 'AC_DEFUN([MY_FOO], [::ok::ok::])' > dir2/2.m4
+
+$ACLOCAL -I dir2 \
+ && $FGREP 'm4_include([dir2/2.m4])' aclocal.m4 \
+ && not $FGREP 'm4_include([dir1/1.m4])' aclocal.m4 \
+ && $AUTOCONF \
+ && not $FGREP '::ko::ko::' configure \
+ && $FGREP '::ok::ok::' configure \
+ || r='not ok'
+
+test_end
+
+#---------------------------------------------------------------------------
+
+test_begin "AC_CONFIG_MACRO_DIRS([foo]) can create directory 'foo'"
+
+cat > configure.ac << 'END'
+AC_INIT([x], [1.0])
+AC_CONFIG_MACRO_DIRS([foo])
+MY_MACRO
+END
+
+mkdir acdir
+echo 'AC_DEFUN([MY_MACRO], [:])' > acdir/bar.m4
+
+test ! -d foo \
+ && $ACLOCAL --install --system-acdir ./acdir \
+ && diff acdir/bar.m4 foo/bar.m4 \
+ || r='not ok'
+
+test_end
+
+#---------------------------------------------------------------------------
+
+test_begin "AC_CONFIG_MACRO_DIRS([non-existent]) warns (1)"
+
+cat > configure.ac << 'END'
+AC_INIT([oops], [1.0])
+AC_CONFIG_MACRO_DIRS([non-existent])
+AM_INIT_AUTOMAKE
+END
+
+$ACLOCAL -Wno-error 2>stderr \
+ && cat stderr >&2 \
+ && grep "couldn't open directory 'non-existent'" stderr \
+ && test -f aclocal.m4 \
+ || r='not ok'
+
+rm -rf aclocal.m4 autom4te*.cache
+
+$ACLOCAL -Werror -Wno-unsupported \
+ && test -f aclocal.m4 \
+ || r='not ok'
+
+test_end
+
+#---------------------------------------------------------------------------
+
+test_begin "AC_CONFIG_MACRO_DIRS([non-existent]) warns (2)"
+
+cat > configure.ac << 'END'
+AC_INIT([oops], [1.0])
+AC_CONFIG_MACRO_DIRS([dir-ok])
+AC_CONFIG_MACRO_DIRS([dir-ko])
+END
+
+mkdir dir-ok
+not $ACLOCAL 2>stderr \
+ && cat stderr >&2 \
+ && grep "couldn't open directory 'dir-ko'" stderr \
+ && not grep "dir-ok" stderr \
+ && test ! -e aclocal.m4 \
+ || r='not ok'
+
+test_end
+
+#---------------------------------------------------------------------------
+
+test_begin "AC_CONFIG_MACRO_DIRS([existent non-existent]) errors out"
+
+cat > configure.ac << 'END'
+AC_INIT([oops], [1.0])
+AC_CONFIG_MACRO_DIRS([dir-ok])
+AC_CONFIG_MACRO_DIRS([dir-ko])
+END
+
+mkdir dir-ok
+
+not $ACLOCAL -Wnone --install 2>stderr \
+ && cat stderr >&2 \
+ && grep "couldn't open directory 'dir-ko'" stderr \
+ && test ! -e dir-ko \
+ || r='not ok'
+
+test_end
+
+#---------------------------------------------------------------------------
+
+test_begin "AC_CONFIG_MACRO_DIRS([not-exist]) and ACLOCAL_AMFLAGS = -I not-exist"
+
+cat > configure.ac << 'END'
+AC_INIT([oops], [1.0])
+AC_CONFIG_MACRO_DIRS([not-exist])
+END
+
+cat > Makefile.am << 'END'
+ACLOCAL_AMFLAGS = -I not-exist
+END
+
+$ACLOCAL -Wno-error 2>stderr \
+ && cat stderr >&2 \
+ && test $(grep -c "couldn't open directory 'not-exist'" stderr) -eq 1 \
+ || r='not ok'
+
+test_end
+
+#---------------------------------------------------------------------------
+
+# Avoid spurious failures with pre-2.70 autoconf.
+# FIXME: remove this in automake 2.0, once we require Autoconf 2.70.
+if echo 'AC_INIT AC_CONFIG_MACRO_DIRS' | $AUTOCONF -o/dev/null -; then
+
+ test_begin "AC_CONFIG_MACRO_DIRS interaction with AC_REQUIRE"
+
+ unindent > configure.ac <<'END'
+ AC_INIT([req], [1.0])
+ AC_CONFIG_MACRO_DIRS([m1 m2])
+ AC_DEFUN([MY_FOO], [
+ AC_REQUIRE([MY_BAR])
+ AC_REQUIRE([MY_BAZ])
+ ])
+ MY_FOO
+END
+
+ mkdir m1 m2
+ echo 'AC_DEFUN([MY_BAR], [^^my^^bar^^])' > m1/x.m4
+ echo 'AC_DEFUN([MY_BAZ], [~~my~~baz~~])' > m2/x.m4
+
+ st=0; $ACLOCAL 2>stderr || st=$?
+ cat stderr >&2
+
+ test $st -eq 0 \
+ && test ! -s stderr \
+ && $FGREP 'm4_include([m1/x.m4])' aclocal.m4 \
+ && $FGREP 'm4_include([m2/x.m4])' aclocal.m4 \
+ && $AUTOCONF \
+ && not $EGREP 'MY_(FOO|BAR|BAZ)' configure \
+ && $FGREP '^^my^^bar^^' configure \
+ && $FGREP '~~my~~baz~~' configure \
+ || r='not ok'
+
+ test_end
+
+else
+
+ skip_ -r "autoconf is too old (AC_CONFIG_MACRO_DIRS not defined)"
+
+fi
+
+:
diff --git a/t/aclocal-missing-macros.sh b/t/aclocal-missing-macros.sh
new file mode 100644
index 000000000..4bc00986a
--- /dev/null
+++ b/t/aclocal-missing-macros.sh
@@ -0,0 +1,41 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure include of include detects missing macros
+
+am_create_testdir=empty
+. test-init.sh
+
+cat >> configure.ac <<END
+AC_INIT([$me], [1.0])
+GNOME_X_CHECKS
+END
+
+mkdir macros
+
+cat > macros/gnome.m4 << 'END'
+AC_DEFUN([GNOME_X_CHECKS], [
+# Use a macro that cannot be installed in a third-party system-wide m4
+# file; otherwise, this test might fail under "make installcheck".
+ AM__PATH__GTK(0.99.5,,AC_MSG_ERROR(GTK not installed, or gtk-config not in path))
+])
+END
+
+$ACLOCAL -I macros 2>stderr && { cat stderr >&2; exit 1; }
+cat stderr
+grep '^macros/gnome\.m4:4:.*AM__PATH__GTK.*not found' stderr
+
+:
diff --git a/t/aclocal-no-extra-scan.sh b/t/aclocal-no-extra-scan.sh
new file mode 100644
index 000000000..91f93aed0
--- /dev/null
+++ b/t/aclocal-no-extra-scan.sh
@@ -0,0 +1,37 @@
+#! /bin/sh
+# Copyright (C) 2004-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure aclocal does not include definitions that are not actually
+# evaluated.
+
+am_create_testdir=empty
+. test-init.sh
+
+cat > configure.ac << 'END'
+AC_INIT([x], [0])
+AC_SUBST([POM])
+END
+
+mkdir m4
+cat >m4/some.m4 <<'EOF'
+AC_DEFUN([AM_SOME_MACRO],
+[AC_DEFUN([AC_SUBST], [GREPME])])
+EOF
+
+$ACLOCAL -I m4
+$EGREP 'some.m4|GREPME' aclocal.m4 && exit 1
+
+:
diff --git a/t/aclocal-no-force.sh b/t/aclocal-no-force.sh
new file mode 100644
index 000000000..e0d558221
--- /dev/null
+++ b/t/aclocal-no-force.sh
@@ -0,0 +1,117 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure aclocal does not overwrite aclocal.m4 needlessly.
+# Also make sure automake --no-force does not overwrite Makefile.in needlessly.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+SOME_DEFS
+AC_CONFIG_FILES([sub/Makefile])
+END
+
+mkdir sub
+: > sub/Makefile.am
+
+cat >> Makefile.am << 'END'
+SUBDIRS = sub
+include fragment.inc
+END
+
+: > fragment.inc
+
+mkdir m4
+echo 'AC_DEFUN([SOME_DEFS], [])' > m4/somedefs.m4
+
+# Automake will take aclocal.m4 to be newer if it has the same timestamp
+# as Makefile.in. Avoid the confusing by sleeping.
+AUTOMAKE_after_aclocal ()
+{
+ $sleep
+ $AUTOMAKE --no-force
+}
+
+# aclocal will rewrite aclocal.m4 unless the input files are all older than the
+# existing aclocal.m4 -- sleep to ensure somedefs.m4 has an older timestamp
+# than the aclocal.m4 that the next aclocal call will generate.
+$sleep
+
+$ACLOCAL -I m4
+AUTOMAKE_after_aclocal
+
+touch foo
+$sleep
+$ACLOCAL -I m4
+AUTOMAKE_after_aclocal
+# aclocal.m4 and Makefile.in should not have been updated, so 'foo'
+# should be younger
+is_newest foo aclocal.m4 Makefile.in sub/Makefile.in
+
+$sleep
+$ACLOCAL -I m4 --force
+is_newest aclocal.m4 foo
+# We still use --no-force for automake, but since aclocal.m4 has
+# changed all Makefile.ins should be updated.
+AUTOMAKE_after_aclocal
+is_newest Makefile.in aclocal.m4 foo
+is_newest sub/Makefile.in aclocal.m4 foo
+
+$sleep
+touch m4/somedefs.m4
+$sleep
+$ACLOCAL -I m4
+AUTOMAKE_after_aclocal
+# aclocal.m4 should have been updated, although its contents haven't
+# changed.
+is_newest aclocal.m4 m4/somedefs.m4
+is_newest Makefile.in m4/somedefs.m4
+is_newest sub/Makefile.in m4/somedefs.m4
+
+$sleep
+touch fragment.inc
+$sleep
+$ACLOCAL -I m4
+AUTOMAKE_after_aclocal
+# Only ./Makefile.in should change.
+is_newest Makefile.in fragment.inc
+is_newest fragment.inc aclocal.m4
+is_newest fragment.inc sub/Makefile.in
+
+grep README Makefile.in && exit 1
+
+$sleep
+: > README
+$sleep
+$AUTOMAKE --no-force
+# Even if no dependency change, the content changed.
+is_newest Makefile.in README
+is_newest README sub/Makefile.in
+
+grep README Makefile.in
+
+: > sub/Makefile.in
+$sleep
+touch foo
+$sleep
+$ACLOCAL -I m4
+$AUTOMAKE --no-force
+# Only sub/Makefile.in should change.
+is_newest foo aclocal.m4
+is_newest foo Makefile.in
+is_newest sub/Makefile.in foo
+
+:
diff --git a/t/aclocal-no-install-no-mkdir.sh b/t/aclocal-no-install-no-mkdir.sh
new file mode 100644
index 000000000..51c99305c
--- /dev/null
+++ b/t/aclocal-no-install-no-mkdir.sh
@@ -0,0 +1,36 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that aclocal does not create a non-existent local m4 directory
+# if the '--install' option is not given.
+
+am_create_testdir=empty
+. test-init.sh
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+MY_MACRO
+END
+
+mkdir sys-acdir
+cat > sys-acdir/my-defs.m4 <<END
+AC_DEFUN([MY_MACRO], [:])
+END
+
+$ACLOCAL -I foo --system-acdir=sys-acdir && exit 1
+test ! -e foo
+
+:
diff --git a/t/aclocal-no-symlinked-overwrite.sh b/t/aclocal-no-symlinked-overwrite.sh
new file mode 100644
index 000000000..d0450aa57
--- /dev/null
+++ b/t/aclocal-no-symlinked-overwrite.sh
@@ -0,0 +1,41 @@
+#! /bin/sh
+# Copyright (C) 2006-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure aclocal does not write into symlinked aclocal.m4.
+
+am_create_testdir=empty
+. test-init.sh
+
+echo 'm4_define([FOO], [wrong foo])' > foo.m4
+echo 'm4_define([FOO], [right foo])' > acinclude.m4
+echo 'AC_INIT FOO' > configure.ac
+
+chmod a-w foo.m4
+
+# Setup.
+ln -s foo.m4 aclocal.m4 && test -h aclocal.m4 \
+ || skip_ "cannot create symlinks to files"
+
+# Sanity check.
+grep 'wrong foo' aclocal.m4 \
+ || fatal_ "weird error symlinking aclocal.m4 -> foo.m4"
+
+$ACLOCAL
+$AUTOCONF
+grep 'right foo' configure
+grep 'wrong foo' foo.m4
+
+:
diff --git a/t/aclocal-no-unused-required.sh b/t/aclocal-no-unused-required.sh
new file mode 100644
index 000000000..cdac63d2e
--- /dev/null
+++ b/t/aclocal-no-unused-required.sh
@@ -0,0 +1,42 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure aclocal does not require unused macros.
+
+am_create_testdir=empty
+. test-init.sh
+
+cat > configure.ac << 'END'
+AC_INIT
+SOME_DEFS
+END
+
+mkdir m4
+cat >m4/somedefs.m4 <<EOF
+AC_DEFUN([SOME_DEFS], [
+ m4_if([a], [a], [MACRO1], [MACRO2])
+])
+EOF
+
+echo 'AC_DEFUN([MACRO1],)' >m4/macro1.m4
+echo 'AC_DEFUN([MACRO2], [AC_REQUIRE([AM_UNUSED_MACRO])])' >m4/macro2.m4
+
+$ACLOCAL -I m4 >output 2>&1 || { cat output; exit 1; }
+test 0 -eq $(wc -l <output)
+grep macro1.m4 aclocal.m4
+grep macro2.m4 aclocal.m4 && exit 1
+
+:
diff --git a/t/aclocal-path-install-serial.sh b/t/aclocal-path-install-serial.sh
new file mode 100644
index 000000000..5ebcb1b58
--- /dev/null
+++ b/t/aclocal-path-install-serial.sh
@@ -0,0 +1,86 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# ACLOCAL_PATH, acdir and '--install' interactions when serial number
+# are involved.
+
+am_create_testdir=empty
+. test-init.sh
+
+cat > configure.ac << 'END'
+AC_INIT
+AM_FOO
+END
+
+set_serial ()
+{
+ serial=$1 file=$2
+ sed '/^# serial/d' $file > t
+ case $serial in
+ none) mv -f t $file;;
+ *) (echo "# serial $serial" && cat t) > $file; rm -f t;;
+ esac
+ cat $file # For debugging.
+}
+
+win ()
+{
+ case $1 in
+ sdir) ok=sdir ko=pdir;;
+ pdir) ok=pdir ko=sdir;;
+ *) fatal_ "win(): invalid argument '$1'";;
+ esac
+ # This is required on fast machine, to avoid caching and timestamp
+ # issues with the autotools (already happened in practice).
+ rm -rf configure aclocal.m4 autom4te*.cache m4/*
+ $ACLOCAL -I m4 --install
+ test -f m4/foo.m4 # Sanity check.
+ $AUTOCONF
+ $FGREP "::$ok:" m4/foo.m4
+ $FGREP "::$ok::" configure
+ $FGREP "::$ko::" m4/foo.m4 configure && exit 1
+ :
+}
+
+mkdir sdir pdir m4
+
+ACLOCAL="$ACLOCAL --system-acdir=$(pwd)/sdir"
+ACLOCAL_PATH=./pdir; export ACLOCAL_PATH
+
+cat > sdir/foo.m4 << 'END'
+AC_DEFUN([AM_FOO], [::sdir::])
+END
+cat > pdir/foo.m4 << 'END'
+AC_DEFUN([AM_FOO], [::pdir::])
+END
+
+set_serial 2 sdir/foo.m4
+set_serial 1 pdir/foo.m4
+win sdir
+
+set_serial 3.3 sdir/foo.m4
+set_serial 5.7 pdir/foo.m4
+win pdir
+
+set_serial 0 sdir/foo.m4
+set_serial none pdir/foo.m4
+win sdir
+
+set_serial none sdir/foo.m4
+set_serial 1.2.3 pdir/foo.m4
+win pdir
+
+:
diff --git a/t/aclocal-path-install.sh b/t/aclocal-path-install.sh
new file mode 100644
index 000000000..3ff7d4196
--- /dev/null
+++ b/t/aclocal-path-install.sh
@@ -0,0 +1,53 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# ACLOCAL_PATH and '--install' interactions.
+
+am_create_testdir=empty
+. test-init.sh
+
+cat > configure.ac << 'END'
+AC_INIT
+AM_FOO
+END
+
+mkdir acdir pdir ldir
+
+ACLOCAL="$ACLOCAL --system-acdir=$(pwd)/acdir"
+ACLOCAL_PATH=./pdir; export ACLOCAL_PATH
+
+cat > acdir/foo.m4 << 'END'
+AC_DEFUN([AM_FOO], [:])
+END
+
+cat > pdir/bar.m4 << 'END'
+AC_DEFUN([AM_BAR], [:])
+END
+
+# The '--install' option should never cause anything to be installed
+# in a directory specified in ACLOCAL_PATH.
+$ACLOCAL --install 2>stderr && { cat stderr >&2; exit 1; }
+cat stderr >&2
+grep 'impossible without -I .* nor AC_CONFIG_MACRO_DIR' stderr
+test ! -e pdir/foo.m4
+
+# The '--install' option should cause a required macro found in a
+# directory specified in ACLOCAL_PATH to be installed locally.
+echo AM_BAR >> configure.ac
+$ACLOCAL --install -I ldir
+diff pdir/bar.m4 ldir/bar.m4
+
+:
diff --git a/t/aclocal-path-nonexistent.sh b/t/aclocal-path-nonexistent.sh
new file mode 100644
index 000000000..caf365873
--- /dev/null
+++ b/t/aclocal-path-nonexistent.sh
@@ -0,0 +1,34 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Non-existent directories in ACLOCAL_PATH are ok.
+
+am_create_testdir=empty
+. test-init.sh
+
+cat > configure.ac << 'END'
+AC_INIT
+AM_FOO
+END
+
+mkdir mdir
+echo 'AC_DEFUN([AM_FOO], [am--foo])' > mdir/foo.m4
+
+ACLOCAL_PATH=./nonesuch:./mdir:$(pwd)/nonesuch2:nonesuch3 $ACLOCAL
+$AUTOCONF
+$FGREP 'am--foo' configure
+
+:
diff --git a/t/aclocal-path-precedence.sh b/t/aclocal-path-precedence.sh
new file mode 100644
index 000000000..cefdad87c
--- /dev/null
+++ b/t/aclocal-path-precedence.sh
@@ -0,0 +1,91 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check precedence rules for ACLOCAL_PATH.
+
+am_create_testdir=empty
+. test-init.sh
+
+cat > configure.ac << 'END'
+AC_INIT([foo], [1.0])
+AM_INIT_AUTOMAKE
+FOO_MACRO
+BAR_MACRO
+AC_PROG_LIBTOOL
+AM_GNU_GETTEXT
+END
+
+mkdir mdir1 mdir2 mdir3 sysdir extradir
+
+cat > mdir1/foo1.m4 << 'END'
+AC_DEFUN([FOO_MACRO], [::pass-foo::])
+END
+
+cat > mdir2/foo2.m4 << 'END'
+AC_DEFUN([FOO_MACRO], [::fail-foo::])
+END
+
+cat > mdir1/baz.m4 << 'END'
+AC_DEFUN([BAR_MACRO], [::fail-bar::])
+END
+
+cat > mdir3/bar.m4 << 'END'
+AC_DEFUN([BAR_MACRO], [::pass-bar::])
+END
+
+cat > mdir2/quux.m4 << 'END'
+AC_DEFUN([AM_INIT_AUTOMAKE], [::fail-init::])
+AC_DEFUN([AC_PROG_LIBTOOL], [::pass-libtool::])
+AC_DEFUN([AM_GNU_GETTEXT], [::pass-gettext::])
+END
+
+cat > sysdir/libtool.m4 << 'END'
+AC_DEFUN([AC_PROG_LIBTOOL], [::fail-libtool::])
+END
+
+cat > extradir/gettext.m4 << 'END'
+AC_DEFUN([AM_GNU_GETTEXT], [::fail-gettext::])
+END
+
+echo ./extradir > sysdir/dirlist
+
+ACLOCAL_PATH=mdir1:mdir2 $ACLOCAL -I mdir3 --system-acdir sysdir
+$AUTOCONF
+
+$FGREP '::' configure # For debugging.
+
+# Directories coming first in ACLOCAL_PATH should take precedence
+# over those coming later.
+$FGREP '::pass-foo::' configure
+
+# Directories from '-I' options should take precedence over directories
+# in ACLOCAL_PATH.
+$FGREP '::pass-bar::' configure
+
+# Directories in ACLOCAL_PATH should take precedence over system acdir
+# (typically '${prefix}/share/aclocal'), and any directory added through
+# the 'dirlist' special file.
+$FGREP '::pass-gettext::' configure
+$FGREP '::pass-libtool::' configure
+
+# Directories in ACLOCAL_PATH shouldn't take precedence over the internal
+# automake acdir (typically '${prefix}/share/aclocal-${APIVERSION}').
+$FGREP 'am__api_version' configure
+
+# A final sanity check.
+$FGREP '::fail' configure && exit 1
+
+:
diff --git a/t/aclocal-path.sh b/t/aclocal-path.sh
new file mode 100644
index 000000000..cbaa4ac3c
--- /dev/null
+++ b/t/aclocal-path.sh
@@ -0,0 +1,56 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check basic ACLOCAL_PATH support.
+
+am_create_testdir=empty
+. test-init.sh
+
+cat > configure.ac << 'END'
+AC_INIT
+AM_FOO_MACRO
+AM_BAR_MACRO
+AM_BAZ_MACRO
+END
+
+mkdir mdir1 mdir2 mdir3
+
+cat > mdir1/foo.m4 << 'END'
+AC_DEFUN([AM_FOO_MACRO], [am--foo])
+END
+
+cat > mdir2/bar.m4 << 'END'
+AC_DEFUN([AM_BAR_MACRO], [am--bar])
+END
+
+cat > mdir3/baz.m4 << 'END'
+AC_DEFUN([AM_BAZ_MACRO], [am--baz])
+END
+
+ACLOCAL_PATH=mdir1:./mdir2:$(pwd)/mdir3 $ACLOCAL
+$AUTOCONF
+
+# there should be no m4_include in aclocal.m4, even though ACLOCAL_PATH
+# contains 'mdir1' and './mdir2' as relative directories. Only -I
+# directories should be subject to file inclusion.
+$FGREP m4_include aclocal.m4 && exit 1
+
+$EGREP 'AM_(FOO|BAR|BAZ)_MACRO' configure && exit 1
+$FGREP 'am--foo' configure
+$FGREP 'am--bar' configure
+$FGREP 'am--baz' configure
+
+:
diff --git a/t/aclocal-pr450.sh b/t/aclocal-pr450.sh
new file mode 100644
index 000000000..4c9d22f43
--- /dev/null
+++ b/t/aclocal-pr450.sh
@@ -0,0 +1,49 @@
+#! /bin/sh
+# Copyright (C) 2005-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure aclocal does not fail on configure.ac inclusions that do
+# more than just variable definitions.
+# Report from Peter Breitenlohner (PR/450).
+
+. test-init.sh
+
+cat >configure.ac <<END
+AC_INIT([$me], [1.0])
+m4_include([aconfig.ac])
+FOO
+AC_OUTPUT
+END
+
+cat >aconfig.ac <<'END'
+AM_INIT_AUTOMAKE
+AC_DEFUN([FOO], [echo GREPME])
+sinclude([bconfig.ac])
+END
+
+cat >bconfig.ac <<'END'
+AC_ARG_WITH([grepme], [string])
+END
+
+$ACLOCAL
+$AUTOCONF
+./configure >stdout || { cat stdout; exit 1; }
+cat stdout
+grep GREPME stdout
+grep 'aconfig\.ac' aclocal.m4 && exit 1
+grep 'bconfig\.ac' aclocal.m4 && exit 1
+grep with-grepme configure
+
+:
diff --git a/t/aclocal-print-acdir.sh b/t/aclocal-print-acdir.sh
new file mode 100644
index 000000000..abaee0afc
--- /dev/null
+++ b/t/aclocal-print-acdir.sh
@@ -0,0 +1,31 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test on aclocal's '--print-ac-dir' option.
+
+am_create_testdir=empty
+. test-init.sh
+
+$ACLOCAL --print-ac-dir
+test "$($ACLOCAL --print-ac-dir)" = "$am_system_acdir"
+
+$ACLOCAL --system-acdir /bar --print-ac-dir
+test "$($ACLOCAL --system-acdir /bar --print-ac-dir)" = /bar
+
+$ACLOCAL --automake-acdir /bar --print-ac-dir
+test "$($ACLOCAL --automake-acdir /bar --print-ac-dir)" = "$am_system_acdir"
+
+:
diff --git a/t/aclocal-remake-misc.sh b/t/aclocal-remake-misc.sh
new file mode 100644
index 000000000..fe7385f8d
--- /dev/null
+++ b/t/aclocal-remake-misc.sh
@@ -0,0 +1,74 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure aclocal.m4 is rebuilt whenever a configure
+# dependency changes. Test for acinclude.m4 and VPATH too.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+SOME_DEFS
+AC_CONFIG_FILES([sub/Makefile])
+AC_CONFIG_MACRO_DIR([m4])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+SUBDIRS = sub
+END
+
+mkdir sub
+: > sub/Makefile.am
+
+mkdir m4
+echo 'AC_DEFUN([SOME_DEFS], [])' > m4/somedefs.m4
+echo 'AC_DEFUN([MORE_DEFS], [AC_SUBST([GREPME])])' > m4/moredefs.m4
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --copy --add-missing
+
+mkdir build
+cd build
+
+../configure
+$MAKE
+
+# Modified configure dependencies must be newer than config.status.
+$sleep
+# Update an aclocal.m4 dependency, then make sure all Makefiles
+# are updated, even from a sub-directory.
+echo 'AC_DEFUN([SOME_DEFS], [MORE_DEFS])' > ../m4/somedefs.m4
+# Because aclocal will run again, it should also pick up acinclude.m4.
+echo 'AC_SUBST([METOO])' > ../acinclude.m4
+
+cd sub
+$MAKE
+cd ..
+grep GREPME Makefile
+grep GREPME sub/Makefile
+grep GREPME sub/Makefile
+grep METOO Makefile
+grep METOO sub/Makefile
+grep METOO sub/Makefile
+
+# Make sure configure dependencies are distributed.
+$MAKE distdir
+test -f $me-1.0/m4/moredefs.m4
+test -f $me-1.0/m4/somedefs.m4
+test -f $me-1.0/acinclude.m4
+
+:
diff --git a/t/aclocal-req.sh b/t/aclocal-req.sh
new file mode 100644
index 000000000..dd46a85a6
--- /dev/null
+++ b/t/aclocal-req.sh
@@ -0,0 +1,34 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure macro used in m4 file is included.
+
+. test-init.sh
+
+cat > configure.ac <<EOF
+AC_INIT([$me], [1.0])
+AM_INIT_GUILE_MODULE
+EOF
+
+cat > acinclude.m4 << 'END'
+AC_DEFUN([AM_INIT_GUILE_MODULE], [AM_INIT_AUTOMAKE([whocares])])
+END
+
+$ACLOCAL
+
+grep 'DEFUN.*INIT_AUTOMAKE' aclocal.m4
+
+:
diff --git a/t/aclocal-scan-configure-ac-pr319.sh b/t/aclocal-scan-configure-ac-pr319.sh
new file mode 100644
index 000000000..2e7e10080
--- /dev/null
+++ b/t/aclocal-scan-configure-ac-pr319.sh
@@ -0,0 +1,47 @@
+#! /bin/sh
+# Copyright (C) 2004-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure aclocal scans configure.ac for macro definitions.
+# PR/319.
+
+am_create_testdir=empty
+. test-init.sh
+
+# Start macros with AM_ because that causes aclocal to complain if it
+# cannot find them.
+
+cat > configure.ac << 'END'
+AC_INIT
+m4_include([somedef.m4])
+AC_DEFUN([AM_SOME_MACRO])
+AC_DEFUN([AM_SOME_OTHER_MACRO])
+AM_SOME_MACRO
+AM_SOME_OTHER_MACRO
+AM_MORE_MACRO
+END
+
+mkdir m4
+echo 'AC_DEFUN([AM_SOME_MACRO])' > m4/some.m4
+echo 'AC_DEFUN([AM_SOME_DEF])' > somedef.m4
+echo 'AC_DEFUN([AM_MORE_MACRO], [AC_REQUIRE([AM_SOME_DEF])])' > m4/more.m4
+
+$ACLOCAL -I m4
+$FGREP AM_SOME_MACRO aclocal.m4 && exit 1
+$FGREP AM_MORE_MACRO aclocal.m4 && exit 1
+$FGREP 'm4_include([m4/more.m4])' aclocal.m4
+test 1 = $(grep m4_include aclocal.m4 | wc -l)
+
+:
diff --git a/t/aclocal-serial.sh b/t/aclocal-serial.sh
new file mode 100644
index 000000000..17ed7d359
--- /dev/null
+++ b/t/aclocal-serial.sh
@@ -0,0 +1,137 @@
+#! /bin/sh
+# Copyright (C) 2005-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for --install with #serial numbers.
+
+am_create_testdir=empty
+. test-init.sh
+
+cat > configure.ac << 'END'
+AC_INIT
+AM_MACRO1
+AM_MACRO2
+END
+
+mkdir 1 2 3 4 5 6
+
+cat >1/m1.m4 <<EOF
+#serial 1.8.1230.9
+AC_DEFUN([AM_MACRO1], [:macro11:])
+AC_DEFUN([AM_MACRO2], [:macro21:])
+EOF
+
+cat >2/m1.m4 <<EOF
+#serial 1.8.1231.9
+AC_DEFUN([AM_MACRO1], [:macro12:])
+EOF
+
+cat >3/m2.m4 <<EOF
+#serial 13
+AC_DEFUN([AM_MACRO2], [:macro23:])
+EOF
+
+cat >3/m1.m4 <<EOF
+#serial 1.8.1230.1
+AC_DEFUN([AM_MACRO1], [:macro13:])
+EOF
+
+cat >4/mumble.m4 <<EOF
+#serial 0
+AC_DEFUN([AM_MACRO1], [:macro14:])
+EOF
+
+cat >5/ill-formed.m4 <<EOF
+#serial bla
+#serial .2
+#serial
+AC_DEFUN([AM_MACRO1], [:macro15:])
+EOF
+
+cat >6/after-def.m4 <<EOF
+AC_DEFUN([AM_MACRO1], [:macro16:])
+#serial 1
+EOF
+
+clean_stale ()
+{
+ rm -rf aclocal.m4 configure autom4te*.cache
+}
+
+$ACLOCAL -I 1 -I 2 -I 3 -I 4
+$AUTOCONF
+$FGREP ':macro11:' configure
+$FGREP ':macro21:' configure
+
+clean_stale
+$ACLOCAL -I 1 -I 2 -I 3 -I 4 --install
+$AUTOCONF
+$FGREP ':macro12:' configure
+$FGREP ':macro23:' configure
+
+cp -f aclocal.m4 aclocal-m4.sav
+clean_stale
+mv -f aclocal-m4.sav aclocal.m4
+$ACLOCAL -I 4 -I 1 -I 2 -I 3 --install --dry-run
+$AUTOCONF
+$FGREP ':macro12:' configure
+$FGREP ':macro23:' configure
+
+clean_stale
+$ACLOCAL -I 4 -I 1 -I 2 -I 3 --install
+$AUTOCONF
+$FGREP ':macro14:' configure
+$FGREP ':macro23:' configure
+
+clean_stale
+$ACLOCAL -I 4 -I 1 -I 2 --install 2>stderr && { cat stderr >&2; exit 1; }
+cat stderr >&2
+grep 'macro.*AM_MACRO2.*not found' stderr
+
+clean_stale
+$ACLOCAL -I 4 -I 1 --install
+$AUTOCONF
+$FGREP ':macro14:' configure
+$FGREP ':macro21:' configure
+
+mkdir acdir
+ACLOCAL="$ACLOCAL --system-acdir acdir"
+
+cat >acdir/m1.m4 <<EOF
+#serial 456
+AC_DEFUN([AM_MACRO1], [:macro1d:])
+AC_DEFUN([AM_MACRO2], [:macro2d:])
+EOF
+clean_stale
+$ACLOCAL -I 4 -I 1 --diff=diff >stdout 2>stderr || {
+ cat stderr >&2
+ cat stdout
+ exit 1
+}
+cat stderr >&2
+cat stdout
+grep '#serial 456' stdout
+test ! -e 4/m1.m4
+grep 'installing.*4/m1\.m4' stderr
+
+$ACLOCAL -I 5 2>stderr && { cat stderr >&2; exit 1; }
+cat stderr >&2
+test $(grep -c 'ill-formed serial' stderr) -eq 3
+
+$ACLOCAL -I 6 2>stderr && { cat stderr >&2; exit 1; }
+cat stderr >&2
+grep 'serial.*before any macro definition' stderr
+
+:
diff --git a/t/aclocal-underquoted-defun.sh b/t/aclocal-underquoted-defun.sh
new file mode 100644
index 000000000..2770011c5
--- /dev/null
+++ b/t/aclocal-underquoted-defun.sh
@@ -0,0 +1,37 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Ensure we diagnose underquoted AC_DEFUN's.
+
+am_create_testdir=empty
+. test-init.sh
+
+cat > configure.ac << 'END'
+AC_INIT
+FOO
+END
+
+mkdir m4
+cat >m4/foo.m4 <<EOF
+AC_DEFUN(FOO, [echo foo])
+EOF
+
+$ACLOCAL -I m4 2>stderr && { cat stderr >&2; exit 1; }
+cat stderr >&2
+grep 'underquoted definition.*FOO' stderr
+grep 'warning.*warning' stderr && exit 1
+
+:
diff --git a/t/aclocal-verbose-install.sh b/t/aclocal-verbose-install.sh
new file mode 100644
index 000000000..bcbbcfa6b
--- /dev/null
+++ b/t/aclocal-verbose-install.sh
@@ -0,0 +1,52 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check verbose messages by 'aclocal --install'.
+
+am_create_testdir=empty
+. test-init.sh
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+MY_MACRO_BAR
+MY_MACRO_QUUX
+END
+
+mkdir sys-acdir
+cat > sys-acdir/bar.m4 <<END
+AC_DEFUN([MY_MACRO_BAR], [:])
+END
+cat > sys-acdir/quux.m4 <<END
+AC_DEFUN([MY_MACRO_QUUX], [:])
+END
+
+mkdir foodir
+: > foodir/bar.m4
+
+$ACLOCAL --system-acdir=sys-acdir --install --verbose -I foodir 2>stderr \
+ || { cat stderr >&2; exit 1; }
+cat stderr >&2
+grep ' installing .*sys-acdir/bar\.m4.* to .*foodir/bar\.m4' stderr
+grep ' installing .*sys-acdir/quux\.m4.* to .*foodir/quux\.m4' stderr
+grep ' overwriting .*foodir/bar\.m4.* with .*sys-acdir/bar\.m4' stderr
+grep ' installing .*foodir/quux\.m4.* from .*sys-acdir/quux\.m4' stderr
+
+# Sanity checks.
+ls -l foodir
+grep MY_MACRO_BAR foodir/bar.m4
+grep MY_MACRO_QUUX foodir/quux.m4
+
+:
diff --git a/t/aclocal.sh b/t/aclocal.sh
new file mode 100644
index 000000000..171a179e3
--- /dev/null
+++ b/t/aclocal.sh
@@ -0,0 +1,49 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test on some aclocal options. Report from Alexandre Oliva.
+
+am_create_testdir=empty
+. test-init.sh
+
+echo "AC_INIT([$me], [0]) AM_INIT_AUTOMAKE" > configure.ac
+
+$ACLOCAL --output=fred
+test -f fred
+
+$ACLOCAL --output 2>stderr && { cat stderr >&2; exit 1; }
+cat stderr >&2
+grep 'option.*--output.*requires an argument' stderr
+grep '[Tt]ry.*--help.*for more information' stderr
+
+$ACLOCAL --unknown-option 2>stderr && { cat stderr >&2; exit 1; }
+cat stderr >&2
+grep 'unrecognized option.*--unknown-option' stderr
+grep '[Tt]ry.*--help.*for more information' stderr
+
+$ACLOCAL foobar 2>stderr && { cat stderr >&2; exit 1; }
+cat stderr >&2
+grep 'non-option argument.*foobar' stderr
+grep '[Tt]ry.*--help.*for more information' stderr
+
+$ACLOCAL --ver 2>stderr && { cat stderr >&2; exit 1; }
+cat stderr >&2
+grep 'unrecognized option.*--ver' stderr
+grep '[Tt]ry.*--help.*for more information' stderr
+
+$ACLOCAL --versi
+
+:
diff --git a/t/acsilent.sh b/t/acsilent.sh
new file mode 100644
index 000000000..cae24ba59
--- /dev/null
+++ b/t/acsilent.sh
@@ -0,0 +1,36 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure there are no spurious acinclude warnings.
+
+. test-init.sh
+
+cat >configure.ac <<EOF
+AC_INIT([$me], [1.0])
+AM_INIT_GUILE_MODULE
+EOF
+
+cat > acinclude.m4 << 'END'
+AC_DEFUN([AM_INIT_GUILE_MODULE], [
+AM_INIT_AUTOMAKE([dist-xz])
+AC_CONFIG_AUX_DIR(..)
+module=[$1]
+AC_SUBST(module)])
+END
+
+$ACLOCAL >output 2>&1 || { cat output; exit 1; }
+cat output
+test ! -s output
diff --git a/t/acsubst.sh b/t/acsubst.sh
new file mode 100644
index 000000000..3ebc5ed5f
--- /dev/null
+++ b/t/acsubst.sh
@@ -0,0 +1,31 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_SUBST([FOOBAR_LDFLAGS],[blablabla])
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = mumble
+mumble_SOURCES = a.c b.c d.h
+mumble_LDFLAGS = $(FOOBAR_LDFLAGS)
+END
+
+$ACLOCAL
+$AUTOMAKE -a
diff --git a/t/acsubst2.sh b/t/acsubst2.sh
new file mode 100644
index 000000000..fd5d62841
--- /dev/null
+++ b/t/acsubst2.sh
@@ -0,0 +1,31 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_SUBST([FOOBAR_CFLAGS],[blablabla])
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = mumble
+mumble_SOURCES = a.c b.c d.h
+mumble_CFLAGS = $(FOOBAR_CFLAGS)
+END
+
+$ACLOCAL
+$AUTOMAKE -a
diff --git a/t/add-missing-install-sh.sh b/t/add-missing-install-sh.sh
new file mode 100644
index 000000000..12ba626e6
--- /dev/null
+++ b/t/add-missing-install-sh.sh
@@ -0,0 +1,41 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for this bug:
+# automake: Makefile.am: required file "../../install-sh" not found; installing
+# This also makes sure that install-sh is created in the correct directory.
+
+. test-init.sh
+
+: > Makefile.am
+rm -f install-sh
+
+# Since the default path includes '../..', we must run this test in
+# yet another subdir.
+mkdir frob
+mv Makefile.am configure.ac frob/
+cd frob
+
+$ACLOCAL
+$AUTOMAKE --add-missing >output 2>&1 || { cat output; exit 1; }
+cat output
+
+# Only one '/' should appear in the output.
+grep '/.*/' output && exit 1
+
+test -f install-sh
+
+:
diff --git a/t/add-missing-multiple.sh b/t/add-missing-multiple.sh
new file mode 100644
index 000000000..7d8e7b9b6
--- /dev/null
+++ b/t/add-missing-multiple.sh
@@ -0,0 +1,47 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure Automake will install several copies of required files if needed.
+# Reported by Marius Vollmer.
+
+. test-init.sh
+
+cat >> configure.ac <<EOF
+AC_CONFIG_FILES([one/Makefile two/Makefile])
+AC_OUTPUT
+EOF
+
+mkdir one
+mkdir two
+
+echo 'SUBDIRS = one two' > Makefile.am
+echo 'info_TEXINFOS = mumble.texi' > one/Makefile.am
+cat >one/mumble.texi <<'END'
+@setfilename mumble.info
+@include version.texi
+END
+
+cp one/Makefile.am one/mumble.texi two
+
+$ACLOCAL
+$AUTOMAKE --add-missing --copy
+
+test -f one/mdate-sh
+test -f one/texinfo.tex
+test -f two/mdate-sh
+test -f two/texinfo.tex
+
+:
diff --git a/t/add-missing.tap b/t/add-missing.tap
new file mode 100644
index 000000000..4276f3fb1
--- /dev/null
+++ b/t/add-missing.tap
@@ -0,0 +1,382 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test that automake complains when required auxiliary files are not
+# found, and that 'automake --add-missing' installs the files (and only
+# the files) it's supposed to, and that these files are symlinked by
+# default, but copied if the '--copy' option is used.
+
+am_create_testdir=empty
+. test-init.sh
+
+plan_ "later"
+
+build_aux=build-aux
+ocwd=$(pwd) || fatal_ "cannot get current working directory"
+
+# Try to improve readability of displayed diffs.
+if diff -u /dev/null /dev/null; then
+ am_diff='diff -u'
+elif diff -c /dev/null /dev/null; then
+ am_diff='diff -c'
+else
+ am_diff=diff
+fi
+
+# MinGW/MSYS lacks real symlinks, so we'll have to skip some checks
+# on that system. More details below.
+echo dummy > foo
+if ln -s foo bar && test -h bar; then
+ have_true_symlinks=yes
+else
+ have_true_symlinks=no
+fi
+rm -f foo bar
+
+cat > configure.stub << END
+AC_INIT([$me], [1.0])
+AC_CONFIG_AUX_DIR([$build_aux])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile])
+END
+
+# Pre-compute aclocal.m4, in order to save several aclocal invocations.
+cat configure.stub - > configure.ac <<'END'
+AC_PROG_CC
+AC_CANONICAL_BUILD
+AC_CANONICAL_HOST
+AC_CANONICAL_TARGET
+AC_CANONICAL_SYSTEM
+AM_PATH_LISPDIR
+AM_PATH_PYTHON
+AC_OUTPUT
+END
+$ACLOCAL || framework_failure_ "cannot pre-compute aclocal.m4"
+
+rm -rf configure.ac autom4te*.cache
+mv aclocal.m4 aclocal.stub
+
+# For debugging.
+cat configure.stub
+cat aclocal.stub
+
+check_count=0
+
+# This is hacky and ugly and complex, but allow us to organize our tests
+# below in a more "declarative fashion". All in all, a good trade-off.
+check_ ()
+{
+ set +x # Temporary disable shell traces to remove noise from log files.
+ check_count=$(($check_count + 1))
+ echo check count: $check_count
+ override=no
+ run_aclocal=no
+ fetch_file=
+ while test $# -gt 0; do
+ case $1 in
+ --override) override=yes;;
+ --run-aclocal) run_aclocal=yes;;
+ --fetch-file) fetch_file=$2; shift;;
+ *) framework_failure_ "check_: invalid argument '$1'";;
+ esac
+ shift
+ done
+ mkdir testdir-$check_count
+ cd testdir-$check_count
+ # Directory for common data files (specific to the current test, but
+ # shared by its "subtests").
+ mkdir generic
+ cd generic
+ : > Makefile.am
+ if test $override = yes; then
+ : > configure.ac
+ else
+ cp "$ocwd"/configure.stub configure.ac
+ fi
+ test -z "$fetch_file" || cp "$ocwd/$fetch_file" .
+ # Read description of "test scenario" from standard input.
+ what= line= name= files=
+ while read line; do
+ case $line in
+ '== Name ==') what=NAME;;
+ '== Makefile.am ==') what=Makefile.am;;
+ '== configure.ac ==') what=configure.ac;;
+ '== Files ==') what=LIST;;
+ '==*') framework_failure_ "invalid input line: $line";;
+ ''|'#%'*) : Empty line or ad-hoc comment, ignore. ;;
+ *)
+ if test $what = LIST; then
+ files="$files $line"
+ elif test $what = NAME; then
+ name=$line
+ else
+ printf '%s\n' "$line" >> "$what"
+ fi
+ ;;
+ esac
+ done
+ test -n "$name" || fatal_ "name of a test case not specified"
+ if test $run_aclocal = yes; then
+ if $ACLOCAL; then
+ ok_ "[$name] aclocal.m4 rebuilt"
+ echo == aclocal.m4 ==
+ cat aclocal.m4
+ else
+ not_ok_ "[$name] aclocal failure, aclocal.m4 not rebuilt"
+ fi
+ else
+ cp "$ocwd"/aclocal.stub aclocal.m4
+ fi
+ echo == Makefile.am ==
+ cat Makefile.am
+ echo == configure.ac ==
+ cat configure.ac
+ echo Expected files: $files
+ mkdir "$build_aux"
+ cd ..
+ # End of "test scenario" setup.
+ set -x # Re-enable shell traces.
+ pwd
+ ls -l generic
+ # Test once with '--copy', once without.
+ for action in link copy; do
+ case $action in
+ link) opts='--add-missing';;
+ copy) opts='-a --copy';;
+ *) fatal_ "invalid value '$action' for \$action";;
+ esac
+ pfx="[$action $name]"
+ cp -R generic $action
+ cd $action
+ # If the required auxiliary files are missing, and automake is
+ # not told to install them, it should complain and error out,
+ # and also give a useful suggestion.
+ AUTOMAKE_fails -d "$pfx missing files, automake fails"
+ for f in $files; do
+ command_ok_ \
+ "$pfx warn about missing file $f" \
+ $FGREP "required file '$build_aux/$f' not found" stderr
+ # Suggest the user to use '--add-missing'.
+ command_ok_ \
+ "$pfx suggest --add-missing for $f" \
+ grep ".*--add-missing.* install .*'$f'" stderr
+ done
+ # No files should be automatically installed by automake if it
+ # is not told to.
+ if ls "$build_aux" | grep .; then r='not ok'; else r=ok; fi
+ result_ "$r" "$pfx no extra files installed"
+ AUTOMAKE_run -d "$pfx automake run successfully" -- $opts
+ ls -l . $build_aux
+ # The expected files should get installed correctly (e.g., no
+ # broken symlinks).
+ for f in $files; do
+ command_ok_ \
+ "$pfx file $f installed" \
+ test -f $build_aux/$f
+ done
+ # Automake should inform about which files it's installing.
+ for f in $files; do
+ command_ok_ \
+ "$pfx report installation of $f" \
+ $FGREP ": installing '$build_aux/$f'" stderr
+ done
+ # Only the expected files should be installed. But automake always
+ # require 'missing' and 'install-sh', so account for them.
+ all_files="install-sh missing $files"
+ for f in $all_files; do echo $f; done | sort | uniq > files.exp
+ (cd $build_aux && ls) | sort > files.got
+ cat files.exp
+ cat files.got
+ command_ok_ \
+ "$pfx all and only expected files installed" \
+ $am_diff files.exp files.got
+ # The files should be copied by '--copy' and symlinked otherwise.
+ # But these checks make no sense on systems like MSYS/MinGW where
+ # there are no true symlinks ('ln -s' behaves like 'cp -p'), so be
+ # ready to skip the checks in that case. See automake bug#10441.
+ for f in $files; do
+ if test $have_true_symlinks = no; then
+ skip_ -r "system lacks true symlinks" "$pfx $f is a symlink or not"
+ else
+ if test -h $build_aux/$f; then
+ is_symlink=yes
+ else
+ is_symlink=no
+ fi
+ case $action,$is_symlink in
+ link,yes) ok_ "$pfx $f has been symlinked" ;;
+ link,no) not_ok_ "$pfx $f has not been symlinked" ;;
+ copy,yes) not_ok_ "$pfx $f has been symlinked" ;;
+ copy,no) ok_ "$pfx $f has not been symlinked" ;;
+ *) fatal_ "invalid condition in case" ;;
+ esac
+ fi
+ done
+ # Now that the required auxiliary files have been installed, automake
+ # should not complain anymore even if the '--add-missing' option is
+ # not used.
+ AUTOMAKE_run -d "$pfx automake finds all added files"
+ cd ..
+ done # for action in link copy
+ cd "$ocwd" || fatal_ "cannot chdir back to top-level test directory"
+}
+
+# Automake should always and unconditionally require the 'missing'
+# and 'install-sh' scripts.
+check_ <<'END'
+== Name ==
+minimal
+== Files ==
+install-sh missing
+END
+
+check_ <<'END'
+== Name ==
+depcomp/C
+== Files ==
+depcomp
+compile
+== configure.ac ==
+AC_PROG_CC
+== Makefile.am ==
+bin_PROGRAMS = foo
+END
+
+check_ <<'END'
+== Name ==
+depcomp/C++
+== Files ==
+depcomp
+== configure.ac ==
+AC_PROG_CXX
+== Makefile.am ==
+bin_PROGRAMS = foo
+foo_SOURCES = foo.cc
+END
+
+check_ --run-aclocal <<'END'
+== Name ==
+compile
+== Files ==
+compile
+== configure.ac ==
+# Using AC_PROG_CC in configure.ac should be enough.
+# No need to also define, say, xxx_PROGRAMS in Makefile.am.
+AC_PROG_CC
+END
+
+# For config.guess and config.sub.
+for mach in build host target system; do
+ MACH=$(echo "$mach" | LC_ALL=C tr '[a-z]' '[A-Z]')
+ check_ <<END
+== Name ==
+cfg-$mach
+== Files ==
+config.sub
+config.guess
+== configure.ac ==
+AC_CANONICAL_$MACH
+END
+done
+
+check_ <<'END'
+== Name ==
+ylwrap/Lex
+== Files ==
+ylwrap
+compile
+== configure.ac ==
+AC_PROG_CC
+AC_PROG_LEX
+== Makefile.am ==
+AUTOMAKE_OPTIONS = no-dependencies
+bin_PROGRAMS = foo
+foo_SOURCES = foo.l
+END
+
+check_ <<'END'
+== Name ==
+ylwrap/Yacc
+== Files ==
+ylwrap
+compile
+== configure.ac ==
+AC_PROG_CC
+AC_PROG_YACC
+== Makefile.am ==
+AUTOMAKE_OPTIONS = no-dependencies
+bin_PROGRAMS = foo
+foo_SOURCES = foo.y
+END
+
+echo '@setfilename foo.info' > foo.texi
+check_ --fetch-file foo.texi <<'END'
+== Name ==
+Texinfo
+== Files ==
+texinfo.tex
+== Makefile.am ==
+info_TEXINFOS = foo.texi
+END
+
+echo '@include version.texi' >> foo.texi
+check_ --fetch-file foo.texi <<'END'
+== Name ==
+Texinfo/mdate-sh
+== Files ==
+mdate-sh
+texinfo.tex
+== Makefile.am ==
+info_TEXINFOS = foo.texi
+END
+
+rm -f foo.texi
+
+check_ <<'END'
+== Name ==
+py-compile
+== Files ==
+py-compile
+== configure.ac ==
+AM_PATH_PYTHON
+== Makefile.am ==
+python_PYTHON = foo.py
+END
+
+# Try few unrelated auxiliary scripts together.
+check_ <<'END'
+== Name ==
+misc
+== Files ==
+py-compile
+depcomp
+ylwrap
+config.sub
+config.guess
+== configure.ac ==
+AC_CANONICAL_BUILD
+AC_CANONICAL_HOST
+AC_PROG_CXX
+== Makefile.am ==
+PYTHON = python
+pythondir = $(prefix)/py
+YACC = bison -y
+bin_PROGRAMS = foo
+foo_SOURCES = bar.yxx baz.c++
+python_PYTHON = zardoz.py
+END
+
+:
diff --git a/t/all.sh b/t/all.sh
new file mode 100644
index 000000000..bb908940f
--- /dev/null
+++ b/t/all.sh
@@ -0,0 +1,33 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure several *-local's in a single rule work.
+
+. test-init.sh
+
+targets='all install-exec install-data uninstall'
+echo "$targets:" | sed -e 's/[ :]/-local&/g' > Makefile.am
+cat Makefile.am # For debugging.
+
+$ACLOCAL
+$AUTOMAKE
+
+for target in $targets; do
+ grep "${target}-local" Makefile.in # For debugging.
+ grep "${target}-am:.*${target}-local" Makefile.in
+done
+
+:
diff --git a/t/all2.sh b/t/all2.sh
new file mode 100644
index 000000000..a24e16cdc
--- /dev/null
+++ b/t/all2.sh
@@ -0,0 +1,32 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure all-local and other -local targets work correctly.
+
+. test-init.sh
+
+$ACLOCAL
+
+targets='all install-exec install-data uninstall'
+for target in $targets; do
+ : Doing $target
+ echo "${target}-local:" > Makefile.am
+ $AUTOMAKE
+ grep "${target}-local ${target}-local" Makefile.in && exit 1
+ grep "${target}-am:.*${target}-local" Makefile.in
+done
+
+:
diff --git a/t/alloca.sh b/t/alloca.sh
new file mode 100644
index 000000000..f5d654bdc
--- /dev/null
+++ b/t/alloca.sh
@@ -0,0 +1,40 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure we complain if @ALLOCA@ is used without being set in configure.ac
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AM_PROG_AR
+AC_PROG_CC
+END
+
+cat > Makefile.am << 'END'
+noinst_LIBRARIES = libtu.a
+libtu_a_SOURCES =
+libtu_a_LIBADD = @ALLOCA@
+END
+
+: > alloca.c
+: > ar-lib
+
+$ACLOCAL
+AUTOMAKE_fails
+grep '^Makefile\.am:1:.*define .*RANLIB.* add .*AC_PROG_RANLIB' stderr
+grep '^Makefile\.am:3:.*define .*ALLOCA.* add .*AC_FUNC_ALLOCA' stderr
+
+:
diff --git a/t/alloca2.sh b/t/alloca2.sh
new file mode 100644
index 000000000..cf05f9632
--- /dev/null
+++ b/t/alloca2.sh
@@ -0,0 +1,40 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure we complain if @LTALLOCA@ is used without being set in configure.ac
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_PROG_CC
+AM_PROG_AR
+END
+
+cat > Makefile.am << 'END'
+noinst_LTLIBRARIES = libtu.la
+libtu_la_SOURCES =
+libtu_la_LIBADD = @LTALLOCA@
+END
+
+: > alloca.c
+: > ar-lib
+
+$ACLOCAL
+AUTOMAKE_fails
+grep '^Makefile\.am:1:.*define.*LIBTOOL.* add .*LT_INIT' stderr
+grep '^Makefile\.am:3:.*LTALLOCA' stderr
+
+:
diff --git a/t/alpha.sh b/t/alpha.sh
new file mode 100644
index 000000000..9fb704b59
--- /dev/null
+++ b/t/alpha.sh
@@ -0,0 +1,71 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure README-alpha is distributed when appropriate. Report from
+# Jim Meyering.
+. test-init.sh
+
+cat > configure.ac << 'END'
+AC_INIT([alpha], [1.0a])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile])
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = gnits
+SUBDIRS = sub
+check-local: distdir
+ test -f $(distdir)/README-alpha
+ test -f $(distdir)/sub/README
+ test ! -f $(distdir)/sub/README-alpha
+ : > works
+END
+
+mkdir sub
+cat > sub/Makefile.am << 'END'
+AUTOMAKE_OPTIONS = gnits
+END
+
+: > README-alpha
+: > sub/README-alpha
+: > sub/README
+
+# Gnits stuff.
+: > INSTALL
+: > NEWS
+: > README
+: > COPYING
+: > AUTHORS
+: > ChangeLog
+: > THANKS
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+
+# "make distdir" should fail because NEWS does not mention 1.0a
+run_make -E -e FAIL check
+grep 'NEWS not updated' stderr
+test ! -e works
+
+echo 'alpha 1.0a released' > NEWS
+$MAKE check
+test -f works
+
+:
diff --git a/t/alpha2.sh b/t/alpha2.sh
new file mode 100644
index 000000000..ca7d0177a
--- /dev/null
+++ b/t/alpha2.sh
@@ -0,0 +1,59 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Another check for README-alpha support. This time it is requested
+# from configure.ac. Report from Akim Demaille.
+
+. test-init.sh
+
+cat > configure.ac << 'END'
+AC_INIT([alpha], [1.0b])
+AM_INIT_AUTOMAKE([readme-alpha])
+AC_CONFIG_FILES([Makefile sub/Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+SUBDIRS = sub
+check-local: distdir
+ test -f $(distdir)/README-alpha
+ test -f $(distdir)/sub/README
+ test ! -f $(distdir)/sub/README-alpha
+ : > works
+END
+
+mkdir sub
+: > sub/Makefile.am
+
+: > README-alpha
+: > sub/README-alpha
+: > sub/README
+
+# Gnits stuff.
+: > INSTALL
+: > NEWS
+: > README
+: > COPYING
+: > AUTHORS
+: > ChangeLog
+: > THANKS
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+$MAKE check
+test -f works
diff --git a/t/am-config-header.sh b/t/am-config-header.sh
new file mode 100644
index 000000000..af7d6226f
--- /dev/null
+++ b/t/am-config-header.sh
@@ -0,0 +1,50 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that the obsolete macro AM_CONFIG_HEADER still works.
+
+. test-init.sh
+
+cat > Makefile.am <<'END'
+check-local:
+ test -f oldconf.h
+ test -f $(srcdir)/oldconf.in
+END
+
+cat >> configure.ac <<'END'
+AM_CONFIG_HEADER([oldconf.h:oldconf.in])
+AC_OUTPUT
+END
+
+$ACLOCAL -Wno-obsolete
+
+$AUTOCONF -Werror -Wall 2>stderr && { cat stderr >&2; exit 1; }
+cat stderr >&2
+grep "^configure\.ac:4:.*'AM_CONFIG_HEADER'.*obsolete" stderr
+grep "'AC_CONFIG_HEADERS'.* instead" stderr
+
+$AUTOCONF -Werror -Wall -Wno-obsolete
+
+$AUTOHEADER
+test -f oldconf.in
+
+$AUTOMAKE
+
+./configure
+$MAKE check-local
+$MAKE distcheck
+
+:
diff --git a/t/am-default-source-ext.sh b/t/am-default-source-ext.sh
new file mode 100644
index 000000000..082c7a1fb
--- /dev/null
+++ b/t/am-default-source-ext.sh
@@ -0,0 +1,87 @@
+#! /bin/sh
+# Copyright (C) 2008-2017 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 <https://www.gnu.org/licenses/>.
+
+# AM_DEFAULT_SOURCE_EXT
+
+required='cc c++'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_CXX
+AC_CONFIG_FILES([sub/Makefile sub2/Makefile])
+AM_CONDITIONAL([COND], [:])
+AC_OUTPUT
+END
+
+mkdir sub sub2
+
+cat > Makefile.am << 'END'
+SUBDIRS = sub sub2
+bin_PROGRAMS = foo
+END
+
+cat > sub/Makefile.am << 'END'
+bin_PROGRAMS = bar baz
+AM_DEFAULT_SOURCE_EXT = .cpp
+END
+
+cat > sub2/Makefile.am << 'END'
+bin_PROGRAMS = bla
+if COND
+AM_DEFAULT_SOURCE_EXT = .foo .quux
+endif
+SUFFIXES = .foo .c
+.foo.c:
+ cat $< >$@
+BUILT_SOURCES = bla.c
+CLEANFILES = bla.c
+END
+
+cat > foo.c << 'END'
+int main () { return 0; }
+END
+
+cp foo.c sub/bar.cpp
+cp foo.c sub/baz.cpp
+cp foo.c sub2/bla.foo
+
+$ACLOCAL
+$AUTOCONF
+
+# Conditional AM_DEFAULT_SOURCE_EXT does not work yet :-(
+# (this limitation could be lifted).
+AUTOMAKE_fails --add-missing
+grep 'defined conditionally' stderr
+
+sed '/^if/d; /^endif/d' sub2/Makefile.am > t
+mv -f t sub2/Makefile.am
+
+# AM_DEFAULT_SOURCE_EXT can only assume one value
+# (lifting this limitation is not such a good idea).
+AUTOMAKE_fails --add-missing
+grep 'at most one value' stderr
+
+sed 's/ \.quux//' sub2/Makefile.am > t
+mv -f t sub2/Makefile.am
+
+$AUTOMAKE --add-missing
+
+./configure
+$MAKE
+$MAKE distcheck
+
+:
diff --git a/t/am-include-only-one-generated-fragment.sh b/t/am-include-only-one-generated-fragment.sh
new file mode 100644
index 000000000..99c8cb85a
--- /dev/null
+++ b/t/am-include-only-one-generated-fragment.sh
@@ -0,0 +1,48 @@
+#! /bin/sh
+# Copyright (C) 2014-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that inclusion of only one '.am' that can be regenerated via
+# a user-defined Makefile rule does not incur in spurious automake
+# warnings about "target redefinition".
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+include foobar.am
+$(srcdir)/foobar.am: $(srcdir)/touch.sh
+ $(SHELL) $(srcdir)/touch.sh $(srcdir)/foobar.am
+EXTRA_DIST = touch.sh
+END
+
+mkdir sub
+cat > sub/Makefile.am <<'END'
+include $(top_srcdir)/quux.am
+$(top_srcdir)/quux.am: $(top_srcdir)/touch.sh
+ $(SHELL) $(top_srcdir)/touch.sh $@
+END
+
+: > foobar.am
+: > quux.am
+
+$ACLOCAL
+$AUTOMAKE
+
+:
diff --git a/t/am-macro-not-found.sh b/t/am-macro-not-found.sh
new file mode 100644
index 000000000..e5480d992
--- /dev/null
+++ b/t/am-macro-not-found.sh
@@ -0,0 +1,25 @@
+#! /bin/sh
+# Copyright (C) 1997-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to see if aclocal correctly reports missing AM_ macro.
+
+. test-init.sh
+
+echo AM_ZARDOZ >> configure.ac
+
+$ACLOCAL 2>stderr && { cat stderr >&2; exit 1; }
+cat stderr
+grep 'configure.ac:.*AM_ZARDOZ.*not found' stderr
diff --git a/t/am-missing-prog.sh b/t/am-missing-prog.sh
new file mode 100644
index 000000000..59a61b24d
--- /dev/null
+++ b/t/am-missing-prog.sh
@@ -0,0 +1,97 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test AM_MISSING_PROG.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AM_MISSING_PROG([NO_SUCH_COMMAND], [am-none-none])
+AM_MISSING_PROG([MISMATCHED_COMMAND], [am-exit-63])
+AM_MISSING_PROG([OVERRIDDEN_COMMAND], [am-none-none])
+AM_MISSING_PROG([COMMAND_FOUND], [my-command])
+AC_OUTPUT
+END
+
+mkdir bin
+cat > bin/am-exit-63 <<'END'
+#!/bin/sh
+echo "Oops, I'm too old"
+exit 63
+END
+cat > bin/am-overridden <<'END'
+#!/bin/sh
+echo "Hey, I'm OK!"
+exit 0
+END
+cat > bin/my-command <<'END'
+#!/bin/sh
+echo SNAFU
+exit 0
+END
+chmod a+x bin/*
+PATH=$(pwd)/bin$PATH_SEPARATOR$PATH; export PATH
+
+cat > Makefile.am <<'END'
+# Different for different targets, for the sake of parallel make.
+o = $@-stdout
+e = $@-stderr
+
+debug_info = grep . $@-stdout $@-stderr
+status_is = $(debug_info); echo $@: st=$$st; test $$st -eq
+
+w_mis = 'am-none-none' is needed, and is missing on your system
+w_old = 'am-exit-63' is needed, and is probably too old
+
+test1:
+ st=0; $(NO_SUCH_COMMAND) >$o 2>$e || st=$$?; $(status_is) 127
+ grep "^WARNING: $(w_mis)" $e
+ test ! -s $o
+test2:
+ st=0; $(MISMATCHED_COMMAND) >$o 2>$e || st=$$?; $(status_is) 63
+ grep "^WARNING: $(w_old)" $e
+ test "`cat $o`" = "Oops, I'm too old"
+test3:
+ st=0; $(OVERRIDDEN_COMMAND) >$o 2>$e || st=$$?; $(status_is) 0
+ st=0; $(OVERRIDDEN_COMMAND) >$o 2>$e || st=$$?; \
+ test ! -s $e
+ test "`cat $o`" = "Hey, I'm OK!"
+test4:
+ st=0; $(COMMAND_FOUND) >$o 2>$e || st=$$?; $(status_is) 0
+ test ! -s $e
+ test "`cat $o`" = SNAFU
+check-local: test1 test2 test2 test4
+.PHONY: test1 test2 test2 test4
+CLEANFILES = test[1234]-stdout test[1234]-stderr
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure OVERRIDDEN_COMMAND=am-overridden
+
+$FGREP COMMAND Makefile.in Makefile # For debugging.
+
+grep "^NO_SUCH_COMMAND = \${SHELL} .*/missing .*am-none-none" Makefile
+grep "^MISMATCHED_COMMAND = \${SHELL} .*/missing .*am-exit-63" Makefile
+grep "^COMMAND_FOUND = \${SHELL} .*/missing .*my-command" Makefile
+grep '^OVERRIDDEN_COMMAND = am-overridden *$' Makefile
+
+$MAKE test1 test2 test3 test4
+$MAKE distcheck DISTCHECK_CONFIGURE_FLAGS='OVERRIDDEN_COMMAND=am-overridden'
+
+:
diff --git a/t/am-prog-cc-c-o.sh b/t/am-prog-cc-c-o.sh
new file mode 100644
index 000000000..74e973214
--- /dev/null
+++ b/t/am-prog-cc-c-o.sh
@@ -0,0 +1,126 @@
+#! /bin/sh
+# Copyright (C) 2013-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that uses of the obsolescent AM_PROG_CC_C_O macro doesn't
+# cause spurious warnings or errors. Suggested by Eric Blake.
+
+# We need gcc for for two reasons:
+# 1. to ensure our C compiler grasps "-c -o" together.
+# 2. to be able to later fake a dumb compiler not grasping that
+# (done with 'cc-no-c-o' script below, which required gcc).
+required=gcc
+. test-init.sh
+
+echo bin_PROGRAMS = foo > Makefile.am
+echo 'int main (void) { return 0; }' > foo.c
+
+cp configure.ac configure.bak
+
+cat > acinclude.m4 <<'END'
+AC_DEFUN([AM_TWEAKED_OUTPUT], [
+# For debugging.
+printf "CC = '%s'\\n" "$CC"
+# Make sure that $CC can be used after AM_PROG_CC_C_O.
+$CC --version || exit 1
+$CC -v || exit 1
+# $CC rewrite should only take place on time.
+case " $CC " in
+ *" compile"*" compile"*) AC_MSG_ERROR([CC rewritten twice]);;
+esac
+AC_OUTPUT
+])
+END
+
+# ---
+
+cat configure.bak - > configure.ac << 'END'
+dnl It's OK to call AM_PROG_CC_C_O after AC_PROG_CC.
+AC_PROG_CC
+AM_PROG_CC_C_O
+AM_TWEAKED_OUTPUT
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+./configure >stdout || { cat stdout; exit 1; }
+cat stdout
+if test "$AM_TESTSUITE_SIMULATING_NO_CC_C_O" != no; then
+ $EGREP 'understands? -c and -o together.* no$' stdout
+else
+ $EGREP 'understands? -c and -o together.* yes$' stdout
+fi
+
+# No repeated checks please.
+test $(grep -c ".*-c['\" ].*-o['\" ]" stdout) -eq 1
+
+$MAKE
+$MAKE maintainer-clean
+rm -rf autom4te*.cache
+
+# ---
+
+cat configure.bak - > configure.ac << 'END'
+dnl It's also OK to call AM_PROG_CC_C_O *before* AC_PROG_CC.
+AM_PROG_CC_C_O
+AC_PROG_CC
+AM_TWEAKED_OUTPUT
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+./configure >stdout || { cat stdout; exit 1; }
+cat stdout
+if test "$AM_TESTSUITE_SIMULATING_NO_CC_C_O" != no; then
+ $EGREP 'understands? -c and -o together.* no$' stdout
+else
+ $EGREP 'understands? -c and -o together.* yes$' stdout
+fi
+
+# Repeated checks are OK in this case, but should be cached.
+test $(grep ".*-c['\" ].*-o['\" ]" stdout \
+ | $FGREP -v ' (cached) ' | wc -l) -eq 1
+
+$MAKE
+$MAKE maintainer-clean
+rm -rf autom4te*.cache
+
+# ---
+
+cat configure.bak - > configure.ac << 'END'
+dnl It's also OK to call AM_PROG_CC_C_O *without* AC_PROG_CC.
+AM_PROG_CC_C_O
+AM_TWEAKED_OUTPUT
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+# Make sure the compiler doesn't understand '-c -o'
+CC=$am_testaux_builddir/cc-no-c-o; export CC
+
+./configure >stdout || { cat stdout; exit 1; }
+cat stdout
+$EGREP 'understands? -c and -o together.* no$' stdout
+# No repeated checks please.
+test $(grep -c ".*-c['\" ].*-o['\" ]" stdout) -eq 1
+$MAKE
+
+:
diff --git a/t/am-prog-cc-stdc.sh b/t/am-prog-cc-stdc.sh
new file mode 100644
index 000000000..4f01f70ec
--- /dev/null
+++ b/t/am-prog-cc-stdc.sh
@@ -0,0 +1,44 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that the obsolete macro the obsolete macro AM_PROG_CC_STDC
+# still works.
+
+required=gcc
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AM_PROG_CC_STDC
+AC_OUTPUT
+END
+
+echo bin_PROGRAMS = foo > Makefile.am
+
+$ACLOCAL
+$AUTOMAKE
+
+$AUTOCONF -Wnone -Wobsolete -Werror 2>stderr && { cat stderr >&2; exit 1; }
+cat stderr >&2
+grep "^configure\.ac:4:.*'AM_PROG_CC_STDC'.*obsolete" stderr
+grep "'AC_PROG_CC'.* instead" stderr
+
+echo 'int main (void) { return 0; }' > foo.c
+
+./configure
+$MAKE
+$MAKE distcheck
+
+:
diff --git a/t/am-prog-mkdir-p.sh b/t/am-prog-mkdir-p.sh
new file mode 100644
index 000000000..a99dd5aa2
--- /dev/null
+++ b/t/am-prog-mkdir-p.sh
@@ -0,0 +1,90 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that the AM_PROG_MKDIR_P macro is deprecated, but still works.
+# We should should also still define $(mkdir_p), for backward
+# compatibility.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_CONFIG_FILES([sub/Makefile])
+AM_PROG_MKDIR_P
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+SUBDIRS = sub
+all-local:
+ $(MKDIR_P) . dir1/a
+ $(mkdir_p) . dir2/b
+ @MKDIR_P@ . dir3/c
+ @mkdir_p@ . dir4/d
+check-local: all
+ test -d dir1/a
+ test -d dir2/b
+ test -d dir3/c
+ test -d dir4/d
+ test -d dir5/e
+ test -d dir5/f
+ test -d dir5/g
+END
+
+mkdir sub
+cat > sub/Makefile.am << 'END'
+# Even '$(mkdir_p)' should continue to work also in subdir makefiles.
+all-local:
+ $(MKDIR_P) .. ../dir5/d
+ $(mkdir_p) .. ../dir5/e
+ @MKDIR_P@ .. ../dir5/f
+ @mkdir_p@ .. ../dir5/g
+END
+
+$ACLOCAL
+$AUTOCONF -Wnone -Wobsolete -Werror 2>stderr && { cat stderr >&2; exit 1; }
+cat stderr >&2
+grep "^configure\\.ac:5:.*'AM_PROG_MKDIR_P'.*deprecated" stderr
+grep "[Aa]utoconf-provided 'AC_PROG_MKDIR_P'.* instead" stderr
+grep "'\$(MKDIR_P)' instead of '\$(mkdir_p)'" stderr
+
+$AUTOCONF -Wno-obsolete
+$AUTOMAKE
+
+./configure
+$MAKE check-local
+$MAKE distcheck
+
+# Now try using AC_PROG_MKDIR_P, but keeping the occurrences of
+# $(mkdir_p) and @mkdir_p@. This is to check against a regression
+# that hit us with Gettext 0.18.2.
+$MAKE maintainer-clean
+rm -rf autom4te*.cache
+
+sed 's/AM_PROG_MKDIR/AC_PROG_MKDIR/' configure.ac > t
+diff configure.ac t && fatal_ "failed to edit configure.ac"
+mv -f t configure.ac
+
+$ACLOCAL 2>stderr \
+ && $AUTOCONF -Wall -Werror 2>>stderr \
+ && test ! -s stderr \
+ || { cat stderr >&2; exit 1; }
+
+$AUTOMAKE
+./configure
+$MAKE check-local
+$MAKE distcheck
+
+:
diff --git a/t/am-tests-environment.sh b/t/am-tests-environment.sh
new file mode 100644
index 000000000..1e900ae02
--- /dev/null
+++ b/t/am-tests-environment.sh
@@ -0,0 +1,90 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# parallel-tests: check AM_TESTS_ENVIRONMENT support, and its
+# interactions with TESTS_ENVIRONMENT.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_MKDIR_P
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TEST_EXTENSIONS = .sh .test
+TESTS = foo.test bar.sh
+SH_LOG_COMPILER = sh
+AM_TESTS_ENVIRONMENT = \
+ $(MKDIR_P) quux.dir; \
+ if test -f $(srcdir)/test-env.sh; then \
+ . $(srcdir)/test-env.sh; \
+ fi; \
+ FOO=1; export FOO;
+EXTRA_DIST = $(TESTS) test-env.sh
+END
+
+cat > foo.test << 'END'
+#! /bin/sh
+ls -l && test -d quux.dir
+END
+chmod a+x foo.test
+
+cat > bar.sh << 'END'
+echo "FOO='$FOO'"
+echo "BAR='$BAR'"
+test x"$FOO" = x"$BAR"
+END
+
+debug_info ()
+{
+ cat test-suite.log
+ cat foo.log
+ cat bar.log
+}
+
+minicheck ()
+{
+ debug_info
+ test -d quux.dir
+}
+
+miniclean ()
+{
+ rmdir quux.dir
+ rm -f foo.log bar.log test-suite.log
+}
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+TESTS_ENVIRONMENT='BAR=1' $MAKE check || { debug_info; exit 1; }
+minicheck
+miniclean
+
+TESTS_ENVIRONMENT='BAR=2' $MAKE check && { debug_info; exit 1; }
+minicheck
+miniclean
+
+echo 'BAR=1 && export BAR' > test-env.sh
+$MAKE check || { debug_info; exit 1; }
+minicheck
+$MAKE distcheck
+
+:
diff --git a/t/amassign.sh b/t/amassign.sh
new file mode 100644
index 000000000..76c2c58b0
--- /dev/null
+++ b/t/amassign.sh
@@ -0,0 +1,28 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to see if AM_ name can be assigned to in configure.ac.
+# Report from Steve Robbins.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_CFLAGS=foo
+AC_SUBST(AM_BAR)
+AC_SUBST([AM_ZARDOZ])
+END
+
+$ACLOCAL
diff --git a/t/amhello-binpkg.sh b/t/amhello-binpkg.sh
new file mode 100644
index 000000000..7f4ad58d7
--- /dev/null
+++ b/t/amhello-binpkg.sh
@@ -0,0 +1,51 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test an example from the manual about the 'amhello' package:
+# using DESTDIR to build simple, no-frills binary packages.
+
+am_create_testdir=empty
+. test-init.sh
+
+cp "$am_docdir"/amhello-1.0.tar.gz . \
+ || fatal_ "cannot get amhello tarball"
+
+gzip -dc amhello-1.0.tar.gz | tar xf -
+cd amhello-1.0
+
+./configure --prefix /usr
+$MAKE
+$MAKE DESTDIR="$(pwd)/inst" install
+cd inst
+find . -type f -print > ../files.lst
+tar cvf amhello-1.0-i686.tar.gz $(cat ../files.lst) > tar.got 2>&1
+
+EXEEXT=$(sed -n -e 's/^EXEEXT *= *//p' < ../Makefile)
+
+if tar --version </dev/null | grep GNU; then
+ LC_ALL=C sort tar.got > t
+ mv -f t tar.got
+ diff - tar.got <<END
+./usr/bin/hello$EXEEXT
+./usr/share/doc/amhello/README
+END
+else
+ : Be laxer with other tar implementations, to avoid spurious failures.
+ $EGREP '(^| )(\./)?usr/bin/hello'$EXEEXT'( |$)' tar.got
+ $EGREP '(^| )(\./)?usr/share/doc/amhello/README( |$)' tar.got
+fi
+
+:
diff --git a/t/amhello-cflags.sh b/t/amhello-cflags.sh
new file mode 100644
index 000000000..a5bc7dbfd
--- /dev/null
+++ b/t/amhello-cflags.sh
@@ -0,0 +1,50 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test an example from the manual about the 'amhello' package:
+# using VPATH builds to configure the same package with different
+# options.
+
+am_create_testdir=empty
+required=gcc
+. test-init.sh
+
+cp "$am_docdir"/amhello-1.0.tar.gz . \
+ || fatal_ "cannot get amhello tarball"
+
+gzip -dc amhello-1.0.tar.gz | tar xf -
+cd amhello-1.0
+
+mkdir debug optim
+cd debug
+../configure CFLAGS='-g -O0'
+$MAKE
+ls -l . src # For debugging.
+cd ../optim
+../configure CFLAGS='-O3 -fomit-frame-pointer'
+$MAKE
+ls -l . src # For debugging.
+cd ..
+
+# Check that we have really compiled the objects with two different
+# configurations.
+for exeext in '' .exe :; do
+ test -f optim/src/hello$exeext && break
+ test "$exeext" = : && fatal_ "cannot determine extension of executables"
+done
+cmp optim/src/hello$exeext debug/src/hello$exeext && exit 1
+
+:
diff --git a/t/amhello-cross-compile.sh b/t/amhello-cross-compile.sh
new file mode 100644
index 000000000..7bc91c90e
--- /dev/null
+++ b/t/amhello-cross-compile.sh
@@ -0,0 +1,53 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test an example from the manual about the 'amhello' package:
+# cross-compiling a package from Linux/Unix to MinGW.
+
+am_create_testdir=empty
+required=i586-mingw32msvc-gcc
+. test-init.sh
+
+cp "$am_docdir"/amhello-1.0.tar.gz . \
+ || fatal_ "cannot get amhello tarball"
+
+host=i586-mingw32msvc
+build=$("$am_scriptdir"/config.guess) && test -n "$build" \
+ || fatal_ "cannot guess build platform"
+case $build in *mingw*) skip_ "build system is MinGW too";; esac
+
+gzip -dc amhello-1.0.tar.gz | tar xf -
+cd amhello-1.0
+
+./configure --build "$build" --host "$host" > stdout \
+ || { cat stdout ; exit 1; }
+cat stdout
+grep '^checking for i586-mingw32msvc-strip\.\.\.' stdout
+grep '^checking for i586-mingw32msvc-gcc\.\.\.' stdout
+grep '^checking for suffix of executables\.\.\. \.exe *$' stdout
+grep '^checking for suffix of object files\.\.\. o *$' stdout
+grep '^checking whether i586-mingw32msvc-gcc accepts -g\.\.\. yes' stdout
+
+$MAKE
+
+cd src
+file hello.exe > whatis
+cat whatis
+$EGREP 'DOS|Win' whatis
+grep 'executable' whatis
+grep 'ELF' whatis && exit 1
+
+:
diff --git a/t/aminit-moreargs-deprecation.sh b/t/aminit-moreargs-deprecation.sh
new file mode 100644
index 000000000..64aa18509
--- /dev/null
+++ b/t/aminit-moreargs-deprecation.sh
@@ -0,0 +1,51 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that automake warns against old-style usages of AM_INIT_AUTOMAKE
+# (i.e., calls with two or three arguments).
+
+. test-init.sh
+
+warn_rx='AM_INIT_AUTOMAKE.* two-.* three-arguments form.*deprecated'
+
+cat > configure.ac <<'END'
+AC_INIT([Makefile.am])
+AM_INIT_AUTOMAKE([twoargs], [1.0])
+AC_CONFIG_FILES([Makefile])
+END
+
+$ACLOCAL
+
+do_check()
+{
+ rm -rf autom4te*.cache
+ for cmd in "$AUTOCONF" "$AUTOMAKE"; do
+ $cmd -Werror -Wnone -Wobsolete 2>stderr && { cat stderr; exit 1; }
+ cat stderr >&2
+ grep "^configure\.ac:2:.*$warn_rx" stderr
+ $cmd -Werror -Wall -Wno-obsolete || exit 1
+ done
+}
+
+: > Makefile.am
+do_check
+
+sed "/^AM_INIT_AUTOMAKE/s|)$|, [NODEFINE])|" configure.ac > t
+diff configure.ac t && fatal_ "failed to edit configure.ac"
+mv -f t configure.ac
+do_check
+
+:
diff --git a/t/aminit-trailing-dnl-comment-pr16841.sh b/t/aminit-trailing-dnl-comment-pr16841.sh
new file mode 100644
index 000000000..aa5c2e0a5
--- /dev/null
+++ b/t/aminit-trailing-dnl-comment-pr16841.sh
@@ -0,0 +1,44 @@
+#! /bin/sh
+# Copyright (C) 2014-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that a trailing 'dnl' m4 comment automake after the
+# AM_INIT_AUTOMAKE invocation doesn't produce a syntactically
+# invalid configure script. This used to be the case until
+# automake 1.13, but we broke that in automake 1.14. See
+# automake bug#16841.
+
+am_create_testdir=empty
+. test-init.sh
+
+cat > configure.ac <<END
+AC_INIT([test-pr16841], [1.0])
+AM_INIT_AUTOMAKE([1.14 -Werror]) dnl Some comment
+echo "OK OK OK"
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+END
+
+: > Makefile.am
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure >stdout || { cat stdout; exit 1; }
+cat stdout
+grep '^OK OK OK$' stdout
+
+:
diff --git a/t/amopt.sh b/t/amopt.sh
new file mode 100644
index 000000000..28042462e
--- /dev/null
+++ b/t/amopt.sh
@@ -0,0 +1,38 @@
+#! /bin/sh
+# Copyright (C) 2006-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make Automake diagnose a conditional AUTOMAKE_OPTIONS.
+# Report from Bas Wijnen.
+
+. test-init.sh
+
+cat >>configure.ac <<END
+AM_CONDITIONAL([COND], [true])
+END
+
+mkdir sub
+
+cat >Makefile.am <<END
+if COND
+AUTOMAKE_OPTIONS = -Wall
+endif
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+grep '^Makefile\.am:2.*AUTOMAKE_OPTIONS.*conditional' stderr
+
+:
diff --git a/t/amopts-location.sh b/t/amopts-location.sh
new file mode 100644
index 000000000..39a30c3c3
--- /dev/null
+++ b/t/amopts-location.sh
@@ -0,0 +1,83 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that errors about AUTOMAKE_OPTIONS refers to correct
+# locations.
+
+. test-init.sh
+
+cat > Makefile.am <<'END'
+# comment \
+# continued
+include Makefile0.am
+END
+
+cat > Makefile0.am <<'END'
+#1
+#2
+#3
+include Makefile1.am
+END
+
+cat > Makefile1.am <<'END'
+AUTOMAKE_OPTIONS = tar-pax
+# comment
+END
+
+cat > Makefile2.am <<'END'
+## automake comment
+bar:
+ :
+line = \
+continued
+AUTOMAKE_OPTIONS = tar-ustar
+END
+
+cat > Makefile3.am <<'END'
+quux = a
+AUTOMAKE_OPTIONS =
+quux += b
+AUTOMAKE_OPTIONS += tar-v7
+zardoz = 1
+END
+
+cat >>configure.ac <<'END'
+AC_CONFIG_FILES([Makefile2 Makefile3])
+END
+
+$ACLOCAL
+# Automake options 'tar-v7', 'tar-ustar' and 'tar-pax' can only be used
+# as argument to AM_INIT_AUTOMAKE, and not in AUTOMAKE_OPTIONS.
+AUTOMAKE_fails
+
+# Check that all the expected line numbers are correctly reported
+# in automake warning/error messages.
+grep '^Makefile1\.am:1:.*tar-pax' stderr
+grep '^Makefile2\.am:6:.*tar-ustar' stderr
+grep '^Makefile3\.am:2:.*tar-v7' stderr
+grep '^Makefile\.am:3:.*Makefile0\.am.*included from here' stderr
+grep '^Makefile0\.am:4:.*Makefile1\.am.*included from here' stderr
+
+# And also check that no botched line number is reported.
+cat stderr \
+ | grep -v '^Makefile\.am:3:' \
+ | grep -v '^Makefile0\.am:4:' \
+ | grep -v '^Makefile1\.am:1:' \
+ | grep -v '^Makefile2\.am:6:' \
+ | grep -v '^Makefile3\.am:2:' \
+ | grep . && exit 1
+
+:
diff --git a/t/amopts-variable-expansion.sh b/t/amopts-variable-expansion.sh
new file mode 100644
index 000000000..0a4a767ff
--- /dev/null
+++ b/t/amopts-variable-expansion.sh
@@ -0,0 +1,52 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that AUTOMAKE_OPTIONS support variable expansion.
+
+. test-init.sh
+
+# We want complete control over automake options.
+AUTOMAKE=$am_original_AUTOMAKE
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE([-Wall -Werror gnu])
+AC_CONFIG_FILES([Makefile])
+END
+
+cat > Makefile.am <<'END'
+# The following should expand to '-Wnone -Wno-error foreign -Wportability'.
+AUTOMAKE_OPTIONS = $(foo) foreign
+AUTOMAKE_OPTIONS += ${bar}
+foo = $(foo1)
+foo1 = ${foo2}
+foo2 = -Wnone
+foo2 += $(foo3)
+foo3 = -Wno-error
+bar = -Wportability
+# This will give a warning with '-Wportability'.
+zardoz :=
+# This would give a warning with '-Woverride'.
+install:
+END
+
+$ACLOCAL
+AUTOMAKE_run
+grep '^Makefile\.am:.*:=.*not portable' stderr
+grep README stderr && exit 1
+$EGREP '(install|override)' stderr && exit 1
+
+:
diff --git a/t/amsubst.sh b/t/amsubst.sh
new file mode 100644
index 000000000..800e99b71
--- /dev/null
+++ b/t/amsubst.sh
@@ -0,0 +1,39 @@
+#! /bin/sh
+# Copyright (C) 2006-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check for _AM_SUBST_NOTMAKE.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_SUBST([backslash], "\\")
+_AM_SUBST_NOTMAKE([backslash])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+test:
+ @echo $(backslash) @backslash@$$
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+
+# If _AM_SUBST_NOTMAKE is not honored, the backslash
+# variable will not be empty.
+$MAKE test | grep '^[$]$'
diff --git a/t/ansi2knr-no-more.sh b/t/ansi2knr-no-more.sh
new file mode 100644
index 000000000..a3436750c
--- /dev/null
+++ b/t/ansi2knr-no-more.sh
@@ -0,0 +1,56 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that any attempt to use the obsolete de-ANSI-fication support
+# is diagnosed.
+
+. test-init.sh
+
+warn_rx='automatic de-ANSI-fication.*removed'
+
+echo AC_PROG_CC >> configure.ac
+$ACLOCAL
+mv aclocal.m4 aclocal.sav
+cp configure.ac configure.sav
+
+echo AM_C_PROTOTYPES >> configure.ac
+
+$ACLOCAL -Wnone 2>stderr && { cat stderr >&2; exit 1; }
+cat stderr >&2
+grep "^configure\\.ac:5:.*$warn_rx" stderr
+
+cat aclocal.sav "$am_top_srcdir"/m4/obsolete.m4 > aclocal.m4
+$AUTOCONF -Wnone 2>stderr && { cat stderr >&2; exit 1; }
+cat stderr >&2
+grep "^configure\\.ac:5:.*$warn_rx" stderr
+
+for opt in ansi2knr lib/ansi2knr; do
+ # ansi2knr option in Makefile.am
+ cp configure.sav configure.ac
+ echo "AUTOMAKE_OPTIONS = $opt" > Makefile.am
+ rm -rf autom4te*.cache
+ AUTOMAKE_fails -Wnone
+ grep "^Makefile\.am:1:.*$warn_rx" stderr
+ # ansi2knr option in configure.ac
+ : > Makefile.am
+ sed "s|^\\(AM_INIT_AUTOMAKE\\).*|\1([$opt])|" configure.sav >configure.ac
+ cat configure.ac # For debugging.
+ rm -rf autom4te*.cache
+ AUTOMAKE_fails -Wnone
+ grep "^configure\\.ac:2:.*$warn_rx" stderr
+done
+
+:
diff --git a/t/ar-lib.sh b/t/ar-lib.sh
new file mode 100644
index 000000000..02d059deb
--- /dev/null
+++ b/t/ar-lib.sh
@@ -0,0 +1,113 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure 'ar-lib' wraps the Microsoft Library Manager (lib) correctly.
+
+am_create_testdir=empty
+required=xsi-lib-shell
+. test-init.sh
+
+get_shell_script ar-lib
+
+# Use a dummy lib, since lib isn't readily available on all systems.
+cat >lib <<'END'
+#! /bin/sh
+if test x"$2" = x-LIST && test x"$3" = xfake.lib; then
+ echo fake.obj
+elif test x"$2" = x-LIST && test x"$3" = xfake2.lib; then
+ printf "%s\n" "dir\\fake2.obj"
+else
+ printf "%s\n" "lib $*"
+fi
+END
+
+chmod +x ./lib
+
+# Check if ar-lib can create an archive with "cr".
+opts=$(./ar-lib ./lib cr foo.lib foo.obj)
+test x"$opts" = x"lib -NOLOGO -OUT:foo.lib foo.obj"
+
+# Check if ar-lib can update an existing archive with "r".
+touch foo.lib
+opts=$(./ar-lib ./lib r foo.lib foo.obj)
+test x"$opts" = x"lib -NOLOGO -OUT:foo.lib foo.lib foo.obj"
+
+# Check if ar-lib can update an existing archive with "q".
+opts=$(./ar-lib ./lib q foo.lib foo.obj)
+test x"$opts" = x"lib -NOLOGO -OUT:foo.lib foo.lib foo.obj"
+
+# Check if ar-lib accepts "u" as a modifier.
+# NOTE: "u" should have an effect, but currently doesn't.
+opts=$(./ar-lib ./lib ru foo.lib foo.obj)
+test x"$opts" = x"lib -NOLOGO -OUT:foo.lib foo.lib foo.obj"
+
+# Check if ar-lib accepts "s" as a modifier.
+opts=$(./ar-lib ./lib rs foo.lib foo.obj)
+test x"$opts" = x"lib -NOLOGO -OUT:foo.lib foo.lib foo.obj"
+
+# Check if ar-lib accepts "S" as a modifier.
+opts=$(./ar-lib ./lib rS foo.lib foo.obj)
+test x"$opts" = x"lib -NOLOGO -OUT:foo.lib foo.lib foo.obj"
+
+# Check if ar-lib passes on @FILE with "r"
+opts=$(./ar-lib ./lib r foo.lib @list)
+test x"$opts" = x"lib -NOLOGO -OUT:foo.lib foo.lib @list"
+
+# Check if ar-lib can delete a member from an archive with "d".
+opts=$(./ar-lib ./lib d foo.lib foo.obj)
+test x"$opts" = x"lib -NOLOGO -REMOVE:foo.obj foo.lib"
+
+# Check if ar-lib can delete members in an @FILE.
+echo foo.obj > foolist
+opts=$(./ar-lib ./lib d foo.lib @foolist)
+test x"$opts" = x"lib -NOLOGO -REMOVE:foo.obj foo.lib"
+
+# Check if ar-lib can list archive members with "t".
+opts=$(./ar-lib ./lib t foo.lib)
+test x"$opts" = x"lib -NOLOGO -LIST foo.lib"
+
+# Check if ar-lib accepts "v" as a modifier.
+# NOTE: "v" should have an effect, but currently doesn't.
+opts=$(./ar-lib ./lib tv foo.lib)
+test x"$opts" = x"lib -NOLOGO -LIST foo.lib"
+
+# Check if ar-lib can extract archive members with "x".
+touch fake.lib
+opts=$(./ar-lib ./lib x fake.lib)
+test x"$opts" = x"lib -NOLOGO -EXTRACT:fake.obj fake.lib"
+
+# Check if ar-lib can extract specified archive members with "x".
+opts=$(./ar-lib ./lib x foo.lib foo.obj)
+test x"$opts" = x"lib -NOLOGO -EXTRACT:foo.obj foo.lib"
+
+# Check if ar-lib can extract members in an @FILE.
+opts=$(./ar-lib ./lib x foo.lib @foolist)
+test x"$opts" = x"lib -NOLOGO -EXTRACT:foo.obj foo.lib"
+
+# Check if ar-lib passes -lib and -LTCG through to the wrappee.
+opts=$(./ar-lib ./lib -lib -LTCG x foo.lib foo.obj)
+test x"$opts" = x"lib -lib -LTCG -NOLOGO -EXTRACT:foo.obj foo.lib"
+
+# Check if ar-lib can extract backslashed members.
+touch fake2.lib
+opts=$(./ar-lib ./lib x fake2.lib)
+test x"$opts" = x"lib -NOLOGO -EXTRACT:dir\\fake2.obj fake2.lib"
+
+# Check if ar-lib accepts "s" as an action.
+opts=$(./ar-lib ./lib s foo.lib)
+test x"$opts" = x
+
+:
diff --git a/t/ar-lib2.sh b/t/ar-lib2.sh
new file mode 100644
index 000000000..212123a1b
--- /dev/null
+++ b/t/ar-lib2.sh
@@ -0,0 +1,38 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test if AM_PROG_AR installs ar-lib.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_AR
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = wish
+wish_SOURCES = a.c
+END
+
+$ACLOCAL
+$AUTOMAKE --add-missing 2>stderr || { cat stderr >&2; exit 1; }
+cat stderr >&2
+# Make sure ar-lib is installed, and that Automake says so.
+grep '^configure\.ac:.*install.*ar-lib' stderr
+test -f ar-lib
+
+:
diff --git a/t/ar-lib3.sh b/t/ar-lib3.sh
new file mode 100644
index 000000000..5392f734b
--- /dev/null
+++ b/t/ar-lib3.sh
@@ -0,0 +1,44 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test if lib_LIBRARIES requests AM_PROG_AR.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_RANLIB
+END
+
+cat > Makefile.am << 'END'
+lib_LIBRARIES = libfoo.a
+libfoo_a_SOURCES = foo.c
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+
+grep 'requires.*AM_PROG_AR' stderr
+
+cat >> configure.ac << 'END'
+AM_PROG_AR
+END
+
+rm -rf autom4te*.cache
+$ACLOCAL
+$AUTOMAKE --add-missing
+
+:
diff --git a/t/ar-lib4.sh b/t/ar-lib4.sh
new file mode 100644
index 000000000..b7f45fd98
--- /dev/null
+++ b/t/ar-lib4.sh
@@ -0,0 +1,57 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test if lib_LTLIBRARIES requests AM_PROG_AR.
+
+required=libtoolize
+. test-init.sh
+
+cp configure.ac X
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_RANLIB
+AC_PROG_LIBTOOL
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+lib_LTLIBRARIES = libfoo.la
+libfoo_la_SOURCES = foo.c
+END
+
+libtoolize
+$ACLOCAL
+AUTOMAKE_fails
+
+grep 'requires.*AM_PROG_AR' stderr
+
+rm -rf autom4te*.cache
+
+cp X configure.ac
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+AC_PROG_LIBTOOL
+AC_OUTPUT
+END
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+
+:
diff --git a/t/ar-lib5a.sh b/t/ar-lib5a.sh
new file mode 100644
index 000000000..11de4b267
--- /dev/null
+++ b/t/ar-lib5a.sh
@@ -0,0 +1,71 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test if AM_PROG_AR triggers the use of the ar-lib script.
+# This test requires Microsoft lib.
+# Keep this test in sync with sister test 'ar-lib5b.sh'.
+
+required=lib
+. test-init.sh
+
+cat > configure.ac << END
+AC_INIT([$me], [1.0])
+AC_CONFIG_AUX_DIR([auxdir])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile])
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+# We want to test the content of am_cv_ar_interface in the Makefile.
+AC_SUBST([am_cv_ar_interface])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+lib_LIBRARIES = libwish.a
+libwish_a_SOURCES = wish.c
+
+check-local:
+ test x'$(am_cv_ar_interface)' = x'lib'
+ test -f ar-lib-worked
+ test -f libwish.a
+MOSTLYCLEANFILES = ar-lib-worked
+END
+
+cat > wish.c << 'END'
+int wish(void) { return 0; }
+END
+
+mkdir auxdir
+cat - "$am_scriptdir/ar-lib" > auxdir/ar-lib << 'END'
+#! /bin/sh
+:> ar-lib-worked
+END
+chmod +x auxdir/ar-lib
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+# Sanity check: test that it is ok to use 'am_cv_ar_interface' as we do.
+$FGREP 'am_cv_ar_interface=' configure
+
+./configure AR=lib RANLIB=:
+
+$MAKE check
+$MAKE distcheck DISTCHECK_CONFIGURE_FLAGS='AR=lib RANLIB=:'
+
+:
diff --git a/t/ar-lib5b.sh b/t/ar-lib5b.sh
new file mode 100644
index 000000000..d7a9dc44c
--- /dev/null
+++ b/t/ar-lib5b.sh
@@ -0,0 +1,97 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test if AM_PROG_AR triggers the use of the ar-lib script.
+# This test does not require Microsoft lib.
+# Keep this test in sync with sister test 'ar-lib5a.sh'.
+
+. test-init.sh
+
+cat > configure.ac << END
+AC_INIT([$me], [1.0])
+AC_CONFIG_AUX_DIR([auxdir])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile])
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+# We want to test the content of am_cv_ar_interface in the Makefile.
+AC_SUBST([am_cv_ar_interface])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+lib_LIBRARIES = libwish.a
+libwish_a_SOURCES = wish.c
+
+check-local:
+ test x'$(am_cv_ar_interface)' = x'lib'
+ test -f ar-lib-worked
+MOSTLYCLEANFILES = ar-lib-worked
+END
+
+cat > wish.c << 'END'
+int wish(void) { return 0; }
+END
+
+mkdir auxdir
+cat > auxdir/ar-lib << 'END'
+#! /bin/sh
+:> ar-lib-worked
+END
+chmod +x auxdir/ar-lib
+
+# Let's fake microsoft lib.
+mkdir bin
+cat > bin/lib << 'END'
+#! /bin/sh
+echo lib command line: $* >&2 # For debugging.
+case " $* " in
+ # The '-OUT:' option is used by tests in configure. So don't create
+ # the 'ar-lib-worked' file here, as that might cause spurious passes
+ # of this test; but don't fail either, as that would confuse said
+ # configure tests.
+ *' -OUT:'*) exit 0;;
+ # This means that $* looks like a command-line for 'ar'. We have to
+ # exit with failure here, to accommodate the two following ortoghonal
+ # scenarios:
+ # 1. when 'lib' is tested by configure, this will tell that it does
+ # not use the ar(1) interface, so that the 'ar-lib' script will
+ # get involved;
+ # 2. when 'lib' is called by the Makefile, an ar-style command line
+ # passed to it would mean that the 'ar-lib' script has failed to
+ # properly munge the command line, or hasn't been invoked to do so.
+ *\ c*) exit 1;;
+ # Assume everything else is OK.
+ *) : > ar-lib-worked;;
+esac
+END
+chmod +x bin/lib
+PATH=$(pwd)/bin$PATH_SEPARATOR$PATH; export PATH
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+# Sanity check: test that it is ok to use 'am_cv_ar_interface' as we do.
+$FGREP 'am_cv_ar_interface=' configure
+
+./configure AR=lib RANLIB=:
+
+$MAKE check
+$MAKE distcheck DISTCHECK_CONFIGURE_FLAGS="AR=lib RANLIB=:"
+
+:
diff --git a/t/ar-lib6a.sh b/t/ar-lib6a.sh
new file mode 100644
index 000000000..76a4329c7
--- /dev/null
+++ b/t/ar-lib6a.sh
@@ -0,0 +1,37 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test AM_PROG_AR ordering requirements
+# Keep this test in sync with sister test 'ar-lib6b.sh'.
+
+required=libtoolize
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_RANLIB
+m4_ifdef([LT_INIT], [LT_INIT], [AC_PROG_LIBTOOL])
+AM_PROG_AR
+END
+
+libtoolize
+$ACLOCAL
+$AUTOCONF 2>stderr || { cat stderr >&2; exit 1; }
+cat stderr >&2
+
+$EGREP '(AC_PROG_LIBTOOL|LT_INIT).*before.*AM_PROG_AR' stderr
+
+:
diff --git a/t/ar-lib6b.sh b/t/ar-lib6b.sh
new file mode 100644
index 000000000..47938561e
--- /dev/null
+++ b/t/ar-lib6b.sh
@@ -0,0 +1,37 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test AM_PROG_AR ordering requirements for older Libtools
+# Keep this test in sync with sister test 'ar-lib6a.sh'.
+
+required=libtoolize
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_RANLIB
+AC_PROG_LIBTOOL
+AM_PROG_AR
+END
+
+libtoolize
+$ACLOCAL
+$AUTOCONF 2>stderr || { cat stderr >&2; exit 1; }
+cat stderr >&2
+
+$EGREP 'AC_PROG_LIBTOOL.*before.*AM_PROG_AR' stderr
+
+:
diff --git a/t/ar-lib7.sh b/t/ar-lib7.sh
new file mode 100644
index 000000000..d7c21f16e
--- /dev/null
+++ b/t/ar-lib7.sh
@@ -0,0 +1,34 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test if automake warns if ar-lib is missing when AM_PROG_AR is used.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_PROG_AR
+END
+
+:> Makefile.am
+
+$ACLOCAL
+AUTOMAKE_fails
+
+grep '^configure\.ac:.*ar-lib.*not found' stderr
+
+$AUTOMAKE --add-missing
+
+:
diff --git a/t/ar.sh b/t/ar.sh
new file mode 100644
index 000000000..08bcb72a0
--- /dev/null
+++ b/t/ar.sh
@@ -0,0 +1,44 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that AR, ARFLAGS, and RANLIB can be substituted from configure.ac.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_PROG_AR
+AC_SUBST([AR], ['echo it works'])
+AC_SUBST([ARFLAGS], ['>'])
+AC_SUBST([RANLIB], ['echo really works >>'])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+lib_LIBRARIES = libfoo.a
+libfoo_a_SOURCES =
+END
+
+:> ar-lib
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+$MAKE
+grep 'it works' libfoo.a
+grep 'really works' libfoo.a
+
+:
diff --git a/t/ar2.sh b/t/ar2.sh
new file mode 100644
index 000000000..1c3f4d6d3
--- /dev/null
+++ b/t/ar2.sh
@@ -0,0 +1,38 @@
+#! /bin/sh
+# Copyright (C) 2004-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure AR and ARFLAGS are defined for EXTRA_LIBRARIES.
+# Report from Kevin Ryde.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_RANLIB
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+EXTRA_LIBRARIES = libfoo.a
+libfoo_a_SOURCES = foo.c
+END
+
+$ACLOCAL
+$AUTOMAKE -Wno-extra-portability
+grep '^ARFLAGS =' Makefile.in
+grep '^AR =' Makefile.in
+
+:
diff --git a/t/ar3.sh b/t/ar3.sh
new file mode 100644
index 000000000..fc4f9fa99
--- /dev/null
+++ b/t/ar3.sh
@@ -0,0 +1,41 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that AR, ARFLAGS, etc. works also when the macro AM_PROG_AR
+# is used.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+EXTRA_LIBRARIES = libfoo.a
+libfoo_a_SOURCES = foo.c
+END
+
+: > ar-lib
+
+$ACLOCAL
+$AUTOMAKE
+$EGREP '^ARFLAGS =' Makefile.in
+$EGREP '^AR =' Makefile.in
+
+:
diff --git a/t/ar4.sh b/t/ar4.sh
new file mode 100644
index 000000000..2a98fb574
--- /dev/null
+++ b/t/ar4.sh
@@ -0,0 +1,37 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test if configure bails out if $AR does not work and AM_PROG_AR is used.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_PROG_AR
+END
+
+$ACLOCAL
+$AUTOCONF
+
+st=0; ./configure AR=/bin/false >stdout 2>stderr || st=$?
+cat stdout
+cat stderr >&2
+test $st -eq 1
+
+grep '^checking.* archiver .*interface.*\.\.\. unknown' stdout
+grep '^configure: error: could not determine /bin/false interface' stderr
+ls *conftest* && exit 1
+
+:
diff --git a/t/ar5.sh b/t/ar5.sh
new file mode 100644
index 000000000..3cd7328f7
--- /dev/null
+++ b/t/ar5.sh
@@ -0,0 +1,40 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test the optional argument of AM_PROG_AR.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_PROG_AR([
+ echo spy > bad-archiver-interface-detected
+ AC_MSG_CHECKING([for something else])
+ AC_MSG_RESULT([found it])
+ echo Grep This
+])
+END
+
+$ACLOCAL
+$AUTOCONF
+
+./configure AR=/bin/false >stdout || { cat stdout; exit 1; }
+cat stdout
+grep '^checking.* archiver .*interface.*\.\.\. unknown$' stdout
+grep '^checking for something else\.\.\. found it$' stdout
+grep '^Grep This$' stdout
+test -f bad-archiver-interface-detected
+
+:
diff --git a/t/asm.sh b/t/asm.sh
new file mode 100644
index 000000000..f3e6b5759
--- /dev/null
+++ b/t/asm.sh
@@ -0,0 +1,100 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test of basic assembly functionality.
+# Keep this in sync with sister tests 'asm2.sh' and 'asm3.sh'.
+
+. test-init.sh
+
+mv configure.ac configure.stub
+
+cat > Makefile.am << 'END'
+noinst_PROGRAMS = maude
+maude_SOURCES = maude.s
+END
+
+echo '*** Try 1 -- should fail because we need CC and CCAS ***'
+cat configure.stub - > configure.ac << 'END'
+AC_SUBST([CCASFLAGS])
+AC_OUTPUT
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+grep '[Aa]ssembler source.*CCAS.* undefined' stderr
+grep 'define .*CCAS.* add .*AM_PROG_AS' stderr
+
+# On fast machines the autom4te.cache created during the above run of
+# $AUTOMAKE is likely to have the same time stamp as the configure.ac
+# created below; thus causing traces for the old configure.ac to be
+# used. We could do '$sleep', but it's faster to erase the
+# directory. (Erase autom4te*.cache, not autom4te.cache, because some
+# bogus installations of Autoconf use a versioned cache.)
+rm -rf autom4te*.cache
+
+echo '*** Try 2 -- we still need CCAS ***'
+cat configure.stub - > configure.ac << 'END'
+AC_PROG_CC
+AC_SUBST([CCASFLAGS])
+AC_OUTPUT
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+grep '[Aa]ssembler source.*CCAS.* undefined' stderr
+grep 'define .*CCAS.* add .*AM_PROG_AS' stderr
+
+rm -rf autom4te*.cache
+
+echo '*** Try 3 -- we need CCASFLAGS ***'
+cat configure.stub - > configure.ac << 'END'
+CCAS='$(CC)'
+AC_SUBST([CCAS])
+AC_PROG_CC
+AC_OUTPUT
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+grep '[Aa]ssembler source.*CCASFLAGS.* undefined' stderr
+grep 'define .*CCASFLAGS.* add .*AM_PROG_AS' stderr
+
+rm -rf autom4te*.cache
+
+echo '*** Try 4 -- we have everything needed, expect success ***'
+cat configure.stub - > configure.ac << 'END'
+CCAS='$(CC)'
+AC_SUBST([CCAS])
+AC_PROG_CC
+AC_SUBST([CCASFLAGS])
+AC_OUTPUT
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+rm -rf autom4te*.cache
+
+echo '*** Try 5 -- we have everything needed, expect success ***'
+cat configure.stub - > configure.ac << 'END'
+AM_PROG_AS
+AC_OUTPUT
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+:
diff --git a/t/asm2.sh b/t/asm2.sh
new file mode 100644
index 000000000..6a38d25a5
--- /dev/null
+++ b/t/asm2.sh
@@ -0,0 +1,116 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test of basic preprocessed assembly functionality.
+# Keep this in sync with sister tests 'asm.sh' and 'asm3.sh'.
+
+. test-init.sh
+
+mv configure.ac configure.stub
+
+cat > Makefile.am << 'END'
+noinst_PROGRAMS = maude
+maude_SOURCES = maude.S
+END
+
+echo '*** Try 1 -- should fail because we need CC and CCAS ***'
+cat configure.stub - > configure.ac << 'END'
+AC_SUBST([CCASFLAGS])
+AC_OUTPUT
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+grep '[Aa]ssembler source.*CCAS.* undefined' stderr
+grep 'define .*CCAS.* add .*AM_PROG_AS' stderr
+
+# On fast machines the autom4te.cache created during the above run of
+# $AUTOMAKE is likely to have the same time stamp as the configure.ac
+# created below; thus causing traces for the old configure.ac to be
+# used. We could do '$sleep', but it's faster to erase the
+# directory. (Erase autom4te*.cache, not autom4te.cache, because some
+# bogus installations of Autoconf use a versioned cache.)
+rm -rf autom4te*.cache
+
+echo '*** Try 2 -- we still need CCAS ***'
+cat configure.stub - > configure.ac << 'END'
+AC_PROG_CC
+AC_SUBST([CCASFLAGS])
+AC_OUTPUT
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+grep '[Aa]ssembler source.*CCAS.* undefined' stderr
+grep 'define .*CCAS.* add .*AM_PROG_AS' stderr
+
+rm -rf autom4te*.cache
+
+echo '*** Try 3 -- we need CCASFLAGS ***'
+cat configure.stub - > configure.ac << 'END'
+CCAS='$(CC)'
+AC_SUBST([CCAS])
+AC_PROG_CC
+AC_OUTPUT
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+grep '[Aa]ssembler source.*CCASFLAGS.* undefined' stderr
+grep 'define .*CCASFLAGS.* add .*AM_PROG_AS' stderr
+
+rm -rf autom4te*.cache
+
+echo '*** Try 4 -- we need dependency tracking. ***'
+cat configure.stub - > configure.ac << 'END'
+CCAS='$(CC)'
+AC_SUBST([CCAS])
+AC_PROG_CC
+AC_SUBST([CCASFLAGS])
+AC_OUTPUT
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+grep ' add .*AM_PROG_AS' stderr
+
+rm -rf autom4te*.cache
+
+echo '*** Try 5 -- we have everything needed, expect success. ***'
+cat configure.stub - > configure.ac << 'END'
+CCAS='$(CC)'
+AC_SUBST([CCAS])
+AC_PROG_CC
+_AM_DEPENDENCIES([CCAS])
+AC_SUBST([CCASFLAGS])
+AC_OUTPUT
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+rm -rf autom4te*.cache
+
+echo '*** Try 6 -- we have everything needed, expect success. ***'
+cat configure.stub - > configure.ac << 'END'
+AM_PROG_AS
+AC_OUTPUT
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+:
diff --git a/t/asm3.sh b/t/asm3.sh
new file mode 100644
index 000000000..925710617
--- /dev/null
+++ b/t/asm3.sh
@@ -0,0 +1,116 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test of basic preprocessed assembly functionality with extension '.sx'.
+# Keep this in sync with sister tests 'asm.sh' and 'asm2.sh'.
+
+. test-init.sh
+
+mv configure.ac configure.stub
+
+cat > Makefile.am << 'END'
+noinst_PROGRAMS = maude
+maude_SOURCES = maude.sx
+END
+
+echo '*** Try 1 -- should fail because we need CC and CCAS ***'
+cat configure.stub - > configure.ac << 'END'
+AC_SUBST([CCASFLAGS])
+AC_OUTPUT
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+grep '[Aa]ssembler source.*CCAS.* undefined' stderr
+grep 'define .*CCAS.* add .*AM_PROG_AS' stderr
+
+# On fast machines the autom4te.cache created during the above run of
+# $AUTOMAKE is likely to have the same time stamp as the configure.ac
+# created below; thus causing traces for the old configure.ac to be
+# used. We could do '$sleep', but it's faster to erase the
+# directory. (Erase autom4te*.cache, not autom4te.cache, because some
+# bogus installations of Autoconf use a versioned cache.)
+rm -rf autom4te*.cache
+
+echo '*** Try 2 -- we still need CCAS ***'
+cat configure.stub - > configure.ac << 'END'
+AC_PROG_CC
+AC_SUBST([CCASFLAGS])
+AC_OUTPUT
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+grep '[Aa]ssembler source.*CCAS.* undefined' stderr
+grep 'define .*CCAS.* add .*AM_PROG_AS' stderr
+
+rm -rf autom4te*.cache
+
+echo '*** Try 3 -- we need CCASFLAGS ***'
+cat configure.stub - > configure.ac << 'END'
+CCAS='$(CC)'
+AC_SUBST([CCAS])
+AC_PROG_CC
+AC_OUTPUT
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+grep '[Aa]ssembler source.*CCASFLAGS.* undefined' stderr
+grep 'define .*CCASFLAGS.* add .*AM_PROG_AS' stderr
+
+rm -rf autom4te*.cache
+
+echo '*** Try 4 -- we need dependency tracking. ***'
+cat configure.stub - > configure.ac << 'END'
+CCAS='$(CC)'
+AC_SUBST([CCAS])
+AC_PROG_CC
+AC_SUBST([CCASFLAGS])
+AC_OUTPUT
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+grep ' add .*AM_PROG_AS' stderr
+
+rm -rf autom4te*.cache
+
+echo '*** Try 5 -- we have everything needed, expect success. ***'
+cat configure.stub - > configure.ac << 'END'
+CCAS='$(CC)'
+AC_SUBST([CCAS])
+AC_PROG_CC
+_AM_DEPENDENCIES([CCAS])
+AC_SUBST([CCASFLAGS])
+AC_OUTPUT
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+rm -rf autom4te*.cache
+
+echo '*** Try 6 -- we have everything needed, expect success. ***'
+cat configure.stub - > configure.ac << 'END'
+AM_PROG_AS
+AC_OUTPUT
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+:
diff --git a/t/autodist-acconfig-no-subdir.sh b/t/autodist-acconfig-no-subdir.sh
new file mode 100644
index 000000000..42a043c3c
--- /dev/null
+++ b/t/autodist-acconfig-no-subdir.sh
@@ -0,0 +1,56 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that 'acconfig.h' is *not* automatically distributed when
+# placed in a subdirectory.
+# Related to automake bug#7819.
+
+. test-init.sh
+
+cat >> configure.ac <<END
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+SUBDIRS = sub
+sub/acconfig.h:
+ echo target $@ should not be built >&2; exit 1
+check-local: distdir
+ ls -l $(distdir)/sub
+ test ! -f $(distdir)/sub/acconfig.h
+END
+
+mkdir sub
+
+cat > sub/Makefile.am <<'END'
+acconfig.h:
+ echo target $@ should not be built >&2; exit 1
+check-local:
+ echo $(DISTFILES) | grep 'acconfig\.h' && exit 1; :
+ echo $(DIST_COMMON) | grep 'acconfig\.h' && exit 1; :
+END
+
+: > sub/acconfig.h
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+./configure
+$MAKE check
+
+:
diff --git a/t/autodist-acconfig.sh b/t/autodist-acconfig.sh
new file mode 100644
index 000000000..f22a09ec5
--- /dev/null
+++ b/t/autodist-acconfig.sh
@@ -0,0 +1,44 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that 'acconfig.h' is automatically distributed if it exists
+# (at automake runtime).
+# Related to automake bug#7819.
+
+. test-init.sh
+
+cat >> configure.ac <<END
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+.PHONY: test
+test: distdir
+ ls -l $(distdir)
+ echo ' ' $(DIST_COMMON) ' ' | grep '[ /]acconfig\.h '
+ test -f $(distdir)/acconfig.h
+END
+
+: > acconfig.h
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+./configure
+$MAKE test
+
+:
diff --git a/t/autodist-aclocal-m4.sh b/t/autodist-aclocal-m4.sh
new file mode 100644
index 000000000..a605333c3
--- /dev/null
+++ b/t/autodist-aclocal-m4.sh
@@ -0,0 +1,53 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that 'aclocal.m4' is not automatically distributed if not
+# required to build 'configure'. This is *really* a corner-case
+# check, and the behaviour it checks is not documented either, so
+# if that behaviour is deliberately changed in the future, just
+# remove this test.
+# Related to automake bug#7819.
+
+. test-init.sh
+
+{ echo 'm4_include([defs.m4])'
+ cat configure.ac
+ echo 'AC_OUTPUT'
+} > t
+mv -f t configure.ac
+
+cat > Makefile.am <<'END'
+.PHONY: test
+test: distdir
+ ls -l $(distdir)
+ test ! -f $(distdir)/aclocal.m4
+ echo $(DISTFILES) | grep 'aclocal\.m4' && exit 1; :
+ echo $(DIST_COMMON) | grep 'aclocal\.m4' && exit 1; :
+check-local: test
+END
+
+: > defs.m4
+$ACLOCAL
+mv -f aclocal.m4 defs.m4
+
+$AUTOMAKE
+$AUTOCONF
+
+./configure
+$MAKE test
+$MAKE distcheck
+
+:
diff --git a/t/autodist-config-headers.sh b/t/autodist-config-headers.sh
new file mode 100644
index 000000000..f3fb5e35b
--- /dev/null
+++ b/t/autodist-config-headers.sh
@@ -0,0 +1,59 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that config.h.bot and config.h.top are automatically
+# distributed if the AC_CONFIG_HADERS macro is used and they
+# exist at automake runtime.
+# Related to automake bug#7819.
+
+. test-init.sh
+
+cat >> configure.ac <<END
+AC_CONFIG_HEADERS([config.h sub/config.h cfg2.h:conf2.hin])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+.PHONY: test
+test: distdir
+ ls -l $(distdir) $(distdir)/sub
+ echo ' ' $(DIST_COMMON) ' ' | grep '[ /]config\.h\.bot '
+ echo ' ' $(DIST_COMMON) ' ' | grep '[ /]config\.h\.top '
+ echo ' ' $(DIST_COMMON) ' ' | grep '[ /]cfg2\.h\.bot '
+ echo ' ' $(DIST_COMMON) ' ' | grep '[ /]cfg2\.h\.top '
+ echo ' ' $(DIST_COMMON) ' ' | grep '[ /]sub/config\.h\.bot '
+ echo ' ' $(DIST_COMMON) ' ' | grep '[ /]sub/config\.h\.top '
+ test -f $(distdir)/config.h.bot
+ test -f $(distdir)/config.h.top
+ test -f $(distdir)/cfg2.h.bot
+ test -f $(distdir)/cfg2.h.top
+ test -f $(distdir)/sub/config.h.bot
+ test -f $(distdir)/sub/config.h.top
+END
+
+mkdir sub
+touch config.h.in config.h.top config.h.bot \
+ conf2.hin cfg2.h.top cfg2.h.bot \
+ sub/config.h.in sub/config.h.top sub/config.h.bot
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+./configure
+$MAKE test
+
+:
diff --git a/t/autodist-configure-no-subdir.sh b/t/autodist-configure-no-subdir.sh
new file mode 100644
index 000000000..f26ad9a33
--- /dev/null
+++ b/t/autodist-configure-no-subdir.sh
@@ -0,0 +1,70 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that 'configure', 'configure.ac' and 'configure.in' are *not*
+# automatically distributed when placed in a subdirectory.
+# Related to automake bug#7819.
+
+. test-init.sh
+
+cat >> configure.ac <<END
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+SUBDIRS = sub
+dontbuild = echo target $@ should not be built >&2; exit 1
+sub/configure:
+ $(dontbuild)
+sub/configure.ac:
+ $(dontbuild)
+sub/configure.in:
+ $(dontbuild)
+check-local: distdir
+ ls -l $(distdir)/sub
+ test ! -f $(distdir)/sub/configure
+ test ! -f $(distdir)/sub/configure.in
+ test ! -f $(distdir)/sub/configure.ac
+END
+
+mkdir sub
+
+cat > sub/Makefile.am <<'END'
+dontbuild = echo target $@ should not be built >&2; exit 1
+configure:
+ $(dontbuild)
+configure.ac:
+ $(dontbuild)
+configure.in:
+ $(dontbuild)
+check-local:
+ echo $(DISTFILES) | grep 'configure' && exit 1; :
+ echo $(DIST_COMMON) | grep 'configure' && exit 1; :
+END
+
+: > sub/configure.ac
+: > sub/configure.in
+: > sub/configure
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+./configure
+$MAKE check
+
+:
diff --git a/t/autodist-no-duplicate.sh b/t/autodist-no-duplicate.sh
new file mode 100644
index 000000000..639cf7765
--- /dev/null
+++ b/t/autodist-no-duplicate.sh
@@ -0,0 +1,50 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that there are no duplicates in the list of files automatically
+# distributed by automake.
+
+. test-init.sh
+
+re='Files .*automatically distributed.*if found'
+
+# The automake manual states that the list of automatically-distributed
+# files should be given by 'automake --help'.
+
+list1=$($AUTOMAKE --help \
+ | sed -n "/^$re.*always/,/^ *$/p" \
+ | sed 1d)
+list1=$(echo $list1)
+
+list2=$($AUTOMAKE --help \
+ | sed -n "/^$re.*under certain conditions/,/^ *$/p" \
+ | sed 1d)
+list2=$(echo $list2)
+
+test -n "$list1"
+test -n "$list2"
+
+st=0
+for i in 1 2; do
+ eval list=\${list$i}
+ for f in $list; do echo $f; done | sort > files$i.lst
+ uniq files$i.lst > files$i.uniq
+ cat files$i.lst
+ cat files$i.uniq
+ diff files$i.lst files$i.uniq || st=1
+done
+
+exit $st
diff --git a/t/autodist-stamp-vti.sh b/t/autodist-stamp-vti.sh
new file mode 100644
index 000000000..181df6694
--- /dev/null
+++ b/t/autodist-stamp-vti.sh
@@ -0,0 +1,58 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that 'stamp-vti' is automatically distributed when info_TEXINFOS
+# and version.texi are involved.
+# Related to automake bug#7819.
+
+required=makeinfo
+. test-init.sh
+
+cat >> configure.ac << END
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+info_TEXINFOS = foo.texi
+.PHONY: test
+test: all distdir
+ ls -l $(distdir)
+ echo ' ' $(DIST_COMMON) ' ' | grep '[ /]stamp-vti '
+ test -f $(distdir)/stamp-vti
+END
+
+cat > foo.texi << 'END'
+\input texinfo
+@setfilename foo.info
+@settitle Zardoz
+@node Top
+@include version.texi
+bar baz quux
+@bye
+END
+
+# Required when using Texinfo.
+: > texinfo.tex
+cp "$am_scriptdir"/mdate-sh .
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+$MAKE test
+
+:
diff --git a/t/autodist-subdir.sh b/t/autodist-subdir.sh
new file mode 100644
index 000000000..6079e8f88
--- /dev/null
+++ b/t/autodist-subdir.sh
@@ -0,0 +1,120 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that automake really automatically distributes all the files
+# it advertises to do, even when in subdirectories.
+#
+# This behavior might be suboptimal, but it has been in place for quite
+# a long time, and it would be risky to change it now. See also the
+# discussion of automake bug#7819:
+# <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=7819>
+#
+# Keep this test in sync with sister test 'autodist.sh'.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+END
+
+$ACLOCAL
+$AUTOCONF
+
+# The automake manual states that the list of automatically-distributed
+# files should be given by 'automake --help'.
+list=$($AUTOMAKE --help \
+ | sed -n '/^Files.*automatically distributed.*if found.*always/,/^ *$/p' \
+ | sed 1d)
+# Normalize whitespace, just in case.
+list=$(echo $list)
+
+test -n "$list"
+
+cat > Makefile.am <<'END'
+SUBDIRS = sub
+check-local:
+## For debugging.
+ @echo DIST_COMMON:
+ @for f in $(DIST_COMMON); do echo " $$f"; done
+ @echo DISTDIR:
+ @ls -l $(distdir) | sed 's/^/ /'
+## Now the checks.
+ @for f in $(autodist_list); do \
+ echo "file: sub/$$f"; \
+ test -f $(distdir)/sub/$$f \
+ || { echo $$f: distdir fail >&2; exit 1; }; \
+ done
+END
+
+mkdir sub
+
+cat > sub/Makefile.am <<'END'
+include distfiles.am
+check-local:
+## For debugging.
+ @echo DIST_COMMON:
+ @for f in $(DIST_COMMON); do echo " $$f"; done
+ @echo DISTDIR:
+ @ls -l $(distdir) | sed 's/^/ /'
+## Now the checks.
+ @for f in $(autodist_list); do \
+ echo "file: $$f"; \
+## Some filenames might contain dots, but this won't cause spurious
+## failures, and "spurious successes" are so unlikely that they're
+## not worth worrying about.
+ echo ' ' $(DIST_COMMON) ' ' | grep "[ /]$$f " >/dev/null \
+ || { echo $$f: distcom fail >&2; exit 1; }; \
+ done
+END
+
+: First try listing the automatically-distributed files in proper
+: targets in Makefile.am
+
+echo "MAINTAINERCLEANFILES = $list" > sub/distfiles.am
+for f in $list; do echo "$f :; touch $f"; done >> sub/distfiles.am
+
+cat sub/distfiles.am # For debugging.
+
+$AUTOMAKE -a
+
+./configure
+
+$MAKE distdir
+autodist_list="$list" $MAKE check
+
+$MAKE maintainer-clean
+test ! -e sub/README # Sanity check.
+rm -rf $me-1.0 # Remove $(distdir).
+
+: Now try creating the automatically-distributed files before
+: running automake.
+
+: > sub/distfiles.am
+for f in $list; do
+ echo dummy > sub/$f
+done
+
+ls -l # For debugging.
+
+$AUTOMAKE
+
+./configure
+
+$MAKE distdir
+autodist_list="$list" $MAKE check
+
+:
diff --git a/t/autodist.sh b/t/autodist.sh
new file mode 100644
index 000000000..0c2d2cacf
--- /dev/null
+++ b/t/autodist.sh
@@ -0,0 +1,103 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that automake really automatically distributes all the files
+# it advertises to do.
+# Related to automake bug#7819.
+# Keep this test in sync with sister test 'autodist-subdir.sh'.
+
+am_create_testdir=empty
+. test-init.sh
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AC_CONFIG_AUX_DIR([.])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+END
+
+$ACLOCAL
+$AUTOCONF
+
+# The automake manual states that the list of automatically-distributed
+# files should be given by 'automake --help'.
+list=$($AUTOMAKE --help \
+ | sed -n '/^Files.*automatically distributed.*if found.*always/,/^ *$/p' \
+ | sed 1d)
+# Normalize whitespace, just in case.
+list=$(echo $list)
+
+test -n "$list"
+
+cat > Makefile.am <<'END'
+include distfiles.am
+check-local:
+## For debugging.
+ @echo DIST_COMMON:
+ @for f in $(DIST_COMMON); do echo " $$f"; done
+ @echo DISTDIR:
+ @ls -l $(distdir) | sed 's/^/ /'
+## Now the checks.
+ @for f in $(autodist_list); do \
+ echo "file: $$f"; \
+ test -f $(distdir)/$$f \
+ || { echo $$f: distdir fail >&2; exit 1; }; \
+## Some filenames might contain dots, but this won't cause spurious
+## failures, and "spurious successes" are so unlikely that they're
+## not worth worrying about.
+ echo ' ' $(DIST_COMMON) ' ' | grep "[ /]$$f " >/dev/null \
+ || { echo $$f: distcom fail >&2; exit 1; }; \
+ done
+END
+
+: First try listing the automatically-distributed files in proper
+: targets in Makefile.am
+
+echo "MAINTAINERCLEANFILES = $list" > distfiles.am
+for f in $list; do echo "$f :; touch $f"; done >> distfiles.am
+
+cat distfiles.am # For debugging.
+
+$AUTOMAKE -a
+
+./configure
+
+$MAKE distdir
+autodist_list="$list" $MAKE check
+
+$MAKE maintainer-clean
+test ! -e README # Sanity check.
+rm -rf $me-1.0 # Remove $(distdir).
+
+: Now try creating the automatically-distributed files before
+: running automake.
+
+: > distfiles.am
+for f in $list; do
+ echo dummy > $f
+done
+
+ls -l # For debugging.
+
+$AUTOMAKE
+
+./configure
+
+$MAKE distdir
+autodist_list="$list" $MAKE check
+
+:
diff --git a/t/autohdr-subdir-pr12495.sh b/t/autohdr-subdir-pr12495.sh
new file mode 100644
index 000000000..e392ba87d
--- /dev/null
+++ b/t/autohdr-subdir-pr12495.sh
@@ -0,0 +1,83 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Related to automake bug#12495: Automake shouldn't generate useless
+# remake rules for AC_CONFIG_HEADERS arguments after the first one,
+# not even when subdirs are involved.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_HEADERS([a.h b.h sub/c.h])
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+END
+
+mkdir sub
+echo SUBDIRS = sub > Makefile.am
+: > sub/Makefile.am
+
+$ACLOCAL
+$AUTOCONF
+$AUTOHEADER
+# Even if an AC_CONFIG_HEADERS invocation is passed several files in
+# the first argument, only the first one is considered by autoheader
+# for automatic generation. Otherwise, the present test case would
+test -f a.h.in && test ! -f c.h.in && test ! -f sub/c.h.in \
+ || fatal_ "unexpected autoheader behavior with multiple" \
+ "AC_CONFIG_HEADERS arguments"
+# Automake should require the missing headers though.
+AUTOMAKE_fails -Wno-error -Wnone
+grep "^configure\.ac:4:.* required file 'b.h.in' not found" stderr
+grep "^configure\.ac:4:.* required file 'sub/c.h.in' not found" stderr
+: > b.h.in
+: > sub/c.h.in
+$AUTOMAKE
+
+./configure
+
+# Automake should regenerate this.
+grep '^$(srcdir)/a\.h\.in:' Makefile.in
+# But not these.
+grep '[bc]\.h\.in.*:' Makefile.in sub/Makefile.in && exit 1
+
+test -f a.h && test -f b.h && test -f sub/c.h \
+ || fatal_ "unexpected ./configure behavior with multiple" \
+ "AC_CONFIG_HEADERS arguments"
+
+rm -f a.h.in a.h
+$MAKE
+test -f a.h.in
+test -f a.h
+
+# We might need to grep the output of GNU make for error messages.
+LANG=C LANGUAGE=C LC_ALL=C
+export LANG LANGUAGE LC_ALL
+
+ocwd=$(pwd)
+for x in b c; do
+ test $x = b || cd sub
+ rm -f $x.h.in
+ run_make -E -e FAIL $x.h.in
+ test ! -f $x.h.in
+ if using_gmake; then
+ grep "No rule to make target [\`\"']$x\.h\.in[\`\"']" stderr
+ fi
+ : > $x.h.in
+ cd "$ocwd" || fatal_ "cannot chdir back"
+done
+
+:
diff --git a/t/autohdr.sh b/t/autohdr.sh
new file mode 100644
index 000000000..585ef3e0d
--- /dev/null
+++ b/t/autohdr.sh
@@ -0,0 +1,30 @@
+#!/bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that autoheaders works, despite our AC_CONFIG_HEADERS hack.
+
+. test-init.sh
+
+cat >>configure.ac <<EOF
+AC_CONFIG_HEADERS([thisfile.h])
+EOF
+
+: > Makefile.am
+
+$ACLOCAL
+$AUTOHEADER
+
+test -f thisfile.h.in
diff --git a/t/autohdr3.sh b/t/autohdr3.sh
new file mode 100644
index 000000000..36209bda3
--- /dev/null
+++ b/t/autohdr3.sh
@@ -0,0 +1,53 @@
+#!/bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check rebuild rules for autoheader.
+
+. test-init.sh
+
+cat >>configure.ac <<EOF
+m4_include([foo.m4])
+AC_CONFIG_HEADERS([config.h:config.hin])
+AC_OUTPUT
+EOF
+
+: > foo.m4
+
+cat > Makefile.am <<'END'
+.PHONY: test
+check-local: test
+test: all
+ cat $(srcdir)/config.hin ;: For debugging.
+ cat config.h ;: Likewise.
+ grep '#.*GREPME' $(srcdir)/config.hin
+ grep '#.*define.*GREPME' config.h
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOHEADER
+$AUTOMAKE
+
+./configure
+$MAKE
+
+$sleep
+echo 'AC_DEFINE([GREPME], 1, [Doc for GREPME])' > foo.m4
+
+$MAKE test
+$MAKE distcheck
+
+:
diff --git a/t/autohdr4.sh b/t/autohdr4.sh
new file mode 100644
index 000000000..ae35b7005
--- /dev/null
+++ b/t/autohdr4.sh
@@ -0,0 +1,80 @@
+#!/bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check rebuild rules for AC_CONFIG_HEADERS.
+# (This should also work without GNU Make.)
+
+required=cc
+. test-init.sh
+
+cat >>configure.ac <<'EOF'
+AC_PROG_CC
+AC_SUBST([BOT], [bot])
+AC_CONFIG_HEADERS([defs.h config.h:sub1/config.top:sub2/config.${BOT}],,
+ [BOT=$BOT])
+AC_CONFIG_FILES([sub3/Makefile])
+AC_OUTPUT
+EOF
+
+mkdir sub1 sub2 sub3
+
+: > sub1/config.top
+echo '#define NAME "grepme1"' >sub2/config.bot
+
+cat > Makefile.am <<'END'
+SUBDIRS = sub3
+.PHONY: test-prog-updated
+test-prog-updated:
+ is_newest sub3/run$(EXEEXT) sub2/config.bot
+END
+
+cat > sub3/Makefile.am <<'END'
+noinst_PROGRAMS = run
+END
+
+cat >sub3/run.c <<'EOF'
+#include <defs.h>
+#include <config.h>
+#include <stdio.h>
+
+int main (void)
+{
+ puts (NAME); /* from config.h */
+ puts (PACKAGE); /* from defs.h */
+}
+EOF
+
+
+$ACLOCAL
+$AUTOCONF
+$AUTOHEADER
+$AUTOMAKE
+
+# Do not reject slow dependency extractors: we need dependency tracking.
+./configure --enable-dependency-tracking
+$MAKE
+# Sanity check.
+cross_compiling || sub3/run | grep grepme1 || exit 1
+
+$sleep
+echo '#define NAME "grepme2"' > sub2/config.bot
+$MAKE
+cross_compiling || sub3/run | grep grepme2 || exit 1
+$MAKE test-prog-updated
+
+$MAKE distcheck
+
+:
diff --git a/t/autohdrdry.sh b/t/autohdrdry.sh
new file mode 100644
index 000000000..fb53ab81a
--- /dev/null
+++ b/t/autohdrdry.sh
@@ -0,0 +1,42 @@
+#!/bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Removal recovery rules for AC_CONFIG_HEADERS should not remove files
+# with 'make -n'.
+
+. test-init.sh
+
+cat >>configure.ac <<'EOF'
+AC_CONFIG_HEADERS([config.h])
+AC_OUTPUT
+EOF
+
+: >Makefile.am
+
+$ACLOCAL
+$AUTOCONF
+$AUTOHEADER
+$AUTOMAKE
+
+./configure
+$MAKE
+
+rm -f config.h
+$MAKE -n
+test -f stamp-h1
+test ! -e config.h
+
+:
diff --git a/t/automake-cmdline.tap b/t/automake-cmdline.tap
new file mode 100644
index 000000000..5f873cdd3
--- /dev/null
+++ b/t/automake-cmdline.tap
@@ -0,0 +1,63 @@
+#! /bin/sh
+# Copyright (C) 2004-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test Automake's command-line options.
+
+. test-init.sh
+
+plan_ 17
+
+# Usage: bad_cmdline DESCRIPTION REGEX-FOR-STDERR [ARGS-FOR-AUTOMAKE...]
+do_check ()
+{
+ test $# -ge 3 || fatal_ "do_check: invalid usage"
+ desc=$1; shift
+ regex=$1; shift
+ AUTOMAKE_fails -d "$desc (run)" -- "$@"
+ command_ok_ "$desc (stderr)" grep "$regex" stderr
+}
+
+do_check 'invalid long option' 'unrecognized option.*--voo' --voo
+
+# Older perl has a buggy Getopt::Long which makes this fail.
+if $PERL -e 'require 5.8.2;'; then
+ do_check "list of options terminated by '--'" \
+ 'input file.*--voo' -- --voo
+else
+ skip_row_ 2 -r "older perl with buggy Getopt::Long"
+fi
+
+do_check "empty argument" \
+ 'empty argument' ''
+
+do_check "missing argument for long option" \
+ 'option.*-W.*requires an argument' -W
+
+do_check "missing argument for short option" \
+ 'option.*--warnings.*requires an argument' --warnings
+
+do_check "'--help' as option argument" \
+ 'unknown warning.*--help' --warnings --help
+
+do_check "'--help' as option argument" \
+ 'unknown warning.*--help' --warnings --help
+
+do_check "ambiguous incomplete option" \
+ 'unrecognized option.*--ver' --ver
+
+command_ok_ "unambiguous incomplete long option" $AUTOMAKE --vers
+
+:
diff --git a/t/auxdir-autodetect.sh b/t/auxdir-autodetect.sh
new file mode 100644
index 000000000..16db5f1b0
--- /dev/null
+++ b/t/auxdir-autodetect.sh
@@ -0,0 +1,130 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that, if AC_CONFIG_AUX_DIR is not specified, Automake tries
+# to use '.', '..' and '../..', in precisely that order.
+
+. test-init.sh
+
+nil=__no_such_program
+
+unset NONESUCH
+
+cat >>configure.ac << END
+AM_MISSING_PROG([NONESUCH],[$nil])
+AC_OUTPUT
+END
+
+mkdir d3
+mkdir d3/d2
+mkdir d3/d2/d1
+mkdir d3/d2/d1/d0
+
+echo 'echo %%d3%% $*' > d3/missing
+chmod +x d3/missing
+echo 'echo %%d2%% $*' > d3/d2/missing
+chmod +x d3/d2/missing
+echo 'echo %%d1%% $*' > d3/d2/d1/missing
+chmod +x d3/d2/d1/missing
+echo 'echo %%d0%% $*' > d3/d2/d1/d0/missing
+chmod +x d3/d2/d1/d0/missing
+
+mv configure.ac d3/d2/d1/d0/
+
+cd d3/d2/d1/d0
+
+cat > Makefile.am << 'EOF'
+.PHONY: test
+test:
+ $(NONESUCH) >$(out)
+EOF
+
+$ACLOCAL
+$AUTOCONF
+
+# ------------------------------------------- #
+: We must end up with AC_CONFIG_AUX_DIR = . #
+# ------------------------------------------- #
+
+: > install-sh
+$AUTOMAKE
+./configure
+out=out0 $MAKE test
+cat out0
+grep "%%d0%%.*$nil" out0
+grep '%%d[123]' out0 && exit 1
+
+rm -f missing install-sh
+
+# -------------------------------------------- #
+: We must end up with AC_CONFIG_AUX_DIR = .. #
+# -------------------------------------------- #
+
+# Automake finds 'install-sh' in '.', so it assumes that auxdir is '.';
+# but it won't find 'missing' in '.', so it will fail.
+: > install-sh
+AUTOMAKE_fails
+grep 'required file.*[^.]\./missing.*not found' stderr
+rm -f install-sh
+
+# Now things should work.
+: > ../install-sh
+$AUTOMAKE
+./configure
+out=out1 $MAKE test
+cat out1
+grep "%%d1%%.*$nil" out1
+grep '%%d[023]' out1 && exit 1
+
+rm -f ../missing ../install-sh
+
+# ----------------------------------------------- #
+: We must end up with AC_CONFIG_AUX_DIR = ../.. #
+# ----------------------------------------------- #
+
+# Automake finds 'install-sh' in '.', so it assumes that auxdir is '.';
+# but it won't find 'missing' in '.', so it will fail.
+: > install-sh
+AUTOMAKE_fails
+grep 'required file.*[^.]\./missing.*not found' stderr
+rm -f install-sh
+
+# Automake finds 'install-sh' in '..', so it assumes that auxdir is '..';
+# but it won't find 'missing' in '.', so it will fail.
+: > ../install-sh
+AUTOMAKE_fails
+grep 'required file.*[^.]\.\./missing.*not found' stderr
+rm -f ../install-sh
+
+# Now things should work.
+: > ../../install-sh
+$AUTOMAKE
+./configure
+out=out2 $MAKE test
+cat out2
+grep "%%d2%%.*$nil" out2
+grep '%%d[013]' out2 && exit 1
+
+rm -f ../../missing ../../install-sh
+
+# --------------------------------------------------------- #
+: AC_CONFIG_AUX_DIR will not be found: Automake must fail #
+# --------------------------------------------------------- #
+
+AUTOMAKE_fails
+grep 'required file.*missing.*not found' stderr
+
+:
diff --git a/t/auxdir-cc-pr15981.sh b/t/auxdir-cc-pr15981.sh
new file mode 100644
index 000000000..5285382f2
--- /dev/null
+++ b/t/auxdir-cc-pr15981.sh
@@ -0,0 +1,57 @@
+#! /bin/sh
+# Copyright (C) 2014-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test automake bug#15981: automake 1.14 may use $ac_aux_dir
+# before it is defined, leading to error messages such as:
+# "/bin/sh: /home/david/missing: No such file or directory"
+
+required=cc
+. test-init.sh
+
+cat > configure.ac <<END
+AC_INIT([$me], [0.0])
+AC_USE_SYSTEM_EXTENSIONS
+AM_INIT_AUTOMAKE([1.11 foreign])
+AC_CONFIG_FILES([Makefile])
+AC_SUBST([MISSING])
+AC_OUTPUT
+test -n "\${MISSING}"
+END
+
+echo 'int main (void) { return 0; }' > foo.c
+
+cat > Makefile.am <<'END'
+bin_PROGRAMS = foo
+
+# Without quotes around '--help' and with an empty $(MISSING), make might
+# strip the trailing '--', call Bash's 'help' builtin, and have this test
+# succeed spuriously. Yes, that has happened in practice :-(
+test:
+ $(MISSING) '--help'
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure 2>stderr || { cat stderr >&2; exit 1; }
+cat stderr >&2
+$FGREP "missing" stderr && exit 1
+
+$MAKE all
+$MAKE test
+
+:
diff --git a/t/auxdir-computed.tap b/t/auxdir-computed.tap
new file mode 100644
index 000000000..0dae89c9f
--- /dev/null
+++ b/t/auxdir-computed.tap
@@ -0,0 +1,39 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# It should be possible to use a computed auxdir. This might seem
+# bizarre, but it is actually used in multilib builds.
+
+. test-init.sh
+
+plan_ 3
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AC_CONFIG_AUX_DIR([\$foo])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile])
+END
+
+: > Makefile.am
+
+command_ok_ "aclocal" $ACLOCAL
+# Both these two invocations are meant.
+# They exercise both code paths concerning auxiliary files.
+command_ok_ "automake -a" -D TODO -r "long-standing limitation" $AUTOMAKE -a
+command_ok_ "automake" -D TODO -r "long-standing limitation" $AUTOMAKE
+
+:
diff --git a/t/auxdir-misplaced.sh b/t/auxdir-misplaced.sh
new file mode 100644
index 000000000..fb2cc7b01
--- /dev/null
+++ b/t/auxdir-misplaced.sh
@@ -0,0 +1,31 @@
+#! /bin/sh
+# Copyright (C) 2004-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure we diagnose misplaced AC_CONFIG_AUX_DIR.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_AUX_DIR([.]) dnl this will appear after AM_INIT_AUTOMAKE
+END
+
+: > Makefile.am
+
+$ACLOCAL
+AUTOMAKE_fails
+grep 'AC_CONFIG_AUX_DIR.*AM_INIT_AUTOMAKE' stderr
+
+:
diff --git a/t/auxdir-nonexistent.sh b/t/auxdir-nonexistent.sh
new file mode 100644
index 000000000..f7a5620f8
--- /dev/null
+++ b/t/auxdir-nonexistent.sh
@@ -0,0 +1,34 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure we diagnose non-existent AC_CONFIG_AUX_DIR names.
+
+. test-init.sh
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AC_CONFIG_AUX_DIR([nonesuch])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile])
+END
+
+: > Makefile.am
+
+$ACLOCAL
+AUTOMAKE_fails
+grep '^configure\.ac:2:.*nonesuch.* not exist' stderr
+
+:
diff --git a/t/auxdir-pr15981.sh b/t/auxdir-pr15981.sh
new file mode 100644
index 000000000..282867159
--- /dev/null
+++ b/t/auxdir-pr15981.sh
@@ -0,0 +1,39 @@
+#! /bin/sh
+# Copyright (C) 2014-2017 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 <https://www.gnu.org/licenses/>.
+
+# AM_AUX_DIR_EXPAND should ensure $ac_aux_dir is properly initialized.
+# Issue revealed by related automake bug#15981.
+
+. test-init.sh
+
+cat > configure.ac <<'END'
+AC_INIT([test], [0.0])
+AM_AUX_DIR_EXPAND
+printf '%s\n' "ac_aux_dir: '$ac_aux_dir'"
+printf '%s\n' "am_aux_dir: '$am_aux_dir'"
+test "$ac_aux_dir" = . || AS_EXIT([1])
+test "$am_aux_dir" = "`pwd`" || AS_EXIT([1])
+AS_EXIT([0])
+END
+
+$ACLOCAL
+$AUTOCONF
+
+test -f install-sh # sanity check
+
+./configure
+
+:
diff --git a/t/auxdir-pr19311.sh b/t/auxdir-pr19311.sh
new file mode 100644
index 000000000..61970cef7
--- /dev/null
+++ b/t/auxdir-pr19311.sh
@@ -0,0 +1,45 @@
+#! /bin/sh
+# Copyright (C) 2014-2017 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 <https://www.gnu.org/licenses/>.
+
+# Automake bug#19311: AC_PROG_CC called before AC_CONFIG_AUX_DIR can
+# silently force wrong $ac_aux_dir definition.
+
+am_create_testdir=empty
+required=cc
+. test-init.sh
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AC_PROG_CC
+AC_CONFIG_AUX_DIR([build-aux])
+AM_INIT_AUTOMAKE
+AC_OUTPUT([Makefile])
+END
+
+: > Makefile.am
+
+mkdir build-aux
+
+$ACLOCAL
+$AUTOMAKE -a
+$AUTOCONF
+
+test -f build-aux/compile
+test -f build-aux/install-sh
+
+./configure
+
+:
diff --git a/t/auxdir-unportable.tap b/t/auxdir-unportable.tap
new file mode 100644
index 000000000..1d21f5e07
--- /dev/null
+++ b/t/auxdir-unportable.tap
@@ -0,0 +1,51 @@
+#! /bin/sh
+# Copyright (C) 2004-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure we diagnose unportable AC_CONFIG_AUX_DIR names.
+
+. test-init.sh
+
+plan_ 4
+
+cat >configure.ac <<END
+AC_INIT([$me], [1.0])
+AC_CONFIG_AUX_DIR([aux])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile])
+END
+
+: > Makefile.am
+
+am_warn_unportable_auxdir ()
+{
+ details=$1
+ AUTOMAKE_fails
+ command_ok_ \
+ "warn about $details unportable auxdir name" \
+ grep '^configure\.ac:2:.*aux.*W32' stderr
+}
+
+$ACLOCAL || fatal_ "aclocal failed"
+
+am_warn_unportable_auxdir "non-existent"
+
+if mkdir aux; then
+ am_warn_unportable_auxdir "existent"
+else
+ skip_row_ 2 -r "cannot create directory named 'aux'"
+fi
+
+:
diff --git a/t/auxdir.sh b/t/auxdir.sh
new file mode 100644
index 000000000..f3dc58571
--- /dev/null
+++ b/t/auxdir.sh
@@ -0,0 +1,42 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure AC_CONFIG_AUX_DIR works correctly.
+
+. test-init.sh
+
+# The "./." is here so we don't have to mess with subdirs.
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AC_CONFIG_AUX_DIR([./.])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile])
+END
+
+cat > Makefile.am << 'END'
+pkgdata_DATA =
+END
+
+cp "$am_scriptdir/mkinstalldirs" .
+
+# The "././" prefix confuses Automake into thinking it is doing a
+# subdir build. Yes, this is hacky.
+$ACLOCAL
+$AUTOMAKE ././Makefile
+
+grep '/\./\./mkinstalldirs' Makefile.in
+
+:
diff --git a/t/auxdir6.sh b/t/auxdir6.sh
new file mode 100644
index 000000000..964755ef4
--- /dev/null
+++ b/t/auxdir6.sh
@@ -0,0 +1,50 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure AC_CONFIG_AUX_DIR works correctly.
+# This test calls AC_CONFIG_AUX_DIR with an explicit literal argument,
+# thus explicitly making the directory named by that argument the
+# config auxdir.
+# Keep this in sync with sister tests 'auxdir7.sh' and 'auxdir8.sh'.
+
+. test-init.sh
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AC_CONFIG_AUX_DIR([auxdir])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile subdir/Makefile])
+END
+
+mkdir subdir auxdir
+
+cat > Makefile.am << 'END'
+pkgdata_DATA =
+END
+
+cp Makefile.am subdir/Makefile.am
+
+: > auxdir/mkinstalldirs
+: > auxdir/install-sh
+: > auxdir/missing
+
+$ACLOCAL
+$AUTOMAKE
+
+$FGREP '$(top_srcdir)/auxdir/mkinstalldirs' Makefile.in
+$FGREP '$(top_srcdir)/auxdir/mkinstalldirs' subdir/Makefile.in
+
+:
diff --git a/t/auxdir7.sh b/t/auxdir7.sh
new file mode 100644
index 000000000..3dcf6e0bf
--- /dev/null
+++ b/t/auxdir7.sh
@@ -0,0 +1,47 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure AC_CONFIG_AUX_DIR works correctly.
+# This test calls AC_CONFIG_AUX_DIR with a '.' argument, thus explicitly
+# making the top-level directory the config auxdir.
+# Keep this in sync with sister tests 'auxdir6.sh' and 'auxdir8.sh'.
+
+. test-init.sh
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AC_CONFIG_AUX_DIR([.])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile subdir/Makefile])
+END
+
+mkdir subdir
+
+cat > Makefile.am << 'END'
+pkgdata_DATA =
+END
+
+cp Makefile.am subdir/Makefile.am
+
+: > mkinstalldirs
+
+$ACLOCAL
+$AUTOMAKE
+
+$FGREP '$(top_srcdir)/mkinstalldirs' Makefile.in
+$FGREP '$(top_srcdir)/mkinstalldirs' subdir/Makefile.in
+
+:
diff --git a/t/auxdir8.sh b/t/auxdir8.sh
new file mode 100644
index 000000000..8e584604a
--- /dev/null
+++ b/t/auxdir8.sh
@@ -0,0 +1,46 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure AC_CONFIG_AUX_DIR works correctly.
+# This test tries without an explicit call to AC_CONFIG_AUX_DIR;
+# the config auxdir should be implicitly defined to '.' since
+# the install-sh, mkinstalldirs, etc., scripts are in the top-level
+# directory.
+# Keep this in sync with sister tests 'auxdir6.sh' and 'auxdir7.sh'.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_FILES([subdir/Makefile])
+END
+
+mkdir subdir
+
+cat > Makefile.am << 'END'
+pkgdata_DATA =
+END
+
+cp Makefile.am subdir/Makefile.am
+
+: > mkinstalldirs
+
+$ACLOCAL
+$AUTOMAKE
+
+$FGREP '$(top_srcdir)/mkinstalldirs' Makefile.in
+$FGREP '$(top_srcdir)/mkinstalldirs' subdir/Makefile.in
+
+:
diff --git a/t/ax/am-test-lib.sh b/t/ax/am-test-lib.sh
new file mode 100644
index 000000000..3c4bf0120
--- /dev/null
+++ b/t/ax/am-test-lib.sh
@@ -0,0 +1,1063 @@
+# -*- shell-script -*-
+#
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+########################################################
+### IMPORTANT NOTE: keep this file 'set -e' clean. ###
+########################################################
+
+# Do not source several times.
+test ${am_test_lib_sourced-no} = yes && return 0
+am_test_lib_sourced=yes
+
+# A literal escape character. Used by test checking colored output.
+esc=''
+
+# This might be used in testcases checking distribution-related features.
+# Test scripts are free to override this if they need to.
+distdir=$me-1.0
+
+## ---------------------- ##
+## Environment cleanup. ##
+## ---------------------- ##
+
+# Unset some make-related variables that may cause $MAKE to act like
+# a recursively invoked sub-make. Any $MAKE invocation in a test is
+# conceptually an independent invocation, not part of the main
+# 'automake' build.
+unset MFLAGS MAKEFLAGS AM_MAKEFLAGS MAKELEVEL
+unset __MKLVL__ MAKE_JOBS_FIFO # For BSD make.
+unset DMAKE_CHILD DMAKE_DEF_PRINTED DMAKE_MAX_JOBS # For Solaris dmake.
+# Unset verbosity flag.
+unset V
+# Also unset variables that might influence "make install".
+unset DESTDIR
+unset prefix exec_prefix bindir datarootdir datadir docdir dvidir
+unset htmldir includedir infodir libdir libexecdir localedir mandir
+unset oldincludedir pdfdir psdir sbindir sharedstatedir sysconfdir
+# Unset variables that might influence "make distcheck".
+unset DISTCHECK_CONFIGURE_FLAGS AM_DISTCHECK_CONFIGURE_FLAGS
+# Used by install rules for info files.
+unset AM_UPDATE_INFO_DIR
+# We don't want to use the $srcdir value exported by the test driver.
+unset srcdir
+# Also unset variables that control our test driver. While not
+# conceptually independent, they cause some changed semantics we
+# need to control (and test for) in some of the tests to ensure
+# backward-compatible behavior.
+unset TESTS_ENVIRONMENT AM_TESTS_ENVIRONMENT
+unset DISABLE_HARD_ERRORS
+unset AM_COLOR_TESTS
+unset TESTS
+unset XFAIL_TESTS
+unset TEST_LOGS
+unset TEST_SUITE_LOG
+unset RECHECK_LOGS
+unset VERBOSE
+for pfx in TEST_ SH_ TAP_ ''; do
+ unset ${pfx}LOG_COMPILER
+ unset ${pfx}LOG_COMPILE # Not a typo!
+ unset ${pfx}LOG_FLAGS
+ unset AM_${pfx}LOG_FLAGS
+ unset ${pfx}LOG_DRIVER
+ unset ${pfx}LOG_DRIVER_FLAGS
+ unset AM_${pfx}LOG_DRIVER_FLAGS
+done
+unset pfx
+
+# cross_compiling
+# ---------------
+# Tell whether we are cross-compiling. This is especially useful to skip
+# tests (or portions of them) that requires a native compiler.
+cross_compiling ()
+{
+ # Quoting from the autoconf manual:
+ # ... [$host_alias and $build both] default to the result of running
+ # config.guess, unless you specify either --build or --host. In
+ # this case, the default becomes the system type you specified.
+ # If you specify both, *and they're different*, configure enters
+ # cross compilation mode (so it doesn't run any tests that require
+ # execution).
+ test x"$host_alias" != x && test x"$build_alias" != x"$host_alias"
+}
+
+# is_blocked_signal SIGNAL-NUMBER
+# --------------------------------
+# Return success if the given signal number is blocked in the shell,
+# return a non-zero exit status and print a proper diagnostic otherwise.
+is_blocked_signal ()
+{
+ # Use perl, since trying to do this portably in the shell can be
+ # very tricky, if not downright impossible. For reference, see:
+ # <https://lists.gnu.org/archive/html/bug-autoconf/2011-09/msg00004.html>
+ if $PERL -w -e '
+ use strict;
+ use warnings FATAL => "all";
+ use POSIX;
+ my %oldsigaction = ();
+ sigaction('"$1"', 0, \%oldsigaction);
+ exit ($oldsigaction{"HANDLER"} eq "IGNORE" ? 0 : 77);
+ '; then
+ return 0
+ elif test $? -eq 77; then
+ return 1
+ else
+ fatal_ "couldn't determine whether signal $1 is blocked"
+ fi
+}
+
+# single_quote STRING
+# -------------------
+# Single-quote STRING for the shell, also dealing with embedded single
+# quotes. Place the result in the '$am_result', that is thus to be
+# considered public.
+single_quote ()
+{
+ am_result=$1
+ case $am_result in
+ *\'*) am_result=$(printf '%s\n' "$*" | sed -e "s/'/'\\\\''/g");;
+ esac
+ am_result="'$am_result'"
+}
+
+# append_single_quoted VARIABLE STRING
+# ------------------------------------
+append_single_quoted ()
+{
+ am__var=$1; shift
+ single_quote "$1" # Sets 'am_result'.
+ eval "${am__var}=\${$am__var:+\"\${$am__var} \"}\$am_result"
+ unset am__var am_result
+}
+
+# is_valid_varname STRING
+# -----------------------
+# Tell whether STRING is a valid name for a shell variable. Return 0
+# if yes, return 1 if not.
+is_valid_varname ()
+{
+ # FIXME: is the below truly portable even for LC_COLLATE != "C" ?
+ case $1 in
+ [0-9]*) return 1;;
+ *[!a-zA-Z0-9_]*) return 1;;
+ esac
+ return 0
+}
+
+# run_make [-e STATUS] [-O] [-E] [-M] [--] [VAR=VAL ...] [MAKE-ARGS...]
+# ---------------------------------------------------------------------
+#
+# Run $MAKE with the given command-line, and fail if it doesn't exit with
+# STATUS (default: 0). If STATUS is "FAIL", then any exit status > 0 is
+# acceptable. If STATUS is "IGNORE", any exit value is acceptable.
+#
+# Other options:
+#
+# -O save the standard output from make on disk, in a regular file
+# named 'stdout'.
+#
+# -E save the standard error from make on disk, in a regular file
+# named 'stderr'.
+#
+# -M save both the standard output and standard error from make on
+# disk, in a regular file named 'output'. This option supersedes
+# both the '-O' and '-E' options.
+#
+# This function also handle command-line override of variable definition
+# in a smart way, using AM_MAKEFLAGS if a non-GNU make implementation
+# is in use.
+#
+run_make ()
+{
+ am__make_redirect_stdout=no
+ am__make_redirect_stderr=no
+ am__make_redirect_stdall=no
+ am__make_flags=
+ am__make_rc_exp=0
+ # Follow-up code might want to analyse this, so mark is as
+ # publicly accessible (no double undesrscore).
+ am_make_rc=0
+ # Parse options for this function.
+ while test $# -gt 0; do
+ case $1 in
+ -e) am__make_rc_exp=$2; shift;;
+ -O) am__make_redirect_stdout=yes;;
+ -E) am__make_redirect_stderr=yes;;
+ -M) am__make_redirect_stdall=yes;;
+ --) shift; break;;
+ *) break;;
+ esac
+ shift
+ done
+
+ # Use append mode here to avoid dropping output. See automake bug#11413
+ if using_gmake; then
+ # We can trust GNU make to correctly pass macro definitions given
+ # on the command line down to sub-make invocations, and this allow
+ # us to have a vary simple implementation: delegate all the work
+ # to GNU make.
+ :
+ else
+ # We have to explicitly parse arguments passed to make. Not 100%
+ # safe w.r.t. options like '-I' that can have an argument, but
+ # should be good enough for our usages so far.
+ for am__x
+ do
+ case $am__x in
+ *=*)
+ am__maybe_var=${am__x%%=*}
+ am__maybe_val=${am__x#*=}
+ am__maybe_def="${am__maybe_var}=${am__maybe_val}"
+ # Some variables should be portably overridable from the command
+ # line, even when using non-GNU make.
+ case $am__maybe_var in
+ V|\
+ DESTDIR|\
+ SHELL|\
+ VERBOSE|\
+ DISABLE_HARD_ERRORS|\
+ DISTCHECK_CONFIGURE_FLAGS)
+ ;;
+ *)
+ if is_valid_varname "$am__maybe_var"; then
+ append_single_quoted am__make_flags "$am__maybe_def"
+ fi
+ esac
+ unset am__maybe_var am__maybe_val am__maybe_def
+ ;;
+ esac
+ done
+ unset am__x
+ fi
+
+ if test x"$am__make_flags" != x; then
+ set AM_MAKEFLAGS="$am__make_flags" ${1+"$@"}
+ unset am__make_flags
+ fi
+
+ # In redirecting make output below, use append mode, to avoid
+ # dropping output. See automake bug#11413 for details.
+ # The exit status of 253 is a more-or-less random choice, to
+ # help us catch possible errors in redirections and error out
+ # accordingly.
+ (
+ : exec $MAKE ${1+"$@"} # Display traces for future command.
+ set +x # We need to remove them now, not to pollute redirected stderr.
+ if test $am__make_redirect_stdall = yes; then
+ : > output && exec 1>>output 2>&1 || exit 253
+ else
+ if test $am__make_redirect_stdout = yes; then
+ : > stdout && exec 1>>stdout || exit 253
+ fi
+ if test $am__make_redirect_stderr = yes; then
+ : > stderr && exec 2>>stderr || exit 253
+ fi
+ fi
+ exec $MAKE ${1+"$@"}
+ ) || am_make_rc=$?
+
+ if test $am_make_rc -eq 253; then
+ fatal_ "run_make: problems in redirecting make output"
+ fi
+
+ if test $am__make_redirect_stdall = yes; then
+ cat output || fatal_ "displaying make output"
+ else
+ if test $am__make_redirect_stdout = yes; then
+ cat stdout || fatal_ "displaying make output"
+ fi
+ if test $am__make_redirect_stderr = yes; then
+ cat stderr >&2 || fatal_ "displaying make output"
+ fi
+ fi
+
+ case $am__make_rc_exp in
+ IGNORE)
+ : Ignore exit status
+ ;;
+ FAIL)
+ test $am_make_rc -gt 0 || return 1
+ ;;
+ *)
+ test $am__make_rc_exp -ge 0 && test $am__make_rc_exp -le 255 \
+ || fatal_ "invalid expected exit status: '$am__make_rc_exp'"
+ test $am_make_rc -eq $am__make_rc_exp || return 1
+ ;;
+ esac
+}
+
+# AUTOMAKE_run [-e STATUS] [-d DESCRIPTION] [--] [AUTOMAKE-ARGS...]
+# -----------------------------------------------------------------
+# Run automake with AUTOMAKE-ARGS, and fail if it doesn't exit with
+# STATUS. Should be polymorphic for TAP and "plain" tests. The
+# DESCRIPTION, when provided, is used for console reporting, only if
+# the TAP protocol is in use in the current test script.
+AUTOMAKE_run ()
+{
+ am__desc=
+ am__exp_rc=0
+ while test $# -gt 0; do
+ case $1 in
+ -d) am__desc=$2; shift;;
+ -e) am__exp_rc=$2; shift;;
+ --) shift; break;;
+ # Don't fail on unknown option: assume they (and the rest of the
+ # command line) are to be passed verbatim to automake (so stop our
+ # own option parsing).
+ *) break;;
+ esac
+ shift
+ done
+ am__got_rc=0
+ $AUTOMAKE ${1+"$@"} >stdout 2>stderr || am__got_rc=$?
+ cat stderr >&2
+ cat stdout
+ if test $am_test_protocol = none; then
+ test $am__got_rc -eq $am__exp_rc || exit 1
+ return
+ fi
+ if test -z "$am__desc"; then
+ if test $am__got_rc -eq $am__exp_rc; then
+ am__desc="automake exited $am__got_rc"
+ else
+ am__desc="automake exited $am__got_rc, expecting $am__exp_rc"
+ fi
+ fi
+ command_ok_ "$am__desc" test $am__got_rc -eq $am__exp_rc
+}
+
+# AUTOMAKE_fails [-d DESCRIPTION] [OPTIONS...]
+# --------------------------------------------
+# Run automake with OPTIONS, and fail if doesn't exit with status 1.
+# Should be polymorphic for TAP and "plain" tests. The DESCRIPTION,
+# when provided, is used for console reporting, only if the TAP
+# protocol is in use in the current test script.
+AUTOMAKE_fails ()
+{
+ AUTOMAKE_run -e 1 ${1+"$@"}
+}
+
+# extract_configure_help { --OPTION | VARIABLE-NAME } [FILES]
+# -----------------------------------------------------------
+# Use this to extract from the output of "./configure --help" (or similar)
+# the description or help message associated to the given --OPTION or
+# VARIABLE-NAME.
+extract_configure_help ()
+{
+ am__opt_re='' am__var_re=''
+ case $1 in
+ --*'=') am__opt_re="^ $1";;
+ --*'[=]') am__opt_re='^ '$(printf '%s\n' "$1" | sed 's/...$//')'\[=';;
+ --*) am__opt_re="^ $1( .*|$)";;
+ *) am__var_re="^ $1( .*|$)";;
+ esac
+ shift
+ if test x"$am__opt_re" != x; then
+ LC_ALL=C awk '
+ /'"$am__opt_re"'/ { print; do_print = 1; next; }
+ /^$/ { do_print = 0; next }
+ /^ --/ { do_print = 0; next }
+ (do_print == 1) { print }
+ ' ${1+"$@"}
+ else
+ LC_ALL=C awk '
+ /'"$am__var_re"'/ { print; do_print = 1; next; }
+ /^$/ { do_print = 0; next }
+ /^ [A-Z][A-Z0-9_]* / { do_print = 0; next }
+ /^ [A-Z][A-Z0-9_]*$/ { do_print = 0; next }
+ (do_print == 1) { print }
+ ' ${1+"$@"}
+ fi
+}
+
+# grep_configure_help { --OPTION | VARIABLE-NAME } REGEXP
+# -------------------------------------------------------
+# Grep the section of "./configure --help" output associated with either
+# --OPTION or VARIABLE-NAME for the given *extended* regular expression.
+grep_configure_help ()
+{
+ ./configure --help > am--all-help \
+ || { cat am--all-help; exit 1; }
+ cat am--all-help
+ extract_configure_help "$1" am--all-help > am--our-help \
+ || { cat am--our-help; exit 1; }
+ cat am--our-help
+ $EGREP "$2" am--our-help || exit 1
+}
+
+# using_gmake
+# -----------
+# Return success if $MAKE is GNU make, return failure otherwise.
+# Caches the result for speed reasons.
+using_gmake ()
+{
+ case $am__using_gmake in
+ yes)
+ return 0;;
+ no)
+ return 1;;
+ '')
+ # Use --version AND -v, because SGI Make doesn't fail on --version.
+ # Also grep for GNU because newer versions of FreeBSD make do
+ # not complain about --version (they seem to silently ignore it).
+ if $MAKE --version -v | grep GNU; then
+ am__using_gmake=yes
+ return 0
+ else
+ am__using_gmake=no
+ return 1
+ fi;;
+ *)
+ fatal_ "invalid value for \$am__using_gmake: '$am__using_gmake'";;
+ esac
+}
+am__using_gmake="" # Avoid interferences from the environment.
+
+# make_can_chain_suffix_rules
+# ---------------------------
+# Return 0 if $MAKE is a make implementation that can chain suffix rules
+# automatically, return 1 otherwise. Caches the result for speed reasons.
+make_can_chain_suffix_rules ()
+{
+ if test -z "$am__can_chain_suffix_rules"; then
+ if using_gmake; then
+ am__can_chain_suffix_rules=yes
+ return 0
+ else
+ mkdir am__chain.dir$$
+ cd am__chain.dir$$
+ unindent > Makefile << 'END'
+ .SUFFIXES: .u .v .w
+ .u.v: ; cp $< $@
+ .v.w: ; cp $< $@
+END
+ echo make can chain suffix rules > foo.u
+ if $MAKE foo.w && diff foo.u foo.w; then
+ am__can_chain_suffix_rules=yes
+ else
+ am__can_chain_suffix_rules=no
+ fi
+ cd ..
+ rm -rf am__chain.dir$$
+ fi
+ fi
+ case $am__can_chain_suffix_rules in
+ yes) return 0;;
+ no) return 1;;
+ *) fatal_ "make_can_chain_suffix_rules: internal error";;
+ esac
+}
+am__can_chain_suffix_rules="" # Avoid interferences from the environment.
+
+# useless_vpath_rebuild
+# ---------------------
+# Tell whether $MAKE suffers of the bug triggering automake bug#7884.
+# For example, this happens with FreeBSD make, since in a VPATH build
+# it tends to rebuilt files for which there is an explicit or even just
+# a suffix rule, even if said files are already available in the VPATH
+# directory.
+useless_vpath_rebuild ()
+{
+ if test -z "$am__useless_vpath_rebuild"; then
+ if using_gmake; then
+ am__useless_vpath_rebuild=no
+ return 1
+ fi
+ mkdir am__vpath.dir$$
+ cd am__vpath.dir$$
+ touch foo.a foo.b bar baz
+ mkdir build
+ cd build
+ unindent > Makefile << 'END'
+ .SUFFIXES: .a .b
+ VPATH = ..
+ all: foo.b baz
+ .PHONY: all
+ .a.b: ; cp $< $@
+ baz: bar ; cp ../baz bar
+END
+ if run_make all && test ! -e foo.b && test ! -e bar; then
+ am__useless_vpath_rebuild=no
+ else
+ am__useless_vpath_rebuild=yes
+ fi
+ cd ../..
+ rm -rf am__vpath.dir$$
+ fi
+ case $am__useless_vpath_rebuild in
+ yes) return 0;;
+ no) return 1;;
+ "") ;;
+ *) fatal_ "useless_vpath_rebuild: internal error";;
+ esac
+}
+am__useless_vpath_rebuild=""
+
+yl_distcheck () { useless_vpath_rebuild || run_make distcheck ${1+"$@"}; }
+
+null_install ()
+{
+ for am__v in nulldirs destdir instdir; do
+ if ! eval 'test -n "$'$am__v'"'; then
+ fatal_ "null_install() invoked with \$$am__v unset"
+ fi
+ done
+ unset am__v
+ case $#,$1 in
+ 0,)
+ am__inst='install';;
+ 1,-t|1,--texi)
+ am__inst='install install-html install-dvi install-ps install-pdf';;
+ *)
+ fatal_ "null_install(): invalid usage";;
+ esac
+ run_make $nulldirs $am__inst
+ test ! -e "$instdir"
+ run_make $nulldirs $am__inst DESTDIR="$destdir"
+ test ! -e "$instdir"
+ test ! -e "$destdir"
+ run_make -M $nulldirs uninstall
+ # Creative quoting below to please maintainer-check.
+ grep 'rm'' ' output && exit 1
+ run_make -M $nulldirs uninstall DESTDIR="$destdir"
+ # Creative quoting below to please maintainer-check.
+ grep 'rm'' ' output && exit 1
+ : # For 'set -e'.
+}
+
+# count_test_results total=N pass=N fail=N xpass=N xfail=N skip=N error=N
+# -----------------------------------------------------------------------
+# Check that a testsuite run driven by the parallel-tests harness has
+# had the specified numbers of test results (specified by kind).
+# This function assumes that the output of "make check" or "make recheck"
+# has been saved in the 'stdout' file in the current directory, and its
+# log in the 'test-suite.log' file.
+count_test_results ()
+{
+ # Use a subshell so that we won't pollute the script namespace.
+ (
+ # TODO: Do proper checks on the arguments?
+ total=ERR pass=ERR fail=ERR xpass=ERR xfail=ERR skip=ERR error=ERR
+ eval "$@"
+ # For debugging.
+ $EGREP -i '(total|x?pass|x?fail|skip|error)' stdout || :
+ rc=0
+ # Avoid spurious failures with shells with "overly sensible"
+ # errexit shell flag, such as e.g., Solaris /bin/sh.
+ set +e
+ test $(grep -c '^PASS:' stdout) -eq $pass || rc=1
+ test $(grep -c '^XFAIL:' stdout) -eq $xfail || rc=1
+ test $(grep -c '^SKIP:' stdout) -eq $skip || rc=1
+ test $(grep -c '^FAIL:' stdout) -eq $fail || rc=1
+ test $(grep -c '^XPASS:' stdout) -eq $xpass || rc=1
+ test $(grep -c '^ERROR:' stdout) -eq $error || rc=1
+ grep "^# TOTAL: *$total$" stdout || rc=1
+ grep "^# PASS: *$pass$" stdout || rc=1
+ grep "^# XFAIL: *$xfail$" stdout || rc=1
+ grep "^# SKIP: *$skip$" stdout || rc=1
+ grep "^# FAIL: *$fail$" stdout || rc=1
+ grep "^# XPASS: *$xpass$" stdout || rc=1
+ grep "^# ERROR: *$error$" stdout || rc=1
+ test $rc -eq 0
+ )
+}
+
+# get_shell_script SCRIPT-NAME
+# -----------------------------
+# Fetch an Automake-provided shell script from the 'lib/' directory into
+# the current directory, and, if the '$am_test_prefer_config_shell'
+# variable is set to "yes", modify its shebang line to use $SHELL instead
+# of /bin/sh.
+get_shell_script ()
+{
+ am_source=$1 am_target=${2-$1}
+ test ! -f "$am_target" || rm -f "$am_target" || return 99
+ if test x"$am_test_prefer_config_shell" = x"yes"; then
+ sed "1s|#!.*|#! $SHELL|" "$am_scriptdir/$am_source" > "$am_target" \
+ && chmod a+x "$am_target" \
+ || return 99
+ else
+ cp -f "$am_scriptdir/$am_source" "$am_target" || return 99
+ fi
+ sed 10q "$am_target" # For debugging.
+ unset am_target am_source
+}
+
+# fetch_tap_driver
+# ----------------
+# Fetch the Automake-provided TAP driver from the 'lib/' directory into
+# the current directory, and edit its shebang line so that it will be
+# run with the proper shell.
+fetch_tap_driver ()
+{
+ AM_TAP_AWK=$AWK; export AM_TAP_AWK
+ get_shell_script tap-driver.sh tap-driver
+}
+
+
+# require_xsi SHELL
+# -----------------
+# Skip the test if the given shell fails to support common XSI constructs.
+require_xsi ()
+{
+ test $# -eq 1 || fatal_ "require_xsi needs exactly one argument"
+ echo "$me: trying some XSI constructs with $1"
+ $1 -c "$xsi_shell_code" || skip_all_ "$1 lacks XSI features"
+}
+# Shell code supposed to work only with XSI shells. Keep this in sync
+# with libtool.m4:_LT_CHECK_SHELL_FEATURES.
+xsi_shell_code='
+ _lt_dummy="a/b/c"
+ test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
+ = c,a/b,b/c, \
+ && eval '\''test $(( 1 + 1 )) -eq 2 \
+ && test "${#_lt_dummy}" -eq 5'\'
+
+# $PYTHON and support for PEP-3147. Needed to check our python-related
+# install rules.
+python_has_pep3147 ()
+{
+ if test -z "$am_pep3147_tag"; then
+ am_pep3147_tag=$($PYTHON -c 'import imp; print(imp.get_tag())') \
+ || am_pep3147_tag=none
+ fi
+ test $am_pep3147_tag != none
+}
+am_pep3147_tag=
+
+# pyc_location [-p] [FILE]
+# ------------------------
+# Determine what the actual location of the given '.pyc' or '.pyo'
+# byte-compiled file should be, taking into account PEP-3147. Save
+# the location in the '$am_pyc_file' variable. If the '-p' option
+# is given, print the location on the standard output as well.
+pyc_location ()
+{
+ case $#,$1 in
+ 2,-p) am_pyc_print=yes; shift;;
+ 1,*) am_pyc_print=no;;
+ *) fatal_ "pyc_location: invalid usage";;
+ esac
+ if python_has_pep3147; then
+ case $1 in
+ */*) am_pyc_dir=${1%/*} am_pyc_base=${1##*/};;
+ *) am_pyc_dir=. am_pyc_base=$1;;
+ esac
+ am_pyc_ext=${am_pyc_base##*.}
+ am_pyc_base=${am_pyc_base%.py?}
+ am_pyc_file=$am_pyc_dir/__pycache__/$am_pyc_base.$am_pep3147_tag.$am_pyc_ext
+ else
+ am_pyc_file=$1
+ fi
+ test $am_pyc_print = no || printf '%s\n' "$am_pyc_file"
+}
+
+# py_installed [--not] FILE
+# --------------------------
+# Check that the given python FILE has been installed (resp. *not*
+# installed, if the '--not' option is specified). If FILE is a
+# byte-compiled '.pyc' file, the new installation layout specified
+# by PEP-3147 will be taken into account.
+py_installed ()
+{
+ case $#,$1 in
+ 1,*) am_test_py_file='test -f';;
+ 2,--not) am_test_py_file='test ! -e'; shift;;
+ *) fatal_ "pyc_installed: invalid usage";;
+ esac
+ case $1 in
+ *.py[co]) pyc_location "$1"; am_target_py_file=$am_pyc_file;;
+ *) am_target_py_file=$1;;
+ esac
+ $am_test_py_file "$am_target_py_file"
+}
+
+# Usage: require_compiler_ {cc|c++|fortran|fortran77}
+require_compiler_ ()
+{
+ case $# in
+ 0) fatal_ "require_compiler_: missing argument";;
+ 1) ;;
+ *) fatal_ "require_compiler_: too many arguments";;
+ esac
+ case $1 in
+ cc)
+ am__comp_lang="C"
+ am__comp_var=CC
+ am__comp_flag_vars='CFLAGS CPPFLAGS'
+ ;;
+ c++)
+ am__comp_lang="C++"
+ am__comp_var=CXX
+ am__comp_flag_vars='CXXFLAGS CPPFLAGS'
+ ;;
+ fortran)
+ am__comp_lang="Fortran"
+ am__comp_var=FC
+ am__comp_flag_vars='FCFLAGS'
+ ;;
+ fortran77)
+ am__comp_lang="Fortran 77"
+ am__comp_var=F77
+ am__comp_flag_vars='FFLAGS'
+ ;;
+ esac
+ shift
+ eval "am__comp_prog=\${$am__comp_var}" \
+ || fatal_ "expanding \${$am__comp_var} in require_compiler_"
+ case $am__comp_prog in
+ "")
+ fatal_ "botched configuration: \$$am__comp_var is empty";;
+ false)
+ skip_all_ "no $am__comp_lang compiler available";;
+ autodetect|autodetected)
+ # Let the ./configure commands in the test script try to determine
+ # these automatically.
+ unset $am__comp_var $am__comp_flag_vars;;
+ *)
+ # Pre-set these for the ./configure commands in the test script.
+ export $am__comp_var $am__comp_flag_vars;;
+ esac
+ # Delete private variables.
+ unset am__comp_lang am__comp_prog am__comp_var am__comp_flag_vars
+}
+
+## ----------------------------------------------------------- ##
+## Checks for required tools, and additional setups (if any) ##
+## required by them. ##
+## ----------------------------------------------------------- ##
+
+require_tool ()
+{
+ am_tool=$1
+ case $1 in
+ cc|c++|fortran|fortran77)
+ require_compiler_ $1;;
+ -c-o)
+ if test x"$AM_TESTSUITE_SIMULATING_NO_CC_C_O" = x"yes"; then
+ skip_all_ "need a C compiler that grasps -c and -o together"
+ fi
+ ;;
+ xsi-lib-shell)
+ if test x"$am_test_prefer_config_shell" = x"yes"; then
+ require_xsi "$SHELL"
+ else
+ require_xsi "/bin/sh"
+ fi
+ ;;
+ bzip2)
+ # Do not use --version, older versions bzip2 still tries to compress
+ # stdin.
+ echo "$me: running bzip2 --help"
+ bzip2 --help \
+ || skip_all_ "required program 'bzip2' not available"
+ ;;
+ cl)
+ CC=cl
+ # Don't export CFLAGS, as that could have been initialized to only
+ # work with the C compiler detected at configure time. If the user
+ # wants CFLAGS to also influence 'cl', he can still export CFLAGS
+ # in the environment "by hand" before calling the testsuite.
+ export CC CPPFLAGS
+ echo "$me: running $CC -?"
+ # The IRAF package (http://iraf.noao.edu/) contains a 'cl' program
+ # which is interactive, and which could cause the testsuite to hang
+ # if its standard input is not redirected. See automake bug#14707.
+ $CC -? </dev/null \
+ || skip_all_ "Microsoft C compiler '$CC' not available"
+ ;;
+ icl)
+ CC=icl
+ # Don't export CFLAGS, as that could have been initialized to only
+ # work with the C compiler detected at configure time. If the user
+ # wants CFLAGS to also influence 'icl', he can still export CFLAGS
+ # in the environment "by hand" before calling the testsuite.
+ export CC CPPFLAGS
+ echo "$me: running $CC -?"
+ $CC -? >/dev/null \
+ || skip_all_ "Intel C compiler '$CC' not available"
+ ;;
+ etags)
+ # Exuberant Ctags will create a TAGS file even
+ # when asked for --help or --version. (Emacs's etags
+ # does not have such problem.) Use -o /dev/null
+ # to make sure we do not pollute the build directory.
+ echo "$me: running etags --version -o /dev/null"
+ etags --version -o /dev/null \
+ || skip_all_ "required program 'etags' not available"
+ ;;
+ GNUmake)
+ for am_make in "$MAKE" gmake gnumake :; do
+ MAKE=$am_make
+ am__using_gmake= # Invalidate cache used by 'using_gmake()'.
+ test "$MAKE" = : && break
+ echo "$me: determine whether $MAKE is GNU make"
+ using_gmake && break
+ : For shells with busted 'set -e'.
+ done
+ test "$MAKE" = : && skip_all_ "this test requires GNU make"
+ export MAKE
+ unset am_make
+ ;;
+ gcj)
+ GCJ=$GNU_GCJ GCJFLAGS=$GNU_GCJFLAGS; export GCJ GCJFLAGS
+ test "$GCJ" = false && skip_all_ "GNU Java compiler unavailable"
+ : For shells with busted 'set -e'.
+ ;;
+ gcc)
+ CC=$GNU_CC CFLAGS=$GNU_CFLAGS; export CC CFLAGS CPPFLAGS
+ test "$CC" = false && skip_all_ "GNU C compiler unavailable"
+ : For shells with busted 'set -e'.
+ ;;
+ g++)
+ CXX=$GNU_CXX CXXFLAGS=$GNU_CXXFLAGS; export CXX CXXFLAGS CPPFLAGS
+ test "$CXX" = false && skip_all_ "GNU C++ compiler unavailable"
+ : For shells with busted 'set -e'.
+ ;;
+ gfortran)
+ FC=$GNU_FC FCFLAGS=$GNU_FCFLAGS; export FC FCFLAGS
+ test "$FC" = false && skip_all_ "GNU Fortran compiler unavailable"
+ case " $required " in
+ *\ g77\ *) ;;
+ *) F77=$FC FFLAGS=$FCFLAGS; export F77 FFLAGS;;
+ esac
+ ;;
+ g77)
+ F77=$GNU_F77 FFLAGS=$GNU_FFLAGS; export F77 FFLAGS
+ test "$F77" = false && skip_all_ "GNU Fortran 77 compiler unavailable"
+ case " $required " in
+ *\ gfortran\ *) ;;
+ *) FC=$F77 FCFLAGS=$FFLAGS; export FC FCFLAGS;;
+ esac
+ ;;
+ grep-nonprint)
+ # Check that grep can parse nonprinting characters correctly.
+ # BSD 'grep' works from a pipe, but not a seekable file.
+ # GNU or BSD 'grep -a' works on files, but is not portable.
+ case $(echo "$esc" | grep .)$(echo "$esc" | grep "$esc") in
+ "$esc$esc") ;;
+ *) skip_ "grep can't handle nonprinting characters correctly";;
+ esac
+ ;;
+ javac)
+ # The Java compiler from JDK 1.5 (and presumably earlier versions)
+ # cannot handle the '-version' option by itself: it bails out
+ # telling that source files are missing. Adding also the '-help'
+ # option seems to solve the problem.
+ echo "$me: running javac -version -help"
+ javac -version -help || skip_all_ "Sun Java compiler not available"
+ ;;
+ java)
+ # See the comments above about 'javac' for why we use also '-help'.
+ echo "$me: running java -version -help"
+ java -version -help || skip_all_ "Sun Java interpreter not found"
+ ;;
+ lib)
+ AR=lib; export AR
+ # Attempting to create an empty archive will actually not
+ # create the archive, but lib will output its version.
+ echo "$me: running $AR -out:defstest.lib"
+ $AR -out:defstest.lib \
+ || skip_all_ "Microsoft 'lib' utility not available"
+ ;;
+ makedepend)
+ echo "$me: running makedepend -f-"
+ makedepend -f- \
+ || skip_all_ "required program 'makedepend' not available"
+ ;;
+ mingw)
+ uname_s=$(uname -s || echo UNKNOWN)
+ echo "$me: system name: $uname_s"
+ case $uname_s in
+ MINGW*) ;;
+ *) skip_all_ "this test requires MSYS in MinGW mode" ;;
+ esac
+ unset uname_s
+ ;;
+ non-root)
+ # Skip this test case if the user is root.
+ # We try to append to a read-only file to detect this.
+ priv_check_temp=am--priv-check.$$
+ touch $priv_check_temp && chmod a-w $priv_check_temp \
+ || framework_failure_ "creating unwritable file $priv_check_temp"
+ # Not a useless use of subshell: lesser shells might bail
+ # out if a builtin fails.
+ overwrite_status=0
+ (echo foo >> $priv_check_temp) || overwrite_status=$?
+ rm -f $priv_check_temp
+ if test $overwrite_status -eq 0; then
+ skip_all_ "cannot drop file write permissions"
+ fi
+ unset priv_check_temp overwrite_status
+ ;;
+ # Extra quoting required to avoid maintainer-check spurious failures.
+ 'perl-threads')
+ if test "$WANT_NO_THREADS" = "yes"; then
+ skip_all_ "Devel::Cover cannot cope with threads"
+ fi
+ ;;
+ native)
+ # Don't use "&&" here, to avoid a bug of 'set -e' present in
+ # some (even relatively recent) versions of the BSD shell.
+ # We add the dummy "else" branch for extra safety.
+ ! cross_compiling || skip_all_ "doesn't work in cross-compile mode"
+ ;;
+ python)
+ PYTHON=${PYTHON-python}
+ # Older python versions don't support --version, they have -V.
+ echo "$me: running $PYTHON -V"
+ $PYTHON -V || skip_all_ "python interpreter not available"
+ ;;
+ ro-dir)
+ # Skip this test case if read-only directories aren't supported
+ # (e.g., under DOS.)
+ ro_dir_temp=ro_dir.$$
+ mkdir $ro_dir_temp && chmod a-w $ro_dir_temp \
+ || framework_failure_ "creating unwritable directory $ro_dir_temp"
+ # Not a useless use of subshell: lesser shells might bail
+ # out if a builtin fails.
+ create_status=0
+ (: > $ro_dir_temp/probe) || create_status=$?
+ rm -rf $ro_dir_temp
+ if test $create_status -eq 0; then
+ skip_all_ "cannot drop directory write permissions"
+ fi
+ unset ro_dir_temp create_status
+ ;;
+ runtest)
+ # DejaGnu's runtest program. We rely on being able to specify
+ # the program on the runtest command-line. This requires
+ # DejaGnu 1.4.3 or later.
+ echo "$me: running runtest SOMEPROGRAM=someprogram --version"
+ runtest SOMEPROGRAM=someprogram --version \
+ || skip_all_ "DejaGnu is not available"
+ ;;
+ tex)
+ # No all versions of Tex support '--version', so we use
+ # a configure check.
+ if test -z "$TEX"; then
+ skip_all_ "TeX is required, but it wasn't found by configure"
+ fi
+ ;;
+ lex)
+ test x"$LEX" = x"false" && skip_all_ "lex not found or disabled"
+ export LEX
+ ;;
+ yacc)
+ test x"$YACC" = x"false" && skip_all_ "yacc not found or disabled"
+ export YACC
+ ;;
+ flex)
+ LEX=flex; export LEX
+ echo "$me: running flex --version"
+ flex --version || skip_all_ "required program 'flex' not available"
+ ;;
+ bison)
+ YACC='bison -y'; export YACC
+ echo "$me: running bison --version"
+ bison --version || skip_all_ "required program 'bison' not available"
+ ;;
+ valac)
+ echo "$me: running valac --version"
+ if ! valac --version; then
+ skip_all_ "required program 'valac' not available"
+ elif cross_compiling; then
+ skip_all_ "cross-compiling valac-generated C files is brittle"
+ fi
+ # TODO: We also know we need GNU make, the C compiler, and pkg-config
+ # here, but there is no easy way to express this with the current
+ # code organization. We should improve the situation, sooner or
+ # later. At which point the tests requiring 'valac' can drop the
+ # explicit requirements for those tools.
+ ;;
+ *)
+ # Generic case: the tool must support --version.
+ echo "$me: running $1 --version"
+ # It is not likely but possible that the required tool is a special
+ # builtin, in which case the shell is allowed to exit after an error.
+ # So we need the subshell here. Also, some tools, like Sun cscope,
+ # can be interactive without redirection.
+ ($1 --version) </dev/null \
+ || skip_all_ "required program '$1' not available"
+ ;;
+ esac
+}
+
+process_requirements ()
+{
+ # Look for (and maybe set up) required tools and/or system features;
+ # skip the current test if they are not found.
+ for am_tool in $*; do
+ require_tool $am_tool
+ done
+ # We might need extra m4 macros, e.g., for Libtool or Gettext.
+ for am_tool in gettext libtool pkg-config; do
+ case " $required " in
+ # The lack of whitespace after $am_tool is intended.
+ *" $am_tool"*) . ./t/$am_tool-macros.dir/get.sh;;
+ esac
+ done
+ unset am_tool
+}
+
+## ---------------------------------------------------------------- ##
+## Create and set up of the temporary directory used by the test. ##
+## ---------------------------------------------------------------- ##
+
+am_setup_testdir ()
+{
+ # The subdirectory where the current test script will run and write its
+ # temporary/data files. This will be created shortly, and will be removed
+ # by the cleanup trap below if the test passes. If the test doesn't pass,
+ # this directory will be kept, to facilitate debugging.
+ am_test_subdir=${argv0#$am_rel_srcdir/}
+ case $am_test_subdir in
+ */*) am_test_subdir=${am_test_subdir%/*}/$me.dir;;
+ *) am_test_subdir=$me.dir;;
+ esac
+ test ! -e $am_test_subdir || rm_rf_ $am_test_subdir \
+ || framework_failure_ "removing old test subdirectory"
+ $MKDIR_P $am_test_subdir \
+ || framework_failure_ "creating test subdirectory"
+ cd $am_test_subdir \
+ || framework_failure_ "cannot chdir into test subdirectory"
+ if test x"$am_create_testdir" != x"empty"; then
+ cp "$am_scriptdir"/install-sh "$am_scriptdir"/missing \
+ "$am_scriptdir"/compile "$am_scriptdir"/depcomp . \
+ || framework_failure_ "fetching common files from $am_scriptdir"
+ # Build appropriate environment in test directory. E.g., create
+ # configure.ac, touch all necessary files, etc. Don't use AC_OUTPUT,
+ # but AC_CONFIG_FILES so that appending still produces a valid
+ # configure.ac. But then, tests running config.status really need
+ # to append AC_OUTPUT.
+ {
+ echo "AC_INIT([$me], [1.0])"
+ if test x"$am_serial_tests" = x"yes"; then
+ echo "AM_INIT_AUTOMAKE([serial-tests])"
+ else
+ echo "AM_INIT_AUTOMAKE"
+ fi
+ echo "AC_CONFIG_FILES([Makefile])"
+ } >configure.ac || framework_failure_ "creating configure.ac skeleton"
+ fi
+}
+
+am_extra_info ()
+{
+ echo "Running from installcheck: $am_running_installcheck"
+ echo "Test Protocol: $am_test_protocol"
+ echo "PATH = $PATH"
+}
diff --git a/t/ax/cc-no-c-o.in b/t/ax/cc-no-c-o.in
new file mode 100644
index 000000000..fd51482e4
--- /dev/null
+++ b/t/ax/cc-no-c-o.in
@@ -0,0 +1,41 @@
+#! @AM_TEST_RUNNER_SHELL@
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# A "C compiler" that chokes when the '-c' and '-o' options are passed
+# together to it on the command line. See also automake bug#13378.
+
+am_CC=${AM_TESTSUITE_GNU_CC-'@GNU_CC@'}
+
+seen_c=false
+seen_o=false
+
+for arg
+do
+ case $arg in
+ -c)
+ seen_c=true;;
+ # It is acceptable not to leave a space between the '-o' option
+ # and its argument, so we have to cater for that.
+ -o|-o*)
+ seen_o=true;;
+ esac
+ if $seen_c && $seen_o; then
+ echo "$0: both '-o' and '-c' seen on the command line" >&2
+ exit 2
+ fi
+done
+
+exec $am_CC "$@"
diff --git a/t/ax/deltree.pl b/t/ax/deltree.pl
new file mode 100644
index 000000000..f239057aa
--- /dev/null
+++ b/t/ax/deltree.pl
@@ -0,0 +1,34 @@
+#!/usr/bin/env perl
+# deltree: recursively removes file and directory,
+# trying to handle permissions and other complications.
+
+# Copyright (C) 2013-2017 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 <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings FATAL => 'all';
+use File::Path qw/rmtree/;
+
+my $exit_status = 0;
+local $SIG{__WARN__} = sub { warn "@_"; $exit_status = 1; };
+
+foreach my $path (@ARGV) {
+ local $@ = undef;
+ rmtree ($path);
+}
+
+exit $exit_status;
+
+# vim: ft=perl ts=4 sw=4 et
diff --git a/t/ax/depcomp.sh b/t/ax/depcomp.sh
new file mode 100644
index 000000000..09cf99933
--- /dev/null
+++ b/t/ax/depcomp.sh
@@ -0,0 +1,417 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check dependency tracking in various flavours.
+# Contains both libtool and non-libtool case.
+# Sourced by the various (autogenerated) 'depcomp*.tap' tests.
+# Examples of reported failures that motivated those test are
+# listed below.
+
+# -------------------------------------------------------------------------
+
+# <https://lists.gnu.org/archive/html/automake-patches/2011-04/msg00028.html>
+#
+# Here's the bug: makedepend will prefix VPATH to the object file name,
+# thus the second make will invoke depcomp with object='../../src/foo.o',
+# causing errors such as:
+#
+# touch: cannot touch '../../src/.deps/foo.TPo': No such file or directory
+# makedepend: error: cannot open "../../src/.deps/foo.TPo"
+# ../../depcomp: line 560: ../../src/.deps/foo.TPo: No such file or directory
+
+# -------------------------------------------------------------------------
+
+# <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=8473>
+# <https://lists.gnu.org/archive/html/automake-patches/2011-04/msg00079.html>
+#
+# Here's the bug: hp depmode will prefix VPATH to the object file name,
+# thus the second gmake will invoke depcomp with object='../../src/foo.o',
+# causing errors such as (broken on multiple lines for clarity):
+#
+# cpp: "", line 0: error 4066: Cannot create
+# "../../gllib/.deps/nonblocking.TPo" file for
+# "-M../../gllib/.deps/nonblocking.TPo" option.
+# (No such file or directory[errno=2])
+#
+
+# -------------------------------------------------------------------------
+
+# <https://lists.gnu.org/archive/html/automake-patches/2011-04/msg00140.html>
+# <https://lists.gnu.org/archive/html/automake-patches/2011-05/msg00019.html>
+#
+# A partial failure of an earlier version of this test; some bad
+# post-processing of the '*.Po' files led to the following broken
+# contents of 'src/sub/.deps/subfoo.Po':
+#
+# > sub/subfoo.o: ../../depmod-data.dir/src/sub/subfoo.c \
+# > ../../depmod-data.dir/src/foo.h
+# > ../../depmod-data.dir/src/sub/subfoo.c \:
+# > ../../depmod-data.dir/src/foo.h:
+#
+# which caused make to die with an error like:
+#
+# "sub/.deps/subfoo.Po:3: *** missing separator. Stop."
+
+# -------------------------------------------------------------------------
+
+# This code expects test-init.sh has already been included in advance.
+
+ocwd=$(pwd) || fatal_ "getting current working directory"
+longpath=this-is/a-path/which-has/quite-a/definitely/truly/long_long_name
+cachevar=am_cv_CC_dependencies_compiler_type
+
+srctree=depmod-1.0
+mkdir $srctree
+cd $srctree
+
+cd_top ()
+{
+ cd "$ocwd" || fatal_ "cannot chdir back to top directory"
+}
+
+delete ()
+{
+ test -f "$1" || fatal_ "$1: file does not exist"
+ rm -f "$1" || fatal_ "$1: couldn't remove"
+}
+
+edit ()
+{
+ file=$1; shift
+ sed "$@" <"$file" > t && mv -f t "$file" \
+ || fatal_ "$file: editing of file failed"
+}
+
+rewrite ()
+{
+ file=$1; shift
+ "$@" > "$file" || fatal_ "$file: couldn't rewrite"
+}
+
+setup_srcdir ()
+{
+ srcdir=$1 # This is intended to be global.
+ mkdir -p "$srcdir" \
+ || fatal_ "couldn't create source directory '$srcdir'"
+ cp -pR "$ocwd/$srctree"/* "$srcdir"/ \
+ || fatal_ "couldn't populate source directory '$srcdir'"
+}
+
+
+check_no_depfiles ()
+{
+ find . -name '*.Plo' -o -name '*.Po' | grep . && return 1
+ return 0
+}
+
+check_distclean ()
+{
+ # "make distcleancheck" can only run from a VPATH build.
+ if test $vpath = no; then
+ make_ok distclean && check_no_depfiles
+ else
+ $MAKE distcleancheck
+ fi
+}
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AC_CONFIG_AUX_DIR([build-aux])
+AM_INIT_AUTOMAKE([subdir-objects])
+AC_PROG_CC
+AM_PROG_AR
+$(if test $depcomp_with_libtool = yes; then
+ echo AC_PROG_LIBTOOL
+ else
+ echo AC_PROG_RANLIB
+ fi)
+AC_CONFIG_FILES([Makefile src/Makefile])
+AC_OUTPUT
+END
+
+mkdir build-aux sub src src/sub2
+
+case $depcomp_with_libtool in
+ yes)
+ po=Plo objext=lo a=la
+ normalized_target=libfoo_la
+ # On platforms requiring that no undefined symbols exist in order
+ # to build shared libraries (e.g. Windows DLLs), you have to
+ # explicitly declare that the libtool library you are building
+ # does not actually have any undefined symbols, for libtool to
+ # even try to build it as a shared library. Without that
+ # explicit declaration, libtool falls back to a static library
+ # only, regardless of any --enable-shared flags etc.
+ LIBPRIMARY=LTLIBRARIES LINKADD=LIBADD NOUNDEF=-no-undefined
+ libbaz_ldflags="libbaz_${a}_LDFLAGS = $NOUNDEF"
+ echo lib_LTLIBRARIES = libfoo.la >> Makefile.am
+ make_ok ()
+ {
+ run_make -M -- ${1+"$@"}
+ $FGREP 'unknown directive' output && return 1
+ rm -f output
+ # Checks for stray files possibly left around by less common
+ # depmodes.
+ find . -name '*.[ud]' | grep . && return 1
+ return 0
+ }
+ ;;
+ no)
+ po=Po objext='$(OBJEXT)' a=a
+ normalized_target=foo
+ LIBPRIMARY=LIBRARIES LINKADD=LDADD NOUNDEF=
+ libbaz_ldflags=
+ echo bin_PROGRAMS = foo >> Makefile.am
+ make_ok ()
+ {
+ $MAKE ${1+"$@"}
+ }
+ ;;
+ *)
+ fatal_ "invalid value '$depcomp_with_libtool' for variable" \
+ "\$depcomp_with_libtool"
+ ;;
+esac
+
+cat >> Makefile.am <<END
+SUBDIRS = src
+# We include subfoo only to be sure that the munging in depcomp
+# doesn't remove too much from the object file name.
+${normalized_target}_SOURCES = foo.c sub/subfoo.c foo.h sub/subfoo.h
+${normalized_target}_LDFLAGS = $NOUNDEF
+${normalized_target}_${LINKADD} = src/libbaz.$a
+
+.PHONY: grep-test
+grep-test:
+## For debugging.
+ cat \$(DEPDIR)/foo.$po || :
+ cat sub/\$(DEPDIR)/subfoo.$po || :
+ cat src/\$(DEPDIR)/baz.$po || :
+ cat src/sub2/\$(DEPDIR)/sub2foo.$po || :
+## Checks are done here.
+ grep '^foo.$objext.*:' \$(DEPDIR)/foo.$po
+ grep '^sub/subfoo\.$objext.*:' sub/\$(DEPDIR)/subfoo.$po
+ grep '^baz\.$objext.*:' src/\$(DEPDIR)/baz.$po
+ grep '^sub2/sub2foo\.$objext.*:' src/sub2/\$(DEPDIR)/sub2foo.$po
+END
+
+cat > src/Makefile.am <<END
+noinst_${LIBPRIMARY} = libbaz.$a
+# We include sub2foo only to be sure that the munging in depcomp
+# doesn't remove too much from the object file name.
+libbaz_${a}_SOURCES = baz.c sub2/sub2foo.c baz.h sub2/sub2foo.h
+$libbaz_ldflags
+END
+
+cat > foo.c <<'END'
+#include "foo.h"
+#include "src/baz.h"
+#include <stdlib.h>
+int main (void)
+{
+ printf ("foo bar\n");
+ exit (EXIT_SUCCESS + subfoo () + baz ());
+}
+END
+
+cat > foo.h <<'END'
+#include <stdio.h>
+#include "sub/subfoo.h"
+END
+
+cat > sub/subfoo.c <<'END'
+#include "sub/subfoo.h"
+int subfoo (void) { return 0; }
+END
+
+echo '/* empty */' > src/sub2/sub2foo.h
+
+cat > sub/subfoo.h <<'END'
+#include <stdio.h>
+extern int subfoo (void);
+END
+
+cat > src/baz.c <<'END'
+#include "baz.h"
+int baz (void) { return 0; }
+END
+
+cat > src/baz.h <<'END'
+extern int baz (void);
+END
+
+cat > src/sub2/sub2foo.c <<'END'
+#include "sub2foo.h"
+int sub2foo (void) { return 0; }
+END
+
+test $depcomp_with_libtool = no || libtoolize \
+ || fatal_ "libtoolize failed"
+$ACLOCAL && $AUTOCONF && $AUTOMAKE -a \
+ || fatal_ "autotools failed"
+test -f build-aux/depcomp \
+ || fatal_ "depcomp script not installed"
+
+# To offer extra coverage for the depmodes (like "aix" of "hp2") where the
+# name of the compiler-generated depfiles can depend on whether libtool is
+# in use *and* on which kind of libraries libtool is building (static,
+# shared, or both), we would like to run the libtool-oriented tests thrice:
+# once after having run configure with the '--disable-shared' option, once
+# after having run it with the '--enable-shared' options, and once by
+# leaving it to configure to automatically select which kind of library (or
+# libraries) to build.
+#
+# But doing such three-fold checks unconditionally for all the depmodes
+# would slow down the already too slow libtool tests unacceptably (up to a
+# 150-200% factor), with no real gain in coverage for most of the depmodes.
+# So, since the depmodes that would benefit from the extra tests are never
+# forced to configure in out tests below, but can only be automatically
+# selected by '--enable-dependency-tracking', we make this threefold check
+# only in this later case.
+
+if test $depmode,$depcomp_with_libtool = auto,yes; then
+ do_all_tests ()
+ {
+ do_test default
+ do_test noshared --disable-shared
+ do_test nostatic --disable-static
+ }
+else
+ do_all_tests () { do_test; }
+fi
+
+case $depmode in
+ auto)
+ displayed_depmode='..*' # At least one character long.
+ cfg_deptrack=--enable-dependency-tracking ;;
+ disabled)
+ displayed_depmode=none
+ cfg_deptrack=--disable-dependency-tracking ;;
+ *)
+ displayed_depmode="(cached) $depmode"
+ cfg_deptrack="$cachevar=$depmode"
+ # Sanity check: ensure the cache variable we force is truly
+ # used by configure.
+ $FGREP $cachevar configure \
+ || fatal_ "configure lacks required cache variable '$cachevar'";;
+esac
+
+cd_top
+
+do_test ()
+{
+ cd_top
+ if test $vpath = no; then
+ pfx="in-tree build"
+ else
+ pfx="$vpath VPATH"
+ fi
+ if test $# -gt 0; then
+ subdir=$1; shift
+ pfx="$pfx, $subdir"
+ test -d $subdir || mkdir $subdir || fatal_ "creating directory $subdir"
+ cd $subdir
+ fi
+ pfx="[$pfx]"
+ case $vpath in
+ simple)
+ mkdir -p vpath-simple/build
+ cd vpath-simple/build
+ setup_srcdir ..
+ ;;
+ long)
+ mkdir -p vpath-long/src vpath-long/wrk
+ cd vpath-long/wrk
+ setup_srcdir ../src/$longpath
+ ;;
+ absolute)
+ mkdir -p vpath-abs/build
+ cd vpath-abs/build
+ absdir=$(cd .. && pwd) || fatal_ "getting absolute directory"
+ setup_srcdir "$absdir/vpath-abs"
+ unset absdir
+ ;;
+ no)
+ mkdir intree
+ cd intree
+ setup_srcdir .
+ ;;
+ *)
+ fatal_ "invalid value '$vpath' for variable \$vpath"
+ ;;
+ esac
+
+ command_ok_ \
+ "$pfx configure" \
+ "$srcdir/configure" $cfg_deptrack ${1+"$@"} >stdout
+ cat stdout
+
+ command_ok_ \
+ "$pfx right depmode selected" \
+ grep "^checking dependency style .*\.\.\. $displayed_depmode$" stdout
+ rm -f stdout
+
+ command_ok_ "$pfx simple make" make_ok
+ # Some bugs in VPATH builds only kick in during a rebuild.
+ command_ok_ "$pfx clean & rebuild" eval '$MAKE clean && make_ok'
+
+ if test $depmode = disabled; then
+ command_ok_ "$pfx no dependency files generated" check_no_depfiles
+ r=ok \
+ && grep "[ $tab]depmode=none" Makefile \
+ && rewrite "$srcdir"/src/sub2/sub2foo.h echo 'choke me' \
+ && delete "$srcdir"/sub/subfoo.h \
+ && make_ok \
+ || r='not ok'
+ result_ "$r" "$pfx dependency tracking is truly disabled"
+ elif grep "[ $tab]depmode=none" Makefile; then
+ skip_row_ 2 -r "automatic dependency tracking couldn't be activated"
+ else
+ command_ok_ "$pfx generated $po files look correct" $MAKE grep-test
+ r=ok \
+ && : "Some checks in the subdir." \
+ && $sleep \
+ && : "Ensure rebuild rules really kick in." \
+ && rewrite "$srcdir"/src/sub2/sub2foo.h echo 'choke me' \
+ && cd src \
+ && not $MAKE \
+ && cd .. \
+ && : "Ensure the deleted header bug is fixed." \
+ && delete "$srcdir"/src/sub2/sub2foo.h \
+ && edit "$srcdir"/src/sub2/sub2foo.c -e 1d \
+ && cd src \
+ && make_ok \
+ && : "Now do similar checks for the parent directory." \
+ && cd .. \
+ && rewrite "$srcdir"/sub/subfoo.h echo 'choke me' \
+ && not $MAKE \
+ && delete "$srcdir"/sub/subfoo.h \
+ && edit "$srcdir"/sub/subfoo.c -e 1d \
+ && edit "$srcdir"/foo.h -e 2d \
+ && make_ok \
+ || r='not ok'
+ result_ "$r" "$pfx dependency tracking works"
+ fi
+
+ command_ok_ "$pfx make distclean" check_distclean
+ cd_top
+}
+
+for vpath in no simple long absolute; do
+ do_all_tests
+done
+
+:
diff --git a/t/ax/distcheck-hook-m4.am b/t/ax/distcheck-hook-m4.am
new file mode 100644
index 000000000..9442a9896
--- /dev/null
+++ b/t/ax/distcheck-hook-m4.am
@@ -0,0 +1,30 @@
+## Data files for some tests. Not used in the automake build system.
+##
+## Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+distcheck-hook:
+ @fatal () { echo "$@: $$*" >&2; exit 1; }; \
+ $(am__cd) $(distdir) && chmod u+w . && mkdir _m4 \
+ || fatal "cannot setup distdir"; \
+ $(ACLOCAL) -I _m4 $(ACLOCAL_AMFLAGS) --install --output=_am.m4 \
+ || fatal "cannot regenerate aclocal.m4"; \
+ lst=`ls _m4 | tr '\012\015' ' '`; \
+ if test -n "$$lst"; then \
+ fatal "required m4 files not distributed or outdated: $$lst"; \
+ fi; \
+ $(AUTOCONF) -o /dev/null || fatal "can't remake configure"; \
+ rm -rf _m4 _am.m4 autom4te.cache && chmod a-w . \
+ || fatal "cannot reset distdir"
diff --git a/t/ax/extract-testsuite-summary.pl b/t/ax/extract-testsuite-summary.pl
new file mode 100644
index 000000000..284eefdcf
--- /dev/null
+++ b/t/ax/extract-testsuite-summary.pl
@@ -0,0 +1,30 @@
+#! /usr/bin/env perl
+# Extract the testsuite summary generated by the parallel testsuite
+# harness from the output of "make check".
+
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+use warnings FATAL => 'all';
+use strict;
+
+my $br = '=' x 76;
+my @sections = ('');
+while (<>)
+ {
+ push @sections, $_, '' if /$br/;
+ $sections[-1] .= $_ if !/$br/;
+ }
+print @sections[1..$#sections-1];
diff --git a/t/ax/is b/t/ax/is
new file mode 100755
index 000000000..ba6ea4445
--- /dev/null
+++ b/t/ax/is
@@ -0,0 +1,57 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test that two whitespace-separated lists are equal.
+# Assumes the two lists are passed on the command line separated by
+# a '==' string.
+# This script is useful to test equality of lists in makefile rules,
+# in the face of variables defined through line-continuations,
+# automake rewrites and expansions of empty variables.
+
+# NOTE: keep this file Bourne-compatible, for the sake of systems with
+# non-POSIX /bin/sh (like Solaris).
+
+set -e
+set -u
+
+# Initialize before unsetting, for shells (like older bash or Solaris
+# ksh) that fail to unset variables that are already unset.
+exp= got=; unset exp got
+seen_eqeq=no
+while test $# -gt 0; do
+ if test x"$1" = x"=="; then
+ if test $seen_eqeq = no; then
+ seen_eqeq=yes
+ else
+ echo "$0: more than one '==' argument seen on command line" >&2
+ exit 2
+ fi
+ else
+ if test $seen_eqeq = no; then
+ got=${got+"$got "}$1
+ else
+ exp=${exp+"$exp "}$1
+ fi
+ fi
+ shift
+done
+
+if test $seen_eqeq = no; then
+ echo "$0: no '==' argument seen on command line" >&2
+ exit 2
+fi
+
+test x"${exp-}" = x"${got-}"
diff --git a/t/ax/is_newest b/t/ax/is_newest
new file mode 100755
index 000000000..e62c132d1
--- /dev/null
+++ b/t/ax/is_newest
@@ -0,0 +1,42 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Usage: is_newest FILE FILES
+# Fail if any file in FILES is newer than FILE, and print the list of
+# such files on the standard error. Resolve ties in favor of FILE.
+
+# NOTE: keep this file Bourne-compatible, for the sake of systems with
+# non-POSIX /bin/sh (like Solaris).
+
+set -u
+
+me=is_newest
+
+if test $# -lt 2; then
+ echo "$me: too few arguments" >&2
+ exit 2
+fi
+
+file=$1; shift
+newer_files=`find "$@" -prune -newer "$file"` || exit $?
+
+if test -n "$newer_files"; then
+ echo "$me: these files are newer than '$file':" >&2
+ for f in $newer_files; do echo "* $f" >&2; done
+ exit 1
+fi
+
+exit 0
diff --git a/t/ax/runtest.in b/t/ax/runtest.in
new file mode 100644
index 000000000..80a6b1a29
--- /dev/null
+++ b/t/ax/runtest.in
@@ -0,0 +1,130 @@
+#!@AM_TEST_RUNNER_SHELL@
+# @configure_input@
+#
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Run an Automake test from the command line.
+
+set -e; set -u
+
+: ${AM_TEST_RUNNER_SHELL='@AM_TEST_RUNNER_SHELL@'}
+: ${AM_PROVE_CMD='prove'}
+: ${AM_PROVEFLAGS='--merge --verbose'}
+: ${srcdir='@srcdir@'}
+: ${abs_srcdir='@abs_srcdir@'}
+: ${abs_builddir='@abs_builddir@'}
+: ${PATH_SEPARATOR='@PATH_SEPARATOR@'}
+
+# For sourcing of extra "shell libraries" by our test scripts. As per
+# POSIX, sourcing a file with '.' will cause it to be looked up in $PATH
+# in case it is given with a relative name containing no slashes.
+if test "$srcdir" != .; then
+ PATH=$abs_srcdir/t/ax$PATH_SEPARATOR$PATH
+fi
+PATH=$abs_builddir/t/ax$PATH_SEPARATOR$PATH
+export PATH
+
+# For use by the testsuite framework. The Automake test harness
+# define this, so we better do the same.
+export srcdir
+
+# Some testsuite-influential variables should be overridable from the
+# test scripts, but not from the environment.
+# Keep this in sync with the 'Makefile.am:AM_TESTS_ENVIRONMENT'.
+for v in \
+ required \
+ am_test_protocol \
+ am_serial_tests \
+ am_test_prefer_config_shell \
+ am_original_AUTOMAKE \
+ am_original_ACLOCAL \
+ am_test_lib_sourced \
+ test_lib_sourced \
+; do
+ eval "$v= && unset $v" || exit 1
+done
+unset v
+
+xecho () { printf '%s\n' "$*"; }
+error () { echo "$0: $*" >&2; exit 255; }
+
+# Some shell flags should be passed over to the test scripts.
+shell_opts=
+while test $# -gt 0; do
+ case $1 in
+ --help)
+ xecho "Usage: $0 [--shell=PATH] [-k] [SHELL-OPTIONS]" \
+ "[VAR=VALUE ...] TEST [TEST-OPTIONS]"
+ exit $?
+ ;;
+ --shell)
+ test $# -gt 1 || error "missing argument for option '$1'"
+ AM_TEST_RUNNER_SHELL=$2
+ shift
+ ;;
+ --shell=*)
+ AM_TEST_RUNNER_SHELL=${1#--shell=}
+ ;;
+ -o)
+ test $# -gt 1 || error "missing argument for option '$1'"
+ shell_opts="$shell_opts -o $2"
+ shift
+ ;;
+ -k|--keep-testdir|--keep-testdirs)
+ keep_testdirs=yes; export keep_testdirs;;
+ -*)
+ # Assume it is an option to pass through to the shell.
+ shell_opts="$shell_opts $1";;
+ *=*)
+ var=${1%%=*} val=${1#*=}
+ xecho "$var" | LC_ALL=C grep '^[a-zA-Z_][a-zA-Z0-9_]*$' >/dev/null \
+ || error "'$var': invalid variable name"
+ eval "$var=\$val && export $var" || exit 1
+ ;;
+ *)
+ break;;
+ esac
+ shift
+done
+
+test $# -gt 0 || error "missing argument"
+
+tst=$1; shift
+
+case $tst in
+ /*) ;;
+ *) if test -f ./$tst; then
+ tst=./$tst
+ # Support for VPATH build.
+ elif test -f $srcdir/$tst; then
+ tst=$srcdir/$tst
+ else
+ error "could not find test '$tst'"
+ fi
+ ;;
+esac
+
+case $tst in
+ *.sh)
+ exec $AM_TEST_RUNNER_SHELL $shell_opts "$tst" ${1+"$@"} ;;
+ *.tap)
+ exec "$AM_PROVE_CMD" $AM_PROVEFLAGS -e \
+ "$AM_TEST_RUNNER_SHELL $shell_opts" "$tst" ${1+"$@"} ;;
+ *)
+ error "test '$tst' has an unrecognized extension" ;;
+esac
+
+error "dead code reached"
diff --git a/t/ax/shell-no-trail-bslash.in b/t/ax/shell-no-trail-bslash.in
new file mode 100644
index 000000000..fc7b54107
--- /dev/null
+++ b/t/ax/shell-no-trail-bslash.in
@@ -0,0 +1,85 @@
+#! @AM_TEST_RUNNER_SHELL@
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# A "shell" that chokes on '-c' commands and/or shell scripts having
+# a trailing '\' character (possibly followed by whitespace only).
+# This is to emulate problems seen in older bash versions (e.g., bash
+# 2.05b). See also automake bug#10436.
+
+set -u
+
+am_SHELL=${AM_TESTSUITE_SHELL-'@SHELL@'}
+
+(
+ set -e
+ shell_command=; unset shell_command
+ shell_script=; unset shell_script
+ while test $# -gt 0; do
+ case $1 in
+ # The shell might be invoked by make e.g. as "sh -ec" or "sh -ce".
+ # Be liberal (in the spirit of defensive programming) and accept
+ # both forms.
+ -*c*) shell_command=$2; shift;;
+ -?*) ;;
+ *) break;;
+ esac
+ shift
+ done
+
+ if test x${shell_command+"set"} != x"set"; then
+ if test $# -gt 0; then
+ shell_script=$1
+ shell_command=$(cat <"$shell_script")
+ else
+ # Some make implementations, like *BSD's, pass the recipes to the
+ # shell through its standard input. Trying to run our extra checks
+ # in this case would be too tricky, so we just skip them.
+ exit 0
+ fi
+ fi
+ original_shell_command=$shell_command
+
+ tab=' '
+ nl='
+'
+ case "$shell_command" in
+ *" "|*"$tab"|*"$nl")
+ shell_command=$(printf '%s\n' "$shell_command" | tr -d " $tab$nl");;
+ esac
+
+ case "$shell_command" in
+ *\\)
+ {
+ printf '%s\n' "$0: recipe/script ends with backslash character"
+ printf '%s\n' "=== BEGIN recipe/script"
+ if test x${shell_script+"set"} = x"set"; then
+ cat <"$shell_script"
+ else
+ printf '%s\n' "$original_shell_command"
+ fi
+ printf '%s\n' "=== END recipe/script"
+ } >&2
+ exit 1
+ ;;
+ esac
+)
+
+if test $? -gt 0; then
+ # Some of our scripts or makefile recipes had invalid contents.
+ exit 3
+fi
+
+exec ${AM_TESTSUITE_SHELL-'@SHELL@'} ${1+"$@"}
diff --git a/t/ax/tap-functions.sh b/t/ax/tap-functions.sh
new file mode 100644
index 000000000..efa85a42d
--- /dev/null
+++ b/t/ax/tap-functions.sh
@@ -0,0 +1,231 @@
+# -*- shell-script -*-
+#
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Helper functions used by TAP-producing tests of the Automake testsuite.
+
+#
+# IMPORTANT: All the functions defined in this file can *not* be used
+# from within a subshell, unless explicitly noted otherwise.
+#
+
+# The counts of the TAP test results seen so far: total count and
+# per-result counts.
+tap_count_=0
+tap_pass_count_=0
+tap_skip_count_=0
+tap_fail_count_=0
+tap_xfail_count_=0
+tap_xpass_count_=0
+
+# not COMMAND [ARGS...]
+# ---------------------
+# Run the given command and invert its exit status.
+not () { ! "$@"; }
+
+# plan_ [unknown|later|lazy|now|NUMBER-OF-PLANNED-TESTS]
+# ------------------------------------------------------
+# Print a TAP plan for the given number of tests. This must be called
+# before reporting any test result. If called with the special argument
+# "unknown" or "later", it will do nothing, expecting the calling script
+# to declare the plan later. If called with the special argument "lazy"
+# or "now", it will print a TAP plan that accounts for the number of tests
+# seen so far.
+plan_ ()
+{
+ if test $# -eq 0; then
+ bailout_ "plan_: missing argument"
+ elif test $# -ge 2; then
+ bailout_ "plan_: too many arguments"
+ elif test x"$planned_" != x"none" && test x"$planned_" != x"later"; then
+ bailout_ "plan_: called to many times"
+ elif test x"$1" = x"unknown" || test x"$1" = x"later"; then
+ # This means we want to get back later to declaring the TAP plan.
+ planned_=later
+ return 0
+ elif test x"$1" = x"lazy" || test x"$1" = x"now"; then
+ planned_=$tap_count_ # Number of test results seen so far.
+ elif test $1 -ge 0; then
+ planned_=$1
+ else
+ bailout_ "plan_: invalid argument '$1'"
+ fi
+ echo "1..$planned_"
+}
+planned_=none
+
+# diag_ [EXPLANATION]
+# ------------------
+# Report the given text as TAP diagnostic. Assumes the string denoting
+# TAP diagnostic lines is stored in the '$diag_string_' variable; this is
+# done to allow better interplay with TAP drivers that allow such a string
+# to be configured.
+diag_ ()
+{
+ test $# -eq 0 || echo "$diag_string_ $*"
+}
+
+# Used by the 'diag_' function above. User-overridable.
+diag_string_="#"
+
+# warn_ [EXPLANATION]
+# ------------------
+# Give a warning (using TAP diagnostic).
+warn_ ()
+{
+ case $# in
+ 0) diag_ "WARNING: (unknown warning)";;
+ *) diag_ "WARNING: $*";;
+ esac
+}
+
+# result_ RESULT [-D DIRECTIVE] [-r REASON] [--] [DESCRIPTION...]
+# ---------------------------------------------------------------
+# Report a test case with the given RESULT (valid values are "ok" and
+# "not ok") and the given DESCRIPTION (if any). If DIRECTIVE is given
+# and non-empty (valid values being "TODO" and "SKIP"), it will be
+# reported too, with the REASON (if given) appended.
+result_ ()
+{
+ set +x # Don't pollute the log files.
+ test $# -gt 0 || bailout_ "result_: missing argument"
+ tap_result_=$1; shift
+ case $tap_result_ in
+ "ok"|"not ok") ;;
+ *) bailout_ "result_: invalid result '$tap_result'" ;;
+ esac
+ tap_directive_= tap_reason_=
+ while test $# -gt 0; do
+ case $1 in
+ -D|--directive) tap_directive_=$2; shift;;
+ -r|--reason) tap_reason_=$2; shift;;
+ --) shift; break;;
+ -*) bailout_ "result_: invalid option '$1'";;
+ *) break;;
+ esac
+ shift
+ done
+ case $tap_directive_ in
+ ""|TODO|SKIP) ;;
+ *) bailout_ "result_: invalid directive '$directive_'" ;;
+ esac
+ tap_count_=$(($tap_count_ + 1))
+ case $tap_result_,$tap_directive_ in
+ ok,) # Passed.
+ tap_pass_count_=$(($tap_pass_count_ + 1)) ;;
+ not\ ok,TODO) # Expected failure.
+ tap_xfail_count_=$(($tap_xfail_count_ + 1)) ;;
+ not\ ok,*) # Failed.
+ tap_fail_count_=$(($tap_fail_count_ + 1)) ;;
+ ok,TODO) # Unexpected pass.
+ tap_xpass_count_=$(($tap_xpass_count_ + 1)) ;;
+ ok,SKIP) # Skipped.
+ tap_skip_count_=$(($tap_skip_count_ + 1)) ;;
+ *) # Can't happen.
+ bailout_ "internal error in 'result_'" ;;
+ esac
+ tap_text_="$tap_result_ $tap_count_"
+ if test x"$*" != x; then
+ tap_text_="$tap_text_ - $*"
+ fi
+ if test x"$tap_directive_" != x; then
+ tap_text_="$tap_text_ # $tap_directive_"${tap_reason_:+" $tap_reason_"}
+ fi
+ printf '%s\n' "$tap_text_"
+ set -x # Restore shell xtraces.
+}
+
+# Shorthands for common usages of 'result_'.
+ok_ () { result_ 'ok' ${1+"$@"}; }
+not_ok_ () { result_ 'not ok' ${1+"$@"}; }
+skip_ () { result_ 'ok' -D SKIP ${1+"$@"}; }
+
+# skip_row_ COUNT [-r REASON] [--] [DESCRIPTION...]
+# -------------------------------------------------
+# Report a COUNT of skipped test, with the given reason and descriptions
+# (if any). Useful to avoid cascade failures in case a fair number of
+# tests depend on an earlier one that failed.
+skip_row_ ()
+{
+ skip_count_=$1; shift
+ for i_ in $(seq_ $skip_count_); do skip_ ${1+"$@"}; done
+}
+
+# skip_all_ [REASON ...]
+# ----------------------
+# Skip all the tests in a test script. Must be used before calling 'plan_'
+# or reporting any test result. Can't be used from within a subshell.
+skip_all_ ()
+{
+ echo "1..0 # SKIP" ${1+"$@"}
+ planned_=0
+ exit 0
+}
+
+# bailout_ [REASON ...]
+# ---------------------
+# Stop the execution of the current test suite right now, due to an
+# unrecoverable error. Can be called at any point, but cannot be used
+# from within a subshell.
+bailout_ ()
+{
+ echo 'Bail out!' ${1+"$@"}
+ exit 99
+}
+
+# fatal_ [REASON ...]
+# -------------------
+# Same as 'bailout_'; for compatibility with 'plain-functions.sh'.
+fatal_ ()
+{
+ bailout_ ${1+"$@"}
+}
+
+# framework_failure_ [REASON ...]
+# -------------------------------
+# Stop the execution of the current test suite right now, due to an
+# unrecoverable error in the set-up of the test case. Can be called
+# at any point, but cannot be used from within a subshell.
+framework_failure_ ()
+{
+ bailout_ "set-up failure"${1+": $*"}
+}
+
+# command_ok_ TEST-DESCRIPTION [OPTIONS..] [--] CMD [ARGS...]
+# -----------------------------------------------------------
+# Helper subroutine for when a TAP result must be determined by the
+# outcome of a command.
+command_ok_ ()
+{
+ tap_directive_= tap_reason_=
+ test $# -gt 0 || bailout_ "command_ok_: missing argument"
+ tap_description_=$1; shift
+ while test $# -gt 0; do
+ case $1 in
+ -D|--directive) tap_directive_=$2; shift;;
+ -r|--reason) tap_reason_=$2; shift;;
+ --) shift; break;;
+ -*) bailout_ "command_ok_: invalid option '$1'";;
+ *) break;;
+ esac
+ shift
+ done
+ tap_result_="ok"; "$@" || tap_result_="not ok"
+ result_ "$tap_result_" -D "$tap_directive_" -r "$tap_reason_" \
+ -- "$tap_description_"
+}
+
+:
diff --git a/t/ax/tap-setup.sh b/t/ax/tap-setup.sh
new file mode 100644
index 000000000..64580c4cf
--- /dev/null
+++ b/t/ax/tap-setup.sh
@@ -0,0 +1,47 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Auxiliary shell script that copies the common data and files used by
+# many tests on TAP support into the current directory. It should be
+# sourced by client test scripts, and assumes the auxiliary test
+# 'tap-common-setup.test' has been run beforehand (it will error out
+# if this is not the case).
+
+# Check that we are running from a proper directory: last thing we want
+# is to overwrite some random user files.
+test -f ../../bin/automake && test -f ../../runtest && test -d ../../t \
+ || fatal_ "running from a wrong directory"
+
+test ! -f Makefile.am || mv Makefile.am Makefile.am~ \
+ || fatal_ "failed to save Makefile.am"
+
+test -d ../tap-common-setup.dir && cp -fpR ../tap-common-setup.dir/* . \
+ || fatal_ "couldn't get precomputed data files"
+
+fetch_tap_driver
+
+if test -f Makefile.am~; then
+ mv -f Makefile.am~ Makefile.am \
+ || fatal_ "failed to restore Makefile.am"
+ echo 'TEST_LOG_DRIVER = $(srcdir)/tap-driver' >> Makefile.am \
+ || fatal_ "failed to update Makefile.am"
+ $AUTOMAKE Makefile \
+ || fatal_ "failed to remake Makefile.in"
+ ./config.status Makefile \
+ || fatal_ "failed to remake Makefile"
+fi
+
+:
diff --git a/t/ax/tap-summary-aux.sh b/t/ax/tap-summary-aux.sh
new file mode 100644
index 000000000..f0c31aa63
--- /dev/null
+++ b/t/ax/tap-summary-aux.sh
@@ -0,0 +1,357 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Auxiliary script for tests on TAP support: checking testsuite summary.
+
+. test-init.sh
+
+br='============================================================================'
+
+case $use_colors in
+ yes|no) ;;
+ *) fatal_ "invalid \$use_colors value '$use_colors'"
+esac
+
+fetch_tap_driver
+
+cat > configure.ac <<END
+AC_INIT([GNU AutoTAP], [5.12], [bug-automake@gnu.org])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TEST_LOG_DRIVER = $(srcdir)/tap-driver
+TEST_LOG_COMPILER = cat
+TESTS = all.test
+END
+
+# The following shell variables are influential for this function:
+# - expect_failure
+# - use_colors
+do_check ()
+{
+ case $#,$1 in
+ 1,--pass) expect_failure=no;;
+ 1,--fail) expect_failure=yes;;
+ *) fatal_ "invalid usage of 'do_check'";;
+ esac
+ shift
+ cat > summary.exp
+ cat all.test
+ if test $use_colors = yes; then
+ # Forced colorization should take place also with non-ANSI terminals;
+ # hence the "TERM=dumb" definition.
+ make_args='TERM=dumb AM_COLOR_TESTS=always'
+ else
+ make_args=
+ fi
+ run_make -O -e IGNORE $make_args check
+ if test $expect_failure = yes; then
+ test $am_make_rc -gt 0 || exit 1
+ else
+ test $am_make_rc -eq 0 || exit 1
+ fi
+ $PERL "$am_testaux_srcdir"/extract-testsuite-summary.pl stdout >summary.got \
+ || fatal_ "cannot extract testsuite summary"
+ cat summary.exp
+ cat summary.got
+ if test $use_colors = yes; then
+ # Use cmp, not diff, because the files might contain binary data.
+ compare=cmp
+ else
+ compare=diff
+ fi
+ $compare summary.exp summary.got || exit 1
+}
+
+if test $use_colors = yes; then
+ red="$esc[0;31m"
+ grn="$esc[0;32m"
+ lgn="$esc[1;32m"
+ blu="$esc[1;34m"
+ mgn="$esc[0;35m"
+ brg="$esc[1m"
+ std="$esc[m"
+else
+ red= grn= lgn= blu= mgn= brg= std=
+fi
+
+ success_header="\
+${grn}${br}${std}
+${grn}Testsuite summary for GNU AutoTAP 5.12${std}
+${grn}${br}${std}"
+
+ success_footer=${grn}${br}${std}
+
+ failure_header="\
+${red}${br}${std}
+${red}Testsuite summary for GNU AutoTAP 5.12${std}
+${red}${br}${std}"
+
+ failure_footer="\
+${red}${br}${std}
+${red}See ./test-suite.log${std}
+${red}Please report to bug-automake@gnu.org${std}
+${red}${br}${std}"
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+./configure
+
+# 1 pass.
+{ echo 1..1 && echo ok; } > all.test
+do_check --pass <<END
+$success_header
+${brg}# TOTAL: 1${std}
+${grn}# PASS: 1${std}
+# SKIP: 0
+# XFAIL: 0
+# FAIL: 0
+# XPASS: 0
+# ERROR: 0
+$success_footer
+END
+
+# 1 skip.
+{ echo 1..1 && echo 'ok # SKIP'; } > all.test
+do_check --pass <<END
+$success_header
+${brg}# TOTAL: 1${std}
+# PASS: 0
+${blu}# SKIP: 1${std}
+# XFAIL: 0
+# FAIL: 0
+# XPASS: 0
+# ERROR: 0
+$success_footer
+END
+
+# 1 xfail.
+{ echo 1..1 && echo 'not ok # TODO'; } > all.test
+do_check --pass <<END
+$success_header
+${brg}# TOTAL: 1${std}
+# PASS: 0
+# SKIP: 0
+${lgn}# XFAIL: 1${std}
+# FAIL: 0
+# XPASS: 0
+# ERROR: 0
+$success_footer
+END
+
+# 1 fail.
+{ echo 1..1 && echo not ok; } > all.test
+do_check --fail <<END
+$failure_header
+${brg}# TOTAL: 1${std}
+# PASS: 0
+# SKIP: 0
+# XFAIL: 0
+${red}# FAIL: 1${std}
+# XPASS: 0
+# ERROR: 0
+$failure_footer
+END
+
+# 1 xpass.
+{ echo 1..1 && echo 'ok # TODO'; } > all.test
+do_check --fail <<END
+$failure_header
+${brg}# TOTAL: 1${std}
+# PASS: 0
+# SKIP: 0
+# XFAIL: 0
+# FAIL: 0
+${red}# XPASS: 1${std}
+# ERROR: 0
+$failure_footer
+END
+
+# 1 hard error.
+{ echo 1..1 && echo 'Bail out!'; } > all.test
+do_check --fail <<END
+$failure_header
+${brg}# TOTAL: 1${std}
+# PASS: 0
+# SKIP: 0
+# XFAIL: 0
+# FAIL: 0
+# XPASS: 0
+${mgn}# ERROR: 1${std}
+$failure_footer
+END
+
+# 3 non-failing results.
+cat > all.test <<END
+1..3
+ok
+not ok # TODO
+ok # SKIP
+END
+do_check --pass <<END
+$success_header
+${brg}# TOTAL: 3${std}
+${grn}# PASS: 1${std}
+${blu}# SKIP: 1${std}
+${lgn}# XFAIL: 1${std}
+# FAIL: 0
+# XPASS: 0
+# ERROR: 0
+$success_footer
+END
+
+# 1 pass, 1 skip, 1 fail.
+cat > all.test <<END
+1..3
+ok
+ok # SKIP
+not ok
+END
+do_check --fail <<END
+$failure_header
+${brg}# TOTAL: 3${std}
+${grn}# PASS: 1${std}
+${blu}# SKIP: 1${std}
+# XFAIL: 0
+${red}# FAIL: 1${std}
+# XPASS: 0
+# ERROR: 0
+$failure_footer
+END
+
+# 1 pass, 1 xfail, 1 xpass.
+cat > all.test <<END
+1..3
+ok
+ok # TODO
+not ok # TODO
+END
+do_check --fail <<END
+$failure_header
+${brg}# TOTAL: 3${std}
+${grn}# PASS: 1${std}
+# SKIP: 0
+${lgn}# XFAIL: 1${std}
+# FAIL: 0
+${red}# XPASS: 1${std}
+# ERROR: 0
+$failure_footer
+END
+
+# 1 skip, 1 xfail, 1 error.
+cat > all.test <<END
+1..3
+ok # SKIP
+not ok # TODO
+Bail out!
+END
+do_check --fail <<END
+$failure_header
+${brg}# TOTAL: 3${std}
+# PASS: 0
+${blu}# SKIP: 1${std}
+${lgn}# XFAIL: 1${std}
+# FAIL: 0
+# XPASS: 0
+${mgn}# ERROR: 1${std}
+$failure_footer
+END
+
+# 1 of each kind
+cat > all.test <<END
+1..6
+ok
+not ok
+ok # TODO
+not ok # TODO
+ok # SKIP
+Bail out!
+END
+do_check --fail <<END
+$failure_header
+${brg}# TOTAL: 6${std}
+${grn}# PASS: 1${std}
+${blu}# SKIP: 1${std}
+${lgn}# XFAIL: 1${std}
+${red}# FAIL: 1${std}
+${red}# XPASS: 1${std}
+${mgn}# ERROR: 1${std}
+$failure_footer
+END
+
+# Prepare some common data for later.
+for i in 0 1 2 3 4 5 6 7 8 9; do
+ for j in 0 1 2 3 4 5 6 7 8 9; do
+ echo "ok"
+ echo "not ok # TODO"
+ echo "ok # SKIP"
+ done
+done > tap
+
+# Lots of non-failures (300 per kind).
+(cat tap && cat tap && cat tap) > all.test
+test $(wc -l <all.test) -eq 900 || exit 99 # Sanity check.
+echo 1..900 >> all.test # Test plan.
+do_check --pass <<END
+$success_header
+${brg}# TOTAL: 900${std}
+${grn}# PASS: 300${std}
+${blu}# SKIP: 300${std}
+${lgn}# XFAIL: 300${std}
+# FAIL: 0
+# XPASS: 0
+# ERROR: 0
+$success_footer
+END
+
+# 1 failure and lots of non-failures means failure.
+(cat tap && echo "not ok" && cat tap) > all.test
+test $(wc -l <all.test) -eq 601 || exit 99 # Sanity check.
+echo 1..601 >> all.test # Test plan.
+do_check --fail <<END
+$failure_header
+${brg}# TOTAL: 601${std}
+${grn}# PASS: 200${std}
+${blu}# SKIP: 200${std}
+${lgn}# XFAIL: 200${std}
+${red}# FAIL: 1${std}
+# XPASS: 0
+# ERROR: 0
+$failure_footer
+END
+
+# 1 error and lots of non-failures means failure.
+(cat tap && sed 30q tap && echo 'Bail out!') > all.test
+test $(wc -l <all.test) -eq 331 || exit 99 # Sanity check.
+echo 1..331 >> all.test # Test plan.
+do_check --fail <<END
+$failure_header
+${brg}# TOTAL: 331${std}
+${grn}# PASS: 110${std}
+${blu}# SKIP: 110${std}
+${lgn}# XFAIL: 110${std}
+# FAIL: 0
+# XPASS: 0
+${mgn}# ERROR: 1${std}
+$failure_footer
+END
+
+:
diff --git a/t/ax/test-defs.in b/t/ax/test-defs.in
new file mode 100644
index 000000000..04d952133
--- /dev/null
+++ b/t/ax/test-defs.in
@@ -0,0 +1,201 @@
+# -*- shell-script -*-
+# @configure_input@
+#
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Defines and minimal setup for Automake testing environment.
+
+# IMPORTANT NOTES AND REQUIREMENTS
+# - Multiple inclusions of this file should be idempotent.
+# - This code has to be 'set -e' clean.
+
+# See whether the current test script is expected to use TAP or not.
+# Use a sensible default, while allowing the scripts to override this
+# check.
+if test -z "$am_test_protocol"; then
+ case $argv0 in
+ *.tap) am_test_protocol=tap;;
+ *) am_test_protocol=none;;
+ esac
+fi
+
+am_rel_srcdir='@srcdir@'
+am_top_srcdir='@abs_srcdir@'
+am_top_builddir='@abs_builddir@'
+
+# Where testsuite-related helper scripts, data files and shell libraries
+# are placed.
+am_testaux_srcdir=$am_top_srcdir/t/ax
+am_testaux_builddir=$am_top_builddir/t/ax
+
+# Support for the "installcheck" target.
+case ${am_running_installcheck:=no} in
+ yes)
+ am_amdir='@amdir@'
+ am_automake_acdir='@automake_acdir@'
+ am_bindir='@bindir@'
+ am_datadir='@datadir@'
+ am_docdir='@docdir@'
+ am_pkgvdatadir='@pkgvdatadir@'
+ am_scriptdir='@scriptdir@'
+ am_system_acdir='@system_acdir@'
+ ;;
+ no)
+ am_amdir=$am_top_srcdir/lib/am
+ am_automake_acdir=""
+ am_bindir=$am_top_builddir/bin
+ am_datadir=$am_top_srcdir
+ am_docdir=$am_top_srcdir/doc
+ am_pkgvdatadir=$am_top_srcdir/lib
+ am_scriptdir=$am_top_srcdir/lib
+ am_system_acdir=""
+ ;;
+ *)
+ echo "$me: variable 'am_running_installcheck' has invalid"
+ "value '$am_running_installcheck'" >&2
+ exit 99
+ ;;
+esac
+
+APIVERSION='@APIVERSION@'
+PATH_SEPARATOR='@PATH_SEPARATOR@'
+
+host_alias=${host_alias-'@host_alias@'}; export host_alias
+build_alias=${build_alias-'@build_alias@'}; export build_alias
+
+# Whether the testsuite is being run by faking the presence of a C
+# compiler that doesn't grasp the '-c' and '-o' flags together. By
+# default, of course, it isn't.
+: "${AM_TESTSUITE_SIMULATING_NO_CC_C_O:=no}"
+
+# A concurrency-safe "mkdir -p" implementation.
+MKDIR_P=${AM_TESTSUITE_MKDIR_P-'@MKDIR_P@'}
+
+# The shell we use to run our own test scripts, determined at configure
+# time. It is required in the self tests, and most importantly for the
+# automatic re-execution of test scripts.
+AM_TEST_RUNNER_SHELL=${AM_TEST_RUNNER_SHELL-'@AM_TEST_RUNNER_SHELL@'}
+
+# Make sure we override the user shell. And do not read the value of
+# $SHELL from the environment (think to the non-uncommon situation where
+# e.g., $SHELL=/bin/tcsh).
+SHELL=${AM_TESTSUITE_SHELL-'@SHELL@'}; export SHELL
+
+# User can override various tools used. Prefer overriding specific for
+# that automake testsuite, if they are available.
+AWK=${AM_TESTSUITE_AWK-${AWK-'@AWK@'}}
+PERL=${AM_TESTSUITE_PERL-${PERL-'@PERL@'}}
+MAKE=${AM_TESTSUITE_MAKE-${MAKE-'make'}}
+YACC=${AM_TESTSUITE_YACC-${YACC-'@YACC@'}}
+LEX=${AM_TESTSUITE_LEX-${LEX-'@LEX@'}}
+AUTOCONF=${AM_TESTSUITE_AUTOCONF-${AUTOCONF-'@am_AUTOCONF@'}}
+AUTOM4TE=${AM_TESTSUITE_AUTOM4TE-${AUTOM4TE-'@am_AUTOM4TE@'}}
+AUTORECONF=${AM_TESTSUITE_AUTORECONF-${AUTORECONF-'@am_AUTORECONF@'}}
+AUTOHEADER=${AM_TESTSUITE_AUTOHEADER-${AUTOHEADER-'@am_AUTOHEADER@'}}
+AUTOUPDATE=${AM_TESTSUITE_AUTOUPDATE-${AUTOUPDATE-'@am_AUTOUPDATE@'}}
+
+# Tests which want complete control over aclocal or automake command-line
+# options should use $am_original_ACLOCAL or $am_original_AUTOMAKE. The
+# "test -z" tests take care not to re-initialize them if 'test-defs.sh'
+# is re-sourced, as we want that file to remain really idempotent.
+if test -z "$am_original_AUTOMAKE"; then
+ am_original_AUTOMAKE=${AM_TESTSUITE_AUTOMAKE-${AUTOMAKE-"automake-$APIVERSION"}}
+fi
+if test -z "$am_original_ACLOCAL"; then
+ am_original_ACLOCAL=${AM_TESTSUITE_ACLOCAL-${ACLOCAL-"aclocal-$APIVERSION"}}
+fi
+
+# Use -Werror by default. Tests for which this is inappropriate should
+# use -Wno-error.
+# Tests which want complete control over aclocal command-line options
+# should use $am_original_ACLOCAL instead.
+ACLOCAL="$am_original_ACLOCAL -Werror"
+
+# See how Automake should be run. We put --foreign as the default
+# strictness to avoid having to create lots and lots of files. A test
+# can override this by specifying a different strictness. Use -Wall
+# -Werror by default. Tests for which this is inappropriate (e.g. when
+# testing that a warning is enabled by a specific switch) should use
+# -Wnone or/and -Wno-error.
+# Tests who want complete control over automake command-line options
+# should use $am_original_AUTOMAKE instead.
+AUTOMAKE="$am_original_AUTOMAKE --foreign -Werror -Wall"
+
+# POSIX no longer requires 'egrep' and 'fgrep',
+# but some hosts lack 'grep -E' and 'grep -F'.
+EGREP=${AM_TESTSUITE_EGREP-'@EGREP@'}
+FGREP=${AM_TESTSUITE_FGREP-'@FGREP@'}
+
+# Compilers and their flags. These can point to non-GNU compilers (and
+# on non-Linux and non-BSD systems, they probably will).
+if test $AM_TESTSUITE_SIMULATING_NO_CC_C_O = no; then
+ CC=${AM_TESTSUITE_CC-${CC-'@CC@'}}
+else
+ CC=$am_testaux_builddir/cc-no-c-o
+fi
+CXX=${AM_TESTSUITE_CXX-${CXX-'@CXX@'}}
+F77=${AM_TESTSUITE_F77-${F77-'@F77@'}}
+FC=${AM_TESTSUITE_FC-${FC-'@FC@'}}
+CFLAGS=${AM_TESTSUITE_CFLAGS-${CFLAGS-'@CFLAGS@'}}
+CXXFLAGS=${AM_TESTSUITE_CXXFLAGS-${CXXFLAGS-'@CXXFLAGS@'}}
+FCFLAGS=${AM_TESTSUITE_FCFLAGS-${FCFLAGS-'@FCFLAGS@'}}
+FFLAGS=${AM_TESTSUITE_FFLAGS-${FFLAGS-'@FFLAGS@'}}
+CPPFLAGS=${AM_TESTSUITE_CPPFLAGS-${CPPFLAGS-'@CPPFLAGS@'}}
+
+# GNU compilers and their flags.
+if test $AM_TESTSUITE_SIMULATING_NO_CC_C_O = no; then
+ GNU_CC=${AM_TESTSUITE_GNU_CC-${GNU_CC-'@GNU_CC@'}}
+else
+ GNU_CC=$am_testaux_builddir/cc-no-c-o
+fi
+GNU_CC=${AM_TESTSUITE_GNU_CC-${GNU_CC-'@GNU_CC@'}}
+GNU_CXX=${AM_TESTSUITE_GNU_CXX-${GNU_CXX-'@GNU_CXX@'}}
+GNU_F77=${AM_TESTSUITE_GNU_F77-${GNU_F77-'@GNU_F77@'}}
+GNU_FC=${AM_TESTSUITE_GNU_FC-${GNU_FC-'@GNU_FC@'}}
+GNU_FFLAGS=${AM_TESTSUITE_GNU_FFLAGS-${GNU_FFLAGS-'@GNU_FFLAGS@'}}
+GNU_FCFLAGS=${AM_TESTSUITE_GNU_FCFLAGS-${GNU_FCFLAGS-'@GNU_FCFLAGS@'}}
+GNU_CXXFLAGS=${AM_TESTSUITE_GNU_CXXFLAGS-${GNU_CXXFLAGS-'@GNU_CXXFLAGS@'}}
+GNU_CFLAGS=${AM_TESTSUITE_GNU_CFLAGS-${GNU_CFLAGS-'@GNU_CFLAGS@'}}
+GNU_GCJ=${AM_TESTSUITE_GNU_GCJ-${GNU_GCJ-'@GNU_GCJ@'}}
+GNU_GCJFLAGS=${AM_TESTSUITE_GNU_GCJFLAGS-${GNU_GCJFLAGS-'@GNU_GCJFLAGS@'}}
+
+# No all versions of Tex support '--version', so we use a configure
+# check to decide if tex is available. This decision is embodied in
+# this variable.
+TEX=${AM_TESTSUITE_TEX-'@TEX@'}
+
+# The amount we should wait after modifying files depends on the platform.
+# For instance, Windows '95, '98 and ME have 2-second granularity
+# and can be up to 3 seconds in the future w.r.t. the system clock.
+# The creative quoting is to avoid spuriously triggering a failure in
+# the maintainer checks,
+sleep='sleep ''@MODIFICATION_DELAY@'
+
+# An old timestamp that can be given to a file, in "touch -t" format.
+# The time stamp should be portable to all file systems of interest.
+# Just for fun, choose the exact time of the announcement of the GNU project
+# in UTC; see <https://www.gnu.org/gnu/initial-announcement.html>.
+old_timestamp=198309271735.59
+
+# Make our wrapper script (or installed scripts, if running under
+# "installcheck") accessible by default. And avoid to uselessly
+# extend $PATH multiple times if this file is sourced multiple times.
+case $PATH in
+ $am_bindir$PATH_SEPARATOR*) ;;
+ *) PATH=$am_bindir$PATH_SEPARATOR$PATH;;
+esac
+
+export PATH
diff --git a/t/ax/test-init.sh b/t/ax/test-init.sh
new file mode 100644
index 000000000..4311fb7c9
--- /dev/null
+++ b/t/ax/test-init.sh
@@ -0,0 +1,29 @@
+# -*- shell-script -*-
+#
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+set -e
+
+# The variable '$required' should no longer be modified after this
+# file gets sources.
+required=${required-}; readonly required
+
+# Source the actual code for test initialization and setup.
+. test-lib.sh
+. am-test-lib.sh
+
+# Run that setup, and return control to the test script sourcing us.
+am_test_setup
diff --git a/t/ax/test-lib.sh b/t/ax/test-lib.sh
new file mode 100644
index 000000000..5882ef052
--- /dev/null
+++ b/t/ax/test-lib.sh
@@ -0,0 +1,317 @@
+# -*- shell-script -*-
+#
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+########################################################
+### IMPORTANT NOTE: keep this file 'set -e' clean. ###
+########################################################
+
+# Do not source several times.
+test ${test_lib_sourced-no} = yes && return 0
+test_lib_sourced=yes
+
+# CDPATH is evil if used in non-interactive scripts (and even more
+# evil if exported in the environment).
+CDPATH=; unset CDPATH
+
+# Be more Bourne compatible.
+# (Snippet inspired to configure's initialization in Autoconf 2.64)
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ setopt NO_GLOB_SUBST
+ # If Zsh is not started directly in POSIX-compatibility mode, it has some
+ # incompatibilities in the handling of $0 that conflict with our usage;
+ # i.e., $0 inside a file sourced with the '.' builtin is temporarily set
+ # to the name of the sourced file. Work around that.
+ # Note that a bug in some versions of Zsh prevents us from resetting $0
+ # in a sourced script, so the use of $argv0. For more info see:
+ # <http://www.zsh.org/mla/workers/2009/msg01140.html>
+ # The apparently useless 'eval' here is needed by at least dash 0.5.2,
+ # to prevent it from bailing out with an error like:
+ # "Syntax error: Bad substitution".
+ eval 'argv0=${functrace[-1]%:*}' && test -f "$argv0" || {
+ echo "Cannot determine the path of running test script." >&2
+ echo "Your Zsh (version $ZSH_VERSION) is probably too old." >&2
+ exit 99
+ }
+else
+ argv0=$0
+ # Ignore command substitution failure, for it might cause problems
+ # with "set -e" on some shells.
+ am_shell_opts=$(set -o) || :
+ case $am_shell_opts in *posix*) set -o posix;; esac
+ unset am_shell_opts
+fi
+
+# A single whitespace character.
+sp=' '
+# A tabulation character.
+tab=' '
+# A newline character.
+nl='
+'
+
+# As autoconf-generated configure scripts do, ensure that IFS
+# is defined initially, so that saving and restoring $IFS works.
+IFS=$sp$tab$nl
+
+# The name of the current test (without the '.sh' or '.tap' suffix).
+me=${argv0##*/} # Strip all directory components.
+case $me in # Strip test suffix.
+ *.tap) me=${me%.tap};;
+ *.sh) me=${me%.sh} ;;
+ esac
+
+# Source extra package-specific configuration.
+. test-defs.sh
+# And fail hard if something went wrong.
+test $? -eq 0 || exit 99
+
+# We use a trap below for cleanup. This requires us to go through
+# hoops to get the right exit status transported through the signal.
+# Turn off errexit here so that we don't trip the bug with OSF1/Tru64
+# sh inside this function (FIXME: is this still relevant now that we
+# require a POSIX shell?).
+_am_exit ()
+{
+ set +e
+ # See comments in the exit trap for the reason we do this.
+ test 77 = $1 && am__test_skipped=yes
+ # Extra escaping to ensure we do not call our 'exit' alias.
+ (\exit $1); \exit $1
+}
+# Avoid interferences from the environment
+am__test_skipped=no
+# This alias must actually be placed before any use if 'exit' -- even
+# just inside a function definition. Weird, but real.
+alias exit=_am_exit
+
+# In some shells (e.g., Solaris 10 /bin/ksh, or NetBSD 5.1 /bin/sh),
+# "unset VAR" returns a non-zero exit status in case the VAR variable
+# is already unset. This doesn't interact well with our usage of
+# "set -e" in the testsuite. This function and the alias below help
+# to work around the issue. But be sure to use them only if actually
+# needed. The repeated unset in the check below cater to the very
+# unlikely case where the '_am_v' variable is set in the environment.
+if unset _am_v && unset _am_v; then
+ : Nothing needs to be done.
+else
+ _am_unset ()
+ {
+ for _am_v
+ do
+ # Extra escaping (here and below) to ensure we do not call our
+ # 'unset' alias.
+ eval ${_am_v}=dummy && \unset ${_am_v} || return 1
+ done
+ \unset _am_v
+ }
+ alias unset=_am_unset
+fi
+
+## ------------------------------------ ##
+## General testsuite shell functions. ##
+## ------------------------------------ ##
+
+# Print warnings (e.g., about skipped and failed tests) to this file
+# number. Override by putting, say:
+# AM_TESTS_ENVIRONMENT = stderr_fileno_=9; export stderr_fileno_;
+# AM_TESTS_FD_REDIRECT = 9>&2
+# in your Makefile.am.
+# This is useful when using automake's parallel tests mode, to print the
+# reason for skip/failure to console, rather than to the *.log files.
+: ${stderr_fileno_=2}
+
+# Helper functions used by "plain" tests of the Automake testsuite
+# (i.e., tests that don't use any test protocol).
+# TAP tests will override these functions with their TAP-enhanced
+# equivalents later (see sourcing of 'tap-functions.sh' below).
+# These are copied from Gnulib's 'tests/init.sh'.
+warn_ () { echo "$@" 1>&$stderr_fileno_; }
+fail_ () { warn_ "$me: failed test: $@"; exit 1; }
+skip_ () { warn_ "$me: skipped test: $@"; exit 77; }
+fatal_ () { warn_ "$me: hard error: $@"; exit 99; }
+framework_failure_ () { warn_ "$me: set-up failure: $@"; exit 99; }
+# For compatibility with TAP functions.
+skip_all_ () { skip_ "$@"; }
+
+if test $am_test_protocol = tap; then
+ . tap-functions.sh
+fi
+
+## ---------------------------- ##
+## Auxiliary shell functions. ##
+## ---------------------------- ##
+
+# Tell whether we should keep the test directories around, even in
+# case of success. By default, we don't.
+am_keeping_testdirs ()
+{
+ case $keep_testdirs in
+ ""|n|no|NO) return 1;;
+ *) return 0;;
+ esac
+}
+
+# seq_ - print a sequence of numbers
+# ----------------------------------
+# This function simulates GNU seq(1) portably. Valid usages:
+# - seq LAST
+# - seq FIRST LAST
+# - seq FIRST INCREMENT LAST
+seq_ ()
+{
+ case $# in
+ 0) fatal_ "seq_: missing argument";;
+ 1) seq_first=1 seq_incr=1 seq_last=$1;;
+ 2) seq_first=$1 seq_incr=1 seq_last=$2;;
+ 3) seq_first=$1 seq_incr=$2 seq_last=$3;;
+ *) fatal_ "seq_: too many arguments";;
+ esac
+ i=$seq_first
+ while test $i -le $seq_last; do
+ echo $i
+ i=$(($i + $seq_incr))
+ done
+}
+
+# rm_rf_ [FILES OR DIRECTORIES ...]
+# ---------------------------------
+# Recursively remove the given files or directory, also handling the case
+# of non-writable subdirectories.
+rm_rf_ ()
+{
+ test $# -gt 0 || return 0
+ $PERL "$am_testaux_srcdir"/deltree.pl "$@"
+}
+
+commented_sed_unindent_prog='
+ /^$/b # Nothing to do for empty lines.
+ x # Get x<indent> into pattern space.
+ /^$/{ # No prior x<indent>, go prepare it.
+ g # Copy this 1st non-blank line into pattern space.
+ s/^\(['"$tab"' ]*\).*/x\1/ # Prepare x<indent> in pattern space.
+ } # Now: x<indent> in pattern and <line> in hold.
+ G # Build x<indent>\n<line> in pattern space, and
+ h # duplicate it into hold space.
+ s/\n.*$// # Restore x<indent> in pattern space, and
+ x # exchange with the above duplicate in hold space.
+ s/^x\(.*\)\n\1// # Remove leading <indent> from <line>.
+ s/^x.*\n// # Restore <line> when there is no leading <indent>.
+'
+
+# unindent [input files...]
+# -------------------------
+# Remove the "proper" amount of leading whitespace from the given files,
+# and output the result on stdout. That amount is determined by looking
+# at the leading whitespace of the first non-blank line in the input
+# files. If no input file is specified, standard input is implied.
+unindent ()
+{
+ if test x"$sed_unindent_prog" = x; then
+ sed_unindent_prog=$(printf '%s\n' "$commented_sed_unindent_prog" \
+ | sed -e "s/ *# .*//")
+ fi
+ sed "$sed_unindent_prog" ${1+"$@"}
+}
+sed_unindent_prog="" # Avoid interferences from the environment.
+
+## ---------------------------------------------------------------- ##
+## Create and set up of the temporary directory used by the test. ##
+## Set up of the exit trap for cleanup of said directory. ##
+## ---------------------------------------------------------------- ##
+
+# Set up the exit trap.
+am_exit_trap ()
+{
+ exit_status=$1
+ set +e
+ cd "$am_top_builddir"
+ if test $am_test_protocol = tap; then
+ if test "$planned_" = later && test $exit_status -eq 0; then
+ plan_ "now"
+ fi
+ test $exit_status -eq 0 && test $tap_pass_count_ -eq $tap_count_ \
+ || keep_testdirs=yes
+ else
+ # This is to ensure that a test script does give a SKIP outcome just
+ # because a command in it happens to exit with status 77. This
+ # behaviour, while from time to time useful to developers, is not
+ # meant to be enabled by default, as it could cause spurious failures
+ # in the wild. Thus it will be enabled only when the variable
+ # 'am_explicit_skips' is set to a "true" value.
+ case $am_explicit_skips in
+ [yY]|[yY]es|1)
+ if test $exit_status -eq 77 && test $am__test_skipped != yes; then
+ echo "$me: implicit skip turned into failure"
+ exit_status=78
+ fi;;
+ esac
+ test $exit_status -eq 0 || keep_testdirs=yes
+ fi
+ am_keeping_testdirs || rm_rf_ $am_test_subdir
+ set +x
+ # Spurious escaping to ensure we do not call our "exit" alias.
+ \exit $exit_status
+}
+
+am_set_exit_traps ()
+{
+ trap 'am_exit_trap $?' 0
+ trap "fatal_ 'caught signal SIGHUP'" 1
+ trap "fatal_ 'caught signal SIGINT'" 2
+ trap "fatal_ 'caught signal SIGTERM'" 15
+ # Various shells seems to just ignore SIGQUIT under some circumstances,
+ # even if the signal is not blocked; however, if the signal is trapped,
+ # the trap gets correctly executed. So we also trap SIGQUIT.
+ # Here is a list of some shells that have been verified to exhibit the
+ # problematic behavior with SIGQUIT:
+ # - zsh 4.3.12 on Debian GNU/Linux
+ # - /bin/ksh and /usr/xpg4/bin/sh on Solaris 10
+ # - Bash 3.2.51 on Solaris 10 and bash 4.1.5 on Debian GNU/Linux
+ # - AT&T ksh on Debian Gnu/Linux (deb package ksh, version 93u-1)
+ # OTOH, at least these shells that do *not* exhibit that behaviour:
+ # - modern version of the Almquist Shell (at least 0.5.5.1), on
+ # both Solaris and GNU/Linux
+ # - public domain Korn Shell, version 5.2.14, on Debian GNU/Linux
+ trap "fatal_ 'caught signal SIGQUIT'" 3
+ # Ignore further SIGPIPE in the trap code. This is required to avoid
+ # a very weird issue with some shells, at least when the execution of
+ # the automake testsuite is driven by the 'prove' utility: if prove
+ # (or the make process that has spawned it) gets interrupted with
+ # Ctrl-C, the shell might go in a loop, continually getting a SIGPIPE,
+ # sometimes finally dumping core, other times hanging indefinitely.
+ # See also Test::Harness bug [rt.cpan.org #70855], archived at
+ # <https://rt.cpan.org/Ticket/Display.html?id=70855>
+ trap "trap '' 13; fatal_ 'caught signal SIGPIPE'" 13
+}
+
+am_test_setup ()
+{
+ process_requirements $required
+ am_set_exit_traps
+ # Create and populate the temporary directory, if required.
+ if test x"$am_create_testdir" = x"no"; then
+ am_test_subdir=
+ else
+ am_setup_testdir
+ fi
+ am_extra_info
+ set -x
+ pwd
+}
diff --git a/t/ax/testsuite-summary-checks.sh b/t/ax/testsuite-summary-checks.sh
new file mode 100644
index 000000000..0078d1ccf
--- /dev/null
+++ b/t/ax/testsuite-summary-checks.sh
@@ -0,0 +1,102 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check the testsuite summary with the parallel test harness. This
+# script is meant to be sourced by other test script, so that it can
+# be used to check different scenarios (colorized and non-colorized
+# testsuite output, packages with and without bug-report addresses,
+# testsuites in subdirectories, ...)
+
+. test-init.sh
+
+case $use_colors in
+ yes)
+ AM_COLOR_TESTS=always; export AM_COLOR_TESTS
+ # Forced colorization should take place also with non-ANSI
+ # terminals; hence this setting.
+ TERM=dumb; export TERM
+ ;;
+ no)
+ ;;
+ *)
+ fatal_ "invalid use_colors='$use_colors'";;
+esac
+
+cat > configure.ac <<END
+AC_INIT([GNU AutoFoo], [7.1], [bug-automake@gnu.org])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+TEST_EXTENSIONS = .t
+T_LOG_COMPILER = $(SHELL) $(srcdir)/log-compiler
+## Will be defined at runtime.
+TESTS =
+$(TESTS):
+END
+
+cat > log-compiler <<'END'
+#!/bin/sh
+case "$1" in
+ pass*|*/pass*|xpass*|*/xpass*) exit 0;;
+ fail*|*/fail*|xfail*|*/xfail*) exit 1;;
+ skip*|*/skip*) exit 77;;
+ error*|/error*) exit 99;;
+ copy*|*/copy*) cat "$1";;
+ *) exit 99;;
+esac
+END
+
+# Quite complexish, but allow the tests in client scripts to be written
+# in a "data-driven fashion".
+do_check ()
+{
+ cat > summary.exp
+ expect_failure=false
+ xfail_tests=''
+ tests="$*"
+ for t in $*; do
+ case $t in fail*|xpass*|error*) expect_failure=:;; esac
+ case $t in xfail*|xpass*) xfail_tests="$xfail_tests $t";; esac
+ done
+ run_make -O -e IGNORE check TESTS="$tests" XFAIL_TESTS="$xfail_tests"
+ if $expect_failure; then
+ test $am_make_rc -gt 0 || exit 1
+ else
+ test $am_make_rc -eq 0 || exit 1
+ fi
+ $PERL "$am_testaux_srcdir"/extract-testsuite-summary.pl stdout >summary.got \
+ || fatal_ "cannot extract testsuite summary"
+ cat summary.exp
+ cat summary.got
+ if test $use_colors = yes; then
+ # Use cmp, not diff, because the files might contain binary data.
+ compare=cmp
+ else
+ compare=diff
+ fi
+ $compare summary.exp summary.got || exit 1
+}
+
+br='============================================================================'
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+:
diff --git a/t/ax/trivial-test-driver b/t/ax/trivial-test-driver
new file mode 100644
index 000000000..5745fe3d9
--- /dev/null
+++ b/t/ax/trivial-test-driver
@@ -0,0 +1,102 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+#
+# Test driver for a very simple test protocol used by the Automake
+# testsuite to check support for custom test drivers allowing for more
+# test results per test script.
+#
+# The exit status of the wrapped script is ignored. Lines in its stdout
+# and stderr beginning with 'PASS', 'FAIL', 'XFAIL', 'XPASS', 'SKIP' or
+# 'ERROR' count as a test case result with the obviously-corresponding
+# outcome. Every other line is ignored for what concerns the testsuite
+# outcome.
+#
+# This script is used at least by the 'driver-custom-multitest*.test'
+# tests.
+#
+
+# Help to avoid typo-related bugs.
+set -u
+
+## Option parsing.
+
+test_name=INVALID.NAME
+log_file=BAD.LOG
+trs_file=BAD.TRS
+while test $# -gt 0; do
+ case $1 in
+ --test-name) test_name=$2; shift;;
+ --log-file) log_file=$2; shift;;
+ --trs-file) trs_file=$2; shift;;
+ # Ignored.
+ --expect-failure) shift;;
+ --color-tests) shift;;
+ --enable-hard-errors) shift;;
+ # Explicitly terminate option list.
+ --) shift; break;;
+ # Shouldn't happen
+ *) echo "$0: invalid option/argument: '$1'" >&2; exit 2;;
+ esac
+ shift
+done
+
+## Log file header.
+{
+ echo "RUN: $test_name"
+ echo "RUN: $test_name" | sed 's/./=/g'
+ echo
+} > $log_file
+
+## Run the test script, get test cases results, display them on console.
+
+"$@" 2>&1 | tee -a $log_file | (
+ i=0 st=0
+ exec 5> $trs_file
+ while read line; do
+ result=
+ case $line in
+ PASS:*) result=PASS ;;
+ FAIL:*) result=FAIL ;;
+ XPASS:*) result=XPASS ;;
+ XFAIL:*) result=XFAIL ;;
+ SKIP:*) result=SKIP ;;
+ ERROR:*) result=ERROR ;;
+ esac
+ if test -n "$result"; then
+ case $result in FAIL|XPASS|ERROR) st=1;; esac
+ # Output testcase result to console.
+ echo "$result: $test_name"
+ # Register testcase outcome for the log file.
+ echo ":test-result: $line" >&5
+ echo >&5
+ fi
+ done
+ if test $st -eq 0; then
+ recheck=no
+ copy_in_global_log=no
+ else
+ recheck=yes
+ copy_in_global_log=yes
+ fi
+ echo ":recheck: $recheck" >&5
+ echo ":copy-in-global-log: $copy_in_global_log" >&5
+ exec 5>&-
+) | awk '{ print $0 ", testcase " NR }'
+
+## And we're done.
+
+exit 0
diff --git a/t/backcompat-acout.sh b/t/backcompat-acout.sh
new file mode 100644
index 000000000..262f72997
--- /dev/null
+++ b/t/backcompat-acout.sh
@@ -0,0 +1,66 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Backward-compatibility: AC_OUTPUT with arguments.
+
+. test-init.sh
+
+mkdir sub
+: > Makefile.am
+: > zardoz
+: > foo.in
+: > foo1.in
+: > foo2.in
+: > foo3.in
+: > sub/bar.in
+
+ls -l # For debugging.
+
+for args in \
+ 'foo' \
+ 'foo:foo1.in' \
+ 'foo:zardoz' \
+ 'foo:sub/bar.in' \
+ 'foo:foo1.in:foo2.in' \
+ 'foo:zardoz:zardoz' \
+ 'foo:foo1.in:foo2.in:foo3.in' \
+ 'foo:foo1.in:foo2.in:sub/bar.in:foo3.in' \
+; do
+ rm -rf autom4te*.cache aclocal.m4
+ unindent >configure.ac <<END
+ AC_INIT([$me], [1.0])
+ AM_INIT_AUTOMAKE
+ AC_CONFIG_FILES([$args])
+ AC_OUTPUT
+END
+ cat configure.ac # For debugging.
+ $ACLOCAL
+ $AUTOMAKE Makefile
+ mv -f Makefile.in Makefile.acf
+ rm -rf autom4te*.cache aclocal.m4
+ unindent >configure.ac <<END
+ AC_INIT([$me], [1.0])
+ AM_INIT_AUTOMAKE
+ AC_OUTPUT([$args])
+END
+ cat configure.ac # For debugging.
+ $ACLOCAL
+ $AUTOMAKE Makefile
+ mv -f Makefile.in Makefile.aco
+ diff Makefile.acf Makefile.aco
+done
+
+:
diff --git a/t/backcompat.sh b/t/backcompat.sh
new file mode 100644
index 000000000..83e605847
--- /dev/null
+++ b/t/backcompat.sh
@@ -0,0 +1,64 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test usage of AM_INIT_AUTOMAKE with two or three arguments, for
+# backward-compatibility.
+
+. test-init.sh
+
+cat > Makefile.am <<'END'
+.PHONY: test display
+
+## Might be useful for debugging.
+display:
+## The following should be substituted by AM_INIT_AUTOMAKE.
+ @echo PACKAGE = $(PACKAGE)
+ @echo VERSION = $(VERSION)
+## The following should not be substituted, as we used the
+## old form of AC_INIT.
+ @echo PACKAGE_NAME = $(PACKAGE_NAME)
+ @echo PACKAGE_VERSION = $(PACKAGE_VERSION)
+ @echo PACKAGE_TARNAME = $(PACKAGE_TARNAME)
+ @echo PACKAGE_STRING = $(PACKAGE_STRING)
+
+test: display
+ test x'$(PACKAGE)' = x'FooBar'
+ test x'$(VERSION)' = x'0.7.1'
+ test x'$(PACKAGE_NAME)' = x
+ test x'$(PACKAGE_VERSION)' = x
+ test x'$(PACKAGE_TARNAME)' = x
+ test x'$(PACKAGE_STRING)' = x
+END
+
+for ac_init in 'AC_INIT' 'AC_INIT([Makefile.am])'; do
+ for am_extra_args in '' ', []' ', [:]' ', [false]'; do
+ rm -rf autom4te*.cache config* Makefile.in Makefile
+ unindent > configure.ac <<END
+ $ac_init
+ AM_INIT_AUTOMAKE([FooBar], [0.7.1]$am_extra_args)
+ AC_CONFIG_FILES([Makefile])
+ AC_OUTPUT
+END
+ cat configure.ac # For debugging.
+ $ACLOCAL
+ $AUTOCONF
+ $AUTOMAKE -Wno-obsolete
+ ./configure
+ $MAKE test
+ done
+done
+
+:
diff --git a/t/backcompat2.sh b/t/backcompat2.sh
new file mode 100644
index 000000000..43a43868b
--- /dev/null
+++ b/t/backcompat2.sh
@@ -0,0 +1,73 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Backward-compatibility test: check that AM_INIT_AUTOMAKE with two or
+# three arguments does AC_DEFINE the symbols PACKAGE and VERSION iff the
+# third argument is empty or non-existent.
+
+am_create_testdir=empty
+. test-init.sh
+
+# A trick to make the test run muuuch faster, by avoiding repeated
+# runs of aclocal (one order of magnitude improvement in speed!).
+echo 'AC_INIT(x,0) AM_INIT_AUTOMAKE' > configure.ac
+$ACLOCAL
+rm -rf configure.ac autom4te.*
+
+touch install-sh missing
+
+cat > config.h.in <<'END'
+#undef PACKAGE
+#undef VERSION
+END
+
+for am_arg3 in ':' 'false' '#' ' '; do
+ unindent > configure.ac <<END
+ AC_INIT
+ AC_CONFIG_HEADERS([config.h])
+ AM_INIT_AUTOMAKE([pkgname], [pkgversion], [$am_arg3])
+ AC_OUTPUT
+END
+ cat configure.ac # For debugging.
+ $AUTOCONF
+ ./configure
+ cat config.h # For debugging.
+ # The non-empty third argument should prevent PACKAGE and VERSION
+ # from being AC_DEFINE'd.
+ $EGREP 'pkg(name|version)' config.h && exit 1
+ # This is required because even relatively-recent versions of the
+ # BSD shell wrongly exit when the 'errexit' shell flag is active if
+ # the last command of a compound statement fails, even if it should
+ # be protected by the use of "&&".
+ :
+done
+
+for am_extra_args in '' ',' ', []'; do
+ unindent > configure.ac <<END
+ AC_INIT
+ AC_CONFIG_HEADERS([config.h])
+ AM_INIT_AUTOMAKE([pkgname], [pkgversion]$am_extra_args)
+ AC_OUTPUT
+END
+ cat configure.ac # For debugging.
+ $AUTOCONF
+ ./configure
+ cat config.h # For debugging.
+ grep '^ *# *define *PACKAGE *"pkgname" *$' config.h
+ grep '^ *# *define *VERSION *"pkgversion" *$' config.h
+done
+
+:
diff --git a/t/backcompat3.sh b/t/backcompat3.sh
new file mode 100644
index 000000000..88047827d
--- /dev/null
+++ b/t/backcompat3.sh
@@ -0,0 +1,147 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Backward-compatibility test: check what happens when AC_INIT and
+# AM_INIT_AUTOMAKE are both given two or more arguments.
+
+am_create_testdir=empty
+. test-init.sh
+
+empty=''
+
+AUTOMAKE="$AUTOMAKE -Wno-obsolete"
+
+cat > Makefile.am <<'END'
+## Leading ':;' here required to work around bugs of (at least) bash 3.2
+got: Makefile
+ @:; { \
+ echo 'PACKAGE = $(PACKAGE)'; \
+ echo 'VERSION = $(VERSION)'; \
+ echo 'PACKAGE_NAME = $(PACKAGE_NAME)'; \
+ echo 'PACKAGE_VERSION = $(PACKAGE_VERSION)'; \
+ echo 'PACKAGE_STRING = $(PACKAGE_STRING)'; \
+ echo 'PACKAGE_TARNAME = $(PACKAGE_TARNAME)'; \
+ echo 'PACKAGE_BUGREPORT = $(PACKAGE_BUGREPORT)'; \
+ echo 'PACKAGE_URL = $(PACKAGE_URL)'; \
+ } >$@
+END
+
+
+### Run 1 ###
+
+cat > configure.ac <<END
+AC_INIT([ac_name], [ac_version])
+AM_INIT_AUTOMAKE([am_name], [am_version])
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+END
+
+cat configure.ac
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+cat >exp <<END
+PACKAGE = am_name
+VERSION = am_version
+PACKAGE_NAME = ac_name
+PACKAGE_VERSION = ac_version
+PACKAGE_STRING = ac_name ac_version
+PACKAGE_TARNAME = ac_name
+PACKAGE_BUGREPORT = $empty
+PACKAGE_URL = $empty
+END
+
+$MAKE got
+
+diff exp got
+
+
+### Run 2 ###
+
+cat > configure.ac <<'END'
+AC_INIT([ac_name], [ac_version], [ac_bugreport], [ac_tarname],
+ [ac_url])],
+AM_INIT_AUTOMAKE([am_name], [am_version])
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+END
+
+cat configure.ac
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+
+cat >exp <<END
+PACKAGE = am_name
+VERSION = am_version
+PACKAGE_NAME = ac_name
+PACKAGE_VERSION = ac_version
+PACKAGE_STRING = ac_name ac_version
+PACKAGE_TARNAME = ac_tarname
+PACKAGE_BUGREPORT = ac_bugreport
+PACKAGE_URL = ac_url
+END
+
+$MAKE got
+
+diff exp got
+
+
+### Run 3 ###
+
+cat > configure.ac <<END
+AC_INIT([ac_name], [ac_version])
+AM_INIT_AUTOMAKE([am_name], [am_version], [am_foo_quux])
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+END
+
+cat configure.ac
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+
+cat >exp <<END
+PACKAGE = am_name
+VERSION = am_version
+PACKAGE_NAME = ac_name
+PACKAGE_VERSION = ac_version
+PACKAGE_STRING = ac_name ac_version
+PACKAGE_TARNAME = ac_name
+PACKAGE_BUGREPORT = $empty
+PACKAGE_URL = $empty
+END
+
+$MAKE got
+
+diff exp got
+
+$FGREP am_foo_quux Makefile.in Makefile configure config.status && exit 1
+
+
+### Done ###
+
+:
diff --git a/t/backcompat6.sh b/t/backcompat6.sh
new file mode 100644
index 000000000..3c81a55f8
--- /dev/null
+++ b/t/backcompat6.sh
@@ -0,0 +1,105 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Backward-compatibility test: try to build and distribute a package
+# using obsoleted forms of AC_INIT, AM_INIT_AUTOMAKE and AC_OUTPUT,
+# and 'configure.in' as autconf input file.
+# This script can also serve as mild stress-testing for Automake.
+# See also the similar test 'backcompat5.test'.
+
+required=cc
+am_create_testdir=empty
+. test-init.sh
+
+# Anyone doing something like this in a real-life package probably
+# deserves to be killed.
+cat > configure.ac <<'END'
+dnl: Everything here is *deliberately* underquoted!
+AC_INIT(quux.c)
+PACKAGE=nonesuch-zardoz
+VERSION=nonesuch-0.1
+AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
+AC_SUBST(one,1)
+two=2
+AC_SUBST(two, $two)
+three=3
+AC_SUBST(three)
+AC_PROG_CC
+AM_CONFIG_HEADER(config.h:config.hin)
+AM_CONDITIONAL(CROSS_COMPILING, test "$cross_compiling" = yes)
+AC_OUTPUT(Makefile foo.got:foo1.in:foo2.in:foo3.in)
+END
+
+echo @one@ > foo1.in
+echo @two@ > foo2.in
+echo @three@ > foo3.in
+
+cat >config.hin <<'END'
+#undef PACKAGE
+#undef VERSION
+END
+
+cat >> Makefile.am <<'END'
+bin_PROGRAMS = foo
+foo_SOURCES = quux.c
+check-local:
+ test x'$(PACKAGE)' = x'nonesuch-zardoz'
+ test x'$(VERSION)' = x'nonesuch-0.1'
+if ! CROSS_COMPILING
+ ./foo
+## Do not anchor the regexps w.r.t. the end of line, because on
+## MinGW/MSYS, grep may assume LF line endings only, while our
+## 'foo' program may generate CRLF line endings.
+ ./foo | grep '^PACKAGE = nonesuch-zardoz!'
+ ./foo | echo '^VERSION = nonesuch-0\.1!'
+endif
+END
+
+cat > quux.c <<'END'
+#include <config.h>
+#include <stdio.h>
+int main (void)
+{
+ printf("PACKAGE = %s!\nVERSION = %s!\n", PACKAGE, VERSION);
+ return 0;
+}
+END
+
+$ACLOCAL -Wno-obsolete
+$AUTOMAKE -Wno-obsolete --add-missing
+$AUTOCONF
+
+./configure
+
+cat >foo.exp <<'END'
+1
+2
+3
+END
+
+diff foo.exp foo.got
+
+$MAKE
+$MAKE check
+
+distdir=nonesuch-zardoz-nonesuch-0.1
+$MAKE distdir
+test -f $distdir/quux.c
+test ! -f $distdir/foo.got
+
+$MAKE distcheck
+
+:
diff --git a/t/backslash-before-trailing-whitespace.sh b/t/backslash-before-trailing-whitespace.sh
new file mode 100644
index 000000000..843c6ef2f
--- /dev/null
+++ b/t/backslash-before-trailing-whitespace.sh
@@ -0,0 +1,45 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure we diagnose and fix white spaces following backslash.
+# Report from Peter Muir.
+
+. test-init.sh
+
+echo AC_OUTPUT >>configure.ac
+
+# Note: trailing whitespace used during the test should not appear as
+# trailing whitespace in this file, or it will get stripped by any
+# reasonable editor.
+
+echo 'bin_SCRIPTS = foo \ ' >Makefile.am
+cat >>Makefile.am <<'END'
+bar
+ok:
+ :
+END
+echo 'data_DATA = baz \ ' >>Makefile.am
+echo ' fum' >>Makefile.am
+
+$ACLOCAL
+$AUTOCONF
+AUTOMAKE_fails
+grep ':1:.*whitespace' stderr
+grep ':5:.*whitespace' stderr
+$AUTOMAKE -Wno-error
+./configure
+# Older versions of Automake used to produce invalid Makefiles such input.
+$MAKE ok
diff --git a/t/backslash-issues.sh b/t/backslash-issues.sh
new file mode 100644
index 000000000..21102346d
--- /dev/null
+++ b/t/backslash-issues.sh
@@ -0,0 +1,47 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for "\" problems.
+# TODO: might be nice to convert this to TAP...
+
+. test-init.sh
+
+echo AC_PROG_CC >> configure.ac
+$ACLOCAL
+
+# Bug report from Joerg-Martin Schwarz.
+cat > Makefile.am << 'END'
+bin_PROGRAMS = \
+ frob
+END
+$AUTOMAKE
+grep '^_SOURCE' Makefile.in && exit 1
+
+# We must skip the backslash, not complain about './\' not existing.
+# Reported by Rick Scott <rwscott@omnisig.com>
+cat > Makefile.am << 'END'
+SUBDIRS = \
+ .
+END
+$AUTOMAKE
+
+# Make sure we diagnose trailing backslash at the end of a file.
+# Report from Akim Demaile <akim@epita.fr>.
+echo 'foo = \' > Makefile.am
+AUTOMAKE_fails
+grep 'trailing backslash' stderr
+
+:
diff --git a/t/badline.sh b/t/badline.sh
new file mode 100644
index 000000000..c1dd4b0a7
--- /dev/null
+++ b/t/badline.sh
@@ -0,0 +1,33 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure that line number and file name in error message
+# referring to variable is always correct.
+
+. test-init.sh
+
+cat > configure.ac << END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE
+AC_SUBST(TEXINFOS)
+AC_CONFIG_FILES([Makefile])
+END
+
+: > Makefile.am
+
+$ACLOCAL || exit 1
+AUTOMAKE_fails
+grep 'configure.ac:3:.*info_TEXINFOS' stderr
diff --git a/t/badopt.sh b/t/badopt.sh
new file mode 100644
index 000000000..dad8b2a2d
--- /dev/null
+++ b/t/badopt.sh
@@ -0,0 +1,25 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure bad options cause error.
+
+. test-init.sh
+
+echo 'AUTOMAKE_OPTIONS = zardoz' > Makefile.am
+
+$ACLOCAL
+AUTOMAKE_fails
+grep zardoz stderr
diff --git a/t/badprog.sh b/t/badprog.sh
new file mode 100644
index 000000000..5620f3830
--- /dev/null
+++ b/t/badprog.sh
@@ -0,0 +1,32 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure that programs with bad names are properly
+# transformed.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = a,b
+a_b_SOURCES = ab.c
+END
+
+$ACLOCAL
+$AUTOMAKE
diff --git a/t/built-sources-check.sh b/t/built-sources-check.sh
new file mode 100644
index 000000000..7b2de2569
--- /dev/null
+++ b/t/built-sources-check.sh
@@ -0,0 +1,67 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure 'check:' honors $(BUILT_SOURCES).
+# PR/359.
+
+# For gen-testsuite-part: ==> try-with-serial-tests <==
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_FILES([dir/Makefile])
+AC_OUTPUT
+END
+
+mkdir dir
+
+cat > Makefile.am << 'END'
+BUILT_SOURCES = command1.inc
+SUBDIRS = dir
+TESTS = subrun.sh
+subrun.sh:
+ (echo '#! /bin/sh'; cat command1.inc) > $@
+ chmod +x $@
+command1.inc:
+ echo 'dir/echo.sh' > $@
+CLEANFILES = subrun.sh command1.inc
+END
+
+cat > dir/Makefile.am << 'END'
+BUILT_SOURCES = command2.inc
+check_SCRIPTS = echo.sh
+echo.sh:
+## The next line ensures that command1.inc has been built before
+## recurring into the subdir.
+ test -f ../command1.inc
+ (echo '#! /bin/sh'; cat command2.inc) > $@
+ chmod +x $@
+command2.inc:
+ echo 'echo Hello' > $@
+CLEANFILES = echo.sh command2.inc
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+./configure --prefix "$(pwd)/inst"
+
+run_make -O check
+grep '^PASS: subrun\.sh *$' stdout
+grep 'PASS.*echo\.sh' stdout && exit 1
+
+$MAKE distcheck
+
+:
diff --git a/t/built-sources-cond.sh b/t/built-sources-cond.sh
new file mode 100644
index 000000000..57b6abea4
--- /dev/null
+++ b/t/built-sources-cond.sh
@@ -0,0 +1,91 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Interaction of BUILT_SOURCES with conditionals.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AM_CONDITIONAL([COND1], [test $cond1 = yes])
+AM_CONDITIONAL([COND2], [test $cond2 = yes])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+if COND1
+BUILT_SOURCES = a
+else
+BUILT_SOURCES = b
+endif
+if COND2
+BUILT_SOURCES += c
+endif
+
+a b c:
+ echo who cares > $@
+END
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+cleanup ()
+{
+ # Files in $(BUILT_SOURCES) should be automatically removed
+ # upon maintainer-clean.
+ $MAKE maintainer-clean
+ test ! -f a
+ test ! -f b
+ test ! -f c
+}
+
+./configure cond1=yes cond2=yes
+
+$MAKE
+test -f a
+test ! -f b
+test -f c
+
+cleanup
+
+./configure cond1=no cond2=yes
+
+$MAKE
+test ! -f a
+test -f b
+test -f c
+
+cleanup
+
+./configure cond1=yes cond2=no
+
+$MAKE
+test -f a
+test ! -f b
+test ! -f c
+
+cleanup
+
+./configure cond1=no cond2=no
+
+$MAKE
+test ! -f a
+test -f b
+test ! -f c
+
+cleanup
+
+:
diff --git a/t/built-sources-fork-bomb.sh b/t/built-sources-fork-bomb.sh
new file mode 100644
index 000000000..59ded6931
--- /dev/null
+++ b/t/built-sources-fork-bomb.sh
@@ -0,0 +1,67 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Due to how the handling of $(BUILT_SOURCES) is implemented in Automake-NG,
+# a recursive make call in the recipe of any $(BUILT_SOURCES) (or of any of
+# its prerequisites) might cause an infinite recursion (complete with fork
+# bomb, yuck) if not handled correctly. Verify that this doesn't happen.
+# For more background, see:
+# <https://lists.gnu.org/archive/html/help-smalltalk/2012-08/msg00027.html>
+# <https://lists.gnu.org/archive/html/automake-patches/2012-08/msg00052.html>
+# Backported to improve coverage of mainline Automake.
+
+required=GNUmake
+. test-init.sh
+
+echo AC_OUTPUT >> configure.ac
+
+cat > Makefile.am << 'END'
+BUILT_SOURCES = foo
+.PHONY: build-foo
+build-foo:
+ echo OK > foo
+foo:
+ $(MAKE) build-foo
+
+# If the bug is still present, we want this test to fail, not to actually
+# go fork bomb and potentially crash the user machine. Take care of that.
+
+is_too_deep := $(shell test $(MAKELEVEL) -lt 10 && echo no)
+
+## Extra indentation here required to avoid confusing Automake.
+ ifeq ($(is_too_deep),no)
+ # All is ok.
+ else
+ $(error ::OOPS:: Recursion too deep, $(MAKELEVEL) levels)
+ endif
+END
+
+$ACLOCAL
+$AUTOMAKE -Wno-portability
+$AUTOCONF
+
+./configure
+
+run_make -M -- -n foo
+test ! -f foo
+# Guard against possible infinite recursion.
+$FGREP '::OOPS::' output && exit 1
+
+run_make -M -- foo
+# Guard against possible infinite recursion.
+$FGREP '::OOPS::' output && exit 1
+
+:
diff --git a/t/built-sources-install.sh b/t/built-sources-install.sh
new file mode 100644
index 000000000..8f9103d36
--- /dev/null
+++ b/t/built-sources-install.sh
@@ -0,0 +1,69 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure 'install:' honors $(BUILT_SOURCES).
+# PR/359.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_FILES([dir/Makefile])
+AC_OUTPUT
+END
+
+mkdir dir
+
+cat > Makefile.am << 'END'
+BUILT_SOURCES = built1
+SUBDIRS = dir
+built1:
+ echo ok > $@
+CLEANFILES = built1
+install-data-hook:
+ $(MKDIR_P) $(DESTDIR)$(prefix)/dir2
+ cp built1 $(DESTDIR)$(prefix)/built1
+ cp dir/built2 $(DESTDIR)$(prefix)/dir2/built3
+uninstall-hook:
+ rm -f $(DESTDIR)$(prefix)/built1
+ rm -f $(DESTDIR)$(prefix)/dir2/built3
+ rmdir $(DESTDIR)$(prefix)/dir2
+installcheck-local:
+ test -f $(prefix)/built1
+ test -f $(prefix)/dir2/built3
+END
+
+cat > dir/Makefile.am << 'END'
+BUILT_SOURCES = built2
+built2:
+## The next line ensures that command1.inc has been built before
+## recurring into the subdir.
+ cp ../built1 $@
+CLEANFILES = built2
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure --prefix "$(pwd)/inst"
+
+# Now make sure these two files are rebuilt during make install.
+$MAKE install
+test -f built1
+test -f dir/built2
+$MAKE installcheck
+$MAKE distcheck
+
+:
diff --git a/t/built-sources-subdir.sh b/t/built-sources-subdir.sh
new file mode 100644
index 000000000..9f892fa46
--- /dev/null
+++ b/t/built-sources-subdir.sh
@@ -0,0 +1,62 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure when using SUBDIRS that all BUILT_SOURCES are built.
+# A bug occurred where subdirs do not have all-recursive or
+# all-recursive-am which depended on BUILT_SOURCES.
+
+required=cc
+. test-init.sh
+
+mkdir lib
+
+cat >> configure.ac << 'END'
+AC_CONFIG_FILES([lib/Makefile])
+AC_PROG_RANLIB
+AC_PROG_CC
+AM_PROG_AR
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+SUBDIRS = lib
+END
+
+cat > lib/Makefile.am << 'END'
+pkgdata_DATA =
+noinst_LIBRARIES = libfoo.a
+libfoo_a_SOURCES = foo.c
+BUILT_SOURCES = foo.h
+foo.h:
+ echo \#define FOO_DEFINE 1 >$@
+CLEANFILES = $(BUILT_SOURCES)
+END
+
+cat > lib/foo.c << 'END'
+#include <foo.h>
+int foo (void) { return !FOO_DEFINE; }
+END
+
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --copy --add-missing
+
+./configure
+$MAKE
+$MAKE distcheck
+
+:
diff --git a/t/built-sources.sh b/t/built-sources.sh
new file mode 100644
index 000000000..99d5bca03
--- /dev/null
+++ b/t/built-sources.sh
@@ -0,0 +1,68 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Basic test on BUILT_SOURCES.
+
+required=cc
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_PROG_CC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+BUILT_SOURCES = foo.c
+noinst_PROGRAMS = bar baz
+foo.c:
+ rm -f $@ $@-t
+## Use printf, not echo, to avoid spurious interpretation of
+## the "\n" as a newline (seen on NetBSD 5.1).
+ printf '%s\n' '#include <stdio.h>' > $@-t
+ printf '%s\n' 'int main (void)' >> $@-t
+ printf '%s\n' '{ ' >> $@-t
+ printf '%s\n' ' printf ("%s\n", FOOMSG);' >> $@-t
+ printf '%s\n' ' return 0;' >> $@-t
+ printf '%s\n' '}' >> $@-t
+ mv -f $@-t $@
+CLEANFILES = foo.c
+END
+
+cat > bar.c <<'END'
+#define FOOMSG "Howdy, World"
+#include "foo.c"
+END
+
+cat > baz.c <<'END'
+#define FOOMSG "Hello, Earth"
+#include "foo.c"
+END
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+./configure
+$MAKE
+if cross_compiling; then :; else
+ ./bar
+ ./bar | grep 'Howdy, World'
+ ./baz
+ ./baz | grep 'Hello, Earth'
+fi
+$MAKE distcheck
+
+:
diff --git a/t/c-demo.sh b/t/c-demo.sh
new file mode 100644
index 000000000..ff3616ca7
--- /dev/null
+++ b/t/c-demo.sh
@@ -0,0 +1,178 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Demo on C support, also testing automatic dependency tracking,
+# conditional SUBDIRS and convenience libraries.
+
+required=cc
+am_create_testdir=empty
+. test-init.sh
+
+cat > configure.ac << 'END'
+AC_INIT([GNU C Demo], [22.3.2], [bug-automake@gnu.org])
+AC_CONFIG_SRCDIR([tests/test.test])
+AC_CONFIG_AUX_DIR([build-aux])
+AM_INIT_AUTOMAKE
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+AM_CONDITIONAL([RUN_TESTS], [test x"$run_tests" != x"no"])
+AC_CONFIG_FILES([Makefile src/Makefile lib/Makefile tests/Makefile])
+AC_OUTPUT
+END
+
+if cross_compiling; then
+ run_tests=no
+else
+ run_tests=yes
+fi
+export run_tests
+
+mkdir build-aux lib src tests
+
+cat > Makefile.am <<'END'
+SUBDIRS = lib src
+
+if RUN_TESTS
+SUBDIRS += tests
+endif
+
+.PHONY: test-objs
+check-local: test-objs
+test-objs:
+ test -f src/zardoz-main.$(OBJEXT)
+ test -f lib/foo.$(OBJEXT)
+ test -f lib/bar.$(OBJEXT)
+END
+
+cat > src/Makefile.am << 'END'
+bin_PROGRAMS = zardoz
+zardoz_SOURCES = main.c
+zardoz_LDADD = $(top_builddir)/lib/lib-convenience.a
+zardoz_CPPFLAGS = -I$(top_builddir)/lib -I$(top_srcdir)/lib
+END
+
+cat > lib/Makefile.am << 'END'
+noinst_LIBRARIES = lib-convenience.a
+lib_convenience_a_SOURCES = foo.c
+lib_convenience_a_SOURCES += bar.c
+dist_lib_convenience_a_SOURCES = bar.h
+nodist_lib_convenience_a_SOURCES = foo.h
+
+# We want this to be auto-generated an removed by "make clean", to
+# ensure that cleaning rules work correctly; an older implementation
+# of automatic dependency tracking support suffered of weaknesses in
+# this situation, see the "historical comments" reported in:
+# https://lists.gnu.org/archive/html/automake-patches/2012-06/msg00033.html
+foo.h: $(srcdir)/foo.c
+ sed -n 's/.*foo *(.*/&;/p' "$(srcdir)/foo.c" >$@-t
+ test 1 -eq `wc -l <$@-t`
+ chmod a-w $@-t && mv -f $@-t $@
+BUILT_SOURCES = foo.h
+CLEANFILES = $(BUILT_SOURCES)
+
+check-local:
+ test -f ${top_srcdir}/tests/test.test
+END
+
+cat > tests/Makefile.am << 'END'
+AUTOMAKE_OPTIONS = parallel-tests
+TEST_LOG_COMPILER = $(SHELL)
+TESTS = test.test
+EXTRA_DIST = $(TESTS)
+END
+
+cat > tests/test.test << 'END'
+#!/bin/sh
+set -x; set -e;
+../src/zardoz
+test "`../src/zardoz`" = 'Foo, Bar!'
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+test -f build-aux/depcomp
+test -f build-aux/compile # We have per-target flags on C sources.
+
+# Don't reject slow dependency extractors.
+./configure --enable-dependency-tracking
+
+cat > src/main.c << 'END'
+#include "foo.h"
+#include "bar.h"
+int main (void)
+{
+ printf ("%s, %s!\n", foo (), bar ());
+ return 0;
+}
+END
+
+cat > lib/foo.c << 'END'
+#include "foo.h"
+static char s[4];
+volatile char *foo (void)
+{
+ s[0] = 'F';
+ s[1] = s[2] = 'o';
+ s[3] = '\0';
+ return s;
+}
+END
+
+cat > lib/bar.c << 'END'
+#include "bar.h"
+const char *bar (void)
+{
+ return BARBAR;
+}
+END
+
+cat > lib/bar.h << 'END'
+#define BARBAR "Bar"
+const char *bar (void);
+END
+
+$MAKE
+ls -l . src lib # For debugging.
+$MAKE test-objs
+
+VERBOSE=x $MAKE check
+if cross_compiling; then
+ test ! -e tests/test-suite.log
+ test ! -e tests/test.log
+else
+ test -f tests/test-suite.log
+ grep 'Foo, Bar!' tests/test.log
+fi
+
+$MAKE distcheck
+
+if ! cross_compiling && ! grep "[ $tab]depmode=none" Makefile; then
+ # Let's check automatic dependency tracking.
+ sed 's/^\(#define BARBAR \).*/\1 "Zap"/' lib/bar.h > t
+ mv -f t lib/bar.h
+ $MAKE
+ ./src/zardoz
+ test "$(./src/zardoz)" = 'Foo, Zap!'
+fi
+
+$MAKE clean
+test ! -e lib/foo.h
+test -f lib/bar.h
+
+:
diff --git a/t/candist.sh b/t/candist.sh
new file mode 100644
index 000000000..19615aab0
--- /dev/null
+++ b/t/candist.sh
@@ -0,0 +1,32 @@
+#! /bin/sh
+# Copyright (C) 2009-2017 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 3 of the License, 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure things that cannot be dist_'ed are diagnosed.
+
+. test-init.sh
+
+echo AC_OUTPUT >>configure.ac
+
+cat > Makefile.am << 'END'
+dist_bin_PROGRAMS = foo
+dist_lib_LIBRARIES = libfoo.a
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+test 2 -eq $(grep -c 'dist.*forbidden' stderr)
+
+exit 0
diff --git a/t/canon-name.sh b/t/canon-name.sh
new file mode 100644
index 000000000..c8a071fca
--- /dev/null
+++ b/t/canon-name.sh
@@ -0,0 +1,38 @@
+#! /bin/sh
+# Copyright (C) 2007-2017 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 <https://www.gnu.org/licenses/>.
+
+# PR 511: Make sure we warn about e.g. AC_CONFIG_FILES([./gmakefile]),
+# as not all make implementations treat 'file' and './file' equally.
+
+. test-init.sh
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([./gmakefile ./sub/gmakefile])
+AC_OUTPUT
+END
+
+mkdir sub
+echo 'SUBDIRS = sub' >gmakefile.am
+: >sub/gmakefile.am
+
+$ACLOCAL
+AUTOMAKE_fails
+grep 'leading.*\./.*\./gmakefile' stderr
+grep 'leading.*\./.*\./sub/gmakefile' stderr
+
+:
diff --git a/t/canon.sh b/t/canon.sh
new file mode 100644
index 000000000..9c0915330
--- /dev/null
+++ b/t/canon.sh
@@ -0,0 +1,35 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure that name canonicalization error works.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = sniff-glue
+sniff-glue_SOURCES = sg.c
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+grep 'Makefile\.am:2:.* bad .*variable.*sniff-glue_SOURCES' stderr
+grep 'Makefile\.am:2:.* use .*sniff_glue_SOURCES' stderr
+
+:
diff --git a/t/canon2.sh b/t/canon2.sh
new file mode 100644
index 000000000..d6c451001
--- /dev/null
+++ b/t/canon2.sh
@@ -0,0 +1,35 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure name canonicalization happens for texinfo.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+info_TEXINFOS = zar-doz.texi
+zar_doz_TEXINFOS = frob.texi
+END
+
+: > texinfo.tex
+echo '@setfilename zar-doz.info' > zar-doz.texi
+echo '@setfilename frob' > frob.texi
+
+$ACLOCAL
+$AUTOMAKE
+
+grep zar-doz_TEXINFOS Makefile.in && exit 1
+
+:
diff --git a/t/canon3.sh b/t/canon3.sh
new file mode 100644
index 000000000..20933039a
--- /dev/null
+++ b/t/canon3.sh
@@ -0,0 +1,36 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Yet another canonicalization test.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = perm-number
+END
+
+: > perm-number.c
+
+$ACLOCAL
+$AUTOMAKE
+
+$FGREP 'perm_number.c' Makefile.in && exit 1
+
+:
diff --git a/t/canon4.sh b/t/canon4.sh
new file mode 100644
index 000000000..44bf47b4c
--- /dev/null
+++ b/t/canon4.sh
@@ -0,0 +1,40 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure name canonicalization happens for static libraries.
+# Keep this in sync with sister test 'canon6.sh'.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+END
+
+cat > Makefile.am << 'END'
+noinst_LIBRARIES = libx-y.a
+libx_y_a_SOURCES = xy.c
+END
+
+: > ar-lib
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '^ *libx-y.*=' Makefile.in && exit 1
+
+:
diff --git a/t/canon5.sh b/t/canon5.sh
new file mode 100644
index 000000000..e54877cff
--- /dev/null
+++ b/t/canon5.sh
@@ -0,0 +1,58 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure that we allow variable names starting in
+# non-letters. Whatever that might mean.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+END
+
+$ACLOCAL
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = 123test
+123test_SOURCES = 123.c
+END
+
+$AUTOMAKE
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = _foo
+_foo_SOURCES = foo.c
+END
+
+$AUTOMAKE
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = ,foo
+,foo_SOURCES = foo.c
+END
+
+AUTOMAKE_fails
+grep 'Makefile\.am:2:.* bad .*variable.*,foo_SOURCES' stderr
+grep 'Makefile\.am:2:.* use .*_foo_SOURCES' stderr
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = ,foo
+_foo_SOURCES = foo.c
+END
+
+$AUTOMAKE -Wno-portability
+
+:
diff --git a/t/canon6.sh b/t/canon6.sh
new file mode 100644
index 000000000..ea832a080
--- /dev/null
+++ b/t/canon6.sh
@@ -0,0 +1,42 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure name canonicalization happens for libtool libraries.
+# Keep this in sync with sister test 'canon4.sh'.
+
+required='libtoolize'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_LIBTOOL
+END
+
+cat > Makefile.am << 'END'
+noinst_LTLIBRARIES = libx-y.la
+libx_y_la_SOURCES = xy.c
+END
+
+: > ltmain.sh
+: > ar-lib
+
+$ACLOCAL
+$AUTOMAKE -a
+
+grep '^ *libx-y.*=' Makefile.in && exit 1
+
+:
diff --git a/t/canon7.sh b/t/canon7.sh
new file mode 100644
index 000000000..37c28f2f4
--- /dev/null
+++ b/t/canon7.sh
@@ -0,0 +1,101 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Stress test on canonicalization.
+
+required='cc libtool libtoolize'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB dnl: for static libraries
+AC_PROG_LIBTOOL dnl: for libtool libraries
+AM_CONDITIONAL([CROSS_COMPILING], [test "$cross_compiling" = yes])
+AC_OUTPUT
+END
+
+if touch ,foo-bar libb.az+baz lib~zardoz,,; then
+ rm -f ,foo-bar libb.az+baz lib~zardoz,,
+else
+ skip_ "cannot create regular files with \"tricky\" names"
+fi
+
+cat > Makefile.am << 'END'
+noinst_PROGRAMS = dummy_static dummy_dynamic ,foo-bar
+noinst_LIBRARIES = libb.az+baz.a
+noinst_LTLIBRARIES = lib~zardoz,,.la
+
+dummy_static_SOURCES = dummy.c lib.h
+dummy_dynamic_SOURCES = $(dummy_static_SOURCES)
+
+dummy_static_LDADD = $(noinst_LIBRARIES)
+dummy_dynamic_LDADD = $(noinst_LTLIBRARIES)
+
+_foo_bar_SOURCES = foobar.c
+libb_az_baz_a_SOURCES = libs.c
+lib_zardoz___la_SOURCES = libd.c
+
+check-local:
+ ls -l
+if CROSS_COMPILING
+ test -f ./,foo-bar$(EXEEXT)
+ test -f ./dummy_static$(EXEEXT)
+ test -f ./dummy_dynamic$(EXEEXT)
+else !CROSS_COMPILING
+ ./,foo-bar
+ ./dummy_static
+ ./dummy_dynamic
+ ./,foo-bar | grep 'Hello, FooBar!'
+ ./dummy_static | grep 'Hello from Static!'
+ ./dummy_dynamic | grep 'Hello from Dynamic!'
+endif !CROSS_COMPILING
+END
+
+cat > foobar.c << 'END'
+#include <stdio.h>
+int main(void)
+{
+ printf("Hello, FooBar!\n");
+ return 0;
+}
+END
+
+cat > dummy.c << 'END'
+#include <stdio.h>
+#include "lib.h"
+int main(void)
+{
+ printf("Hello from %s!\n", dummy_func());
+ return 0;
+}
+END
+
+echo 'const char *dummy_func(void);' > lib.h
+echo 'const char *dummy_func(void) { return "Dynamic"; }' > libd.c
+echo 'const char *dummy_func(void) { return "Static"; }' > libs.c
+
+libtoolize
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+$MAKE check
+$MAKE distcheck
+
+:
diff --git a/t/canon8.sh b/t/canon8.sh
new file mode 100644
index 000000000..ae9440c4b
--- /dev/null
+++ b/t/canon8.sh
@@ -0,0 +1,37 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that canonicalization does not transliterate the '@' charactrer.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foob@rquux
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+# The first grep is here mostly for debugging.
+grep foob.rquux Makefile.in
+grep foob@rquux Makefile.in
+grep 'foob[^@]rquux' Makefile.in && exit 1
+
+:
diff --git a/t/ccnoco-deps.sh b/t/ccnoco-deps.sh
new file mode 100755
index 000000000..d5264ae33
--- /dev/null
+++ b/t/ccnoco-deps.sh
@@ -0,0 +1,82 @@
+#! /bin/sh
+# Copyright (C) 2013-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that dependency tracking can also work with compilers that
+# doesn't understand '-c -o', even if the AM_PROG_CC_C_O macro is not
+# explicitly called.
+
+required=gcc # For 'cc-no-c-o'.
+. test-init.sh
+
+echo '#define myStr "Hello"' > foobar.h
+
+cat > foo.c << 'END'
+#include <stdio.h>
+#include "foobar.h"
+int main (void)
+{
+ printf ("%s\n", myStr);
+ return 0;
+}
+END
+
+cat > Makefile.am <<'END'
+bin_PROGRAMS = foo
+foo_SOURCES = foo.c foobar.h
+check-deps: all
+ test -n '$(DEPDIR)' && test -d '$(DEPDIR)'
+ ls -l $(DEPDIR)
+ grep 'stdio\.h' $(DEPDIR)/foo.Po
+ grep 'foobar\.h' $(DEPDIR)/foo.Po
+check-updated: all
+ is_newest foo$(EXEEXT) foobar.h
+END
+
+# We deliberately don't invoke AM_PROG_CC_C_O here.
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_OUTPUT
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+# Make sure the compiler doesn't understand '-c -o'.
+CC=$am_testaux_builddir/cc-no-c-o; export CC
+
+./configure >stdout || { cat stdout; exit 1; }
+cat stdout
+$EGREP 'understands? -c and -o together.* no$' stdout
+grep '^checking dependency style .*\.\.\. gcc' stdout
+
+$MAKE check-deps
+
+if ! cross_compiling; then
+ ./foo
+ test "$(./foo)" = Hello
+fi
+
+$sleep
+echo '#define myStr "Howdy"' > foobar.h
+$MAKE check-updated
+
+if ! cross_compiling; then
+ ./foo
+ test "$(./foo)" = Howdy
+fi
+
+:
diff --git a/t/ccnoco-lib.sh b/t/ccnoco-lib.sh
new file mode 100755
index 000000000..97146ba1c
--- /dev/null
+++ b/t/ccnoco-lib.sh
@@ -0,0 +1,73 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure we can compile when the compiler doesn't
+# understand '-c -o'.
+
+required=gcc # For cc-no-c-o.
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+$CC --version || exit 1
+$CC -v || exit 1
+AC_PROG_RANLIB
+AM_PROG_AR
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+mylibsdir = $(libdir)/my-libs
+mylibs_LIBRARIES = libwish.a
+libwish_a_SOURCES = a.c
+# Make sure we need something strange.
+libwish_CFLAGS = -O0
+END
+
+cat > a.c << 'END'
+int wish_granted (void)
+{
+ return 0;
+}
+END
+
+# Make sure the compiler doesn't understand '-c -o'.
+CC=$am_testaux_builddir/cc-no-c-o; export CC
+
+$ACLOCAL
+$AUTOCONF -Wall -Werror
+$AUTOMAKE --copy --add-missing
+
+for vpath in : false; do
+ if $vpath; then
+ srcdir=..
+ mkdir build
+ cd build
+ else
+ srcdir=.
+ fi
+ $srcdir/configure >stdout || { cat stdout; exit 1; }
+ cat stdout
+ $EGREP 'understands? -c and -o together.* no$' stdout
+ # No repeated checks please.
+ test $(grep -c ".*-c['\" ].*-o['\" ]" stdout) -eq 1
+ $MAKE
+ cd $srcdir
+done
+
+$MAKE distcheck
+
+:
diff --git a/t/ccnoco-lt.sh b/t/ccnoco-lt.sh
new file mode 100755
index 000000000..3088b1a35
--- /dev/null
+++ b/t/ccnoco-lt.sh
@@ -0,0 +1,76 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure we can compile libtool libraries when the compiler
+# doesn't understand '-c -o'.
+
+required='gcc libtoolize' # For cc-no-c-o.
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_AR
+LT_INIT
+$CC --version
+$CC -v
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+lib_LTLIBRARIES = libwish.la
+END
+
+cat > libwish.c << 'END'
+int wish_granted (void)
+{
+ return 0;
+}
+END
+
+# Make sure the compiler doesn't understand '-c -o'.
+CC=$am_testaux_builddir/cc-no-c-o; export CC
+
+libtoolize --verbose --install
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --copy --add-missing
+
+for vpath in : false; do
+ if $vpath; then
+ srcdir=..
+ mkdir build
+ cd build
+ else
+ srcdir=.
+ fi
+ $srcdir/configure >stdout || { cat stdout; exit 1; }
+ cat stdout
+ $EGREP 'understands? -c and -o together.* no$' stdout
+ # No repeated checks please.
+ test $(grep ".*-c['\" ].*-o['\" ]" stdout \
+ | $FGREP -v ' -c -o file.o' | wc -l) -eq 1
+ # Once we have rewritten $CC to use our 'compile' wrapper script,
+ # libtool should pick it up correctly, and not mess with the
+ # redefinition.
+ grep '^checking if .*/compile .*supports -c -o file\.o\.\.\. yes' stdout
+ # And of course, we should be able to build our package.
+ $MAKE
+ cd $srcdir
+done
+
+$MAKE distcheck
+
+:
diff --git a/t/ccnoco.sh b/t/ccnoco.sh
new file mode 100644
index 000000000..48fb86a15
--- /dev/null
+++ b/t/ccnoco.sh
@@ -0,0 +1,72 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure we can compile when the compiler doesn't
+# understand '-c -o'.
+
+required=gcc # For cc-no-c-o.
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+$CC --version || exit 1
+$CC -v || exit 1
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = wish
+wish_SOURCES = a.c
+# Make sure we need something strange.
+wish_CFLAGS = -g
+END
+
+cat > a.c << 'END'
+#include <stdio.h>
+
+int main ()
+{
+ printf ("hi\n");
+}
+END
+
+# Make sure the compiler doesn't understand '-c -o'.
+CC=$am_testaux_builddir/cc-no-c-o; export CC
+
+$ACLOCAL
+$AUTOCONF -Wall -Werror
+$AUTOMAKE --copy --add-missing
+
+for vpath in : false; do
+ if $vpath; then
+ srcdir=..
+ mkdir build
+ cd build
+ else
+ srcdir=.
+ fi
+ $srcdir/configure >stdout || { cat stdout; exit 1; }
+ cat stdout
+ $EGREP 'understands? -c and -o together.* no$' stdout
+ # No repeated checks please.
+ test $(grep -c ".*-c['\" ].*-o['\" ]" stdout) -eq 1
+ $MAKE
+ cd $srcdir
+done
+
+$MAKE distcheck
+
+:
diff --git a/t/ccnoco3.sh b/t/ccnoco3.sh
new file mode 100644
index 000000000..4cd4443bf
--- /dev/null
+++ b/t/ccnoco3.sh
@@ -0,0 +1,59 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure 'compile' doesn't call 'mv SRC SRC'.
+
+required=gcc # For cc-no-c-o.
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+$CC --version; $CC -v; # For debugging.
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = subdir-objects
+bin_PROGRAMS = wish
+wish_SOURCES = a.c
+END
+
+mkdir sub
+
+cat > a.c << 'END'
+#include <stdio.h>
+
+int main ()
+{
+ printf ("hi\n");
+}
+END
+
+# Make sure the compiler doesn't understand '-c -o'
+CC=$am_testaux_builddir/cc-no-c-o; export CC
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --copy --add-missing
+
+mkdir build
+cd build
+
+../configure
+run_make -E
+grep 'mv.*the same file' stderr && exit 1
+
+:
diff --git a/t/ccnoco4.sh b/t/ccnoco4.sh
new file mode 100644
index 000000000..7b3a458a7
--- /dev/null
+++ b/t/ccnoco4.sh
@@ -0,0 +1,53 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that Automake-generated C compilation rules don't mistakenly
+# use the "-c -o" options combination unconditionally (even with losing
+# compilers) when the 'subdir-objects' is used but sources are only
+# present in the top-level directory. Reported by Nick Bowler in the
+# discussion on automake bug#13378:
+# <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=13378#35>
+# <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=13378#44>
+
+required=gcc # For cc-no-c-o.
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+$CC --version; $CC -v; # For debugging.
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = subdir-objects
+bin_PROGRAMS = foo bar
+bar_SOURCES = foo.c
+END
+
+echo 'int main (void) { return 0; }' > foo.c
+
+# Make sure the compiler doesn't understand '-c -o'
+CC=$am_testaux_builddir/cc-no-c-o; export CC
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --copy --add-missing
+
+./configure
+$MAKE
+$MAKE distcheck
+
+:
diff --git a/t/check-concurrency-bug9245.sh b/t/check-concurrency-bug9245.sh
new file mode 100644
index 000000000..28744ecce
--- /dev/null
+++ b/t/check-concurrency-bug9245.sh
@@ -0,0 +1,57 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Look for a bug where FreeBSD make in concurrent mode reported success
+# even when the Automake-generated parallel testsuite harness failed.
+# See automake bug#9245.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TESTS = foo.test bar.test
+END
+
+cat > foo.test <<'END'
+#!/bin/sh
+exit 1
+END
+chmod a+x foo.test
+
+cp foo.test bar.test
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+$MAKE -j1 || skip_ "'$MAKE' doesn't support the -j option"
+
+for j in '' -j1 -j2; do
+ $MAKE $j check && exit 1
+ run_make -e FAIL -- $j TESTS=foo.test check
+ $MAKE $j recheck && exit 1
+ run_make -e FAIL -- $j TEST_LOGS=foo.log check
+ rm -f test-suite.log
+ run_make -e FAIL $j test-suite.log
+ test -f test-suite.log || exit 1
+done
+
+:
diff --git a/t/check-exported-srcdir.sh b/t/check-exported-srcdir.sh
new file mode 100644
index 000000000..5050fe032
--- /dev/null
+++ b/t/check-exported-srcdir.sh
@@ -0,0 +1,64 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that the testsuite driver (either with or without the
+# serial-tests option enabled) exports the 'srcdir' value in the
+# environment of the tests. This is documented in the manual.
+
+# For gen-testsuite-part: ==> try-with-serial-tests <==
+. test-init.sh
+
+show_info ()
+{
+ if test x"$am_serial_tests" != x"yes"; then
+ cat foo.log
+ cat test-suite.log
+ else
+ :
+ fi
+}
+
+mkdir SrcDir
+mv [!S]* SrcDir
+mkdir BuildDir
+cd SrcDir
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TESTS = foo.test
+END
+
+cat > foo.test <<'END'
+#!/bin/sh
+echo "foo.test: srcdir='$srcdir'"
+test x"$srcdir" = x"../SrcDir"
+END
+chmod a+x foo.test
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+cd ../BuildDir
+../SrcDir/configure
+
+$MAKE check || { show_info; exit 1; }
+show_info
+
+:
diff --git a/t/check-fd-redirect.sh b/t/check-fd-redirect.sh
new file mode 100644
index 000000000..8be88e8ec
--- /dev/null
+++ b/t/check-fd-redirect.sh
@@ -0,0 +1,108 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Simple Tests support: redirection of file descriptors with
+# AM_TESTS_FD_REDIRECT.
+# See also related test 'parallel-tests-fd-redirect.sh'.
+
+# For gen-testsuite-part: ==> try-with-serial-tests <==
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+TESTS = foo.test
+AM_TESTS_FD_REDIRECT = 3<three 4>four 5>>five 7<&0 8>&1 9>&2
+END
+
+echo '3333' > three
+chmod a-w three
+
+: > foo.test
+chmod a+x foo.test
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+./configure
+
+do_check ()
+{
+ cat foo.test # For debugging.
+ echo 'this line will be removed' > four
+ echo 'this line will not be removed' > five
+ st=0; echo 'ok ok ok' | run_make -O -E -e IGNORE check || st=$?
+ cat four
+ test x"$am_serial_tests" = x"yes" || cat foo.log
+ test $st -eq 0
+ grep '[ /]foo\.test: foofoofoo$' stdout
+ grep '[ /]foo\.test: barbarbar$' stderr
+ grep 'this line' four && exit 1
+ grep '^3333$' four
+ grep '^this line will not be removed$' five
+ grep '^ok ok ok$' five
+ $EGREP '(foofoofoo|barbarbar|3333|ok ok ok|this line)' foo.log && exit 1
+ :
+}
+
+# Try using both shell script and a perl script as the test, for
+# better coverage.
+
+cat > foo.test <<'END'
+#! /bin/sh
+set -e
+
+read FOO <&3
+test 3333 -eq "$FOO"
+echo "$FOO" >&4
+
+grep '^ok ok ok$' <&7 >&5
+
+echo " " $0: foofoofoo >&8
+echo " " $0: barbarbar >&9
+END
+
+do_check
+
+echo "#! $PERL -w" > foo.test
+cat >> foo.test <<'END'
+use warnings FATAL => 'all';
+use strict;
+
+open (FD3, "<&=3") or die "opening FD3: $!";
+open (FD4, ">&=4") or die "opening FD4: $!";
+open (FD5, ">&=5") or die "opening FD5: $!";
+open (FD7, "<&=7") or die "opening FD7: $!";
+open (FD8, ">&=8") or die "opening FD8: $!";
+open (FD9, ">&=9") or die "opening FD9: $!";
+
+chomp (my $FOO = <FD3>);
+die "$FOO != 3333" if not $FOO eq "3333";
+print FD4 "$FOO\n";
+
+chomp ($_ = <FD7>);
+die "$_ != 'ok ok ok'" if not $_ eq 'ok ok ok';
+print FD5 "$_\n";
+
+print FD8 " $0: foofoofoo\n";
+print FD9 " $0: barbarbar\n";
+END
+
+do_check
+
+:
diff --git a/t/check-no-test-driver.sh b/t/check-no-test-driver.sh
new file mode 100644
index 000000000..a059616e5
--- /dev/null
+++ b/t/check-no-test-driver.sh
@@ -0,0 +1,37 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that auxiliary script 'test-driver' doesn't get needlessly
+# installed or referenced when the 'serial-tests' option is used.
+
+am_serial_tests=yes
+. test-init.sh
+
+cat > Makefile.am <<'END'
+AUTOMAKE_OPTIONS = serial-tests
+TESTS = foo.test
+END
+
+$ACLOCAL
+
+for opts in '' '-a' '--add-missing --copy'; do
+ $AUTOMAKE $opts
+ $FGREP 'test-driver' Makefile.in && exit 1
+ find . | $FGREP 'test-driver' && exit 1
+ : For shells with busted 'set -e'.
+done
+
+:
diff --git a/t/check-subst-prog.sh b/t/check-subst-prog.sh
new file mode 100644
index 000000000..d4a1e4d85
--- /dev/null
+++ b/t/check-subst-prog.sh
@@ -0,0 +1,82 @@
+#! /bin/sh
+# Copyright (C) 2008-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check @substituted@ TESTS, some of which are also PROGRAMS.
+# See also sister test 'check-subst.sh'.
+
+# For gen-testsuite-part: ==> try-with-serial-tests <==
+required='cc native'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_SUBST([script_tests],
+ ['subst-pass-script.test subst-xfail-script.test'])
+AC_SUBST([prog_tests],
+ ['subst-pass-prog.test$(EXEEXT) subst-xfail-prog.test$(EXEEXT)'])
+AC_SUBST([xfail_tests],
+ ['xfail-script.test subst-xfail-script.test]dnl
+ [ xfail-prog$(EXEEXT) subst-xfail-prog.test$(EXEEXT)'])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TESTS = pass-script.test xfail-script.test @script_tests@ $(check_PROGRAMS)
+XFAIL_TESTS = @xfail_tests@
+check_PROGRAMS = pass-prog xfail-prog @prog_tests@
+EXTRA_PROGRAMS = subst-pass-prog.test subst-xfail-prog.test
+END
+
+cat > pass-script.test <<'END'
+#! /bin/sh
+exit 0
+END
+cat > xfail-script.test <<'END'
+#! /bin/sh
+exit 1
+END
+chmod a+x pass-script.test xfail-script.test
+cp pass-script.test subst-pass-script.test
+cp xfail-script.test subst-xfail-script.test
+
+cat > pass-prog.c <<'END'
+int main (void) { return 0; }
+END
+cat > xfail-prog.c <<'END'
+#include <stdlib.h>
+int main (void) { return EXIT_FAILURE; }
+END
+# The .test extension is removed for the default source file name:
+cp pass-prog.c subst-pass-prog.c
+cp xfail-prog.c subst-xfail-prog.c
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+$MAKE all
+$MAKE check
+$MAKE distclean
+
+mkdir build
+cd build
+../configure
+$MAKE all
+$MAKE check
+$MAKE distclean
+
+:
diff --git a/t/check-subst.sh b/t/check-subst.sh
new file mode 100644
index 000000000..35a989464
--- /dev/null
+++ b/t/check-subst.sh
@@ -0,0 +1,88 @@
+#! /bin/sh
+# Copyright (C) 2008-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check @substituted@ TESTS.
+# Note that in this test, we rely on the .test extension for the
+# substituted names: this is necessary for the parallel harness.
+# See also sister test 'check-subst-prog.sh'.
+
+# For gen-testsuite-part: ==> try-with-serial-tests <==
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_SUBST([script_tests], ['subst-pass-script.sh subst-xfail-script.sh'])
+AC_SUBST([xfail_tests], ['xfail-script.test subst-xfail-script.sh'])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TESTS = pass-script.test xfail-script.test @script_tests@
+XFAIL_TESTS = @xfail_tests@
+END
+
+if test x"$am_serial_tests" != x"yes"; then
+ unindent >> Makefile.am <<'END'
+ TEST_EXTENSIONS = .sh .test
+ SH_LOG_COMPILER = $(SHELL)
+END
+fi
+
+cat > pass-script.test <<'END'
+#! /bin/sh
+exit 0
+END
+cat > xfail-script.test <<'END'
+#! /bin/sh
+exit 1
+END
+cp pass-script.test subst-pass-script.sh
+cp xfail-script.test subst-xfail-script.sh
+chmod a+x pass-script.test xfail-script.test
+
+if test x"$am_serial_tests" = x"yes"; then
+ chmod a+x subst-pass-script.sh subst-xfail-script.sh
+fi
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+for vpath in false : ; do
+
+ if $vpath; then
+ mkdir build
+ cd build
+ srcdir=..
+ else
+ srcdir=.
+ fi
+
+ $srcdir/configure
+ $MAKE all
+ $MAKE check
+ if test x"$am_serial_tests" != x"yes"; then
+ ls -l
+ test -f pass-script.log
+ test -f xfail-script.log
+ test -f subst-pass-script.log
+ test -f subst-xfail-script.log
+ fi
+ $MAKE distclean
+ cd $srcdir
+
+done
+
+:
diff --git a/t/check-tests-in-builddir.sh b/t/check-tests-in-builddir.sh
new file mode 100644
index 000000000..b09c336fe
--- /dev/null
+++ b/t/check-tests-in-builddir.sh
@@ -0,0 +1,91 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that the testsuite driver can find test in the srcdir as
+# well as in builddir, and that is prefers those in the builddir.
+
+# For gen-testsuite-part: ==> try-with-serial-tests <==
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TESTS = foo.test bar.test
+EXTRA_DIST = $(TESTS)
+END
+
+cat > foo.test << 'END'
+#! /bin/sh
+exit ${FOO_EXIT_STATUS-0}
+END
+chmod a+x foo.test
+
+unset FOO_EXIT_STATUS
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+mkdir build
+cd build
+
+../configure
+
+cat > bar.test << 'END'
+#! /bin/sh
+exit 0
+END
+chmod a+x bar.test
+
+run_make -M check
+# The serial test driver does not strip VPATH components from
+# the name of the test, but the parallel driver should.
+if test x"$am_serial_tests" = x"yes"; then
+ grep '^PASS: .*foo\.test *$' output
+else
+ grep '\.\./foo' output && exit 1
+ grep '^PASS: foo\.test *$' output
+fi
+grep '^PASS: bar\.test *$' output
+
+rm -f test-suite.log foo.log bar.log
+
+run_make -M -e FAIL FOO_EXIT_STATUS=1 check
+# The serial test driver does not strip VPATH components from
+# the name of the test, but the parallel driver should.
+if test x"$am_serial_tests" = x"yes"; then
+ grep '^FAIL: .*foo\.test *$' output
+else
+ grep '\.\./foo' output && exit 1
+ grep '^FAIL: foo\.test *$' output
+fi
+grep '^PASS: bar\.test *$' output
+
+rm -f test-suite.log foo.log bar.log
+
+# Check that if the same test is present in srcdir and builddir,
+# the one in builddir is preferred.
+cp bar.test foo.test
+run_make -M FOO_EXIT_STATUS=1 check
+grep '^PASS: foo\.test *$' output
+grep '^PASS: bar\.test *$' output
+
+# The tests in the builddir must be preferred also by "make dist".
+FOO_EXIT_STATUS=1 $MAKE distcheck
+
+:
diff --git a/t/check.sh b/t/check.sh
new file mode 100644
index 000000000..f6aa2d62a
--- /dev/null
+++ b/t/check.sh
@@ -0,0 +1,41 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test Automake style tests.
+
+# For gen-testsuite-part: ==> try-with-serial-tests <==
+. test-init.sh
+
+cat > Makefile.am << 'END'
+TESTS = frob.test
+END
+
+test x"$am_serial_tests" = x"yes" || : > test-driver
+
+$ACLOCAL
+$AUTOMAKE
+
+grep 'check-TESTS.*:' Makefile.in
+grep 'check-DEJAGNU' Makefile.in && exit 1
+
+# 'check-TESTS' is phony.
+sed -n '/^\.PHONY:/,/^$/p' Makefile.in | $EGREP '(^| )check-TESTS($| )'
+
+# 'check' should depend directly on 'check-am' (similar tests are
+# in check2.sh and check3.sh).
+$EGREP '^check:.* check-am( |$)' Makefile.in
+
+:
diff --git a/t/check10.sh b/t/check10.sh
new file mode 100644
index 000000000..b9e577290
--- /dev/null
+++ b/t/check10.sh
@@ -0,0 +1,82 @@
+#! /bin/sh
+# Copyright (C) 2008-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check singular and plural in test summaries.
+
+# This test only makes sense for the older serial testsuite driver.
+am_serial_tests=yes
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TESTS = fail pass skip xfail xpass fail2 pass2 skip2 xfail2 xpass2
+XFAIL_TESTS = xfail xpass xfail2 xpass2
+END
+
+cat > pass <<'END'
+#! /bin/sh
+exit 0
+END
+cat > fail <<'END'
+#! /bin/sh
+exit 1
+END
+cat > skip <<'END'
+#! /bin/sh
+exit 77
+END
+chmod a+x pass fail skip
+cp pass pass2
+cp pass xpass
+cp xpass xpass2
+cp fail xfail
+cp fail fail2
+cp xfail xfail2
+cp skip skip2
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+(
+ run_make -e IGNORE TESTS=pass check
+ run_make -e IGNORE TESTS=fail check
+ run_make -e IGNORE TESTS=skip check
+ run_make -e IGNORE TESTS=xfail check
+ run_make -e IGNORE TESTS=xpass check
+ run_make -e IGNORE TESTS="pass pass2" check
+ run_make -e IGNORE TESTS="fail fail2" check
+ run_make -e IGNORE TESTS="skip skip2" check
+ run_make -e IGNORE TESTS="xfail xfail2" check
+ run_make -e IGNORE TESTS="xpass xpass2" check
+ run_make -e IGNORE TESTS='pass skip xfail' check
+ run_make -e IGNORE check
+) >stdout || { cat stdout; exit 1; }
+cat stdout
+
+grep '1 [tT]ests' stdout && exit 1
+grep '[02-9] [tT]est ' stdout && exit 1
+grep '1 .* were ' stdout && exit 1
+grep '[02-9].* was .*run' stdout && exit 1
+grep 'All 1 ' stdout && exit 1
+$EGREP '1 (un)?expected (failures|passes)' stdout && exit 1
+$EGREP '[^1] (un)?expected (failure|pass)\)' stdout && exit 1
+
+:
diff --git a/t/check11.sh b/t/check11.sh
new file mode 100644
index 000000000..fe6860017
--- /dev/null
+++ b/t/check11.sh
@@ -0,0 +1,59 @@
+#! /bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check skip summary.
+
+# For gen-testsuite-part: ==> try-with-serial-tests <==
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TESTS = skip skip2
+END
+
+cat > skip <<'END'
+#! /bin/sh
+exit 77
+END
+chmod a+x skip
+cp skip skip2
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+run_make -O TESTS=skip check
+if test x"$am_serial_tests" = x"yes"; then
+ grep '1.*passed' stdout && exit 1
+ : For shells with buggy 'set -e'.
+else
+ count_test_results total=1 pass=0 fail=0 skip=1 xfail=0 xpass=0 error=0
+fi
+
+run_make -O TESTS="skip skip2" check
+if test x"$am_serial_tests" = x"yes"; then
+ grep '2.*passed' stdout && exit 1
+ : For shells with buggy 'set -e'.
+else
+ count_test_results total=2 pass=0 fail=0 skip=2 xfail=0 xpass=0 error=0
+fi
+
+:
diff --git a/t/check12.sh b/t/check12.sh
new file mode 100644
index 000000000..4c4594a6d
--- /dev/null
+++ b/t/check12.sh
@@ -0,0 +1,212 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure dejagnu tests, automake-style tests, and check-local
+# target can coexist.
+
+# For gen-testsuite-part: ==> try-with-serial-tests <==
+required=runtest
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS =
+EXTRA_DIST =
+CLEANFILES =
+END
+
+## Simple tests.
+
+cat > a.test << 'END'
+#!/bin/sh
+echo a.test: exit status: ${A_EXIT_STATUS-0}
+exit ${A_EXIT_STATUS-0}
+END
+cat > b.test << 'END'
+#!/bin/sh
+echo b.test: exit status: ${B_EXIT_STATUS-0}
+exit ${B_EXIT_STATUS-0}
+END
+chmod +x a.test b.test
+
+cat >> Makefile.am << 'END'
+TESTS = a.test b.test
+EXTRA_DIST += $(TESTS)
+END
+
+A_EXIT_STATUS=0; export A_EXIT_STATUS
+B_EXIT_STATUS=0; export B_EXIT_STATUS
+
+## DejaGnu tests.
+
+cat >> Makefile.am << 'END'
+AUTOMAKE_OPTIONS += dejagnu
+DEJATOOL = hammer spanner
+AM_RUNTESTFLAGS = HAMMER=$(srcdir)/hammer SPANNER=$(srcdir)/spanner
+EXTRA_DIST += hammer.test/hammer.exp
+EXTRA_DIST += spanner.test/spanner.exp
+END
+
+cat > hammer << 'END'
+#! /bin/sh
+echo "Everything looks like a ${NAIL-nail} to me!"
+END
+
+NAIL=nail; export NAIL
+
+cat > spanner << 'END'
+#! /bin/sh
+echo "I'm a right spanner!"
+END
+chmod +x hammer spanner
+
+mkdir hammer.test spanner.test
+
+cat > hammer.test/hammer.exp << 'END'
+set test test_hammer
+spawn $HAMMER
+expect {
+ "Everything looks like a nail to me!" { pass "$test" }
+ default { fail "$test" }
+}
+END
+
+cat > spanner.test/spanner.exp << 'END'
+set test test_spanner
+spawn $SPANNER
+expect {
+ "I'm a right spanner!" { pass "$test" }
+ default { fail "$test" }
+}
+END
+
+## User-defined extra tests.
+
+cat >> Makefile.am <<'END'
+check-local:
+ case $$CHECKLOCAL_EXIT_STATUS in \
+ 0) echo 'check-local succeeded :-)';; \
+ *) echo 'check-local failed :-(';; \
+ esac >local.log
+ exit $$CHECKLOCAL_EXIT_STATUS
+CLEANFILES += local.log
+END
+CHECKLOCAL_EXIT_STATUS=0; export CHECKLOCAL_EXIT_STATUS
+
+## Go with the testcase execution.
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+for vpath in : false; do
+
+ if $vpath; then
+ srcdir=..
+ mkdir build
+ cd build
+ else
+ srcdir=.
+ fi
+
+ if test -f config.status; then
+ $MAKE distclean
+ fi
+
+ $srcdir/configure
+
+ $MAKE check
+ test -f hammer.log
+ test -f hammer.sum
+ test -f spanner.log
+ test -f spanner.sum
+ if test x"$am_serial_tests" != x"yes"; then
+ test -f test-suite.log
+ test -f a.log
+ test -f b.log
+ fi
+ grep 'check-local succeeded :-)' local.log
+
+ cp -f config.status config-status.sav
+
+ $MAKE distclean
+ test ! -e hammer.log
+ test ! -e hammer.sum
+ test ! -e spanner.log
+ test ! -e spanner.sum
+ test ! -e test-suite.log
+ test ! -e a.log
+ test ! -e b.log
+ test ! -e local.log
+
+ mv -f config-status.sav config.status
+ ./config.status
+
+ NAIL=screw $MAKE check && exit 1
+ test -f hammer.log
+ test -f hammer.sum
+ test -f spanner.log
+ test -f spanner.sum
+ grep 'FAIL: test_hammer' hammer.sum
+ grep 'FAIL:' spanner.sum && exit 1
+
+ B_EXIT_STATUS=1 $MAKE check && exit 1
+ if test x"$am_serial_tests" != x"yes"; then
+ cat test-suite.log
+ cat a.log
+ cat b.log
+ grep '^a\.test: exit status: 0$' a.log
+ grep '^b\.test: exit status: 1$' b.log
+ grep '^FAIL: b$' test-suite.log
+ grep '^b\.test: exit status: 1$' test-suite.log
+ grep '^a\.test' test-suite.log && exit 1
+ : For shells with busted 'set -e'.
+ fi
+
+ CHECKLOCAL_EXIT_STATUS=1 $MAKE check && exit 1
+ grep 'check-local failed :-(' local.log
+
+ # Do not trust the exit status of 'make -k'.
+ NAIL=screw B_EXIT_STATUS=23 CHECKLOCAL_EXIT_STATUS=1 $MAKE -k check || :
+ test -f hammer.log
+ test -f hammer.sum
+ test -f spanner.log
+ test -f spanner.sum
+ grep 'FAIL: test_hammer' hammer.sum
+ grep 'FAIL:' spanner.sum && exit 1
+ if test x"$am_serial_tests" != x"yes"; then
+ cat test-suite.log
+ cat a.log
+ cat b.log
+ grep '^a\.test: exit status: 0$' a.log
+ grep '^b\.test: exit status: 23$' b.log
+ grep '^FAIL: b$' test-suite.log
+ grep '^b\.test: exit status: 23$' test-suite.log
+ grep '^a\.test' test-suite.log && exit 1
+ : For shells with busted 'set -e'.
+ fi
+ grep 'check-local failed :-(' local.log
+
+ cd $srcdir
+
+done
+
+$MAKE distcheck
+
+:
diff --git a/t/check2.sh b/t/check2.sh
new file mode 100644
index 000000000..bb6b1414f
--- /dev/null
+++ b/t/check2.sh
@@ -0,0 +1,68 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test Automake style tests.
+
+# For gen-testsuite-part: ==> try-with-serial-tests <==
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_FILES([dir/Makefile])
+AC_OUTPUT
+END
+
+mkdir dir
+
+cat > Makefile.am << 'END'
+SUBDIRS = dir
+TESTS = \
+ subrun.sh
+subrun.sh:
+ (echo '#! /bin/sh'; echo 'dir/echo.sh') > $@
+ chmod +x $@
+CLEANFILES = subrun.sh
+END
+
+cat > dir/Makefile.am << 'END'
+check_SCRIPTS = echo.sh
+echo.sh:
+ (echo '#! /bin/sh'; echo 'echo Hello') > $@
+ chmod +x $@
+CLEANFILES = echo.sh
+END
+
+test x"$am_serial_tests" = x"yes" || cp "$am_scriptdir/test-driver" .
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+
+run_make -O check
+grep '^PASS: subrun\.sh *$' stdout
+grep 'PASS.*echo\.sh' stdout && exit 1
+
+# 'check' should depend directly on 'check-am' (similar tests are
+# in 'check.sh' and 'built-sources-check.sh').
+$EGREP '^check:.* check-recursive( |$)' Makefile.in
+$EGREP '^check:.* check-am( |$)' dir/Makefile.in
+
+# Make sure subrun.sh is still on its line as above. This means Automake
+# hasn't rewritten the TESTS line unnecessarily (we can tell, because all
+# Automake variables are reformatted by VAR_PRETTY).
+grep '^ subrun\.sh$' Makefile.in
+
+:
diff --git a/t/check4.sh b/t/check4.sh
new file mode 100644
index 000000000..7ec30cf28
--- /dev/null
+++ b/t/check4.sh
@@ -0,0 +1,80 @@
+#! /bin/sh
+# Copyright (C) 2005-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure 'make -k check' processes all directories.
+
+# For gen-testsuite-part: ==> try-with-serial-tests <==
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_FILES([dir/Makefile])
+AC_OUTPUT
+END
+
+mkdir dir
+
+cat > Makefile.am <<'END'
+SUBDIRS = dir
+TESTS = ok.sh
+END
+
+echo TESTS = fail.sh >dir/Makefile.am
+
+cat >ok.sh <<'END'
+#!/bin/sh
+:
+END
+
+cat >dir/fail.sh <<'END'
+#!/bin/sh
+exit 1
+END
+
+chmod +x ok.sh dir/fail.sh
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+./configure --prefix "$(pwd)/inst"
+
+run_make -O -e FAIL -- check
+grep '^FAIL: fail\.sh *$' stdout
+grep '^PASS: ok\.sh *$' stdout && exit 1
+
+# The exit status of 'make -k' can be anything
+# (depending on the Make implementation)
+run_make -O -e IGNORE -- -k check
+grep '^FAIL: fail\.sh *$' stdout
+grep '^PASS: ok\.sh *$' stdout
+
+# Should also works when -k is not in first position.
+run_make -O -e IGNORE -- -s -k check
+grep '^FAIL: fail\.sh *' stdout
+grep '^PASS: ok\.sh *' stdout
+
+# The rest of the test is for GNU Make.
+
+if using_gmake; then
+ # Try with a long-option that do not have a short option equivalent
+ # (here, --no-print-directory). That should cause all options to
+ # appear verbatim in MAKEFLAGS.
+ run_make -e FAIL -O -- --no-print-directory -k check
+ grep '^FAIL: fail\.sh *$' stdout
+ grep '^PASS: ok\.sh *$' stdout
+fi
+
+:
diff --git a/t/check5.sh b/t/check5.sh
new file mode 100644
index 000000000..0d45cf76c
--- /dev/null
+++ b/t/check5.sh
@@ -0,0 +1,60 @@
+#! /bin/sh
+# Copyright (C) 2006-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test TESTS = $(check_PROGRAMS)
+
+# For gen-testsuite-part: ==> try-with-serial-tests <==
+required='cc native'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+check_PROGRAMS = one two
+TESTS = $(check_PROGRAMS)
+check-local:
+ test -f one$(EXEEXT)
+ test -f two$(EXEEXT)
+ touch ok
+expect-tests:
+ is $(TESTS) == one$(EXEEXT) two$(EXEEXT)
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+cat > one.c << 'END'
+int main (void)
+{
+ return 0;
+}
+END
+cp one.c two.c
+
+./configure
+$MAKE check
+test -f ok
+run_make expect-tests
+run_make expect-tests EXEEXT=.bin
+# No am__EXEEXT_* variable is needed.
+grep '_EXEEXT_[1-9]' Makefile.in && exit 1
+$FGREP 'TESTS = $(check_PROGRAMS)' Makefile.in
+
+:
diff --git a/t/check6.sh b/t/check6.sh
new file mode 100644
index 000000000..2efeb0524
--- /dev/null
+++ b/t/check6.sh
@@ -0,0 +1,54 @@
+#! /bin/sh
+# Copyright (C) 2006-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for PR 400: XFAIL_TESTS delimited by TABs.
+# Also test that Solaris make VPATH rewriting is honored
+
+# For gen-testsuite-part: ==> try-with-serial-tests <==
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TESTS = $(XFAIL_TESTS)
+XFAIL_TESTS = a b c
+END
+
+cat >>a <<'END'
+#! /bin/sh
+exit 1
+END
+
+cp a b
+cp a c
+
+chmod a+x a b c
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+$MAKE check
+$MAKE distclean
+mkdir build
+cd build
+../configure
+$MAKE check
+
+:
diff --git a/t/check7.sh b/t/check7.sh
new file mode 100644
index 000000000..ff08a049f
--- /dev/null
+++ b/t/check7.sh
@@ -0,0 +1,67 @@
+#! /bin/sh
+# Copyright (C) 2007-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check EXEEXT extension for XFAIL_TESTS.
+
+# For gen-testsuite-part: ==> try-with-serial-tests <==
+required=cc
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TESTS = $(XFAIL_TESTS)
+XFAIL_TESTS = a b c d
+check_PROGRAMS = a c d
+check_SCRIPTS = b
+EXTRA_DIST = $(check_SCRIPTS)
+
+expect-xfail-tests:
+ is $(XFAIL_TESTS) == a$(EXEEXT) b c$(EXEEXT) d$(EXEEXT)
+END
+
+cat > b <<'END'
+#! /bin/sh
+exit 1
+END
+chmod a+x b
+
+cat > a.c <<'END'
+#include <stdlib.h>
+int main (void)
+{
+ return EXIT_FAILURE;
+}
+END
+
+cp a.c c.c
+cp a.c d.c
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+$MAKE check
+run_make expect-xfail-tests
+run_make expect-xfail-tests EXEEXT=.bin
+
+$MAKE distcheck
+
+:
diff --git a/t/check8.sh b/t/check8.sh
new file mode 100644
index 000000000..a37ad4e38
--- /dev/null
+++ b/t/check8.sh
@@ -0,0 +1,95 @@
+#! /bin/sh
+# Copyright (C) 2008-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check subdir TESTS.
+
+# For gen-testsuite-part: ==> try-with-serial-tests <==
+required='cc native'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = subdir-objects
+TESTS = foo sub/foo $(check_PROGRAMS)
+XFAIL_TESTS = foo sub/baz
+check_PROGRAMS = bar sub/bar baz sub/baz
+END
+
+mkdir sub
+
+cat > foo <<'END'
+#! /bin/sh
+test -f "$srcdir/Makefile.am"
+END
+cat > sub/foo <<'END'
+#! /bin/sh
+test -f "$srcdir/Makefile.am"
+END
+chmod a+x foo sub/foo
+
+cat > bar.c <<'END'
+int main (void) { return 0; }
+END
+cat > sub/bar.c <<'END'
+int main (void) { return 0; }
+END
+cat > baz.c <<'END'
+#include <stdlib.h>
+int main (void) { return EXIT_FAILURE; }
+END
+cat > sub/baz.c <<'END'
+#include <stdlib.h>
+int main (void) { return EXIT_FAILURE; }
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+run_make -E -O -e FAIL check
+grep 'XPASS.* foo$' stdout
+grep '^[^X]*PASS.* sub/foo$' stdout
+grep '^[^X]*PASS.* bar' stdout
+grep '^[^X]*PASS.* sub/bar' stdout
+grep '^[^X]*FAIL.* baz' stdout
+grep 'XFAIL.* sub/baz' stdout
+# The parallel test driver should cause circular dependencies.
+# Look for known warnings from a couple of 'make' implementations.
+grep -i 'circular.*dependency' stderr && exit 1
+grep -i 'graph cycles' stderr && exit 1
+
+$MAKE distclean
+
+mkdir build
+cd build
+../configure
+run_make -O -e FAIL check
+# Note: we are not grepping for the space in the lines from the 'foo'
+# tests, due to the Solaris make VPATH rewriting (if we fix that, we
+# can still write a separate test for it).
+grep 'XPASS.*foo$' stdout
+grep '^[^X]*PASS.*sub/foo$' stdout
+grep '^[^X]*PASS.* bar' stdout
+grep '^[^X]*PASS.* sub/bar' stdout
+grep '^[^X]*FAIL.* baz' stdout
+grep 'XFAIL.* sub/baz' stdout
+
+:
diff --git a/t/checkall.sh b/t/checkall.sh
new file mode 100644
index 000000000..f8066b30d
--- /dev/null
+++ b/t/checkall.sh
@@ -0,0 +1,31 @@
+#!/bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for bug where check target doesn't depend on all.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+bin_SCRIPTS = derived
+check-local:
+ true
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '^check-am:.*all-am' Makefile.in
+grep 'MAKE.*check-local' Makefile.in
diff --git a/t/clean.sh b/t/clean.sh
new file mode 100644
index 000000000..565ea904a
--- /dev/null
+++ b/t/clean.sh
@@ -0,0 +1,26 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure a clean target depends on previous one.
+
+. test-init.sh
+
+: > Makefile.am
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '^clean-am:.*mostlyclean-am' Makefile.in
diff --git a/t/colneq.sh b/t/colneq.sh
new file mode 100644
index 000000000..8a58e63c0
--- /dev/null
+++ b/t/colneq.sh
@@ -0,0 +1,32 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test that := definitions produce warnings, but otherwise work.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+ICONS := $(wildcard *.xbm)
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+grep ':=.*not portable' stderr
+
+$AUTOMAKE -Wno-portability
+grep '^ICONS *:= *\$(wildcard \*\.xbm) *$' Makefile.in
+
+:
diff --git a/t/colneq2.sh b/t/colneq2.sh
new file mode 100644
index 000000000..9172fca43
--- /dev/null
+++ b/t/colneq2.sh
@@ -0,0 +1,40 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test that := in var substitutions works.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+t = a b c
+EXTRA_DIST = $(t:=.test)
+.PHONY: test
+test:
+ is $(EXTRA_DIST) == a.test b.test c.test
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+$MAKE test
+
+:
diff --git a/t/colneq3.sh b/t/colneq3.sh
new file mode 100644
index 000000000..36c05d96a
--- /dev/null
+++ b/t/colneq3.sh
@@ -0,0 +1,44 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test that := definitions work as expected at make time.
+
+required=GNUmake
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+BAR := $(FOO)
+BAZ = $(FOO)
+FOO := foo
+.PHONY: test
+test:
+ test x'$(FOO)' = x'foo'
+ test x'$(BAZ)' = x'foo'
+ test x'$(BAR)' = x
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -Wno-portability
+
+./configure
+$MAKE test
+
+:
diff --git a/t/colon.sh b/t/colon.sh
new file mode 100644
index 000000000..6a72d7fe1
--- /dev/null
+++ b/t/colon.sh
@@ -0,0 +1,46 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for bug reported by Nyul Laszlo. When using the ":" syntax in
+# AC_OUTPUT, Automake fails to find the correct file.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_CONFIG_FILES([foo.h:foo.hin])
+AC_OUTPUT
+END
+
+: > foo.hin
+
+cat > Makefile.am <<'END'
+.PHONY: test
+test: distdir
+ ls -l . $(distdir)
+ test -f foo.h
+ test -f $(distdir)/foo.hin
+END
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+./configure
+
+$MAKE test
+$MAKE distcheck
+
+:
diff --git a/t/colon2.sh b/t/colon2.sh
new file mode 100644
index 000000000..0453fa149
--- /dev/null
+++ b/t/colon2.sh
@@ -0,0 +1,79 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure ":" works with files automake generates.
+# See also sister test 'colon3.sh'.
+
+. test-init.sh
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile:zardoz.in])
+AC_OUTPUT
+END
+
+cat > zardoz.am <<END
+.PHONY: dummy
+dummy:
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+# Automake should have created zardoz.in.
+test -f zardoz.in
+
+# The generated file should refer to zardoz.in and zardoz.am, but
+# never just "zardoz".
+$FGREP 'zardoz.am' zardoz.in
+$FGREP 'zardoz.in' zardoz.in
+sed -e 's|zardoz\.am|zrdz.am|g' \
+ -e 's|zardoz\.in|zrdz.in|g' \
+ <zardoz.in | $FGREP 'zardoz' && exit 1
+
+# The configure-generated Makefile should depend on zardoz.in, two.in and
+# three.in. The automake-generated zardoz.in should depend on zardoz.am.
+# Let's do this check the right way by running configure and make.
+
+str='%% ZaR DoZ %%'
+
+$AUTOCONF
+./configure
+test -f Makefile # Sanity check.
+
+$MAKE dummy
+# Again, make sure that the generated Makefile do not unduly
+# refer to 'zardoz' .
+$MAKE -n zardoz && exit 1
+
+$sleep
+cat >> zardoz.am <<END
+check-local: testam testin testmk
+.PHONY: testam testin testmk
+testam:
+ grep '$str' \$(srcdir)/zardoz.am
+testin:
+ grep '$str' \$(srcdir)/zardoz.in
+testmk:
+ grep '$str' Makefile
+END
+$MAKE Makefile # For non-GNU make.
+$MAKE testam testin testmk
+
+$MAKE distcheck
+
+:
diff --git a/t/colon3.sh b/t/colon3.sh
new file mode 100644
index 000000000..840fc313a
--- /dev/null
+++ b/t/colon3.sh
@@ -0,0 +1,91 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure ":" works with files automake generates.
+# This test is for multiple ":"s.
+# See also sister test 'colon2.sh'.
+
+. test-init.sh
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile:zardoz.in:two.in:three.in])
+AC_OUTPUT
+END
+
+cat > zardoz.am <<END
+.PHONY: dummy
+dummy:
+END
+
+: > two.in
+: > three.in
+
+$ACLOCAL
+$AUTOMAKE
+
+# Automake should have created zardoz.in.
+test -f zardoz.in
+
+# The generated file should refer to zardoz.in and zardoz.am, but
+# never just "zardoz".
+$FGREP 'zardoz.am' zardoz.in
+$FGREP 'zardoz.in' zardoz.in
+sed -e 's|zardoz\.am|zrdz.am|g' \
+ -e 's|zardoz\.in|zrdz.in|g' \
+ <zardoz.in | $FGREP 'zardoz' && exit 1
+
+# The configure-generated Makefile should depend on zardoz.in, two.in and
+# three.in. The automake-generated zardoz.in should depend on zardoz.am.
+# Let's do this check the right way by running configure and make.
+
+str='%% ZaR DoZ %%'
+str2='// 2_TwO_2 //'
+str3='== @thr33@ =='
+
+$AUTOCONF
+./configure
+test -f Makefile # Sanity check.
+
+$MAKE dummy
+# Again, make sure that the generated Makefile do not unduly
+# refer to 'zardoz' .
+$MAKE -n zardoz && exit 1
+
+$sleep
+cat >> zardoz.am <<END
+check-local: testam testin testmk test2 test3
+.PHONY: testam testin test2 testmk test3
+testam:
+ grep '$str' \$(srcdir)/zardoz.am
+testin:
+ grep '$str' \$(srcdir)/zardoz.in
+testmk:
+ grep '$str' Makefile
+test2:
+ grep '$str2' \$(srcdir)/two.in
+test3:
+ grep '$str3' \$(srcdir)/three.in
+END
+echo "# $str2" >> two.in
+echo "# $str3" >> three.in
+$MAKE Makefile # For non-GNU make.
+$MAKE testam testin testmk test2 test3
+
+$MAKE distcheck
+
+:
diff --git a/t/colon4.sh b/t/colon4.sh
new file mode 100644
index 000000000..6f01857fe
--- /dev/null
+++ b/t/colon4.sh
@@ -0,0 +1,39 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure multiple ":"s in AC_CONFIG_FILES do not generate broken
+# rebuild rules.
+# Test from Maciej W. Rozycki.
+
+. test-init.sh
+
+cat >> configure.ac <<END
+AC_CONFIG_FILES([zardoz:one:two:three])
+AC_OUTPUT
+END
+
+: > Makefile.am
+: > one
+: > two
+: > three
+
+$ACLOCAL
+$AUTOMAKE
+
+# The rule should regenerate the file "zardoz", not a meaningless
+# file "'zardoz:one:two".
+$FGREP 'zardoz:one:two' Makefile.in && exit 1
+exit 0
diff --git a/t/colon5.sh b/t/colon5.sh
new file mode 100644
index 000000000..50d014407
--- /dev/null
+++ b/t/colon5.sh
@@ -0,0 +1,71 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Another multi-":" test, this time from Doug Evans.
+
+. test-init.sh
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile:Makefile.in:Makefile.dep])
+AC_OUTPUT
+END
+
+: > Makefile.dep
+
+cat > Makefile.am <<'END'
+.PHONY: test-fs-layout test-grep test-distcommon test-distdir
+check-local: test-fs-layout test-grep test-distcommon test-distdir
+test-fs-layout:
+ test x'$(srcdir)' = '.' || test ! -r Makefile.dep
+test-grep:
+## The use of $(empty) prevents spurious matches.
+ grep '=GrEp$(empty)Me_am=' $(srcdir)/Makefile.in
+ grep '=GrEp$(empty)Me_dep=' $(srcdir)/Makefile.dep
+ grep '=GrEp$(empty)Me_am=' Makefile
+ grep '=GrEp$(empty)Me_dep=' Makefile
+test-distcommon:
+ echo ' ' $(DIST_COMMON) ' ' | grep '[ /]Makefile.dep '
+test-distdir: distdir
+ test -f $(distdir)/Makefile.dep
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+
+grep '=GrEpMe_am=' Makefile && exit 1 # Sanity check.
+grep '=GrEpMe_dep=' Makefile && exit 1 # Likewise.
+
+$MAKE test-distcommon
+$MAKE test-distdir
+
+$sleep
+
+echo '# =GrEpMe_am=' >> Makefile.am
+echo '# =GrEpMe_dep=' >> Makefile.dep
+
+$MAKE Makefile # For non-GNU make.
+$MAKE test-grep
+$MAKE test-distcommon
+$MAKE test-distdir
+
+$MAKE distcheck
+
+:
diff --git a/t/colon6.sh b/t/colon6.sh
new file mode 100644
index 000000000..f33f4fefe
--- /dev/null
+++ b/t/colon6.sh
@@ -0,0 +1,102 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Yet another multi-":" test, this time from Ken Pizzini.
+
+. test-init.sh
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE
+# With this, version.good should depend on version.gin, while
+# Makefile should not depend on either of them.
+AC_CONFIG_FILES([demo/Makefile demo/version.good:demo/version.gin])
+AC_OUTPUT
+END
+
+mkdir demo
+: > demo/version.gin
+: > demo/Makefile.am
+
+$ACLOCAL
+$AUTOMAKE
+
+# These are older "grepping checks", kept mostly for backward-compatibility.
+# They might (unlikely, but possibly) require updating when automake
+# internals are changed. Just relax or remove if they become too fragile.
+$EGREP 'Makefile:.*(demo|version)' demo/Makefile.in && exit 1
+grep 'version\.good:.*version\.gin' demo/Makefile.in
+
+$AUTOCONF
+
+for vpath in : false; do
+
+ if $vpath; then
+ srcdir=..
+ mkdir build
+ cd build
+ else
+ srcdir=.
+ fi
+
+ $srcdir/configure
+
+ test -f demo/version.good # Sanity check.
+ test ! -s demo/version.good # Likewise.
+
+ cd demo
+
+ $sleep
+ # HP-UX make considers targets with exact time stamps as one of their
+ # prerequisites out of date. Ensure Makefile is newer than config.status to
+ # avoid triggering the am--refresh rule in the (here-nonexistent) toplevel
+ # Makefile.
+ touch Makefile
+
+ # version.good should depend on version.gin.
+ echo "Rebuilt (srcdir=$srcdir)" > ../$srcdir/demo/version.gin
+ $MAKE version.good
+ $FGREP "Rebuilt (srcdir=$srcdir)" version.good
+
+ # Makefile should not depend on version.good.
+ rm -f version.good
+ $MAKE Makefile
+ test ! -e version.good
+
+ # version.good should be rebuilt from version.gin.
+ $MAKE version.good
+ test -f version.good
+
+ # Makefile should not depend on version.gin.
+ rm -f ../$srcdir/demo/version.gin
+ $MAKE Makefile
+ test ! -e ../$srcdir/demo/version.gin # Sanity check.
+
+ # version.good should depend on version.gin.
+ rm -f version.good
+ run_make -M -e FAIL version.good
+ # Try to verify that we errored out for the right reason.
+ $FGREP version.gin output
+
+ cd .. # Back in top builddir.
+ cd $srcdir
+
+ # Re-create it for the next pass (if any).
+ : > demo/version.gin
+
+done
+
+:
diff --git a/t/colon7.sh b/t/colon7.sh
new file mode 100644
index 000000000..a0ae9369d
--- /dev/null
+++ b/t/colon7.sh
@@ -0,0 +1,54 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Another test for a failing ":" in AC_OUTPUT.
+# Report from Maciej Stachowiak.
+
+. test-init.sh
+
+cat > configure.ac << 'END'
+AC_INIT([colon7], [1.0])
+AM_INIT_AUTOMAKE
+dnl: Please do not add proper m4 quoting here.
+AC_OUTPUT(subdir/bar:subdir/foo \
+ Makefile \
+ subdir/Makefile
+)
+END
+
+mkdir subdir
+: > Makefile.am
+: > subdir/foo
+cat > subdir/Makefile.am << 'END'
+# DIST_COMMON should contain 'foo', not 'subdir/foo'.
+test:
+ case '$(DIST_COMMON)' in *subdir/foo*) exit 1;; *) exit 0;; esac
+ echo ' ' $(DIST_COMMON) ' ' | grep '[ /]foo '
+.PHONY: test
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+# Should nowhere refer to 'bar.in'.
+$FGREP 'bar.in' Makefile.in subdir/Makefile.in && exit 1
+
+$AUTOCONF
+./configure
+cd subdir
+$MAKE test
+
+:
diff --git a/t/color-tests-opt.sh b/t/color-tests-opt.sh
new file mode 100644
index 000000000..6f8e543d0
--- /dev/null
+++ b/t/color-tests-opt.sh
@@ -0,0 +1,39 @@
+#! /bin/sh
+# Copyright (C) 2007-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that the 'color-tests' option, now active by default, is
+# nonetheless still silently accepted, for backward compatibility.
+
+. test-init.sh
+
+cat >configure.ac <<END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE([color-tests])
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+END
+
+cat >Makefile.am <<END
+AUTOMAKE_OPTIONS = color-tests
+TESTS = foo.test
+END
+
+: > test-driver
+
+$ACLOCAL
+$AUTOMAKE
+
+:
diff --git a/t/color-tests.sh b/t/color-tests.sh
new file mode 100644
index 000000000..300c6bd85
--- /dev/null
+++ b/t/color-tests.sh
@@ -0,0 +1,150 @@
+#! /bin/sh
+# Copyright (C) 2007-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test Automake TESTS color output, by forcing it.
+# Keep this in sync with the sister test 'color-tests2.sh'.
+
+required='grep-nonprint'
+# For gen-testsuite-part: ==> try-with-serial-tests <==
+. test-init.sh
+
+# Escape '[' for grep, below.
+red="$esc\[0;31m"
+grn="$esc\[0;32m"
+lgn="$esc\[1;32m"
+blu="$esc\[1;34m"
+mgn="$esc\[0;35m"
+std="$esc\[m"
+
+cat >>configure.ac <<END
+AC_OUTPUT
+END
+
+cat >Makefile.am <<'END'
+TESTS = $(check_SCRIPTS)
+check_SCRIPTS = pass fail skip xpass xfail error
+XFAIL_TESTS = xpass xfail
+END
+
+cat >pass <<END
+#! /bin/sh
+exit 0
+END
+
+cat >fail <<END
+#! /bin/sh
+exit 1
+END
+
+cat >skip <<END
+#! /bin/sh
+exit 77
+END
+
+cat >error <<END
+#! /bin/sh
+exit 99
+END
+
+cp fail xfail
+cp pass xpass
+chmod +x pass fail skip xpass xfail error
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+test_color ()
+{
+ # Not a useless use of cat; see above comments "grep-nonprinting"
+ # requirement in 'test-init.sh'.
+ cat stdout | grep "^${grn}PASS${std}: .*pass"
+ cat stdout | grep "^${red}FAIL${std}: .*fail"
+ cat stdout | grep "^${blu}SKIP${std}: .*skip"
+ cat stdout | grep "^${lgn}XFAIL${std}: .*xfail"
+ cat stdout | grep "^${red}XPASS${std}: .*xpass"
+ # The old serial testsuite driver doesn't distinguish between failures
+ # and hard errors.
+ if test x"$am_serial_tests" = x"yes"; then
+ cat stdout | grep "^${red}FAIL${std}: .*error"
+ else
+ cat stdout | grep "^${mgn}ERROR${std}: .*error"
+ fi
+ :
+}
+
+test_no_color ()
+{
+ # With make implementations that, like Solaris make, in case of errors
+ # print the whole failing recipe on standard output, we should content
+ # ourselves with a laxer check, to avoid false positives.
+ # Keep this in sync with lib/am/check.am:$(am__color_tests).
+ if $FGREP '= Xalways; then' stdout; then
+ # Extra verbose make, resort to laxer checks.
+ # Note that we also want to check that the testsuite summary is
+ # not unduly colorized.
+ (
+ set +e # In case some grepped regex below isn't matched.
+ # Not a useless use of cat; see above comments "grep-nonprinting"
+ # requirement in 'test-init.sh'.
+ cat stdout | grep "TOTAL.*:"
+ cat stdout | grep "PASS.*:"
+ cat stdout | grep "FAIL.*:"
+ cat stdout | grep "SKIP.*:"
+ cat stdout | grep "XFAIL.*:"
+ cat stdout | grep "XPASS.*:"
+ cat stdout | grep "ERROR.*:"
+ cat stdout | grep 'test.*expected'
+ cat stdout | grep 'test.*not run'
+ cat stdout | grep '===='
+ cat stdout | grep '[Ss]ee .*test-suite\.log'
+ cat stdout | grep '[Tt]estsuite summary'
+ ) | grep "$esc" && exit 1
+ : For shells with broken 'set -e'
+ else
+ cat stdout | grep "$esc" && exit 1
+ : For shells with broken 'set -e'
+ fi
+}
+
+for vpath in false :; do
+
+ if $vpath; then
+ mkdir build
+ cd build
+ srcdir=..
+ else
+ srcdir=.
+ fi
+
+ $srcdir/configure
+
+ # Forced colorization should take place also with non-ANSI terminals;
+ # hence the "TERM=dumb" definition.
+ AM_COLOR_TESTS=always; export AM_COLOR_TESTS
+ run_make -e FAIL -O TERM=dumb check
+ test_color
+
+ unset AM_COLOR_TESTS
+ run_make -e FAIL -O TERM=ansi check
+ test_no_color
+
+ $MAKE distclean
+ cd $srcdir
+
+done
+
+:
diff --git a/t/color-tests2.sh b/t/color-tests2.sh
new file mode 100644
index 000000000..7def8fa88
--- /dev/null
+++ b/t/color-tests2.sh
@@ -0,0 +1,201 @@
+#! /bin/sh
+# Copyright (C) 2007-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test Automake TESTS color output, using the expect(1) program.
+# Keep this in sync with the sister test 'color-tests.sh'.
+
+required='grep-nonprint'
+# For gen-testsuite-part: ==> try-with-serial-tests <==
+. test-init.sh
+
+# Escape '[' for grep, below.
+red="$esc\[0;31m"
+grn="$esc\[0;32m"
+lgn="$esc\[1;32m"
+blu="$esc\[1;34m"
+mgn="$esc\[0;35m"
+std="$esc\[m"
+
+# This test requires a working a working 'expect' program.
+(set +e; expect -c 'exit 77'; test $? -eq 77) \
+ || skip_ "requires a working expect program"
+
+# Also, if the $MAKE program fails to consider the standard output as a
+# tty (this happens with e.g., BSD make and Solaris dmake when they're
+# run in parallel mode; see the autoconf manual), there is little point
+# in proceeding.
+cat > Makefile <<'END'
+all:
+## Creative quoting in the 'echo' below to avoid risk of spurious output
+## matches by 'expect', below.
+ @test -t 1 && echo "stdout" "is" "a" "tty"
+END
+
+cat > expect-check <<'END'
+eval spawn $env(MAKE)
+expect {
+ "stdout is a tty" { exit 0 }
+ default { exit 1 }
+}
+exit 1
+END
+MAKE=$MAKE expect -f expect-check \
+ || skip_ "make spawned by expect should have a tty stdout"
+rm -f expect-check Makefile
+
+# Do the tests.
+
+cat >>configure.ac << 'END'
+if $testsuite_colorized; then :; else
+ AC_SUBST([AM_COLOR_TESTS], [no])
+fi
+AC_OUTPUT
+END
+
+cat >Makefile.am <<'END'
+TESTS = $(check_SCRIPTS)
+check_SCRIPTS = pass fail skip xpass xfail error
+XFAIL_TESTS = xpass xfail
+END
+
+cat >pass <<END
+#! /bin/sh
+exit 0
+END
+
+cat >fail <<END
+#! /bin/sh
+exit 1
+END
+
+cat >skip <<END
+#! /bin/sh
+exit 77
+END
+
+cat >error <<END
+#! /bin/sh
+exit 99
+END
+
+cp fail xfail
+cp pass xpass
+chmod +x pass fail skip xpass xfail error
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+test_color ()
+{
+ # Not a useless use of cat; see above comments "grep-nonprinting"
+ # requirement in 'test-init.sh'.
+ cat stdout | grep "^${grn}PASS${std}: .*pass"
+ cat stdout | grep "^${red}FAIL${std}: .*fail"
+ cat stdout | grep "^${blu}SKIP${std}: .*skip"
+ cat stdout | grep "^${lgn}XFAIL${std}: .*xfail"
+ cat stdout | grep "^${red}XPASS${std}: .*xpass"
+ # The old serial testsuite driver doesn't distinguish between failures
+ # and hard errors.
+ if test x"$am_serial_tests" = x"yes"; then
+ cat stdout | grep "^${red}FAIL${std}: .*error"
+ else
+ cat stdout | grep "^${mgn}ERROR${std}: .*error"
+ fi
+ :
+}
+
+test_no_color ()
+{
+ # With make implementations that, like Solaris make, in case of errors
+ # print the whole failing recipe on standard output, we should content
+ # ourselves with a laxer check, to avoid false positives.
+ # Keep this in sync with lib/am/check.am:$(am__color_tests).
+ if $FGREP '= Xalways; then' stdout; then
+ # Extra verbose make, resort to laxer checks.
+ # Note that we also want to check that the testsuite summary is
+ # not unduly colorized.
+ (
+ set +e # In case some grepped regex below isn't matched.
+ # Not a useless use of cat; see above comments "grep-nonprinting"
+ # requirement in 'test-init.sh'.
+ cat stdout | grep "TOTAL.*:"
+ cat stdout | grep "PASS.*:"
+ cat stdout | grep "FAIL.*:"
+ cat stdout | grep "SKIP.*:"
+ cat stdout | grep "XFAIL.*:"
+ cat stdout | grep "XPASS.*:"
+ cat stdout | grep "ERROR.*:"
+ cat stdout | grep 'test.*expected'
+ cat stdout | grep 'test.*not run'
+ cat stdout | grep '===='
+ cat stdout | grep '[Ss]ee .*test-suite\.log'
+ cat stdout | grep '[Tt]estsuite summary'
+ ) | grep "$esc" && exit 1
+ : For shells with broken 'set -e'
+ else
+ cat stdout | grep "$esc" && exit 1
+ : For shells with broken 'set -e'
+ fi
+}
+
+our_make ()
+{
+ set "MAKE=$MAKE" ${1+"$@"}
+ env "$@" expect -f $srcdir/expect-make >stdout || { cat stdout; exit 1; }
+ cat stdout
+}
+
+cat >expect-make <<'END'
+eval spawn $env(MAKE) -e check
+expect eof
+END
+
+for vpath in false :; do
+
+ if $vpath; then
+ mkdir build
+ cd build
+ srcdir=..
+ else
+ srcdir=.
+ fi
+
+ $srcdir/configure
+
+ our_make TERM=ansi
+ test_color
+
+ our_make TERM=dumb
+ test_no_color
+
+ our_make AM_COLOR_TESTS=no
+ test_no_color
+
+ $srcdir/configure testsuite_colorized=false
+
+ our_make TERM=ansi
+ test_no_color
+
+ our_make TERM=ansi MAKE="env AM_COLOR_TESTS=always $MAKE"
+ test_color
+
+ $MAKE distclean
+ cd $srcdir
+
+done
+
+:
diff --git a/t/commen10.sh b/t/commen10.sh
new file mode 100644
index 000000000..a8e67ebd9
--- /dev/null
+++ b/t/commen10.sh
@@ -0,0 +1,32 @@
+#! /bin/sh
+# Copyright (C) 2005-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure comments following trailing backslashes are diagnosed.
+# Report from Harald Dunkel.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+SUBDIRS = foo \
+# bar
+
+END
+
+mkdir foo
+
+$ACLOCAL
+AUTOMAKE_fails
+grep backslash stderr
diff --git a/t/commen11.sh b/t/commen11.sh
new file mode 100644
index 000000000..0f9cf722d
--- /dev/null
+++ b/t/commen11.sh
@@ -0,0 +1,41 @@
+#! /bin/sh
+# Copyright (C) 2005-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure backslash-newline-hash combinations are diagnosed as
+# comments following a trailing backslash, even when the combination
+# follows a variable assignment that is preceded by a comment.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+# initial comment
+variable = value-before-comment \
+#
+
+# comment
+SUBDIRS = foo \
+# bar
+
+END
+
+mkdir foo
+
+$ACLOCAL
+AUTOMAKE_fails
+grep '^Makefile\.am:3:.*backslash' stderr
+grep '^Makefile\.am:7:.*backslash' stderr
+
+:
diff --git a/t/comment-block.sh b/t/comment-block.sh
new file mode 100644
index 000000000..7c3712f69
--- /dev/null
+++ b/t/comment-block.sh
@@ -0,0 +1,34 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure block comments are not double-spaced.
+# Report from François Pinard.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+#START
+#a
+#b
+#c
+#END
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+(sed -e '/^#START/,/^#END/ !d' Makefile.in | grep -v '^#') && exit 1
+exit 0
diff --git a/t/comment.sh b/t/comment.sh
new file mode 100644
index 000000000..fedf97ec0
--- /dev/null
+++ b/t/comment.sh
@@ -0,0 +1,27 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that '#' as start of word in AUTOMAKE_OPTIONS means
+# comment.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = #no such option
+END
+
+$ACLOCAL
+$AUTOMAKE
diff --git a/t/comment2.sh b/t/comment2.sh
new file mode 100644
index 000000000..e78d6e41f
--- /dev/null
+++ b/t/comment2.sh
@@ -0,0 +1,34 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure comment recognition works in PROGRAMS. Report from Mark
+# Galassi.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = sim_products receive_th receive_pos # image_proc
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '^image_proc' Makefile.in && exit 1
+exit 0
diff --git a/t/comment3.sh b/t/comment3.sh
new file mode 100644
index 000000000..7a595b46f
--- /dev/null
+++ b/t/comment3.sh
@@ -0,0 +1,31 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that '#' after a tab is a failure.
+# The Tru64 Unix V5.1 system make will pass these to the
+# shell, which in turn can't find '#' as a command.
+# Sigh. Some vendors must be destroyed.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+install-data-local:
+ # Tru64 Unix must die
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+grep 'Makefile.am:2:.*#' stderr
diff --git a/t/comment4.sh b/t/comment4.sh
new file mode 100644
index 000000000..eeb012e2e
--- /dev/null
+++ b/t/comment4.sh
@@ -0,0 +1,41 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure commented variables are output near their comments.
+
+. test-init.sh
+
+cat >> configure.ac <<'EOF'
+AC_OUTPUT
+EOF
+
+cat > Makefile.am << 'EOF'
+# UnIqUe_COPYRIGHT_BOILERPLATE
+
+# UnIqUe_MUMBLE_COMMENT
+mumble = UnIqUe_MUMBLE_VALUE
+EOF
+
+$ACLOCAL
+$AUTOMAKE
+# UnIqUe_COPYRIGHT_BOILERPLATE should appear near the top of the file.
+test $(sed -n -e '1,/UnIqUe_COPYRIGHT_BOILERPLATE/p' \
+ Makefile.in | wc -l) -le 30
+# UnIqUe_MUMBLE_COMMENT should appear right before the mumble declaration.
+test $(sed -n -e '/UnIqUe_MUMBLE_COMMENT/,/UnIqUe_MUMBLE_VALUE/p' \
+ Makefile.in | wc -l) -eq 2
+
+:
diff --git a/t/comment5.sh b/t/comment5.sh
new file mode 100644
index 000000000..ac15884f0
--- /dev/null
+++ b/t/comment5.sh
@@ -0,0 +1,85 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for PR/280.
+# (Automake should complain about trailing backslashes in comments.)
+
+. test-init.sh
+
+cat >> configure.ac <<'EOF'
+AC_OUTPUT
+EOF
+
+cat > Makefile.am << 'EOF'
+all-local:
+ @echo ${var}
+
+# a comment with backslash \
+
+
+var = foo
+EOF
+
+$ACLOCAL
+AUTOMAKE_fails
+grep '^Makefile.am:5: error: blank line following trailing backslash' stderr
+
+
+## Here is a second test because head comments are
+## handled differently in Automake 1.5.
+
+cat > Makefile.am << 'EOF'
+# a comment with backslash \
+
+
+all-local:
+ @echo ${var}
+
+var = foo
+EOF
+
+AUTOMAKE_fails
+grep '^Makefile.am:2: error: blank line following trailing backslash' stderr
+
+
+## Make sure we print an 'included' stack on errors.
+
+echo 'include Makefile.inc'> Makefile.am
+cat > Makefile.inc << 'EOF'
+# a comment with backslash \
+
+EOF
+
+AUTOMAKE_fails
+grep '^Makefile.inc:2: error: blank line following trailing backslash' stderr
+grep '^Makefile.am:1: .*included from here' stderr
+grep -v '^Makefile.am:1: .*error:' stderr
+
+
+## Make sure backslashes are still allowed within a comment.
+## This usually happens when commenting out a Makefile rule.
+
+cat > Makefile.am << 'EOF'
+all-local:
+ @echo ${var}
+
+# a comment with backslash \
+# but terminated by a line without backslash
+
+var = foo
+EOF
+
+$AUTOMAKE
diff --git a/t/comment6.sh b/t/comment6.sh
new file mode 100644
index 000000000..2e5455af9
--- /dev/null
+++ b/t/comment6.sh
@@ -0,0 +1,68 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for PR/322.
+# Automake 1.6.1 seems to have a problem parsing comments that use
+# '\' to span multiple lines.
+
+. test-init.sh
+
+cat >> configure.ac <<'EOF'
+AC_OUTPUT
+EOF
+
+## There are two tests: one with backslashed comments at the top
+## of the file, and one with a rule first. This is because
+## Comments at the top of the file are handled specially
+## since Automake 1.5.
+
+cat > Makefile.am << 'EOF'
+# SOME_FILES = \
+ file1 \
+ file2 \
+ file3
+
+all-local:
+ @echo Good
+
+EOF
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+$MAKE
+
+grep '# SOME_FILES' Makefile
+grep '# *file3' Makefile
+
+cat > Makefile.am << 'EOF'
+all-local:
+ @echo Good
+
+# SOME_FILES = \
+ file1 \
+ file2 \
+ file3
+EOF
+
+$AUTOMAKE
+./configure
+$MAKE
+grep '# SOME_FILES' Makefile
+grep '# *file3' Makefile
+
+:
diff --git a/t/comment7.sh b/t/comment7.sh
new file mode 100644
index 000000000..d2efdfc96
--- /dev/null
+++ b/t/comment7.sh
@@ -0,0 +1,57 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure comment for conditional variables are output near the
+# corresponding conditional definitions.
+
+. test-init.sh
+
+cat >> configure.ac <<'EOF'
+AM_CONDITIONAL([COND], [true])
+EOF
+
+cat > Makefile.am << 'EOF'
+if COND
+# Comment for VAR in COND_TRUE.
+VAR = foo
+else
+# Comment for VAR in COND_FALSE.
+VAR = bar
+endif
+EOF
+
+$ACLOCAL
+$AUTOMAKE
+
+$FGREP '@COND' Makefile.in # For debugging, mostly.
+
+# The VAR definition appears once for each condition.
+test $(grep -c '@COND_TRUE@VAR' Makefile.in) = 1
+test $(grep -c '@COND_FALSE@VAR' Makefile.in) = 1
+
+# Make sure the right definition follows each comment.
+sed -n '/^#.*VAR.*COND_TRUE/ {
+ n
+ p
+ }' Makefile.in |
+ grep '@COND_TRUE@VAR = foo'
+sed -n '/^#.*VAR.*COND_FALSE/ {
+ n
+ p
+ }' Makefile.in |
+ grep '@COND_FALSE@VAR = bar'
+
+:
diff --git a/t/comment8.sh b/t/comment8.sh
new file mode 100644
index 000000000..bee420e16
--- /dev/null
+++ b/t/comment8.sh
@@ -0,0 +1,48 @@
+#! /bin/sh
+# Copyright (C) 2004-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure += does not append to a comment.
+# Report from Stepan Kasal.
+
+. test-init.sh
+
+cat >> configure.ac <<'EOF'
+AM_CONDITIONAL([COND1], [true])
+AM_CONDITIONAL([COND2], [true])
+AC_OUTPUT
+EOF
+
+cat > Makefile.am << 'EOF'
+VAR = valA# comA ## com C
+VAR += valB # comB
+if COND1
+ VAR += val1 # com1
+endif COND1
+VAR += valC
+if COND2
+ VAR += val2 # com2
+endif COND2
+
+.PHONY: test
+test:
+ is $(VAR) == valA valB val1 valC val2
+EOF
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+$MAKE test
diff --git a/t/comment9.sh b/t/comment9.sh
new file mode 100644
index 000000000..299a75ba2
--- /dev/null
+++ b/t/comment9.sh
@@ -0,0 +1,53 @@
+#! /bin/sh
+# Copyright (C) 2005-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure ##-comments are ignored in variable definitions.
+# Report from Julien Sopena.
+
+. test-init.sh
+
+cat > Makefile.am << 'EOF'
+TESTS = \
+ 1.test \
+ 2.test \
+ 3.test \
+## 4.test \
+ 5.test \
+ 6.test \
+ 7.test
+EOF
+
+: > test-driver
+
+$ACLOCAL
+$AUTOMAKE
+
+sed -n -e '/^TESTS =.*\\$/ {
+ :loop
+ p
+ n
+ t clear
+ :clear
+ s/\\$/\\/
+ t loop
+ p
+ n
+ }' -e '/^TESTS =/ p' Makefile.in > tests
+
+grep '3\.test' tests
+grep '##' tests && exit 1
+grep '4\.test' tests && exit 1
+grep '5\.test' tests
diff --git a/t/comments-in-var-def.sh b/t/comments-in-var-def.sh
new file mode 100644
index 000000000..fc991dbe2
--- /dev/null
+++ b/t/comments-in-var-def.sh
@@ -0,0 +1,56 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure Automake ignores in-line comments when using variables,
+# but preserve them in the output.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_OUTPUT
+END
+
+# Use a slash in the comment, because automake takes the dirname
+# of TEXINFO_TEX to compute $(am__TEXINFO_TEX_DIR).
+cat > Makefile.am << 'END'
+TEXINFO_TEX = tex/texinfo.tex # some comment w/ a slash
+info_TEXINFOS = main.texi
+.PHONY: test
+test:
+ test tex/texinfo.tex = $(TEXINFO_TEX)
+ test -d '$(am__TEXINFO_TEX_DIR)'
+ case '$(am__TEXINFO_TEX_DIR)' in tex|./tex) :;; *) exit 1;; esac
+END
+
+cat > main.texi << 'END'
+\input texinfo
+@setfilename main.info
+END
+
+mkdir tex
+: > tex/texinfo.tex
+
+$ACLOCAL
+$AUTOMAKE
+
+grep TEX Makefile.in # For debugging.
+grep '^TEXINFO_TEX *= *tex/texinfo\.tex *# some comment w/ a slash *$' Makefile.in
+
+$AUTOCONF
+./configure
+$MAKE test
+
+:
diff --git a/t/compile.sh b/t/compile.sh
new file mode 100644
index 000000000..086fdd963
--- /dev/null
+++ b/t/compile.sh
@@ -0,0 +1,45 @@
+#! /bin/sh
+# Copyright (C) 2004-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure 'compile' preserves spaces in its arguments.
+
+am_create_testdir=empty
+. test-init.sh
+
+get_shell_script compile
+
+# -o 'a c' should not be stripped because 'a c' is not an object
+# (it does not matter whether touch creates ./-- or not)
+./compile touch a.o -- -o 'a c' a.c
+test -f 'a c'
+test -f ./-o
+test -f a.o
+test -f a.c
+
+rm -f 'a c' ./-o a.o a.c
+
+./compile touch a.o -- -o 'a c.o' a.c
+test -f 'a c.o'
+test ! -e ./-o
+test ! -e a.o
+test -f a.c
+
+# Make sure 'compile' works for .obj too.
+./compile touch a.obj -- -o ac.obj a.c
+test ! -e a.obj
+test ac.obj
+
+:
diff --git a/t/compile2.sh b/t/compile2.sh
new file mode 100644
index 000000000..602a66a22
--- /dev/null
+++ b/t/compile2.sh
@@ -0,0 +1,84 @@
+#! /bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure 'compile' deals correctly with Windows-style paths.
+
+am_create_testdir=empty
+. test-init.sh
+
+get_shell_script compile
+
+cat >mycc <<'END'
+source_seen=no
+for arg
+do
+ test "X$arg" = X-o && exit 1
+ test "X$arg" = "X$amtest_source" && source_seen=yes
+done
+if test "$source_seen" != yes; then
+ echo "$0: no source file seen" >&2
+ exit 1
+fi
+if test ! -f "$amtest_source"; then
+ echo "$0: $amtest_source not readable" >&2
+ exit 1
+fi
+if test ! -d "$amtest_lock"; then
+ echo "$0: no lockdir $amtest_lock" >&2
+ exit 1
+fi
+touch "$amtest_obj"
+END
+
+chmod +x ./mycc
+
+# In case this test runs on a system with backslash directory separators:
+mkdir libltdl libltdl/libltdl
+
+# Backslashes in the input and the output name should be accepted.
+# Since this test might run on non-w32 systems, we need to be careful not
+# to use any backslash sequences which might be interpreted by 'echo'.
+amtest_source='libltdl\libltdl\slist.c'
+amtest_object='libltdl\libltdl\libltdl_libltdl_la-slist.obj'
+amtest_obj='slist.o'
+amtest_lock='slist_o.d'
+export amtest_source amtest_object amtest_obj amtest_lock
+
+: > "$amtest_source"
+./compile ./mycc -c "$amtest_source" -o "$amtest_object"
+test -f "$amtest_object"
+
+# Absolute Windows paths should be accepted.
+# Do not actually run this test on anything that could be Windows.
+if test -d 'C:\'; then
+ skip_ "this test shouldn't run on a Windows-like system"
+fi
+case $PATH_SEPARATOR in
+ ';'|':');;
+ *) skip_ "unrecognized PATH separator '$PATH_SEPARATOR'"
+esac
+
+amtest_source='C:\libltdl\libltdl\slist.c'
+amtest_object='C:\libltdl\libltdl\libltdl_libltdl_la-slist.obj'
+amtest_obj='slist.o'
+amtest_lock='slist_o.d'
+export amtest_source amtest_object amtest_obj amtest_lock
+
+: > "$amtest_source"
+./compile ./mycc -c "$amtest_source" -o "$amtest_object"
+test -f "$amtest_object"
+
+:
diff --git a/t/compile3.sh b/t/compile3.sh
new file mode 100644
index 000000000..d8b5a28d1
--- /dev/null
+++ b/t/compile3.sh
@@ -0,0 +1,62 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure 'compile' wraps the Microsoft C/C++ compiler (cl) correctly
+
+am_create_testdir=empty
+required=xsi-lib-shell
+. test-init.sh
+
+get_shell_script compile
+
+# Use a dummy cl, since cl isn't readily available on all systems
+cat >cl <<'END'
+#! /bin/sh
+echo "$@"
+END
+
+chmod +x ./cl
+
+# POSIX mandates that the compiler accepts a space between the -I,
+# -l and -L options and their respective arguments. Traditionally,
+# this should work also without a space. Try both usages.
+for sp in '' ' '; do
+
+ # Check if compile handles "-o foo", -I, -l, -L, -Xlinker -Wl,
+ opts=$(LIB= ./compile ./cl foo.c -o foo -l${sp}bar -L${sp}gazonk \
+ -I${sp}baz -Xlinker foobar -Wl,-foo,bar)
+ test x"$opts" = \
+ x"foo.c -Fefoo bar.lib -Ibaz -link -LIBPATH:gazonk foobar -foo bar"
+
+ # Check if compile handles "-o foo.obj"
+ opts=$(./compile ./cl -c foo.c -o foo.obj -I${sp}baz)
+ test x"$opts" = x"-c foo.c -Fofoo.obj -Ibaz"
+
+ # Check if compile handles "-o foo.o"
+ opts=$(./compile ./cl -c foo.c -o foo.o -I${sp}baz)
+ test x"$opts" = x"-c foo.c -Fofoo.o -Ibaz"
+
+ # Check if compile handles "foo.cc" as C++.
+ opts=$(./compile ./cl -c foo.cc -o foo.o -I${sp}baz)
+ test x"$opts" = x"-c -Tpfoo.cc -Fofoo.o -Ibaz"
+
+ # Check if compile clears the "eat" variable properly.
+ opts=$(eat=1 ./compile ./cl -c foo.c -o foo.obj -I${sp}baz)
+ test x"$opts" = x"-c foo.c -Fofoo.obj -Ibaz"
+
+done
+
+:
diff --git a/t/compile4.sh b/t/compile4.sh
new file mode 100644
index 000000000..630d8b681
--- /dev/null
+++ b/t/compile4.sh
@@ -0,0 +1,82 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure 'compile' wraps the Microsoft C/C++ compiler (cl) correctly
+# with respect to absolute paths.
+
+required='cl'
+. test-init.sh
+
+get_shell_script compile
+
+mkdir sub
+
+cat >sub/foo.c <<'EOF'
+int foo (void)
+{
+ return 0;
+}
+EOF
+
+cat >main.c <<'EOF'
+extern int foo (void);
+int main (void)
+{
+ return foo ();
+}
+EOF
+
+cwd=$(pwd) || fatal_ "cannot get current directory"
+absfoodir=$cwd/sub
+absmainc=$cwd/main.c
+absmainobj=$cwd/main.obj
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+SUBDIRS = sub
+END
+
+cat > sub/Makefile.am << 'END'
+lib_LIBRARIES = libfoo.a
+libfoo_a_SOURCES = foo.c
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+./configure
+$MAKE
+
+./compile cl $CPPFLAGS $CFLAGS -c -o "$absmainobj" "$absmainc"
+
+# POSIX mandates that the compiler accepts a space between the -I,
+# -l and -L options and their respective arguments. Traditionally,
+# this should work also without a space. Try both usages.
+for sp in '' ' '; do
+ rm -f main
+ ./compile cl $CFLAGS $LDFLAGS -L${sp}"$absfoodir" "$absmainobj" \
+ -o main -l${sp}foo
+ ./main
+done
+
+:
diff --git a/t/compile5.sh b/t/compile5.sh
new file mode 100644
index 000000000..9e96083e7
--- /dev/null
+++ b/t/compile5.sh
@@ -0,0 +1,80 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure the file name translation in the 'compile' script works
+# correctly
+
+. test-init.sh
+
+get_shell_script compile
+
+# Use a dummy cl, since cl isn't readily available on all systems
+cat >cl <<'END'
+#! /bin/sh
+echo "$@"
+END
+
+chmod +x ./cl
+
+cat >>configure.ac << 'END'
+AC_CANONICAL_HOST
+AC_CONFIG_FILES([check_host], [chmod +x check_host])
+AC_OUTPUT
+END
+
+: >Makefile.am
+
+# This will be sourced, nor executed.
+cat >check_host.in << 'END'
+case '@host_os@' in
+ mingw*)
+ ;;
+ *)
+ skip_ "target OS is not MinGW"
+ ;;
+esac
+case @build_os@ in
+ mingw* | cygwin*)
+ ;;
+ *)
+ winepath -w / \
+ || skip_ "not on MinGW or Cygwin, and winepath not available"
+ ;;
+esac
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+./configure
+. ./check_host
+
+cwd=$(pwd) || fatal_ "cannot get current directory"
+
+# POSIX mandates that the compiler accepts a space between the -I,
+# -l and -L options and their respective arguments. Traditionally,
+# this should work also without a space. Try both usages.
+for sp in '' ' '; do
+ # Check if "compile cl" transforms absolute file names to
+ # host format (e.g /somewhere -> c:/msys/1.0/somewhere).
+ res=$(./compile ./cl -L${sp}"$cwd" | sed -e 's/-link -LIBPATH://')
+ case $res in
+ ?:[\\/]*) ;;
+ *) exit 1 ;;
+ esac
+done
+
+:
diff --git a/t/compile6.sh b/t/compile6.sh
new file mode 100644
index 000000000..7a72eea4d
--- /dev/null
+++ b/t/compile6.sh
@@ -0,0 +1,115 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure 'compile' searches libraries correctly
+
+am_create_testdir=empty
+required=xsi-lib-shell
+. test-init.sh
+
+get_shell_script compile
+
+# Use a dummy cl, since cl isn't readily available on all systems
+cat >cl <<'END'
+#! /bin/sh
+echo "$@"
+END
+
+chmod +x ./cl
+
+# POSIX mandates that the compiler accepts a space between the -I,
+# -l and -L options and their respective arguments. Traditionally,
+# this should work also without a space. Try both usages.
+for sp in '' ' '; do
+
+ rm -rf lib lib2 syslib "sys lib2"
+
+ mkdir syslib
+ : > syslib/foo.lib
+
+ syslib=$(pwd)/syslib
+ LIB=$syslib
+ export LIB
+
+ mkdir lib
+ : > lib/bar.lib
+ : > lib/bar.dll.lib
+ : > lib/libbar.a
+ : > lib/libbaz.a
+
+ # Check if compile library search correctly
+ opts=$(./compile ./cl foo.c -o foo -L${sp}lib -l${sp}bar -l${sp}foo)
+ test x"$opts" = x"foo.c -Fefoo lib/bar.dll.lib $syslib/foo.lib -link -LIBPATH:lib"
+
+ # Check if -static makes compile avoid bar.dll.lib
+ opts=$(./compile ./cl foo.c -o foo -L${sp}lib -static -l${sp}bar -l${sp}foo)
+ test x"$opts" = x"foo.c -Fefoo lib/bar.lib $syslib/foo.lib -link -LIBPATH:lib"
+
+ : > syslib/bar.lib
+ : > syslib/bar.dll.lib
+ : > syslib/libbar.a
+
+ # Check if compile finds bar.dll.lib in syslib
+ opts=$(./compile ./cl foo.c -o foo -l${sp}bar -l${sp}foo)
+ test x"$opts" = x"foo.c -Fefoo $syslib/bar.dll.lib $syslib/foo.lib"
+
+ # Check if compile prefers -L over $LIB
+ opts=$(./compile ./cl foo.c -o foo -L${sp}lib -l${sp}bar -l${sp}foo)
+ test x"$opts" = x"foo.c -Fefoo lib/bar.dll.lib $syslib/foo.lib -link -LIBPATH:lib"
+
+ # Check if compile falls back to finding classic libname.a style libraries
+ # when name.lib or name.dll.lib isn't available.
+ opts=$(./compile ./cl foo.c -o foo -L${sp}lib -l${sp}baz)
+ test x"$opts" = x"foo.c -Fefoo lib/libbaz.a -link -LIBPATH:lib"
+
+ mkdir lib2
+ : > lib2/bar.dll.lib
+
+ # Check if compile avoids bar.dll.lib in lib2 when -static
+ opts=$(./compile ./cl foo.c -o foo -L${sp}lib2 -static -l${sp}bar -l${sp}foo)
+ test x"$opts" = x"foo.c -Fefoo $syslib/bar.lib $syslib/foo.lib -link -LIBPATH:lib2"
+
+ # Check if compile gets two different bar libraries when -static
+ # is added in the middle
+ opts=$(./compile ./cl foo.c -o foo -L${sp}lib2 -L${sp}lib -l${sp}bar -static -l${sp}bar)
+ test x"$opts" = x"foo.c -Fefoo lib2/bar.dll.lib lib/bar.lib -link -LIBPATH:lib2 -LIBPATH:lib"
+
+ # Check if compile gets the correct bar.dll.lib
+ opts=$(./compile ./cl foo.c -o foo -L${sp}lib -L${sp}lib2 -l${sp}bar -l${sp}foo)
+ test x"$opts" = x"foo.c -Fefoo lib/bar.dll.lib $syslib/foo.lib -link -LIBPATH:lib -LIBPATH:lib2"
+
+ # Check if compile gets the correct bar.dll.lib
+ opts=$(./compile ./cl foo.c -o foo -L${sp}lib2 -L${sp}lib -l${sp}bar -l${sp}foo)
+ test x"$opts" = x"foo.c -Fefoo lib2/bar.dll.lib $syslib/foo.lib -link -LIBPATH:lib2 -LIBPATH:lib"
+
+ mkdir "sys lib2"
+ : > "sys lib2/foo.dll.lib"
+
+ syslib2="$(pwd)/sys lib2"
+ LIB="$syslib2;$LIB"
+
+ # Check if compile handles spaces in $LIB and that it obeys the order
+ # in a multi-component $LIB.
+ opts=$(./compile ./cl foo.c -o foo -l${sp}foo)
+ test x"$opts" = x"foo.c -Fefoo $syslib2/foo.dll.lib"
+
+ # Check if compile handles the 2nd directory in a multi-component $LIB.
+ opts=$(./compile ./cl foo.c -o foo -static -l${sp}foo)
+ test x"$opts" = x"foo.c -Fefoo $syslib/foo.lib"
+
+done
+
+:
diff --git a/t/compile7.sh b/t/compile7.sh
new file mode 100644
index 000000000..d2eb8f887
--- /dev/null
+++ b/t/compile7.sh
@@ -0,0 +1,82 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure 'compile' wraps the Intel C/C++ compiler (icl) correctly
+# with respect to absolute paths.
+
+required='icl'
+. test-init.sh
+
+get_shell_script compile
+
+mkdir sub
+
+cat >sub/foo.c <<'EOF'
+int foo (void)
+{
+ return 0;
+}
+EOF
+
+cat >main.c <<'EOF'
+extern int foo (void);
+int main (void)
+{
+ return foo ();
+}
+EOF
+
+cwd=$(pwd) || fatal_ "cannot get current directory"
+absfoodir=$cwd/sub
+absmainc=$cwd/main.c
+absmainobj=$cwd/main.obj
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+SUBDIRS = sub
+END
+
+cat > sub/Makefile.am << 'END'
+lib_LIBRARIES = libfoo.a
+libfoo_a_SOURCES = foo.c
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+./configure
+$MAKE
+
+./compile icl $CPPFLAGS $CFLAGS -c -o "$absmainobj" "$absmainc"
+
+# POSIX mandates that the compiler accepts a space between the -I,
+# -l and -L options and their respective arguments. Traditionally,
+# this should work also without a space. Try both usages.
+for sp in '' ' '; do
+ rm -f main
+ ./compile icl $CFLAGS $LDFLAGS -L${sp}"$absfoodir" "$absmainobj" \
+ -o main -l${sp}foo
+ ./main
+done
+
+:
diff --git a/t/compile_f90_c_cxx.sh b/t/compile_f90_c_cxx.sh
new file mode 100644
index 000000000..986683614
--- /dev/null
+++ b/t/compile_f90_c_cxx.sh
@@ -0,0 +1,43 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure rules to invoke all compilers are selected with
+# mixed source objects.
+# (copied from compile_f_c_cxx.sh) Mike Nolta <mrnolta@princeton.edu>
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_CXX
+AC_PROG_FC
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo
+foo_SOURCES = foo.f90 bar.c baz.cc
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+# Look for the macros at the beginning of rules.
+tab=
+$FGREP "$tab\$(COMPILE)" Makefile.in
+$FGREP "$tab\$(CXXCOMPILE)" Makefile.in
+$FGREP "$tab\$(FCCOMPILE)" Makefile.in
+
+:
diff --git a/t/compile_f_c_cxx.sh b/t/compile_f_c_cxx.sh
new file mode 100644
index 000000000..8fa80a4b5
--- /dev/null
+++ b/t/compile_f_c_cxx.sh
@@ -0,0 +1,46 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure rules to invoke all compilers are selected with
+# mixed source objects.
+# Matthew D. Langston <langston@SLAC.Stanford.EDU>
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_CXX
+AC_PROG_F77
+AC_F77_LIBRARY_LDFLAGS
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo
+foo_SOURCES = foo.f bar.c baz.cc
+END
+
+: > config.guess
+: > config.sub
+
+$ACLOCAL
+$AUTOMAKE
+
+# Look for the macros at the beginning of rules.
+$FGREP "$tab\$(AM_V_CC)\$(COMPILE)" Makefile.in
+$FGREP "$tab\$(AM_V_CXX)\$(CXXCOMPILE)" Makefile.in
+$FGREP "$tab\$(AM_V_F77)\$(F77COMPILE)" Makefile.in
+
+:
diff --git a/t/cond-basic.sh b/t/cond-basic.sh
new file mode 100644
index 000000000..9ddeb1c5d
--- /dev/null
+++ b/t/cond-basic.sh
@@ -0,0 +1,42 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check basic use of conditionals.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_CONDITIONAL([TEST], [true])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+if TEST
+target: true
+ action
+else
+target: false
+endif
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '^@TEST_TRUE@target: true' Makefile.in
+grep "^@TEST_TRUE@${tab}action" Makefile.in
+grep '^@TEST_FALSE@target: false' Makefile.in
+
+:
diff --git a/t/cond.sh b/t/cond.sh
new file mode 100644
index 000000000..f4a8b487f
--- /dev/null
+++ b/t/cond.sh
@@ -0,0 +1,42 @@
+#! /bin/sh
+# Copyright (C) 1997-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check basic use of conditionals.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_CONDITIONAL([TEST], [true])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+if TEST
+VAR = true
+else
+VAR = false
+endif
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '^TEST_FALSE' Makefile.in && exit 1
+grep '^TEST_TRUE' Makefile.in && exit 1
+grep '^@TEST_TRUE@VAR = true$' Makefile.in
+grep '^@TEST_FALSE@VAR = false$' Makefile.in
+
+:
diff --git a/t/cond10.sh b/t/cond10.sh
new file mode 100644
index 000000000..8a1d68f89
--- /dev/null
+++ b/t/cond10.sh
@@ -0,0 +1,47 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for bug in conditionals. From Raja R Harinath.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_CONDITIONAL([USE_A], [test x = y])
+AM_CONDITIONAL([USE_B], [test x = z])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+if USE_A
+out=output_a.c
+else
+if USE_B
+out=output_b.c
+else
+out=output_c.c
+endif
+endif
+
+noinst_PROGRAMS=foo
+foo_SOURCES=foo.c $(out)
+END
+
+$ACLOCAL
+$AUTOMAKE -a
+grep 'USE_A_FALSE.*USE_B_FALSE.*output_c\...OBJEXT.' Makefile.in
+
+:
diff --git a/t/cond11.sh b/t/cond11.sh
new file mode 100644
index 000000000..20f4af783
--- /dev/null
+++ b/t/cond11.sh
@@ -0,0 +1,61 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for bug in conditionals. From Richard Boulton.
+# This checks that, if LDADD is set from a conditional variable
+# and an AC_SUBST, the _DEPENDENCIES variable is set correctly.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_SUBST([CC], [false])
+AM_CONDITIONAL([USE_A], [test -z "$two"])
+AC_SUBST([SUBSTVAR], [bar])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+if USE_A
+foolibs=faz.la
+else
+foolibs=
+endif
+
+noinst_PROGRAMS = foo
+foo_SOURCES = foo.c
+LDADD = $(SUBSTVAR) $(foolibs)
+
+.PHONY: test1 test2
+test1:
+ is faz.la == $(foo_DEPENDENCIES)
+test2:
+ is "" == $(foo_DEPENDENCIES)
+END
+
+: > config.guess
+: > config.sub
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --ignore-deps
+
+./configure
+$MAKE test1
+
+./configure two=yes
+$MAKE test2
+
+:
diff --git a/t/cond13.sh b/t/cond13.sh
new file mode 100644
index 000000000..c2e78e5a8
--- /dev/null
+++ b/t/cond13.sh
@@ -0,0 +1,58 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for bug in conditionals.
+# Report from Lars J. Aas.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_CXX
+AM_PROG_AR
+AC_PROG_RANLIB
+AM_CONDITIONAL([COND1], [true])
+AM_CONDITIONAL([COND2], [true])
+END
+
+cat > Makefile.am << 'END'
+noinst_LIBRARIES = libtest.a
+
+if COND1
+SOURCEVAR1 =
+SOURCEVAR2 = habla.cpp espanol.cpp
+else
+SOURCEVAR1 = dummy.cpp
+SOURCEVAR2 =
+endif
+
+if COND2
+TESTSOURCES = $(SOURCEVAR1)
+else
+TESTSOURCES = $(SOURCEVAR2)
+endif
+
+libtest_a_SOURCES = $(TESTSOURCES)
+END
+
+: > ar-lib
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '^am_libtest_a_OBJECTS =' Makefile.in
+
+:
diff --git a/t/cond14.sh b/t/cond14.sh
new file mode 100644
index 000000000..1cfd30233
--- /dev/null
+++ b/t/cond14.sh
@@ -0,0 +1,51 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for bug in conditionals.
+# Report from Robert Boehne.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_CONDITIONAL([COND1], [true])
+END
+
+cat > Makefile.am << 'END'
+if COND1
+BUILD_helldl = helldl
+helldl_SOURCES = dlmain.c
+helldl_DEPENDENCIES = libhello.la
+else
+BUILD_helldl =
+bin_SCRIPTS = helldl
+helldl$(EXEEXT):
+ rm -f $@
+ echo '#! /bin/sh' > $@
+ echo '-dlopen is unsupported' >> $@
+ chmod +x $@
+endif
+
+bin_PROGRAMS = $(BUILD_helldl)
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+$FGREP helldl Makefile.in # For debugging.
+test $($FGREP -c 'helldl$(EXEEXT):' Makefile.in) -eq 2
+
+:
diff --git a/t/cond15.sh b/t/cond15.sh
new file mode 100644
index 000000000..d11882ba4
--- /dev/null
+++ b/t/cond15.sh
@@ -0,0 +1,61 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Regression test for conditionally defined overriding of automatic rules.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_CONDITIONAL([COND1], [true])
+AM_CONDITIONAL([COND2], [true])
+END
+
+cat > Makefile.am << 'END'
+if COND1
+if COND2
+bin_SCRIPTS = helldl
+helldl$(EXEEXT):
+ rm -f $@
+ echo '#! /bin/sh' > $@
+ echo '-dlopen is unsupported' >> $@
+ chmod +x $@
+endif
+else
+if COND2
+else
+bin_SCRIPTS = helldl
+helldl$(EXEEXT):
+ rm -f $@
+ echo '#! /bin/sh' > $@
+ echo '-dlopen is unsupported' >> $@
+ chmod +x $@
+endif
+endif
+
+bin_PROGRAMS = helldl
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+$FGREP helldl Makefile.in # For debugging.
+num1=$($FGREP -c 'helldl$(EXEEXT):' Makefile.in)
+num2=$($FGREP -c '@COND1_FALSE@@COND2_TRUE@helldl$(EXEEXT):' Makefile.in)
+test $num1 -eq 4
+test $num2 -eq 1
+
+:
diff --git a/t/cond16.sh b/t/cond16.sh
new file mode 100644
index 000000000..e34b23f4b
--- /dev/null
+++ b/t/cond16.sh
@@ -0,0 +1,55 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for bug in conditionals in SOURCES with variable substitution
+# references.
+# Report from Richard Boulton.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_CONDITIONAL([COND1], [true])
+AC_OUTPUT
+END
+
+: > hello.c
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = no-dependencies
+CC = false
+OBJEXT = o
+
+if COND1
+var = foo.c
+else
+var = foo.c
+endif
+
+bin_PROGRAMS = hell
+hell_SOURCES = $(var:=)
+
+.PHONY: test
+test:
+ is $(hell_SOURCES) $(hell_OBJECTS) == foo.c foo.o
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+./configure
+$MAKE test
+
+:
diff --git a/t/cond17.sh b/t/cond17.sh
new file mode 100644
index 000000000..82405f05b
--- /dev/null
+++ b/t/cond17.sh
@@ -0,0 +1,42 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for being able to define an object to be generated in different ways
+# according to a conditional.
+# Report from Richard Boulton.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_CXX
+AM_CONDITIONAL([COND1], [true])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = helldl
+if COND1
+helldl_SOURCES = foo.cc
+else
+helldl_SOURCES = foo.c
+endif
+END
+
+$ACLOCAL
+$AUTOMAKE -a
+
+:
diff --git a/t/cond18.sh b/t/cond18.sh
new file mode 100644
index 000000000..70e2edab4
--- /dev/null
+++ b/t/cond18.sh
@@ -0,0 +1,63 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Regression test for substitution references to conditional variables.
+# Report from Richard Boulton.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_CONDITIONAL([COND1], [true])
+AM_CONDITIONAL([COND2], [true])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = no-dependencies
+CC = false
+OBJEXT = obj
+
+var1 = dlmain
+
+if COND1
+var2 = $(var1:=.c) foo.cc
+else
+var2 = $(var1:=.c)
+endif
+
+if COND2
+var3 = $(var2:.cc=.c)
+else
+var3 = $(var2:.cc=.c)
+endif
+
+helldl_SOURCES = $(var3)
+
+.PHONY: test
+test:
+ is $(helldl_SOURCES) $(helldl_OBJECTS) == \
+ dlmain.c foo.c dlmain.obj foo.obj
+
+bin_PROGRAMS = helldl
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+./configure
+$MAKE test
+
+:
diff --git a/t/cond19.sh b/t/cond19.sh
new file mode 100644
index 000000000..ecdf014e1
--- /dev/null
+++ b/t/cond19.sh
@@ -0,0 +1,69 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Regression test for substitution references to conditional variables.
+# Report from Richard Boulton.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_SUBST([CC], [false])
+AC_SUBST([OBJEXT], [o])
+AM_CONDITIONAL([COND1], [test "x$CONDITION1" = "xtrue"])
+AM_CONDITIONAL([COND2], [test "x$CONDITION2" = "xtrue"])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = helldl
+
+var1 = dlmain
+
+if COND1
+var2 = $(var1:=.c)
+else
+var2 = $(var1:=.c)
+endif
+
+if COND2
+var3 = $(var2:.c=a.c)
+var4 = $(var2:.c=b.c)
+else
+var3 = $(var2:.c=b.c)
+var4 = $(var2:.c=a.c)
+endif
+
+helldl_SOURCES = $(var3:.c=1.c) $(var4:.c=2.c)
+
+.PHONY: test
+test:
+ is $(exp) == $(helldl_SOURCES) $(helldl_OBJECTS)
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a -i
+
+CONDITION1=true CONDITION2=true ./configure
+$MAKE test exp='dlmaina1.c dlmainb2.c dlmaina1.o dlmainb2.o'
+CONDITION1=true CONDITION2=false ./configure
+$MAKE test exp='dlmainb1.c dlmaina2.c dlmainb1.o dlmaina2.o'
+CONDITION1=false CONDITION2=true ./configure
+$MAKE test exp='dlmaina1.c dlmainb2.c dlmaina1.o dlmainb2.o'
+CONDITION1=false CONDITION2=false ./configure
+$MAKE test exp='dlmainb1.c dlmaina2.c dlmainb1.o dlmaina2.o'
+
+:
diff --git a/t/cond20.sh b/t/cond20.sh
new file mode 100644
index 000000000..dfbb6e3f7
--- /dev/null
+++ b/t/cond20.sh
@@ -0,0 +1,46 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Regression test for recursion handling in substitution references to
+# conditional variables.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_CONDITIONAL([COND1], [true])
+END
+
+cat > Makefile.am << 'END'
+var1 = $(var2)
+
+if COND1
+var2 = $(var1:=.c) foo.c
+else
+var2 = $(var1:=.c)
+endif
+
+helldl_SOURCES = $(var2)
+
+bin_PROGRAMS = helldl
+END
+
+$ACLOCAL
+$AUTOCONF
+AUTOMAKE_fails -a
+grep "variable.*var2.*recursively defined" stderr
+
+:
diff --git a/t/cond21.sh b/t/cond21.sh
new file mode 100644
index 000000000..7aecdc24c
--- /dev/null
+++ b/t/cond21.sh
@@ -0,0 +1,76 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check for use of = and += in different conditions.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_CONDITIONAL([COND1], [true])
+AM_CONDITIONAL([COND2], [true])
+AM_CONDITIONAL([COND3], [true])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+
+FOO = foo
+if COND1
+ FOO += foo1
+else
+ FOO += foon1
+endif
+if COND2
+ FOO += foo2
+else
+ FOO += foon2
+endif
+if COND1
+ FOO += foo1b
+else
+ FOO += foon1b
+endif
+
+if COND1
+if COND2
+ BAR = bar12
+else
+ BAR = bar1n2
+endif
+else
+ BAR = barn1
+endif
+
+BAR += bar
+
+if COND3
+ BAR += bar3
+endif
+
+.PHONY: test
+test:
+ @echo BAR: $(BAR) :BAR
+ @echo FOO: $(FOO) :FOO
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+./configure
+$MAKE test | $FGREP 'BAR: bar12 bar bar3 :BAR'
+$MAKE test | $FGREP 'FOO: foo foo1 foo2 foo1b :FOO'
+
+:
diff --git a/t/cond22.sh b/t/cond22.sh
new file mode 100644
index 000000000..3812f08c0
--- /dev/null
+++ b/t/cond22.sh
@@ -0,0 +1,69 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Regression test for bug when sources listed in conditional.
+# Report from Richard Boulton. PR/326.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+CC=false; AC_SUBST([CC])
+OBJEXT=oo; AC_SUBST([OBJEXT])
+AM_CONDITIONAL([ONE], [true])
+AM_CONDITIONAL([TWO], [false])
+AM_CONDITIONAL([THREE], [false])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = targ
+
+if ONE
+SONE = one.c
+endif
+
+if TWO
+STWO =
+else
+STWO = two.c
+endif
+
+if THREE
+STHREE =
+else
+STHREE = three.c
+endif
+
+if THREE
+STHREE2 =
+else
+STHREE2 = three2.c
+endif
+
+targ_SOURCES = $(SONE) $(STWO) $(STHREE) $(STHREE2)
+
+.PHONY: test
+test:
+ is $(targ_OBJECTS) == one.oo two.oo three.oo three2.oo
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --ignore-deps
+./configure
+$MAKE test
+
+:
diff --git a/t/cond23.sh b/t/cond23.sh
new file mode 100644
index 000000000..56518b3e0
--- /dev/null
+++ b/t/cond23.sh
@@ -0,0 +1,37 @@
+#!/bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that conditional redefinitions of AC_SUBST'ed variables are detected.
+# Report from Patrik Weiskircher.
+
+. test-init.sh
+
+cat >>configure.ac <<EOF
+AM_CONDITIONAL([COND], [true])
+AC_OUTPUT
+EOF
+
+cat >Makefile.am <<EOF
+if COND
+libdir = mumble
+endif
+EOF
+
+$ACLOCAL
+AUTOMAKE_fails
+grep '^Makefile\.am:2:.* libdir was already defined' stderr
+
+:
diff --git a/t/cond24.sh b/t/cond24.sh
new file mode 100644
index 000000000..3cfda5a83
--- /dev/null
+++ b/t/cond24.sh
@@ -0,0 +1,39 @@
+#!/bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that conditional redefinitions of AC_SUBST'ed variables are detected.
+# Report from Patrik Weiskircher.
+
+. test-init.sh
+
+cat >>configure.ac <<EOF
+AC_SUBST([foo], [bar])
+AM_CONDITIONAL([COND], [true])
+EOF
+
+cat >Makefile.am <<EOF
+if COND
+## A dummy comment to change line numer.
+foo = baz
+endif
+EOF
+
+$ACLOCAL
+AUTOMAKE_fails
+grep '^Makefile\.am:3:.* foo was already defined' stderr
+grep '^configure\.ac:4:.*foo.* previously defined here' stderr
+
+:
diff --git a/t/cond25.sh b/t/cond25.sh
new file mode 100644
index 000000000..e93c0ef60
--- /dev/null
+++ b/t/cond25.sh
@@ -0,0 +1,39 @@
+#!/bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that conditional primaries can use non-conditional directories.
+# From Pavel Roskin.
+
+. test-init.sh
+
+cat >>configure.ac << 'EOF'
+AM_CONDITIONAL([USE_FOO], [true])
+AC_PROG_CC
+EOF
+
+cat >Makefile.am << 'EOF'
+if USE_FOO
+foo_PROGRAMS = foo
+endif
+
+foodir = $(libdir)/foo
+foo_SOURCES = foo.c
+EOF
+
+$ACLOCAL
+$AUTOMAKE
+
+:
diff --git a/t/cond26.sh b/t/cond26.sh
new file mode 100644
index 000000000..535a021ca
--- /dev/null
+++ b/t/cond26.sh
@@ -0,0 +1,38 @@
+#!/bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that non-conditional primaries can use conditional directories.
+# Reported by Juergen Keil.
+
+. test-init.sh
+
+cat >>configure.ac << 'EOF'
+AM_CONDITIONAL([USE_FOO], [true])
+EOF
+
+cat >Makefile.am << 'EOF'
+if USE_FOO
+mydir = /foo
+else
+mydir = /bar
+endif
+my_DATA = foo
+EOF
+
+$ACLOCAL
+$AUTOMAKE
+
+:
diff --git a/t/cond27.sh b/t/cond27.sh
new file mode 100644
index 000000000..a47f5de58
--- /dev/null
+++ b/t/cond27.sh
@@ -0,0 +1,38 @@
+#!/bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that non-conditional primaries cannot use directories defined
+# in some conditions (but not others).
+
+. test-init.sh
+
+cat >>configure.ac << 'EOF'
+AM_CONDITIONAL([USE_FOO], [true])
+EOF
+
+cat >Makefile.am << 'EOF'
+if USE_FOO
+mydir = /foo
+endif
+my_DATA = foo
+EOF
+
+$ACLOCAL
+AUTOMAKE_fails
+grep ' USE_FOO' stderr && exit 1
+grep '!USE_FOO' stderr
+
+:
diff --git a/t/cond28.sh b/t/cond28.sh
new file mode 100644
index 000000000..6238ab767
--- /dev/null
+++ b/t/cond28.sh
@@ -0,0 +1,38 @@
+#!/bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that conditional primaries can use directories defined
+# in the same conditions (but not others).
+
+. test-init.sh
+
+cat >>configure.ac << 'EOF'
+AM_CONDITIONAL([USE_FOO], [true])
+EOF
+
+cat >Makefile.am << 'EOF'
+if USE_FOO
+mydir = /foo
+endif
+if USE_FOO
+my_DATA = foo
+endif
+EOF
+
+$ACLOCAL
+$AUTOMAKE
+
+:
diff --git a/t/cond3.sh b/t/cond3.sh
new file mode 100644
index 000000000..421fd15ef
--- /dev/null
+++ b/t/cond3.sh
@@ -0,0 +1,79 @@
+#! /bin/sh
+# Copyright (C) 1997-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test sources listed in conditional.
+# Report from Rob Savoye <rob@cygnus.com>, and Lars J. Aas.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_CONDITIONAL([ONE], [true])
+AM_CONDITIONAL([TWO], [false])
+AM_CONDITIONAL([THREE], [maybe])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = targ
+
+if ONE
+SONE = one.c
+else
+SONE =
+endif
+
+if TWO
+STWO = two.c
+else
+STWO =
+endif
+
+if THREE
+STHREE = three.c
+else
+STHREE =
+endif
+
+targ_SOURCES = $(SONE) $(STWO) $(STHREE)
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+# 'b top' so that
+sed -n '
+/[oO][bB][jJ][eE][cC][tT].* =/ {
+ : loop
+ /\\$/ {
+ p
+ n
+ b loop
+ }
+ p
+}' Makefile.in >produced
+
+cat >expected << 'EOF'
+@ONE_TRUE@am__objects_1 = one.$(OBJEXT)
+@TWO_TRUE@am__objects_2 = two.$(OBJEXT)
+@THREE_TRUE@am__objects_3 = three.$(OBJEXT)
+am_targ_OBJECTS = $(am__objects_1) $(am__objects_2) $(am__objects_3)
+targ_OBJECTS = $(am_targ_OBJECTS)
+EOF
+
+diff expected produced
+
+:
diff --git a/t/cond30.sh b/t/cond30.sh
new file mode 100644
index 000000000..3bfcd809e
--- /dev/null
+++ b/t/cond30.sh
@@ -0,0 +1,59 @@
+#!/bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# For PR/352: make sure we support bin_PROGRAMS being defined conditionally.
+
+. test-init.sh
+
+cat >>configure.ac <<'EOF'
+AM_CONDITIONAL([C1], [test -z "$two"])
+AM_CONDITIONAL([C2], [test -n "$two"])
+AC_OUTPUT
+EOF
+
+cat > Makefile.am <<'EOF'
+AUTOMAKE_OPTIONS = no-dependencies
+CC = false
+EXEEXT = .foo
+
+if C1
+bin_PROGRAMS = a
+endif
+if C2
+bin_PROGRAMS = b $(undefined)
+endif
+
+.PHONY: test-a test-b
+test-a:
+ test a.foo = $(bin_PROGRAMS)
+test-b:
+ test b.foo = $(bin_PROGRAMS)
+EOF
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+$FGREP 'a_SOURCES = a.c' Makefile.in
+$FGREP 'b_SOURCES = b.c' Makefile.in
+
+./configure
+$MAKE test-a
+
+./configure two=yes
+$MAKE test-b
+
+:
diff --git a/t/cond31.sh b/t/cond31.sh
new file mode 100644
index 000000000..1f4ebbdea
--- /dev/null
+++ b/t/cond31.sh
@@ -0,0 +1,56 @@
+#!/bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure we define conditional _DEPENDENCIES correctly.
+
+. test-init.sh
+
+cat >>configure.ac <<'EOF'
+AC_SUBST([CC], [false])
+AC_SUBST([OBJEXT], [o])
+AM_CONDITIONAL([C1], [test -z "$two"])
+AM_CONDITIONAL([C2], [test -n "$two"])
+AC_OUTPUT
+EOF
+
+cat > Makefile.am <<'EOF'
+bin_PROGRAMS = a
+a_LDADD = c0.o -L/some/where
+if C1
+a_LDADD += c1.o -llibfoo.a
+endif
+if C2
+a_LDADD += c2.o -dlopen c3.la
+endif
+
+.PHONY: test1 test2
+test1:
+ is $(a_DEPENDENCIES) == c0.o c1.o
+test2:
+ is $(a_DEPENDENCIES) == c0.o c2.o c3.la
+EOF
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --ignore-deps
+
+./configure
+$MAKE test1
+
+./configure two=yes
+$MAKE test2
+
+:
diff --git a/t/cond32.sh b/t/cond32.sh
new file mode 100644
index 000000000..879dda9dd
--- /dev/null
+++ b/t/cond32.sh
@@ -0,0 +1,71 @@
+#!/bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure the user can override a conditional _DEPENDENCIES.
+
+. test-init.sh
+
+cat >>configure.ac <<'EOF'
+AM_CONDITIONAL([C1], [test -z "$two"])
+AM_CONDITIONAL([C2], [test -n "$two"])
+AM_CONDITIONAL([C3], [test -z "$three"])
+# We define CC in Makefile.am, but OBJEXT here.
+OBJEXT=o; AC_SUBST([OBJEXT])
+AC_SUBST([MYSUB], ["foo.$OBJEXT"])
+AC_OUTPUT
+EOF
+
+cat >>Makefile.am <<'EOF'
+AUTOMAKE_OPTIONS = no-dependencies
+CC = :
+
+bin_PROGRAMS = a
+
+if C1
+a_LDADD = $(MYSUB)
+a_DEPENDENCIES = $(MYSUB) nonsense.a
+# Note that 'nonsense.a' is there just to make sure Automake insn't
+# using some self computed a_DEPENDENCIES variable.
+endif
+
+if C2
+if C3
+BAR = bar.o
+else
+BAR = baz.o
+endif
+a_LDADD = $(BAR)
+endif
+
+test:
+ is $(exp) == $(a_DEPENDENCIES)
+.PHONY: test
+EOF
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+$MAKE test exp='foo.o nonsense.a'
+
+./configure two=yes three=
+$MAKE test exp='bar.o'
+
+./configure two=yes three=yes
+$MAKE test exp='baz.o'
+
+:
diff --git a/t/cond33.sh b/t/cond33.sh
new file mode 100644
index 000000000..b9e24dac1
--- /dev/null
+++ b/t/cond33.sh
@@ -0,0 +1,79 @@
+#!/bin/sh
+# Copyright (C) 2004-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that conditionally-defined install directories are handled
+# correctly.
+# Report from Ralf Corsepius.
+
+. test-init.sh
+
+cat >>configure.ac <<'EOF'
+AM_CONDITIONAL([INC], [test -z "$two"])
+AC_OUTPUT
+EOF
+
+cat > Makefile.am <<'EOF'
+if INC
+include_foodir = $(includedir)/foo
+include_foo_HEADERS = foo.h
+else
+bardir = $(bindir)
+dist_bar_SCRIPTS = x.sh
+endif
+
+foo.h x.sh:
+ :>$@
+
+.PHONY: distdircheck
+distdircheck: distdir
+ test -f $(distdir)/foo.h
+ test -f $(distdir)/x.sh
+EOF
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+cwd=$(pwd) || fatal_ "cannot get current directory"
+mkdir nowhere
+chmod a-w nowhere
+
+./configure --prefix="$cwd"/nowhere --bindir="$cwd"/bin \
+ --includedir="$cwd"/inc
+$MAKE installdirs
+test ! -e bin
+test -d inc/foo
+test ! -e inc/foo/foo.h
+rm -rf inc
+$MAKE install
+test ! -e bin
+test -f inc/foo/foo.h
+$MAKE distdircheck
+
+rm -rf inc
+
+./configure two=two --prefix="$cwd"/nowhere --bindir="$cwd"/bin \
+ --includedir="$cwd"/inc
+$MAKE install
+test ! -e inc
+test -f bin/x.sh
+rm -rf inc
+$MAKE installdirs
+test ! -e inc
+test -d bin
+$MAKE distdircheck
+
+:
diff --git a/t/cond34.sh b/t/cond34.sh
new file mode 100644
index 000000000..0682faf7b
--- /dev/null
+++ b/t/cond34.sh
@@ -0,0 +1,71 @@
+#!/bin/sh
+# Copyright (C) 2004-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check for _DEPENDENCIES definition with conditional _LDADD.
+# Report from Elena A. Vengerova.
+
+. test-init.sh
+
+cat >>configure.ac <<'EOF'
+AM_CONDITIONAL([TWO], [test -n "$two"])
+AC_OUTPUT
+EOF
+
+cat > Makefile.am <<'EOF'
+OBJEXT=z
+CC=false
+AUTOMAKE_OPTIONS=no-dependencies
+
+bin_PROGRAMS = test1 test2
+
+if TWO
+ test1_LDADD = two.$(OBJEXT)
+ test2_LDADD = two.$(OBJEXT)
+ test2_DEPENDENCIES = $(test2_LDADD) somethingelse.a
+else !TWO
+ test1_LDADD = one.$(OBJEXT)
+ test2_LDADD = three.$(OBJEXT)
+endif !TWO
+
+test1_DEPENDENCIES = $(test1_LDADD) somethingelse.a
+
+.PHONY: dep-test1 dep-test2
+dep-test1:
+ echo BEG: $(test1_DEPENDENCIES) :END
+dep-test2:
+ echo BEG: $(test2_DEPENDENCIES) :END
+EOF
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+
+run_make -O dep-test1
+$FGREP 'BEG: one.z somethingelse.a :END' stdout
+
+run_make -O dep-test2
+$FGREP 'BEG: three.z :END' stdout
+
+./configure two=2
+
+run_make -O dep-test1
+$FGREP 'BEG: two.z somethingelse.a :END' stdout
+
+run_make -O dep-test2
+$FGREP 'BEG: two.z somethingelse.a :END' stdout
+
+:
diff --git a/t/cond35.sh b/t/cond35.sh
new file mode 100644
index 000000000..bfac89ec5
--- /dev/null
+++ b/t/cond35.sh
@@ -0,0 +1,100 @@
+#!/bin/sh
+# Copyright (C) 2004-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check rules output for parser defined conditionally.
+# Report from Roman Fietze.
+
+required='cc lex yacc'
+. test-init.sh
+
+cat >>configure.ac <<'EOF'
+AM_CONDITIONAL([CASE_A], [test -z "$case_B"])
+AC_PROG_CC
+AM_PROG_LEX
+AC_PROG_YACC
+AC_OUTPUT
+EOF
+
+cat > Makefile.am <<'EOF'
+AM_YFLAGS = -d
+
+BUILT_SOURCES = tparse.h
+
+if CASE_A
+bin_PROGRAMS = ta
+ta_SOURCES = ta.c tparse.h tscan.l tparse.y
+ta_LDADD = $(LEXLIB)
+else
+bin_PROGRAMS = tb
+tb_SOURCES = tb.c tparse.h tscan.l tparse.y
+tb_LDADD = $(LEXLIB)
+endif
+
+
+test-ta:
+ test -f ta$(EXEEXT)
+test-tb:
+ test -f tb$(EXEEXT)
+EOF
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+$FGREP 'tparse.h' Makefile.in # For debugging.
+test $($FGREP -c 'tparse.h:' Makefile.in) -eq 1
+
+cat > tscan.l << 'END'
+%{
+#define YY_NO_UNISTD_H 1
+%}
+%%
+"END" return EOF;
+%%
+/* Avoid possible link errors. */
+int yywrap (void)
+{
+ return 1;
+}
+END
+
+cat > tparse.y << 'END'
+%{
+void yyerror (char *s) {}
+%}
+%token EOF
+%%
+foobar : 'f' 'o' 'o' 'b' 'a' 'r' EOF {};
+END
+
+cat > ta.c << 'END'
+int main (void)
+{
+ return 0;
+}
+END
+
+cp ta.c tb.c
+
+./configure
+$MAKE
+$MAKE test-ta
+
+./configure case_B=yes
+$MAKE
+$MAKE test-tb
+
+:
diff --git a/t/cond36.sh b/t/cond36.sh
new file mode 100644
index 000000000..09e39690d
--- /dev/null
+++ b/t/cond36.sh
@@ -0,0 +1,61 @@
+#!/bin/sh
+# Copyright (C) 2004-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check rules output for parser defined conditionally.
+
+. test-init.sh
+
+cat >>configure.ac <<'EOF'
+AM_CONDITIONAL([CASE_A], [test -z "$case_B"])
+AC_PROG_CC
+AM_PROG_LEX
+AC_PROG_YACC
+AC_OUTPUT
+EOF
+
+cat > Makefile.am <<'EOF'
+AM_YFLAGS = -d
+
+BUILT_SOURCES = tparse.h
+
+if CASE_A
+bin_PROGRAMS = ta
+ta_SOURCES = ta.c tparse.h tscan.l tparse.y
+ta_LDADD = $(LEXLIB)
+else
+bin_PROGRAMS = tb
+tb_SOURCES = tb.c tparse.h tscan.l tparse.y
+tb_LDADD = $(LEXLIB)
+tparse.h: tparce.c
+ echo whatever
+endif
+EOF
+
+$ACLOCAL
+
+# Presently Automake doesn't fully support partially overriden rules
+# and should complain.
+AUTOMAKE_fails --add-missing
+grep 'tparse\.h.*already defined' stderr
+$AUTOMAKE -Wno-error
+
+# Still and all, it should generate two rules.
+$FGREP 'tparse.h' Makefile.in # For debugging.
+test $($FGREP -c 'tparse.h:' Makefile.in) -eq 2
+$FGREP '@CASE_A_TRUE@tparse.h:' Makefile.in
+$FGREP '@CASE_A_FALSE@tparse.h:' Makefile.in
+
+:
diff --git a/t/cond37.sh b/t/cond37.sh
new file mode 100644
index 000000000..96587aa01
--- /dev/null
+++ b/t/cond37.sh
@@ -0,0 +1,53 @@
+#!/bin/sh
+# Copyright (C) 2004-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check conditional local rules.
+# Report from Simon Josefsson.
+
+. test-init.sh
+
+cat >>configure.ac <<'EOF'
+AM_CONDITIONAL([CASE_A], [test -n "$case_A"])
+AC_OUTPUT
+EOF
+
+cat > Makefile.am <<'EOF'
+if CASE_A
+check-local:
+ @echo GrepMe1
+else
+install-data-local:
+ @echo GrepMe2
+endif
+EOF
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+run_make -O check
+grep GrepMe1 stdout && exit 1
+run_make -O install
+grep GrepMe2 stdout
+
+./configure case_A=1
+run_make -O check
+grep GrepMe1 stdout
+run_make -O install
+grep GrepMe2 stdout && exit 1
+
+:
diff --git a/t/cond38.sh b/t/cond38.sh
new file mode 100644
index 000000000..2e212ff62
--- /dev/null
+++ b/t/cond38.sh
@@ -0,0 +1,67 @@
+#!/bin/sh
+# Copyright (C) 2005-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check conditional variable ordering.
+# Report from Ed Hartnett.
+
+. test-init.sh
+
+cat >>configure.ac <<'EOF'
+AM_CONDITIONAL([CASE_A], :)
+AM_CONDITIONAL([CASE_B], :)
+AC_OUTPUT
+EOF
+
+cat > Makefile.am <<'EOF'
+SUBDIRS = a
+if CASE_A
+SUBDIRS += b
+endif
+SUBDIRS += c
+if CASE_A
+SUBDIRS += d
+if CASE_B
+SUBDIRS += e
+endif
+SUBDIRS += f
+endif
+SUBDIRS += g
+if CASE_B
+SUBDIRS += h
+endif
+if CASE_B
+SUBDIRS += iXYZ
+SUBDIRS += jZYX
+endif
+
+.PHONY: test
+test:
+ is $(SUBDIRS) == a b c d e f g h iXYZ jZYX
+EOF
+
+mkdir a b c d e f g h iXYZ jZYX
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+# Make sure no extra variable was created for the last 3 items.
+grep 'append.*=.* h iXYZ jZYX' Makefile
+# Check good ordering.
+$MAKE test
+
+:
diff --git a/t/cond39.sh b/t/cond39.sh
new file mode 100644
index 000000000..57523bbc6
--- /dev/null
+++ b/t/cond39.sh
@@ -0,0 +1,105 @@
+#!/bin/sh
+# Copyright (C) 2008-2017 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 <https://www.gnu.org/licenses/>.
+
+# Build either as CONFIG_FILE or as PROGRAM.
+
+required=cc
+. test-init.sh
+
+mkdir sub
+
+cat >>configure.ac <<'END'
+AC_PROG_CC
+AM_CONDITIONAL([COND], [test "$COND" = true])
+AM_COND_IF([COND], [],
+ [AC_CONFIG_FILES([prog1], [chmod 755 prog1])
+ AC_CONFIG_FILES([sub/prog2], [chmod 755 sub/prog2])])
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+END
+
+cat >Makefile.am <<'END'
+SUBDIRS = sub
+if COND
+bin_PROGRAMS = prog1
+prog1_SOURCES = prog.c
+else
+bin_SCRIPTS = prog1
+CLEANFILES = prog1
+endif
+
+sure-exist:
+ test -f prog1 || test -f prog1$(EXEEXT)
+ test -f sub/prog2 || test -f sub/prog2$(EXEEXT)
+
+sure-not-exist:
+ test ! -f prog1 && test ! -f prog1$(EXEEXT)
+ test ! -f sub/prog2 && test ! -f sub/prog2$(EXEEXT)
+END
+
+cat >sub/Makefile.am <<'END'
+if COND
+bin_PROGRAMS = prog2
+prog2_SOURCES = prog.c
+else
+bin_SCRIPTS = prog2
+CLEANFILES = prog2
+endif
+END
+
+cat >prog.c <<'END'
+int main () { return 42; }
+END
+
+cat >prog1.in <<'END'
+#! /bin/sh
+bindir='@bindir@'
+echo "hi, this is $0, and bindir is $bindir"
+END
+
+cp prog.c sub
+cp prog1.in sub/prog2.in
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+./configure COND=true
+run_make -E
+grep 'overriding commands' stderr && exit 1
+$MAKE sure-exist
+./prog1 && exit 1
+./sub/prog2 && exit 1
+$MAKE clean
+$MAKE sure-not-exist
+$MAKE
+$MAKE sure-exist
+./prog1 && exit 1
+./sub/prog2 && exit 1
+$MAKE distclean
+
+./configure COND=false
+run_make -E
+grep 'overriding commands' stderr && exit 1
+./prog1
+./sub/prog2
+$MAKE clean
+$MAKE sure-not-exist
+$MAKE
+./prog1
+./sub/prog2
+
+:
diff --git a/t/cond4.sh b/t/cond4.sh
new file mode 100644
index 000000000..b37377249
--- /dev/null
+++ b/t/cond4.sh
@@ -0,0 +1,65 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Another sources-in-conditional test. Report from Tim Goodwin.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_SUBST([CC], [false])
+AC_SUBST([OBJEXT], [o])
+AM_CONDITIONAL([ONE], [test "x$CONDITION1" = "xtrue"])
+AM_CONDITIONAL([TWO], [test "x$CONDITION2" = "xtrue"])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = targ
+
+if ONE
+OPT1 = one.c
+endif
+
+if TWO
+OPT2 = two.c
+endif
+
+targ_SOURCES = main.c $(OPT1) $(OPT2)
+
+.PHONY: test
+test:
+ is $(exp) == $(targ_OBJECTS)
+END
+
+$ACLOCAL
+$AUTOMAKE -i
+
+# We should not output useless definitions.
+grep '^@ONE_FALSE@' Makefile.in && exit 1
+grep '^@TWO_FALSE@' Makefile.in && exit 1
+
+$AUTOCONF
+
+CONDITION1=true CONDITION2=true ./configure
+$MAKE test exp='main.o one.o two.o'
+CONDITION1=true CONDITION2=false ./configure
+$MAKE test exp='main.o one.o'
+CONDITION1=false CONDITION2=true ./configure
+$MAKE test exp='main.o two.o'
+CONDITION1=false CONDITION2=false ./configure
+$MAKE test exp='main.o'
+
+:
diff --git a/t/cond40.sh b/t/cond40.sh
new file mode 100644
index 000000000..dd737c513
--- /dev/null
+++ b/t/cond40.sh
@@ -0,0 +1,83 @@
+#! /bin/sh
+# Copyright (C) 2008-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test AM_COND_IF.
+
+. test-init.sh
+
+cat >>configure.ac <<'END'
+AC_DEFUN([FOO],
+ [AC_CONFIG_FILES([$1])])
+
+AM_CONDITIONAL([COND], [test "$cond" = yes])
+# Next lines should not cause a shell syntax error.
+AM_COND_IF([COND])
+AM_COND_IF([COND],
+ [AC_SUBST([BAR])])
+AM_COND_IF([COND],
+ [AC_CONFIG_FILES([file1])])
+
+# Things should work even at a time when the shell expressions
+# for the conditional are not valid any more.
+ok=$cond1
+AM_CONDITIONAL([COND1], [test "$ok" = yes])
+ok=$cond2
+AM_CONDITIONAL([COND2], [test "$ok" = yes])
+ok=$cond3
+AM_CONDITIONAL([COND3], [test "$ok" = yes])
+
+AM_COND_IF([COND1],
+ [AM_COND_IF([COND2], [FOO([file2])],
+ [AM_COND_IF([COND3],
+ [FOO([file3])])])])
+
+AC_OUTPUT
+END
+
+: >Makefile.am
+: >file1.in
+: >file2.in
+: >file3.in
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure cond=yes cond1=yes cond2=no cond3=yes
+test -f file1
+test ! -e file2
+test -f file3
+rm -f file1 file3
+$MAKE file1 file3
+$MAKE file2 && exit 1
+test -f file1
+test ! -e file2
+test -f file3
+$MAKE distclean
+
+./configure cond=no cond1=yes cond2=yes
+test ! -e file1
+test -f file2
+test ! -e file3
+rm -f file2
+$MAKE file1 && exit 1
+$MAKE file2
+$MAKE file3 && exit 1
+test ! -e file1
+test -f file2
+test ! -e file3
+
+:
diff --git a/t/cond41.sh b/t/cond41.sh
new file mode 100644
index 000000000..00a605eb1
--- /dev/null
+++ b/t/cond41.sh
@@ -0,0 +1,30 @@
+#!/bin/sh
+# Copyright (C) 2008-2017 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 <https://www.gnu.org/licenses/>.
+
+# AM_COND_IF with an undefined condition should fail.
+
+. test-init.sh
+
+cat >>configure.ac <<'END'
+AM_COND_IF([BAD_COND], [AC_CONFIG_FILES([file1])])
+AC_OUTPUT
+END
+
+$ACLOCAL 2>stderr && { cat stderr >&2; exit 1; }
+cat stderr >&2
+grep '^configure\.ac:4:.*AM_COND_IF.* no such condition.*BAD_COND' stderr
+
+:
diff --git a/t/cond42.sh b/t/cond42.sh
new file mode 100644
index 000000000..0ac8e57f3
--- /dev/null
+++ b/t/cond42.sh
@@ -0,0 +1,60 @@
+#!/bin/sh
+nfig
+# Copyright (C) 2008-2017 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 <https://www.gnu.org/licenses/>.
+
+# Ensure an error with inconsistent state of conditionals in configure.ac.
+# This shouldn't happen with user input, as _AM_COND_* are not documented,
+# but better to be safe.
+
+. test-init.sh
+
+cat >>configure.ac <<'END'
+AM_CONDITIONAL([COND], [:])
+# The next line is needed so that cond-if.m4 is pulled in.
+AM_COND_IF([COND])
+_AM_COND_IF([COND])
+AC_OUTPUT
+END
+
+edit_configure_ac ()
+{
+ sed "$@" < configure.ac >configure.tmp
+ mv -f configure.tmp configure.ac
+ rm -rf autom4te*.cache
+}
+
+: >Makefile.am
+
+$ACLOCAL
+AUTOMAKE_fails
+grep '^configure\.ac:8:.* condition stack' stderr
+
+edit_configure_ac 's/_AM_COND_IF/_AM_COND_ELSE/'
+AUTOMAKE_fails
+grep '^configure\.ac:7:.* else without if' stderr
+
+edit_configure_ac 's/_AM_COND_ELSE/_AM_COND_ENDIF/'
+AUTOMAKE_fails
+grep '^configure\.ac:7:.* endif without if' stderr
+
+edit_configure_ac 's/\(_AM_COND_ENDIF\).*/_AM_COND_IF\
+_AM_COND_ENDIF/'
+AUTOMAKE_fails
+grep '^configure\.ac:7:.* not enough arguments.* _AM_COND_IF' stderr
+grep '^configure\.ac:8:.* not enough arguments.* _AM_COND_ENDIF' stderr
+test 2 -eq $($FGREP -c 'not enough arguments' stderr)
+
+:
diff --git a/t/cond43.sh b/t/cond43.sh
new file mode 100644
index 000000000..0eb188d90
--- /dev/null
+++ b/t/cond43.sh
@@ -0,0 +1,44 @@
+#!/bin/sh
+# Copyright (C) 2008-2017 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 <https://www.gnu.org/licenses/>.
+
+# Ensure an error with underquoted usage of AM_COND_IF in configure.ac.
+
+. test-init.sh
+
+cat >>configure.ac <<'END'
+AM_CONDITIONAL([COND1], [:])
+AM_CONDITIONAL([COND2], [:])
+AM_COND_IF([COND1],
+ AM_COND_IF([COND2], [:])
+)
+AC_OUTPUT
+END
+
+: >Makefile.am
+
+$ACLOCAL
+AUTOMAKE_fails
+$EGREP '^configure\.ac:7:.* missing m4 quoting.*macro depth 2( |$)' stderr
+
+sed '/.AM_COND_IF/{
+ s/^/[/
+ s/$/]/
+ }' < configure.ac > configure.tmp
+mv -f configure.tmp configure.ac
+rm -rf autom4te*.cache
+$AUTOMAKE
+
+:
diff --git a/t/cond44.sh b/t/cond44.sh
new file mode 100644
index 000000000..2cea626dd
--- /dev/null
+++ b/t/cond44.sh
@@ -0,0 +1,38 @@
+#!/bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that redefinitions of AC_SUBST'ed AM_SUBST_NOTMAKE'd variables
+# are not diagnosed. See 'cond23.sh'.
+
+. test-init.sh
+
+cat >>configure.ac <<EOF
+AM_CONDITIONAL([COND], [true])
+AM_SUBST_NOTMAKE([libdir])
+AC_OUTPUT
+EOF
+
+cat >Makefile.am <<EOF
+if COND
+libdir = mumble
+endif
+EOF
+
+$ACLOCAL
+AUTOMAKE_run
+grep 'libdir was already defined' stderr && exit 1
+grep '^libdir = ' Makefile.in && exit 1
+exit 0
diff --git a/t/cond45.sh b/t/cond45.sh
new file mode 100644
index 000000000..e51d346a1
--- /dev/null
+++ b/t/cond45.sh
@@ -0,0 +1,39 @@
+#!/bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that redefinitions of AC_SUBST'ed AM_SUBST_NOTMAKE'd variables
+# are not diagnosed. See 'cond24.sh'.
+
+. test-init.sh
+
+cat >>configure.ac <<EOF
+AC_SUBST([foo], [bar])
+AM_SUBST_NOTMAKE([foo])
+AM_CONDITIONAL([COND], [true])
+AC_OUTPUT
+EOF
+
+cat >Makefile.am <<EOF
+if COND
+foo = baz
+endif
+EOF
+
+$ACLOCAL
+AUTOMAKE_run
+grep 'foo was already defined' stderr && exit 1
+grep '^foo =' Makefile.in && exit 1
+exit 0
diff --git a/t/cond46.sh b/t/cond46.sh
new file mode 100644
index 000000000..de54c969e
--- /dev/null
+++ b/t/cond46.sh
@@ -0,0 +1,112 @@
+#! /bin/sh
+# Copyright (C) 2009-2017 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 3 of the License, 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 <https://www.gnu.org/licenses/>.
+
+# Ensure the right condition is listed after 'else' and 'endif'.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_CONDITIONAL([USE_A], [test x = y])
+AM_CONDITIONAL([USE_B], [test x = z])
+AC_OUTPUT
+END
+
+notcompat="incompatible with current conditional"
+
+$ACLOCAL
+
+cat > Makefile.am << 'END'
+if USE_A
+endif !USE_A
+END
+
+AUTOMAKE_fails
+grep "^Makefile\\.am:2:.*endif.*!USE_A.*$notcompat.*[^!]USE_A" stderr
+
+cat > Makefile.am << 'END'
+if USE_A
+endif USE_B
+END
+
+AUTOMAKE_fails
+grep "^Makefile\\.am:2:.*endif.*[^!]USE_B.*$notcompat.*[^!]USE_A" stderr
+
+cat > Makefile.am << 'END'
+if USE_A
+else
+endif USE_A
+END
+
+AUTOMAKE_fails
+grep "^Makefile\\.am:3:.*endif.*[^!]USE_A.*$notcompat.*USE_A" stderr
+
+cat > Makefile.am << 'END'
+if USE_A
+else
+endif !USE_A
+END
+
+$AUTOMAKE
+
+cat > Makefile.am << 'END'
+if USE_A
+if USE_B
+else
+endif !USE_A
+endif
+END
+
+AUTOMAKE_fails
+grep "^Makefile\\.am:4:.*endif.*!USE_A.*$notcompat.*USE_B" stderr
+
+cat > Makefile.am << 'END'
+if USE_A
+else USE_A
+endif
+END
+
+AUTOMAKE_fails
+grep "^Makefile\\.am:2:.*else.*[^!]USE_A.*$notcompat.*[^!]USE_A" stderr
+
+cat > Makefile.am << 'END'
+if USE_A
+else !USE_A
+endif
+END
+
+$AUTOMAKE
+
+cat > Makefile.am << 'END'
+if USE_A
+else USE_B
+endif
+END
+
+AUTOMAKE_fails
+grep "^Makefile\\.am:2:.*else.*[^!]USE_B.*$notcompat.*[^!]USE_A" stderr
+
+cat > Makefile.am << 'END'
+if USE_A
+if USE_B
+else USE_A
+endif
+endif
+END
+
+AUTOMAKE_fails
+grep "^Makefile\\.am:3:.*else.*[^!]USE_A.*$notcompat.*[^!]USE_B" stderr
+
+:
diff --git a/t/cond5.sh b/t/cond5.sh
new file mode 100644
index 000000000..73cd39ebf
--- /dev/null
+++ b/t/cond5.sh
@@ -0,0 +1,69 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Yet another sources-in-conditional test. Report from Tim Goodwin.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_CONDITIONAL([ONE], [true])
+AM_CONDITIONAL([TWO], [false])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = targ
+
+if ONE
+OPT_SRC = one.c
+endif
+
+if TWO
+OPT_SRC = $(OPT_SRC) two.c
+endif
+
+targ_SOURCES = main.c $(OPT_SRC)
+END
+
+# The bug is that automake hangs. So we give it an appropriate grace
+# time, then kill it if necessary.
+$ACLOCAL
+$AUTOMAKE 2>stderr &
+pid=$!
+
+# MSYS bash seems to have a bug in kill, so don't try to kill too soon.
+# The extra quoting avoids a maintainer-check failure.
+sleep '2'
+
+# Make at most 30 tries, one every 10 seconds (= 300 seconds = 5 min).
+try=1
+while test $try -le 30; do
+ if kill -0 $pid; then
+ : process $pid is still alive, wait and retry
+ sleep '10'
+ try=$(($try + 1))
+ else
+ cat stderr >&2
+ # Automake must fail with a proper error message.
+ grep 'variable.*OPT_SRC.*recursively defined' stderr
+ exit 0
+ fi
+done
+# The automake process probably hung. Kill it, and exit with failure.
+echo "$me: Automake process $pid hung"
+kill $pid
+exit 1
diff --git a/t/cond6.sh b/t/cond6.sh
new file mode 100644
index 000000000..834aa32fd
--- /dev/null
+++ b/t/cond6.sh
@@ -0,0 +1,69 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for an odd conditional bug. Report from Matt Leach.
+
+. test-init.sh
+
+echo 'AM_CONDITIONAL([FOO], [true])' >> configure.ac
+
+cat > Makefile.am << 'END'
+if FOO
+
+helpdir = $(prefix)/Help
+# The continuation line below must start with a Tab to see the bug.
+help_DATA = a b c d e \
+ f g h
+
+else
+
+helpdir = $(prefix)/help
+help_DATA = foo
+
+endif
+
+a b c d e f g h:
+ touch $@
+
+.PHONY: test
+test:
+ is $(help_DATA) == a b c d e f g h
+END
+
+
+# Older versions of this test checked that automake could process the above
+# Makefile.am even with no AC_OUTPUT in configure. So continue to do this
+# check, for completeness.
+$ACLOCAL
+$AUTOMAKE
+
+rm -rf autom4te*.cache
+
+echo AC_OUTPUT >> configure.ac
+touch aclocal.m4 # Avoid unnecessary firing the remake rules.
+$AUTOCONF
+$AUTOMAKE Makefile
+
+./configure --prefix="$(pwd)/_inst"
+
+$MAKE test
+
+$MAKE install
+for x in a b c d e f g h; do
+ test -f _inst/Help/$x
+done
+
+:
diff --git a/t/cond7.sh b/t/cond7.sh
new file mode 100644
index 000000000..4accccd68
--- /dev/null
+++ b/t/cond7.sh
@@ -0,0 +1,39 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for an odd conditional bug. Report from Pavel Roskin.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+compat=yes
+AM_CONDITIONAL([Compatible], [test x$compat = xyes])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+if Compatible
+abdir = none
+ab_HEADERS = \
+ minus.h
+endif
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '^[^#].*002' Makefile.in && exit 1
+exit 0
diff --git a/t/cond8.sh b/t/cond8.sh
new file mode 100644
index 000000000..76353f785
--- /dev/null
+++ b/t/cond8.sh
@@ -0,0 +1,77 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure _PROGRAMS conditionals can be written in a useful
+# way.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_CONDITIONAL([X], [test "$x" = yes])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+if X
+bin_PROGRAMS = x y
+else
+noinst_PROGRAMS = x y
+endif
+
+.PHONY: get-built get-install not-install
+get-built:
+ test -f x.$(OBJEXT)
+ test -f y.$(OBJEXT)
+ test -f x$(EXEEXT)
+ test -f y$(EXEEXT)
+get-installed:
+ test -f $(bindir)/x$(EXEEXT)
+ test -f $(bindir)/y$(EXEEXT)
+not-installed:
+ if find $(prefix) -type f | grep .; then exit 1; else :; fi
+END
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+cat > x.c <<'END'
+int main (void)
+{
+ return 0;
+}
+END
+
+cp x.c y.c
+
+instdir=$(pwd)/_inst || fatal_ "cannot get current directory"
+
+# Skip the rest of the test in case of e.g. missing C compiler.
+./configure --prefix="$instdir" x=yes || exit $?
+$MAKE install
+$MAKE get-built
+$MAKE get-installed
+
+$MAKE distclean
+rm -rf _inst
+
+./configure --prefix="$instdir" x=no
+$MAKE install
+$MAKE get-built
+$MAKE not-installed
+
+:
diff --git a/t/cond9.sh b/t/cond9.sh
new file mode 100644
index 000000000..1c5fa2a5c
--- /dev/null
+++ b/t/cond9.sh
@@ -0,0 +1,44 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for bug in conditionals. From Raja R Harinath.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_CONDITIONAL([WRONG], [test x = y])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+if WRONG
+this=
+else
+this=is_something_interesting
+endif
+
+.PHONY: test-this
+test-this:
+ test '$(this)' = is_something_interesting
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+./configure
+$MAKE test-this
+
+:
diff --git a/t/condd.sh b/t/condd.sh
new file mode 100644
index 000000000..64e874632
--- /dev/null
+++ b/t/condd.sh
@@ -0,0 +1,73 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for bug in conditionals.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+dnl Define a macro with the same name as the conditional to exhibit
+dnl any underquoted bug.
+AC_DEFUN([COND1], ["some'meaningless;characters`])
+AM_CONDITIONAL([COND1], [false])
+AC_CONFIG_FILES([foo/Makefile])
+AC_CONFIG_FILES([bar/Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = no-dependencies
+CC = false
+
+SUBDIRS = foo
+if COND1
+SUBDIRS += bar
+endif
+
+# Small example from the manual.
+bin_PROGRAMS = hello
+hello_SOURCES = hello-common.c
+if COND1
+hello_SOURCES += hello-cond1.c
+else
+hello_SOURCES += hello-generic.c
+endif
+
+.PHONY: test
+test: distdir
+ test -f $(distdir)/foo/Makefile.am
+ test -f $(distdir)/bar/Makefile.am
+ test -f $(distdir)/hello-common.c
+ test -f $(distdir)/hello-cond1.c
+ test -f $(distdir)/hello-generic.c
+END
+
+mkdir foo bar
+
+: > foo/Makefile.am
+: > bar/Makefile.am
+: > hello-common.c
+: > hello-cond1.c
+: > hello-generic.c
+
+$ACLOCAL
+$AUTOCONF
+grep "meaningless;characters" configure && exit 1
+$AUTOMAKE
+./configure
+$MAKE test
+
+:
diff --git a/t/condhook.sh b/t/condhook.sh
new file mode 100644
index 000000000..2e817c8eb
--- /dev/null
+++ b/t/condhook.sh
@@ -0,0 +1,48 @@
+#!/bin/sh
+# Copyright (C) 2004-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test install when a conditional install-*-hook is not defined.
+# Keep this in sync with sister test 'condhook2.sh'.
+# Report by Nik A. Melchior (PR/428).
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_CONDITIONAL([TEST], [false])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+sysconf_DATA = mumble
+if TEST
+install-data-hook:
+ : > $(top_srcdir)/bad
+endif
+END
+
+: > mumble
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure --prefix "$(pwd)/inst"
+
+$MAKE install
+test -f inst/etc/mumble
+test ! -e bad
+
+:
diff --git a/t/condhook2.sh b/t/condhook2.sh
new file mode 100644
index 000000000..4901897c4
--- /dev/null
+++ b/t/condhook2.sh
@@ -0,0 +1,47 @@
+#!/bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test install when a conditional install-*-hook is defined.
+# Keep this in sync with sister test 'condhook.sh'.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_CONDITIONAL([TEST], [true])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+sysconf_DATA = mumble
+if TEST
+install-data-hook:
+ : > $(top_srcdir)/good
+endif
+END
+
+: > mumble
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure --prefix "$(pwd)/inst"
+
+$MAKE install
+test -f inst/etc/mumble
+test -f good
+
+:
diff --git a/t/condinc.sh b/t/condinc.sh
new file mode 100644
index 000000000..ba2d8636e
--- /dev/null
+++ b/t/condinc.sh
@@ -0,0 +1,42 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure a conditional include statement is handled properly.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_CONDITIONAL([TOBE], [false])
+END
+
+cat > Makefile.am << 'END'
+if TOBE
+include adjunct
+endif
+END
+
+cat > adjunct << 'END'
+target: dependency
+ rule
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '^target:' Makefile.in && exit 1
+grep '^@TOBE_TRUE@target:' Makefile.in
+
+:
diff --git a/t/condinc2.sh b/t/condinc2.sh
new file mode 100644
index 000000000..5983d262d
--- /dev/null
+++ b/t/condinc2.sh
@@ -0,0 +1,59 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Another test of conditional include statements.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_CONDITIONAL([TOBE], [false])
+END
+
+cat > Makefile.am << 'END'
+if TOBE
+include adjunct
+endif
+END
+
+cat > adjunct << 'END'
+target: dependency
+ rule
+endif
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+grep 'adjunct:3: error: too many conditionals closed' stderr
+
+cat > adjunct << 'END'
+if TOBE
+target: dependency
+ rule
+END
+
+AUTOMAKE_fails
+grep 'unterminated conditionals' stderr
+
+cat > adjunct << 'END'
+if TOBE
+target: dependency
+ rule
+endif
+END
+
+$AUTOMAKE
+
+:
diff --git a/t/condlib.sh b/t/condlib.sh
new file mode 100644
index 000000000..1a6966757
--- /dev/null
+++ b/t/condlib.sh
@@ -0,0 +1,44 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for bug with conditional library.
+# From Harlan Stenn.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_RANLIB
+AM_MAINTAINER_MODE
+AM_PROG_AR
+AC_PROG_CC
+END
+
+cat > Makefile.am << 'END'
+noinst_LIBRARIES = @LIBRSAREF@
+EXTRA_LIBRARIES = librsaref.a
+
+nodist_librsaref_a_SOURCES = desc.c digit.c
+
+BUILT_SOURCES = $(nodist_librsaref_a_SOURCES)
+END
+
+: > ar-lib
+
+$ACLOCAL
+$AUTOMAKE
+
+$FGREP librsaref.a.c Makefile.in && exit 1
+exit 0
diff --git a/t/condman2.sh b/t/condman2.sh
new file mode 100644
index 000000000..7229b588d
--- /dev/null
+++ b/t/condman2.sh
@@ -0,0 +1,33 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure appropriate man install targets generated in all cases.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+man_MANS = foo.1 foo.2
+man5_MANS = foo.5
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '^install-man1:' Makefile.in
+grep '^install-man2:' Makefile.in
+grep '^install-man5:' Makefile.in
+
+:
diff --git a/t/condman3.sh b/t/condman3.sh
new file mode 100644
index 000000000..59d33266e
--- /dev/null
+++ b/t/condman3.sh
@@ -0,0 +1,74 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure conditionals work with man pages.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_CONDITIONAL([COND], [test x"$FOO" = x"true"])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+if COND
+man_MANS = foo.1
+man4_MANS = 6.man
+else
+man_MANS = bar.2 baz.1
+man5_MANS = zap.5
+endif
+
+.PHONY: test1 test2
+test1:
+ find $(mandir) ;: For debugging.
+ test -f $(mandir)/man1/foo.1
+ test -f $(mandir)/man4/6.4
+ test ! -f $(mandir)/man2/bar.2
+ test ! -f $(mandir)/man1/baz.1
+ test ! -f $(mandir)/man5/zap.5
+test2:
+ find $(mandir) ;: For debugging.
+ test -f $(mandir)/man2/bar.2
+ test -f $(mandir)/man1/baz.1
+ test -f $(mandir)/man5/zap.5
+ test ! -f $(mandir)/man1/foo.1
+ test ! -f $(mandir)/man4/6.4
+ test ! -f $(mandir)/man4/6.man
+END
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+$EGREP 'MANS|\.([123456789]|man)' Makefile.in # For debugging.
+
+mkdir build
+cd build
+../configure FOO=true --prefix="$(pwd)/_inst"
+$EGREP 'MANS|\.([123456789]|man)' Makefile # For debugging.
+touch foo.1 6.man
+$MAKE install
+$MAKE test1
+
+cd ..
+./configure FOO=false --prefix="$(pwd)/_inst"
+$EGREP 'MANS|\.([123456789]|man)' Makefile # For debugging.
+touch bar.2 baz.1 zap.5
+$MAKE install
+$MAKE test2
+
+:
diff --git a/t/confdeps.sh b/t/confdeps.sh
new file mode 100644
index 000000000..dde90b41e
--- /dev/null
+++ b/t/confdeps.sh
@@ -0,0 +1,37 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that config* files are properly regenerated.
+
+. test-init.sh
+
+echo "FOO = foo" > Makefile.am
+
+$ACLOCAL
+
+echo "$me: Generated by aclocal ..."
+$AUTOMAKE
+grep '^\$(ACLOCAL_M4):' Makefile.in
+
+echo "$me: Not generated by aclocal ..."
+# Pretend it is not from aclocal (remove the signature),
+# but keep it correct, i.e., with AM_INIT_AUTOMAKE etc.
+sed -n '3,$p' aclocal.m4 >aclocal.m4t
+mv -f aclocal.m4t aclocal.m4
+$AUTOMAKE
+grep '^\$(ACLOCAL_M4):' Makefile.in && exit 1
+
+:
diff --git a/t/conff.sh b/t/conff.sh
new file mode 100644
index 000000000..3512a9025
--- /dev/null
+++ b/t/conff.sh
@@ -0,0 +1,88 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure rebuild rules work even when AC_CONFIG_FILES uses colons.
+# Report from Alexander Turbov.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_FILES([bar/Makefile:bar/Makefile.in:Makefile.bot])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+SUBDIRS = bar
+EXTRA_DIST = Makefile.bot
+END
+
+mkdir bar
+cat > bar/Makefile.am << 'END'
+top-rule:
+ @echo 'top rule'
+END
+
+cat > Makefile.bot << 'END'
+bot-rule:
+ @echo 'bot rule'
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+$MAKE
+
+cd bar
+run_make -O top-rule
+grep 'top rule' stdout
+run_make -O bot-rule
+grep 'bot rule' stdout
+cd ..
+
+$sleep
+
+cat > bar/Makefile.am << 'END'
+top-rule:
+ @echo 'top2 rule'
+END
+$MAKE
+
+cd bar
+run_make -O top-rule
+grep 'top2 rule' stdout
+run_make -O bot-rule
+grep 'bot rule' stdout
+cd ..
+
+$sleep
+
+cat > Makefile.bot << 'END'
+bot-rule:
+ @echo 'bot2 rule'
+END
+$MAKE
+
+cd bar
+run_make -O top-rule
+grep 'top2 rule' stdout
+run_make -O bot-rule
+grep 'bot2 rule' stdout
+cd ..
+
+$MAKE distcheck
+
+:
diff --git a/t/conff2.sh b/t/conff2.sh
new file mode 100644
index 000000000..6aff1eb38
--- /dev/null
+++ b/t/conff2.sh
@@ -0,0 +1,36 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure empty calls to AC_CONFIG_FILES or AC_CONFIG_HEADERS are diagnosed.
+
+. test-init.sh
+
+# We avoid using configure.ac stub initialized by our testsuite setup, as
+# we need to keep track of line numbers (to grep for error messages).
+cat > configure.ac << END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES ([oops])
+AC_CONFIG_HEADERS
+AC_OUTPUT
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+grep 'configure\.ac:3:.* arguments .*AC_CONFIG_FILES' stderr
+grep 'configure\.ac:4:.* arguments .*AC_CONFIG_HEADERS' stderr
+
+:
diff --git a/t/conffile-leading-dot.sh b/t/conffile-leading-dot.sh
new file mode 100644
index 000000000..e6eadbe01
--- /dev/null
+++ b/t/conffile-leading-dot.sh
@@ -0,0 +1,60 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Automake must complain if AC_CONFIG_FILES is passed something starting
+# with a dot (like "./Makefile"), since the remake rules might be subtly
+# broken in that case.
+
+required=GNUmake
+. test-init.sh
+
+cat > configure.ac << END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([./Makefile])
+AC_CONFIG_FILES([./foo:a.in:b.in:c.in])
+AC_OUTPUT
+END
+
+touch a.in b.in c.in Makefile.am
+
+$ACLOCAL
+
+AUTOMAKE_fails -Wnone -Wunsupported
+grep "^configure\.ac:3:.*'\\./Makefile'" stderr
+grep "^configure\.ac:3:.* omit leading '\\./'" stderr
+grep "^configure\.ac:3:.*remake rules might be subtly broken" stderr
+grep "^configure\.ac:4:.*'\\./foo'" stderr
+grep "^configure\.ac:4:.* omit leading '\\./'" stderr
+grep "^configure\.ac:4:.*remake rules might be subtly broken" stderr
+
+# Check that our warning was actually justified.
+sed 's/^AM_INIT_AUTOMAKE/&([-Wall -Wno-unsupported])/' <configure.ac >t
+mv -f t configure.ac
+rm -rf autom4te*.cache
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -Wall -Wno-unsupported
+./configure
+$MAKE
+$sleep
+touch Makefile.am
+# Check that remake rules do truly break -- otherwise automake is
+# giving a bogus warning.
+run_make -e FAIL -E
+grep "config\\.status:.*invalid argument.*Makefile" stderr
+
+:
diff --git a/t/confh-subdir-clean.sh b/t/confh-subdir-clean.sh
new file mode 100644
index 000000000..81e1b85bb
--- /dev/null
+++ b/t/confh-subdir-clean.sh
@@ -0,0 +1,40 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure config headers in subdirectories are cleaned.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_HEADERS([sub/config.h:sub/config.hin])
+AC_OUTPUT
+END
+
+touch Makefile.am
+mkdir sub
+
+$ACLOCAL
+$AUTOCONF
+touch sub/config.hin
+$AUTOMAKE
+./configure
+test -f sub/stamp-h1
+$MAKE clean
+test -f sub/stamp-h1
+$MAKE distclean
+test -f sub/stamp-h1 && exit 1
+
+:
diff --git a/t/confh.sh b/t/confh.sh
new file mode 100644
index 000000000..8400c2120
--- /dev/null
+++ b/t/confh.sh
@@ -0,0 +1,63 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure config.h works in a subdir.
+# Report from Alexandre Oliva.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_HEADERS([include/config.h])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+.PHONY: test1 test2
+test1:
+ @echo DIST_COMMON = $(DIST_COMMON)
+ echo ' ' $(DIST_COMMON) ' ' | grep '[ /]acconfig\.h '
+test2: distdir
+ ls -l $(distdir)/*
+ test -f $(distdir)/acconfig.h
+check-local: test1 test2
+END
+
+mkdir include
+: > include/config.h.in
+: > acconfig.h
+
+# The test used to fail if 'include/Makefile.am' was created (!)
+: > include/Makefile.am
+
+$ACLOCAL
+$AUTOCONF
+$AUTOHEADER
+$AUTOMAKE
+
+./configure
+
+$MAKE test1
+$MAKE test2
+$MAKE distcheck
+
+# Make sure re-running automake in a different way generates same
+# Makefile.in.
+mv Makefile.in Makefile.sav
+$ACLOCAL
+$AUTOMAKE Makefile
+diff Makefile.sav Makefile.in
+
+:
diff --git a/t/confh4.sh b/t/confh4.sh
new file mode 100644
index 000000000..2a2f4c626
--- /dev/null
+++ b/t/confh4.sh
@@ -0,0 +1,47 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for PR 34.
+# > Description:
+# Automake fails to add -I option to include configuration
+# header indicated like AM_CONFIG_HEADER(magick/config.h)
+# > How-To-Repeat:
+# Use AM_CONFIG_HEADER(subdir/config.h) to place configuration
+# header in subdirectory and observe that it is not included.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_FILES([include/Makefile])
+AC_CONFIG_HEADERS([include/config.h])
+AC_PROG_CC
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo
+foo_SOURCES = foo.c
+END
+
+mkdir include
+: > include/Makefile.am
+: > include/config.h.in
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '^ *DEFAULT_INCLUDES *=.* -I\$(top_builddir)/include' Makefile.in
+
+:
diff --git a/t/confh5.sh b/t/confh5.sh
new file mode 100644
index 000000000..74e2207b5
--- /dev/null
+++ b/t/confh5.sh
@@ -0,0 +1,58 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure we do not distribute header sources when they are built.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_SUBST([FOO], [NameToBeGrepped])
+AC_CONFIG_FILES([include/config.h.in])
+AC_CONFIG_HEADERS([config.h])
+AC_CONFIG_HEADERS([include/config.h])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+.PHONY: test
+test: distdir
+ test -f $(distdir)/config.h.in
+ test -f $(distdir)/include/config.h.in.in
+ test ! -f $(distdir)/include/config.h.in
+ test ! -r $(distdir)/include/config.h.in
+END
+
+mkdir include
+: > include/config.h.in.in
+
+$ACLOCAL
+$AUTOCONF
+$AUTOHEADER
+$AUTOMAKE
+
+./configure
+$MAKE
+
+$sleep
+echo '#undef @FOO@' > include/config.h.in.in
+$MAKE include/config.h
+# Don't try to be too strict in this grepping, since the substitution
+# is done by config.status, and we don't have too much control on it.
+grep '/\*.*#undef.*NameToBeGrepped' include/config.h
+$MAKE test
+$MAKE distcheck
+
+:
diff --git a/t/confh6.sh b/t/confh6.sh
new file mode 100644
index 000000000..4cf2b296c
--- /dev/null
+++ b/t/confh6.sh
@@ -0,0 +1,45 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure config.h rule made even if it is in a subdir. The
+# idea is that if config.h is in a subdir, and there is no Makefile in
+# that subdir, then we want to build config.h as the top level.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_HEADERS([subdir/config.h])
+AC_OUTPUT
+END
+
+: > Makefile.am
+mkdir subdir
+: > subdir/config.h.in
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+$MAKE
+
+$sleep
+echo '#define gRePmE' > subdir/config.h.in
+$MAKE subdir/config.h
+$FGREP gRePmE subdir/config.h
+
+$MAKE distcheck
+
+:
diff --git a/t/confh7.sh b/t/confh7.sh
new file mode 100644
index 000000000..3a5a9a03a
--- /dev/null
+++ b/t/confh7.sh
@@ -0,0 +1,44 @@
+#! /bin/sh
+# Copyright (C) 1997-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure several config headers are allowed.
+# See also sister "semantic" test 'confh8.sh'.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_HEADERS([config.h two.h])
+END
+
+: > Makefile.am
+
+: > config.h.in
+: > two.h.in
+
+$ACLOCAL
+$AUTOMAKE
+
+# Try again with more macros.
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_OUTPUT
+END
+
+$ACLOCAL --force
+$AUTOMAKE
+
+:
diff --git a/t/confh8.sh b/t/confh8.sh
new file mode 100644
index 000000000..9891bc97d
--- /dev/null
+++ b/t/confh8.sh
@@ -0,0 +1,66 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure several config headers are allowed.
+# See also sister "minimalistic" test 'confh7.sh'.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_HEADERS([one.h two.h])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+.PHONY: test0 test1 test2
+test0:
+ @echo DIST_COMMON = $(DIST_COMMON)
+ echo ' ' $(DIST_COMMON) ' ' | grep '[ /]one\.h\.in '
+ echo ' ' $(DIST_COMMON) ' ' | grep '[ /]two\.h\.in '
+ : Processed header files should not be distributed.
+ if echo ' ' $(DIST_COMMON) ' ' | grep '\.h '; then \
+ exit 1; \
+ else \
+ exit 0; \
+ fi
+test1: all
+ test -f one.h
+ test -f two.h
+test2: distdir
+ ls -l $(distdir)/*
+ test -f $(distdir)/one.h.in
+ test -f $(distdir)/two.h.in
+ : Processed header files should not be distributed.
+ test ! -r $(distdir)/one.h
+ test ! -r $(distdir)/two.h
+check-local: test0 test1 test2
+END
+
+: > one.h.in
+: > two.h.in
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+
+$MAKE test0
+$MAKE test1
+$MAKE test2
+$MAKE distcheck
+
+:
diff --git a/t/configure.sh b/t/configure.sh
new file mode 100644
index 000000000..5f5924322
--- /dev/null
+++ b/t/configure.sh
@@ -0,0 +1,59 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Diagnose if the autoconf input is named configure.in.
+# Diagnose if both configure.in and configure.ac are present, prefer
+# configure.ac.
+
+. test-init.sh
+
+cat >configure.ac <<EOF
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile])
+EOF
+
+cat >configure.in <<EOF
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE([an-invalid-automake-option])
+AC_CONFIG_FILES([Makefile])
+EOF
+
+: >Makefile.am
+
+$ACLOCAL 2>stderr && { cat stderr >&2; exit 1; }
+cat stderr >&2
+grep 'configure\.ac.*configure\.in.*both present' stderr
+
+$ACLOCAL -Wno-error 2>stderr || { cat stderr >&2; exit 1; }
+cat stderr >&2
+grep 'configure\.ac.*configure\.in.*both present' stderr
+grep 'proceeding.*configure\.ac' stderr
+
+# Ensure we really proceed with configure.ac.
+AUTOMAKE_fails -Werror
+grep 'configure\.ac.*configure\.in.*both present' stderr
+grep 'proceeding.*configure\.ac' stderr
+
+AUTOMAKE_run -Wno-error
+grep 'configure\.ac.*configure\.in.*both present' stderr
+grep 'proceeding.*configure\.ac' stderr
+
+mv -f configure.ac configure.in
+AUTOMAKE_fails
+grep "autoconf input.*'configure.ac', not 'configure.in'" stderr
+
+:
diff --git a/t/confincl.sh b/t/confincl.sh
new file mode 100644
index 000000000..40cd93f94
--- /dev/null
+++ b/t/confincl.sh
@@ -0,0 +1,36 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# This tests for a bug reported by Gord Matzigkeit.
+# If config.h is not used, @CONFIG_INCLUDE_SPEC@ should not appear
+# in Makefile.in.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = fred
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+$FGREP '@CONFIG_INCLUDE_SPEC@' Makefile.in && exit 1
+
+:
diff --git a/t/conflnk.sh b/t/conflnk.sh
new file mode 100644
index 000000000..3ec22addc
--- /dev/null
+++ b/t/conflnk.sh
@@ -0,0 +1,70 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure links created by AC_CONFIG_LINKS get removed with
+# 'make distclean'
+
+. test-init.sh
+
+echo 'SUBDIRS = sdir' > Makefile.am
+: > src
+mkdir sdir
+: > sdir/Makefile.am
+: > sdir/src2
+mkdir sdir-no-make
+
+cat >>configure.ac << 'EOF'
+AC_CONFIG_FILES([sdir/Makefile])
+AC_CONFIG_LINKS([dest:src])
+AC_CONFIG_LINKS([dest2:src])
+AC_CONFIG_LINKS([sdir/dest3:src])
+AC_CONFIG_LINKS([dest4:sdir/src2])
+AC_CONFIG_LINKS([sdir/dest5:sdir/src2 sdir-no-make/dest6:src])
+AC_OUTPUT
+EOF
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+./configure
+
+# Make sure nothing is deleted by 'make clean'
+$MAKE clean
+
+test -r dest
+test -r dest2
+test -r sdir/dest3
+test -r dest4
+test -r sdir/dest5
+test -r sdir-no-make/dest6
+test -f src
+test -f sdir/src2
+
+# Make sure the links are deleted by 'make distclean' and the original files
+# are not.
+$MAKE distclean
+
+test -f src
+test -f sdir/src2
+
+test -r dest && exit 1
+test -r dest2 && exit 1
+test -r sdir/dest3 && exit 1
+test -r dest4 && exit 1
+test -r sdir/dest5 && exit 1
+test -r sdir-no-make/dest6 && exit 1
+
+:
diff --git a/t/conflnk2.sh b/t/conflnk2.sh
new file mode 100644
index 000000000..0a7d43f38
--- /dev/null
+++ b/t/conflnk2.sh
@@ -0,0 +1,57 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure that sources for links created by AC_CONFIG_LINKS
+# are distributed.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+SUBDIRS = sdir
+.PHONY: test
+test: distdir
+ test -f $(distdir)/src
+ test -f $(distdir)/src2
+ test -f $(distdir)/sdir/src3
+ test -f $(distdir)/sdir-no-make/src4
+ test 2 -gt `find $(distdir)/sdir -type d | wc -l`
+ test 2 -gt `find $(distdir)/sdir-no-make -type d | wc -l`
+ test 4 -gt `find $(distdir) -type d | wc -l`
+END
+
+: > src
+: > src2
+mkdir sdir
+: > sdir/Makefile.am
+: > sdir/src3
+mkdir sdir-no-make
+: > sdir-no-make/src4
+
+cat >>configure.ac << 'EOF'
+AC_CONFIG_FILES([sdir/Makefile])
+AC_CONFIG_LINKS([dest:src])
+AC_CONFIG_LINKS([sdir/dest2:src2 sdir-no-make/dest3:sdir/src3])
+AC_CONFIG_LINKS([sdir/dest4:sdir-no-make/src4])
+AC_OUTPUT
+EOF
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+./configure
+$MAKE test
+
+:
diff --git a/t/conflnk3.sh b/t/conflnk3.sh
new file mode 100644
index 000000000..9a5e230d5
--- /dev/null
+++ b/t/conflnk3.sh
@@ -0,0 +1,86 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure that AC_CONFIG_LINKS using a variable source
+# is not broken.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+SUBDIRS = sdir
+.PHONY: test
+test: distdir
+ test ! -r $(distdir)/sdir/dest3
+ test ! -r $(distdir)/sdir/dest2
+ test ! -r $(distdir)/dest3
+ test ! -r $(distdir)/dest2
+ test -f $(distdir)/src2
+## src3 cannot be distributed, Automake knows nothing about it.
+ test ! -r $(distdir)/sdir/src3
+ test ! -r $(distdir)/src3
+END
+
+: > src
+: > src2
+mkdir sdir
+: > sdir/Makefile.am
+: > sdir/src3
+
+cat >>configure.ac << 'EOF'
+AC_CONFIG_FILES([sdir/Makefile])
+my_src_dir=sdir
+my_dest=dest
+AC_CONFIG_LINKS([sdir/dest2:src2 sdir/dest3:$my_src_dir/src3])
+AC_CONFIG_LINKS([$my_dest:src])
+# The following is a link whose source is itself a link.
+AC_CONFIG_LINKS([dest4:sdir/dest2])
+# Some package prefer to compute links.
+cmplink='dest5:src';
+AC_CONFIG_LINKS([$cmplink])
+AC_OUTPUT
+EOF
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+# $my_src_dir and $my_dest are variables local to configure, they should
+# not appear in Makefile.
+grep my_src_dir Makefile.in && exit 1
+grep my_dest Makefile.in && exit 1
+
+./configure
+test -r sdir/dest2
+test -r sdir/dest3
+test -r dest
+test -r dest4
+test -r dest5
+$MAKE test
+
+$MAKE distclean
+test ! -e sdir/dest2
+test ! -e sdir/dest3
+test -r dest # Should still exist, Automake knows nothing about it.
+test -r dest5 # Ditto.
+rm -f dest dest5
+test ! -e dest4
+
+mkdir build
+cd build
+../configure
+$MAKE test
+
+:
diff --git a/t/conflnk4.sh b/t/conflnk4.sh
new file mode 100644
index 000000000..06b16d60b
--- /dev/null
+++ b/t/conflnk4.sh
@@ -0,0 +1,93 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure links to _identical files_ created by AC_CONFIG_LINKS get
+# removed with 'make distclean' only if doing a VPATH build.
+
+. test-init.sh
+
+mkdir nonmk-subdir sdir sdir/mk-subdir
+: > src
+: > sdir/Makefile.am
+: > sdir/src2
+: > nonmk-subdir/src3
+: > sdir/mk-subdir/src4
+
+cat >> Makefile.am <<'EOF'
+SUBDIRS = sdir
+.PHONY: test
+test: distdir
+ test -f $(distdir)/src
+ test -f $(distdir)/sdir/src2
+ test -f $(distdir)/nonmk-subdir/src3
+ test -f $(distdir)/sdir/mk-subdir/src4
+EOF
+
+cat >>configure.ac << 'EOF'
+AC_CONFIG_FILES([sdir/Makefile])
+AC_CONFIG_LINKS([src:src])
+AC_CONFIG_LINKS([sdir/src2:sdir/src2])
+AC_CONFIG_LINKS([nonmk-subdir/src3:nonmk-subdir/src3])
+AC_CONFIG_LINKS([sdir/mk-subdir/src4:sdir/mk-subdir/src4])
+AC_OUTPUT
+EOF
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+mkdir build
+cd build
+../configure
+
+$MAKE test
+
+# Make sure nothing is deleted by 'make clean'
+$MAKE clean
+
+test -f ../src
+test -f ../sdir/src2
+test -f ../nonmk-subdir/src3
+test -f ../sdir/mk-subdir/src4
+
+# Make sure the links are deleted by 'make distclean' and the original files
+# are not.
+$MAKE distclean
+
+test -f ../src
+test -f ../sdir/src2
+test -f ../nonmk-subdir/src3
+test -f ../sdir/mk-subdir/src4
+
+test -r src && exit 1
+test -r sdir/src2 && exit 1
+test -r nonmk-subdir/src3 && exit 1
+test -r sdir/mk-subdir/src4 && exit 1
+
+cd ..
+./configure
+
+$MAKE test
+
+# Make sure nothing is deleted by 'make distclean'
+$MAKE distclean
+
+test -f src
+test -f sdir/src2
+test -f nonmk-subdir/src3
+test -f sdir/mk-subdir/src4
+
+:
diff --git a/t/confsub.sh b/t/confsub.sh
new file mode 100644
index 000000000..0dab4a026
--- /dev/null
+++ b/t/confsub.sh
@@ -0,0 +1,57 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure config.h can be in subdir.
+# Also, make sure config.h is properly rebuilt.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_FILES([subdir/Makefile])
+AC_CONFIG_HEADERS([subdir/config.h:subdir/config.hin])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+SUBDIRS = subdir
+END
+
+mkdir subdir
+cat > subdir/Makefile.am << 'END'
+END
+
+echo 'Before.' > subdir/config.hin
+
+$ACLOCAL
+$AUTOMAKE
+
+# Make sure subdir Makefile.in doesn't itself look in the subdir.
+# One line is allowed though:
+#
+# cd $(top_builddir) && $(SHELL) ./config.status subdir/config.h
+($FGREP 'subdir/config.h' subdir/Makefile.in |
+ $FGREP -v 'cd $(top_builddir)') && exit 1
+
+$AUTOCONF
+./configure
+$FGREP 'Before.' subdir/config.h
+
+$sleep
+echo 'After.' > subdir/config.hin
+$MAKE
+$FGREP 'After.' subdir/config.h
+
+:
diff --git a/t/confvar.sh b/t/confvar.sh
new file mode 100644
index 000000000..84748d3b2
--- /dev/null
+++ b/t/confvar.sh
@@ -0,0 +1,32 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure configure_vars stuff works.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_SUBST([QBERT])
+END
+
+: > Makefile.am
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '^QBERT =' Makefile.in
+
+:
diff --git a/t/confvar2.sh b/t/confvar2.sh
new file mode 100644
index 000000000..d03dc64f0
--- /dev/null
+++ b/t/confvar2.sh
@@ -0,0 +1,34 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for bug reported by Jim Meyering.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_SUBST([OTHER_SCRIPTS])
+END
+
+cat > Makefile.am << 'END'
+bin_SCRIPTS = foo
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '^OTHER_SCRIPTS =' Makefile.in
+
+:
diff --git a/t/copy.sh b/t/copy.sh
new file mode 100644
index 000000000..da446c706
--- /dev/null
+++ b/t/copy.sh
@@ -0,0 +1,101 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure '-c' works. Report from Andris Pavenis.
+# See also the much more in-depth test 'add-missing'.
+
+. test-init.sh
+
+# We'll have to cater to systems like MSYS/MinGW where there are no
+# true symlinks ('ln -s' behaves like 'cp -p'); see automake bug#10441.
+
+echo dummy > foo
+if ln -s foo bar && test -h bar; then
+ is_symlink () { test -h "$1"; }
+ is_not_symlink () { test ! -h "$1"; }
+else
+ is_symlink () { return 0; } # Avoid spurious failures.
+ is_not_symlink () { return 0; }
+fi
+rm -f foo bar
+
+# First a simple test, where the auxdir is automatically determined
+# by automake.
+
+: > Makefile.am
+rm -f install-sh
+
+$ACLOCAL
+$AUTOMAKE -c -a
+ls -l # For debugging.
+
+test -f install-sh
+is_not_symlink install-sh
+
+# Let's do a couple of more elaborated tests, this time with the auxdir
+# explicitly defined in configure.ac.
+
+mkdir sub
+cd sub
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AC_CONFIG_AUX_DIR([auxdir])
+AM_INIT_AUTOMAKE
+AC_PROG_CC
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<END
+bin_PROGRAMS = foo
+END
+
+$ACLOCAL
+
+# 'automake -a' called without '-c' should create symlinks by default,
+# even when there is already a non-symlinked required auxiliary file.
+
+mkdir auxdir
+echo FAKE-DEPCOMP > auxdir/depcomp
+$AUTOMAKE -a
+ls -l auxdir # For debugging.
+test -f auxdir/install-sh
+is_symlink auxdir/install-sh
+test -f auxdir/depcomp
+is_not_symlink auxdir/depcomp
+test FAKE-DEPCOMP = "$(cat auxdir/depcomp)"
+
+# 'automake -a -c' should not create symlinks, even when there are
+# already symlinked required auxiliary files.
+
+rm -rf auxdir
+mkdir auxdir
+cd auxdir
+ln -s "$am_scriptdir/missing" "$am_scriptdir/install-sh" .
+cd ..
+
+$AUTOMAKE -a -c
+ls -l auxdir # For debugging.
+test -f auxdir/install-sh
+is_symlink auxdir/install-sh
+test -f auxdir/missing
+is_symlink auxdir/missing
+test -f auxdir/depcomp
+is_not_symlink auxdir/depcomp
+diff "$am_scriptdir"/depcomp auxdir/depcomp
+
+:
diff --git a/t/cscope.tap b/t/cscope.tap
new file mode 100644
index 000000000..b7fbb210d
--- /dev/null
+++ b/t/cscope.tap
@@ -0,0 +1,170 @@
+#! /bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test cscope functionality.
+
+. test-init.sh
+
+plan_ 18
+
+ocwd=$(pwd) || fatal_ "getting top-level directory"
+
+cat > configure.ac << 'END'
+AC_INIT([cscope-test], [1.0])
+AM_INIT_AUTOMAKE([subdir-objects])
+AC_CONFIG_FILES([Makefile sub/Makefile])
+AC_SUBST([CC], [who-cares])
+AC_SUBST([CXX], [who-cares])
+AC_SUBST([FC], [who-cares])
+AC_SUBST([GCJ], [who-cares])
+AM_PATH_LISPDIR
+AC_OUTPUT
+END
+
+mkdir sub sub/subsub
+
+cat > Makefile.am <<'END'
+SUBDIRS = sub
+bin_PROGRAMS = foo
+foo_SOURCES = foo.c bar.cpp baz.f90
+lisp_LISP = foo.el
+EXTRA_DIST = foo.el
+END
+
+cat > sub/Makefile.am <<'END'
+bin_PROGRAMS = bar
+bar_SOURCES = subsub/dist.c
+nodist_bar_SOURCES = subsub/gen.c
+subsub/gen.c:
+ $(MKDIR_P) subsub
+ echo 'int generated_subsub () { return 0; }' > $@
+CLEANFILES = subsub/gen.c
+END
+
+echo 'int foo_func () { return 0; }' > foo.c
+echo 'int main () { return 0; }' > bar.cpp
+cat > baz.f90 <<'END'
+ subroutine baz
+ end
+END
+: > foo.el
+echo 'int main () { return 0; }' > sub/subsub/dist.c
+
+$ACLOCAL || fatal_ "aclocal failed"
+$AUTOCONF || fatal_ "autoconf failed"
+$AUTOMAKE -i -a || fatal_ "automake -i -a failed"
+
+# Sun cscope is interactive without redirection; also, it might not
+# support the '-q' option, which is required by our generated recipes.
+if cscope -q --version </dev/null; then
+ have_cscope=yes
+else
+ have_cscope=no
+fi
+
+test_cleanup ()
+{
+ r=ok
+ if test -f configure; then
+ # In-tree build.
+ $MAKE distclean
+ else
+ # VPATH build.
+ $MAKE distcleancheck
+ fi \
+ && test ! -e cscope.files \
+ && test ! -e cscope.out \
+ && test ! -e cscope.in.out \
+ && test ! -e cscope.po.out \
+ || r='not ok'
+ result_ "$r" "[$pfx] make distcheck"
+}
+
+test_cscope ()
+{
+ r=ok
+ $MAKE -n cscope || r='not ok'
+ result_ "$r" "[$pfx] make -n cscope"
+
+ if test $have_cscope = no; then
+ # For later tests.
+ touch cscope.files cscope.out cscope.in.out cscope.po.out
+ skip_row_ 3 -r "no proper cscope program available"
+ return 0
+ fi
+
+ r=ok
+ run_make -E cscope || r='not ok'
+ grep 'cannot find file' stderr && r='not ok'
+ rm -f stderr
+ result_ "$r" "[$pfx] make cscope"
+
+ r=ok
+ test -f cscope.files \
+ && $FGREP foo.c cscope.files \
+ && $FGREP bar.cpp cscope.files \
+ && $FGREP sub/subsub/dist.c cscope.files \
+ && $FGREP sub/subsub/gen.c cscope.files \
+ || r='not ok'
+ result_ "$r" "[$pfx] cscope.files looks correct"
+
+ r=ok
+ # cscope.files might not exist of the earlier "make cscope" failed.
+ cp cscope.files cscope.files1 \
+ && $MAKE cscope \
+ && diff cscope.files cscope.files1 \
+ || r='not ok'
+ rm -f cscope.files1
+ result_ "$r" "[$pfx] second \"make cscope\" is consistent"
+}
+
+my_configure ()
+{
+ command_ok_ "[$pfx] configure" \
+ "$1"/configure EMACS=no --with-lispdir=/who/cares
+}
+
+if using_gmake; then
+
+ cd "$ocwd"
+ pfx="relative VPATH"
+ mkdir build
+ cd build
+ my_configure ..
+ test_cscope
+ test_cleanup
+
+ cd "$ocwd"
+ pfx="absolute VPATH"
+ mkdir build2
+ cd build2
+ my_configure "$ocwd"
+ test_cscope
+ test_cleanup
+
+else
+
+ skip_row_ 12 -r "cscope in VPATH requires GNU make"
+
+fi
+
+cd "$ocwd"
+pfx="in-tree build"
+my_configure .
+test_cscope
+test_cleanup
+
+:
diff --git a/t/cscope2.sh b/t/cscope2.sh
new file mode 100644
index 000000000..2137cc9b9
--- /dev/null
+++ b/t/cscope2.sh
@@ -0,0 +1,34 @@
+#! /bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# The 'cscope' target should not fail if there are no sources.
+
+required=
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+: >Makefile.am
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+$MAKE cscope
+
+:
diff --git a/t/cscope3.sh b/t/cscope3.sh
new file mode 100644
index 000000000..0ec2a3194
--- /dev/null
+++ b/t/cscope3.sh
@@ -0,0 +1,39 @@
+#! /bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# The 'cscope' target should not fail if there are no sources in a subdir.
+# In practice this means 'cscope' should not be invoked if cscope.files
+# is empty.
+
+required=cscope
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+END
+mkdir sub
+echo 'SUBDIRS = sub' >Makefile.am
+: >sub/Makefile.am
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+$MAKE cscope
+
+:
diff --git a/t/cxx-demo.sh b/t/cxx-demo.sh
new file mode 100644
index 000000000..c3be764ab
--- /dev/null
+++ b/t/cxx-demo.sh
@@ -0,0 +1,182 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Demo on C++ support.
+
+required=c++
+am_create_testdir=empty
+. test-init.sh
+
+cat > configure.ac << 'END'
+AC_INIT([GNU C++ Demo], [1.3], [bug-automake@gnu.org])
+AC_CONFIG_SRCDIR([play.c++])
+AC_CONFIG_AUX_DIR([build-aux])
+AM_INIT_AUTOMAKE
+# The C compiler shouldn't be required in any way.
+CC=false; AC_SUBST([CC])
+AC_PROG_CXX
+AH_BOTTOM([
+#ifndef GREETINGS
+# define GREETINGS "Howdy"
+#endif])
+AC_DEFINE([OK_AC], [1],
+ [Give "good to go" declaration from configure.ac])
+AC_CONFIG_HEADERS([config.hxx])
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = subdir-objects
+
+bin_PROGRAMS = work play
+common_sources = common.hpp foo.cpp sub/bar.cc
+AM_CPPFLAGS = -DOK_AM=1
+play_SOURCES = play.c++ play.hh $(common_sources)
+work_SOURCES = work.cxx work.h++ $(common_sources)
+work_CXXFLAGS = -D'GREETINGS="Good morning"'
+
+.PHONY: test-objs
+check-local: test-objs
+test-objs:
+ test -f play.$(OBJEXT)
+ test -f foo.$(OBJEXT)
+ test -f sub/bar.$(OBJEXT)
+ test -f work-foo.$(OBJEXT)
+ test -f sub/work-bar.$(OBJEXT)
+ test -f work-work.$(OBJEXT)
+END
+
+mkdir sub build-aux
+
+$ACLOCAL
+$AUTOHEADER
+test -f config.hxx.in
+$AUTOCONF
+$AUTOMAKE --add-missing
+test -f build-aux/depcomp
+# Not needed by C++ compilers.
+test ! -e build-aux/compile
+
+cat > work.h++ << 'END'
+#define ACTION "work"
+class Hello_CXX
+{
+ public:
+ Hello_CXX() { }
+ virtual ~Hello_CXX () { }
+ void hello_cxx_class ();
+};
+END
+
+cat > play.hh << 'END'
+#define ACTION "play"
+void hello_cxx_function (void);
+END
+
+cat > common.hpp << 'END'
+/* Common header. */
+
+#include <config.hxx>
+
+#if !OK_AM
+#error "missing OK from Makefile.am"
+choke me
+#endif
+
+#if !OK_AC
+#error "missing OK from configure.ac"
+choke me
+#endif
+
+#include <iostream>
+END
+
+cat > work.cxx << 'END'
+#include "common.hpp"
+#include "work.h++"
+#include <cstdlib>
+using namespace std;
+int main (void)
+{
+ cout << "We are working :-(" << endl;
+ Hello_CXX *hello = new Hello_CXX;
+ hello->hello_cxx_class ();
+ return EXIT_SUCCESS;
+}
+END
+
+cat > play.c++ << 'END'
+#include "common.hpp"
+#include "play.hh"
+int main (void)
+{
+ std::cout << "We are playing :-)" << std::endl;
+ hello_cxx_function ();
+ return 0;
+}
+END
+
+cat > foo.cpp <<'END'
+#include <config.hxx>
+#include "work.h++"
+#include <iostream>
+using namespace std;
+void Hello_CXX::hello_cxx_class (void)
+{
+ cout << GREETINGS << ", " << ACTION << "." << endl;
+}
+END
+
+cat > sub/bar.cc << 'END'
+#include <config.hxx>
+#include "play.hh"
+#include <stdio.h>
+void hello_cxx_function (void)
+{
+ printf ("%s, %s!\n", GREETINGS, ACTION);
+}
+END
+
+./configure
+$MAKE
+$MAKE test-objs
+
+if ! cross_compiling; then
+ unindent > exp.play << 'END'
+ We are playing :-)
+ Howdy, play!
+END
+ unindent > exp.work << 'END'
+ We are working :-(
+ Good morning, work.
+END
+ for p in play work; do
+ # The program must run correctly (exit status = 0).
+ ./$p
+ # And it must have the expected output. Note that we strip extra
+ # CR characters (if any), to cater to MinGW programs on MSYS.
+ # See automake bug#14493.
+ ./$p | tr -d '\015' > got.$p || { cat got.$p; exit 1; }
+ cat exp.$p
+ cat got.$p
+ diff exp.$p got.$p
+ done
+fi
+
+$MAKE distcheck
+
+:
diff --git a/t/cxx-lt-demo.sh b/t/cxx-lt-demo.sh
new file mode 100644
index 000000000..a6b401475
--- /dev/null
+++ b/t/cxx-lt-demo.sh
@@ -0,0 +1,134 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Demo on Libtool/C++ support.
+
+required='libtoolize c++'
+am_create_testdir=empty
+. test-init.sh
+
+cat > configure.ac << 'END'
+AC_INIT([GNU C++/Libtool Demo], [0.73], [bug-automake@gnu.org])
+AC_CONFIG_SRCDIR([lib/libfoo.c++])
+AC_CONFIG_AUX_DIR([ax])
+AM_INIT_AUTOMAKE
+AC_CANONICAL_HOST
+AC_CANONICAL_BUILD
+AC_PROG_CXX
+AM_PROG_AR
+LT_INIT
+AC_CONFIG_FILES([
+ Makefile
+ src/Makefile
+ lib/Makefile
+ try.sh:try.in
+])
+AC_OUTPUT
+END
+
+mkdir ax lib src
+
+cat > Makefile.am <<'END'
+SUBDIRS = lib src
+
+AUTOMAKE_OPTIONS = parallel-tests
+TEST_EXTENSIONS = .sh
+SH_LOG_COMPILER = $(SHELL) -ex
+TESTS = try.sh
+
+.PHONY: test-objs
+check-local: test-objs
+test-objs:
+ test -f src/main.$(OBJEXT)
+ test -f lib/libfoo.lo
+END
+
+cat > src/Makefile.am << 'END'
+bin_PROGRAMS = zardoz
+zardoz_SOURCES = main.cc
+zardoz_LDADD = $(top_builddir)/lib/libfoo.la
+AM_CPPFLAGS = -I$(top_builddir)/lib
+END
+
+cat > lib/Makefile.am << 'END'
+lib_LTLIBRARIES = libfoo.la
+nodist_libfoo_la_SOURCES = libfoo.h++
+libfoo_la_SOURCES = libfoo.c++
+libfoo.h++: $(srcdir)/libfoo.c++
+ echo '#include <string>' >$@-t
+ grep "target *(" "$(srcdir)/libfoo.c++" >>$@-t
+ echo ';' >>$@-t
+ chmod a-w $@-t && mv -f $@-t $@
+BUILT_SOURCES = libfoo.h++
+DISTCLEANFILES = $(BUILT_SOURCES)
+END
+
+cat > try.in << 'END'
+#!/bin/sh
+set -e
+if test x"$host_alias" = x || test x"$build_alias" = x"$host_alias"; then
+ ./src/zardoz
+ test "`./src/zardoz`" = 'Howdy, Testsuite!'
+else
+ echo "Skip: cannot run a cross-compiled program"
+ exit 77
+fi
+END
+
+libtoolize --copy
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing --copy
+
+ls -l . ax # For debugging.
+# Ideally, the 'compile' script should not be required by C++ compilers.
+# But alas, LT_INIT seems to invoke AC_PROG_CC anyway, and that brings in
+# that script.
+for f in ltmain.sh depcomp compile config.guess config.sub; do
+ test -f ax/$f && test ! -h ax/$f || exit 1
+done
+
+cat > src/main.cc << 'END'
+#include "libfoo.h++"
+#include <iostream>
+using namespace std;
+int main (void)
+{
+ cout << "Howdy, " << target () << "!" << endl;
+ return 0;
+}
+END
+
+cat > lib/libfoo.c++ << 'END'
+#include "libfoo.h++"
+std::string target (void)
+{
+ std::string s1 = "Test";
+ std::string s2 = "suite";
+ return (s1 + s2);
+}
+END
+
+./configure
+run_make CC=false
+ls -l . src lib # For debugging.
+$MAKE test-objs
+VERBOSE=yes $MAKE check-TESTS
+grep 'Howdy.*Testsuite' try.log || grep 'Skip:.*cross-compiled' try.log
+
+$MAKE distcheck
+
+:
diff --git a/t/cxx.sh b/t/cxx.sh
new file mode 100644
index 000000000..528e2c74c
--- /dev/null
+++ b/t/cxx.sh
@@ -0,0 +1,34 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test that '.c++' extension works.
+# From Ralf Corsepius.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CXX
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = hello
+hello_SOURCES = hello.c++
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '^\.SUFFIXES:.*c[+][+]' Makefile.in
diff --git a/t/cxx2.sh b/t/cxx2.sh
new file mode 100644
index 000000000..66b668208
--- /dev/null
+++ b/t/cxx2.sh
@@ -0,0 +1,30 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test that Automake suggests using AC_PROG_CXX if C++ sources are used.
+
+. test-init.sh
+
+echo AC_PROG_CC >>configure.ac
+
+cat >Makefile.am <<'END'
+bin_PROGRAMS = hello
+hello_SOURCES = hello.cpp
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+grep AC_PROG_CXX stderr
diff --git a/t/cxxcpp.sh b/t/cxxcpp.sh
new file mode 100644
index 000000000..d4d692eb2
--- /dev/null
+++ b/t/cxxcpp.sh
@@ -0,0 +1,32 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure automake sees AC_PROG_CXXCPP. From Garth Corral.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CXXCPP
+END
+
+: > Makefile.am
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '^CXXCPP =' Makefile.in
+
+:
diff --git a/t/cxxlibobj.sh b/t/cxxlibobj.sh
new file mode 100644
index 000000000..c6cbb02b4
--- /dev/null
+++ b/t/cxxlibobj.sh
@@ -0,0 +1,40 @@
+#! /bin/sh
+# Copyright (C) 1997-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure LIBOBJS and C++ sources work right.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CXX
+AC_PROG_CC
+AC_REPLACE_FUNCS(strdup)
+END
+
+cat > Makefile.am << 'END'
+sbin_PROGRAMS = anonymous
+anonymous_SOURCES = doe.C jane.C
+anonymous_LDADD = @LIBOBJS@
+END
+
+: > strdup.c
+: > doe.C
+: > jane.C
+
+$ACLOCAL
+$AUTOMAKE
+
+grep CC Makefile.in
diff --git a/t/cxxlink.sh b/t/cxxlink.sh
new file mode 100644
index 000000000..de1d6ce20
--- /dev/null
+++ b/t/cxxlink.sh
@@ -0,0 +1,39 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure C++ linker is used when appropriate.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_CXX
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = lavalamp
+lavalamp_SOURCES = lava.c lamp.cxx
+END
+
+: > lava.c
+: > lamp.cxx
+
+$ACLOCAL
+$AUTOMAKE
+
+# Look for this macro not at the beginning of any line; that will have
+# to be good enough for now.
+grep '.CXXLINK' Makefile.in
diff --git a/t/cxxnoc.sh b/t/cxxnoc.sh
new file mode 100644
index 000000000..32286371b
--- /dev/null
+++ b/t/cxxnoc.sh
@@ -0,0 +1,37 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure pure C++ sources don't include C-specific code.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CXX
+END
+
+cat > Makefile.am << 'END'
+sbin_PROGRAMS = anonymous
+anonymous_SOURCES = doe.C jane.C
+END
+
+: > doe.C
+: > jane.C
+
+$ACLOCAL
+$AUTOMAKE
+
+$FGREP '(CC)' Makefile.in && exit 1
+exit 0
diff --git a/t/cygnus-no-more.sh b/t/cygnus-no-more.sh
new file mode 100644
index 000000000..425283b81
--- /dev/null
+++ b/t/cygnus-no-more.sh
@@ -0,0 +1,46 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that support for Cygnus-style trees is deprecated.
+# That feature will be removed in the next major Automake release.
+# See automake bug#11034.
+
+. test-init.sh
+
+warn_rx='support for Cygnus.*trees.*removed'
+
+$ACLOCAL
+
+# Use of 'cygnus' option must raise an unconditional error, not a
+# warning.
+AUTOMAKE="$am_original_AUTOMAKE -Wnone -Wno-error"
+
+# 'cygnus' option in Makefile.am
+echo "AUTOMAKE_OPTIONS = cygnus" > Makefile.am
+AUTOMAKE_fails
+grep "^Makefile\.am:1:.*$warn_rx" stderr
+
+rm -rf autom4te*.cache
+
+# 'cygnus' option in configure.ac
+: > Makefile.am
+sed "s|^\\(AM_INIT_AUTOMAKE\\).*|\1([cygnus])|" configure.ac > t
+diff configure.ac t && fatal_ "failed to edit configure.ac"
+mv -f t configure.ac
+AUTOMAKE_fails
+grep "^configure\.ac:2:.*$warn_rx" stderr
+
+:
diff --git a/t/cygwin32.sh b/t/cygwin32.sh
new file mode 100644
index 000000000..c45cfc46c
--- /dev/null
+++ b/t/cygwin32.sh
@@ -0,0 +1,38 @@
+#! /bin/sh
+# Copyright (C) 1997-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test basic Cygwin32 functionality.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = www
+www_SOURCES = www.c
+EXTRA_www_SOURCES = xtra.c
+www_LDADD = @extra_stuff@
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '^CYGWIN' Makefile.in && exit 1
+grep 'EXEEXT' Makefile.in
+
+:
diff --git a/t/dash.sh b/t/dash.sh
new file mode 100644
index 000000000..ccf6a81a6
--- /dev/null
+++ b/t/dash.sh
@@ -0,0 +1,29 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure '-' can be used in path.
+# Report from Matthew D. Langston.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+include Make-lang
+END
+
+: > Make-lang
+
+$ACLOCAL
+$AUTOMAKE
diff --git a/t/defun.sh b/t/defun.sh
new file mode 100644
index 000000000..b91c93c8a
--- /dev/null
+++ b/t/defun.sh
@@ -0,0 +1,35 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure aclocal picks up on all macro definitions.
+
+. test-init.sh
+
+cat > acinclude.m4 << 'END'
+AC_DEFUN([AM_FUNC_THREE])
+AC_DEFUN([AM_FUNC_TWO], [@!GrepThisString!@AM_FUNC_THREE])
+AC_DEFUN([AM_FUNC_ONE], [AC_REQUIRE([AM_FUNC_TWO])])
+END
+
+cat >>configure.ac << 'END'
+AM_FUNC_ONE
+END
+
+$ACLOCAL
+$AUTOCONF
+grep '^@!GrepThisString!@$' configure
+
+:
diff --git a/t/defun2.sh b/t/defun2.sh
new file mode 100644
index 000000000..711b8731d
--- /dev/null
+++ b/t/defun2.sh
@@ -0,0 +1,40 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure we don't mistake a macro definition for an invocation.
+# From Jim Meyering.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+dnl if buggy this will require getloadavg.c
+AC_PROG_CC
+AC_DEFUN([AC_FUNC_GETLOADAVG])
+dnl need this to avoid LIBOBJS used but not defined.
+AC_FUNC_MEMCMP
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo
+foo_LDADD = @LIBOBJS@
+END
+
+: > memcmp.c
+
+$ACLOCAL
+$AUTOMAKE
+
+:
diff --git a/t/dejagnu-absolute-builddir.sh b/t/dejagnu-absolute-builddir.sh
new file mode 100644
index 000000000..4b76d8c98
--- /dev/null
+++ b/t/dejagnu-absolute-builddir.sh
@@ -0,0 +1,60 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that DejaGnu testsuites have 'objdir' defined (as a TCL variable)
+# to an absolute path.
+
+required=runtest
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = dejagnu
+DEJATOOL = tcl env
+EXTRA_DIST = tcl.test/tcl.exp
+END
+
+mkdir tcl.test
+
+cat > tcl.test/tcl.exp << 'END'
+send_user "tcl_objdir: $objdir\n"
+if { [ regexp "^/" $objdir ] } {
+ pass "test_tcl_objdir"
+} else {
+ fail "test_tcl_objdir"
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+./configure
+
+$MAKE check
+
+# Sanity check: all tests have run.
+test -f env.log
+test -f env.sum
+test -f tcl.log
+test -f tcl.sum
+
+$MAKE distcheck
+
+:
diff --git a/t/dejagnu-relative-srcdir.sh b/t/dejagnu-relative-srcdir.sh
new file mode 100644
index 000000000..2737efcd2
--- /dev/null
+++ b/t/dejagnu-relative-srcdir.sh
@@ -0,0 +1,84 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that DejaGnu testsuites have 'srcdir' defined to a relative path
+# (both as TCL variable and as environment variable).
+
+required=runtest
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = dejagnu
+DEJATOOL = tcl env
+EXTRA_DIST = env.test/env.exp tcl.test/tcl.exp lib/tcl.exp
+END
+
+mkdir env.test tcl.test lib
+
+# DejaGnu can change $srcdir behind our backs, so we have to
+# save its original value. Thanks to Ian Lance Taylor for the
+# suggestion.
+cat > lib/tcl.exp << 'END'
+send_user "tcl_lib_srcdir: $srcdir\n"
+set orig_srcdir $srcdir
+END
+
+cat > env.test/env.exp << 'END'
+set env_srcdir $env(srcdir)
+send_user "env_srcdir: $env_srcdir\n"
+if { [ regexp "^\.(\./\.\.)?$" $env_srcdir ] } {
+ pass "test_env_src"
+} else {
+ fail "test_env_src"
+}
+END
+
+cat > tcl.test/tcl.exp << 'END'
+send_user "tcl_srcdir: $srcdir\n"
+if { [ regexp "^\.(\./\.\.)?$" $srcdir ] } {
+ pass "test_tcl_src"
+} else {
+ fail "test_tcl_src"
+}
+send_user "tcl_orig_srcdir: $orig_srcdir\n"
+if { [ regexp "^\.(\./\.\.)?$" $orig_srcdir ] } {
+ pass "test_tcl_orig_src"
+} else {
+ fail "test_tcl_orig_src"
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+./configure --srcdir=.
+
+$MAKE check
+
+# Sanity check: all tests have run.
+test -f env.log
+test -f env.sum
+test -f tcl.log
+test -f tcl.sum
+
+$MAKE distcheck
+
+:
diff --git a/t/dejagnu-siteexp-append.sh b/t/dejagnu-siteexp-append.sh
new file mode 100644
index 000000000..d25848f53
--- /dev/null
+++ b/t/dejagnu-siteexp-append.sh
@@ -0,0 +1,70 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that the files in $(EXTRA_DEJAGNU_SITE_CONFIG) get appended to
+# site.exp in the same order in which they're listed in that variable.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = dejagnu
+DEJATOOL = tool
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+./configure
+
+$MAKE site.exp
+sed '/^##.*##$/d' site.exp > expected
+
+cat > foo.exp << 'END'
+foo1
+foo2
+foo3
+END
+
+cat foo.exp - >> expected << 'END'
+BAR 1
+# foo
+BAR 2
+END
+
+cat >> Makefile.am << 'END'
+EXTRA_DEJAGNU_SITE_CONFIG = foo.exp bar.exp
+bar.exp:
+ @(echo 'BAR 1' && echo '# foo' && echo 'BAR 2') > $@
+END
+
+$AUTOMAKE Makefile
+./config.status Makefile
+
+rm -f site.exp
+$MAKE site.exp
+sed '/^##.*##$/d' site.exp > obtained
+
+cat expected
+cat site.exp
+
+diff expected obtained
+
+:
diff --git a/t/dejagnu-siteexp-extend.sh b/t/dejagnu-siteexp-extend.sh
new file mode 100644
index 000000000..600dd0848
--- /dev/null
+++ b/t/dejagnu-siteexp-extend.sh
@@ -0,0 +1,159 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that the developer can extend the site.exp generated by the
+# automake-generated Makefile.
+
+required=runtest
+. test-init.sh
+
+write_check_for ()
+{
+ echo "send_user \"$1: \$$1\\n\""
+ unindent << END
+ if { \$$1 == "/$1/" } {
+ pass "test_$1"
+ } else {
+ fail "test_$1"
+ }
+END
+}
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = dejagnu
+DEJATOOL = tool
+
+EXTRA_DIST = tool.test/tool.exp
+
+EXTRA_DEJAGNU_SITE_CONFIG = foo.exp
+EXTRA_DIST += foo.exp
+END
+
+echo 'set foo "/foo/"' > foo.exp
+
+mkdir tool.test
+write_check_for foo > tool.test/tool.exp
+cat tool.test/tool.exp
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+./configure
+
+$MAKE check
+cat foo.exp
+cat site.exp
+grep 'PASS: test_foo' tool.sum
+
+write_check_for bar >> tool.test/tool.exp
+write_check_for baz >> tool.test/tool.exp
+cat tool.test/tool.exp
+
+# Ensure that foo.exp will be newer than site.exp, which will
+# thus have to be remade.
+$sleep
+# With this, below we'll also check that settings in files coming later in
+# $(EXTRA_DEJAGNU_SITE_CONFIG) override those in files coming earlier.
+cat >> foo.exp <<'END'
+set bar "/foo/"
+set baz "/foo/"
+set qux "/foo/"
+END
+
+$MAKE check && { cat site.exp; exit 1; }
+grep 'PASS: test_foo' tool.sum
+grep 'FAIL: test_bar' tool.sum
+grep 'FAIL: test_baz' tool.sum
+
+cat >> Makefile.am << 'END'
+EXTRA_DEJAGNU_SITE_CONFIG += bar bar.dir/bar
+EXTRA_DIST += bar
+DISTCLEANFILES = bar.dir/bar
+bar.dir/bar:
+ test -d bar.dir || mkdir bar.dir
+ echo 'set baz "/baz/"' > $@
+END
+
+echo 'set bar "/bar/"' > bar
+# This will allow us to check one more time that settings in files
+# coming later in $(EXTRA_DEJAGNU_SITE_CONFIG) override those in
+# files coming earlier.
+echo 'set baz "/xyz/"' >> bar
+
+# Ensure that the Makefile will be newer than site.exp, which will
+# thus have to be remade.
+$sleep
+$AUTOMAKE Makefile
+./config.status Makefile
+
+$MAKE check || { cat site.exp; exit 1; }
+cat site.exp
+cat bar.dir/bar
+$FGREP '/bar/' site.exp
+$FGREP '/baz/' site.exp
+grep 'PASS: test_foo' tool.sum
+grep 'PASS: test_bar' tool.sum
+grep 'PASS: test_baz' tool.sum
+
+# Check that the features we're testing behave well in VPATH builds.
+$MAKE distcheck
+
+# Check that the user can edit the site.exp file, and that his edits
+# are retained.
+write_check_for zardoz >> tool.test/tool.exp
+cat tool.test/tool.exp
+echo 'set zardoz "/zardoz/"' >> site.exp
+
+$MAKE check
+cat site.exp
+grep 'PASS: test_zardoz' tool.sum
+
+cat >> Makefile.am << 'END'
+EXTRA_DEJAGNU_SITE_CONFIG += quux.exp
+quux.exp:
+ echo 'set zardoz "/quux/"' > $@
+END
+
+# Ensure that the Makefile will be newer than on site.exp, which will
+# thus have to be remade.
+$sleep
+$AUTOMAKE Makefile
+./config.status Makefile
+grep 'zardoz.*/quux/' Makefile
+
+$MAKE site.exp
+cat site.exp
+cat quux.exp
+grep 'zardoz.*/quux/' site.exp
+
+$MAKE check
+grep 'PASS: test_zardoz' tool.sum
+grep 'zardoz: /zardoz/' tool.log
+grep 'zardoz.*quux' tool.log && exit 1
+
+# Check that files in $(EXTRA_DEJAGNU_SITE_CONFIG) are not distributed
+# by default.
+$MAKE distdir
+ls -l $distdir
+test ! -e $distdir/bar.dir/bar
+test ! -e $distdir/quux.exp
+
+:
diff --git a/t/dejagnu-siteexp-useredit.sh b/t/dejagnu-siteexp-useredit.sh
new file mode 100644
index 000000000..b8d596641
--- /dev/null
+++ b/t/dejagnu-siteexp-useredit.sh
@@ -0,0 +1,67 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that the user can edit the Makefile-generated site.exp, and
+# have its edits survive to the remaking of that file.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = dejagnu
+DEJATOOL = foo
+END
+
+# Deliberately select a variable defined automatically by
+# the Makefile-generated site.exp.
+mkdir foo.test
+cat > foo.test/foo.exp << 'END'
+send_user "objdir: $objdir\n"
+set pipe "|"
+if { $objdir == "${pipe}objdir${pipe}" } {
+ pass "test_obj"
+} else {
+ fail "test_obj"
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+./configure
+
+$MAKE site.exp
+echo 'set objdir "|objdir|"' >> site.exp
+cat site.exp
+$sleep
+touch Makefile
+$MAKE site.exp
+cat site.exp
+is_newest site.exp Makefile # Sanity check.
+grep '|objdir|' site.exp
+test $($FGREP -c '|objdir|' site.exp) -eq 1
+
+# We can do a "more semantic" check if DejaGnu is available.
+if runtest SOMEPROGRAM=someprogram --version; then
+ $MAKE check
+ grep 'PASS: test_obj' foo.sum
+fi
+
+:
diff --git a/t/dejagnu.sh b/t/dejagnu.sh
new file mode 100644
index 000000000..94bd4be0f
--- /dev/null
+++ b/t/dejagnu.sh
@@ -0,0 +1,35 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Superficial test to check that dejagnu tests and automake-style
+# tests can coexist. See also related deeper test 'check12.sh'.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = dejagnu
+TESTS = frob.test
+END
+
+test x"$am_serial_tests" = x"yes" || : > test-driver
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '^check-TESTS' Makefile.in
+grep '^check-DEJAGNU' Makefile.in
+
+:
diff --git a/t/dejagnu2.sh b/t/dejagnu2.sh
new file mode 100644
index 000000000..ad5f83d4a
--- /dev/null
+++ b/t/dejagnu2.sh
@@ -0,0 +1,46 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure we don't override the user's site.exp rule.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = dejagnu
+
+site.exp:
+ echo :GREP:ME: > $@
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -Wno-override
+
+grep 'site\.exp' Makefile.in
+test $(grep -c '^site\.exp:' Makefile.in) -eq 1
+
+./configure
+$MAKE site.exp
+grep ':GREP:ME:' site.exp
+
+AUTOMAKE_fails
+grep '^Makefile\.am:3:.*site\.exp' stderr
+
+:
diff --git a/t/dejagnu3.sh b/t/dejagnu3.sh
new file mode 100644
index 000000000..18aefdd38
--- /dev/null
+++ b/t/dejagnu3.sh
@@ -0,0 +1,69 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that the DejaGnu rules work for a simple program and test case.
+
+required=runtest
+. test-init.sh
+
+cat > hammer << 'END'
+#! /bin/sh
+echo "Everything looks like a nail to me!"
+END
+
+chmod +x hammer
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = dejagnu
+DEJATOOL = hammer
+AM_RUNTESTFLAGS = HAMMER=$(srcdir)/hammer
+EXTRA_DIST = hammer hammer.test/hammer.exp
+END
+
+mkdir hammer.test
+
+cat > hammer.test/hammer.exp << 'END'
+set test test
+spawn $HAMMER
+expect {
+ "Everything looks like a nail to me!" { pass "$test" }
+ default { fail "$test" }
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+./configure
+
+$MAKE check
+test -f hammer.log
+test -f hammer.sum
+
+$MAKE distcheck
+
+# Ensure that the envvar RUNTESTFLAGS is used.
+# Report from Mark Mitchell.
+RUNTESTFLAGS=--unknown-runtest-option; export RUNTESTFLAGS
+run_make -M -e FAIL check
+$FGREP 'unknown-runtest-option' output
+
+:
diff --git a/t/dejagnu4.sh b/t/dejagnu4.sh
new file mode 100644
index 000000000..c94573ea3
--- /dev/null
+++ b/t/dejagnu4.sh
@@ -0,0 +1,102 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that the DejaGnu rules work for a simple program and test case.
+# Also check PR 488: Failure of the first of several tools tested.
+# From the original bug report:
+# If you use dejagnu for testing and have multiple tools (i.e.,
+# multiple entries in the DEJATOOL variable) then the success/failure
+# of "make check" is only dependent on the success/failure of the
+# tests on the final tool. Thus there may be failures in the tests on
+# previous tools, but at first glance "make check" has passed.
+
+required=runtest
+. test-init.sh
+
+cat > hammer << 'END'
+#! /bin/sh
+echo "Everything looks like a nail to me!"
+END
+chmod +x hammer
+
+cat > spanner << 'END'
+#! /bin/sh
+echo "I'm a right spanner!"
+END
+chmod +x spanner
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = dejagnu
+
+DEJATOOL = hammer spanner
+
+AM_RUNTESTFLAGS = HAMMER=$(srcdir)/hammer SPANNER=$(srcdir)/spanner
+
+EXTRA_DIST = hammer hammer.test/hammer.exp
+EXTRA_DIST += spanner spanner.test/spanner.exp
+END
+
+mkdir hammer.test spanner.test
+
+cat > hammer.test/hammer.exp << 'END'
+set test test
+spawn $HAMMER
+expect {
+ "Everything looks like a nail to me!" { pass "$test" }
+ default { fail "$test" }
+}
+END
+
+cat > spanner.test/spanner.exp << 'END'
+set test test
+spawn $SPANNER
+expect {
+ "I'm a right spanner!" { pass "$test" }
+ default { fail "$test" }
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+./configure
+
+$MAKE check
+test -f hammer.log
+test -f hammer.sum
+test -f spanner.log
+test -f spanner.sum
+
+$MAKE distcheck
+
+# Test for PR 488.
+sed 's/E\(verything\)/Not e\1/' hammer > thammer
+mv -f thammer hammer
+chmod +x hammer
+
+rm -f hammer.log hammer.sum spanner.log spanner.sum
+$MAKE check && exit 1
+test -f hammer.log
+test -f hammer.sum
+test -f spanner.log
+test -f spanner.sum
+
+:
diff --git a/t/dejagnu5.sh b/t/dejagnu5.sh
new file mode 100644
index 000000000..7cfab7022
--- /dev/null
+++ b/t/dejagnu5.sh
@@ -0,0 +1,63 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that the DejaGnu rules do look for a testsuite named after
+# the package by default.
+
+required=runtest
+. test-init.sh
+
+package=$me
+
+cat > $package << 'END'
+#! /bin/sh
+echo "Ah, we have been expecting you, Mr. Blond."
+END
+chmod +x $package
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << END
+AUTOMAKE_OPTIONS = dejagnu
+EXTRA_DIST = $package $package.test/$package.exp
+AM_RUNTESTFLAGS = PACKAGE=\$(srcdir)/$package
+END
+
+mkdir $package.test
+cat > $package.test/$package.exp << 'END'
+set test "a_dejagnu_test"
+spawn $PACKAGE
+expect {
+ "Ah, we have been expecting you, Mr. Blond." { pass "$test" }
+ default { fail "$test" }
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+./configure
+
+$MAKE check
+test -f $package.log
+test -f $package.sum
+
+$MAKE distcheck
+
+:
diff --git a/t/dejagnu6.sh b/t/dejagnu6.sh
new file mode 100644
index 000000000..889916d5d
--- /dev/null
+++ b/t/dejagnu6.sh
@@ -0,0 +1,58 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that "make check" fails, when a DejaGnu test fails.
+
+required=runtest
+. test-init.sh
+
+cat > faildeja << 'END'
+#! /bin/sh
+echo whatever
+END
+chmod +x faildeja
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = dejagnu
+DEJATOOL = faildeja
+AM_RUNTESTFLAGS = FAILDEJA=$(srcdir)/faildeja
+END
+
+mkdir faildeja.test
+cat > faildeja.test/faildeja.exp << 'END'
+set test failing_deja_test
+spawn $FAILDEJA
+expect {
+ default { fail "$test" }
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+./configure
+
+$MAKE check && exit 1
+test -f faildeja.log
+test -f faildeja.sum
+$FGREP 'FAIL: failing_deja_test' faildeja.sum
+
+:
diff --git a/t/dejagnu7.sh b/t/dejagnu7.sh
new file mode 100644
index 000000000..4ee57ddac
--- /dev/null
+++ b/t/dejagnu7.sh
@@ -0,0 +1,62 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that "make check" fails, when we invoke DejaGnu tests with --status
+# (to detect TCL errors) on a file with TCL errors.
+
+required=runtest
+. test-init.sh
+
+runtest --help | grep '.*--status' \
+ || skip_ "dejagnu lacks support for '--status'"
+
+cat > failtcl << 'END'
+#! /bin/sh
+echo whatever
+END
+chmod +x failtcl
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = dejagnu
+DEJATOOL = failtcl
+AM_RUNTESTFLAGS = --status FAILTCL=$(srcdir)/failtcl
+END
+
+mkdir failtcl.test
+cat > failtcl.test/failtcl.exp << 'END'
+set test test
+spawn $FAILTCL
+expect {
+ default { pass "$test" }
+# Oops, no closing brace.
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+./configure
+
+$MAKE check && exit 1
+test -f failtcl.log
+test -f failtcl.sum
+$FGREP 'missing close-brace' failtcl.sum
+
+:
diff --git a/t/deleted-am.sh b/t/deleted-am.sh
new file mode 100644
index 000000000..696864ba9
--- /dev/null
+++ b/t/deleted-am.sh
@@ -0,0 +1,57 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# The stub rules emitted to work around the "deleted header problem"
+# for '.am' files shouldn't prevent the remake rules from correctly
+# erroring out when a still-required file is missing.
+# See also discussion about automake bug#9768.
+
+. test-init.sh
+
+echo AC_OUTPUT >> configure.ac
+
+echo 'include $(top_srcdir)/foobar.am' > Makefile.am
+echo 'include zardoz.am' > foobar.am
+: > zardoz.am
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+$MAKE
+
+rm -f zardoz.am
+using_gmake || $sleep # Required by BSD make.
+run_make -e FAIL -M
+# This error will come from automake, not make, so we can be stricter
+# in our grepping of it.
+grep 'cannot open.*zardoz\.am' output
+grep 'foobar\.am' output && exit 1 # No spurious error, please.
+
+# Try with one less indirection.
+: > foobar.am
+$AUTOMAKE Makefile
+./config.status Makefile
+$MAKE # Sanity check.
+rm -f foobar.am
+using_gmake || $sleep # Required by BSD make.
+run_make -e FAIL -M
+# This error will come from automake, not make, so we can be stricter
+# in our grepping of it.
+grep 'cannot open.*foobar\.am' output
+
+:
diff --git a/t/deleted-m4.sh b/t/deleted-m4.sh
new file mode 100644
index 000000000..41b07d69c
--- /dev/null
+++ b/t/deleted-m4.sh
@@ -0,0 +1,63 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# The stub rules emitted to work around the "deleted header problem"
+# for '.m4' files shouldn't prevent the remake rules from correctly
+# erroring out when a still-required file is missing.
+# See also discussion about automake bug#9768.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+m4_include([foobar.m4])
+AC_OUTPUT
+END
+
+: > Makefile.am
+
+echo 'm4_include([zardoz.m4])' > foobar.m4
+: > zardoz.m4
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+$MAKE
+
+rm -f zardoz.m4
+run_make -e FAIL -M
+# This error will come from aclocal, not make, so we can be stricter
+# in our grepping of it.
+grep ' foobar\.m4:1:.*zardoz\.m4.*does not exist' output
+# No spurious errors, please.
+$FGREP -v ' foobar.m4:1:' output | $FGREP 'foobar.m4' && exit 1
+
+# Try with one less indirection.
+: > foobar.m4
+$ACLOCAL --force
+$AUTOCONF
+./configure
+$MAKE # Sanity check.
+rm -f foobar.m4
+run_make -e FAIL -M
+# This error will come from aclocal, not make, so we can be stricter
+# in our grepping of it.
+grep 'foobar\.m4.*does not exist' output
+# No spurious errors, please (ok, this is really paranoid).
+$FGREP 'zardoz.m4' output && exit 1
+
+:
diff --git a/t/depacl2.sh b/t/depacl2.sh
new file mode 100644
index 000000000..11d0cf9d1
--- /dev/null
+++ b/t/depacl2.sh
@@ -0,0 +1,27 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure dependencies work when required macro is part of
+# autoconf.
+
+. test-init.sh
+
+echo 'AM_FOO' >> configure.ac
+echo 'AC_DEFUN([AM_FOO], [AC_REQUIRE([AC_HEADER_STDC])])' > AM_FOO.m4
+
+$ACLOCAL -I .
+
+:
diff --git a/t/depcomp-implicit-auxdir.sh b/t/depcomp-implicit-auxdir.sh
new file mode 100644
index 000000000..33d52e386
--- /dev/null
+++ b/t/depcomp-implicit-auxdir.sh
@@ -0,0 +1,70 @@
+#! /bin/sh
+# Copyright (C) 2000-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure a top-level depcomp file is found when
+# AC_CONFIG_AUX_DIR is not specified.
+
+. test-init.sh
+
+mkdir lib src
+
+cat >> configure.ac << 'END'
+AC_PROG_RANLIB
+AC_PROG_CC
+AM_PROG_AR
+AC_CONFIG_FILES([lib/Makefile src/Makefile])
+AC_OUTPUT
+END
+
+# Files required because we are using '--gnu'.
+: > INSTALL
+: > NEWS
+: > README
+: > COPYING
+: > AUTHORS
+: > ChangeLog
+
+cat > Makefile.am << 'END'
+SUBDIRS = lib src
+END
+
+cat > lib/Makefile.am << 'END'
+pkgdata_DATA =
+noinst_LIBRARIES = libfoo.a
+libfoo_a_SOURCES = foo.c
+END
+
+cat > lib/foo.c << 'END'
+int foo () {}
+END
+
+cat > src/Makefile.am << 'END'
+pkgdata_DATA =
+END
+
+: > ar-lib
+
+$ACLOCAL
+$AUTOMAKE --gnu
+
+# Make sure that depcomp is *not* included in the definition
+# of DIST_COMMON in lib/Makefile.in. If you change this test
+# so that more files are included in lib's DIST_COMMON definition,
+# then you must handle the case in which depcomp is listed on a
+# continued line.
+grep '^DIST_COMMON.*depcomp' lib/Makefile.in && exit 1
+
+:
diff --git a/t/depcomp.sh b/t/depcomp.sh
new file mode 100644
index 000000000..24425b912
--- /dev/null
+++ b/t/depcomp.sh
@@ -0,0 +1,48 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure depcomp is installed and found properly
+# when required for multiple directories.
+
+. test-init.sh
+
+cat > configure.ac << END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([subdir/Makefile subdir2/Makefile])
+AC_PROG_CC
+AC_OUTPUT
+END
+
+rm -f depcomp
+mkdir subdir
+mkdir subdir2
+
+cat > subdir/Makefile.am << 'END'
+noinst_PROGRAMS = foo
+foo_SOURCES = foo.c
+END
+
+cp subdir/Makefile.am subdir2/Makefile.am
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+
+# There used to be a bug where this was created in the first subdir with C
+# sources in it instead of in $top_srcdir or $ac_auxdir.
+test -f depcomp
+
+:
diff --git a/t/depcomp2.sh b/t/depcomp2.sh
new file mode 100644
index 000000000..0ea91b854
--- /dev/null
+++ b/t/depcomp2.sh
@@ -0,0 +1,53 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure that depcomp is not used when it's not installed
+# From Pavel Roskin.
+
+required=cc
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_FILES([subdir/Makefile])
+AC_PROG_CC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+SUBDIRS = subdir
+END
+
+rm -f depcomp
+mkdir subdir
+
+cat > subdir/Makefile.in << 'END'
+foo:
+ $(CC) -o foo foo.c
+END
+
+: > subdir/foo.c
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+$AUTOCONF
+./configure 2>stderr || { cat stderr >&2; exit 1; }
+cat stderr >&2
+# Ignore warning messages sometimes seen on Mac OS X; they are
+# not automake's fault anyway, but either autoconf's or Mac's.
+sed '/rm:.*conftest\.dSYM/d' stderr >stderr2
+test -s stderr2 && { cat stderr2; exit 1; }
+
+:
diff --git a/t/depcomp8a.sh b/t/depcomp8a.sh
new file mode 100644
index 000000000..e18318061
--- /dev/null
+++ b/t/depcomp8a.sh
@@ -0,0 +1,83 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for regressions in computation of names of .Po files for
+# automatic dependency tracking.
+# Keep this in sync with sister test 'depcomp8b.sh', which checks the
+# same thing for libtool objects.
+
+required=cc
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = zardoz
+zardoz_SOURCES = foo.c sub/bar.c
+END
+
+mkdir sub
+cat > foo.c << 'END'
+int main (void)
+{
+ extern int bar (void);
+ return bar ();
+}
+END
+cat > sub/bar.c << 'END'
+int bar (void)
+{
+ return 0;
+}
+END
+
+$ACLOCAL
+# FIXME: stop disabling the warnings in the 'unsupported' category
+# FIXME: once the 'subdir-objects' option has been mandatory.
+$AUTOMAKE -a -Wno-unsupported
+grep '\.P' Makefile.in # For debugging.
+grep '\./\$(DEPDIR)/foo\.Po' Makefile.in
+grep '\./\$(DEPDIR)/bar\.Po' Makefile.in
+grep '/\./\$(DEPDIR)' Makefile.in && exit 1
+
+$AUTOCONF
+# Don't reject slower dependency extractors, for better coverage.
+./configure --enable-dependency-tracking
+$MAKE
+cross_compiling || ./zardoz
+DISTCHECK_CONFIGURE_FLAGS='--enable-dependency-tracking' $MAKE distcheck
+
+# Try again with subdir-objects option.
+
+echo AUTOMAKE_OPTIONS = subdir-objects >> Makefile.am
+
+$AUTOMAKE
+grep '\.P' Makefile.in # For debugging.
+grep '\./\$(DEPDIR)/foo\.Po' Makefile.in
+grep '[^a-zA-Z0-9_/]sub/\$(DEPDIR)/bar\.Po' Makefile.in
+$EGREP '/(\.|sub)/\$\(DEPDIR\)' Makefile.in && exit 1
+
+$AUTOCONF
+# Don't reject slower dependency extractors, for better coverage.
+./configure --enable-dependency-tracking
+$MAKE
+cross_compiling || ./zardoz
+DISTCHECK_CONFIGURE_FLAGS='--enable-dependency-tracking' $MAKE distcheck
+
+:
diff --git a/t/depcomp8b.sh b/t/depcomp8b.sh
new file mode 100644
index 000000000..a4d5a77d6
--- /dev/null
+++ b/t/depcomp8b.sh
@@ -0,0 +1,78 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for regressions in computation of names of .Plo files for
+# automatic dependency tracking.
+# Keep this in sync with sister test 'depcomp8a.sh', which checks the
+# same thing for non-libtool objects.
+
+required='cc libtoolize'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+#x AM_PROG_CC_C_O
+AM_PROG_AR
+AC_PROG_LIBTOOL
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+## FIXME: stop disabling the warnings in the 'unsupported' category
+## FIXME: once the 'subdir-objects' option has been mandatory.
+AUTOMAKE_OPTIONS = -Wno-unsupported
+lib_LTLIBRARIES = libzardoz.la
+libzardoz_la_SOURCES = foo.c sub/bar.c
+END
+
+mkdir sub
+echo 'int foo (void) { return 0; }' > foo.c
+echo 'int bar (void) { return 0; }' > sub/bar.c
+
+libtoolize
+
+$ACLOCAL
+# FIXME: stop disabling the warnings in the 'unsupported' category
+# FIXME: once the 'subdir-objects' option has been mandatory.
+$AUTOMAKE -a -Wno-unsupported
+grep '\.P' Makefile.in # For debugging.
+grep '\./\$(DEPDIR)/foo\.Plo' Makefile.in
+grep '\./\$(DEPDIR)/bar\.Plo' Makefile.in
+grep '/\./\$(DEPDIR)' Makefile.in && exit 1
+
+$AUTOCONF
+# Don't reject slower dependency extractors, for better coverage.
+./configure --enable-dependency-tracking
+$MAKE
+DISTCHECK_CONFIGURE_FLAGS='--enable-dependency-tracking' $MAKE distcheck
+
+# Try again with subdir-objects option.
+
+echo AUTOMAKE_OPTIONS += subdir-objects >> Makefile.am
+
+$AUTOMAKE
+grep '\.P' Makefile.in # For debugging.
+grep '\./\$(DEPDIR)/foo\.Plo' Makefile.in
+grep '[^a-zA-Z0-9_/]sub/\$(DEPDIR)/bar\.Plo' Makefile.in
+$EGREP '/(\.|sub)/\$\(DEPDIR\)' Makefile.in && exit 1
+
+$AUTOCONF
+# Don't reject slower dependency extractors, for better coverage.
+./configure --enable-dependency-tracking
+$MAKE
+DISTCHECK_CONFIGURE_FLAGS='--enable-dependency-tracking' $MAKE distcheck
+
+:
diff --git a/t/depdist.sh b/t/depdist.sh
new file mode 100644
index 000000000..cc35bc710
--- /dev/null
+++ b/t/depdist.sh
@@ -0,0 +1,74 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure depcomp is found for the distribution.
+# From Eric Magnien.
+
+required=cc
+. test-init.sh
+
+rm -f configure.ac
+
+mkdir config
+for i in *; do
+ if test "$i" != "config"; then
+ mv -f "$i" config
+ fi
+done
+
+cat > configure.ac << END
+AC_INIT([$me], [1.0])
+AC_CONFIG_AUX_DIR([config])
+AM_INIT_AUTOMAKE
+AC_PROG_CC
+AC_CONFIG_FILES([subdir/Makefile Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+SUBDIRS = subdir
+check-local: test1 test2
+.PHONY: test1 test2
+test1:
+ echo ' ' $(DIST_COMMON) ' ' | grep '[ /]config/depcomp '
+test2: distdir
+ ls -l $(distdir)/*
+ test -f $(distdir)/config/depcomp
+END
+
+mkdir subdir
+cat > subdir/foo.c << 'END'
+int main(void)
+{
+ return 0;
+}
+END
+
+cat > subdir/Makefile.am << 'END'
+bin_PROGRAMS = foo
+foo_SOURCES = foo.c
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+./configure
+
+$MAKE check
+$MAKE distcheck
+
+:
diff --git a/t/depend-postproc.sh b/t/depend-postproc.sh
new file mode 100644
index 000000000..24f30a59f
--- /dev/null
+++ b/t/depend-postproc.sh
@@ -0,0 +1,71 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check to make sure we recognize a Makefile.in, even if post-processed
+# and renamed. The particularly tricky code for automatic dependency
+# tracking support used to have issues with that.
+
+required=cc
+. test-init.sh
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE
+AC_PROG_CC
+AC_CONFIG_FILES([myMakefile])
+dnl: AC_CONFIG_LINKS([Makefile:Makefile])
+AC_OUTPUT
+END
+
+cat > myMakefile.am <<'END'
+bin_PROGRAMS = fred
+fred_SOURCES = fred.c
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -- myMakefile
+
+mv myMakefile.in myMakefile.old
+echo '# Post-processed by post-processor 3.14.' > myMakefile.in
+cat myMakefile.old >> myMakefile.in
+
+./configure
+
+test -f .deps/fred.Po || test -f _deps/fred.Po || exit 1
+
+$sleep
+
+cat > Makefile <<'END'
+include myMakefile
+END
+
+sed 's/^dnl: *//' configure.ac >t
+mv -f t configure.ac
+
+$MAKE myMakefile Makefile
+
+rm -rf .deps _deps
+./config.status
+
+test ! -e fred.c
+echo 'int main (void) { return 0; }' > fred.c
+
+$MAKE
+test -f .deps/fred.Po || test -f _deps/fred.Po || exit 1
+$MAKE distcheck
+
+:
diff --git a/t/depend.sh b/t/depend.sh
new file mode 100644
index 000000000..641741137
--- /dev/null
+++ b/t/depend.sh
@@ -0,0 +1,36 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# This tests for a bug reported by Henrik Frystyk Nielsen <frystyk@w3.org>
+# In some cases the auto-dependency can get confused and try
+# to '-include' a directory (if a backslash-newline appears in _SOURCES).
+
+. test-init.sh
+
+echo AC_PROG_CC >> configure.ac
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = fred
+fred_SOURCES = \
+ fred.c
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+test 1 -eq $(grep -c '^@AMDEP_TRUE@@am__include@' Makefile.in)
+
+:
diff --git a/t/depend3.sh b/t/depend3.sh
new file mode 100644
index 000000000..770a6e569
--- /dev/null
+++ b/t/depend3.sh
@@ -0,0 +1,46 @@
+#! /bin/sh
+# Copyright (C) 1997-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test _DEPENDENCIES variable. From Lee Iverson.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_SUBST(DEPS)
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = TerraVision
+
+TerraVision_SOURCES = \
+ AboutDialog.c Clock.c Dialogs.c DrawModel.c \
+ TsmWidget.c Gats.c GATSDialogs.c Model.c ModelAnim.c \
+ ScannedMap.c \
+ TerraVision.c TerraVisionAvs.c TerraVisionCAVE.c \
+ Texture.c ThreeDControl.c ThreeDPanel.c \
+ ThreeDWidget.c ThreeDWidget1.c TileManager.c \
+ TileRequester.c TwoDWidget.c \
+ Visible.c RequestGenerator.c X11FrameGrab.c \
+ matrix.c pixmaps.c xpmhash.c xpmread.c xcolor.c xv24to8.c
+
+DEPS = @DEPS@
+
+TerraVision_DEPENDENCIES = $(DEPS)
+END
+
+$ACLOCAL
+$AUTOMAKE
diff --git a/t/depend4.sh b/t/depend4.sh
new file mode 100644
index 000000000..14d80f5e3
--- /dev/null
+++ b/t/depend4.sh
@@ -0,0 +1,36 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that dependencies are included when there are many header files.
+
+. test-init.sh
+
+echo AC_PROG_CC >> configure.ac
+
+$ACLOCAL
+
+headers=
+for header in one.h two.h three.h four.h five.h six.h; do
+ headers="$headers $header"
+ unindent > Makefile.am << END
+ bin_PROGRAMS = fred
+ fred_SOURCES = fred1.c $headers
+END
+ $AUTOMAKE
+ test 1 -eq $(grep -c '^@AMDEP_TRUE@@am__include@' Makefile.in)
+done
+
+:
diff --git a/t/depend5.sh b/t/depend5.sh
new file mode 100644
index 000000000..ce0a70315
--- /dev/null
+++ b/t/depend5.sh
@@ -0,0 +1,77 @@
+#! /bin/sh
+# Copyright (C) 2008-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that _AM_OUTPUT_DEPENDENCY_COMMANDS works with eval-style
+# quoting in $CONFIG_FILES, done by newer Autoconf.
+
+required=cc
+. test-init.sh
+
+cat >>configure.ac << END
+AC_PROG_CC
+AC_OUTPUT
+END
+
+cat > Makefile.am << END
+bin_PROGRAMS = foo
+foo_SOURCES = foo.c foo.h
+END
+
+cat >foo.c << END
+#include "foo.h"
+END
+: >foo.h
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+./configure --enable-dependency-tracking
+if test -d .deps; then
+ depdir=.deps
+elif test -d _deps; then
+ depdir=_deps
+else
+ depdir=
+fi
+
+# For the fun of it, we should also cope with Makefile names
+# that contain weird characters and newer.
+# Pick the first name that the file system will accept.
+for name in \
+ 'weird name with $ `#() &! characters"' \
+ 'weird name with $ `#() characters"' \
+ 'weird name with characters'
+do
+ cp Makefile.in "$name.in" && break || :
+done
+
+for arg in Makefile \
+ --file=Makefile \
+ "--file=$name"
+do
+ rm -rf .deps _deps
+ ./config.status "$arg" depfiles >stdout 2>stderr ||
+ { cat stdout; cat stderr >&2; exit 1; }
+ cat stdout
+ cat stderr >&2
+ grep '[Nn]o such file' stderr && exit 1
+
+ if test -n "$depdir"; then
+ test -d $depdir || exit 1
+ fi
+done
+
+:
diff --git a/t/depend6.sh b/t/depend6.sh
new file mode 100644
index 000000000..6de2e3cf8
--- /dev/null
+++ b/t/depend6.sh
@@ -0,0 +1,46 @@
+#! /bin/sh
+# Copyright (C) 2008-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check for _AM_OUTPUT_DEPENDENCY_COMMANDS grouping bug,
+# reported by Markus Duft.
+
+. test-init.sh
+
+cat >>configure.ac << END
+AC_PROG_CC
+AC_OUTPUT
+END
+
+cat > Makefile.am << END
+bin_PROGRAMS = foo
+foo_SOURCES = foo.c foo.h
+END
+
+cat >foo.c << END
+#include "foo.h"
+END
+: >foo.h
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+./configure --disable-dependency-tracking 2>stderr || {
+ stat=$?; cat stderr >&2; exit $stat;
+}
+cat stderr >&2
+grep shift stderr && exit 1
+
+:
diff --git a/t/deprecated-acinit.sh b/t/deprecated-acinit.sh
new file mode 100644
index 000000000..e447dd122
--- /dev/null
+++ b/t/deprecated-acinit.sh
@@ -0,0 +1,52 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that automake and autoconf complain about an old-style AC_INIT
+# call used with a new-style AM_AUTOMAKE_INIT call.
+
+. test-init.sh
+
+: > Makefile.am
+
+# We'll need a proper aclocal.m4, but aclocal is expected to fail
+# later, so get and store it now.
+$ACLOCAL
+mv aclocal.m4 aclocal-m4.sav
+
+errmsg='AC_INIT should be called with package and version argument'
+
+for ac_init in AC_INIT 'AC_INIT([Makefile.am])'; do
+ for am_init_automake in AM_INIT_AUTOMAKE 'AM_INIT_AUTOMAKE([1.11])'; do
+ rm -rf autom4te*.cache aclocal.m4
+ unindent > configure.ac <<END
+ $ac_init
+ $am_init_automake
+ AC_CONFIG_FILES([Makefile])
+END
+ cat configure.ac # For debugging.
+ $ACLOCAL 2>stderr && { cat stderr >&2; exit 1; }
+ cat stderr >&2
+ grep "^configure\\.ac:.* $errmsg" stderr
+ cp aclocal-m4.sav aclocal.m4
+ $AUTOCONF 2>stderr && { cat stderr >&2; exit 1; }
+ cat stderr >&2
+ grep "^configure\\.ac:.* $errmsg" stderr
+ AUTOMAKE_fails
+ grep "^configure\\.ac:.* $errmsg" stderr
+ done
+done
+
+:
diff --git a/t/destdir.sh b/t/destdir.sh
new file mode 100644
index 000000000..5323a1ee7
--- /dev/null
+++ b/t/destdir.sh
@@ -0,0 +1,50 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that 'make distcheck' can find some $(DESTDIR) omissions.
+# PR/186.
+
+# The feature we test here relies on read-only directories.
+# It will only work for non-root users.
+required='ro-dir'
+
+. test-init.sh
+
+cat >> configure.ac <<'EOF'
+AC_OUTPUT
+EOF
+
+cat > Makefile.am <<'EOF'
+dist_data_DATA = foo
+
+# This rule is bogus because it doesn't use $(DESTDIR) on the
+# second argument of cp. distcheck is expected to catch this.
+install-data-hook:
+ cp $(DESTDIR)$(datadir)/foo $(datadir)/bar
+
+uninstall-local:
+ rm -f $(DESTDIR)$(datadir)/bar
+EOF
+
+: > foo
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+./configure
+$MAKE distcheck && exit 1
+
+:
diff --git a/t/dir-named-obj-is-bad.sh b/t/dir-named-obj-is-bad.sh
new file mode 100644
index 000000000..602d4b48c
--- /dev/null
+++ b/t/dir-named-obj-is-bad.sh
@@ -0,0 +1,61 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Naming a subdirectory 'obj/' is a bad idea. Automake should say so.
+
+. test-init.sh
+
+mkdir obj
+
+cat >>configure.ac << 'END'
+AC_CONFIG_FILES([obj/Makefile])
+AC_OUTPUT
+END
+
+: > obj/Makefile.am
+echo 'SUBDIRS = obj' > Makefile.am
+
+$ACLOCAL
+
+AUTOMAKE_fails
+grep "^Makefile\.am:1:.*'obj'.*BSD make" stderr
+
+cat >Makefile.am <<'END'
+SUBDIRS = @STH@
+FOO = obj
+DIST_SUBDIRS = $(FOO)
+END
+
+AUTOMAKE_fails
+grep "^Makefile\\.am:2:.*'obj'.*BSD make" stderr
+
+rm -rf autom4te*.cache
+
+cat >configure.ac << 'END'
+AC_INIT([x], [1.0])
+AC_CONFIG_AUX_DIR([obj])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile])
+END
+
+rm -f obj/Makefile.am
+: > Makefile.am
+
+$ACLOCAL
+AUTOMAKE_fails -a
+grep "^configure\.ac:2:.*'obj'.*BSD make" stderr
+
+:
diff --git a/t/discover.sh b/t/discover.sh
new file mode 100644
index 000000000..3159a975c
--- /dev/null
+++ b/t/discover.sh
@@ -0,0 +1,43 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure LIBOBJS file cannot be mentioned explicitly.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_RANLIB
+AM_PROG_AR
+AC_LIBOBJ([fsusage])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+noinst_LIBRARIES = libtu.a
+libtu_a_SOURCES = fsusage.c
+libtu_a_LIBADD = @LIBOBJS@
+END
+
+: > fsusage.c
+: > ar-lib
+
+$ACLOCAL
+AUTOMAKE_fails
+
+grep 'automatically discovered.*fsusage\.c.*explicitly mentioned' stderr
+
+:
diff --git a/t/dist-auxdir-many-subdirs.sh b/t/dist-auxdir-many-subdirs.sh
new file mode 100644
index 000000000..486375fbe
--- /dev/null
+++ b/t/dist-auxdir-many-subdirs.sh
@@ -0,0 +1,137 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# It should be legitimate for many subdir Makefiles to require the
+# same config-aux files.
+
+am_create_testdir=empty
+required=cc
+. test-init.sh
+
+count=0
+ocwd=$(pwd) || fatal_ "cannot get current working directory"
+
+# Usage: do_check [--add-missing] [CONFIG-AUXDIR-PATH=.]
+do_check ()
+{
+ case $1 in
+ -a|--add-missing) add_missing=yes; shift;;
+ *) add_missing=no;;
+ esac
+ auxdir=${1-.}
+
+ count=$(($count + 1))
+ mkdir T$count.d
+ cd T$count.d
+
+ distdir=$me-$count
+ unindent > configure.ac << END
+ AC_INIT([$me], [$count])
+ AC_CONFIG_AUX_DIR([$auxdir])
+ AM_INIT_AUTOMAKE
+ AC_PROG_CC
+ # We don't want to require python or emcas in this test, so
+ # the tricks below.
+ AM_PATH_PYTHON([2.2], [], [:])
+ EMACS=no; AM_PATH_LISPDIR
+ AC_CONFIG_FILES([Makefile])
+END
+
+ unindent > Makefile.stub <<'END'
+ ## For depcomp.
+ bin_PROGRAMS = foo
+ foo_SOURCES = foo.c
+ ## For py-compile.
+ python_PYTHON = bar.py
+ ## For test-driver.
+ TESTS =
+END
+
+ required_files='
+ install-sh
+ missing
+ compile
+ depcomp
+ py-compile
+ test-driver
+ '
+
+ echo "SUBDIRS =" > Makefile.am
+
+ suffixes='0 1 2 3 4 5 6 7 8 9'
+
+ for x in $suffixes; do
+ mkdir sub$x
+ echo "SUBDIRS += sub$x" >> Makefile.am
+ echo "AC_CONFIG_FILES([sub$x/Makefile])" >> configure.ac
+ cp Makefile.stub sub$x/Makefile.am
+ echo 'int main (void) { return 0; }' > sub$x/foo.c
+ touch sub$x/bar.py sub$x/baz.el
+ done
+ echo AC_OUTPUT >> configure.ac
+
+ $ACLOCAL
+ $AUTOCONF
+
+ "$am_scriptdir"/install-sh -d $auxdir \
+ || fatal_ "creating directory '$auxdir' with install-sh"
+ if test $add_missing = yes; then
+ $AUTOMAKE -a --copy
+ for f in $required_files; do
+ test -f $auxdir/$f
+ # To ensure that if a auxiliary file is required and distributed
+ # by many Makefiles, the "dist" rule won't try to copy it multiple
+ # times in $(distdir).
+ chmod a-w $auxdir/$f
+ done
+ else
+ for f in $required_files; do
+ cp "$am_scriptdir"/$f $auxdir/$f \
+ || fatal_ "faild to fetch auxiliary script '$f'"
+ # See comments above.
+ chmod a-w $auxdir/$f
+ done
+ $AUTOMAKE
+ fi
+
+ for vpath in : false; do
+ if $vpath; then
+ mkdir build
+ cd build
+ srcdir=..
+ else
+ srcdir=.
+ fi
+ $srcdir/configure
+ $MAKE distdir
+ find $distdir # For debugging.
+ for f in $required_files; do
+ test -f $distdir/$auxdir/$f
+ done
+ cd $srcdir
+ done
+
+ cd "$ocwd" || fatal_ "cannot chdir back to '$ocwd'"
+}
+
+do_check .
+do_check --add-missing .
+do_check build-aux
+do_check --add-missing build-aux
+do_check a/b/c
+do_check --add-missing a/b/c
+
+:
diff --git a/t/dist-auxfile-2.sh b/t/dist-auxfile-2.sh
new file mode 100644
index 000000000..f9a60d7fa
--- /dev/null
+++ b/t/dist-auxfile-2.sh
@@ -0,0 +1,60 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Files specified by AC_REQUIRE_AUX_FILE must exist, and if a Makefile
+# is present in the build-aux directory, they correctly get automatically
+# distributed.
+# Related to automake bug#9651.
+
+am_create_testdir=empty
+. test-init.sh
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AC_CONFIG_AUX_DIR([sub])
+AM_INIT_AUTOMAKE
+AC_REQUIRE_AUX_FILE([zardoz])
+AC_CONFIG_FILES([Makefile sub/Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+SUBDIRS = sub
+test: distdir
+ ls -l $(distdir) $(distdir)/* ;: For debugging.
+ test -f $(distdir)/sub/zardoz
+.PHONY: test
+check-local: test
+END
+
+mkdir sub
+: > sub/Makefile.am
+
+echo dummy > sub/zardoz
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+test -f sub/install-sh
+# Should work also without '--add-missing'.
+$AUTOMAKE
+
+./configure
+
+$MAKE test
+$MAKE distcheck
+
+:
diff --git a/t/dist-auxfile.sh b/t/dist-auxfile.sh
new file mode 100644
index 000000000..70adcae3d
--- /dev/null
+++ b/t/dist-auxfile.sh
@@ -0,0 +1,95 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Files specified by AC_REQUIRE_AUX_FILE must exist, and they get
+# automatically distributed by the top-level Makefile.am.
+# Automake bug#9651 reported that this didn't happen when the build-aux
+# directory was set to '.' by AC_CONFIG_AUX_DIR.
+
+am_create_testdir=empty
+. test-init.sh
+
+i=0
+for auxdir in build-aux ''; do
+
+ echo "*** Testing with auxdir '$auxdir' ***"
+
+ i=$(($i + 1))
+ mkdir T$i.d
+ cd T$i.d
+
+ unindent > configure.ac <<END
+ AC_INIT([$me], [1.0])
+ AC_CONFIG_AUX_DIR([${auxdir:-.}])
+ AM_INIT_AUTOMAKE
+ AC_REQUIRE_AUX_FILE([foo.txt])
+ AC_REQUIRE_AUX_FILE([bar.sh])
+ AC_REQUIRE_AUX_FILE([zardoz])
+ AC_CONFIG_FILES([Makefile subdir/Makefile])
+ AC_OUTPUT
+END
+
+ echo auxdir = ${auxdir:+"$auxdir/"} > Makefile.am
+ unindent >> Makefile.am <<'END'
+ SUBDIRS = subdir
+ test: distdir
+ ls -l $(distdir) $(distdir)/* ;: For debugging.
+ @echo DIST_COMMON = $(DIST_COMMON) ;: Likewise.
+ echo ' ' $(DIST_COMMON) ' ' | grep '[ /]$(auxdir)foo.txt '
+ echo ' ' $(DIST_COMMON) ' ' | grep '[ /]$(auxdir)bar.sh '
+ echo ' ' $(DIST_COMMON) ' ' | grep '[ /]$(auxdir)zardoz '
+ test -f $(distdir)/$(auxdir)foo.txt
+ test -f $(distdir)/$(auxdir)bar.sh
+ test -f $(distdir)/$(auxdir)zardoz
+ .PHONY: test
+ check-local: test
+END
+
+ mkdir subdir
+ : > subdir/Makefile.am
+
+ test -z "$auxdir" || mkdir "$auxdir" || exit 99
+
+ if test -z "$auxdir"; then
+ auxdir=.
+ auxdir_rx='\.'
+ else
+ auxdir_rx=$auxdir
+ fi
+
+ $ACLOCAL
+ $AUTOCONF
+
+ AUTOMAKE_fails
+ grep "^configure\\.ac:4:.* required file.*$auxdir_rx/foo\\.txt" stderr
+ grep "^configure\\.ac:5:.* required file.*$auxdir_rx/bar\\.sh" stderr
+ grep "^configure\\.ac:6:.* required file.*$auxdir_rx/zardoz" stderr
+
+ touch $auxdir/foo.txt $auxdir/bar.sh $auxdir/zardoz
+ cp "$am_scriptdir"/missing "$am_scriptdir"/install-sh $auxdir \
+ || fatal_ "fetching auxiliary scripts 'missing' and 'install-sh'"
+ $AUTOMAKE
+ ./configure
+ $MAKE test
+ $EGREP '(foo\.txt|bar\.sh|zardoz)' subdir/Makefile.in && exit 1
+
+ $MAKE distcheck
+
+ cd ..
+
+done
+
+:
diff --git a/t/dist-formats.tap b/t/dist-formats.tap
new file mode 100644
index 000000000..a597964c2
--- /dev/null
+++ b/t/dist-formats.tap
@@ -0,0 +1,469 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check support for different compression formats used by distribution
+# archives.
+
+am_create_testdir=empty
+. test-init.sh
+
+plan_ 66
+
+# ---------------------------------------------------- #
+# Common and/or auxiliary subroutines and variables. #
+# ---------------------------------------------------- #
+
+ocwd=$(pwd) || fatal_ "getting current working directory"
+
+unset TAR
+
+# Create common aclocal.m4 file, for later tests.
+mkdir setup \
+ && cd setup \
+ && echo 'AC_INIT([x], [0]) AM_INIT_AUTOMAKE' > configure.ac \
+ && $ACLOCAL \
+ && mv aclocal.m4 .. \
+ && cd .. \
+ && rm -rf setup \
+ || fatal_ "creating common aclocal.m4 file"
+
+# Some make implementations (e.g., HP-UX) don't grok '-j', some require
+# no space between '-j' and the number of jobs (e.g., older GNU make
+# versions), and some *do* require a space between '-j' and the number
+# of jobs (e.g., Solaris dmake). We need a runtime test to see what
+# works.
+for MAKE_j4 in "$MAKE -j4" "$MAKE -j 4" false; do
+ echo all: | $MAKE_j4 -f - && break
+ : For shells with buggy 'set -e'.
+done
+
+# Set variables '$compressor' and '$suffix'.
+setup_vars_for_compression_format ()
+{
+ suffix=NONE compressor=NONE
+ case $1 in
+ gzip) suffix=tar.gz compressor=gzip ;;
+ lzip) suffix=tar.lz compressor=lzip ;;
+ xz) suffix=tar.xz compressor=xz ;;
+ bzip2) suffix=tar.bz2 compressor=bzip2 ;;
+ zip) suffix=zip compressor=zip ;;
+ *) fatal_ "invalid compression format '$1'";;
+ esac
+}
+
+have_compressor ()
+{
+ test $# -eq 1 || fatal_ "have_compressor(): bad usage"
+ if test $1 = gzip; then
+ # Assume gzip(1) is available on every reasonable portability target.
+ return 0
+ fi
+ needed_programs=$1
+ # Assume by default the other compressors we care about support the
+ # '--version' option. We'll special-case the one which don't.
+ checker_option=--version
+ case $1 in
+ bzip2)
+ # Do not use --version, or older versions bzip2 would try to
+ # compress stdin. This would cause binary output in the test
+ # logs, with potential breakage of our testsuite harness.
+ checker_option=--help
+ ;;
+ zip)
+ # OpenSolaris zip do not support the '--version' option, but
+ # accepts the '-v' one with a similar meaning (if no further
+ # arguments are given).
+ checker_option=-v
+ # Also, we need 'unzip' to decompress the created zipped archives
+ # (bug#15181).
+ needed_programs='zip unzip'
+ ;;
+ esac
+ # Redirect to stderr to avoid polluting the output, in case this
+ # function is used in a command substitution (as it is, later in
+ # this script).
+ for p in $needed_programs; do
+ $p $checker_option </dev/null >&2 || return 1
+ done
+ return 0
+}
+
+all_compression_formats='gzip lzip xz bzip2 zip'
+
+all_compressors=$(
+ for x in $all_compression_formats; do
+ setup_vars_for_compression_format $x
+ echo $compressor
+ done | tr "$nl" ' ')
+echo All compressors: $all_compressors
+
+missing_compressors=$(
+ for c in $all_compressors; do
+ have_compressor $c || echo $c
+ done | tr "$nl" ' ')
+echo Missing compressors: $missing_compressors
+
+# Redefine to avoid re-running the already executed checks.
+have_compressor ()
+{
+ case " $missing_compressors " in *\ $1\ *) false;; *) : ;; esac
+}
+
+have_all_compressors ()
+{
+ test -z "$missing_compressors"
+}
+
+start_subtest ()
+{
+ name=$1; shift
+ test -n "$name" || fatal_ "start_subtest: no subtest name given"
+ if test $# -gt 0; then
+ eval "$@" || fatal_ "start_subtest: evaluating assignments"
+ fi
+ ac_opts=$(echo $ac_opts | tr ',' ' ')
+ am_opts=$(echo $am_opts | tr ',' ' ')
+ mkdir "$name"
+ cd "$name"
+ unindent > configure.ac <<END
+ AC_INIT([$name], [1.0])
+ AM_INIT_AUTOMAKE([$ac_opts])
+ AC_CONFIG_FILES([Makefile])
+ AC_OUTPUT
+END
+ echo "AUTOMAKE_OPTIONS = $am_opts" > Makefile.am
+ # It is imperative that aclocal.m4 is copied after configure.ac has
+ # been created, to avoid a spurious trigger of the automatic remake
+ # rules for configure & co.
+ cp "$ocwd"/aclocal.m4 \
+ "$am_scriptdir"/missing \
+ "$am_scriptdir"/install-sh \
+ .
+}
+
+end_subtest ()
+{
+ unset name; unset ac_opts; unset am_opts;
+ cd "$ocwd" || fatal_ "couldn't chdir back to '$ocwd'"
+}
+
+command_ok_if_have_compressor ()
+{
+ if have_compressor "$compressor"; then
+ command_ok_ "$@"
+ else
+ skip_ -r "'$compressor' not available" "$1"
+ fi
+}
+
+can_compress ()
+{
+ test $# -eq 2 || fatal_ "can_compress: bad number of arguments"
+ tarname=$1 format=$2
+ setup_vars_for_compression_format "$format"
+
+ command_ok_ "'dist-$format' target always created" $MAKE -n dist-$format
+
+ command_ok_if_have_compressor "'make dist-$format' work by default" \
+ eval '
+ rm -rf *$tarname* \
+ && $MAKE dist-$format \
+ && test -f $tarname-1.0.$suffix \
+ && ls -l *$tarname* \
+ && test "$(echo *$tarname*)" = $tarname-1.0.$suffix'
+
+ unset suffix compressor format tarname
+}
+
+# ---------------------------------------- #
+# Defaults layout of the dist-* targets. #
+# ---------------------------------------- #
+
+start_subtest defaults
+
+command_ok_ "default [automake]" $AUTOMAKE
+command_ok_ "default [autoconf]" $AUTOCONF
+command_ok_ "default [configure]" ./configure
+command_ok_ "default [make distcheck]" $MAKE distcheck
+
+command_ok_ "'make dist' only builds *.tar.gz by default" \
+ test "$(ls *defaults*)" = defaults-1.0.tar.gz
+
+rm -rf *defaults*
+
+for fmt in $all_compression_formats; do
+ can_compress defaults $fmt
+done
+unset fmt
+
+end_subtest
+
+# ----------------------------------------------------------- #
+# Check diagnostic for no-dist-gzip without another dist-*. #
+# ----------------------------------------------------------- #
+
+nogzip_stderr ()
+{
+ grep "$1:.*no-dist-gzip" stderr \
+ && grep "$1:.* at least one archive format must be enabled" stderr
+}
+
+nogzip_automake_failure ()
+{
+ AUTOMAKE_fails -d "no-dist-gzip ($1) without other formats is an error"
+ command_ok_ "no-dist-gzip ($1) without other formats gives diagnostic" \
+ nogzip_stderr "$2"
+}
+
+start_subtest am-nogz-only am_opts=no-dist-gzip ac_opts=
+nogzip_automake_failure 'am' 'Makefile\.am:1'
+end_subtest
+
+start_subtest ac-nogz-only am_opts= ac_opts=no-dist-gzip
+nogzip_automake_failure 'ac' 'configure\.ac:2'
+end_subtest
+
+# ------------------------------------------------- #
+# Check use of no-dist-gzip with a dist-* option. #
+# ------------------------------------------------- #
+
+append_to_opt ()
+{
+ var=$1_opts val=$2
+ eval "$var=\${$var:+\"\$$var,\"}\$val" || fatal_ "evaluating \${$var}"
+ unset var val
+}
+
+nogzip ()
+{
+ test $#,$1,$3,$5 = 6,in,and,in \
+ && case $2,$6 in ac,ac|ac,am|am,ac|am,am) :;; *) false;; esac \
+ || fatal_ "nogzip: invalid usage"
+ format=$4 where_dist_nogzip=$2 where_dist_format=$6
+ shift 6
+
+ am_opts= ac_opts=
+ append_to_opt $where_dist_format dist-$format
+ append_to_opt $where_dist_nogzip no-dist-gzip
+ setup_vars_for_compression_format "$format"
+ # Do these before the am_opts and ac_opts variable can be munged
+ # by 'start_subtest'.
+ desc=
+ test -n "$am_opts" && desc=${desc:+"$desc "}"am=$am_opts"
+ test -n "$ac_opts" && desc=${desc:+"$desc "}"ac=$ac_opts"
+
+ start_subtest nogzip-$format am_opts=$am_opts ac_opts=$ac_opts
+
+ unindent >> Makefile.am <<END
+ check-ark-name:
+ test \$(DIST_ARCHIVES) = \$(distdir).$suffix
+ check-ark-exists:
+ test -f \$(distdir).$suffix
+ check-no-tar-gz:
+ test ! -f \$(distdir).tar.gz
+END
+
+ command_ok_ "$desc [automake]" $AUTOMAKE
+ command_ok_ "$desc [autoconf]" $AUTOCONF
+ command_ok_ "$desc [configure]" ./configure
+ command_ok_ "$desc [ark-name]" $MAKE check-ark-name
+ command_ok_if_have_compressor "$desc [distcheck]" $MAKE distcheck
+ command_ok_if_have_compressor "$desc [ark-exists]" $MAKE check-ark-exists
+ command_ok_ "$desc [no .tar.gz]" $MAKE check-no-tar-gz
+
+ unset desc
+
+ end_subtest
+}
+
+# $1 $2 $3 $4 $5 $6
+nogzip in am and bzip2 in am
+nogzip in ac and xz in am
+nogzip in am and lzip in ac
+nogzip in ac and zip in ac
+
+
+# ----------------------------------------------------------- #
+# The 'dist-gzip' target is created also with no-dist-gzip. #
+# ----------------------------------------------------------- #
+
+start_subtest dist-gzip-persistence am_opts=no-dist-gzip,dist-xz
+command_ok_ "dist-gzip persistence [automake]" $AUTOMAKE
+command_ok_ "dist-gzip persistence [autoconf]" $AUTOCONF
+command_ok_ "dist-gzip persistence [configure]" ./configure
+can_compress dist-gzip-persistence gzip
+end_subtest
+
+
+# ----------------------- #
+# Parallel compression. #
+# ----------------------- #
+
+# We only use formats requiring 'gzip', 'bzip2' and 'xz' programs,
+# since there are the most likely to be all found on the majority
+# of systems.
+
+start_subtest parallel-compression ac_opts=dist-bzip2 am_opts=dist-xz
+
+desc=gzip+bzip2+xz
+tarname=parallel-compression-1.0
+
+check_tarball ()
+{
+ format=$1
+ setup_vars_for_compression_format $format
+ (
+ tarball=$tarname.$suffix \
+ && test -f $tarball \
+ && mkdir check-$format \
+ && cp $tarball check-$format \
+ && cd check-$format \
+ && $compressor -d $tarball \
+ && tar xvf $tarname.tar \
+ && diff ../Makefile.in $tarname/Makefile.in \
+ && cd .. \
+ && rm -rf check-$format
+ )
+}
+
+command_ok_ "$desc [automake]" $AUTOMAKE
+
+if ! have_compressor xz && ! have_compressor bzip2; then
+ skip_reason="both 'bzip2' and 'xz' are unavailable"
+elif ! have_compressor xz; then
+ skip_reason="'xz' not available"
+elif ! have_compressor bzip2; then
+ skip_reason="'bzip2' not available"
+else
+ skip_reason=
+fi
+if test "$MAKE_j4" = false; then
+ test -z "$skip_reason" || skip_reason="$skip_reason, and "
+ skip_reason="${skip_reason}make concurrency unavailable"
+fi
+
+if test -n "$skip_reason"; then
+ skip_row_ 6 -r "$skip_reason" "$desc"
+else
+ command_ok_ "$desc [autoconf]" $AUTOCONF
+ command_ok_ "$desc [configure]" ./configure
+ command_ok_ "$desc [make -j4 dist-all]" $MAKE_j4 dist
+ ls -l # For debugging.
+ command_ok_ "$desc [check .tar.gz tarball]" check_tarball gzip
+ command_ok_ "$desc [check .tar.bz2 tarball]" check_tarball bzip2
+ command_ok_ "$desc [check .tar.xz tarball]" check_tarball xz
+fi
+
+unset tarname desc skip_reason
+
+end_subtest
+
+
+# --------------------------------------------------------- #
+# The various 'dist-*' targets can happily work together. #
+# --------------------------------------------------------- #
+
+start_subtest all-together
+
+desc='all compressors together'
+tarname=all-together-1.0
+
+echo 'AM_INIT_AUTOMAKE([' > am-init.m4
+echo 'AUTOMAKE_OPTIONS =' > Makefile.am
+
+# Add half 'dist-*' options to AM_INIT_AUTOMAKE, half to AUTOMAKE_OPTIONS.
+flip=:
+for fmt in $all_compression_formats; do
+ test $fmt = gzip && continue
+ if $flip; then
+ echo " dist-$fmt" >> am-init.m4
+ flip=false
+ else
+ echo "AUTOMAKE_OPTIONS += dist-$fmt" >> Makefile.am
+ flip=:
+ fi
+done
+unset flip fmt
+
+echo '])' >> am-init.m4
+
+sed 's/AM_INIT_AUTOMAKE.*/m4_include([am-init.m4])/' configure.ac > t
+mv -f t configure.ac
+
+# For debugging.
+cat Makefile.am
+cat configure.ac
+cat am-init.m4
+
+command_ok_ "$desc [aclocal]" $ACLOCAL --force
+command_ok_ "$desc [automake]" $AUTOMAKE
+command_ok_ "$desc [autoconf]" $AUTOCONF
+command_ok_ "$desc [configure]" ./configure
+
+if have_all_compressors; then
+ command_ok_ "$desc [make distcheck, real]" $MAKE distcheck
+else
+ skip_ -r "not all compressors available" "$desc [make distcheck, real]"
+fi
+
+# We fake existence of all the compressors here, so that we don't have
+# to require any of them to run the further tests. This is especially
+# important since it's very unlikely that a non-developer has all the
+# compression tools installed on his machine at the same time.
+
+mkdir bin
+cd bin
+cat > check-distdir <<END
+#!/bin/sh
+{ ls -l '$tarname' && diff Makefile.am '$tarname'/Makefile.am; } >&2 \
+ || { echo "== distdir fail =="; exit 1; }
+END
+cat > grep-distdir-error <<'END'
+#!/bin/sh
+grep 'distdir fail' && exit 1
+:
+END
+chmod a+x check-distdir grep-distdir-error
+for prog in tar $all_compressors; do
+ case $prog in
+ tar|zip) cp check-distdir $prog;;
+ *) cp grep-distdir-error $prog;;
+ esac
+done
+unset prog
+ls -l # For debugging.
+cd ..
+
+oPATH=$PATH
+PATH=$(pwd)/bin$PATH_SEPARATOR$PATH; export PATH
+
+command_ok_ \
+ "$desc ['make dist-all', stubbed]" \
+ $MAKE dist-all
+
+subdesc="$desc ['make dist -j4', stubbed]"
+if test "$MAKE_j4" = false; then
+ skip_ -r "make concurrency unavailable" "$subdesc"
+else
+ command_ok_ "$subdesc" $MAKE_j4 dist
+fi
+unset subdesc
+
+PATH=$oPATH; export PATH
+
+end_subtest
+
+:
diff --git a/t/dist-included-parent-dir.sh b/t/dist-included-parent-dir.sh
new file mode 100644
index 000000000..5ebb8f4bd
--- /dev/null
+++ b/t/dist-included-parent-dir.sh
@@ -0,0 +1,51 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure included files in parent directory are distributed.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+SUBDIRS = sub
+test: distdir
+ test -f $(distdir)/foo
+ test -f $(distdir)/bar
+ test 2 -gt `find $(distdir)/sub -type d | wc -l`
+END
+
+: > foo
+: > bar
+
+mkdir sub
+cat > sub/Makefile.am << 'END'
+include $(top_srcdir)/foo
+include ../bar
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+# Use --srcdir with an absolute path because it's harder
+# to support in 'distdir'.
+./configure --srcdir "$(pwd)"
+$MAKE test
+
+:
diff --git a/t/dist-install-sh.sh b/t/dist-install-sh.sh
new file mode 100644
index 000000000..441982e7b
--- /dev/null
+++ b/t/dist-install-sh.sh
@@ -0,0 +1,40 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for bug where install-sh not included in distribution.
+
+. test-init.sh
+
+echo AC_OUTPUT >> configure.ac
+
+cat > Makefile.am << 'END'
+pkgdata_DATA =
+.PHONY: test
+test: distdir
+ find $(distdir) ;: For debugging.
+ echo ' ' $(DISTFILES) ' ' | grep '[ /]install-sh '
+ echo ' ' $(DIST_COMMON) ' ' | grep '[ /]install-sh '
+ test -f $(distdir)/install-sh
+END
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+./configure
+$MAKE test
+
+:
diff --git a/t/dist-lzma.sh b/t/dist-lzma.sh
new file mode 100644
index 000000000..d5da5a3e6
--- /dev/null
+++ b/t/dist-lzma.sh
@@ -0,0 +1,41 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check support for no-dist-gzip with lzma.
+
+. test-init.sh
+
+errmsg='support for lzma.*removed'
+
+echo AUTOMAKE_OPTIONS = dist-lzma > Makefile.am
+$ACLOCAL --force
+AUTOMAKE_fails -Wnone -Wno-error
+grep "^Makefile\\.am:1:.*$errmsg" stderr
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE([no-dist-gzip dist-lzma])
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+END
+: > Makefile.am
+
+rm -rf autom4te*.cache
+$ACLOCAL
+AUTOMAKE_fails -Wnone -Wno-error
+grep "^configure\\.ac:2:.*$errmsg" stderr
+
+:
diff --git a/t/dist-missing-am.sh b/t/dist-missing-am.sh
new file mode 100644
index 000000000..7b564d6ef
--- /dev/null
+++ b/t/dist-missing-am.sh
@@ -0,0 +1,65 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# The stub rules emitted to work around the "deleted header problem"
+# for '.am' files shouldn't prevent "make" from diagnosing a missing
+# required '.am' file from a distribution tarball.
+# See discussion about automake bug#9768.
+
+. test-init.sh
+
+echo AC_OUTPUT >> configure.ac
+
+cat > Makefile.am <<'END'
+include $(srcdir)/foobar.am
+include $(srcdir)/zardoz.am
+END
+
+: > foobar.am
+: > zardoz.am
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+
+# A faulty distribution tarball, with a required '.am' file missing.
+# Building from it should fail, both for in-tree and VPATH builds.
+ocwd=$(pwd) || fatal_ "cannot get current working directory"
+for vpath in false :; do
+ $MAKE distdir
+ test -f $distdir/zardoz.am # Sanity check.
+ rm -f $distdir/zardoz.am
+ if $vpath; then
+ # We can't just build in a subdirectory of $distdir, otherwise
+ # we'll hit automake bug#10111.
+ mkdir vpath-distcheck
+ cd vpath-distcheck
+ ../$distdir/configure
+ else
+ cd $distdir
+ ./configure
+ fi
+ run_make -e FAIL -M
+ # This error comes from automake, not make, so we can be stricter
+ # in our grepping of it.
+ grep 'cannot open.*zardoz\.am' output
+ grep 'foobar\.am' output && exit 1 # No spurious error, please.
+ cd "$ocwd" || fatal_ "cannot chdir back to top-level test directory"
+done
+
+:
diff --git a/t/dist-missing-included-m4.sh b/t/dist-missing-included-m4.sh
new file mode 100644
index 000000000..0ba466873
--- /dev/null
+++ b/t/dist-missing-included-m4.sh
@@ -0,0 +1,67 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# The stub rules emitted to work around the "deleted header problem"
+# for '.m4' files shouldn't prevent "make" from diagnosing a missing
+# required '.m4' file from a distribution tarball.
+# See discussion about automake bug#9768.
+# See also sister test 'dist-missing-m4.sh'.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+m4_include([foobar.m4])
+m4_include([zardoz.m4])
+AC_OUTPUT
+END
+
+: > foobar.m4
+: > zardoz.m4
+
+: > Makefile.am
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+
+# A faulty distribution tarball, with a required '.m4' file missing.
+# Building from it should fail, both for in-tree and VPATH builds.
+ocwd=$(pwd) || fatal_ "cannot get current working directory"
+for vpath in false :; do
+ $MAKE distdir
+ test -f $distdir/zardoz.m4 # Sanity check.
+ rm -f $distdir/zardoz.m4
+ if $vpath; then
+ # We can't just build in a subdirectory of $distdir, otherwise
+ # we'll hit automake bug#10111.
+ mkdir vpath-distcheck
+ cd vpath-distcheck
+ ../$distdir/configure
+ else
+ cd $distdir
+ ./configure
+ fi
+ run_make -e FAIL -M
+ # This error will come from automake, not make, so we can be stricter
+ # in our grepping of it.
+ grep 'zardoz\.m4.*does not exist' output
+ grep 'foobar\.m4' output && exit 1 # No spurious error, please.
+ cd "$ocwd" || fatal_ "cannot chdir back to top-level test directory"
+done
+
+:
diff --git a/t/dist-missing-m4.sh b/t/dist-missing-m4.sh
new file mode 100644
index 000000000..a721e2789
--- /dev/null
+++ b/t/dist-missing-m4.sh
@@ -0,0 +1,69 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# The stub rules emitted to work around the "deleted header problem"
+# for '.m4' files shouldn't prevent "make" from diagnosing a missing
+# required '.m4' file from a distribution tarball.
+# See discussion about automake bug#9768.
+# See also sister test 'dist-missing-included-m4.sh'.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+m4_pattern_forbid([^MY_])
+MY_FOOBAR || exit 1
+MY_ZARDOZ || exit 1
+AC_OUTPUT
+END
+
+mkdir m4
+echo 'AC_DEFUN([MY_FOOBAR], [:])' > m4/foobar.m4
+echo 'AC_DEFUN([MY_ZARDOZ], [:])' > m4/zardoz.m4
+
+echo 'ACLOCAL_AMFLAGS = -I m4' > Makefile.am
+
+$ACLOCAL -I m4
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+
+# A faulty distribution tarball, with a required '.m4' file missing.
+# Building from it should fail, both for in-tree and VPATH builds.
+ocwd=$(pwd) || fatal_ "cannot get current working directory"
+for vpath in false :; do
+ $MAKE distdir
+ test -f $distdir/m4/zardoz.m4 # Sanity check.
+ rm -f $distdir/m4/zardoz.m4
+ if $vpath; then
+ # We can't just build in a subdirectory of $distdir, otherwise
+ # we'll hit automake bug#10111.
+ mkdir vpath-distcheck
+ cd vpath-distcheck
+ ../$distdir/configure
+ else
+ cd $distdir
+ ./configure
+ fi
+ run_make -e FAIL -M
+ # This error will come from autoconf, not make, so we can be stricter
+ # in our grepping of it.
+ grep 'possibly undefined .*MY_ZARDOZ' output
+ grep 'MY_FOOBAR' output && exit 1 # No spurious error, please.
+ cd "$ocwd" || fatal_ "cannot chdir back to top-level test directory"
+done
+
+:
diff --git a/t/dist-pr109765.sh b/t/dist-pr109765.sh
new file mode 100644
index 000000000..031301bf4
--- /dev/null
+++ b/t/dist-pr109765.sh
@@ -0,0 +1,42 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Expose automake bug#10975: when several "dist-*" targets are invoked
+# on the make command line, the first one ends up removing the distdir,
+# so that the latter ones fail.
+
+required=bzip2
+. test-init.sh
+
+echo AC_OUTPUT >> configure.ac
+: > Makefile.am
+
+$ACLOCAL || fatal_ "aclocal failed"
+$AUTOCONF || fatal_ "autoconf failed"
+$AUTOMAKE || fatal_ "automake failed"
+
+./configure
+$MAKE dist-gzip dist-bzip2
+
+gzip -dc $distdir.tar.gz | tar tf - > one || { cat one; exit 1; }
+cat one
+bzip2 -dc $distdir.tar.gz | tar tf - > two || { cat two; exit 1; }
+cat two
+
+$FGREP "$distdir/Makefile.am" one
+diff one two
+
+:
diff --git a/t/dist-readonly.sh b/t/dist-readonly.sh
new file mode 100644
index 000000000..2b4124851
--- /dev/null
+++ b/t/dist-readonly.sh
@@ -0,0 +1,62 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test that a readonly files are distributed as such, and not make
+# writable while being copied in the $(distdir).
+
+# This test expect the user to be unable to write on files lacking
+# write permissions -- so it won't work if the user is 'root'.
+required='non-root cc'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo
+foo_SOURCES = foo.c
+EXTRA_DIST = bar.txt
+check-local: test
+.PHONY: test
+test:
+ test -f $(srcdir)/foo.c && test ! -w $(srcdir)/foo.c
+ if (echo x > $(srcdir)/foo.c); then exit 1; else :; fi
+ grep 'main (void)' $(srcdir)/foo.c
+ test -f $(srcdir)/bar.txt && test ! -w $(srcdir)/bar.txt
+ if (echo x > $(srcdir)/bar.txt); then exit 1; else :; fi
+ grep 'To be, or not to be' $(srcdir)/bar.txt
+END
+
+echo 'int main (void) { return 0; }' > foo.c
+echo To be, or not to be ... > bar.txt
+chmod a-w foo.c bar.txt
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+$MAKE distdir
+ls -l $distdir # For debugging.
+test -f foo.c && test ! -w foo.c || exit 1
+(echo x > foo.c) && exit 1
+test -f bar.txt && test ! -w bar.txt || exit 1
+(echo x > bar.txt) && exit 1
+$MAKE distcheck
+
+:
diff --git a/t/dist-repeated.sh b/t/dist-repeated.sh
new file mode 100644
index 000000000..2b9ee05f2
--- /dev/null
+++ b/t/dist-repeated.sh
@@ -0,0 +1,102 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test that we can distribute the same file as many times as we want.
+# The distdir target should take care of not copying it more than one
+# time anyway.
+
+. test-init.sh
+
+echo AC_OUTPUT >> configure.ac
+
+cat > Makefile.am <<'END'
+bin_PROGRAMS = foo bar
+foo_SOURCES = foo.c
+bar_SOURCES = foo.c
+python_PYTHON = bar.py
+EXTRA_DIST = foo.c bar.py
+
+.PHONY: sanity-check
+sanity-check:
+ for f in $(DISTFILES); do echo " $$f "; done > dist.txt
+ cat dist.txt
+ test `grep ' foo\.c ' dist.txt | wc -l` -eq 3
+ test `grep ' bar\.py ' dist.txt | wc -l` -eq 2
+
+# So that we don't have to require a C compiler.
+AUTOMAKE_OPTIONS = no-dependencies
+CC = false
+
+# So that we don't have to require a Python interpreter.
+pythondir = ${prefix}/py
+PYTHON = false
+END
+
+ocwd=$(pwd) || fatal_ "cannot get current working directory"
+
+# Help to ensure cp won't see the same file twice.
+mkdir bin
+cat > bin/cp <<END
+#!/bin/sh
+PATH='$PATH'; export PATH
+
+case " \$* " in
+ *foo.c\ *)
+ if test -f '$ocwd'/foo-c-copied; then
+ echo "\$0: we tried to copy foo.c twice" >&2
+ exit 1
+ else
+ # For a sanity check later.
+ echo ok > '$ocwd'/cp-wrapper-has-seen-foo-c
+ fi
+ ;;
+esac
+
+case " \$* " in
+ *bar.py\ *)
+ if test -f '$ocwd'/bar-py-copied; then
+ echo "\$0: we tried to copy bar.py twice" >&2
+ exit 1
+ else
+ # For a sanity check later.
+ echo ok > '$ocwd'/cp-wrapper-has-seen-bar-py
+ fi
+ ;;
+esac
+
+exec cp "\$@"
+END
+chmod a+x bin/cp
+PATH=$(pwd)/bin$PATH_SEPARATOR$PATH; export PATH;
+
+: > foo.c
+: > bar.py
+: > py-compile
+
+# Help to ensure cp won't try to copy the same file twice.
+chmod a-w foo.c bar.py
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+$MAKE sanity-check || fatal_ "expected invariants not verified"
+$MAKE distdir
+test -f cp-wrapper-has-seen-foo-c && test -f cp-wrapper-has-seen-bar-py \
+ || fatal_ "our cp wrapper hasn't run correctly"
+
+:
diff --git a/t/dist-shar.sh b/t/dist-shar.sh
new file mode 100644
index 000000000..611480c2c
--- /dev/null
+++ b/t/dist-shar.sh
@@ -0,0 +1,47 @@
+#! /bin/sh
+# Copyright (C) 2013-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check support for no-dist-gzip with dist-shar.
+
+required='shar unshar'
+. test-init.sh
+
+errmsg='support for shar .*deprecated'
+
+echo AUTOMAKE_OPTIONS = dist-shar > Makefile.am
+$ACLOCAL
+AUTOMAKE_fails -Wnone -Wobsolete
+grep "^Makefile\\.am:1:.*$errmsg" stderr
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE([no-dist-gzip dist-shar])
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+END
+: > Makefile.am
+
+rm -rf autom4te*.cache
+$ACLOCAL
+AUTOMAKE_run -Wno-error
+grep "^configure\\.ac:2:.*$errmsg" stderr
+
+$AUTOCONF
+./configure
+$MAKE distcheck
+test -f $distdir.shar.gz
+
+:
diff --git a/t/dist-tarZ.sh b/t/dist-tarZ.sh
new file mode 100644
index 000000000..c4888facc
--- /dev/null
+++ b/t/dist-tarZ.sh
@@ -0,0 +1,59 @@
+#! /bin/sh
+# Copyright (C) 2013-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check support for no-dist-gzip with dist-tarZ.
+
+. test-init.sh
+
+# On Cygwin, as of 9/2/2012, 'compress' is provided by sharutils
+# and is just a dummy script that is not able to actually compress
+# (it can only decompress). So, check that the 'compress' program
+# is actually able to compress input.
+# Note that, at least on GNU/Linux, 'compress' does (and is
+# documented to) exit with status 2 if the output is larger than
+# the input after (attempted) compression; so we need to pass it
+# an input that it can actually reduce in size when compressing.
+for x in 1 2 3 4 5 6 7 8; do
+ echo aaaaaaaaaaaaaaaaaaaaa
+done | compress -c >/dev/null \
+ || skip_ "cannot find a working 'compress' program"
+
+errmsg=".*legacy .*'compress' .*deprecated"
+
+echo AUTOMAKE_OPTIONS = dist-tarZ > Makefile.am
+$ACLOCAL
+AUTOMAKE_fails -Wnone -Wobsolete
+grep "^Makefile\\.am:1:.*$errmsg" stderr
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE([no-dist-gzip dist-tarZ])
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+END
+: > Makefile.am
+
+rm -rf autom4te*.cache
+$ACLOCAL
+AUTOMAKE_run -Wno-error
+grep "^configure\\.ac:2:.*$errmsg" stderr
+
+$AUTOCONF
+./configure
+$MAKE distcheck
+test -f dist-tarz-1.0.tar.Z
+
+:
diff --git a/t/dist-with-unreadable-makefile-fails.sh b/t/dist-with-unreadable-makefile-fails.sh
new file mode 100644
index 000000000..21fd10886
--- /dev/null
+++ b/t/dist-with-unreadable-makefile-fails.sh
@@ -0,0 +1,52 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for bug in 'make dist'
+# From Pavel Roskin.
+
+am_create_testdir=empty
+. test-init.sh
+
+cat > configure.ac << END
+AC_INIT([$me], [1.0])
+dnl Prevent automake from looking in .. and ../..
+AC_CONFIG_AUX_DIR([.])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+SUBDIRS = .
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+chmod 000 Makefile.am
+
+# On some systems (like DOS and Windows), files are always readable.
+test ! -r Makefile.am || skip_ "cannot drop file read permissions"
+
+./configure
+
+# 'dist' should fail because we can't copy Makefile.am.
+if $MAKE dist; then
+ exit 1
+else
+ exit 0
+fi
diff --git a/t/distcheck-configure-flags-am.sh b/t/distcheck-configure-flags-am.sh
new file mode 100644
index 000000000..9d205d1ee
--- /dev/null
+++ b/t/distcheck-configure-flags-am.sh
@@ -0,0 +1,67 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check support for AM_DISTCHECK_CONFIGURE_FLAGS at "make distcheck"
+# time, and its interactions with DISTCHECK_CONFIGURE_FLAGS.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_ARG_ENABLE([success], [], [success=$enableval], [success=no])
+AS_IF([test $success = yes && test "$sentence" = 'it works :-)'],
+ [:],
+ [AC_MSG_ERROR([success='$success', sentence='$sentence'])])
+AC_OUTPUT
+END
+
+unset sentence
+
+cat > Makefile.am << 'END'
+AM_DISTCHECK_CONFIGURE_FLAGS = $(dc_flags1) $(dc_flags2)
+dc_flags1 = --enable-success sentence='it works :-)'
+dc_flags2 =
+END
+
+$ACLOCAL
+$AUTOMAKE
+$FGREP '$(DISTCHECK_CONFIGURE_FLAGS)' Makefile.in
+$FGREP '$(AM_DISTCHECK_CONFIGURE_FLAGS)' Makefile.in
+grep 'DISTCHECK_CONFIGURE_FLAGS.*AM_DISTCHECK_CONFIGURE_FLAGS' Makefile.in \
+ && exit 1
+
+$AUTOCONF
+./configure --enable-success sentence='it works :-)'
+
+# The configure call in "make distcheck" should honour
+# $(AM_DISTCHECK_CONFIGURE_FLAGS).
+
+$MAKE distcheck
+
+# $(DISTCHECK_CONFIGURE_FLAGS) takes precedence over
+# $(AM_DISTCHECK_CONFIGURE_FLAGS)
+
+cat >> Makefile.am << 'END'
+dc_flags2 += --disable-success
+END
+$AUTOMAKE Makefile
+./config.status Makefile
+
+run_make -e FAIL -M distcheck
+grep "^configure:.* success='no', sentence='it works :-)'" output
+
+$MAKE distcheck DISTCHECK_CONFIGURE_FLAGS="--enable-success=yes"
+
+:
diff --git a/t/distcheck-configure-flags-subpkg.sh b/t/distcheck-configure-flags-subpkg.sh
new file mode 100644
index 000000000..e5bc8860b
--- /dev/null
+++ b/t/distcheck-configure-flags-subpkg.sh
@@ -0,0 +1,80 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check AM_DISTCHECK_CONFIGURE_FLAGS and DISTCHECK_CONFIGURE_FLAGS
+# are not honored in a subpackage Makefile.am, but the flags from
+# AM_DISTCHECK_CONFIGURE_FLAGS and DISTCHECK_CONFIGURE_FLAGS are
+# passed down to the configure script of the subpackage. This is
+# explicitly documented in the manual.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_SUBDIRS([subpkg])
+if test $dc != ok || test $am_dc != ok; then
+ AC_MSG_ERROR([dc=$dc am_dc=$dc])
+fi
+AC_OUTPUT
+END
+
+mkdir subpkg
+
+sed <configure.ac >subpkg/configure.ac \
+ -e 's/^AC_INIT.*/AC_INIT([subpkg], [2.0])/' \
+ -e '/^AC_CONFIG_SUBDIRS/d' \
+
+cat configure.ac
+cat subpkg/configure.ac
+
+dc=KO am_dc=KO; export dc am_dc
+
+cat > Makefile.am << 'END'
+AM_DISTCHECK_CONFIGURE_FLAGS = am_dc=ok
+DISTCHECK_CONFIGURE_FLAGS = dc=ok
+END
+
+: > subpkg/Makefile.am
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+cd subpkg
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+cd ..
+
+# For debugging.
+$FGREP 'DISTCHECK_CONFIGURE_FLAGS' Makefile.in subpkg/Makefile.in
+
+grep '^AM_DISTCHECK_CONFIGURE_FLAGS =' Makefile.in
+grep '^DISTCHECK_CONFIGURE_FLAGS =' Makefile.in
+$EGREP '^(AM_)?DISTCHECK_CONFIGURE_FLAGS' subpkg/Makefile.in && exit 1
+
+./configure dc=ok am_dc=ok
+
+# Flags in $(DISTCHECK_CONFIGURE_FLAGS) and $(AM_DISTCHECK_CONFIGURE_FLAGS)
+# should be passed down to the subpackage configure when "make distcheck"
+# is run from the top-level package ...
+$MAKE distcheck
+
+# ... but not when "make distcheck" is run from the subpackage.
+cd subpkg
+run_make -e FAIL -M distcheck
+grep '^configure:.* dc=KO am_dc=KO' output
+
+:
diff --git a/t/distcheck-configure-flags.sh b/t/distcheck-configure-flags.sh
new file mode 100644
index 000000000..5ac12f034
--- /dev/null
+++ b/t/distcheck-configure-flags.sh
@@ -0,0 +1,53 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check support for DISTCHECK_CONFIGURE_FLAGS at "make distcheck" time.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_ARG_ENABLE([success], [], [success=$enableval], [success=no])
+AS_IF([test $success = yes && test "$sentence" = 'it works :-)'],
+ [:],
+ [AC_MSG_ERROR([success='$success', sentence='$sentence'])])
+AC_OUTPUT
+END
+
+unset sentence
+
+: > Makefile.am
+
+$ACLOCAL
+$AUTOMAKE
+$FGREP '$(DISTCHECK_CONFIGURE_FLAGS)' Makefile.in
+
+$AUTOCONF
+./configure --enable-success sentence='it works :-)'
+
+# It should be ok to define DISTCHECK_CONFIGURE_FLAGS either on the
+# make command line or in the environment.
+
+env DISTCHECK_CONFIGURE_FLAGS='--enable-success sentence=it\ works\ :-\)' \
+ $MAKE distcheck
+
+$MAKE distcheck \
+ DISTCHECK_CONFIGURE_FLAGS="--enable-success=yes sentence='it works :-)'"
+
+# Sanity check.
+run_make -M -e FAIL distcheck
+grep "^configure:.* success='no', sentence=''" output
+
+:
diff --git a/t/distcheck-hook.sh b/t/distcheck-hook.sh
new file mode 100644
index 000000000..2174040d0
--- /dev/null
+++ b/t/distcheck-hook.sh
@@ -0,0 +1,51 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check basic support for distcheck-hook.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+distcheck-hook:
+ ls -l $(distdir)
+ chmod u+w $(distdir)
+ : > $(distdir)/dc-hook-has-run
+ chmod a-w $(distdir)
+check-local:
+ ls -l $(srcdir)
+ test -f $(srcdir)/dc-hook-has-run
+END
+
+$ACLOCAL
+$AUTOMAKE
+$FGREP 'distcheck-hook' Makefile.in
+$FGREP '$(MAKE) $(AM_MAKEFLAGS) distcheck-hook' Makefile.in
+grep '^distcheck-hook:' Makefile.in
+
+$AUTOCONF
+./configure
+
+$MAKE
+$MAKE check && exit 1
+$MAKE distdir
+test -f $distdir/dc-hook-has-run && exit 1
+$MAKE distcheck
+
+:
diff --git a/t/distcheck-hook2.sh b/t/distcheck-hook2.sh
new file mode 100644
index 000000000..a1e304ca6
--- /dev/null
+++ b/t/distcheck-hook2.sh
@@ -0,0 +1,79 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that no 'distcheck-hook' target is created automatically by
+# Automake, and that a used-defined 'distcheck-hook' is *not* honored
+# in a subpackage Makefile.am.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_SUBDIRS([subpkg])
+AC_OUTPUT
+END
+
+mkdir subpkg
+
+cat > subpkg/configure.ac << 'END'
+AC_INIT([subpkg], [1.0])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+distcheck-hook:
+ ls -l $(distdir)
+ chmod u+w $(distdir)
+ : > $(distdir)/dc-hook-has-run
+ chmod a-w $(distdir)
+check-local:
+ ls -l $(srcdir)
+ test -f $(srcdir)/dc-hook-has-run
+END
+
+cat > subpkg/Makefile.am <<'END'
+check-local:
+ ls -l $(srcdir)
+ test ! -r $(srcdir)/dc-hook-has-run
+END
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+cd subpkg
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+cd ..
+
+# For debugging.
+$FGREP 'distcheck-hook' Makefile.in subpkg/Makefile.in
+
+$FGREP 'distcheck-hook' subpkg/Makefile.in && exit 1
+$FGREP '$(MAKE) $(AM_MAKEFLAGS) distcheck-hook' Makefile.in
+grep '^distcheck-hook:' Makefile.in
+
+./configure
+
+$MAKE
+$MAKE check && exit 1
+cd subpkg
+$MAKE check
+cd ..
+$MAKE distcheck
+
+:
diff --git a/t/distcheck-missing-m4.sh b/t/distcheck-missing-m4.sh
new file mode 100644
index 000000000..c4e77e98c
--- /dev/null
+++ b/t/distcheck-missing-m4.sh
@@ -0,0 +1,116 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test that we can define a distcheck-hook to diagnose m4 files
+# missing from the dist tarball (interaction with '--install').
+# See automake bug#9037.
+
+. test-init.sh
+
+cwd=$(pwd) || fatal_ "cannot get current working directory"
+
+cp "$am_testaux_srcdir"/distcheck-hook-m4.am . \
+ || fatal_ "cannot fetch makefile fragment 'distcheck-hook-m4.am'"
+
+cat > Makefile.am << 'END'
+## The lack of '--install' here is meant.
+ACLOCAL_AMFLAGS = -I m4
+include $(srcdir)/distcheck-hook-m4.am
+END
+
+cat >> configure.ac << 'END'
+dnl We *deliberately* don't use m4_pattern_forbid here.
+AC_OUTPUT
+MY_FOO
+MY_BAR
+MY_BAZ
+MY_ZAR
+END
+
+mkdir m4 acdir acdir1 acdir2 pth
+
+cat > acdir/dirlist << END
+$cwd/acdir1
+$cwd/acdir2
+END
+
+echo 'AC_DEFUN([MY_FOO], [:])' > m4/foo.m4
+echo 'AC_DEFUN([MY_BAR], [:])' > acdir1/bar.m4
+echo 'AC_DEFUN([MY_BAZ], [:])' > acdir1/baz.m4
+echo 'AC_DEFUN([MY_QUX], [:])' > acdir2/qux.m4
+echo 'AC_DEFUN([MY_ZAR], [:])' > pth/zar.m4
+echo 'AC_DEFUN([MY_BLA], [:])' > pth/bla.m4
+
+ACLOCAL="$ACLOCAL --system-acdir=$cwd/acdir"; export ACLOCAL
+ACLOCAL_PATH=$cwd/pth; export ACLOCAL_PATH
+
+# We don't use '--install' here. Our distcheck-hook should catch this.
+$ACLOCAL -I m4
+$AUTOCONF
+$EGREP 'MY_(FOO|BAR|BAZ|ZAR)' configure && exit 1 # Sanity check.
+$AUTOMAKE
+
+check_no_spurious_error ()
+{
+ $EGREP -i 'mkdir:|:.*(permission|denied)' output && exit 1
+ # On failure, some make implementations (such as Solaris make) print the
+ # whole failed recipe on stdout. The first grep works around this.
+ grep -v 'rm -rf ' output | grep -i 'autom4te.*\.cache' && exit 1
+ : To placate 'set -e'.
+}
+
+./configure
+
+run_make -M -e FAIL distcheck
+for x in bar baz zar; do
+ $EGREP "required m4 file.*not distributed.* $x.m4( |$)" output
+done
+check_no_spurious_error
+
+# Now we use '--install', and "make distcheck" should pass.
+$ACLOCAL -I m4 --install
+test -f m4/bar.m4 # Sanity check.
+test -f m4/baz.m4 # Likewise.
+test -f m4/zar.m4 # Likewise.
+using_gmake || $MAKE Makefile
+$MAKE distcheck
+
+# We start to use new "third-party" macros from new .m4 files, but forget
+# to re-run "aclocal --install" by hand, relying on automatic remake rules.
+# Our distcheck-hook should catch this too.
+cat >> configure.ac << 'END'
+MY_QUX
+MY_BLA
+END
+
+$MAKE
+$EGREP 'MY_(FOO|BAR|BAZ|QUX|ZAR|BLA)' configure && exit 1 # Sanity check.
+
+run_make -M -e FAIL distcheck
+$EGREP "required m4 file.*not distributed.* qux.m4( |$)" output
+$EGREP "required m4 file.*not distributed.* bla.m4( |$)" output
+check_no_spurious_error
+# Check that we don't complain for files that should have been found.
+$FGREP " (bar|baz|zar).m4" output && exit 1
+
+# Now we again use '--install', and "make distcheck" should pass.
+$ACLOCAL -I m4 --install
+test -f m4/qux.m4 # Sanity check.
+test -f m4/bla.m4 # Likewise.
+using_gmake || $MAKE Makefile
+$MAKE distcheck
+
+:
diff --git a/t/distcheck-no-prefix-or-srcdir-override.sh b/t/distcheck-no-prefix-or-srcdir-override.sh
new file mode 100644
index 000000000..e143e1229
--- /dev/null
+++ b/t/distcheck-no-prefix-or-srcdir-override.sh
@@ -0,0 +1,60 @@
+#! /bin/sh
+# Copyright (C) 2013-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that "make distcheck" overrides any --srcdir or --prefix flag
+# (mistakenly) defined in $(AM_DISTCHECK_CONFIGURE_FLAGS) or
+# $(DISTCHECK_CONFIGURE_FLAGS). See automake bug#14991.
+
+. test-init.sh
+
+echo AC_OUTPUT >> configure.ac
+
+orig_cwd=$(pwd); export orig_cwd
+
+cat > Makefile.am << 'END'
+# configure should choke on non-absolute prefix or non-existent
+# srcdir. We'll sanity-check that later.
+AM_DISTCHECK_CONFIGURE_FLAGS = --srcdir am-src --prefix am-pfx
+END
+
+# Same comments as above applies.
+DISTCHECK_CONFIGURE_FLAGS='--srcdir user-src --prefix user-pfx'
+export DISTCHECK_CONFIGURE_FLAGS
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+# Sanity check: configure should choke on non-absolute prefix
+# or non-existent srcdir.
+./configure --prefix foobar 2>stderr && { cat stderr >&2; exit 99; }
+cat stderr >&2
+grep "expected an absolute directory name for --prefix" stderr || exit 99
+./configure --srcdir foobar 2>stderr && { cat stderr >&2; exit 99; }
+cat stderr >&2
+grep "cannot find sources.* in foobar" stderr || exit 99
+
+./configure
+run_make -E -O distcheck
+test ! -s stderr
+# Sanity check: the flags have been actually seen.
+$PERL -e 'undef $/; $_ = <>; s/ \\\n/ /g; print;' <stdout >t
+grep '/configure .* --srcdir am-src' t || exit 99
+grep '/configure .* --prefix am-pfx' t || exit 99
+grep '/configure .* --srcdir user-src' t || exit 99
+grep '/configure .* --prefix user-pfx' t || exit 99
+
+:
diff --git a/t/distcheck-outdated-m4.sh b/t/distcheck-outdated-m4.sh
new file mode 100644
index 000000000..a27e8d615
--- /dev/null
+++ b/t/distcheck-outdated-m4.sh
@@ -0,0 +1,134 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test that we can define a distcheck-hook to diagnose outdated m4
+# files in a dist tarball (interaction with '--install').
+# See automake bug#9037.
+
+. test-init.sh
+
+cwd=$(pwd) || fatal_ "cannot get current working directory"
+
+cp "$am_testaux_srcdir"/distcheck-hook-m4.am . \
+ || fatal_ "cannot fetch makefile fragment 'distcheck-hook-m4.am'"
+
+cat > Makefile.am << 'END'
+## The lack of '--install' here is meant.
+ACLOCAL_AMFLAGS = -I m4
+include $(srcdir)/distcheck-hook-m4.am
+END
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+MY_FOO
+MY_BAR
+MY_BAZ
+END
+
+mkdir m4 acdir
+echo 'AC_DEFUN([MY_FOO], [:])' > m4/foo.m4
+echo 'AC_DEFUN([MY_BAR], [:])' > acdir/bar.m4
+cat > acdir/baz.m4 << 'END'
+# serial 1
+AC_DEFUN([MY_BAZ], [:])
+END
+
+ACLOCAL="$ACLOCAL --system-acdir=$cwd/acdir"; export ACLOCAL
+
+# The use of '--install' here won't help when the installed file '.m4'
+# will become out-of-date w.r.t. the one in the system acdir.
+$ACLOCAL -I m4 --install
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+$MAKE distcheck # Sanity check.
+
+check_no_spurious_error ()
+{
+ $EGREP -i 'mkdir:|:.*(permission|denied)' output && exit 1
+ # On failure, some make implementations (such as Solaris make) print the
+ # whole failed recipe on stdout. The first grep works around this.
+ grep -v 'rm -rf ' output | grep -i 'autom4te.*\.cache' && exit 1
+ : To placate 'set -e'.
+}
+
+# We start to use a new "third-party" macro in a new version
+# of a pre-existing third-party m4 file, but forget to re-run
+# "aclocal --install" by hand, relying on automatic remake
+# rules. Our distcheck-hook should catch this too.
+echo MY_ZARDOZ >> configure.ac
+
+cat > acdir/baz.m4 << 'END'
+# serial 2
+AC_DEFUN([MY_BAZ], [:])
+AC_DEFUN([MY_ZARDOZ], [:])
+END
+
+$MAKE # Rebuild configure and makefiles.
+run_make -M -e FAIL distcheck
+$EGREP "required m4 file.* outdated.* baz.m4( |$)" output
+check_no_spurious_error
+# Check that we don't complain for files that aren't outdated.
+$EGREP " (foo|bar).m4" output && exit 1
+
+# Now we again use '--install' explicitly, and "make distcheck"
+# should pass.
+$ACLOCAL -I m4 --install
+using_gmake || $MAKE Makefile
+$MAKE distcheck
+
+# Similar to what have been done above, but this time we:
+# - use ACLOCAL_PATH, and
+# - do not add the use of a new macro.
+
+echo MY_FNORD >> configure.ac
+
+mkdir pth
+cat > pth/fnord.m4 << 'END'
+# serial 1
+AC_DEFUN([MY_FNORD], [:])
+END
+
+ACLOCAL_PATH="$cwd/pth"; export ACLOCAL_PATH
+
+# The explicit use of '--install' here won't help when the installed file
+# '.m4' will become out-of-date w.r.t. the one in the system acdir.
+$ACLOCAL -I m4 --install
+using_gmake || $MAKE Makefile
+$MAKE distcheck
+
+# Only increase serial number, without changing the other contents; this
+# is deliberate.
+cat > pth/fnord.m4 << 'END'
+# serial 2
+AC_DEFUN([MY_FNORD], [:])
+END
+
+$MAKE # Rebuild configure and makefiles.
+run_make -M -e FAIL distcheck
+$EGREP "required m4 file.* outdated.* fnord.m4( |$)" output
+check_no_spurious_error
+# Check that we don't complain for files that aren't outdated.
+$EGREP " (foo|bar|baz).m4" output && exit 1
+
+# Now we again use '--install' explicitly, and "make distcheck"
+# should pass.
+$ACLOCAL -I m4 --install
+using_gmake || $MAKE Makefile
+$MAKE distcheck
+
+:
diff --git a/t/distcheck-override-infodir.sh b/t/distcheck-override-infodir.sh
new file mode 100644
index 000000000..b895867a0
--- /dev/null
+++ b/t/distcheck-override-infodir.sh
@@ -0,0 +1,78 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that we can override ${infodir} while having distcheck still
+# working. Related to automake bug#9579.
+
+required='makeinfo tex texi2dvi install-info'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+infodir = ${prefix}/blah/blah/foobar
+info_TEXINFOS = main.texi
+## Sanity check.
+installcheck-local:
+ if test x$${infodir+set} != xset; then \
+ ls -l "$(DESTDIR)$(prefix)/blah/blah/foobar/" || exit 1; \
+ test -f "$(DESTDIR)$(prefix)/blah/blah/foobar/dir" || exit 1; \
+ else \
+ ls -l "$(DESTDIR)$$infodir/" || exit 1; \
+ test -f "$(DESTDIR)$$infodir/dir" || exit 1; \
+ fi
+END
+
+# Protect with leading " # " to avoid spurious maintainer-check failures.
+sed 's/^ *# *//' > main.texi << 'END'
+ # \input texinfo
+ # @setfilename main.info
+ # @settitle main
+ #
+ # @c Explicit calls to @dircategory and @direntry required to ensure that
+ # @c a 'dir' file will be created also by older versions of 'install-info'
+ # @c (e.g., the one coming with Texinfo 4.8).
+ #
+ # @dircategory Software development
+ # @direntry
+ # * Automake: (automake). Making GNU standards-compliant Makefiles
+ # @end direntry
+ #
+ # @dircategory Individual utilities
+ # @direntry
+ # * aclocal-invocation: (automake)aclocal Invocation. Generating aclocal.m4
+ # * automake-invocation: (automake)automake Invocation. Generating Makefile.in
+ # @end direntry
+ #
+ # @node Top
+ # Hello walls.
+ # @bye
+END
+
+$ACLOCAL
+$AUTOMAKE -a
+$AUTOCONF
+
+./configure
+$MAKE
+
+$MAKE distcheck
+run_make infodir="$(pwd)/_info" distcheck
+test -f _info/dir || exit 99 # Sanity check.
+
+:
diff --git a/t/distcheck-pr10470.sh b/t/distcheck-pr10470.sh
new file mode 100644
index 000000000..15e0ee066
--- /dev/null
+++ b/t/distcheck-pr10470.sh
@@ -0,0 +1,57 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Ensure "make distcheck" does not experience racy failures on
+# systems (like MinGW/MSYS) that cannot remove a directory "in use"
+# by a process (e.g., that is its "current working directory").
+# See automake bug#10470.
+
+. test-init.sh
+
+mkdir foo.d
+sh -c "cd foo.d && sleep '4'" &
+# Without this sleep, the "rm -rf foo.d" below would reliably beat
+# the "cd foo.d" in the subshell above, and the test would be always
+# skipped, even on MinGW/MSYS.
+sleep '1'
+rm -rf foo.d && skip_ 'system is able to remove "in use" directories'
+
+echo AC_OUTPUT >> configure.ac
+
+cat > Makefile.am <<END
+TESTS = foo.test
+EXTRA_DIST= foo.test
+END
+
+cat > foo.test <<END
+#!/bin/sh
+sleep '4' &
+exit 0
+END
+chmod a+x foo.test
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+./configure
+
+# We can build the distribution.
+run_make -M distcheck
+# Sanity check: verify that our code has hit a problem removing
+# the distdir, but has recovered from it.
+$EGREP "(^| )(rm|find):.*$distdir" output || fatal_ "expected code path not covered"
+
+:
diff --git a/t/distcheck-pr18286.sh b/t/distcheck-pr18286.sh
new file mode 100644
index 000000000..49ec04840
--- /dev/null
+++ b/t/distcheck-pr18286.sh
@@ -0,0 +1,70 @@
+#! /bin/sh
+# Copyright (C) 2014-2017 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 <https://www.gnu.org/licenses/>.
+
+# Ensure "make distcheck" detects all missing files, without getting
+# confused by the fact that they exists in the "original" source tree
+# from which "make distcheck" is run. See automake bug#18286.
+
+. test-init.sh
+
+echo AC_OUTPUT >> configure.ac
+
+cat > Makefile.am <<'END'
+$(srcdir)/test_data.am: $(srcdir)/test_data.txt $(srcdir)/gen-testdata.sh
+ cd $(srcdir) && $(SHELL) gen-testdata.sh <test_data.txt >test_data.am
+
+include $(srcdir)/test_data.am
+
+check-local:
+ is $(testdata) == foo bar
+END
+
+cat > test_data.txt <<'END'
+foo
+bar
+END
+
+
+cat > gen-testdata.sh <<'END'
+#!/bin/sh
+printf 'testdata = \\\n'
+sed 's/$/ \\/'
+echo '$(empty_string)'
+END
+chmod a+x gen-testdata.sh
+
+$sleep
+./gen-testdata.sh <test_data.txt >test_data.am
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+$MAKE check
+
+# Oops, we failed to distribute some required files!
+run_make -e FAIL -M distcheck
+$FGREP '../../test_data.txt' output
+
+# But if we distribute them, everything will be OK.
+echo 'EXTRA_DIST = test_data.txt gen-testdata.sh' >> Makefile.am
+
+using_gmake || $MAKE Makefile
+$MAKE distcheck
+
+:
diff --git a/t/distcheck-pr9579.sh b/t/distcheck-pr9579.sh
new file mode 100644
index 000000000..886d3ef2c
--- /dev/null
+++ b/t/distcheck-pr9579.sh
@@ -0,0 +1,92 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check against automake bug#9579: distcheck does not always detect
+# incomplete uninstall as advertised.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+# NOTE: the use of 'dir' as the name of the data file installed by hand
+# is deliberate, and enhances coverage -- see definition and comments of
+# lib/am/distdir.am:$(am__distuninstallcheck_listfiles).
+
+cat > Makefile.am << 'END'
+dist_data_DATA = foo
+EXTRA_DIST = dir
+install-data-local:
+ $(MKDIR_P) '$(DESTDIR)$(datadir)'
+ cp '$(srcdir)/dir' '$(DESTDIR)$(datadir)/dir'
+END
+
+: > foo
+: > dir
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+./configure --prefix="$(pwd)/inst"
+
+# Sanity checks.
+$MAKE install
+find inst -type f
+test -f inst/share/foo
+test -f inst/share/dir
+# We expect the uninstall target of our Makefile to be definitely broken.
+$MAKE uninstall
+test -f inst/share/dir
+rm -rf inst
+
+run_make -M -e FAIL distcheck
+$FGREP 'ERROR: files left after uninstall:' output
+grep '/share/dir *$' output
+
+# A few trickier corner cases.
+
+cat > Makefile.am << 'END'
+EXTRA_DIST = dir
+install-data-local:
+install-data-local:
+ $(MKDIR_P) '$(DESTDIR)$(prefix)/mu/share/info'
+ cp '$(srcdir)/dir' '$(DESTDIR)$(prefix)/mu/share/info'
+ $(MKDIR_P) '$(DESTDIR)$(infodir)/more'
+ cp '$(srcdir)/dir' '$(DESTDIR)$(infodir)/more'
+END
+
+$AUTOMAKE
+./config.status Makefile
+
+# Sanity checks, again.
+$MAKE install
+find inst -type f
+test -f inst/mu/share/info/dir
+test -f inst/share/info/more/dir
+# We expect the uninstall target of our Makefile to be definitely broken.
+$MAKE uninstall
+test -f inst/mu/share/info/dir
+test -f inst/share/info/more/dir
+rm -rf inst
+
+run_make -M -e FAIL distcheck
+$FGREP 'ERROR: files left after uninstall:' output
+grep '/mu/share/info/dir *$' output
+grep '/share/info/more/dir *$' output
+
+:
diff --git a/t/distcheck-writable-srcdir.sh b/t/distcheck-writable-srcdir.sh
new file mode 100644
index 000000000..6c1842f0c
--- /dev/null
+++ b/t/distcheck-writable-srcdir.sh
@@ -0,0 +1,48 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that the user abuse 'distcheck-hook' to ensure his packages
+# is built by "make distcheck" with a writable srcdir. This goes
+# against the GNU Coding Standards, but some package authors might
+# not care about them too much, and it's nice to support their use
+# case too (since it doesn't cost us anything but this test).
+# See automake bug#10878.
+
+. test-init.sh
+
+echo AC_OUTPUT >> configure.ac
+
+cat > Makefile.am <<'END'
+EXTRA_DIST = old
+distcheck-hook:
+ find $(distdir) -exec chmod u+w '{}' ';'
+check-local:
+ test -f $(srcdir)/old
+ test ! -f $(srcdir)/new
+ test ! -r $(srcdir)/new
+## Don't do this in real life, or I'll kill you.
+ echo foo > $(srcdir)/old
+ echo bar > $(srcdir)/new
+END
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+./configure
+: > old
+$MAKE distcheck
+
+:
diff --git a/t/distcleancheck.sh b/t/distcleancheck.sh
new file mode 100644
index 000000000..2e565b56e
--- /dev/null
+++ b/t/distcleancheck.sh
@@ -0,0 +1,69 @@
+#! /bin/sh
+# Copyright (C) 2008-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure the suggested 'distcleancheck_listfiles' in the manual works.
+# The example Makefile.am we use is from the FAQ entry 'distcleancheck'.
+
+required=cc
+. test-init.sh
+
+cat >>configure.ac << 'END'
+AC_PROG_CC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+# This Makefile.am is bogus. See @node{distcleancheck} in the manual
+# for how to fix it properly.
+bin_PROGRAMS = foo
+foo_SOURCES = foo.c
+dist_man_MANS = foo.1
+
+# We write './foo.1' inside the rule on purpose, to avoid VPATH rewriting
+# done by some 'make' implementations.
+foo.1: foo$(EXEEXT)
+ echo man page for foo$(EXEEXT) > ./foo.1
+
+## Ignore warnings about overridden variables
+AUTOMAKE_OPTIONS = -Wno-override
+distcleancheck_listfiles = \
+ find . -type f -exec sh -c 'test -f $(srcdir)/$$1 || echo $$1' \
+ sh '{}' ';'
+END
+
+cat >foo.c <<'END'
+int main () { return 0; }
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+$MAKE
+$MAKE distcheck
+
+# Now ensure that we really needed the override.
+sed '/distcleancheck_listfiles/,$d' Makefile.am > t
+mv -f t Makefile.am
+$AUTOMAKE
+./configure
+$MAKE
+run_make -E -e FAIL distcheck
+grep 'ERROR:.*files left in build directory after distclean' stderr
+grep '^\./foo\.1$' stderr
+
+:
diff --git a/t/distcom-subdir.sh b/t/distcom-subdir.sh
new file mode 100644
index 000000000..500ddf046
--- /dev/null
+++ b/t/distcom-subdir.sh
@@ -0,0 +1,76 @@
+#! /bin/sh
+# Copyright (C) 2004-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure that if an auxfile (here depcomp) is required
+# by a subdir Makefile.am, it is distributed by that Makefile.am.
+
+required=cc
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_FILES([subdir/Makefile])
+AC_PROG_CC
+AC_PROG_FGREP
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+SUBDIRS = subdir
+test-distdir: distdir
+ test -f $(distdir)/depcomp
+.PHONY: test-distdir
+check-local: test-distdir
+END
+
+rm -f depcomp
+mkdir subdir
+
+cat > subdir/Makefile.am << 'END'
+.PHONY: test-distcom
+test-distcom:
+ echo ' ' $(DIST_COMMON) ' ' | $(FGREP) ' $(top_srcdir)/depcomp '
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+test ! -e depcomp
+
+cat >> subdir/Makefile.am << 'END'
+bin_PROGRAMS = foo
+.PHONY: test-distcom
+test-distcom:
+ echo ' ' $(DIST_COMMON) ' ' | $(FGREP) ' $(top_srcdir)/depcomp '
+check-local: test-distcom
+END
+
+cat > subdir/foo.c <<'END'
+int main (void)
+{
+ return 0;
+}
+END
+
+$AUTOMAKE -a subdir/Makefile
+test -f depcomp
+
+./configure
+(cd subdir && $MAKE test-distcom)
+$MAKE test-distdir
+
+$MAKE distcheck
+
+:
diff --git a/t/distcom2.sh b/t/distcom2.sh
new file mode 100644
index 000000000..7c7a9da25
--- /dev/null
+++ b/t/distcom2.sh
@@ -0,0 +1,79 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure that depcomp and compile are added to DIST_COMMON.
+# Report from Pavel Roskin. Report of problems with '--no-force' from
+# Scott James Remnant (Debian #206299)
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_CONFIG_FILES([subdir/Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+SUBDIRS = subdir
+END
+
+mkdir subdir
+: > subdir/foo.c
+
+cat > subdir/Makefile.am << 'END'
+noinst_PROGRAMS = foo
+foo_SOURCES = foo.c
+foo_CFLAGS = -DBAR
+END
+
+$ACLOCAL
+
+for opt in '' --no-force; do
+
+ rm -f compile depcomp
+
+ $AUTOMAKE $opt --add-missing
+
+ test -f compile
+ test -f depcomp
+
+ for dir in . subdir; do
+ sed -n -e "
+ /^am__DIST_COMMON =.*/ {
+ b body
+ :loop
+ n
+ :body
+ p
+ s/\\\\$/\\\\/
+ t loop
+ s/$/ /
+ s/[$tab ][$tab ]*/ /g
+ p
+ }" $dir/Makefile.in > $dir/dc.txt
+ done
+
+ cat dc.txt # For debugging.
+ cat subdir/dc.txt # Likewise.
+
+ $FGREP ' $(top_srcdir)/depcomp ' subdir/dc.txt
+ # The 'compile' script will be listed in the DIST_COMMON of the top-level
+ # Makefile because it's required in configure.ac (by AC_PROG_CC).
+ $FGREP ' $(top_srcdir)/compile ' dc.txt || $FGREP ' compile ' dc.txt
+
+done
+
+:
diff --git a/t/distcom3.sh b/t/distcom3.sh
new file mode 100644
index 000000000..04f0c5dba
--- /dev/null
+++ b/t/distcom3.sh
@@ -0,0 +1,55 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure that non-existing common files are distributed
+# if they are buildable.
+
+. test-init.sh
+
+echo AC_OUTPUT >> configure.ac
+
+cat > Makefile.am << 'END'
+README:
+ echo 'I bet you are reading me.' > README
+test-distcommon:
+ echo ' ' $(DIST_COMMON) ' ' | grep ' README '
+END
+
+# Files required by '--gnu'.
+: > NEWS
+: > AUTHORS
+: > ChangeLog
+
+$ACLOCAL
+
+# Should not warn about missing README, since it is a target.
+$AUTOMAKE --add-missing --gnu >output 2>&1 || { cat output; exit 1; }
+cat output
+grep README output && exit 1
+
+$AUTOCONF
+./configure
+$MAKE test-distcommon
+$MAKE distdir
+test -f $distdir/README
+
+# Should warn about missing README.
+rm -f README
+: > Makefile.am
+AUTOMAKE_fails --add-missing --gnu
+grep 'required file.*README.*not found' stderr
+
+:
diff --git a/t/distcom4.sh b/t/distcom4.sh
new file mode 100644
index 000000000..ddfce3793
--- /dev/null
+++ b/t/distcom4.sh
@@ -0,0 +1,62 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure config files are distributed, and only once.
+# This tries to distribute a file from a subdirectory, without
+# Makefile in that directory. 'distcom5.sh' performs the same
+# test with a Makefile in the directory.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+ AC_CONFIG_FILES([tests/autoconf:tests/wrapper.in],
+ [chmod +x tests/autoconf])
+ AC_CONFIG_FILES([tests/autoheader:tests/wrapper.in],
+ [chmod +x tests/autoheader])
+ AC_CONFIG_FILES([tests/autom4te:tests/wrapper.in],
+ [chmod +x tests/autom4te])
+ AC_CONFIG_FILES([tests/autoreconf:tests/wrapper.in],
+ [chmod +x tests/autoreconf])
+ AC_CONFIG_FILES([tests/autoscan:tests/wrapper.in],
+ [chmod +x tests/autoscan])
+ AC_CONFIG_FILES([tests/autoupdate:tests/wrapper.in],
+ [chmod +x tests/autoupdate])
+ AC_CONFIG_FILES([tests/ifnames:tests/wrapper.in],
+ [chmod +x tests/ifnames])
+ AC_OUTPUT
+END
+
+mkdir tests
+: > README
+: > tests/wrapper.in
+cat > Makefile.am << 'END'
+.PHONY: test1 test 2
+test1:
+ for x in $(DIST_COMMON); do echo $$x; done \
+ | grep 'tests/' > lst
+ cat lst # For debugging.
+ test `wc -l <lst` -eq 1
+test2: distdir
+ test -f $(distdir)/tests/wrapper.in
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+./configure
+$MAKE test1 test2
+
+:
diff --git a/t/distcom5.sh b/t/distcom5.sh
new file mode 100644
index 000000000..09abe5d76
--- /dev/null
+++ b/t/distcom5.sh
@@ -0,0 +1,72 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure config files are distributed, and only once.
+# This tries to distribute a file from a subdirectory, with
+# a Makefile in that directory. 'distcom4.sh' performs the same
+# test without Makefile in the directory.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+ AC_CONFIG_FILES([tests/autoconf:tests/wrapper.in],
+ [chmod +x tests/autoconf])
+ AC_CONFIG_FILES([tests/autoheader:tests/wrapper.in],
+ [chmod +x tests/autoheader])
+ AC_CONFIG_FILES([tests/autom4te:tests/wrapper.in],
+ [chmod +x tests/autom4te])
+ AC_CONFIG_FILES([tests/autoreconf:tests/wrapper.in],
+ [chmod +x tests/autoreconf])
+ AC_CONFIG_FILES([tests/autoscan:tests/wrapper.in],
+ [chmod +x tests/autoscan])
+ AC_CONFIG_FILES([tests/autoupdate:tests/wrapper.in],
+ [chmod +x tests/autoupdate])
+ AC_CONFIG_FILES([tests/ifnames:tests/wrapper.in],
+ [chmod +x tests/ifnames])
+ AC_CONFIG_FILES([tests/Makefile])
+ AC_OUTPUT
+END
+
+mkdir tests
+: > tests/wrapper.in
+
+cat > Makefile.am << 'END'
+SUBDIRS = tests
+.PHONY: test
+test: distdir
+ test -f $(distdir)/tests/wrapper.in
+check-local: test
+ for x in $(DIST_COMMON); do echo $$x; done \
+ | grep tests && exit 1; :
+END
+
+cat > tests/Makefile.am <<'END'
+check-local:
+ for x in $(DIST_COMMON); do echo $$x; done \
+ | grep wrapper.in > lst
+ cat lst # For debugging.
+ test `wc -l <lst` -eq 1
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+./configure
+$MAKE check
+# Sanity check.
+test -f tests/lst
+
+:
diff --git a/t/distdir.sh b/t/distdir.sh
new file mode 100644
index 000000000..66c817fca
--- /dev/null
+++ b/t/distdir.sh
@@ -0,0 +1,81 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure subdirs in EXTRA_DIST work. Also tests to make
+# sure *srcdir is properly handled. Note that using './', as in
+# EXTRA_DIST = ./joe
+# does not work portably: it fails with HP-UX and Tru64 make.
+# Also test DISTFILES containing a directory and a file in it,
+# and repeated directories.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+include_HEADERS = some/file another/sub/subsub/file2 yet/another/file3
+EXTRA_DIST = foo/bar joe $(top_srcdir)/woo/doo $(srcdir)/dada \
+ some another/sub yet \
+ some another/sub yet
+
+
+all-local:
+ $(MKDIR_P) another/sub/subsub
+ touch another/sub/subsub/file2
+
+CLEANFILES = another/sub/subsub/file2
+
+check-local:
+ test -f $(srcdir)/foo/bar
+ test -f $(srcdir)/woo/doo
+ test -f $(srcdir)/joe
+ test -f $(srcdir)/dada
+ test -f $(srcdir)/some/file
+ test -f $(srcdir)/another/sub/subsub/file2 \
+ || test -f /another/sub/subsub/file2
+ test -f $(srcdir)/yet/another/file3
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+mkdir foo woo some another another/sub another/sub/subsub yet yet/another
+touch foo/bar joe woo/doo dada some/file another/sub/subsub/file2
+touch yet/another/file3
+
+mkdir build
+cd build
+../configure
+$MAKE distdir
+# Check to make sure 'foo' isn't made in build directory.
+test -d foo && exit 1
+
+rm -rf $me-1.0
+# Remove the dot from VERSION for the next grep.
+run_make -O -e IGNORE VERSION=10 MKDIR_P='echo MKDIR_P' distdir
+
+# Make sure no './' appear in the directory names. srcdir is '..', so
+# this also checks that no directory is created in the source tree.
+grep 'MKDIR_P.*\.' stdout && exit 1
+
+cd ..
+./configure --prefix "$(pwd)"
+$MAKE distcheck
+
+:
diff --git a/t/disthook.sh b/t/disthook.sh
new file mode 100644
index 000000000..d3d118500
--- /dev/null
+++ b/t/disthook.sh
@@ -0,0 +1,86 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that 'dist-hook' works. See automake bug#10878.
+
+. test-init.sh
+
+echo AC_OUTPUT >> configure.ac
+
+cat > Makefile.am <<'END'
+EXTRA_DIST = write execute removed doc
+
+removed:
+ echo I will be deleted > $@
+DISTCLEANFILES = removed
+
+dist-hook:
+ chmod u+w $(distdir)/write $(distdir)/doc
+ chmod u+x $(distdir)/execute
+ rm -f $(distdir)/removed
+ rm -f $(distdir)/doc/HACKING
+ rm -f $(distdir)/doc/RELEASE-DATE
+ date > $(distdir)/doc/RELEASE-DATE
+ echo all is ok > $(distdir)/write
+
+check-local:
+ ls -l $(srcdir) $(srcdir)/doc
+ test "`cat $(srcdir)/write`" = "all is ok"
+ test -f $(srcdir)/doc/README
+ test -f $(srcdir)/doc/RELEASE-DATE
+ test ! -f $(srcdir)/removed
+ test ! -r $(srcdir)/removed
+ test ! -f $(srcdir)/doc/HACKING
+ test ! -r $(srcdir)/doc/HACKING
+ $(srcdir)/execute
+ $(srcdir)/execute | grep 'I run successfully'
+## Sanity check.
+ echo ok > $(srcdir)/../distcheck-run
+END
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+./configure
+mkdir doc
+: > doc/README
+: > doc/HACKING
+echo will be clobbered > write
+cat > execute <<'END'
+#!/bin/sh
+echo I run successfully
+END
+
+chmod a-w write
+chmod a-x execute
+
+$MAKE distdir
+ls -l $distdir $distdir/doc
+cd $distdir
+test "$(cat write)" = "all is ok"
+test ! -e removed
+test -f doc/README
+test -f doc/RELEASE-DATE
+test ! -e doc/HACING
+./execute
+./execute | grep 'I run successfully'
+cd ..
+
+$MAKE distcheck
+test -f distcheck-run
+
+:
diff --git a/t/distlinks.sh b/t/distlinks.sh
new file mode 100644
index 000000000..7b6ba0eae
--- /dev/null
+++ b/t/distlinks.sh
@@ -0,0 +1,72 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that distributed symlinks in the source tree will be expanded
+# as regular files in $(distdir).
+
+. test-init.sh
+
+echo text > file
+
+ln -s file lnk || skip_ "cannot create symlinks to files"
+
+mkdir A
+mkdir B
+echo aaa > A/aaa
+cd B
+ln -s ../A/aaa bbb
+cd ..
+
+echo FooBarBaz > foo
+
+ln -s foo bar1
+ln -s bar1 bar2
+ln -s bar2 bar3
+
+ln -s "$(pwd)/foo" quux
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+echo "me = $me" > Makefile.am # For better failure messages.
+cat >> Makefile.am << 'END'
+EXTRA_DIST = lnk B/bbb bar1 bar2 bar3 quux
+.PHONY: test
+test: distdir
+ ls -l $(distdir) $(distdir)/B
+ fail() { echo "$(me): $$*" >&2; e=1; }; \
+ e=0; \
+ set file lnk A/aaa B/bbb foo quux foo bar1 foo bar2 foo bar3; \
+ while test $$# -ge 2; do \
+ file=$$1; shift; link=$(distdir)/$$1; shift; \
+ test -f $$link || fail "$$link is not a regular file"; \
+ test ! -h $$link || fail "$$link is a symlink"; \
+ diff $$file $$link || fail "$$link differs from $$file"; \
+ done; \
+ exit $$e;
+END
+
+ls -l . A B
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+$MAKE test
+
+:
diff --git a/t/distlinksbrk.sh b/t/distlinksbrk.sh
new file mode 100644
index 000000000..66b71a3ad
--- /dev/null
+++ b/t/distlinksbrk.sh
@@ -0,0 +1,67 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that distributed broken symlinks cause 'make dist' to fail, and
+# to do so with (mostly) meaningful diagnostic.
+
+. test-init.sh
+
+# We need, for our broken symlinks, names that make it hard to get false
+# positives when grepping make output to look for them.
+lnk_base=BrknSymlnk
+lnk1=${lnk_base}__001
+lnk2=${lnk_base}__002
+lnka=${lnk_base}__aaa
+lnkb=${lnk_base}__bbb
+
+ln -s nonesuch $lnk1 || skip_ "cannot create broken symlinks"
+
+ln -s "$(pwd)/nonesuch" $lnk2
+
+ln -s $lnk1 $lnka
+ln -s $lnka $lnkb
+
+# Sanity checks.
+test ! -e $lnk1
+test ! -e $lnk2
+test ! -e $lnka
+test ! -e $lnkb
+test -h $lnk1
+test -h $lnk2
+test -h $lnka
+test -h $lnkb
+
+cat >> configure.ac <<'END'
+AC_OUTPUT
+END
+
+$ACLOCAL
+$AUTOCONF
+
+ls -l # For debugging.
+
+# Don't try to use "make -k", because some botched make implementations
+# (HP-UX, IRIX) might still exit on the first error in this situations.
+for lnk in $lnk1 $lnk2 $lnka $lnkb; do
+ echo "EXTRA_DIST = $lnk" > Makefile.am
+ $AUTOMAKE
+ ./configure
+ # Distribution must fail, with a decent error message.
+ run_make -M -e FAIL distdir
+ $FGREP $lnk output
+done
+
+:
diff --git a/t/distname.sh b/t/distname.sh
new file mode 100644
index 000000000..355fd066d
--- /dev/null
+++ b/t/distname.sh
@@ -0,0 +1,47 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test of names in tar file.
+# From Rainer Orth.
+
+required=cc
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_SRCDIR([a.c])
+AC_PROG_CC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = wish
+wish_SOURCES = a.c
+END
+
+: > a.c
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --include-deps --copy --add-missing
+./configure
+$MAKE dist
+
+gzip -d $me-1.0.tar.gz
+tar tf $me-1.0.tar > stdout || { cat stdout; exit 1; }
+cat stdout
+$FGREP ./$me-1.0/a.c stdout && exit 1
+
+:
diff --git a/t/dmalloc.sh b/t/dmalloc.sh
new file mode 100644
index 000000000..a297e0a46
--- /dev/null
+++ b/t/dmalloc.sh
@@ -0,0 +1,59 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Simple checks on the 'AM_WITH_DMALLOC' macro.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_HEADERS([config.h])
+AM_WITH_DMALLOC
+AC_SUBST([LDFLAGS])
+AC_OUTPUT
+END
+
+cat > config.h.in <<'END'
+#undef WITH_DMALLOC
+END
+
+cat > Makefile.am <<'END'
+check-with-dmalloc:
+## The AM_WITH_DMALLOC assumes that the user is a developer, so that
+## he is expected to install and make available the 'dmalloc' library
+## by his own. So we just check that proper linker and libs flags get
+## added.
+ echo ' ' $(LDFLAGS) ' ' | grep ' -g '
+ echo ' ' $(LIBS) ' ' | grep ' -ldmalloc '
+END
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+./configure
+cat config.h # For debugging.
+grep '^ */\* *# *undef *WITH_DMALLOC *\*/ *$' config.h
+
+./configure --without-dmalloc
+cat config.h # For debugging.
+grep '^ */\* *# *undef *WITH_DMALLOC *\*/ *$' config.h
+
+./configure --with-dmalloc
+cat config.h # For debugging.
+grep '^# *define *WITH_DMALLOC *1 *$' config.h
+$MAKE check-with-dmalloc
+
+:
diff --git a/t/doc-parsing-buglets-colneq-subst.sh b/t/doc-parsing-buglets-colneq-subst.sh
new file mode 100644
index 000000000..0f8dfe8de
--- /dev/null
+++ b/t/doc-parsing-buglets-colneq-subst.sh
@@ -0,0 +1,37 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check a documented limitation of the Automake's Makefile parser
+# w.r.t. POSIX variable substitutions used in the name of targets.
+# See Section "General Operation" in the Automake manual.
+# If you cause some parts of this test to fail, chances are that you've
+# improved the Automake parser ;-)
+# See: <https://lists.gnu.org/archive/html/automake/2010-08/msg00074.html>
+# or: <http://thread.gmane.org/gmane.comp.sysutils.automake.general/11943/focus=11962>
+
+. test-init.sh
+
+cat > Makefile.am <<'END'
+$(FOO:=x): bar
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+
+grep 'bad characters.*variable name.*\$(FOO' stderr
+grep ':=.*assignments.*not portable' stderr
+
+:
diff --git a/t/doc-parsing-buglets-tabs.sh b/t/doc-parsing-buglets-tabs.sh
new file mode 100644
index 000000000..9e84f806d
--- /dev/null
+++ b/t/doc-parsing-buglets-tabs.sh
@@ -0,0 +1,59 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check the documented limitation of the Automake's Makefile parser w.r.t.
+# use of TAB characters; see Section "General Operation" in the Automake
+# manual, and automake bug#8360.
+# If you cause some parts of this test to fail, chances are that you've
+# improved the Automake parser ;-)
+
+. test-init.sh
+
+cat > Makefile.am <<END
+.PHONY: test
+test: all check
+
+fail:
+${tab}@echo "'\$@ recipe executed'"; exit 1
+
+## This won't be recognized as a target+recipe by Automake.
+all-local${tab}:
+${tab}@exit 1
+
+## This won't be recognized as a target+rdependency by Automake.
+all-local${tab}: fail
+
+just_to_separate: dummy deps
+
+## This won't be recognized as a variable assignment by Automake.
+${tab}bin_PROGRAMS = foo
+END
+
+echo AC_OUTPUT >> configure.ac
+
+$ACLOCAL
+$AUTOMAKE
+
+$FGREP '$(EXEEEXT)' Makefile.in && exit 1
+grep 'all:.*all-local' Makefile.in && exit 1
+grep "^${tab}bin_PROGRAMS = foo" Makefile.in
+
+$AUTOCONF
+./configure
+
+$MAKE test
+
+:
diff --git a/t/dollar.sh b/t/dollar.sh
new file mode 100644
index 000000000..f9e0e026b
--- /dev/null
+++ b/t/dollar.sh
@@ -0,0 +1,46 @@
+#!/bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# We should support files with '$' characters in their names.
+# Java people need this.
+# PR/317, reported by Eric Siegerman and Philip Fong.
+
+# Require GNU make for this test. SunOS Make does not support
+# '$$' in a target or a dependency (it outputs the empty string instead).
+required=GNUmake
+. test-init.sh
+
+echo AC_OUTPUT >> configure.ac
+
+cat > Makefile.am <<'EOF'
+mydir = $(prefix)/my
+dist_my_DATA = hello$$world
+
+check-dist: distdir
+ test -f '$(distdir)/hello$$world'
+EOF
+
+: > 'hello$world'
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure --prefix "$(pwd)/inst"
+$MAKE install
+test -f 'inst/my/hello$world'
+$MAKE check-dist
+
+:
diff --git a/t/dollarvar.sh b/t/dollarvar.sh
new file mode 100644
index 000000000..09d93d61f
--- /dev/null
+++ b/t/dollarvar.sh
@@ -0,0 +1,56 @@
+#!/bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure that -Wportability complains about recursive
+# variable expansions and variables containing '$', '$(...)', or
+# '${...}' in the name. We support recursive variable expansions using
+# the latter two constructs for the 'silent-rules' option, and they are
+# rather widely supported in practice. OTOH variable definitions
+# containing a '$' on the left hand side of an assignment are not
+# portable in practice, even though POSIX allows them. :-/
+
+. test-init.sh
+
+cat >Makefile.am <<'EOF'
+x = 1
+foo$x = 1
+bar$(x) = 1
+baz${x} = 1
+bla = $(foo$x)
+bli = $(foo$(x))
+blo = $(foo${x})
+EOF
+
+$ACLOCAL
+
+AUTOMAKE_fails -Wportability
+grep 'Makefile.am:2' stderr
+grep 'Makefile.am:3' stderr
+grep 'Makefile.am:4' stderr
+grep 'Makefile.am:5' stderr
+grep 'Makefile.am:6' stderr
+grep 'Makefile.am:7' stderr
+
+AUTOMAKE_fails -Wportability -Wno-portability-recursive
+grep 'Makefile.am:2' stderr
+grep 'Makefile.am:3' stderr
+grep 'Makefile.am:4' stderr
+grep 'Makefile.am:5' stderr
+grep 'Makefile.am:6' stderr && exit 1
+grep 'Makefile.am:7' stderr && exit 1
+
+
+:
diff --git a/t/dollarvar2.sh b/t/dollarvar2.sh
new file mode 100644
index 000000000..1af16f9d3
--- /dev/null
+++ b/t/dollarvar2.sh
@@ -0,0 +1,86 @@
+#!/bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure that -Wportability turns on portability-recursive,
+# likewise for -Wno-...
+
+. test-init.sh
+
+#
+# First, try a setup where we have a 'portability-recursive' warning,
+# but no "simple" 'portability' warning.
+#
+
+cat >Makefile.am <<'EOF'
+x = 1
+bla = $(foo$(x))
+EOF
+
+$ACLOCAL
+
+# Enabling 'portability' warnings should enable 'portability-recursive'
+# warnings.
+AUTOMAKE_fails -Wnone -Wportability
+grep 'recursive variable expansion' stderr
+# 'portability-recursive' warnings can be enabled by themselves.
+AUTOMAKE_fails -Wnone -Wportability-recursive
+grep 'recursive variable expansion' stderr
+
+# Various ways to disable 'portability-recursive'.
+$AUTOMAKE -Wno-all
+$AUTOMAKE -Wno-portability
+$AUTOMAKE -Wall -Wno-portability-recursive
+
+# '-Wno-portability-recursive' after '-Wportability' correctly disables
+# 'portability-recursive' warnings.
+$AUTOMAKE -Wportability -Wno-portability-recursive
+
+# '-Wno-portability' disables 'portability-recursive' warnings; but
+# a later '-Wportability-recursive' re-enables them. This time, we
+# use AUTOMAKE_OPTIONS to specify the warning levels.
+echo 'AUTOMAKE_OPTIONS = -Wno-portability' >> Makefile.am
+$AUTOMAKE
+echo 'AUTOMAKE_OPTIONS += -Wportability-recursive' >> Makefile.am
+AUTOMAKE_fails
+grep 'recursive variable expansion' stderr
+
+#
+# Now try a setup where we have both a 'portability' warning and
+# a 'portability-recursive' one.
+#
+
+cat >Makefile.am <<'EOF'
+x = 1
+bla = $(foo$(x))
+oops = $(var-with-dash)
+EOF
+
+# Can disable both 'portability' and 'portability-recursive' warnings.
+$AUTOMAKE -Wno-portability
+
+# Disabling 'portability-recursive' warnings should not disable
+# 'portability' warnings.
+AUTOMAKE_fails -Wportability -Wno-portability-recursive
+grep 'var-with-dash' stderr
+grep 'recursive variable expansion' stderr && exit 1
+
+# Enabling 'portability-recursive' warnings should not enable
+# all the 'portability' warning.
+AUTOMAKE_fails -Wno-portability -Wportability-recursive
+grep 'var-with-dash' stderr && exit 1
+grep 'recursive variable expansion' stderr
+
+:
diff --git a/t/double.sh b/t/double.sh
new file mode 100644
index 000000000..9fd39bd29
--- /dev/null
+++ b/t/double.sh
@@ -0,0 +1,29 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure listing a program twice is ok.
+# Report from Manu Rouat.
+
+. test-init.sh
+
+echo AC_PROG_CC >> configure.ac
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = spice nutmeg help sconvert multidec nutmeg
+END
+
+$ACLOCAL
+$AUTOMAKE
diff --git a/t/dup2.sh b/t/dup2.sh
new file mode 100644
index 000000000..cc0f92744
--- /dev/null
+++ b/t/dup2.sh
@@ -0,0 +1,29 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure aclocal only warns about definitions overridden by acinclude.m4.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_FUNC_STRTOD
+END
+
+cat > acinclude.m4 << 'END'
+AC_DEFUN([AM_FUNC_STRTOD])
+END
+
+$ACLOCAL
diff --git a/t/else.sh b/t/else.sh
new file mode 100644
index 000000000..1205c1504
--- /dev/null
+++ b/t/else.sh
@@ -0,0 +1,38 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure line numbers are correct in some error reports.
+
+. test-init.sh
+
+echo 'AM_CONDITIONAL(FOO, true)' >> configure.ac
+
+cat > Makefile.am << 'END'
+# Flag to tell us if apache dir is a source distribution.
+APACHE_DIR_IS_SRC = @APACHE_DIR_IS_SRC@
+
+# We only need to descend into the c dir if we're doing a 1.3 DSO
+# configuration.
+ifeq ("${APACHE_DIR_IS_SRC}","yes")
+SUBDIRS = java
+else
+SUBDIRS = c java
+endif
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+grep '^Makefile\.am:8:.*else without if' stderr
diff --git a/t/empty-data-primary.sh b/t/empty-data-primary.sh
new file mode 100644
index 000000000..170a27bb6
--- /dev/null
+++ b/t/empty-data-primary.sh
@@ -0,0 +1,31 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for bug where if the list of installables is empty, invalid sh
+# code is generated.
+
+. test-init.sh
+
+echo AC_OUTPUT >>configure.ac
+echo 'data_DATA =' >Makefile.am
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure --prefix "$(pwd)/inst"
+$MAKE install
+
+:
diff --git a/t/empty-sources-primary.tap b/t/empty-sources-primary.tap
new file mode 100644
index 000000000..029625606
--- /dev/null
+++ b/t/empty-sources-primary.tap
@@ -0,0 +1,49 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# A test for missing _SOURCES variable. Also test to make sure empty
+# _SOURCES suppresses assumption about default name.
+
+. test-init.sh
+
+plan_ 5
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_SUBST([zoo_obj])
+END
+
+cat > Makefile.am << 'END'
+sbin_PROGRAMS = pavel
+
+bin_PROGRAMS = pavel2
+pavel2_SOURCES =
+
+noinst_PROGRAMS = zoo
+zoo_SOURCES =
+EXTRA_zoo_SOURCES = bar.c foo.c
+zoo_DEPENDENCIES = $(zoo_obj)
+zoo_LDADD = $(zoo_DEPENDENCIES)
+END
+
+command_ok_ "aclocal" $ACLOCAL
+command_ok_ "automake" $AUTOMAKE
+
+command_ok_ "default _SOURCES" $FGREP ' pavel.c' Makefile.in
+command_ok_ "empty _SOURCES (basic)" not $FGREP 'pavel2.' Makefile.in
+command_ok_ "empty _SOURCES (elaborate)" not $FGREP 'zoo.' Makefile.in
+
+:
diff --git a/t/exdir.sh b/t/exdir.sh
new file mode 100644
index 000000000..778d0b70f
--- /dev/null
+++ b/t/exdir.sh
@@ -0,0 +1,30 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check to make sure new extended directory mechanism works.
+
+. test-init.sh
+
+cat > Makefile.am << 'EOF'
+htmldir = $(prefix)/html
+html_DATA = zot.html
+pkgdata_DATA = qbert
+EOF
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '^DATA' Makefile.in | grep html
diff --git a/t/exdir2.sh b/t/exdir2.sh
new file mode 100644
index 000000000..39c1a3ba8
--- /dev/null
+++ b/t/exdir2.sh
@@ -0,0 +1,29 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure undefined directories are invalid.
+
+. test-init.sh
+
+cat > Makefile.am << 'EOF'
+quuz_DATA = zot.html
+pkgdata_DATA = qbert
+EOF
+
+$ACLOCAL
+AUTOMAKE_fails
+grep 'pkgdatadir' stderr && exit 1
+grep 'Makefile.am:1:.*quuzdir.*undefined' stderr
diff --git a/t/exdir3.sh b/t/exdir3.sh
new file mode 100644
index 000000000..43a79ef23
--- /dev/null
+++ b/t/exdir3.sh
@@ -0,0 +1,35 @@
+#! /bin/sh
+# Copyright (C) 2007-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure pkgdatadir can be overridden via AC_SUBST.
+
+. test-init.sh
+
+cat >>configure.ac <<'EOF'
+AC_SUBST([pkgdatadir], ["FOO"])
+AC_OUTPUT
+EOF
+
+cat > Makefile.am << 'EOF'
+showme:
+ @echo $(pkgdatadir)
+EOF
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+$MAKE showme | grep FOO
diff --git a/t/exeext.sh b/t/exeext.sh
new file mode 100644
index 000000000..eca03e502
--- /dev/null
+++ b/t/exeext.sh
@@ -0,0 +1,83 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure '.' in an exe name doesn't fool us.
+# Report from Robert Collins.
+# Also make sure we rewrite conditionals variables.
+# Also check for PR/352.
+# Also make sure the old definitions of bin_PROGRAMS and friend
+# aren't left around. Report from Jim Meyering.
+
+required=cc
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_CONDITIONAL([WANT_MT], [test -z "$revert"])
+AM_CONDITIONAL([WANT_RMT], [test -z "$revert"])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = maude
+sbin_PROGRAMS = maude.static
+## We don't define this one for now. Probably it is an error.
+## noinst_PROGRAMS = maude2.exe
+check_PROGRAMS = maude3$(EXEEXT)
+
+if WANT_MT
+ bin_PROGRAMS += mt
+endif
+if WANT_RMT
+ libexec_PROGRAMS = rmt
+endif
+
+test-default:
+ is $(bin_PROGRAMS) == maude$(EXEEXT) mt$(EXEEXT)
+ is $(sbin_PROGRAMS) == maude.static$(EXEEXT)
+ is $(check_PROGRAMS) == maude3$(EXEEXT)
+ is $(libexec_PROGRAMS) == rmt$(EXEEXT)
+
+test-revert:
+ is $(bin_PROGRAMS) == maude$(EXEEXT)
+ is $(sbin_PROGRAMS) == maude.static$(EXEEXT)
+ is $(check_PROGRAMS) == maude3$(EXEEXT)
+ is $(libexec_PROGRAMS) ==
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+grep '^maude$(EXEEXT):' Makefile.in
+grep '^maude\.static$(EXEEXT):' Makefile.in
+grep '^maude3$(EXEEXT):' Makefile.in
+grep '^mt$(EXEEXT):' Makefile.in
+grep '^rmt$(EXEEXT):' Makefile.in
+test $(grep -c '^bin_PROGRAMS =' Makefile.in) -eq 1
+
+# Make sure $(EXEEXT) gets stripped before canonicalization.
+grep 'maude3__EXEEXT__OBJECTS' Makefile.in && exit 1
+
+./configure
+run_make test-default
+run_make test-default EXEEXT=.foo
+
+./configure revert=yes
+run_make test-revert
+run_make test-revert EXEEXT=.foo
+
+:
diff --git a/t/exeext2.sh b/t/exeext2.sh
new file mode 100644
index 000000000..2ff0cd081
--- /dev/null
+++ b/t/exeext2.sh
@@ -0,0 +1,43 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure no-exeext option works.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = maude
+
+maude:
+ yeah
+END
+
+$ACLOCAL
+
+$AUTOMAKE -Wnone
+AUTOMAKE_fails -Wnone -Wobsolete
+grep 'deprecated.*maude' stderr
+AUTOMAKE_fails -Wall
+grep 'deprecated.*maude' stderr
+grep 'overrid.*maude' stderr
+
+echo 'AUTOMAKE_OPTIONS = no-exeext' >> Makefile.am
+
+$AUTOMAKE -Wall -Wno-override
diff --git a/t/exeext3.sh b/t/exeext3.sh
new file mode 100644
index 000000000..be699473f
--- /dev/null
+++ b/t/exeext3.sh
@@ -0,0 +1,43 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure we can override a program rule.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = maude 3dldf
+
+maude$(EXEEXT):
+ yeah
+
+3dldf$(EXEEXT):
+ yippie
+END
+
+$ACLOCAL
+$AUTOMAKE -Wno-override
+
+$FGREP 'maude$(EXEEXT):' Makefile.in
+test 1 -eq $(grep -c 'maude.*:' Makefile.in)
+$FGREP '3dldf$(EXEEXT):' Makefile.in
+test 1 -eq $(grep -c '3dldf.*:' Makefile.in)
+
+:
diff --git a/t/exeext4.sh b/t/exeext4.sh
new file mode 100644
index 000000000..35b495d11
--- /dev/null
+++ b/t/exeext4.sh
@@ -0,0 +1,70 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure $(EXEEXT) is appended to programs and to tests that are
+# programs, but not to @substitutions@.
+
+# For gen-testsuite-part: ==> try-with-serial-tests <==
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_CONDITIONAL([COND], [test -n "$cond"])
+AC_SUBST([programs], ['prg1$(EXEEXT) prg2$(EXEEXT)'])
+AC_SUBST([CC], [whocares])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = no-dependencies
+EXEEXT = .x
+if COND
+ BAR = bar
+ DEP = bar
+ BAZE = baz$(EXEEXT)
+ BAZ = baz $(DEP)
+endif
+bin_PROGRAMS = $(programs) @programs@ prg3 $(BAR) $(BAZE)
+EXTRA_PROGRAMS = prg1 prg2 prg3
+TESTS = prg1 prg3 prg4 $(BAZ)
+
+.PHONY: test-cond test-nocond
+test-nocond:
+ is $(bin_PROGRAMS) == prg1.x prg2.x prg1.x prg2.x prg3.x
+ is $(EXTRA_PROGRAMS) == prg1.x prg2.x prg3.x
+ is $(TESTS) == prg1.x prg3.x prg4
+test-cond:
+ is $(bin_PROGRAMS) == prg1.x prg2.x prg1.x prg2.x prg3.x bar.x baz.x
+ is $(EXTRA_PROGRAMS) == prg1.x prg2.x prg3.x
+ is $(TESTS) == prg1.x prg3.x prg4 baz.x bar.x
+ is $(BAR) $(BAZ) == bar baz bar
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing --copy
+
+./configure
+$MAKE test-nocond
+
+./configure cond=yes
+$MAKE test-cond
+
+# Only two am__EXEEXT_* variables are needed here: one for BAR, and one
+# BAZ. The latter must use the former.
+test 2 -eq $(grep -c '__EXEEXT_. =' Makefile.in)
+grep 'am__EXEEXT_2 = .*am__EXEEXT_1' Makefile.in
+
+:
diff --git a/t/ext.sh b/t/ext.sh
new file mode 100644
index 000000000..23e1e0b5e
--- /dev/null
+++ b/t/ext.sh
@@ -0,0 +1,43 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure extensions are set correctly for various languages.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_F77
+AC_PROG_FC
+AC_PROG_OBJC
+AC_PROG_OBJCXX
+AM_PROG_UPC
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo
+foo_SOURCES = 1.f 2.for 3.f90 4.f95 5.F 6.F90 7.F95 8.r 9.m 10.mm 11.upc
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+for ext in f for f90 f95 F F90 F95 r m mm upc; do
+ grep "^\.$ext\.o:" Makefile.in
+ grep "^$ext\.o:" Makefile.in && exit 1
+ : For shells with busted 'set -e'.
+done
+
+:
diff --git a/t/ext2.sh b/t/ext2.sh
new file mode 100644
index 000000000..f1ed2fe22
--- /dev/null
+++ b/t/ext2.sh
@@ -0,0 +1,67 @@
+#!/bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Regression test for a bug reported by Ladislav Strojil.
+# Using different extensions for the same language should not
+# output the build rules several times.
+
+. test-init.sh
+
+cat >>configure.ac <<EOF
+AC_PROG_CXX
+EOF
+
+cat >Makefile.am <<EOF
+AUTOMAKE_OPTIONS = subdir-objects
+bin_PROGRAMS = p q r
+p_SOURCES = a.cc b.cpp c.cxx
+q_SOURCES = sub/d.cc sub/e.cpp sub/f.cxx
+r_SOURCES = g.cc h.cpp i.cxx
+r_CXXFLAGS = -DFOO
+EOF
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '\.o:' Makefile.in > rules
+cat rules
+
+# Here is an example of bogus output. The rules are output several
+# times.
+#| .cc.o:
+#| d.o: sub/d.cc
+#| e.o: sub/e.cpp
+#| f.o: sub/f.cxx
+#| r-g.o: g.cc
+#| r-h.o: h.cpp
+#| r-i.o: i.cxx
+#| .cpp.o:
+#| d.o: sub/d.cc
+#| e.o: sub/e.cpp
+#| f.o: sub/f.cxx
+#| r-g.o: g.cc
+#| r-h.o: h.cpp
+#| r-i.o: i.cxx
+#| .cxx.o:
+#| #d.o: sub/d.cc
+#| #e.o: sub/e.cpp
+#| #f.o: sub/f.cxx
+#| #r-g.o: g.cc
+#| #r-h.o: h.cpp
+#| #r-i.o: i.cxx
+
+# Bail out if we find a duplicate.
+$PERL -ne 'if (exists $a{$_}) { exit (1) } else { $a{$_} = 1 }' < rules
diff --git a/t/ext3.sh b/t/ext3.sh
new file mode 100644
index 000000000..6ff565bdf
--- /dev/null
+++ b/t/ext3.sh
@@ -0,0 +1,39 @@
+#! /bin/sh
+# Copyright (C) 2009-2017 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 3 of the License, 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 <https://www.gnu.org/licenses/>.
+
+# Cover corner cases of derive_suffix wrt. file extensions:
+# - extension declared with SUFFIXES but with no suffix rule for it
+# - extension with a suffix rule but none that leads us to $(OBJEXT)
+# In both cases, we don't try to create a rule; but we shouldn't
+# fail either, because magic might be happening behind our back.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo bar
+foo_SOURCES = foo.goo
+SUFFIXES = .goo
+bar_SOURCES = bar.woo
+.woo.zoo: ; making a zoo $@ from a woo $<
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+exit 0
diff --git a/t/extra-data.sh b/t/extra-data.sh
new file mode 100644
index 000000000..054416ea1
--- /dev/null
+++ b/t/extra-data.sh
@@ -0,0 +1,33 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Checks on the obsolete EXTRA_DATA variable.
+
+. test-init.sh
+
+echo 'AC_SUBST([CODICIL])' >> configure.ac
+
+$ACLOCAL
+
+# EXTRA_DATA is not required ....
+echo sysconf_DATA = @CODICIL@ > Makefile.am
+$AUTOMAKE
+
+# ... but it can nonetheless be specified.
+echo EXTRA_DATA = codicil.txt >> Makefile.am
+$AUTOMAKE
+
+:
diff --git a/t/extra-deps-lt.sh b/t/extra-deps-lt.sh
new file mode 100644
index 000000000..e3c8ba08f
--- /dev/null
+++ b/t/extra-deps-lt.sh
@@ -0,0 +1,86 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test EXTRA_*_DEPENDENCIES, libtool version; see 'extra-deps.sh' for
+# non-libtool variant.
+
+required='cc libtoolize'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_LIBTOOL
+AC_SUBST([deps], [bardep])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+noinst_LTLIBRARIES = libfoo.la
+EXTRA_libfoo_la_DEPENDENCIES = libfoodep
+libfoodep:
+ @echo making $@
+ @: > $@
+CLEANFILES = libfoodep
+
+bin_PROGRAMS = bar
+bar_LDADD = libfoo.la
+EXTRA_bar_DEPENDENCIES = $(deps)
+
+EXTRA_DIST = bardep
+
+.PHONY: bar-has-been-updated
+bar-has-been-updated:
+ is_newest bar$(EXEEXT) libfoo.la
+END
+
+cat >libfoo.c <<'END'
+int libfoo () { return 0; }
+END
+
+cat >bar.c <<'END'
+extern int libfoo ();
+int main () { return libfoo (); }
+END
+
+libtoolize
+$ACLOCAL
+$AUTOMAKE --add-missing
+$AUTOCONF
+
+./configure
+
+# Hypothesis: EXTRA_*_DEPENDENCIES are honored.
+
+: >foodep
+: >foodep2
+: >bardep
+run_make -O
+grep 'making libfoodep' stdout
+
+rm -f bardep
+$MAKE && exit 1
+: >bardep
+
+$MAKE
+$sleep
+touch libfoo.la
+$MAKE
+$MAKE bar-has-been-updated
+
+$MAKE distcheck
+
+:
diff --git a/t/extra-deps.sh b/t/extra-deps.sh
new file mode 100644
index 000000000..a36c7e712
--- /dev/null
+++ b/t/extra-deps.sh
@@ -0,0 +1,104 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test EXTRA_*_DEPENDENCIES. See 'extra-deps-lt.sh' for libtool variant.
+
+required=cc
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+AC_SUBST([deps], [bardep])
+AM_CONDITIONAL([COND], [test -n "$cond"])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+noinst_LIBRARIES = libfoo.a
+EXTRA_libfoo_a_DEPENDENCIES = libfoodep
+libfoodep:
+ @echo making $@
+ @: > $@
+CLEANFILES = libfoodep
+
+bin_PROGRAMS = foo bar
+EXTRA_foo_DEPENDENCIES = foodep
+if COND
+EXTRA_foo_DEPENDENCIES += foodep2
+endif
+bar_LDADD = libfoo.a
+EXTRA_bar_DEPENDENCIES = $(deps)
+
+EXTRA_DIST = foodep bardep
+
+.PHONY: bar-has-been-updated
+bar-has-been-updated:
+ is_newest bar$(EXEEXT) libfoo.a
+END
+
+cat >libfoo.c <<'END'
+int libfoo () { return 0; }
+END
+
+cat >foo.c <<'END'
+int main () { return 0; }
+END
+
+cat >bar.c <<'END'
+extern int libfoo ();
+int main () { return libfoo (); }
+END
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+$AUTOCONF
+
+./configure cond=yes
+
+# Hypotheses:
+# - EXTRA_*_DEPENDENCIES are honored.
+# - Conditionals and substitutions are honored.
+# - *_DEPENDENCIES are not overwritten by their EXTRA_* counterparts.
+
+: >foodep
+: >foodep2
+: >bardep
+run_make -O
+grep 'making libfoodep' stdout
+
+rm -f foodep
+$MAKE && exit 1
+: >foodep
+
+rm -f foodep2
+$MAKE && exit 1
+: >foodep2
+
+rm -f bardep
+$MAKE && exit 1
+: >bardep
+
+$MAKE
+$sleep
+touch libfoo.a
+$MAKE
+$MAKE bar-has-been-updated
+
+$MAKE distcheck
+
+:
diff --git a/t/extra-dist-dirs-and-subdirs.sh b/t/extra-dist-dirs-and-subdirs.sh
new file mode 100644
index 000000000..eb958a0d5
--- /dev/null
+++ b/t/extra-dist-dirs-and-subdirs.sh
@@ -0,0 +1,57 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check to make sure EXTRA_DIST can contain a directory or
+# a subdirectory, in $(builddir) or $(srcdir).
+
+. test-init.sh
+
+echo AC_OUTPUT >> configure.ac
+
+cat > Makefile.am << 'END'
+EXTRA_DIST=foo/bar baz foo2/bar2 baz2
+
+check: distdir
+ test -f $(distdir)/foo/bar/baz
+ test -f $(distdir)/baz/foo
+ test -f $(distdir)/foo2/bar2/baz2
+ test -f $(distdir)/baz2/foo2
+END
+
+# Create some files in $(srcdir)
+mkdir foo
+mkdir foo/bar
+touch foo/bar/baz
+mkdir baz
+touch baz/foo
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+mkdir build
+cd build
+../configure
+
+# Create some files in $(builddir)
+mkdir foo2
+mkdir foo2/bar2
+touch foo2/bar2/baz2
+mkdir baz2
+touch baz2/foo2
+
+$MAKE check
+
+:
diff --git a/t/extra-dist-vpath-dir-merge.sh b/t/extra-dist-vpath-dir-merge.sh
new file mode 100644
index 000000000..95095e575
--- /dev/null
+++ b/t/extra-dist-vpath-dir-merge.sh
@@ -0,0 +1,66 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check to make sure that when distdir is invoked in a VPATH
+# configuration and has to distribute directory X, it actually merge
+# $(srcdir)/X and ./X, with the files from the later overriding the
+# files from the former.
+
+. test-init.sh
+
+echo AC_OUTPUT >> configure.ac
+
+cat > Makefile.am << 'END'
+EXTRA_DIST=foo/bar baz
+
+check: distdir
+ test -f $(distdir)/foo/bar/baz
+ test -f $(distdir)/foo/bar/baz2
+ test -f $(distdir)/baz/foo
+ test -f $(distdir)/baz/foo2
+ grep source $(distdir)/foo/bar/baz
+ grep build $(distdir)/foo/bar/baz2
+ grep source $(distdir)/baz/foo
+ grep build $(distdir)/baz/foo2
+END
+
+# Create some files in $(srcdir)
+mkdir foo
+mkdir foo/bar
+echo source > foo/bar/baz
+echo source > foo/bar/baz2
+mkdir baz
+echo source > baz/foo
+echo source > baz/foo2
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+mkdir build
+cd build
+../configure
+
+# Create some files in $(builddir) that will override part of the
+# files if $(srcdir) when the distribution is made.
+mkdir foo
+mkdir foo/bar
+echo build > foo/bar/baz2
+mkdir baz
+echo build > baz/foo2
+
+$MAKE check
+
+:
diff --git a/t/extra-dist-vpath-dir.sh b/t/extra-dist-vpath-dir.sh
new file mode 100644
index 000000000..bce2b44eb
--- /dev/null
+++ b/t/extra-dist-vpath-dir.sh
@@ -0,0 +1,40 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check to make sure EXTRA_DIST can contain a directory from $buildir.
+# From Dean Povey.
+
+. test-init.sh
+
+echo AC_OUTPUT >> configure.ac
+
+cat > Makefile.am << 'END'
+EXTRA_DIST=foo
+
+foo:
+ mkdir foo
+ touch foo/bar
+END
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+mkdir build
+cd build
+../configure
+$MAKE distdir
+
+:
diff --git a/t/extra-dist-wildcards-gnu.sh b/t/extra-dist-wildcards-gnu.sh
new file mode 100644
index 000000000..a0536b8c4
--- /dev/null
+++ b/t/extra-dist-wildcards-gnu.sh
@@ -0,0 +1,93 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check for more complex usage of wildcards in EXTRA_DIST.
+# Suggested by observations from Braden McDaniel.
+
+required=GNUmake
+. test-init.sh
+
+echo AC_OUTPUT >> configure.ac
+
+cat > Makefile.am <<'END'
+AUTOMAKE_OPTIONS = -Wno-portability
+
+EXTRA_DIST = $(wildcard [!c-z].t d.t [ab].dir foo.* *zardoz*)
+
+.PHONY: prereq
+prereq:
+ echo a > a.t
+ echo b > b.t
+ echo c > c.t
+ echo d > d.t
+ echo m > m.t
+ echo z > z.t
+ mkdir a.dir b.dir c.dir
+ echo a1 > a.dir/f1
+ echo a2 > a.dir/f2
+ echo bb > b.dir/f
+ echo cc > c.dir/x
+ echo 0 > foo
+ echo 1 > foo.x
+ echo 2 > foo.bar
+ echo foo > _zardoz_
+
+.PHONY: test
+test: distdir
+ ls -l $(distdir) $(distdir)/*.dir ;: For debugging.
+ diff a.t $(distdir)/a.t
+ diff b.t $(distdir)/b.t
+ test ! -r $(distdir)/c.t
+ diff d.t $(distdir)/d.t
+ test ! -r $(distdir)/m.t
+ test ! -r $(distdir)/z.t
+ diff a.dir/f1 $(distdir)/a.dir/f1
+ diff a.dir/f2 $(distdir)/a.dir/f2
+ diff b.dir/f $(distdir)/b.dir/f
+ test ! -r $(distdir)/c.dir
+ diff foo.x $(distdir)/foo.x
+ diff foo.bar $(distdir)/foo.bar
+ test ! -r $(distdir)/foo
+ diff _zardoz_ $(distdir)/_zardoz_
+check-local:
+ ls -l . *.dir ;: For debugging.
+ test -f $(srcdir)/a.t
+ test -f $(srcdir)/b.t
+ test ! -r $(srcdir)/c.t
+ test -f $(srcdir)/d.t
+ test ! -r $(srcdir)/m.t
+ test ! -r $(srcdir)/z.t
+ test -f $(srcdir)/a.dir/f1
+ test -f $(srcdir)/a.dir/f2
+ test -f $(srcdir)/b.dir/f
+ test ! -r $(srcdir)/c.dir
+ test -f $(srcdir)/foo.x
+ test -f $(srcdir)/foo.bar
+ test ! -r $(srcdir)/foo
+ test -f $(srcdir)/_zardoz_
+END
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+./configure
+$MAKE prereq
+ls -l . *.dir # For debugging.
+$MAKE test
+$MAKE distcheck
+
+:
diff --git a/t/extra-dist-wildcards-vpath.sh b/t/extra-dist-wildcards-vpath.sh
new file mode 100644
index 000000000..f0be87e81
--- /dev/null
+++ b/t/extra-dist-wildcards-vpath.sh
@@ -0,0 +1,53 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that wildcards in elements of EXTRA_DIST are honoured when
+# $srcdir != $builddir, if properly declared.
+# Suggested by observations from Braden McDaniel.
+
+required=GNUmake
+. test-init.sh
+
+echo AC_OUTPUT >> configure.ac
+
+
+cat > Makefile.am <<'END'
+EXTRA_DIST = *.foo $(srcdir)/*.foo $(builddir)/*.bar $(srcdir)/*.bar
+
+.PHONY: test
+test: distdir
+ ls -l $(srcdir) $(builddir) $(distdir)
+ diff $(srcdir)/a.foo $(distdir)/a.foo
+ diff $(srcdir)/b.bar $(distdir)/b.bar
+ diff $(builddir)/c.foo $(distdir)/c.foo
+ diff $(builddir)/d.bar $(distdir)/d.bar
+END
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+echo aaa > a.foo
+echo bbb > b.bar
+mkdir build
+echo ccc > build/c.foo
+echo ddd > build/d.bar
+
+cd build
+../configure
+$MAKE test
+
+:
diff --git a/t/extra-dist-wildcards.sh b/t/extra-dist-wildcards.sh
new file mode 100644
index 000000000..4c44caa5b
--- /dev/null
+++ b/t/extra-dist-wildcards.sh
@@ -0,0 +1,50 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that wildcards in EXTRA_DIST are honoured.
+# Suggested by observations from Braden McDaniel.
+# See also sister test 'extra-dist-wildcards-gnu.sh', that checks a
+# similar usage with the involvement of the $(wildcard) GNU make builtin.
+
+required=GNUmake
+. test-init.sh
+
+echo AC_OUTPUT >> configure.ac
+
+cat > Makefile.am <<'END'
+EXTRA_DIST = *.foo
+.PHONY: test
+test: distdir
+ diff a.foo $(distdir)/a.foo
+ diff b.foo $(distdir)/b.foo
+ test ! -r $(distdir)/c.bar
+check-local:
+ test -f $(srcdir)/a.foo
+ test -f $(srcdir)/b.foo
+ test ! -r $(srcdir)/c.bar
+END
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+echo aaa > a.foo
+echo bbb > b.foo
+echo ccc > c.bar
+./configure
+$MAKE test
+
+:
diff --git a/t/extra-portability.sh b/t/extra-portability.sh
new file mode 100644
index 000000000..487513514
--- /dev/null
+++ b/t/extra-portability.sh
@@ -0,0 +1,95 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check interactions between the 'portability' and 'extra-portability'
+# warning categories:
+# 1. '-Wextra-portability' must imply '-Wportability'.
+# 2. '-Wno-portability' must imply '-Wno-extra-portability'.
+# 3. '-Wall' must imply '-Wextra-portability'.
+
+. test-init.sh
+
+# We want (almost) complete control over automake options.
+AUTOMAKE="$am_original_AUTOMAKE --foreign -Werror"
+
+cat >>configure.ac <<END
+AC_PROG_CC
+AC_PROG_RANLIB
+AC_OUTPUT
+END
+
+$ACLOCAL
+
+#
+# First, a setup where only an extra-portability warning is present
+# (no "simple" portability-warnings are).
+#
+
+cat >Makefile.am <<END
+EXTRA_LIBRARIES = libfoo.a
+libfoo_a_SOURCES = foo.c
+END
+
+# Sanity check: extra-portability warnings causes the expected error.
+AUTOMAKE_fails -Wextra-portability
+grep 'requires.*AM_PROG_AR' stderr
+
+# Warnings in extra-portability category are not enabled by default.
+$AUTOMAKE
+
+# -Wall enables extra-portability.
+AUTOMAKE_fails -Wall
+grep 'requires.*AM_PROG_AR' stderr
+
+# Disabling portability disables extra-portability as well.
+$AUTOMAKE -Wextra-portability -Wno-portability
+$AUTOMAKE -Wall -Wno-portability
+
+#
+# Now, a setup where also a "simple" portability warning is present.
+#
+
+echo 'var = $(foo--bar)' >> Makefile.am
+
+# Enabling extra-portability enables portability as well ...
+AUTOMAKE_fails -Wextra-portability
+grep 'foo--bar' stderr
+grep 'requires.*AM_PROG_AR' stderr
+# ... even if it had been previously disabled.
+AUTOMAKE_fails -Wno-portability -Wextra-portability
+grep 'foo--bar' stderr
+grep 'requires.*AM_PROG_AR' stderr
+
+# Disabling extra-portability leaves portability intact (1).
+AUTOMAKE_fails -Wportability -Wno-extra-portability
+grep 'foo--bar' stderr
+grep 'requires.*AM_PROG_AR' stderr && exit 1
+# Disabling extra-portability leaves portability intact (2).
+AUTOMAKE_fails -Wall -Wno-extra-portability
+grep 'foo--bar' stderr
+grep 'requires.*AM_PROG_AR' stderr && exit 1
+
+# Enabling portability does not enable extra-portability.
+AUTOMAKE_fails -Wportability
+grep 'foo--bar' stderr
+grep 'requires.*AM_PROG_AR' stderr && exit 1
+
+# Disabling portability disables extra-portability.
+$AUTOMAKE -Wno-portability
+$AUTOMAKE -Wextra-portability -Wno-portability
+$AUTOMAKE -Wall -Wno-portability
+
+:
diff --git a/t/extra-portability2.sh b/t/extra-portability2.sh
new file mode 100644
index 000000000..dbb43fea5
--- /dev/null
+++ b/t/extra-portability2.sh
@@ -0,0 +1,50 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that extra-portability warnings are not enabled by --gnits,
+# --gnu and --foreign.
+
+. test-init.sh
+
+# We want complete control over automake options.
+AUTOMAKE=$am_original_AUTOMAKE
+
+cat >>configure.ac <<END
+AC_PROG_CC
+AC_PROG_RANLIB
+AC_OUTPUT
+END
+
+cat >Makefile.am <<END
+EXTRA_LIBRARIES = libfoo.a
+libfoo_a_SOURCES = foo.c
+END
+
+$ACLOCAL
+
+# Make sure the test is useful.
+AUTOMAKE_fails -Wextra-portability \
+ || fatal_ "setup doesn't trigger 'extra-portability' warnings"
+
+$AUTOMAKE --foreign
+
+touch INSTALL NEWS README AUTHORS ChangeLog COPYING # Satisfy --gnu.
+$AUTOMAKE --gnu
+
+touch THANKS # Satisfy also --gnits.
+$AUTOMAKE --gnits
+
+:
diff --git a/t/extra-portability3.sh b/t/extra-portability3.sh
new file mode 100644
index 000000000..0ea3e7ab4
--- /dev/null
+++ b/t/extra-portability3.sh
@@ -0,0 +1,60 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check interactions between the 'portability-recursive' and
+# 'extra-portability' warning categories.
+
+. test-init.sh
+
+# We want (almost) complete control over automake options.
+AUTOMAKE="$am_original_AUTOMAKE --foreign -Werror"
+
+cat >>configure.ac <<END
+AC_PROG_CC
+AC_PROG_RANLIB
+AC_OUTPUT
+END
+
+$ACLOCAL
+
+cat >Makefile.am <<'END'
+baz = $(foo$(bar))
+lib_LIBRARIES = libfoo.a
+libfoo_a_SOURCES = foo.c
+END
+
+# 'extra-portability' implies 'portability-recursive'.
+AUTOMAKE_fails -Wextra-portability
+grep 'requires.*AM_PROG_AR' stderr
+grep 'recursive variable expansion' stderr
+
+# We can disable 'extra-portability' while leaving
+# 'portability-recursive' intact.
+AUTOMAKE_fails -Wportability-recursive -Wno-extra-portability
+grep 'requires.*AM_PROG_AR' stderr && exit 1
+grep 'recursive variable expansion' stderr
+
+# We can disable 'portability-recursive' while leaving
+# 'extra-portability' intact.
+AUTOMAKE_fails -Wextra-portability -Wno-portability-recursive
+grep 'requires.*AM_PROG_AR' stderr
+grep 'recursive variable expansion' stderr && exit 1
+
+# Disabling 'portability' disables 'portability-recursive' and
+# 'extra-portability'.
+$AUTOMAKE -Wextra-portability -Wno-portability
+
+:
diff --git a/t/extra-programs-and-libs.sh b/t/extra-programs-and-libs.sh
new file mode 100644
index 000000000..998643b68
--- /dev/null
+++ b/t/extra-programs-and-libs.sh
@@ -0,0 +1,43 @@
+#!/bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# Ensure we warn about substitutions in bin_PROGRAMS if EXTRA_PROGRAMS
+# are missing; but only if the former is not AC_SUBSTed itself
+# (lib_LIBRARIES is in the same boat here).
+
+. test-init.sh
+
+cat >>configure.ac <<'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+AC_SUBST([lib_LIBRARIES])
+AC_SUBST([bins])
+AC_OUTPUT
+END
+
+cat >Makefile.am <<'END'
+bin_PROGRAMS = @bins@
+END
+
+: > ar-lib
+
+$ACLOCAL
+AUTOMAKE_fails
+grep 'bin_PROGRAMS.*contains configure substitution' stderr
+grep 'lib_LIBRARIES.*contains configure substitution' stderr && exit 1
+
+:
diff --git a/t/extra-programs-empty.sh b/t/extra-programs-empty.sh
new file mode 100644
index 000000000..5a7390857
--- /dev/null
+++ b/t/extra-programs-empty.sh
@@ -0,0 +1,53 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test that EXTRA_PROGRAMS doesn't get removed because it is empty.
+# This check has been introduced in commit 'Release-1-9-254-g9d0eaef'
+# into the former test 'subst2.test'.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_FILES([Makefile2 Makefile3])
+AC_SUBST([prog])
+AC_PROG_CC
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+EXTRA_PROGRAMS =
+END
+
+cat > Makefile2.am <<'END'
+bin_PROGRAMS = a @prog@ b
+EXTRA_PROGRAMS =
+END
+
+cat > Makefile3.am <<'END'
+empty =
+EXTRA_PROGRAMS = $(empty)
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '^EXTRA_PROGRAMS = *$' Makefile.in
+grep '^EXTRA_PROGRAMS = *$' Makefile2.in
+# Be laxer here, since EXTRA_PROGRAMS might be internally rewritten
+# by Automake when it contains references to other variables.
+grep '^EXTRA_PROGRAMS =' Makefile3.in
+
+:
diff --git a/t/extra-programs-misc.sh b/t/extra-programs-misc.sh
new file mode 100644
index 000000000..a34a7cf9f
--- /dev/null
+++ b/t/extra-programs-misc.sh
@@ -0,0 +1,36 @@
+#!/bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# Ensure defining bin_PROGRAMS in terms of EXTRA_PROGRAMS works,
+# and that referring to the same program with inconsistent addition
+# of $(EXEEXT) works, too.
+
+. test-init.sh
+
+cat >>configure.ac <<'END'
+AC_PROG_CC
+AC_OUTPUT
+END
+cat >Makefile.am <<'END'
+EXTRA_PROGRAMS = foo bar
+bin_PROGRAMS = $(EXTRA_PROGRAMS) baz
+noinst_PROGRAMS = baz$(EXEEXT)
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+:
diff --git a/t/extra-sources-no-spurious.sh b/t/extra-sources-no-spurious.sh
new file mode 100644
index 000000000..cf4ff167f
--- /dev/null
+++ b/t/extra-sources-no-spurious.sh
@@ -0,0 +1,34 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check to make sure EXTRA_foo_SOURCES are not defined unnecessarily.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+grep EXTRA_foo_SOURCES Makefile.in && exit 1
+
+:
diff --git a/t/extra-sources.sh b/t/extra-sources.sh
new file mode 100644
index 000000000..db00e6a9e
--- /dev/null
+++ b/t/extra-sources.sh
@@ -0,0 +1,37 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure EXTRA_..._SOURCES actually works.
+# Bug report from Henrik Frystyk Nielsen.
+
+. test-init.sh
+
+echo AC_PROG_CC >> configure.ac
+
+cat > Makefile.am <<'END'
+bin_PROGRAMS = www
+www_SOURCES = www.c
+EXTRA_www_SOURCES = xtra.c
+www_LDADD = @extra_stuff@
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '@am__include@ .*/xtra\.Po' Makefile.in
+grep '^am__depfiles_remade =.*/xtra.Po' Makefile.in
+
+:
diff --git a/t/extra.sh b/t/extra.sh
new file mode 100644
index 000000000..b67c0d756
--- /dev/null
+++ b/t/extra.sh
@@ -0,0 +1,41 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure EXTRA_ targets are generated. This test used to
+# make sure the targets were *not* generated. That is wrong; the
+# targets should always be generated. However, they should not be
+# built by default.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = @foo@
+EXTRA_PROGRAMS = zardoz
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+grep "^zardoz" Makefile.in
+
+# Can't have EXTRA clean rules.
+grep 'clean.*EXTRA' Makefile.in && exit 1
+
+:
diff --git a/t/f90only.sh b/t/f90only.sh
new file mode 100644
index 000000000..2f0c02ace
--- /dev/null
+++ b/t/f90only.sh
@@ -0,0 +1,34 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure programs with only Fortran 90 source are handled properly.
+# (copied from 'fonly.sh') Mike Nolta <mrnolta@princeton.edu>
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_FC
+END
+
+cat > Makefile.am <<'END'
+bin_PROGRAMS = zardoz
+zardoz_SOURCES = zardoz.f90
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+grep 'zardoz.f90' Makefile.in
diff --git a/t/flavor.sh b/t/flavor.sh
new file mode 100644
index 000000000..e6156994b
--- /dev/null
+++ b/t/flavor.sh
@@ -0,0 +1,60 @@
+#! /bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure flavors like 'cygnus', 'gnu', 'gnits' and command line
+# options like '--ignore-deps' and '--silent-rules' are preserved across
+# automake reruns.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_MAINTAINER_MODE
+AC_OUTPUT
+END
+
+: > Makefile.am
+: > NEWS
+: > README
+: > AUTHORS
+: > ChangeLog
+: > THANKS
+
+$ACLOCAL
+$AUTOCONF
+# Order flavors so that all needed files are installed early.
+for flavor in --gnits --gnu --foreign --ignore-deps; do
+
+ $AUTOMAKE --add-missing $flavor
+ ./configure --enable-maintainer-mode
+ grep " $flavor" Makefile
+ $MAKE
+
+ # Two code paths in configure.am:
+ # - either a file in $(am__configure_deps) has been updated ...
+ $sleep
+ touch aclocal.m4
+ $MAKE
+ grep " $flavor" Makefile
+
+ # - ... or not; i.e., Makefile.am or an included file has.
+ $sleep
+ touch Makefile.am
+ $MAKE
+ grep " $flavor" Makefile
+
+done
+
+:
diff --git a/t/flibs.sh b/t/flibs.sh
new file mode 100644
index 000000000..c43f4f4ac
--- /dev/null
+++ b/t/flibs.sh
@@ -0,0 +1,54 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure 'AC_F77_LIBRARY_LDFLAGS' works properly.
+# Matthew D. Langston <langston@SLAC.Stanford.EDU>
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_F77
+AC_F77_LIBRARY_LDFLAGS
+END
+
+# Tue Aug 11 09:50:48 1998 Matthew D. Langston <langston@SLAC.Stanford.EDU>
+#
+# This test currently fails with automake v. 1.3 since automake assumes
+# that elements of 'bin_PROGRAMS' (e.g. zardoz) without a corresponding
+# '_SOURCES' (e.g. zardoz_SOURCES) should be compiled from 'zardoz.c'
+# whether or not 'zardoz.c' actually exists. For example, even if the
+# file 'zardoz.c' doesn't exist but the file 'zardoz.f' does exist, this
+# tests would still fail.
+#
+# Therefore, for now I have put in the line 'zardoz_SOURCES = zardoz.f'
+# (see below) so that automake's top-level 'make check' won't fail, but
+# this line should be removed once automake handles this situation
+# correctly.
+
+cat > Makefile.am <<'END'
+bin_PROGRAMS = zardoz
+zardoz_SOURCES = zardoz.f
+zardoz_LDADD = @FLIBS@
+END
+
+: > zardoz.f
+: > config.guess
+: > config.sub
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '@FLIBS@' Makefile.in
diff --git a/t/fn99.sh b/t/fn99.sh
new file mode 100644
index 000000000..8305d637f
--- /dev/null
+++ b/t/fn99.sh
@@ -0,0 +1,50 @@
+#! /bin/sh
+# Copyright (C) 2004-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check the filename-length-max=99 option.
+
+. test-init.sh
+
+echo AC_OUTPUT >> configure.ac
+
+cat >Makefile.am <<'END'
+AUTOMAKE_OPTIONS = filename-length-max=99
+EXTRA_DIST = 12345678
+END
+
+(for i in 1 2 3 4 5 6 7 8 9; do
+ mkdir -p 12345678 && cd 12345678 && touch x || exit 1
+done) || skip_ "failed to create deep directory hierarchy"
+
+# AIX 5.3 'cp -R' is too buggy for 'make dist'.
+cp -R 12345678 t \
+ || skip_ "'cp -R' failed to copy deep directory hierarchy"
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+$MAKE distcheck
+
+(for i in 1 2 3 4 5 6 7 8 9 10 11; do
+ mkdir -p 12345678 && cd 12345678 && touch x || exit 1
+done) || skip_ "failed to create deeper directory hierarchy"
+
+run_make -E -e FAIL dist
+grep 'filenames are too long' stderr
+test 2 -eq $(grep -c 12345678 stderr)
+
+:
diff --git a/t/fn99subdir.sh b/t/fn99subdir.sh
new file mode 100644
index 000000000..5d6c37c2d
--- /dev/null
+++ b/t/fn99subdir.sh
@@ -0,0 +1,80 @@
+#! /bin/sh
+# Copyright (C) 2006-2017 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 <https://www.gnu.org/licenses/>.
+
+# PR 507: Check the filename-length-max=99 option
+# in conjunction with AC_CONFIG_SUBDIRS.
+
+. test-init.sh
+
+# The name is so that 99 is exactly hit (including final \0).
+subdirname='cnfsubdir'
+
+cat >>configure.ac <<END
+AC_CONFIG_SUBDIRS([$subdirname])
+AC_OUTPUT
+END
+
+cat >Makefile.am <<END
+AUTOMAKE_OPTIONS = filename-length-max=99
+SUBDIRS = $subdirname
+END
+
+mkdir $subdirname
+
+cat >> $subdirname/configure.ac <<EOF
+AC_INIT([$subdirname], [1.0])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+EOF
+
+cat >$subdirname/Makefile.am <<'END'
+AUTOMAKE_OPTIONS = filename-length-max=99
+EXTRA_DIST = 12345678
+END
+
+(cd $subdirname || exit 1
+for i in 1 2 3 4 5 6 7 8; do
+ mkdir -p 12345678 && cd 12345678 && touch x || exit 1
+done) || skip_ "failed to create deep directory hierarchy"
+
+# AIX 5.3 'cp -R' is too buggy for 'make dist'.
+cp -R $subdirname t \
+ || skip_ "'cp -R' failed to copy deep directory hierarchy"
+
+cd $subdirname
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+cd ..
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+$MAKE distcheck
+
+(cd $subdirname || exit 1
+for i in 1 2 3 4 5 6 7 8 9; do
+ mkdir -p 12345678 && cd 12345678 && touch x || exit 1
+done) || skip_ "failed to create deeper directory hierarchy"
+
+run_make -E -e FAIL dist
+grep 'filenames are too long' stderr
+test 1 -eq $(grep -c 12345678 stderr)
+
+:
diff --git a/t/fnoc.sh b/t/fnoc.sh
new file mode 100644
index 000000000..4672e37e2
--- /dev/null
+++ b/t/fnoc.sh
@@ -0,0 +1,39 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure that pure Fortran 77 sources don't include
+# C-specific code.
+# Matthew D. Langston <langston@SLAC.Stanford.EDU>
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_F77
+END
+
+cat > Makefile.am << 'END'
+sbin_PROGRAMS = anonymous
+anonymous_SOURCES = doe.f jane.f
+END
+
+: > doe.f
+: > jane.f
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '[^F]CC' Makefile.in | grep -v MKDEP && exit 1
+exit 0
diff --git a/t/fonly.sh b/t/fonly.sh
new file mode 100644
index 000000000..de693e120
--- /dev/null
+++ b/t/fonly.sh
@@ -0,0 +1,34 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure programs with only Fortran 77 source are handled properly.
+# Matthew D. Langston <langston@SLAC.Stanford.EDU>
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_F77
+END
+
+cat > Makefile.am <<'END'
+bin_PROGRAMS = zardoz
+zardoz_SOURCES = zardoz.f
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+grep 'zardoz.f' Makefile.in
diff --git a/t/forcemiss.sh b/t/forcemiss.sh
new file mode 100644
index 000000000..8d9491231
--- /dev/null
+++ b/t/forcemiss.sh
@@ -0,0 +1,34 @@
+#! /bin/sh
+# Copyright (C) 2000-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure that 'automake --force-missing' works.
+
+. test-init.sh
+
+rm -f install-sh
+
+echo zot > install-sh
+
+: > Makefile.am
+
+$ACLOCAL
+$AUTOMAKE --add-missing --force-missing
+
+ls -l install-sh
+test -f install-sh
+grep zot install-sh && exit 1
+
+:
diff --git a/t/forcemiss2.sh b/t/forcemiss2.sh
new file mode 100644
index 000000000..5a9bbeff6
--- /dev/null
+++ b/t/forcemiss2.sh
@@ -0,0 +1,40 @@
+#! /bin/sh
+# Copyright (C) 2000-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure that 'automake --force-missing' works, even with
+# symlinked files.
+
+. test-init.sh
+
+rm -f install-sh
+
+echo zot > foo
+cp foo foo2
+
+ln -s foo2 install-sh || skip_ "cannot create symlinks to files"
+
+: > Makefile.am
+
+$ACLOCAL
+ls -l install-sh
+$AUTOMAKE --add-missing --force-missing
+ls -l install-sh
+
+test -f install-sh
+grep zot install-sh && exit 1
+diff foo foo2
+
+:
diff --git a/t/fort1.sh b/t/fort1.sh
new file mode 100644
index 000000000..7a96934c8
--- /dev/null
+++ b/t/fort1.sh
@@ -0,0 +1,30 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test that Automake suggests using AC_PROG_F77/FC if Fortran sources
+# are used.
+
+. test-init.sh
+
+cat >Makefile.am <<END
+bin_PROGRAMS = hello
+hello_SOURCES = hello.f foo.f95
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+grep AC_PROG_F77 stderr
+grep AC_PROG_FC stderr
diff --git a/t/fort2.sh b/t/fort2.sh
new file mode 100644
index 000000000..cba91f9a8
--- /dev/null
+++ b/t/fort2.sh
@@ -0,0 +1,92 @@
+#! /bin/sh
+# Copyright (C) 2006-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test that AC_FC_SRCEXT(f9x) works as intended:
+# - $(FCFLAGS_f) will be used
+
+# Cf. 'fort1.sh' and 'link_f90_only.sh'.
+
+required=gfortran # Required only in order to run ./configure.
+. test-init.sh
+
+mkdir sub
+
+cat >>configure.ac <<'END'
+AC_PROG_FC
+AC_FC_SRCEXT([f90])
+AC_FC_SRCEXT([f95])
+AC_FC_SRCEXT([f03])
+AC_FC_SRCEXT([f08])
+AC_FC_SRCEXT([blabla])
+AC_OUTPUT
+END
+
+cat >Makefile.am <<'END'
+AUTOMAKE_OPTIONS = subdir-objects
+FC = fake-fc
+bin_PROGRAMS = hello goodbye
+hello_SOURCES = hello.f90 foo.f95 sub/bar.f95 hi.f03 sub/howdy.f03 \
+ greets.f08 sub/bonjour.f08
+goodbye_SOURCES = bye.f95 sub/baz.f90
+goodbye_FCFLAGS = --gby
+END
+
+$ACLOCAL
+$AUTOMAKE
+grep '.\$(LINK)' Makefile.in && exit 1
+grep '.\$(FCLINK)' Makefile.in
+grep '.\$(FCCOMPILE)' Makefile.in > stdout
+cat stdout
+grep -v '\$(FCFLAGS_f' stdout && exit 1
+grep '.\$(FC.*\$(FCFLAGS_blabla' Makefile.in && exit 1
+
+sed '/^AC_FC_SRCEXT.*blabla/d' configure.ac >t
+mv -f t configure.ac
+
+rm -rf autom4te*.cache
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+./configure
+
+touch hello.f90 foo.f95 sub/bar.f95 hi.f03 sub/howdy.f03 greets.f08 \
+ sub/bonjour.f08 bye.f95 sub/baz.f90
+
+run_make -O -- -n \
+ FCFLAGS_f90=--@90 FCFLAGS_f95=--@95 FCFLAGS_f03=--@03 FCFLAGS_f08=--@08
+# To make it easier to have stricter grepping below.
+sed -e 's/[ ][ ]*/ /g' -e 's/^/ /' -e 's/$/ /' stdout > out
+cat out
+
+grep ' fake-fc .* --@90 .* hello\.f90 ' out
+grep ' fake-fc .* --@95 .* foo\.f95 ' out
+grep ' fake-fc .* --@95 .* sub/bar\.f95 ' out
+grep ' fake-fc .* --@03 .* hi\.f03 ' out
+grep ' fake-fc .* --@03 .* sub/howdy\.f03 ' out
+grep ' fake-fc .* --@08 .* greets\.f08 ' out
+grep ' fake-fc .* --@08 .* sub/bonjour\.f08 ' out
+grep ' fake-fc .* --gby .* --@95 .*[` ]bye\.f95 ' out
+grep ' fake-fc .* --gby .* --@90 .*[` ]sub/baz\.f90 ' out
+
+test $(grep -c '.*--gby.*\.f' out) -eq 2
+
+$EGREP 'fake-fc.*--@(95|03|08).*\.f90' out && exit 1
+$EGREP 'fake-fc.*--@(90|03|08).*\.f95' out && exit 1
+$EGREP 'fake-fc.*--@(90|95|08).*\.f03' out && exit 1
+$EGREP 'fake-fc.*--@(95|95|03).*\.f08' out && exit 1
+
+:
diff --git a/t/fort4.sh b/t/fort4.sh
new file mode 100644
index 000000000..c9459dfff
--- /dev/null
+++ b/t/fort4.sh
@@ -0,0 +1,94 @@
+#! /bin/sh
+# Copyright (C) 2006-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test mixing Fortran 77 and Fortran (FC).
+
+# For now, require the GNU compilers (to avoid some Libtool/Autoconf
+# issues).
+required='g77 gfortran'
+. test-init.sh
+
+mkdir sub
+
+cat >hello.f <<'END'
+ program hello
+ call foo
+ call bar
+ stop
+ end
+END
+
+cat >bye.f90 <<'END'
+program goodbye
+ call baz
+ stop
+end
+END
+
+cat >foo.f90 <<'END'
+ subroutine foo
+ return
+ end
+END
+
+sed s,foo,bar, foo.f90 > sub/bar.f90
+sed s,foo,baz, foo.f90 > sub/baz.f
+
+cat >>configure.ac <<'END'
+AC_PROG_F77
+AC_PROG_FC
+AC_FC_SRCEXT([f90], [],
+ [AC_MSG_FAILURE([$FC compiler cannot create executables], 77)])
+AC_FC_LIBRARY_LDFLAGS
+AC_OUTPUT
+END
+
+cat >Makefile.am <<'END'
+bin_PROGRAMS = hello goodbye
+hello_SOURCES = hello.f foo.f90 sub/bar.f90
+goodbye_SOURCES = bye.f90 sub/baz.f
+goodbye_FCFLAGS =
+LDADD = $(FCLIBS)
+END
+
+$ACLOCAL
+$AUTOMAKE -a -Wno-unsupported
+# The Fortran 77 linker should be preferred:
+grep '.\$(FCLINK)' Makefile.in && exit 1
+
+$AUTOCONF
+# ./configure may exit with status 77 if no compiler is found,
+# or if the compiler cannot compile Fortran 90 files).
+./configure
+$MAKE
+subobjs=$(echo sub/*.o sub/*.obj)
+test "$subobjs" = 'sub/*.o sub/*.obj'
+$MAKE distcheck
+
+$MAKE distclean
+echo 'AUTOMAKE_OPTIONS = subdir-objects' >> Makefile.am
+$AUTOMAKE
+./configure
+$MAKE
+test ! -e bar.o
+test ! -e bar.obj
+test ! -e baz.o
+test ! -e baz.obj
+test ! -e goodbye-baz.o
+test ! -e goodbye-baz.obj
+$MAKE distcheck
+
+:
diff --git a/t/fort5.sh b/t/fort5.sh
new file mode 100644
index 000000000..706339dfd
--- /dev/null
+++ b/t/fort5.sh
@@ -0,0 +1,109 @@
+#! /bin/sh
+# Copyright (C) 2006-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test mixing Fortran 77 and Fortran (FC), libtool version.
+
+# For now, require the GNU compilers (to avoid some Libtool/Autoconf
+# issues).
+required='libtoolize g77 gfortran'
+. test-init.sh
+
+mkdir sub
+
+cat >hello.f <<'END'
+ program hello
+ call foo
+ call bar
+ call goodbye
+ stop
+ end
+END
+
+cat >bye.f90 <<'END'
+subroutine goodbye
+ call baz
+ return
+end
+END
+
+cat >foo.f90 <<'END'
+ subroutine foo
+ return
+ end
+END
+
+sed s,foo,bar, foo.f90 > sub/bar.f90
+sed s,foo,baz, foo.f90 > sub/baz.f
+
+cat >>configure.ac <<'END'
+AC_PROG_F77
+AC_PROG_FC
+AC_FC_SRCEXT([f90], [],
+ [AC_MSG_FAILURE([$FC compiler cannot create executables], 77)])
+AC_FC_LIBRARY_LDFLAGS
+AM_PROG_AR
+LT_PREREQ([2.0])
+AC_PROG_LIBTOOL
+AC_OUTPUT
+END
+
+cat >Makefile.am <<'END'
+bin_PROGRAMS = hello
+lib_LTLIBRARIES = libhello.la
+noinst_LTLIBRARIES = libgoodbye.la
+hello_SOURCES = hello.f
+hello_LDADD = libhello.la
+libhello_la_SOURCES = foo.f90 sub/bar.f90
+libhello_la_LIBADD = libgoodbye.la
+libgoodbye_la_SOURCES = bye.f90 sub/baz.f
+libgoodbye_la_FCFLAGS =
+LDADD = $(FCLIBS)
+END
+
+libtoolize --force
+$ACLOCAL
+# FIXME: stop disabling the warnings in the 'unsupported' category
+# FIXME: once the 'subdir-objects' option has been mandatory.
+$AUTOMAKE -a -Wno-unsupported
+$AUTOCONF
+
+# This test requires Libtool >= 2.0. Earlier Libtool does not
+# have the LT_PREREQ macro to cause autoconf failure.
+grep LT_PREREQ configure && skip_ "libtool is too old (probably < 2.0)"
+
+# Ensure we use --tag for f90, too.
+grep " --tag=FC" Makefile.in
+
+# ./configure may exit with status 77 if no compiler is found,
+# or if the compiler cannot compile Fortran 90 files).
+./configure
+$MAKE
+subobjs=$(echo sub/*.lo)
+test "$subobjs" = 'sub/*.lo'
+$MAKE distcheck
+
+# The following will be fixed in a later patch:
+$MAKE distclean
+echo 'AUTOMAKE_OPTIONS = subdir-objects' >> Makefile.am
+$AUTOMAKE -a
+./configure
+$MAKE
+test ! -e bar.lo
+test ! -e baz.lo
+test ! -e libgoodbye_la-baz.lo
+$MAKE distcheck
+
+:
diff --git a/t/fortdep.sh b/t/fortdep.sh
new file mode 100644
index 000000000..97015c740
--- /dev/null
+++ b/t/fortdep.sh
@@ -0,0 +1,39 @@
+#! /bin/sh
+# Copyright (C) 2000-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure dependency tracking doesn't interfere with Fortran.
+# For PR 75.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_SRCDIR([foo.f])
+AC_PROG_F77
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS=foo
+foo_SOURCES=foo.f
+END
+
+: > foo.f
+
+$ACLOCAL
+$AUTOMAKE
+
+grep 'foo\.Po' Makefile.in && exit 1
+exit 0
diff --git a/t/gcj.sh b/t/gcj.sh
new file mode 100644
index 000000000..06816f3d1
--- /dev/null
+++ b/t/gcj.sh
@@ -0,0 +1,36 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test of compiled java.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+_AM_DEPENDENCIES([GCJ])
+AC_SUBST([GCJ])
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = convert
+convert_SOURCES = x/y/convert.java
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '^x/y/convert' Makefile.in
+
+:
diff --git a/t/gcj2.sh b/t/gcj2.sh
new file mode 100644
index 000000000..5226947d5
--- /dev/null
+++ b/t/gcj2.sh
@@ -0,0 +1,33 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure '..' invalid in subdir .o's.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+_AM_DEPENDENCIES(GCJ)
+AC_SUBST(GCJ)
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = convert
+convert_SOURCES = x/../convert.java
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+grep 'Makefile.am:.*\.\.' stderr
diff --git a/t/gcj3.sh b/t/gcj3.sh
new file mode 100644
index 000000000..2eaf135a1
--- /dev/null
+++ b/t/gcj3.sh
@@ -0,0 +1,36 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure dependency tracking works for java.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+_AM_DEPENDENCIES([GCJ])
+AC_SUBST([GCJ])
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = convert
+convert_SOURCES = x/y/convert.java
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+test $($FGREP -c depcomp Makefile.in) -gt 1
+
+:
diff --git a/t/gcj4.sh b/t/gcj4.sh
new file mode 100644
index 000000000..0438d607c
--- /dev/null
+++ b/t/gcj4.sh
@@ -0,0 +1,49 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure dependency tracking works for Java.
+
+required=gcj
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_PROG_GCJ
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = convert
+convert_SOURCES = convert.java
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure >stdout || { cat stdout; exit 1; }
+cat stdout
+
+# Configure must be checking the dependency style of gcj ...
+grep 'dependency style of gcj' stdout >filt
+cat filt
+
+# ... only once.
+test $(wc -l < filt) = 1
+
+# Accept any outcome but 'none'
+# (at the time of writing it should be gcc or gcc3).
+grep -v none filt
+
+:
diff --git a/t/gcj5.sh b/t/gcj5.sh
new file mode 100644
index 000000000..d52590b6f
--- /dev/null
+++ b/t/gcj5.sh
@@ -0,0 +1,32 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure Automake suggests AM_PROG_GCJ when GCJ is needed.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+_AM_DEPENDENCIES(GCJ)
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = convert
+convert_SOURCES = convert.java
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+grep AM_PROG_GCJ stderr
diff --git a/t/gcj6.sh b/t/gcj6.sh
new file mode 100644
index 000000000..9f80a2578
--- /dev/null
+++ b/t/gcj6.sh
@@ -0,0 +1,51 @@
+#! /bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# AM_PROG_GCJ should cause OBJEXT and EXEEXT to be set.
+
+required='gcj'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_PROG_GCJ
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+noinst_PROGRAMS = test
+test_SOURCES = Test.java
+test_LDFLAGS = --main=Test
+END
+
+cat >Test.java << 'END'
+public class Test {
+ public static void main(String[] argv) {
+ System.out.println("Hello, automake!");
+ }
+}
+END
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+./configure
+
+# These fail without e.g., AC_PROG_CC.
+$MAKE
+grep "OBJEXT = " Makefile
+grep "EXEEXT = " Makefile
+
+:
diff --git a/t/get-sysconf.sh b/t/get-sysconf.sh
new file mode 100644
index 000000000..f2a4145e0
--- /dev/null
+++ b/t/get-sysconf.sh
@@ -0,0 +1,70 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Dummy test case, aimed at reporting useful system information in the
+# final 'test-suite.log'. This way, if a user experiences a failure in
+# the Automake test suite and then only sends us the 'test-suite.log',
+# we won't have to ask him for more information to start analyzing the
+# failure (that had happened too many times in the past!).
+
+. test-init.sh
+
+st=0
+if test -d "$am_top_srcdir"/.git; then
+ # We are running from a git checkout.
+ (cd "$am_top_srcdir" && git log -1) || st=1
+elif test -f "$am_top_srcdir"/ChangeLog; then
+ # We are probably running from a distribution tarball.
+ awk '
+ BEGIN { first = 1 }
+ (first == 1) { print; first = 0; next; }
+ /^[^\t]/ { exit(0); }
+ { print }
+ ' "$am_top_srcdir"/ChangeLog || st=1
+else
+ # Some non-common but possibly valid setup (see for example the Homebrew
+ # problem reported in automake bug#10866); so just give an harmless
+ # warning instead of failing.
+ warn_ "no .git directory nor ChangeLog file found, some info won't" \
+ "be available"
+fi
+$PERL -V || st=1
+# It's OK for the user not to have the TAP::Parser module; this can
+# happen with older perl installation, or on MinGW/MSYS.
+$PERL -e 'use TAP::Parser; print $TAP::Parser::VERSION, "\n"' || :
+
+# It's OK if the selected Lex and Yacc programs don't know how to print
+# the version number or the help screen; those are usually available only
+# for Flex and Bison.
+$LEX --version || :
+$LEX --help || :
+$YACC --version || :
+$YACC --help || :
+
+cat "$am_top_builddir/config.log" || st=1
+cat "$am_top_builddir/bin/aclocal-$APIVERSION" || st=1
+cat "$am_top_builddir/bin/automake-$APIVERSION" || st=1
+
+if test $st -eq 0; then
+ # This test SKIPs, so that all the information it has gathered and
+ # printed will get unconditionally copied into the 'test-suite.log'
+ # file.
+ exit 77
+fi
+
+# Some unexpected error occurred; this must be reported as an hard
+# error by the testsuite driver.
+exit 99
diff --git a/t/gettext-basics.sh b/t/gettext-basics.sh
new file mode 100644
index 000000000..31cb346e1
--- /dev/null
+++ b/t/gettext-basics.sh
@@ -0,0 +1,58 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check basic gettext support.
+
+required='gettext'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_GNU_GETTEXT
+AC_OUTPUT
+END
+
+: > Makefile.am
+: > config.rpath
+mkdir po intl
+
+$ACLOCAL
+$AUTOCONF
+
+# po/ and intl/ are required.
+
+AUTOMAKE_fails --add-missing
+grep 'AM_GNU_GETTEXT.*SUBDIRS' stderr
+
+echo 'SUBDIRS = po' >Makefile.am
+AUTOMAKE_fails --add-missing
+grep 'AM_GNU_GETTEXT.*intl' stderr
+
+echo 'SUBDIRS = intl' >Makefile.am
+AUTOMAKE_fails --add-missing
+grep 'AM_GNU_GETTEXT.*po' stderr
+
+# Ok.
+
+echo 'SUBDIRS = po intl' >Makefile.am
+$AUTOMAKE --add-missing
+
+# Make sure distcheck runs './configure --with-included-gettext'.
+./configure
+echo distdir: > po/Makefile
+echo distdir: > intl/Makefile
+$MAKE -n distcheck | grep '.*--with-included-gettext'
+
+:
diff --git a/t/gettext-config-rpath.sh b/t/gettext-config-rpath.sh
new file mode 100644
index 000000000..939182d7e
--- /dev/null
+++ b/t/gettext-config-rpath.sh
@@ -0,0 +1,45 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check the config.rpath requirement.
+
+required='gettext'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_GNU_GETTEXT
+# config.rpath is required by versions >= 0.14.3.
+AM_GNU_GETTEXT_VERSION([0.14.3])
+AC_OUTPUT
+END
+
+echo 'SUBDIRS = po intl' >Makefile.am
+mkdir po intl
+
+# If aclocal fails here, it may be that gettext is too old to provide
+# AM_GNU_GETTEXT_VERSION. Similarly, autopoint will fail if it's
+# from an older version. If gettext is too old to provide autopoint,
+# this will fail as well, so we're safe here.
+if ! $ACLOCAL && autopoint -n; then
+ skip_ "too old gettext installation"
+fi
+
+AUTOMAKE_fails --add-missing
+grep '^configure\.ac:.*required file.*config.rpath' stderr
+: > config.rpath
+$AUTOMAKE
+
+:
diff --git a/t/gettext-external-pr338.sh b/t/gettext-external-pr338.sh
new file mode 100644
index 000000000..d1a60f0b4
--- /dev/null
+++ b/t/gettext-external-pr338.sh
@@ -0,0 +1,65 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check gettext 'external' support.
+# PR/338, reported by Charles Wilson.
+
+required='gettext'
+. test-init.sh
+
+cat >>configure.ac <<END
+AM_GNU_GETTEXT([external])
+AC_OUTPUT
+END
+
+: >Makefile.am
+mkdir foo po
+
+$ACLOCAL
+$AUTOCONF
+
+# config.rpath is required.
+: >config.rpath
+
+# po/ is required, but intl/ isn't.
+
+AUTOMAKE_fails --add-missing
+grep 'AM_GNU_GETTEXT.*SUBDIRS' stderr
+
+echo 'SUBDIRS = foo' >Makefile.am
+AUTOMAKE_fails --add-missing
+grep 'AM_GNU_GETTEXT.*po' stderr
+
+# Ok.
+
+echo 'SUBDIRS = po' >Makefile.am
+$AUTOMAKE --add-missing
+
+
+# Don't try running ./configure --with-included-gettext if the
+# user is using AM_GNU_GETTEXT([external]).
+grep 'with-included-gettext' Makefile.in && exit 1
+./configure
+$MAKE -n distcheck | grep 'with-included-gettext' && exit 1
+
+# intl/ isn't wanted with AM_GNU_GETTEXT([external]).
+
+mkdir intl
+echo 'SUBDIRS = po intl' >Makefile.am
+AUTOMAKE_fails --add-missing
+grep 'intl.*AM_GNU_GETTEXT' stderr
+
+:
diff --git a/t/gettext-intl-subdir.sh b/t/gettext-intl-subdir.sh
new file mode 100644
index 000000000..7f3322eac
--- /dev/null
+++ b/t/gettext-intl-subdir.sh
@@ -0,0 +1,49 @@
+#! /bin/sh
+# Copyright (C) 2006-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check gettext 'AM_GNU_GETTEXT_INTL_SUBDIR' support.
+
+required='gettext'
+. test-init.sh
+
+cat >>configure.ac <<END
+AM_GNU_GETTEXT([external])
+AM_GNU_GETTEXT_INTL_SUBDIR
+AC_OUTPUT
+END
+
+echo 'SUBDIRS = po' >Makefile.am
+mkdir po
+
+# If aclocal fails, assume the gettext macros are too old and do not
+# define AM_GNU_GETTEXT_INTL_SUBDIR.
+$ACLOCAL || skip_ "your gettext macros are probably too old"
+
+# config.rpath is required.
+: >config.rpath
+
+# intl/ is required.
+AUTOMAKE_fails --add-missing
+grep 'AM_GNU_GETTEXT.*intl.*SUBDIRS' stderr
+
+mkdir intl
+AUTOMAKE_fails --add-missing
+grep 'AM_GNU_GETTEXT.*intl.*SUBDIRS' stderr
+
+echo 'SUBDIRS = po intl' > Makefile.am
+$AUTOMAKE --add-missing
+
+:
diff --git a/t/gettext-macros.sh b/t/gettext-macros.sh
new file mode 100644
index 000000000..edb131146
--- /dev/null
+++ b/t/gettext-macros.sh
@@ -0,0 +1,96 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Try to find the gettext '.m4' files and make them easily accessed
+# to the test cases requiring them.
+# See also automake bug#9807.
+
+. test-init.sh
+
+extract_program_version ()
+{
+ "$1" --version | sed 1q | $PERL -ne '/(\d(?:\.\d+)+)/ and print "$1\n"'
+}
+
+echo "# Automatically generated by $me." > get.sh
+echo : >> get.sh
+
+# The 'autopoint' script will look into Makefile.am.
+echo ACLOCAL_AMFLAGS = -I m4 > Makefile.am
+
+# Prefer autopoint to gettextize, since the latter unconditionally
+# requires user interaction to complete; yes, this means confirmation
+# from /dev/tty (!) -- see:
+# <https://lists.gnu.org/archive/html/bug-gettext/2011-12/msg00000.html>
+
+# We will need to specify the correct autopoint version in the
+# AM_GNU_GETTEXT_VERSION call in configure.ac if we want autopoint to
+# setup the correct infrastructure -- in particular, for what concerns
+# us, to bring in all the required .m4 files.
+autopoint_version=$(extract_program_version autopoint) \
+ && test -n "$autopoint_version" \
+ || autopoint_version=0.10.35
+
+cat > configure.ac <<END
+AC_INIT([foo], [1.0])
+AC_PROG_CC
+# Both required by autopoint.
+AM_GNU_GETTEXT
+AM_GNU_GETTEXT_VERSION([$autopoint_version])
+END
+
+if autopoint --force && test -f m4/gettext.m4; then
+ echo "ACLOCAL_PATH='$(pwd)/m4':\$ACLOCAL_PATH" >> get.sh
+ echo "export ACLOCAL_PATH" >> get.sh
+else
+ # Older versions of gettext might not have an autopoint program
+ # available, but this doesn't mean the user hasn't made the gettext
+ # macros available, e.g., by properly setting ACLOCAL_PATH.
+ rm -rf m4
+ mkdir m4
+ # See below for an explanation about the use the of '-Wno-syntax'.
+ if $ACLOCAL -Wno-syntax -I m4 --install && test -f m4/gettext.m4; then
+ : # Gettext macros already accessible by default.
+ else
+ echo "skip_all_ \"couldn't find or get gettext macros\"" >> get.sh
+ fi
+fi
+
+cat >> get.sh <<'END'
+# Even recent versions of gettext used the now-obsolete 'AM_PROG_MKDIR_P'
+# m4 macro. So we need the following to avoid spurious errors.
+ACLOCAL="$ACLOCAL -Wno-obsolete"
+AUTOMAKE="$AUTOMAKE -Wno-obsolete"
+END
+
+. ./get.sh
+
+$ACLOCAL --force -I m4 || cat >> get.sh <<'END'
+# We need to use '-Wno-syntax', since we do not want our test suite
+# to fail merely because some third-party '.m4' file is underquoted.
+ACLOCAL="$ACLOCAL -Wno-syntax"
+END
+
+# Remove any Makefile.in possibly created by autopoint, to avoid spurious
+# maintainer-check failures.
+rm -f $(find . -name Makefile.in)
+
+# The file autopoint might have copied in the 'm4' subdirectory of the
+# test directory are going to be needed by other tests, so we must not
+# remove the test directory.
+keep_testdirs=yes
+
+:
diff --git a/t/gettext-pr381.sh b/t/gettext-pr381.sh
new file mode 100644
index 000000000..750765fb0
--- /dev/null
+++ b/t/gettext-pr381.sh
@@ -0,0 +1,45 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Automake gettext support: regression check for PR/381:
+# 'SUBDIRS = po intl' must not be required if 'po/' doesn't exist.
+
+required='gettext'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_GNU_GETTEXT
+AC_OUTPUT
+END
+
+$ACLOCAL
+
+: > config.guess
+: > config.rpath
+: > config.sub
+
+test ! -d po # Sanity check.
+mkdir sub
+echo 'SUBDIRS = sub' > Makefile.am
+$AUTOMAKE
+
+# Still, SUBDIRS must be defined.
+
+: > Makefile.am
+AUTOMAKE_fails
+grep '^configure\.ac:.*AM_GNU_GETTEXT used but SUBDIRS not defined' stderr
+
+:
diff --git a/t/gnits.sh b/t/gnits.sh
new file mode 100644
index 000000000..f101f826a
--- /dev/null
+++ b/t/gnits.sh
@@ -0,0 +1,42 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to ensure --gnits version checking is correct.
+
+. test-init.sh
+
+cat > configure.ac << END
+AC_INIT([$me], [3.5.3.2])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES(Makefile)
+END
+
+cat > Makefile.am << 'END'
+pkgdata_DATA =
+END
+
+# Files required by Gnits.
+: > INSTALL
+: > NEWS
+: > README
+: > COPYING
+: > AUTHORS
+: > ChangeLog
+: > THANKS
+
+$ACLOCAL
+AUTOMAKE_fails --gnits
+grep 'configure.ac:.*3\.5\.3\.2' stderr
diff --git a/t/gnits2.sh b/t/gnits2.sh
new file mode 100644
index 000000000..a5e4065b2
--- /dev/null
+++ b/t/gnits2.sh
@@ -0,0 +1,115 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to ensure std-options checking is correct.
+
+required='cc native'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = gnits
+noinst_PROGRAMS = fubar2
+bin_PROGRAMS = fubar sub/fine
+nobase_bin_PROGRAMS = sub/fubar3
+fubar_SOURCES = fubar.c
+fubar2_SOURCES = fubar.c
+sub_fubar3_SOURCES = fubar.c
+sub_fine_SOURCES = fine.c
+bin_SCRIPTS = sub/scriptok.sh sub/scriptnok.sh
+
+grep-stderr:
+ grep 'pfubar$(EXEEXT) does not support' stderr
+ grep 'pfubar3$(EXEEXT) does not support' stderr
+ grep 'pscriptnok\.sh does not support' stderr
+## Only three failures please.
+ test `grep 'does not support --help' stderr | wc -l` = 3
+ test `grep 'does not support --version' stderr | wc -l` = 3
+
+test-install: install
+ test -f ../inst-dir/bin/pfine$(EXEEXT)
+ test ! -f ../inst-dir/bin/fine$(EXEEXT)
+END
+
+cat > fubar.c <<'END'
+int main (void)
+{
+ return 0;
+}
+END
+
+cat > fine.c << 'END'
+#include <stdio.h>
+int main (void)
+{
+ puts ("Which version? Which usage?");
+ return 0;
+}
+END
+
+mkdir sub
+
+cat >sub/scriptok.sh <<EOF
+#!/bin/sh
+echo "Which version? Which usage?"
+EOF
+
+# Not only does this script not support --help/--version, but
+# it will also hang when run without input.
+cat >sub/scriptnok.sh <<EOF
+#!/bin/sh
+cat
+EOF
+
+chmod +x sub/scriptok.sh
+chmod +x sub/scriptnok.sh
+
+# Files required by Gnits.
+: > INSTALL
+: > NEWS
+: > README
+: > COPYING
+: > AUTHORS
+: > ChangeLog
+: > THANKS
+
+# The following file should not be distributed.
+# (alpha.sh checks the case where it must be distributed.)
+: > README-alpha
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+grep README-alpha Makefile.in && exit 1
+
+mkdir build
+cd build
+
+# Use --program-prefix to make sure the std-options check honors it.
+../configure "--prefix=$(pwd)/../inst-dir" --program-prefix=p
+$MAKE all
+$MAKE test-install
+# Don't trust th exit status of "make -k" for non-GNU makes.
+if using_gmake; then status=FAIL; else status=IGNORE; fi
+run_make -e $status -E -- -k installcheck
+$MAKE grep-stderr
+
+:
diff --git a/t/gnits3.sh b/t/gnits3.sh
new file mode 100644
index 000000000..5cb169cdd
--- /dev/null
+++ b/t/gnits3.sh
@@ -0,0 +1,105 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that AM_INSTALLCHECK_STD_OPTIONS_EXEMPT works.
+
+required=cc
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_OUTPUT
+END
+
+# We use the same basename for all targets on purpose. This way
+# we make sure that 'AM_INSTALLCHECK_STD_OPTIONS_EXEMPT = nok'
+# will not match anything containing 'nok'.
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = gnits
+
+nobase_bin_PROGRAMS = nok sub/nok
+nok_SOURCES = nok.c
+sub_nok_SOURCES = nok.c
+
+nobase_bin_SCRIPTS = nok.sh sub/nok.sh
+
+AM_INSTALLCHECK_STD_OPTIONS_EXEMPT = nok$(EXEEXT) nok.sh
+
+grep-stderr:
+ grep 'sub/pnok$(EXEEXT) does not support' stderr
+ grep 'sub/pnok\.sh does not support' stderr
+## Only two failures please.
+ test `grep 'does not support --help' stderr | wc -l` = 2
+ test `grep 'does not support --version' stderr | wc -l` = 2
+END
+
+cat > nok.c <<'END'
+int main (void)
+{
+ return 0;
+}
+END
+
+mkdir sub
+
+cat >nok.sh <<EOF
+#!/bin/sh
+echo "Which version? Which usage?"
+exit 1
+EOF
+
+cp nok.sh sub/nok.sh
+
+chmod +x nok.sh
+chmod +x sub/nok.sh
+
+# Files required by Gnits.
+: > INSTALL
+: > NEWS
+: > README
+: > COPYING
+: > AUTHORS
+: > ChangeLog
+: > THANKS
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+mkdir build
+cd build
+
+# Use --program-prefix to make sure the std-options check honors it.
+../configure "--prefix=$(pwd)/../inst-dir" --program-prefix=p
+$MAKE
+$MAKE install
+$MAKE installcheck && exit 1
+# Don't trust th exit status of "make -k" for non-GNU makes.
+if using_gmake; then status=FAIL; else status=IGNORE; fi
+run_make -e $status -E -- -k installcheck
+$MAKE grep-stderr
+
+# Make sure there is no more error when all targets are exempted.
+cd ..
+cat >> Makefile.am <<'END'
+AM_INSTALLCHECK_STD_OPTIONS_EXEMPT += sub/nok$(EXEEXT) sub/nok.sh
+END
+$AUTOMAKE
+cd build
+./config.status # Don't rely on the rebuild rules (they need GNU make).
+$MAKE installcheck
+
+:
diff --git a/t/gnumake.sh b/t/gnumake.sh
new file mode 100644
index 000000000..7ecd9717a
--- /dev/null
+++ b/t/gnumake.sh
@@ -0,0 +1,43 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Automake should not assume that make files are called Makefile.
+# Report from Braden McDaniel.
+
+required=GNUmake
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_FILES([sub/GNUmakefile])
+AC_OUTPUT
+END
+
+mkdir sub
+
+echo SUBDIRS = sub > Makefile.am
+
+cat > sub/GNUmakefile.am <<'EOF'
+# In this project, the Makefile is an installed data file.
+dist_data_DATA = Makefile
+EOF
+
+echo 'this should not cause any problem' > sub/Makefile
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+$MAKE distcheck
diff --git a/t/gnuwarn.sh b/t/gnuwarn.sh
new file mode 100644
index 000000000..6ce9927d6
--- /dev/null
+++ b/t/gnuwarn.sh
@@ -0,0 +1,54 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that Automake warns about user variables being overridden.
+
+. test-init.sh
+
+# We need (almost) complete control over automake options.
+AUTOMAKE="$am_original_AUTOMAKE -Werror"
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_OUTPUT
+END
+
+# Needed by --gnu.
+: > NEWS
+: > README
+: > AUTHORS
+: > ChangeLog
+
+cat > Makefile.am << 'END'
+CFLAGS += -I..
+LDFLAGS = -lfoo
+CXXFLAGS = -Wall
+bin_PROGRAMS = bar
+END
+
+$ACLOCAL
+# Don't warn in foreign mode
+$AUTOMAKE --add-missing --foreign
+# Warn in gnu mode
+AUTOMAKE_fails --add-missing --gnu
+grep '^Makefile\.am:1:.*CFLAGS' stderr
+grep '^Makefile\.am:2:.*LDFLAGS' stderr
+# No reason to warn about CXXFLAGS since it's not used.
+grep CXXFLAGS stderr && exit 1
+# Don't warn if -Wno-gnu.
+$AUTOMAKE --gnu -Wno-gnu
+
+:
diff --git a/t/gnuwarn2.sh b/t/gnuwarn2.sh
new file mode 100644
index 000000000..c86dd38f5
--- /dev/null
+++ b/t/gnuwarn2.sh
@@ -0,0 +1,42 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check diagnostics about no-installman being disallowed in 'gnu'.
+
+. test-init.sh
+
+cat > configure.ac << 'END'
+AC_INIT([gnuwarn2], [1.0])
+AM_INIT_AUTOMAKE([no-installman])
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+END
+
+# --gnu files
+: > NEWS
+: > README
+: > AUTHORS
+: > ChangeLog
+: > COPYING
+: > INSTALL
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = gnu
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+grep 'configure.ac:2:.*no-installman' stderr
diff --git a/t/hdr-vars-defined-once.sh b/t/hdr-vars-defined-once.sh
new file mode 100644
index 000000000..9dce441e4
--- /dev/null
+++ b/t/hdr-vars-defined-once.sh
@@ -0,0 +1,46 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure header vars defined only once when including.
+# Report from Marcus G. Daniels.
+
+. test-init.sh
+
+cat >> configure.ac <<END
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+include Will_Be_Included_In_Makefile
+test-distcommon:
+ echo ' ' $(DIST_COMMON) ' ' \
+ | grep '[ /]Will_Be_Included_In_Makefile '
+END
+
+id=0c35bbde7c95b569a
+echo "# $id" > Will_Be_Included_In_Makefile
+
+$ACLOCAL
+$AUTOMAKE
+test $(grep -c '^srcdir' Makefile.in) -eq 1
+
+$AUTOCONF
+./configure
+$MAKE test-distcommon
+$MAKE distdir
+grep "$id" $distdir/Will_Be_Included_In_Makefile
+
+:
diff --git a/t/header.sh b/t/header.sh
new file mode 100644
index 000000000..a9b612b7c
--- /dev/null
+++ b/t/header.sh
@@ -0,0 +1,45 @@
+#! /bin/sh
+# Copyright (C) 2000-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for PR 68.
+#
+# == Report ==
+# If an autoconf substitution variable of the form "*_HEADERS" --
+# for example "MY_HEADERS" -- is used in an "include_" variable
+# in conjunction with EXTRA_HEADERS, $(MY_HEADERS) gets included
+# in the HEADERS variable for *all* generated Makefile.ins in the
+# project.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_SUBST([MY_HEADERS])
+AC_PROG_CC
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = zoo
+zoo_SOURCES = joe.c
+END
+
+: > joe.c
+: > qq.h
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '[^@]MY_HEADERS' Makefile.in && exit 1
+exit 0
diff --git a/t/help-depend.sh b/t/help-depend.sh
new file mode 100644
index 000000000..b777b7d44
--- /dev/null
+++ b/t/help-depend.sh
@@ -0,0 +1,37 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that our private macro 'AM_DEP_TRACK' adds proper text to
+# the configure help screen.
+# Keep this in sync with sister test 'help-depend2.sh'
+
+. test-init.sh
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AM_DEP_TRACK
+END
+
+$ACLOCAL
+$AUTOCONF
+
+grep_configure_help --enable-dependency-tracking \
+ ' not reject slow dependency extract'
+
+grep_configure_help --disable-dependency-tracking \
+ ' speeds up one-time build'
+
+:
diff --git a/t/help-depend2.sh b/t/help-depend2.sh
new file mode 100644
index 000000000..b65ae07e8
--- /dev/null
+++ b/t/help-depend2.sh
@@ -0,0 +1,38 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that when automake automatically activates support for
+# dependency tracking, it adds proper text to the configure help screen.
+# Keep this in sync with sister test 'help-depend.sh'
+
+. test-init.sh
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE
+AC_PROG_CC
+END
+
+$ACLOCAL
+$AUTOCONF
+
+grep_configure_help --enable-dependency-tracking \
+ ' not reject slow dependency extract'
+
+grep_configure_help --disable-dependency-tracking \
+ ' speeds up one-time build'
+
+:
diff --git a/t/help-dmalloc.sh b/t/help-dmalloc.sh
new file mode 100644
index 000000000..e01edac44
--- /dev/null
+++ b/t/help-dmalloc.sh
@@ -0,0 +1,32 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that our macro 'AM_WITH_DMALLOC' adds proper text to
+# the configure help screen.
+
+. test-init.sh
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AM_WITH_DMALLOC
+END
+
+$ACLOCAL
+$AUTOCONF
+
+grep_configure_help --with-dmalloc ' use dmalloc.*http://www\.dmalloc\.com'
+
+:
diff --git a/t/help-init.sh b/t/help-init.sh
new file mode 100644
index 000000000..33305549f
--- /dev/null
+++ b/t/help-init.sh
@@ -0,0 +1,37 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that our grand macro 'AM_INIT_AUTOMAKE' add proper text
+# to the configure help screen.
+
+. test-init.sh
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE
+END
+
+$ACLOCAL
+$AUTOCONF
+
+./configure --help >stdout || { cat stdout; exit 1; }
+cat stdout
+
+grep '^ --program-prefix[= ]' stdout
+grep '^ --program-suffix[= ]' stdout
+grep '^ --program-transform-name[= ]' stdout
+
+:
diff --git a/t/help-lispdir.sh b/t/help-lispdir.sh
new file mode 100644
index 000000000..228338f21
--- /dev/null
+++ b/t/help-lispdir.sh
@@ -0,0 +1,37 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that our macro 'AM_PATH_LISPDIR' adds proper text to
+# the configure help screen.
+
+. test-init.sh
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AM_PATH_LISPDIR
+END
+
+$ACLOCAL
+$AUTOCONF
+
+./configure --help >stdout || { cat stdout; exit 1; }
+cat stdout
+
+grep_configure_help --with-lispdir ' override.*lisp directory'
+grep_configure_help EMACS ' [eE]macs editor'
+grep_configure_help EMACSLOADPATH ' [eE]macs library search path'
+
+:
diff --git a/t/help-python.sh b/t/help-python.sh
new file mode 100644
index 000000000..78cdf3bfb
--- /dev/null
+++ b/t/help-python.sh
@@ -0,0 +1,32 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that macro 'AM_PATH_PYTHON' adds proper text to the
+# configure help screen.
+
+. test-init.sh
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AM_PATH_PYTHON
+END
+
+$ACLOCAL
+$AUTOCONF
+
+grep_configure_help PYTHON 'the Python interpreter'
+
+:
diff --git a/t/help-silent.sh b/t/help-silent.sh
new file mode 100644
index 000000000..2127d4f65
--- /dev/null
+++ b/t/help-silent.sh
@@ -0,0 +1,38 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure configure options relative to automake silent rules are
+# added to the configure help screen.
+
+. test-init.sh
+
+: > Makefile.am
+$ACLOCAL
+
+cp configure.ac configure.tmpl
+
+for args in '' 'yes' 'no'; do
+ cp -f configure.tmpl configure.ac
+ test x"$args" = x || echo "AM_SILENT_RULES([$args])/" >> configure.ac
+ cat configure.ac # For debugging.
+ $AUTOCONF --force
+ grep_configure_help --enable-silent-rules \
+ ' less verbose build.*\(undo.*"make V=1".*\)'
+ grep_configure_help --disable-silent-rules \
+ ' verbose build.*\(undo.*"make V=0".*\)'
+done
+
+:
diff --git a/t/help-upc.sh b/t/help-upc.sh
new file mode 100644
index 000000000..e2f5e8daa
--- /dev/null
+++ b/t/help-upc.sh
@@ -0,0 +1,33 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that our macro 'AM_PROG_UPC' adds proper text to
+# the configure help screen.
+
+. test-init.sh
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AM_PROG_UPC
+END
+
+$ACLOCAL
+$AUTOCONF
+
+grep_configure_help UPC '[Uu]nified Parallel C compiler command'
+grep_configure_help UPCFLAGS '[Uu]nified Parallel C compiler flags'
+
+:
diff --git a/t/help.sh b/t/help.sh
new file mode 100644
index 000000000..7df39d2ad
--- /dev/null
+++ b/t/help.sh
@@ -0,0 +1,44 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure --help and --version work, even when no configure.ac nor
+# configure.in is in the current directory.
+
+. test-init.sh
+
+# Ensure we run in an empty directory.
+mkdir emptydir
+cd emptydir
+
+# Honour user overrides for $ACLOCAL and $AUTOMAKE, but without
+# adding extra options.
+ACLOCAL=$am_original_ACLOCAL
+AUTOMAKE=$am_original_AUTOMAKE
+
+$ACLOCAL --version
+$ACLOCAL --help
+$AUTOMAKE --version
+$AUTOMAKE --help
+
+# Sanity checks: aclocal and automake cannot work without configure.ac
+# nor configure.in.
+$ACLOCAL 2>stderr && { cat stderr >&2; exit 1; }
+cat stderr >&2
+$FGREP configure.ac stderr
+AUTOMAKE_fails
+$FGREP configure.ac stderr
+
+:
diff --git a/t/help2.sh b/t/help2.sh
new file mode 100644
index 000000000..6b93448ab
--- /dev/null
+++ b/t/help2.sh
@@ -0,0 +1,52 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure --help and --version work, even when the current directory
+# contains a broken configure.ac and a broken acinclude.m4.
+. test-init.sh
+
+# Ensure we run in a new, clean directory.
+mkdir cleandir
+cd cleandir
+
+# Honour user overrides for $ACLOCAL and $AUTOMAKE, but without
+# adding extra options.
+ACLOCAL=$am_original_ACLOCAL
+AUTOMAKE=$am_original_AUTOMAKE
+
+echo '[' > configure.ac
+echo '[' > acinclude.m4
+
+$AUTOMAKE --version
+$AUTOMAKE --help
+$ACLOCAL --version
+$ACLOCAL --help
+
+# Sanity check: aclocal cannot work with broken acinclude.m4.
+$ACLOCAL 2>stderr && { cat stderr >&2; exit 1; }
+cat stderr >&2
+$FGREP acinclude.m4 stderr
+
+rm -f acinclude.m4
+
+# Sanity checks: aclocal and automake cannot work with broken configure.ac.
+$ACLOCAL 2>stderr && { cat stderr >&2; exit 1; }
+cat stderr >&2
+$FGREP configure.ac stderr
+AUTOMAKE_fails
+$FGREP configure.ac stderr
+
+:
diff --git a/t/help3.sh b/t/help3.sh
new file mode 100644
index 000000000..9353ea629
--- /dev/null
+++ b/t/help3.sh
@@ -0,0 +1,60 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure --help and --version takes precedence over other options.
+
+. test-init.sh
+
+# We must have full control over the content of the current directory.
+mkdir cleandir
+cd cleandir
+
+# Honour user overrides for $ACLOCAL and $AUTOMAKE, but without
+# adding extra options.
+ACLOCAL=$am_original_ACLOCAL
+AUTOMAKE=$am_original_AUTOMAKE
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AC_CONFIG_AUX_DIR([.]) dnl prevent automake from looking into '..'
+AM_INIT_AUTOMAKE([foreign])
+AC_CONFIG_FILES([Makefile])
+END
+
+cat > Makefile.am <<END
+# So that install-sh will be required.
+pkgdata_DATA =
+END
+
+$ACLOCAL --force --help --output=foo.m4
+test ! -e foo.m4
+$ACLOCAL --output=foo.m4 --version --force
+test ! -e foo.m4
+# Sanity check.
+$ACLOCAL --output=foo.m4 --force
+test -f foo.m4
+
+mv -f foo.m4 aclocal.m4 # autoconf will need aclocal.m4
+
+$AUTOMAKE --add-missing --help --copy
+test ! -e install-sh
+$AUTOMAKE --copy --version --add-mising
+test ! -e install-sh
+# Sanity check.
+$AUTOMAKE --add-missing --copy
+test -f install-sh
+
+:
diff --git a/t/help4.sh b/t/help4.sh
new file mode 100644
index 000000000..301dbd101
--- /dev/null
+++ b/t/help4.sh
@@ -0,0 +1,54 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that the first among --help and --version to be specified on
+# the command line takes precedence over the following one.
+
+. test-init.sh
+
+# Ensure we run in an empty directory.
+mkdir emptydir
+cd emptydir
+
+# Honour user overrides for $ACLOCAL and $AUTOMAKE, but without
+# adding extra options.
+ACLOCAL=$am_original_ACLOCAL
+AUTOMAKE=$am_original_AUTOMAKE
+
+escape_dots () { sed 's/\./\\./g'; } # Avoid issues with "\" in backquotes.
+apiversion_rx=$(echo "$APIVERSION" | escape_dots)
+
+$ACLOCAL --version --help >stdout || { cat stdout; exit 1; }
+cat stdout
+grep "^aclocal.*$apiversion_rx" stdout
+grep "^Usage" stdout && exit 1
+
+$ACLOCAL --help --version >stdout || { cat stdout; exit 1; }
+cat stdout
+grep "^Usage" stdout
+grep "^aclocal.*$apiversion_rx" stdout && exit 1
+
+$AUTOMAKE --version --help >stdout || { cat stdout; exit 1; }
+cat stdout
+grep "^automake.*$apiversion_rx" stdout
+grep "^Usage" stdout && exit 1
+
+$AUTOMAKE --help --version >stdout || { cat stdout; exit 1; }
+cat stdout
+grep "^Usage" stdout
+grep "^automake.*$apiversion_rx" stdout && exit 1
+
+:
diff --git a/t/hfs.sh b/t/hfs.sh
new file mode 100644
index 000000000..6502c99e1
--- /dev/null
+++ b/t/hfs.sh
@@ -0,0 +1,33 @@
+#! /bin/sh
+# Copyright (C) 2004-2017 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 <https://www.gnu.org/licenses/>.
+
+
+# Automake should not think that ChangeLog == CHANGELOG on
+# case-preserving case-insensitive filesystems (such as HFS+, on
+# Darwin).
+# Report from Peter O'Gorman.
+
+. test-init.sh
+echo AC_OUTPUT >>configure.ac
+
+: >CHANGELOG
+echo 'EXTRA_DIST = CHANGELOG' >Makefile.am
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+$MAKE distcheck
diff --git a/t/implicit.sh b/t/implicit.sh
new file mode 100644
index 000000000..b95a5a6fc
--- /dev/null
+++ b/t/implicit.sh
@@ -0,0 +1,35 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure implicit .o's are listed as appropriate. Report
+# from Henrik Frystyk Nielsen.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+END
+
+cat > Makefile.am << 'END'
+noinst_PROGRAMS = libapp_1
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '^libapp_1_OBJECTS' Makefile.in | $FGREP '.$(OBJEXT)'
+
+:
diff --git a/t/init.sh b/t/init.sh
new file mode 100644
index 000000000..180bd3344
--- /dev/null
+++ b/t/init.sh
@@ -0,0 +1,38 @@
+#! /bin/sh
+# Copyright (C) 2006-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure we give a sensible error message when AC_INIT and
+# AM_INIT_AUTOMAKE are both given less than two arguments.
+
+. test-init.sh
+
+for ac_init_args in '' '([x])'; do
+ for am_init_args in '' '([1.10])'; do
+ rm -rf aclocal.m4 autom4te*.cache
+ unindent >configure.ac <<END
+ AC_INIT$ac_init_args
+ AM_INIT_AUTOMAKE$am_init_args
+END
+ cat configure.ac # For debugging.
+ # The error message should mention AC_INIT, not AC_PACKAGE_VERSION.
+ ($ACLOCAL && $AUTOCONF) 2>stderr && { cat stderr >&2; exit 1; }
+ cat stderr >&2
+ $FGREP AC_PACKAGE_VERSION stderr && exit 1
+ grep 'configure\.ac:.* AC_INIT .*arguments' stderr
+ done
+done
+
+:
diff --git a/t/init2.sh b/t/init2.sh
new file mode 100644
index 000000000..24fbcef52
--- /dev/null
+++ b/t/init2.sh
@@ -0,0 +1,30 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 3 of the License, 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 <https://www.gnu.org/licenses/>.
+
+# Make sure we give a sensible error message when AM_INIT_AUTOMAKE
+# contains junk.
+
+. test-init.sh
+
+cat >configure.ac <<END
+AC_INIT([init2], [1.0])
+AM_INIT_AUTOMAKE([nosuchoption])
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+grep 'nosuchoption.*recognized' stderr
+exit 0
diff --git a/t/install-info-dir.sh b/t/install-info-dir.sh
new file mode 100644
index 000000000..f112e4281
--- /dev/null
+++ b/t/install-info-dir.sh
@@ -0,0 +1,190 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Checks on the 'install-info' target.
+# Details about the individual checks' purposes and motivations are
+# inlined, below.
+
+# FIXME: this test is a good candidate for a conversion to TAP,
+# FIXME: and could be merged with 'txinfo27.sh'.
+
+required=makeinfo
+. test-init.sh
+
+cwd=$(pwd) || fatal_ "cannot get current working directory"
+
+mkdir bin
+saved_PATH=$PATH; export saved_PATH
+PATH=$cwd/bin$PATH_SEPARATOR$PATH; export PATH
+
+cat >> configure.ac <<'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+info_TEXINFOS = foo.texi
+END
+
+cat > foo.texi << 'END'
+\input texinfo
+@setfilename foo.info
+@c All the following directives might be required to allow older
+@c versions of the 'install-info' program (e.g., version 4.8) to
+@c create the 'dir' index file in ${infodir}. Don't remove them.
+@settitle foo
+@dircategory Dummy utilities
+@direntry
+* Foo: (foo). Does nothing at all, but has a nice name.
+@end direntry
+@node Top
+Hello world!
+@bye
+END
+
+$ACLOCAL
+$AUTOMAKE -a
+$AUTOCONF
+
+instdir=_inst
+destdir=_dest
+
+./configure --prefix="$cwd/$instdir" --infodir="$cwd/$instdir/info"
+
+$MAKE info
+test -f foo.info
+
+if install-info --version; then
+ # Skip some checks even if 'install-info' is the one from dpkg, not
+ # the one from GNU info, as the former might try to create files in
+ # '/var/backups/', causing spurious failures like this for non-root
+ # users.
+ if install-info --version | $EGREP -i '(dpkg|debian) install-info'; then
+ have_installinfo=no
+ else
+ have_installinfo=yes
+ fi
+else
+ have_installinfo=no
+fi
+
+# The 'install-info' target updates the '${infodir}/dir' file
+# by default (if the 'install-info' program is available).
+# This should happen in a normal as well as in a DESTDIR installation.
+if test $have_installinfo = yes; then
+
+ $MAKE install-info
+ test -f $instdir/info/foo.info
+ cat $instdir/info/dir
+ $FGREP 'Does nothing at all, but has a nice name' $instdir/info/dir
+
+ $MAKE uninstall
+ test ! -e $instdir/info/foo.info
+ cat $instdir/info/dir
+ $FGREP 'but has a nice name' $instdir/info/dir && exit 1
+
+ dir="$destdir/$cwd/$instdir/info"
+
+ $MAKE DESTDIR="$cwd/$destdir" install-info
+ test -f "$dir"/foo.info
+ cat "$dir"/dir
+ $FGREP 'Does nothing at all, but has a nice name' "$dir"/dir
+ $MAKE DESTDIR="$cwd/$destdir" uninstall
+ test ! -e "$dir"/foo.info
+ $FGREP 'but has a nice name' "$dir"/dir && exit 1
+
+ unset dir
+
+fi
+
+rm -rf $instdir $destdir
+
+# The 'install-info' target doesn't fail if the 'install-info'
+# program is not available.
+cat > bin/install-info <<'END'
+#!/bin/sh
+echo error from install-info >&2
+exit 127
+END
+chmod a+x bin/install-info
+run_make -M install-info
+test -f $instdir/info/foo.info
+test ! -e $instdir/info/dir
+grep 'error from install-info' output && exit 1
+
+rm -rf $instdir output
+
+if test $have_installinfo = yes; then
+ # The 'install-info' target doesn't try to guess whether the 'install-info'
+ # is the GNU or debian version.
+ unindent > bin/install-info <<'END'
+ #!/bin/sh
+ set -e; set -u;
+ for fd in 1 2; do
+ for str in dpkg debian Debian; do
+ eval "echo This is $str install-info >&$fd"
+ done
+ done
+ PATH=$saved_PATH; export PATH
+ exec install-info ${1+"$@"}
+END
+ $MAKE install-info
+ test -f $instdir/info/foo.info
+ cat $instdir/info/dir
+ $MAKE uninstall
+ test ! -e $instdir/info/foo.info
+ cat $instdir/info/dir
+ $FGREP 'but has a nice name' $instdir/info/dir && exit 1
+ : For shells with busted 'set -e'.
+fi
+
+rm -rf $instdir bin/install-info
+
+# The 'AM_UPDATE_INFO_DIR' environment variable can be used to
+# prevent the creation or update of the '${infodir}/dir' file,
+# if set to a "no" value.
+for val in no NO n; do
+ rm -rf $instdir
+ env AM_UPDATE_INFO_DIR="$val" $MAKE install-info
+ test -f $instdir/info/foo.info
+ test ! -e $instdir/info/dir
+done
+
+$MAKE install-info
+if test $have_installinfo != yes; then
+ echo 'Does nothing at all, but has a nice name' > $instdir/info/dir
+fi
+
+chmod a-w $instdir/info/dir
+for val in no NO n; do
+ env AM_UPDATE_INFO_DIR="$val" $MAKE uninstall
+ cat $instdir/info/dir
+ $FGREP 'Does nothing at all, but has a nice name' $instdir/info/dir
+done
+
+if test $have_installinfo = yes; then
+ for val in 'yes' 'who cares!'; do
+ rm -rf $instdir
+ env AM_UPDATE_INFO_DIR="$val" $MAKE install-info
+ test -f $instdir/info/foo.info
+ cat $instdir/info/dir
+ env AM_UPDATE_INFO_DIR="$val" $MAKE uninstall
+ test ! -e $instdir/info/foo.info
+ $FGREP 'but has a nice name' $instdir/info/dir && exit 1
+ : For shells with busted 'set -e'.
+ done
+fi
+
+:
diff --git a/t/install-sh-option-C.sh b/t/install-sh-option-C.sh
new file mode 100644
index 000000000..b6bcb06fe
--- /dev/null
+++ b/t/install-sh-option-C.sh
@@ -0,0 +1,45 @@
+#! /bin/sh
+# Copyright (C) 2006-2017 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 <https://www.gnu.org/licenses/>.
+
+# More install-sh checks: check -C.
+
+am_create_testdir=empty
+required=non-root
+. test-init.sh
+
+# Solaris /usr/ucb/touch does not accept -t.
+touch -t "$old_timestamp" foo \
+ || skip_ "touch utility doesn't accept '-t' option"
+
+get_shell_script install-sh
+
+./install-sh -d d1
+
+# Do not change the timestamps when using -C.
+echo foo >file
+./install-sh -C file d1
+TZ=UTC0 touch -t $old_timestamp d1/file
+./install-sh -C file d1
+is_newest file d1/file
+echo foo1 >file
+./install-sh -C file d1
+diff file d1/file
+# Rights must be updated.
+./install-sh -C -m 444 file d1
+test -r d1/file
+test ! -w d1/file
+
+:
diff --git a/t/install-sh-unittests.sh b/t/install-sh-unittests.sh
new file mode 100644
index 000000000..e97a1f3fa
--- /dev/null
+++ b/t/install-sh-unittests.sh
@@ -0,0 +1,152 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Various install-sh checks.
+
+am_create_testdir=empty
+. test-init.sh
+
+install_sh_fail ()
+{
+ err_rx=$1; shift
+ ./install-sh ${1+"$@"} 2>stderr && { cat stderr >&2; exit 1; }
+ cat stderr >&2
+ $EGREP "install-sh:.* $err_rx" stderr || exit 1
+}
+
+get_shell_script install-sh
+
+# Basic errors.
+install_sh_fail 'no input file specified'
+install_sh_fail 'no input file specified' dest
+install_sh_fail 'no input file specified' -m 644 dest
+install_sh_fail 'no input file specified' -c -t dest
+
+# Incorrect usages.
+: > bar
+: > baz
+: > qux
+install_sh_fail 'target directory not allowed when installing a directory' \
+ -d -t foo
+install_sh_fail 'target directory not allowed when installing a directory' \
+ -d -t foo bar
+install_sh_fail 'foo: [iI]s not a directory' -t foo bar
+install_sh_fail 'foo: [iI]s not a directory' bar baz foo
+mkdir foo
+install_sh_fail 'target directory not allowed when installing a directory' \
+ -d -t foo
+install_sh_fail 'target directory not allowed when installing a directory' \
+ -d -t foo bar
+rmdir foo
+rm -f bar baz qux
+
+# Directories.
+for opts in '-d' '-d -T' '-T -d' '-d -T -d' '-T -d -T -d -T'; do
+ # It should be OK to create no directory. We sometimes need
+ # this when directory are conditionally defined.
+ ./install-sh $opts
+ # One directory.
+ ./install-sh $opts d0
+ test -d d0
+ # Multiple directories (for make installdirs).
+ ./install-sh $opts d1 d2 d3 d4
+ test -d d1
+ test -d d2
+ test -d d3
+ test -d d4
+ rmdir d[0-9]
+ # Subdirectories.
+ ./install-sh $opts p1/p2/p3 p4//p5//p6//
+ test -d p1/p2/p3
+ test -d p4/p5/p6
+ rmdir p[0-9]/p[0-9]/p[0-9]
+ rmdir p[0-9]/p[0-9]
+ rmdir p[0-9]
+done
+
+# Files.
+mkdir d0 d1 d2 d3 d4
+: > x
+./install-sh -c -m 644 x y
+test -f x
+test -f y
+./install-sh -m 644 y z
+test -f y
+test -f z
+# Multiple files.
+./install-sh -m 644 -c x z d1
+test -f x
+test -f z
+test -f d1/x
+test -f d1/z
+./install-sh -m 644 x z d2//
+test -f x
+test -f z
+test -f d2/x
+test -f d2/z
+./install-sh -t d3 -m 644 x z
+test -f x
+test -f z
+test -f d3/x
+test -f d3/z
+./install-sh -t d4// -m 644 x z
+test -f x
+test -f z
+test -f d4/x
+test -f d4/z
+./install-sh -T x d3/y
+test -f x
+test -f d3/y
+install_sh_fail 'd3: [iI]s a directory' -T x d3
+install_sh_fail 'd4(//)?: [iI]s a directory' -T x d4//
+
+# Ensure that install-sh works with names that include spaces.
+touch 'a b'
+mkdir 'x y'
+./install-sh 'a b' 'x y'
+test -f x\ \ y/a\ \ b
+test -f 'a b'
+
+# Ensure we do not run into 'test' operator precedence bugs with Tru64 sh.
+for c in = '(' ')' '!'; do
+ install_sh_fail 'no input file specified' $c
+ test -f stderr # sanity check
+ grep 'test: ' stderr && exit 1
+ # Skip tests if the file system is not capable.
+ mkdir ./$c || continue
+ rmdir ./$c
+ ./install-sh -d $c/$c/$c
+ rm -rf ./$c
+ ./install-sh -d $c d5/$c/$c
+ test -d ./$c
+ test -d d5/$c/$c
+ ./install-sh x $c
+ test -f ./$c/x
+ rm -f ./$c/x
+ ./install-sh -t $c x
+ test -f ./$c/x
+ rm -rf ./$c
+ ( : > ./$c ) || continue
+ ./install-sh $c x d5/$c/$c
+ test -f d5/$c/$c/x
+ test -f d5/$c/$c/$c
+ rm -f d5/$c/$c/?
+ ./install-sh -t d5/$c/$c $c x
+ test -f d5/$c/$c/x
+ test -f d5/$c/$c/$c
+done
+
+:
diff --git a/t/installdir.sh b/t/installdir.sh
new file mode 100644
index 000000000..45d81aaea
--- /dev/null
+++ b/t/installdir.sh
@@ -0,0 +1,64 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for PR 203.
+# See also automake bug#11030.
+#
+# == Original Report for PR/203 ==
+# Some standard targets are missing '-local' hooks. For instance,
+# installdirs is missing this. Ideally this would be an automatic
+# feature of any exported target.
+
+. test-init.sh
+
+echo AC_OUTPUT >> configure.ac
+
+cat > Makefile.am << 'END'
+foodir = $(datadir)/$(distdir)
+installdirs-local:
+ $(MKDIR_P) $(DESTDIR)$(foodir)
+install-data-hook: installdirs-local
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+test $(grep -c installdirs-local Makefile.in) -eq 4
+
+cwd=$(pwd) || fatal_ "getting current working directory"
+
+$AUTOCONF
+./configure --prefix="$cwd/inst"
+
+$MAKE installdirs
+test -d inst/share/$me-1.0
+rm -rf inst
+
+$MAKE install
+test -d inst/share/$me-1.0
+rm -rf inst
+
+./configure --prefix=/foo
+
+$MAKE installdirs DESTDIR="$cwd/dest"
+test -d dest/foo/share/$me-1.0
+rm -rf dest
+
+$MAKE install DESTDIR="$cwd/dest"
+test -d dest/foo/share/$me-1.0
+rm -rf dest
+
+:
diff --git a/t/instdat.sh b/t/instdat.sh
new file mode 100644
index 000000000..6d766ad87
--- /dev/null
+++ b/t/instdat.sh
@@ -0,0 +1,33 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to see if defining INSTALL_DATA causes problems. From EGCS
+# list.
+
+. test-init.sh
+
+cat >> configure.ac <<END
+AC_SUBST([INSTALL_DATA])
+END
+
+: > Makefile.am
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '^DATA =' Makefile.in | grep 'INSTALL_DATA' && exit 1
+
+:
diff --git a/t/instdat2.sh b/t/instdat2.sh
new file mode 100644
index 000000000..0240b6412
--- /dev/null
+++ b/t/instdat2.sh
@@ -0,0 +1,88 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test that installing under $exec_prefix is handled by install-exec.
+# Testing with headers for instance.
+
+. test-init.sh
+
+cat >Makefile.am << 'EOF'
+# User directories.
+inclexecdir = $(exec_prefix)/include
+inclexec_HEADERS = my-config.h
+
+incldatadir = $(prefix)/include
+incldata_HEADERS = my-data.h
+
+## Standard directories: _DATA
+## Commented out are invalid combinations.
+##bin_DATA = data
+##sbin_DATA = data
+##libexec_DATA = data
+data_DATA = data
+sysconf_DATA = data
+localstate_DATA = data
+##lib_DATA = data
+##info_DATA = data
+##man_DATA = data
+##include_DATA = data
+##oldinclude_DATA = data
+pkgdata_DATA = data
+##pkglib_DATA = data
+##pkginclude_DATA = data
+
+## Standard directories: _SCRIPTS
+## Commented out are invalid combinations.
+bin_SCRIPTS = script
+sbin_SCRIPTS = script
+libexec_SCRIPTS = script
+##data_SCRIPTS = script
+##sysconf_SCRIPTS = script
+##localstate_SCRIPTS = script
+##lib_SCRIPTS = script
+##info_SCRIPTS = script
+##man_SCRIPTS = script
+##include_SCRIPTS = script
+##oldinclude_SCRIPTS = script
+pkgdata_SCRIPTS = script
+##pkglib_SCRIPTS = script
+##pkginclude_SCRIPTS = script
+EOF
+
+$ACLOCAL
+$AUTOMAKE
+
+# install-SCRIPTS targets.
+sed -n '/^install-data-am/,/^ /p' Makefile.in > produced
+
+cat > expected <<'EOF'
+install-data-am: install-dataDATA install-incldataHEADERS \
+ install-pkgdataDATA install-pkgdataSCRIPTS
+EOF
+
+diff expected produced
+
+# install-exec targets.
+sed -n '/^install-exec-am/,/^ /p' Makefile.in > produced
+
+cat > expected <<'EOF'
+install-exec-am: install-binSCRIPTS install-inclexecHEADERS \
+ install-libexecSCRIPTS install-localstateDATA \
+EOF
+
+diff expected produced
+
+:
diff --git a/t/instdir-cond.sh b/t/instdir-cond.sh
new file mode 100644
index 000000000..f85e98c22
--- /dev/null
+++ b/t/instdir-cond.sh
@@ -0,0 +1,48 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check against automake bug#10997: directories holding only
+# conditionally-installed files should not be created unconditionally.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_CONDITIONAL([ENABLE_FOO], [false])
+AC_OUTPUT
+END
+
+: > foo
+: > bar
+
+cat > Makefile.am << 'END'
+pkglibexec_SCRIPTS =
+if ENABLE_FOO
+pkgdata_DATA = foo
+pkglibexec_SCRIPTS += bar
+endif
+END
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+./configure --prefix="$(pwd)/inst"
+
+$MAKE install
+test ! -e inst/share/instdir-cond
+test ! -e inst/libexec/instdir-cond
+
+:
diff --git a/t/instdir-cond2.sh b/t/instdir-cond2.sh
new file mode 100644
index 000000000..557d18a11
--- /dev/null
+++ b/t/instdir-cond2.sh
@@ -0,0 +1,51 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check against automake bug#10997: directories holding only
+# conditionally-installed files should not be created unconditionally.
+# FIXME: this test tries to check that the above also hold for the
+# FIXME: "installdirs" target, but that doesn't currently work :-(
+# FIXME: So this test is still xfailing.
+# See sister test 'instdir-cond.sh' for the succeeding part.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_CONDITIONAL([ENABLE_FOO], [false])
+AC_OUTPUT
+END
+
+: > foo
+: > bar
+
+cat > Makefile.am << 'END'
+pkglibexec_SCRIPTS =
+if ENABLE_FOO
+pkgdata_DATA = foo
+pkglibexec_SCRIPTS += bar
+endif
+END
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+./configure --prefix="$(pwd)/inst"
+
+$MAKE installdirs
+test ! -e inst || { find inst; exit 1; }
+
+:
diff --git a/t/instdir-java.sh b/t/instdir-java.sh
new file mode 100644
index 000000000..8800b8562
--- /dev/null
+++ b/t/instdir-java.sh
@@ -0,0 +1,51 @@
+#! /bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# If $(javadir) is the empty string, then nothing should be installed there.
+
+required=javac
+. test-init.sh
+
+cat >>configure.ac <<'END'
+AC_OUTPUT
+END
+
+cat >Makefile.am <<'END'
+javadir = $(datarootdir)/java
+java_JAVA = foo.java
+END
+
+cat >foo.java <<'END'
+class foo {
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+cwd=$(pwd) || fatal_ "getting current working directory"
+instdir=$cwd/inst
+destdir=$cwd/dest
+mkdir build
+cd build
+../configure --prefix="$instdir"
+$MAKE
+
+nulldirs='javadir='
+null_install
+
+:
diff --git a/t/instdir-lisp.sh b/t/instdir-lisp.sh
new file mode 100644
index 000000000..2f12c3442
--- /dev/null
+++ b/t/instdir-lisp.sh
@@ -0,0 +1,48 @@
+#! /bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# If $(lispdir) is the empty string, then nothing should be installed there.
+
+required=emacs
+. test-init.sh
+
+cat >>configure.ac <<'END'
+AM_PATH_LISPDIR
+AC_OUTPUT
+END
+
+cat >Makefile.am <<'END'
+lisp_LISP = l.el
+END
+
+: >l.el
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+cwd=$(pwd) || fatal_ "getting current working directory"
+instdir=$cwd/inst
+destdir=$cwd/dest
+mkdir build
+cd build
+../configure --prefix="$instdir"
+$MAKE
+
+nulldirs='lispdir='
+null_install
+
+:
diff --git a/t/instdir-ltlib.sh b/t/instdir-ltlib.sh
new file mode 100644
index 000000000..414d1bc6a
--- /dev/null
+++ b/t/instdir-ltlib.sh
@@ -0,0 +1,73 @@
+#! /bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# If $(libdir) or $(pyexecdir) is the empty string, then nothing should
+# be installed there.
+# This test exercises the libtool code paths.
+
+required='cc libtoolize'
+. test-init.sh
+
+cat >>configure.ac <<'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_LIBTOOL
+AM_PATH_PYTHON
+AC_OUTPUT
+END
+
+mkdir sub
+
+cat >Makefile.am <<'END'
+AUTOMAKE_OPTIONS = subdir-objects
+bin_PROGRAMS = p
+nobase_bin_PROGRAMS = np sub/np
+lib_LTIBRARIES = libfoo.la
+nobase_lib_LTLIBRARIES = libnfoo.la sub/libnfoo.la
+pyexec_LTIBRARIES = libpy.la
+nobase_pyexec_LTLIBRARIES = libnpy.la sub/libnpy.la
+END
+
+cat >p.c <<'END'
+int main () { return 0; }
+END
+cp p.c np.c
+cp p.c sub/np.c
+cp p.c libfoo.c
+cp p.c libnfoo.c
+cp p.c sub/libnfoo.c
+cp p.c libpy.c
+cp p.c libnpy.c
+cp p.c sub/libnpy.c
+
+libtoolize
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+cwd=$(pwd) || fatal_ "getting current working directory"
+instdir=$cwd/inst
+destdir=$cwd/dest
+mkdir build
+cd build
+../configure --prefix="$instdir" PYTHON="echo" \
+ am_cv_python_pythondir="$instdir/python" \
+ am_cv_python_pyexecdir="$instdir/pyexec"
+
+nulldirs='bindir= libdir= pyexecdir='
+null_install
+
+:
diff --git a/t/instdir-no-empty.sh b/t/instdir-no-empty.sh
new file mode 100644
index 000000000..a0f312bb9
--- /dev/null
+++ b/t/instdir-no-empty.sh
@@ -0,0 +1,122 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# An empty "foo_PRIMARY" declaration should *not* cause "make install"
+# to create directory $(foodir). See automake bug#10997 and bug#11030.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_SUBST([CC], [whatever])
+AC_SUBST([JAVAC], [whatever])
+AM_PATH_PYTHON(,,:)
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = no-dependencies
+mydir = $(prefix)/my
+myexecdir = $(prefix)/myexec
+javadir = $(prefix)/java
+END
+
+# Write Makefile.am.
+{
+
+ for dir in sbin bin libexec pkglibexec myexec; do
+ for dst in '' dist_ nodist_; do
+ echo "${dst}${dir}_SCRIPTS ="
+ done
+ echo "${dir}_PROGRAMS ="
+ done
+
+ for dir in lib pkglib myexec my; do
+ echo "${dir}_LIBRARIES ="
+ echo "${dir}_LTLIBRARIES ="
+ done
+
+ for p1 in '' notrans_; do
+ for p2 in '' dist_ nodist_; do
+ for s in '' 1 2 3 4 5 6 7 8 9; do
+ echo "${p1}${p2}man${s}_MANS ="
+ done
+ done
+ done
+
+ for dst in '' dist_ nodist_; do
+ for dir in dataroot data pkgdata doc lisp my; do
+ echo "${dst}${dir}_DATA ="
+ done
+ for dir in include pkginclude oldinclude my; do
+ echo "${dst}${dir}_HEADERS ="
+ done
+ for dir in python my; do
+ echo "${dst}${dir}_PYTHON ="
+ done
+ for dir in info my; do
+ echo "${dst}${dir}_TEXINFOS ="
+ done
+ for dir in java my; do
+ echo "${dst}${dir}_JAVA ="
+ done
+ for dir in lisp my; do
+ echo "${dst}${dir}_LISP ="
+ done
+ done
+
+} > t
+
+cat t >> Makefile.am
+sed 's/^/nobase_/' t >> Makefile.am
+rm -f t
+
+cat Makefile.am # For debugging.
+
+# Sanity check.
+grep '^oldinclude_HEADERS =' Makefile.am \
+ && grep '^nodist_my_PYTHON =' Makefile.am \
+ && grep '^notrans_dist_man5_MANS =' Makefile.am \
+ || fatal_ "creating Makefile.am"
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+cwd=$(pwd) || fatal_ "getting current working directory"
+
+doinst ()
+{
+ run_make install install-pdf install-ps install-dvi ${1+"$@"}
+}
+
+: > foo.sh
+
+./configure --prefix="$cwd/inst"
+doinst
+test ! -e inst || { find inst; exit 1; }
+$MAKE uninstall
+doinst bin_SCRIPTS=foo.sh
+test -f inst/bin/foo.sh
+
+# Explicitly pass prefix to avoid spurious influences from
+# global config.site scripts.
+./configure --prefix="/usr/local"
+test ! -e dest || { find dest; exit 1; }
+$MAKE uninstall
+doinst DESTDIR="$cwd/dest" bin_SCRIPTS=foo.sh
+test -f dest/usr/local/bin/foo.sh
+
+:
diff --git a/t/instdir-prog.sh b/t/instdir-prog.sh
new file mode 100644
index 000000000..de55050b6
--- /dev/null
+++ b/t/instdir-prog.sh
@@ -0,0 +1,72 @@
+#! /bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# If $(bindir), $(libdir) or $(pyexecdir) is the empty string, then
+# nothing should be installed there.
+# This test exercises the prog and libs code paths.
+
+required=cc
+. test-init.sh
+
+cat >>configure.ac <<'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+AM_PATH_PYTHON
+AC_OUTPUT
+END
+
+mkdir sub
+
+cat >Makefile.am <<'END'
+AUTOMAKE_OPTIONS = subdir-objects
+bin_PROGRAMS = p
+nobase_bin_PROGRAMS = np sub/np
+lib_LIBRARIES = libfoo.a
+nobase_lib_LIBRARIES = libnfoo.a sub/libnfoo.a
+pyexec_PROGRAMS = py
+nobase_pyexec_PROGRAMS = npy sub/npy
+END
+
+cat >p.c <<'END'
+int main () { return 0; }
+END
+cp p.c np.c
+cp p.c sub/np.c
+cp p.c libfoo.c
+cp p.c libnfoo.c
+cp p.c sub/libnfoo.c
+cp p.c py.c
+cp p.c npy.c
+cp p.c sub/npy.c
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+cwd=$(pwd) || fatal_ "getting current working directory"
+instdir=$cwd/inst
+destdir=$cwd/dest
+mkdir build
+cd build
+../configure --prefix="$instdir" PYTHON="echo" \
+ am_cv_python_pythondir="$instdir/python" \
+ am_cv_python_pyexecdir="$instdir/pyexec"
+
+nulldirs='bindir= libdir= pyexecdir='
+null_install
+
+:
diff --git a/t/instdir-python.sh b/t/instdir-python.sh
new file mode 100644
index 000000000..5b46c4536
--- /dev/null
+++ b/t/instdir-python.sh
@@ -0,0 +1,52 @@
+#! /bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# If $(pythondir) is the empty string, then nothing should be installed there.
+
+required=python
+. test-init.sh
+
+cat >>configure.ac <<'END'
+AM_PATH_PYTHON
+AC_OUTPUT
+END
+
+mkdir sub
+
+cat >Makefile.am <<'END'
+python_PYTHON = one.py
+END
+
+cat >one.py <<'END'
+def one(): return 1
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+cwd=$(pwd) || fatal_ "getting current working directory"
+instdir=$cwd/inst
+destdir=$cwd/dest
+mkdir build
+cd build
+../configure --prefix="$instdir"
+$MAKE
+
+nulldirs='pythondir='
+null_install
+
+:
diff --git a/t/instdir-texi.sh b/t/instdir-texi.sh
new file mode 100644
index 000000000..c00772124
--- /dev/null
+++ b/t/instdir-texi.sh
@@ -0,0 +1,62 @@
+#! /bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# If $(infodir) is the empty string, then nothing should be installed there.
+# Likewise for the other install-* targets used for texinfo files.
+
+required='makeinfo tex texi2dvi'
+. test-init.sh
+
+dvips --help \
+ || skip_ "dvips is missing"
+pdfetex --version || pdftex --version \
+ || skip_ "pdeftex and pdftex are both missing"
+
+cat >>configure.ac <<'END'
+AC_OUTPUT
+END
+
+cat >Makefile.am <<'END'
+info_TEXINFOS = foo.texi
+END
+
+cat >foo.texi << 'END'
+\input texinfo
+@setfilename foo.info
+@settitle foo
+@node Top
+Hello walls.
+@include version.texi
+@bye
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+cwd=$(pwd) || fatal_ "getting current working directory"
+instdir=$cwd/inst
+destdir=$cwd/dest
+mkdir build
+cd build
+../configure --prefix="$instdir"
+$MAKE all dvi ps pdf html
+ls -l
+
+nulldirs='infodir= htmldir= dvidir= psdir= pdfdir='
+null_install --texi
+
+:
diff --git a/t/instdir.sh b/t/instdir.sh
new file mode 100644
index 000000000..e29167d61
--- /dev/null
+++ b/t/instdir.sh
@@ -0,0 +1,61 @@
+#! /bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# If $(foodir) is the empty string, then nothing should be installed there.
+# This test only ensures this if $(foo_PRIMARY) is also empty, see
+# 'instdir2.sh' and siblings 'instdir-*.sh' for nonempty contents.
+
+. test-init.sh
+
+cat >>configure.ac <<'END'
+AC_SUBST([foodir], ['${datadir}'/foo])
+AC_OUTPUT
+END
+
+cat >Makefile.am <<'END'
+bin_SCRIPTS =
+nobase_bin_SCRIPTS =
+data_DATA =
+nobase_data_DATA =
+include_HEADERS =
+nobase_include_HEADERS =
+foo_DATA =
+nobase_foo_DATA =
+bardir = $(datadir)/bar
+bar_DATA =
+nobase_bar_DATA =
+man1_MANS =
+man_MANS =
+notrans_man1_MANS =
+notrans_man_MANS =
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+cwd=$(pwd) || fatal_ "getting current working directory"
+instdir=$cwd/inst
+destdir=$cwd/dest
+mkdir build
+cd build
+../configure --prefix="$instdir"
+$MAKE
+
+nulldirs='bindir= datadir= includedir= foodir= bardir= man1dir= man2dir='
+null_install
+
+:
diff --git a/t/instdir2.sh b/t/instdir2.sh
new file mode 100644
index 000000000..80bc99d85
--- /dev/null
+++ b/t/instdir2.sh
@@ -0,0 +1,83 @@
+#! /bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# If $(foodir) is the empty string, then nothing should be installed there.
+# This test ensures this also if $(foo_PRIMARY) is nonempty, see
+# 'instdir.sh'.
+
+. test-init.sh
+
+cat >>configure.ac <<'END'
+AC_SUBST([foodir], ['${datadir}'/foo])
+AC_OUTPUT
+END
+
+mkdir sub
+
+cat >Makefile.am <<'END'
+bin_SCRIPTS = s
+nobase_bin_SCRIPTS = ns sub/ns
+data_DATA = d
+nobase_data_DATA = nd sub/nd
+include_HEADERS = h
+nobase_include_HEADERS = nh sub/nh
+foo_DATA = f
+nobase_foo_DATA = nf sub/nf
+bardir = $(datadir)/bar
+bar_DATA = b
+nobase_bar_DATA = nb sub/nb
+man1_MANS = m1.1
+man_MANS = m.2
+notrans_man1_MANS = nm1.1
+notrans_man_MANS = nm.2
+END
+
+: >s
+: >ns
+: >sub/ns
+: >d
+: >nd
+: >sub/nd
+: >h
+: >nh
+: >sub/nh
+: >f
+: >nf
+: >sub/nf
+: >b
+: >nb
+: >sub/nb
+: >m1.1
+: >m.2
+: >nm1.1
+: >nm.2
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+cwd=$(pwd) || fatal_ "getting current working directory"
+instdir=$cwd/inst
+destdir=$cwd/dest
+mkdir build
+cd build
+../configure --prefix="$instdir"
+$MAKE
+
+nulldirs='bindir= datadir= includedir= foodir= bardir= man1dir= man2dir='
+null_install
+
+:
diff --git a/t/instexec.sh b/t/instexec.sh
new file mode 100644
index 000000000..0d61664ef
--- /dev/null
+++ b/t/instexec.sh
@@ -0,0 +1,27 @@
+#!/bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for this bug: when a Makefile.am builds nothing, no
+# install-exec target is generated.
+
+. test-init.sh
+
+: > Makefile.am
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '^install-exec:' Makefile.in
diff --git a/t/instfail-info.sh b/t/instfail-info.sh
new file mode 100644
index 000000000..31326a786
--- /dev/null
+++ b/t/instfail-info.sh
@@ -0,0 +1,63 @@
+#! /bin/sh
+# Copyright (C) 2008-2017 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 <https://www.gnu.org/licenses/>.
+
+# The install rule should honor failures of the install program.
+# Some of these are already caught by 'instmany.sh'.
+
+# This test has a few sister tests, for java, info, libtool.
+
+required='makeinfo'
+. test-init.sh
+
+cat >>configure.ac <<END
+AC_OUTPUT
+END
+
+cat >Makefile.am <<'END'
+info_TEXINFOS = info1.texi info2.texi info3.texi
+END
+
+for n in 1 2 3; do
+ cat >info$n.texi <<END
+\input texinfo
+@setfilename info$n.info
+@settitle main
+@node Top
+Hello walls.
+@bye
+END
+done
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+instdir=$(pwd)/inst || fatal_ "getting current working directory"
+./configure --prefix="$instdir"
+$MAKE
+
+$MAKE install
+$MAKE uninstall
+
+for file in info1.info
+do
+ chmod a-r $file
+ test ! -r $file || skip_ "cannot drop file read permissions"
+ $MAKE install-data && exit 1
+ chmod u+r $file
+done
+
+:
diff --git a/t/instfail-java.sh b/t/instfail-java.sh
new file mode 100644
index 000000000..360c685a0
--- /dev/null
+++ b/t/instfail-java.sh
@@ -0,0 +1,57 @@
+#! /bin/sh
+# Copyright (C) 2008-2017 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 <https://www.gnu.org/licenses/>.
+
+# The install rule should honor failures of the install program.
+# Some of these are already caught by 'instmany.sh'.
+
+# This is the java sister test of 'instfail.sh'.
+
+required=javac
+. test-init.sh
+
+cat >>configure.ac <<'END'
+AC_OUTPUT
+END
+
+cat >Makefile.am <<'END'
+javadir = $(datadir)/java
+java_JAVA = java1.java java2.java java3.java
+END
+
+for n in 1 2 3; do
+ echo "class java$n { }" >java$n.java
+done
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+instdir=$(pwd)/inst || fatal_ "getting current working directory"
+./configure --prefix="$instdir"
+$MAKE
+
+$MAKE install
+$MAKE uninstall
+
+for file in java1.class
+do
+ chmod a-r $file
+ test ! -r $file || skip_ "cannot drop file read permissions"
+ $MAKE install-data && exit 1
+ chmod u+r $file
+done
+
+:
diff --git a/t/instfail-libtool.sh b/t/instfail-libtool.sh
new file mode 100644
index 000000000..39946f763
--- /dev/null
+++ b/t/instfail-libtool.sh
@@ -0,0 +1,81 @@
+#! /bin/sh
+# Copyright (C) 2008-2017 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 <https://www.gnu.org/licenses/>.
+
+# The install rule should honor failures of the install program.
+# Some of these are already caught by 'instmany.sh'.
+
+# This is the libtool sister test of 'instfail.sh'.
+
+required='cc libtool libtoolize'
+. test-init.sh
+
+cat >>configure.ac <<END
+AM_PROG_AR
+AC_PROG_LIBTOOL
+AC_OUTPUT
+END
+
+cat >Makefile.am <<'END'
+bin_PROGRAMS = prog1 prog2 prog3
+nobase_bin_PROGRAMS = progn1 progn2 progn3
+lib_LTLIBRARIES = liblt1.la liblt2.la liblt3.la
+nobase_lib_LTLIBRARIES = libltn1.la libltn2.la libltn3.la
+unreadable-prog:
+ chmod a-r prog1$(EXEEXT)
+readable-prog:
+ chmod a+r prog1$(EXEEXT)
+unreadable-progn:
+ chmod a-r progn1$(EXEEXT)
+readable-progn:
+ chmod a+r progn1$(EXEEXT)
+END
+
+for n in 1 2 3; do
+ echo "int main () { return 0; }" > prog$n.c
+ echo "int main () { return 0; }" > progn$n.c
+ echo "int foolt$n () { return 0; }" > liblt$n.c
+ echo "int fooltn$n () { return 0; }" > libltn$n.c
+done
+
+libtoolize
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+instdir=$(pwd)/inst || fatal_ "getting current working directory"
+./configure --prefix="$instdir"
+$MAKE
+
+$MAKE install
+$MAKE uninstall
+
+for file in liblt1.la libltn1.la
+do
+ chmod a-r $file
+ test ! -r $file || skip_ "cannot drop file read permissions"
+ $MAKE install-exec && exit 1
+ chmod u+r $file
+done
+
+$MAKE unreadable-prog
+$MAKE install-exec && exit 1
+$MAKE readable-prog
+
+$MAKE unreadable-progn
+$MAKE install-exec && exit 1
+$MAKE readable-progn
+
+:
diff --git a/t/instfail.sh b/t/instfail.sh
new file mode 100644
index 000000000..5efc754b8
--- /dev/null
+++ b/t/instfail.sh
@@ -0,0 +1,94 @@
+#! /bin/sh
+# Copyright (C) 2008-2017 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 <https://www.gnu.org/licenses/>.
+
+# The install rule should honor failures of the install program.
+# Some of these are already caught by 'instmany.sh'.
+
+# This test has a few sister tests, for java, info, libtool.
+
+required=cc
+. test-init.sh
+
+cat >>configure.ac <<END
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+AM_PATH_LISPDIR
+AC_OUTPUT
+END
+
+cat >Makefile.am <<'END'
+bin_PROGRAMS = prog1 prog2 prog3
+nobase_bin_PROGRAMS = progn1 progn2 progn3
+lisp_LISP = lisp1.el lisp2.el lisp3.el
+nobase_lisp_LISP = lispn1.el lispn2.el lispn3.el
+lib_LIBRARIES = lib1.a lib2.a lib3.a
+nobase_lib_LIBRARIES = libn1.a libn2.a libn3.a
+unreadable-prog:
+ chmod a-r prog1$(EXEEXT)
+readable-prog:
+ chmod a+r prog1$(EXEEXT)
+unreadable-progn:
+ chmod a-r progn1$(EXEEXT)
+readable-progn:
+ chmod a+r progn1$(EXEEXT)
+END
+
+for n in 1 2 3; do
+ echo "int main () { return 0; }" > prog$n.c
+ echo "int main () { return 0; }" > progn$n.c
+ echo "int foo$n () { return 0; }" > lib$n.c
+ echo "int foon$n () { return 0; }" > libn$n.c
+ echo >lisp$n.el
+ echo >lispn$n.el
+done
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+instdir=$(pwd)/inst || fatal_ "getting current working directory"
+./configure --prefix="$instdir"
+$MAKE
+
+$MAKE install
+$MAKE uninstall
+
+for file in lib1.a libn1.a
+do
+ chmod a-r $file
+ test ! -r $file || skip_ "cannot drop file read permissions"
+ $MAKE install-exec && exit 1
+ chmod u+r $file
+done
+
+$MAKE unreadable-prog
+$MAKE install-exec && exit 1
+$MAKE readable-prog
+
+$MAKE unreadable-progn
+$MAKE install-exec && exit 1
+$MAKE readable-progn
+
+if ! grep "^EMACS = no" Makefile; then
+ for file in lisp1.el lisp1.elc; do
+ chmod a-r $file
+ $MAKE install-data && exit 1
+ chmod u+r $file
+ done
+fi
+
+:
diff --git a/t/insthook.sh b/t/insthook.sh
new file mode 100644
index 000000000..103577260
--- /dev/null
+++ b/t/insthook.sh
@@ -0,0 +1,77 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure the install-exec-hook example we give in the manual works.
+
+. test-init.sh
+
+cat >>configure.ac <<'EOF'
+AC_PROG_LN_S
+AC_OUTPUT
+EOF
+
+cat >Makefile.am <<'END'
+dist_bin_SCRIPTS = foo
+
+install-exec-hook:
+ cd "$(DESTDIR)$(bindir)" \
+ && mv -f foo foo-$(VERSION) \
+ && $(LN_S) foo-$(VERSION) foo
+
+installcheck-local:
+ test -f "$(bindir)/foo"
+ test -f "$(bindir)/foo-$(VERSION)"
+ : > $(top_srcdir)/../ok
+
+uninstall-hook:
+ rm -f $(DESTDIR)$(bindir)/foo-$(VERSION)
+END
+
+echo a > foo
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+$MAKE distcheck
+# Sanity check to make sure installcheck-local was run.
+test -f ok
+
+# Make sure that installing a second version doesn't erase the first
+# one. (This is error prone since 'foo' symlinks to 'foo-1.0' and the
+# second version will overwrite 'foo'. Hopefully 'install' and 'install-sh'
+# are smart enough to erase the 'foo' symlink before installing the new
+# version.)
+./configure "--bindir=$(pwd)/bin"
+$MAKE install
+echo b > foo
+run_make VERSION=2.0 install
+test $(cat bin/foo-1.0) = a
+test $(cat bin/foo-2.0) = b
+test $(cat bin/foo) = b
+
+# install-hook is an error.
+cat >>Makefile.am <<EOF
+install-hook:
+ echo test
+EOF
+
+AUTOMAKE_fails
+grep install-data-hook stderr
+grep install-exec-hook stderr
+
+:
diff --git a/t/instman.sh b/t/instman.sh
new file mode 100644
index 000000000..3f31835f1
--- /dev/null
+++ b/t/instman.sh
@@ -0,0 +1,36 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure the MKDIR_P invocation is correct in install-man
+# target. Bug reported by Gordon Irlam <gordoni@cygnus.com>.
+
+. test-init.sh
+
+echo AC_OUTPUT >> configure.ac
+
+cat > Makefile.am << 'EOF'
+man_MANS = frob.8
+EOF
+
+: > frob.8
+
+$ACLOCAL
+$AUTOMAKE
+
+grep 'MKDIR_P' Makefile.in # For debugging.
+test $(grep -c '[^(/]MKDIR_P' Makefile.in) -eq 1
+
+:
diff --git a/t/instman2.sh b/t/instman2.sh
new file mode 100644
index 000000000..09a087e69
--- /dev/null
+++ b/t/instman2.sh
@@ -0,0 +1,33 @@
+#! /bin/sh
+# Copyright (C) 2000-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure mkinstalldirs invocation correct in install-man
+# target. Bug reported by Gordon Irlam <gordoni@cygnus.com>.
+
+. test-init.sh
+
+cat > Makefile.am << 'EOF'
+man8_MANS = frob.8
+EOF
+
+: > frob.8
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '^install-man' Makefile.in
+
+:
diff --git a/t/instmany-mans.sh b/t/instmany-mans.sh
new file mode 100644
index 000000000..08a66dabd
--- /dev/null
+++ b/t/instmany-mans.sh
@@ -0,0 +1,168 @@
+#! /bin/sh
+# Copyright (C) 2008-2017 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 <https://www.gnu.org/licenses/>.
+
+# Installing many files should not exceed the command line length limit.
+
+# This is the mans sister test of 'instmany.sh', see there for details.
+
+. test-init.sh
+
+# In order to have a useful test on modern systems (which have a high
+# limit, if any), use a fake install program that errors out for more
+# than 2K characters in a command line. The POSIX limit is 4096, but
+# that may include space taken up by the environment.
+
+limit=2500
+subdir=long_subdir_name_with_many_characters
+nfiles=81
+list=$(seq_ 1 $nfiles)
+
+oPATH=$PATH; export oPATH
+nPATH=$(pwd)/x-bin$PATH_SEPARATOR$PATH; export nPATH
+
+mkdir x-bin
+
+sed "s|@limit@|$limit|g" >x-bin/my-install <<'END'
+#! /bin/sh
+limit=@limit@
+PATH=$oPATH; export PATH
+if test -z "$orig_INSTALL"; then
+ echo "$0: \$orig_INSTALL variable not set" >&2
+ exit 1
+fi
+len=`expr "$orig_INSTALL $*" : ".*" 2>/dev/null || echo $limit`
+if test $len -ge $limit; then
+ echo "$0: safe command line limit of $limit characters exceeded" >&2
+ exit 1
+fi
+exec $orig_INSTALL "$@"
+exit 1
+END
+
+# Creative quoting in the next line to please maintainer-check.
+sed "s|@limit@|$limit|g" >x-bin/'rm' <<'END'
+#! /bin/sh
+limit=@limit@
+PATH=$oPATH; export PATH
+RM='rm -f'
+len=`expr "$RM $*" : ".*" 2>/dev/null || echo $limit`
+if test $len -ge $limit; then
+ echo "$0: safe command line limit of $limit characters exceeded" >&2
+ exit 1
+fi
+exec $RM "$@"
+exit 1
+END
+
+# Creative quoting in the next line to please maintainer-check.
+chmod +x x-bin/'rm' x-bin/my-install
+
+cat >setenv.in <<'END'
+orig_INSTALL='@INSTALL@'
+# In case we've falled back on the install-sh script (seen e.g.,
+# on AIX 7.1), we need to make sure we use its absolute path,
+# as we don't know from which directory we'll be run.
+case "$orig_INSTALL" in
+ /*) ;;
+ */*) orig_INSTALL=$(pwd)/$orig_INSTALL;;
+esac
+export orig_INSTALL
+END
+
+cat >>configure.ac <<END
+AC_CONFIG_FILES([setenv.sh:setenv.in])
+AC_CONFIG_FILES([$subdir/Makefile])
+AC_OUTPUT
+END
+
+cat >Makefile.am <<END
+SUBDIRS = $subdir
+END
+
+mkdir $subdir
+cd $subdir
+
+cat >Makefile.am <<'END'
+man_MANS =
+man3_MANS =
+notrans_man_MANS =
+notrans_man3_MANS =
+END
+
+for n in $list; do
+ unindent >>Makefile.am <<END
+ man_MANS += page$n.1
+ man3_MANS += page$n.man
+ notrans_man_MANS += npage$n.1
+ notrans_man3_MANS += npage$n.man
+END
+ echo >page$n.1
+ echo >page$n.man
+ echo >npage$n.1
+ echo >npage$n.man
+done
+
+cd ..
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+instdir=$(pwd)/inst
+mkdir build
+cd build
+../configure --prefix="$instdir"
+. ./setenv.sh
+test -n "$orig_INSTALL"
+$MAKE
+# Try whether native install (or install-sh) works.
+$MAKE install
+test -f "$instdir/share/man/man1/page1.1"
+# Multiple uninstall should work, too.
+$MAKE uninstall
+$MAKE uninstall
+test $(find "$instdir" -type f -print | wc -l) -eq 0
+
+# Try whether we don't exceed the low limit.
+PATH=$nPATH; export PATH
+run_make INSTALL=my-install install
+test -f "$instdir/share/man/man1/page1.1"
+run_make INSTALL=my-install uninstall
+test $(find "$instdir" -type f -print | wc -l) -eq 0
+PATH=$oPATH; export PATH
+
+cd $subdir
+srcdir=../../$subdir
+
+# Ensure 'make install' fails when 'install' fails.
+
+# We cheat here, for efficiency, knowing the internal rule names.
+# For correctness, one should '$MAKE install' here always, or at
+# least use install-exec or install-data.
+
+for file in page3.1 page$nfiles.1 npage3.1 npage$nfiles.1; do
+ chmod a-r $srcdir/$file
+ test ! -r $srcdir/$file || skip_ "cannot drop file read permissions"
+ $MAKE install-man1 && exit 1
+ chmod u+r $srcdir/$file
+done
+
+for file in page3.man page$nfiles.man npage3.man npage$nfiles.man; do
+ chmod a-r $srcdir/$file
+ $MAKE install-man3 && exit 1
+ chmod u+r $srcdir/$file
+done
+
+:
diff --git a/t/instmany-python.sh b/t/instmany-python.sh
new file mode 100644
index 000000000..542251b97
--- /dev/null
+++ b/t/instmany-python.sh
@@ -0,0 +1,157 @@
+#! /bin/sh
+# Copyright (C) 2008-2017 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 <https://www.gnu.org/licenses/>.
+
+# Installing many files should not exceed the command line length limit.
+
+# This is the python sister test of 'instmany.sh', see there for details.
+
+required='python'
+. test-init.sh
+
+limit=2500
+subdir=long_subdir_name_with_many_characters
+nfiles=81
+list=$(seq_ 1 $nfiles)
+
+oPATH=$PATH; export oPATH
+nPATH=$(pwd)/x-bin$PATH_SEPARATOR$PATH; export nPATH
+
+mkdir x-bin
+
+sed "s|@limit@|$limit|g" >x-bin/my-install <<'END'
+#! /bin/sh
+limit=@limit@
+PATH=$oPATH; export PATH
+if test -z "$orig_INSTALL"; then
+ echo "$0: \$orig_INSTALL variable not set" >&2
+ exit 1
+fi
+len=`expr "$orig_INSTALL $*" : ".*" 2>/dev/null || echo $limit`
+if test $len -ge $limit; then
+ echo "$0: safe command line limit of $limit characters exceeded" >&2
+ exit 1
+fi
+exec $orig_INSTALL "$@"
+exit 1
+END
+
+# Creative quoting in the next line to please maintainer-check.
+sed "s|@limit@|$limit|g" >x-bin/'rm' <<'END'
+#! /bin/sh
+limit=@limit@
+PATH=$oPATH; export PATH
+RM='rm -f'
+len=`expr "$RM $*" : ".*" 2>/dev/null || echo $limit`
+if test $len -ge $limit; then
+ echo "$0: safe command line limit of $limit characters exceeded" >&2
+ exit 1
+fi
+exec $RM "$@"
+exit 1
+END
+
+# Creative quoting in the next line to please maintainer-check.
+chmod +x x-bin/'rm' x-bin/my-install
+
+cat >setenv.in <<'END'
+orig_INSTALL='@INSTALL@'
+# In case we've falled back on the install-sh script (seen e.g.,
+# on AIX 7.1), we need to make sure we use its absolute path,
+# as we don't know from which directory we'll be run.
+case "$orig_INSTALL" in
+ /*) ;;
+ */*) orig_INSTALL=$(pwd)/$orig_INSTALL;;
+esac
+export orig_INSTALL
+END
+
+cat >>configure.ac <<END
+AM_PATH_PYTHON
+AC_CONFIG_FILES([setenv.sh:setenv.in])
+AC_CONFIG_FILES([$subdir/Makefile])
+AC_OUTPUT
+END
+
+cat >Makefile.am <<END
+SUBDIRS = $subdir
+END
+
+mkdir $subdir
+cd $subdir
+
+cat >Makefile.am <<'END'
+python_PYTHON =
+nobase_python_PYTHON =
+END
+
+for n in $list; do
+ unindent >>Makefile.am <<END
+ python_PYTHON += python$n.py
+ nobase_python_PYTHON += npython$n.py
+END
+ echo >python$n.py
+ echo >npython$n.py
+done
+
+cd ..
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+instdir=$(pwd)/inst
+mkdir build
+cd build
+../configure --prefix="$instdir"
+. ./setenv.sh
+test -n "$orig_INSTALL"
+$MAKE
+# Try whether native install (or install-sh) works.
+$MAKE install
+test -n "$(find "$instdir" -name python1.py)"
+# Multiple uninstall should work, too.
+$MAKE uninstall
+$MAKE uninstall
+test $(find "$instdir" -type f -print | wc -l) -eq 0
+
+# Try whether we don't exceed the low limit.
+PATH=$nPATH; export PATH
+run_make INSTALL=my-install install
+test -n "$(find "$instdir" -name python1.py)"
+run_make INSTALL=my-install uninstall
+test $(find "$instdir" -type f -print | wc -l) -eq 0
+PATH=$oPATH; export PATH
+
+cd $subdir
+srcdir=../../$subdir
+
+# Ensure 'make install' fails when 'install' fails.
+
+for file in python3.py python$nfiles.py
+do
+ chmod a-r $srcdir/$file
+ test ! -r $srcdir/$file || skip_ "cannot drop file read permissions"
+ $MAKE install && exit 1
+ chmod u+r $srcdir/$file
+done
+
+for file in npython3.py npython$nfiles.py
+do
+ chmod a-r $srcdir/$file
+ $MAKE install && exit 1
+ chmod u+r $srcdir/$file
+done
+
+:
diff --git a/t/instmany.sh b/t/instmany.sh
new file mode 100644
index 000000000..7bb92d2b9
--- /dev/null
+++ b/t/instmany.sh
@@ -0,0 +1,212 @@
+#! /bin/sh
+# Copyright (C) 2008-2017 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 <https://www.gnu.org/licenses/>.
+
+# Installing many files should not exceed the command line length limit.
+# Here, the main issue is that we may prepend '$(srcdir)/' to each file,
+# which may cause much longer command lines. The list of files must
+# anyway remain below the limit, otherwise 'make' won't be able to even
+# fork the command.
+#
+# Further, the install rule should honor failures of the install program.
+
+# Python is done in the sister test.
+# For texinfos, we expand names using $(srcdir) in the first place.
+# Let's hope nobody uses many texinfos.
+
+. test-init.sh
+
+# In order to have a useful test on modern systems (which have a high
+# limit, if any), use a fake install program that errors out for more
+# than 2K characters in a command line. The POSIX limit is 4096, but
+# that may include space taken up by the environment.
+
+limit=2500
+subdir=long_subdir_name_with_many_characters
+nfiles=81
+list=$(seq_ 1 $nfiles)
+
+oPATH=$PATH; export oPATH
+nPATH=$(pwd)/x-bin$PATH_SEPARATOR$PATH; export nPATH
+
+mkdir x-bin
+
+sed "s|@limit@|$limit|g" >x-bin/my-install <<'END'
+#! /bin/sh
+limit=@limit@
+PATH=$oPATH; export PATH
+if test -z "$orig_INSTALL"; then
+ echo "$0: \$orig_INSTALL variable not set" >&2
+ exit 1
+fi
+len=`expr "$orig_INSTALL $*" : ".*" 2>/dev/null || echo $limit`
+if test $len -ge $limit; then
+ echo "$0: safe command line limit of $limit characters exceeded" >&2
+ exit 1
+fi
+exec $orig_INSTALL "$@"
+exit 1
+END
+
+# Creative quoting in the next line to please maintainer-check.
+sed "s|@limit@|$limit|g" >x-bin/'rm' <<'END'
+#! /bin/sh
+limit=@limit@
+PATH=$oPATH; export PATH
+RM='rm -f'
+len=`expr "$RM $*" : ".*" 2>/dev/null || echo $limit`
+if test $len -ge $limit; then
+ echo "$0: safe command line limit of $limit characters exceeded" >&2
+ exit 1
+fi
+exec $RM "$@"
+exit 1
+END
+
+# Creative quoting in the next line to please maintainer-check.
+chmod +x x-bin/'rm' x-bin/my-install
+
+cat >setenv.in <<'END'
+orig_INSTALL='@INSTALL@'
+# In case we've falled back on the install-sh script (seen e.g.,
+# on AIX 7.1), we need to make sure we use its absolute path,
+# as we don't know from which directory we'll be run.
+case "$orig_INSTALL" in
+ /*) ;;
+ */*) orig_INSTALL=$(pwd)/$orig_INSTALL;;
+esac
+export orig_INSTALL
+END
+
+cat >>configure.ac <<END
+AC_CONFIG_FILES([setenv.sh:setenv.in])
+AC_CONFIG_FILES([$subdir/Makefile])
+AC_OUTPUT
+END
+
+cat >Makefile.am <<END
+SUBDIRS = $subdir
+END
+
+mkdir $subdir
+cd $subdir
+
+cat >Makefile.am <<'END'
+bin_SCRIPTS =
+nobase_bin_SCRIPTS =
+data_DATA =
+nobase_data_DATA =
+include_HEADERS =
+nobase_include_HEADERS =
+END
+
+for n in $list; do
+ unindent >>Makefile.am <<END
+ bin_SCRIPTS += script$n
+ nobase_bin_SCRIPTS += nscript$n
+ data_DATA += data$n
+ nobase_data_DATA += ndata$n
+ include_HEADERS += header$n.h
+ nobase_include_HEADERS += nheader$n.h
+END
+ echo >script$n
+ echo >nscript$n
+ echo >data$n
+ echo >ndata$n
+ echo >header$n.h
+ echo >nheader$n.h
+done
+
+cd ..
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+instdir=$(pwd)/inst
+mkdir build
+cd build
+../configure --prefix="$instdir"
+. ./setenv.sh
+test -n "$orig_INSTALL"
+$MAKE
+# Try whether native install (or install-sh) works.
+$MAKE install
+test -f "$instdir/bin/script1"
+# Multiple uninstall should work, too.
+$MAKE uninstall
+$MAKE uninstall
+test $(find "$instdir" -type f -print | wc -l) -eq 0
+
+# Try whether we don't exceed the low limit.
+PATH=$nPATH; export PATH
+run_make INSTALL=my-install install
+test -f "$instdir/bin/script1"
+run_make INSTALL=my-install uninstall
+test $(find "$instdir" -type f -print | wc -l) -eq 0
+PATH=$oPATH; export PATH
+
+cd $subdir
+srcdir=../../$subdir
+
+# Ensure 'make install' fails when 'install' fails.
+
+# We cheat here, for efficiency, knowing the internal rule names.
+# For correctness, one should '$MAKE install' here always, or at
+# least use install-exec or install-data.
+
+for file in script3 script$nfiles
+do
+ chmod a-r $srcdir/$file
+ test ! -r $srcdir/$file || skip_ "cannot drop file read permissions"
+ $MAKE install-binSCRIPTS && exit 1
+ chmod u+r $srcdir/$file
+done
+
+for file in nscript3 nscript$nfiles
+do
+ chmod a-r $srcdir/$file
+ $MAKE install-nobase_binSCRIPTS && exit 1
+ chmod u+r $srcdir/$file
+done
+
+for file in data3 data$nfiles
+do
+ chmod a-r $srcdir/$file
+ $MAKE install-dataDATA && exit 1
+ chmod u+r $srcdir/$file
+done
+
+for file in ndata3 ndata$nfiles
+do
+ chmod a-r $srcdir/$file
+ $MAKE install-nobase_dataDATA && exit 1
+ chmod u+r $srcdir/$file
+done
+
+for file in header3.h header$nfiles.h
+do
+ chmod a-r $srcdir/$file
+ $MAKE install-includeHEADERS && exit 1
+ chmod u+r $srcdir/$file
+done
+
+for file in nheader3.h nheader$nfiles.h
+do
+ chmod a-r $srcdir/$file
+ $MAKE install-nobase_includeHEADERS && exit 1
+ chmod u+r $srcdir/$file
+done
+
+:
diff --git a/t/instspc.tap b/t/instspc.tap
new file mode 100644
index 000000000..01ef38bd9
--- /dev/null
+++ b/t/instspc.tap
@@ -0,0 +1,341 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that building from, or installing to, directories with shell
+# metacharacters succeed.
+# Original report from James Amundson about file names with spaces.
+# Other characters added by Paul Eggert.
+
+. test-init.sh
+
+# Usage: is_in_list ITEM [LIST...]
+is_in_list ()
+{
+ item=$1; shift;
+ case " $* " in
+ *[\ \ ]"$item"[\ \ ]*) return 0;;
+ *) return 1;;
+ esac
+}
+
+# Helper subroutine for test data definition.
+# Usage: define_problematic_string NAME STRING
+define_problematic_string ()
+{
+ tst=$1; shift
+ eval "instspc__$tst=\$1" \
+ || fatal_ "define_problematic_string: bad argument: '$tst'"
+ shift
+ all_test_names_list="$all_test_names_list $tst"
+ # Some of the "problematic" characters cannot be used in the name of
+ # a build or install directory on a POSIX host. These lists should
+ # be empty, but are not due to limitations in Autoconf, Automake, Make,
+ # M4, or the shell.
+ if is_in_list fail-builddir "$@"; then
+ builddir_xfails="$builddir_xfails $tst"
+ fi
+ if is_in_list fail-destdir "$@"; then
+ destdir_xfails="$destdir_xfails $tst"
+ fi
+}
+
+# Be sure to avoid interferences from the environment.
+all_test_names_list=''
+builddir_xfails=''
+destdir_xfails=''
+
+expected_to_fail ()
+{
+ case $1 in
+ build) is_in_list "$2" $builddir_xfails;;
+ dest) is_in_list "$2" $destdir_xfails;;
+ *) fatal_ "incorrect 'expected_to_fail' usage";;
+ esac
+}
+
+# Helper subroutines for creation of input data files.
+create_input_data ()
+{
+ mkdir sub
+
+ unindent >> configure.ac << 'EOF'
+ AC_PROG_CC
+ AM_PROG_AR
+ AC_PROG_RANLIB
+ AC_OUTPUT
+EOF
+
+ : > sub/base.h
+ : > sub/nobase.h
+ : > sub/base.dat
+ : > sub/nobase.dat
+ : > sub/base.sh
+ : > sub/nobase.sh
+
+ unindent > source.c << 'EOF'
+ int
+ main (int argc, char **argv)
+ {
+ return 0;
+ }
+EOF
+
+ unindent > Makefile.am << 'EOF'
+ foodir = $(prefix)/foo
+ fooexecdir = $(prefix)/foo
+
+ foo_HEADERS = sub/base.h
+ nobase_foo_HEADERS = sub/nobase.h
+
+ dist_foo_DATA = sub/base.dat
+ nobase_dist_foo_DATA = sub/nobase.dat
+
+ dist_fooexec_SCRIPTS = sub/base.sh
+ nobase_dist_fooexec_SCRIPTS = sub/nobase.sh
+
+ fooexec_PROGRAMS = sub/base
+ nobase_fooexec_PROGRAMS = sub/nobase
+ sub_base_SOURCES = source.c
+ sub_nobase_SOURCES = source.c
+
+ fooexec_LIBRARIES = sub/libbase.a
+ nobase_fooexec_LIBRARIES = sub/libnobase.a
+ sub_libbase_a_SOURCES = source.c
+ sub_libnobase_a_SOURCES = source.c
+
+ .PHONY: test-inst
+ test-inst: install
+ test -f '$(DESTDIR)/$(file)-prefix/foo/sub/nobase.h'
+ test ! -f '$(DESTDIR)/$(file)-prefix/foo/nobase.h'
+ test -f '$(DESTDIR)/$(file)-prefix/foo/base.h'
+ test -f '$(DESTDIR)/$(file)-prefix/foo/sub/nobase.dat'
+ test ! -f '$(DESTDIR)/$(file)-prefix/foo/nobase.dat'
+ test -f '$(DESTDIR)/$(file)-prefix/foo/base.dat'
+ test -f '$(DESTDIR)/$(file)-prefix/foo/sub/nobase.sh'
+ test ! -f '$(DESTDIR)/$(file)-prefix/foo/nobase.sh'
+ test -f '$(DESTDIR)/$(file)-prefix/foo/base.sh'
+ test -f '$(DESTDIR)/$(file)-prefix/foo/sub/nobase$(EXEEXT)'
+ test ! -f '$(DESTDIR)/$(file)-prefix/foo/nobase$(EXEEXT)'
+ test -f '$(DESTDIR)/$(file)-prefix/foo/base$(EXEEXT)'
+ test -f '$(DESTDIR)/$(file)-prefix/foo/sub/libnobase.a'
+ test ! -f '$(DESTDIR)/$(file)-prefix/foo/libnobase.a'
+ test -f '$(DESTDIR)/$(file)-prefix/foo/libbase.a'
+EOF
+
+ $ACLOCAL || framework_failure_ "aclocal failed"
+ $AUTOCONF || framework_failure_ "autoconf failed"
+ $AUTOMAKE -a || framework_failure_ "automake failed"
+}
+
+# ================= #
+# Test data begin #
+# ----------------- #
+
+# Some control characters that are white space.
+bs='' # back space
+cr=' ' # carriage return
+ff=' ' # form feed
+ht=' ' # horizontal tab
+lf='
+' # line feed (aka newline)
+
+# Hack to save typing and make code visually clearer.
+def=define_problematic_string
+
+$def squote \' fail-builddir fail-destdir
+$def dquote '"' fail-builddir fail-destdir
+$def bquote '`' fail-builddir fail-destdir
+$def sharp '#' fail-builddir fail-destdir
+$def dollar '$' fail-builddir fail-destdir
+$def bang '!'
+$def bslash '\' fail-builddir
+$def ampersand '&' fail-builddir
+$def percent '%'
+$def leftpar '('
+$def rightpar ')'
+$def pipe '|'
+$def caret '^'
+$def tilde '~'
+$def qmark '?'
+$def star '*'
+$def plus '+'
+$def minus '-'
+$def comma ','
+$def colon ':'
+$def semicol ';'
+$def equal '='
+$def less '<'
+$def more '>'
+$def at '@'
+$def lqbrack '['
+$def rqbrack ']'
+$def lcbrack '{'
+$def rcbrack '}'
+$def space ' '
+$def tab "$ht"
+$def linefeed "$lf" fail-builddir fail-destdir
+$def backspace "$bs"
+$def formfeed "$ff"
+$def carriageret "$cr"
+$def quadrigraph0 '@&t@' fail-builddir
+$def quadrigraph1 '@<:@'
+$def quadrigraph2 '@:>@'
+$def quadrigraph3 '@S|@'
+$def quadrigraph4 '@%:@'
+$def a_b 'a b'
+$def a__b 'a b'
+$def a_lf_b "a${lf}b" fail-builddir fail-destdir
+$def dotdotdot '...'
+$def dosdrive 'a:'
+$def miscglob1 '?[a-z]*'
+$def miscglob2 '.*?[0-9]'
+
+unset def
+
+# --------------- #
+# Test data end #
+# =============== #
+
+# Allow the user to select a subset of the tests.
+if test $# -gt 0; then
+ test_names_list=$*
+ for test_name in $test_names_list; do
+ case " $all_test_names_list " in
+ *" $test_name "*);;
+ *) fatal_ "invalid user-specified test_name '$test_name'"
+ esac
+ done
+ # We need to determine the TAP plan adaptively.
+ n=$(for t in $test_names_list; do echo $t; done | wc -l)
+ plan_ $(($n * 2)) # Two tests per "problematic string".
+ unset n
+else
+ test_names_list=$all_test_names_list
+ # Prefer static TAP plan if possible, it minimizes the chance of errors.
+ plan_ 94
+fi
+
+ocwd=$(pwd) || fatal_ "getting current working directory"
+
+create_input_data
+
+for test_name in $test_names_list; do
+
+ eval "test_string=\${instspc__$test_name}" \
+ || fatal_ "invalid test name: '$test_name'"
+
+ if test x"$test_string" = x; then
+ if test x"$test_name" != xcarriageret; then
+ fatal_ "invalid test name: '$test_name'"
+ else
+ # MSYS version 1.0.17 still mishandles carriage returns; see
+ # automake bug#7849.
+ skip_ -r "carriage-return treated as null char" "$test_name in builddir"
+ skip_ -r "carriage-return treated as null char" "$test_name in destdir"
+ continue
+ fi
+ fi
+
+ # Skip the next checks if this system doesn't support the required
+ # characters in file names.
+
+ mkdir "./$test_string" || {
+ skip_ -r "mkdir failed" "$test_name in builddir"
+ skip_ -r "mkdir failed" "$test_name in destdir"
+ continue
+ }
+
+ case $test_string in
+ *:*)
+ # On MSYS 1.0.17, "mkdir ./a:" creates ./a, and "cd ./a:" takes you
+ # to a strange directory with pwd equal to "a". But only for
+ # interactive shells. Or something? In this script, "cd ./a:" fails
+ # on MSYS. Marvelous.
+ ( cd "./$test_string" ) || {
+ rmdir "./$test_string" || fatal_ "removing directory"
+ skip_ -r "cd failed" "$test_name in builddir"
+ skip_ -r "cd failed" "$test_name in destdir"
+ continue
+ }
+ ;;
+ esac
+
+ # Where are the "weird" characters going to be used, in $(builddir)
+ # or in $(DESTDIR)? They are always going to be used in $(prefix)
+ # though; should we maybe separate this into a dedicated check?
+ for where in build dest; do
+
+ case $where in
+ build)
+ build=./$test_string
+ dest=$ocwd/dest-$test_name
+ ;;
+ dest)
+ build=build-$test_name
+ # Also use $test_name in the definition of $dest, to avoid
+ # interferences among different tests in case $test_string
+ # is strangely munged (which is not unexpected, considering
+ # how tricky its characters are). With some shells, this
+ # has already happened (at least on OpenIndiana 11 and on
+ # Solaris 10).
+ dest=$ocwd/dest-$test_name/$test_string
+ mkdir "$build" || fatal_ "cannot create '$build'"
+ ;;
+ *)
+ fatal_ "invalid where '$where'"
+ ;;
+ esac
+
+ cd "$build" || fatal_ "cannot chdir into '$build'"
+
+ # Some make implementations eliminate leading and trailing whitespace
+ # from macros passed on the command line, and some eliminate leading
+ # whitespace from macros set from environment variables, so prepend
+ # './' and use the latter here.
+ r=ok
+ ../configure --prefix "/$test_string-prefix" \
+ && $MAKE all \
+ && DESTDIR="$dest" file="./$test_string" $MAKE test-inst \
+ || r='not ok'
+
+ description="$test_name in ${where}dir"
+ if expected_to_fail "$where" "$test_name"; then
+ directive=TODO
+ reason="long-standing limitation"
+ else
+ directive=
+ reason=
+ fi
+ # Test case outcome is here.
+ result_ "$r" -D "$directive" -r "$reason" -- "$description"
+
+ cd "$ocwd" || fatal_ "cannot chdir back to test directory"
+
+ # Remove subdirectories for tests that have passed, to avoid ending up
+ # with a too big test directory. This is especially important since
+ # some tests in this tests are expected to fail, and this will cause
+ # the test directory not to be removed when the script terminates.
+ if not am_keeping_testdirs && test "$r" = ok; then
+ rm_rf_ "$build" "$dest" || fatal_ "removing temporary subdirectory"
+ fi
+
+ : For shells with busted 'set -e'.
+
+ done # $instspc_action
+
+done # $test_name
+
+:
diff --git a/t/interp.sh b/t/interp.sh
new file mode 100644
index 000000000..992083812
--- /dev/null
+++ b/t/interp.sh
@@ -0,0 +1,38 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure variable interpolation works.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo
+xs = a.c b.c
+foo_SOURCES = c.c $(xs)
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+$FGREP ' a.$(OBJEXT)' Makefile.in
+$FGREP ' b.$(OBJEXT)' Makefile.in
+$FGREP ' c.$(OBJEXT)' Makefile.in
+
+:
diff --git a/t/interp2.sh b/t/interp2.sh
new file mode 100644
index 000000000..5b543f276
--- /dev/null
+++ b/t/interp2.sh
@@ -0,0 +1,37 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure variable interpolation doesn't break other
+# features. Report from Joel N. Weber, II.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PATH_X
+AC_PATH_XTRA
+END
+
+cat > Makefile.am << 'END'
+noinst_PROGRAMS = x
+x_SOURCES = x.c
+x_LDADD = $(X_EXTRA_LIBS)
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+:
diff --git a/t/java-check.sh b/t/java-check.sh
new file mode 100644
index 000000000..ae2ef54ed
--- /dev/null
+++ b/t/java-check.sh
@@ -0,0 +1,64 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that check_JAVA causes *.class files to be built only with
+# "make check", and not also with "make all".
+# See automake bug#8234.
+
+required=javac
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+check_JAVA = One.java Two.java
+END
+
+cat > One.java <<'END'
+class One { }
+END
+
+cat > Two.java <<'END'
+class Two { // Deliberately missing closing bracket.
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+inst=$(pwd)/_inst
+
+./configure --prefix="$inst"
+
+$MAKE
+ls | $EGREP '\.(class|stamp)$' && exit 1
+
+# Make Two.java compilable.
+echo '}' >> Two.java
+
+# "make check" should compile files in $(check_JAVA) ...
+$MAKE check
+ls -l # For debugging.
+test -f One.class
+test -f Two.class
+# ... but should *not* install them.
+$FGREP checkdir Makefile && exit 1
+$MAKE install
+test -d _inst && exit 1
+
+:
diff --git a/t/java-clean.sh b/t/java-clean.sh
new file mode 100644
index 000000000..1d82de801
--- /dev/null
+++ b/t/java-clean.sh
@@ -0,0 +1,66 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test cleaning of Java class files and timestamps.
+
+required=javac
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+javadir = $(datadir)/java
+
+java_JAVA = Class.java
+dist_java_JAVA = ClassDist.java
+nodist_java_JAVA = ClassNodist.java
+
+nobase_java_JAVA = ClassNobase.java
+nobase_dist_java_JAVA = ClassNobaseDist.java
+nobase_nodist_java_JAVA = ClassNobaseNodist.java
+END
+
+for base in '' Nobase; do
+ for dist in '' Dist Nodist; do
+ echo "class Class$base$dist {}" > Class$base$dist.java
+ done
+done
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+$MAKE
+ls -l
+test -f classjava.stamp
+for base in '' Nobase; do
+ for dist in '' Dist Nodist; do
+ test -f Class$base$dist.class
+ done
+done
+$MAKE clean
+find . -name '*.class' -o -name '*.stamp' | grep . && exit 1
+# We should not remove unrelated stamp files.
+echo timestamp > classjava2.stamp
+echo timestamp > classdist_java.stamp
+$MAKE clean
+test -f classjava2.stamp
+test -f classdist_java.stamp
+
+:
diff --git a/t/java-compile-install.sh b/t/java-compile-install.sh
new file mode 100644
index 000000000..4956aeee4
--- /dev/null
+++ b/t/java-compile-install.sh
@@ -0,0 +1,97 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test on compilation and installation of Java class files.
+
+required=javac
+. test-init.sh
+
+cat >>configure.ac <<'EOF'
+AC_OUTPUT
+EOF
+
+cat > Makefile.am << 'END'
+javadir = $(datadir)/java
+java_JAVA = Foo.java
+nobase_java_JAVA = Foo2.java
+nobase_dist_java_JAVA = Bar.java
+nodist_java_JAVA = Baz.java
+
+# Java files are not distributed by default, so we distribute
+# one "by hand" ...
+EXTRA_DIST = Foo.java
+# ... and make the other one generated.
+Foo2.java:
+ rm -f $@ $@-t
+ echo 'class bClass {}' > $@-t
+ chmod a-w $@-t && mv -f $@-t $@
+
+# Explicitly declared as 'nodist_', so generate it.
+Baz.java:
+ rm -f $@ $@-t
+ echo 'class Baz {}' > $@-t
+ echo 'class Baz2 {}' >> $@-t
+ chmod a-w $@-t && mv -f $@-t $@
+
+test:
+ ls -l $(srcdir) . ;: For debugging.
+ test -f $(srcdir)/Foo.java
+ test -f $(srcdir)/Bar.java
+ test -f Foo2.java
+ test -f Baz.java
+ test -f aClass.class
+ test -f bClass.class
+ test -f Zardoz.class
+ test -f Baz.class
+ test -f Baz2.class
+ test ! -r Foo.class
+ test ! -r Bar.class
+ test -f classjava.stamp
+
+test-install:
+ ls -l $(javadir) ;: For debugging.
+ test -f '$(javadir)/bClass.class'
+ test -f '$(javadir)/aClass.class'
+ test -f '$(javadir)/Zardoz.class'
+ test -f '$(javadir)/Baz.class'
+ test -f '$(javadir)/Baz2.class'
+ test ! -r '$(javadir)/Foo.class'
+ test ! -r '$(javadir)/Bar.class'
+ if find $(prefix) | grep '\.stamp$$'; then exit 1; else :; fi
+
+check-local: test
+installcheck-local: test-install
+
+.PHONY: test test-install
+
+DISTCLEANFILES = Baz.java Foo2.java
+END
+
+echo 'class aClass {}' > Foo.java
+echo 'class Zardoz {}' > Bar.java
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure --prefix="$(pwd)"/_inst
+$MAKE
+$MAKE test
+$MAKE install
+$MAKE test-install
+$MAKE distcheck
+
+:
diff --git a/t/java-compile-run-flat.sh b/t/java-compile-run-flat.sh
new file mode 100644
index 000000000..1f74a3c62
--- /dev/null
+++ b/t/java-compile-run-flat.sh
@@ -0,0 +1,241 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test on compilation and execution of Java class files.
+# Also meddle with wrapper scripts, as would be probably seen in a real
+# "UNIX-style" use case.
+# This test uses a "flat" setup for the source tree (i.e., everything in
+# the top-level directory), and forces the use of the old, non-parallel
+# testsuite driver. The sister test 'java-compile-run-nested.sh' do
+# similar checks with a more usual, "nested" setup, and using the older
+# 'serial-tests' driver.
+
+required='java javac'
+am_serial_tests=yes
+. test-init.sh
+
+echo "AC_SUBST([PATH_SEPARATOR], ['$PATH_SEPARATOR'])" >> configure.ac
+
+cat >> configure.ac <<'END'
+AC_SUBST([JAVA], [java])
+AC_CONFIG_SRCDIR([PkgLocation.jin])
+AC_CONFIG_FILES([PkgLocation.java:PkgLocation.jin])
+AC_OUTPUT
+END
+
+## TOP-LEVEL SETUP AND TARGETS ##
+
+cat > Makefile.am <<'END'
+EXTRA_DIST = # Will be updated later.
+
+test-built:
+ ls -l $(srcdir) ;: For debugging.
+ test $(srcdir) = . || ls -l . ;: Likewise.
+ test -f $(srcdir)/Main.java
+ test -f $(srcdir)/HelloStream.java
+ test -f $(srcdir)/PkgLocation.jin
+ test -f PkgLocation.java
+ test -f HelloStream.class
+ test -f PkgLocation.class
+ test -f Main.class
+ test -f classjava.stamp
+
+test-installed:
+ ls -l $(javadir) ;: For debugging.
+ test -f $(javadir)/HelloStream.class
+ test -f $(javadir)/PkgLocation.class
+ test -f $(javadir)/Main.class
+ if find $(prefix) | grep '\.stamp$$'; then exit 1; else :; fi
+
+run-installed:
+ jprog_doing_installcheck=yes $(MAKE) $(AM_MAKEFLAGS) check
+
+check-local: test-built
+installcheck-local: test-installed run-installed
+
+.PHONY: test-built test-installed run-installed
+END
+
+## WRAPPER SCRIPT ##
+
+cat >> Makefile.am <<'END'
+bin_SCRIPTS = jprog
+
+edit_script = sed -e 's|[@]JAVA@|$(JAVA)|g' \
+ -e 's|[@]javadir@|$(javadir)|g' \
+ -e 's|[@]SHELL@|$(SHELL)|g' \
+ -e 's|[@]PATH_SEPARATOR@|$(PATH_SEPARATOR)|g'
+
+jprog: jprog.sh
+ rm -f $@ $@-t
+ $(edit_script) `test -f '$@.sh' || echo $(srcdir)/`$@.sh >$@-t
+ chmod a-w $@-t && chmod a+x $@-t && mv -f $@-t $@
+ sed 's/^/ | /' $@ ;: for debugging.
+
+EXTRA_DIST += jprog.sh
+CLEANFILES = jprog
+END
+
+cat > jprog.sh <<'END'
+#!@SHELL@
+CLASSPATH=${jprog_classpath-'@javadir@'}${CLASSPATH+"@PATH_SEPARATOR@$CLASSPATH"}
+export CLASSPATH
+case $# in
+ 0) exec @JAVA@ Main;;
+ *) exec @JAVA@ Main "$@";;
+esac
+END
+
+## JAVA SOURCES ##
+
+cat >> Makefile.am <<'END'
+javadir = $(pkgdatadir)/java
+
+dist_java_JAVA = Main.java HelloStream.java
+nodist_java_JAVA = PkgLocation.java
+END
+
+cat > PkgLocation.jin <<'END'
+public class PkgLocation {
+ public static String prefix() {
+ return new String("@prefix@");
+ }
+}
+END
+
+cat > Main.java <<'END'
+public class Main {
+ public static void main(String[] args) {
+ for (int i = 0; i < args.length; i++) {
+ if (args[i].equals("--print-prefix")) {
+ System.out.println(PkgLocation.prefix());
+ } else if (args[i].equals("--hello-stdout")) {
+ HelloStream.to(System.out);
+ } else if (args[i].equals("--hello-stderr")) {
+ HelloStream.to(System.err);
+ } else {
+ System.err.println("jprog: invalid option '" + args[i] +
+ "'");
+ System.exit(2);
+ }
+ }
+ System.exit(0);
+ }
+}
+END
+
+cat > HelloStream.java <<'END'
+import java.io.PrintStream;
+class HelloStream {
+ public static void to(PrintStream stream) {
+ stream.println("Hello, Stream!");
+ }
+}
+END
+
+## TESTS ##
+
+cat >> Makefile.am <<'END'
+## We must use 'TESTS_ENVIRONMENT', not 'AM_TESTS_ENVIRONMENT',
+## because the latter is not hnoured by the old serial test
+## harness.
+TESTS_ENVIRONMENT = \
+ if test x"$$jprog_doing_installcheck" != x"yes"; then \
+ jprog_classpath='$(abs_top_builddir):$(abs_top_srcdir)'; \
+ export jprog_classpath; \
+ PATH='$(abs_top_builddir)$(PATH_SEPARATOR)'$$PATH; \
+ export PATH; \
+ else \
+ unset jprog_classpath || :; \
+ PATH='$(prefix)/bin$(PATH_SEPARATOR)'$$PATH; \
+ export PATH; \
+ fi; \
+ config_time_prefix='@prefix@'; export config_time_prefix;
+
+TESTS = \
+ simple.test \
+ prefix.test \
+ stdout.test \
+ stderr.test \
+ badarg.test
+
+XFAIL_TESTS = badarg.test
+
+EXTRA_DIST += $(TESTS)
+END
+
+cat > simple.test <<'END'
+#!/bin/sh
+jprog
+END
+
+cat > prefix.test <<'END'
+#!/bin/sh
+jprefix=`jprog --print-prefix` || exit 1
+echo "$0: exp prefix: $config_time_prefix"
+echo "$0: got prefix: $jprefix"
+test x"$jprefix" = x"$config_time_prefix"
+END
+
+cat > stdout.test <<'END'
+#!/bin/sh
+rc=0
+jprog --hello-stdout >stdout.out 2>stdout.err || { echo \$?=$?; rc=1; }
+sed 's/^/out:/' <stdout.out # For debugging.
+sed 's/^/err:/' <stdout.err >&2 # Likewise.
+test -s stdout.err && rc=1
+test "`cat stdout.out`" = 'Hello, Stream!' || rc=1
+rm -f stdout.out stdout.err || rc=1
+exit $rc
+END
+
+cat > stderr.test <<'END'
+#!/bin/sh
+rc=0
+jprog --hello-stderr >stderr.out 2>stderr.err || { echo \$?=$?; rc=1; }
+sed 's/^/out:/' <stderr.out # For debugging.
+sed 's/^/err:/' <stderr.err >&2 # Likewise.
+test -s stderr.out && rc=1
+test "`cat stderr.err`" = 'Hello, Stream!' || rc=1
+rm -f stderr.out stderr.err || rc=1
+exit $rc
+END
+
+cat > badarg.test <<'END'
+#!/bin/sh
+jprog --bad-argument
+END
+
+chmod a+x *.test
+
+## DO CHECKS ##
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+# To have the parallel testsuite more verbose.
+VERBOSE=yes; export VERBOSE
+
+./configure --prefix="$(pwd)/_inst"
+cat PkgLocation.java # For debugging.
+$MAKE check
+$MAKE install
+$MAKE test-installed
+$MAKE run-installed
+$MAKE distcheck
+
+:
diff --git a/t/java-compile-run-nested.sh b/t/java-compile-run-nested.sh
new file mode 100644
index 000000000..788b584fe
--- /dev/null
+++ b/t/java-compile-run-nested.sh
@@ -0,0 +1,250 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test on compilation and execution of Java class files.
+# Also meddle with wrapper scripts, as would be probably seen in a real
+# "UNIX-style" use case.
+# This test uses a typical "nested" source tree setup (i.e., different
+# components/aspects are separated into different subdirectories), and
+# uses the parallel testsuite driver.
+# The sister test 'java-compile-run-flat.sh' do similar checks with
+# a "flat" setup (i.e., everything in the top-level directory), and
+# forcing the use of the older 'serial-tests' driver.
+
+required='java javac'
+. test-init.sh
+
+echo "AC_SUBST([PATH_SEPARATOR], ['$PATH_SEPARATOR'])" >> configure.ac
+
+cat >> configure.ac <<'END'
+AC_SUBST([JAVA], [java])
+AC_CONFIG_SRCDIR([jprog/PkgLocation.jin])
+AC_SUBST([jprogdatadir], ['${pkgdatadir}'])
+AC_SUBST([jprogclassdir], ['${jprogdatadir}/jprog'])
+AC_CONFIG_FILES([jprog/PkgLocation.java:jprog/PkgLocation.jin])
+AC_CONFIG_FILES([jprog/Makefile bin/Makefile tests/Makefile])
+AC_OUTPUT
+END
+
+## TOP-LEVEL SETUP AND TARGETS ##
+
+cat > Makefile.am <<'END'
+SUBDIRS = bin jprog tests
+
+test-built:
+ ls -l $(srcdir)/* ;: For debugging.
+ test $(srcdir) = . || ls -l * ;: Likewise.
+ test -f $(srcdir)/jprog/Main.java
+ test -f $(srcdir)/jprog/HelloStream.java
+ test -f $(srcdir)/jprog/PkgLocation.jin
+ test -f jprog/PkgLocation.java
+ test -f jprog/HelloStream.class
+ test -f jprog/Main.class
+ test -f jprog/PkgLocation.class
+ test -f jprog/classjprogclass.stamp
+
+test-installed:
+ ls -l $(jprogclassdir) ;: For debugging.
+ test -f $(jprogclassdir)/HelloStream.class
+ test -f $(jprogclassdir)/Main.class
+ test -f $(jprogclassdir)/PkgLocation.class
+ if find $(prefix) | grep '\.stamp$$'; then exit 1; else :; fi
+
+run-installed:
+ jprog_doing_installcheck=yes $(MAKE) $(AM_MAKEFLAGS) check
+
+check-local: test-built
+installcheck-local: test-installed run-installed
+
+.PHONY: test-built test-installed run-installed
+END
+
+## WRAPPER SCRIPT ##
+
+mkdir bin
+
+cat > bin/Makefile.am <<'END'
+bin_SCRIPTS = jprog
+
+edit_script = sed -e 's|[@]JAVA@|$(JAVA)|g' \
+ -e 's|[@]jprogdatadir@|$(jprogdatadir)|g' \
+ -e 's|[@]SHELL@|$(SHELL)|g' \
+ -e 's|[@]PATH_SEPARATOR@|$(PATH_SEPARATOR)|g'
+
+jprog: jprog.sh
+ rm -f $@ $@-t
+ $(edit_script) `test -f '$@.sh' || echo $(srcdir)/`$@.sh >$@-t
+ chmod a-w $@-t && chmod a+x $@-t && mv -f $@-t $@
+ sed 's/^/ | /' $@ ;: for debugging.
+
+EXTRA_DIST = jprog.sh
+CLEANFILES = jprog
+END
+
+cat > bin/jprog.sh <<'END'
+#!@SHELL@
+CLASSPATH=${jprog_classpath-'@jprogdatadir@'}${CLASSPATH+"@PATH_SEPARATOR@$CLASSPATH"}
+export CLASSPATH
+case $# in
+ 0) exec @JAVA@ jprog.Main;;
+ *) exec @JAVA@ jprog.Main "$@";;
+esac
+END
+
+## JAVA SOURCES ##
+
+mkdir jprog
+
+cat > jprog/Makefile.am <<'END'
+dist_jprogclass_JAVA = Main.java HelloStream.java
+nodist_jprogclass_JAVA = PkgLocation.java
+END
+
+cat > jprog/PkgLocation.jin <<'END'
+package jprog;
+public class PkgLocation {
+ public static String prefix() {
+ return new String("@prefix@");
+ }
+}
+END
+
+cat > jprog/Main.java <<'END'
+package jprog;
+import jprog.PkgLocation;
+import jprog.HelloStream;
+public class Main {
+ public static void main(String[] args) {
+ for (int i = 0; i < args.length; i++) {
+ if (args[i].equals("--print-prefix")) {
+ System.out.println(PkgLocation.prefix());
+ } else if (args[i].equals("--hello-stdout")) {
+ HelloStream.to(System.out);
+ } else if (args[i].equals("--hello-stderr")) {
+ HelloStream.to(System.err);
+ } else {
+ System.err.println("jprog: invalid option '" + args[i] +
+ "'");
+ System.exit(2);
+ }
+ }
+ System.exit(0);
+ }
+}
+END
+
+cat > jprog/HelloStream.java <<'END'
+package jprog;
+import java.io.PrintStream;
+class HelloStream {
+ public static void to(PrintStream stream) {
+ stream.println("Hello, Stream!");
+ }
+}
+END
+
+## TESTS ##
+
+mkdir tests
+
+cat > tests/Makefile.am <<'END'
+AM_TESTS_ENVIRONMENT = \
+ if test x"$$jprog_doing_installcheck" != x"yes"; then \
+ jprog_classpath='$(abs_top_builddir):$(abs_top_srcdir)'; \
+ export jprog_classpath; \
+ PATH='$(abs_top_builddir)/bin$(PATH_SEPARATOR)'$$PATH; \
+ export PATH; \
+ else \
+ unset jprog_classpath || :; \
+ PATH='$(prefix)/bin$(PATH_SEPARATOR)'$$PATH; \
+ export PATH; \
+ fi; \
+ config_time_prefix='@prefix@'; export config_time_prefix;
+
+TESTS = \
+ simple.test \
+ prefix.test \
+ stdout.test \
+ stderr.test \
+ badarg.test
+
+XFAIL_TESTS = badarg.test
+
+EXTRA_DIST = $(TESTS)
+END
+
+cat > tests/simple.test <<'END'
+#!/bin/sh
+jprog
+END
+
+cat > tests/prefix.test <<'END'
+#!/bin/sh
+jprefix=`jprog --print-prefix` || exit 1
+echo "$0: exp prefix: $config_time_prefix"
+echo "$0: got prefix: $jprefix"
+test x"$jprefix" = x"$config_time_prefix"
+END
+
+cat > tests/stdout.test <<'END'
+#!/bin/sh
+rc=0
+jprog --hello-stdout >stdout.out 2>stdout.err || { echo \$?=$?; rc=1; }
+sed 's/^/out:/' <stdout.out # For debugging.
+sed 's/^/err:/' <stdout.err >&2 # Likewise.
+test -s stdout.err && rc=1
+test "`cat stdout.out`" = 'Hello, Stream!' || rc=1
+rm -f stdout.out stdout.err || rc=1
+exit $rc
+END
+
+cat > tests/stderr.test <<'END'
+#!/bin/sh
+rc=0
+jprog --hello-stderr >stderr.out 2>stderr.err || { echo \$?=$?; rc=1; }
+sed 's/^/out:/' <stderr.out # For debugging.
+sed 's/^/err:/' <stderr.err >&2 # Likewise.
+test -s stderr.out && rc=1
+test "`cat stderr.err`" = 'Hello, Stream!' || rc=1
+rm -f stderr.out stderr.err || rc=1
+exit $rc
+END
+
+cat > tests/badarg.test <<'END'
+#!/bin/sh
+jprog --bad-argument
+END
+
+chmod a+x tests/*.test
+
+## DO CHECKS ##
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+# To have the parallel testsuite more verbose.
+VERBOSE=yes; export VERBOSE
+
+./configure --prefix="$(pwd)/_inst"
+cat jprog/PkgLocation.java # For debugging.
+$MAKE check
+$MAKE install
+$MAKE test-installed
+$MAKE run-installed
+$MAKE distcheck
+
+:
diff --git a/t/java-empty-classpath.sh b/t/java-empty-classpath.sh
new file mode 100644
index 000000000..68f1ce4be
--- /dev/null
+++ b/t/java-empty-classpath.sh
@@ -0,0 +1,88 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Java compilation works also when CLASSPATH is unset or empty at
+# compilation time. See automake bug#9306.
+
+required=javac
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_CONFIG_SRCDIR([org/gnu/bug/Library.java])
+AC_CONFIG_FILES([
+ org/Makefile
+ org/gnu/Makefile
+ org/gnu/bug/Makefile
+])
+AC_OUTPUT
+END
+
+mkdir org org/gnu org/gnu/bug
+cat > Makefile.am <<END
+CLEANFILES = *.class
+SUBDIRS = org
+END
+echo SUBDIRS = gnu > org/Makefile.am
+echo SUBDIRS = bug > org/gnu/Makefile.am
+cat > org/gnu/bug/Makefile.am <<'END'
+JAVAROOT = ../../..
+dist_noinst_JAVA = Library.java Application.java
+END
+
+cat > org/gnu/bug/Library.java <<'END'
+package org.gnu.bug;
+public class Library
+{
+ public Library ()
+ {
+ // Nothing to do.
+ }
+ public static void doSomethingUseful (String arg)
+ {
+ System.out.println (arg);
+ }
+}
+END
+
+cat > org/gnu/bug/Application.java <<'END'
+import org.gnu.bug.*;
+public class Application
+{
+ public static void main (String args[])
+ {
+ Library lib = new Library ();
+ lib.doSomethingUseful ("PLUGH");
+ }
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+
+unset CLASSPATH
+$MAKE
+$MAKE clean
+
+CLASSPATH=''; export CLASSPATH
+$MAKE
+$MAKE clean
+
+unset CLASSPATH
+$MAKE distcheck
+
+:
diff --git a/t/java-extra.sh b/t/java-extra.sh
new file mode 100644
index 000000000..22b07d012
--- /dev/null
+++ b/t/java-extra.sh
@@ -0,0 +1,73 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check use of EXTRA with the JAVA primary. Also test interaction
+# of JAVA with conditionals (it's natural to test it here, since
+# EXTRA_JAVA exists mostly for ensuring interoperation with Automake
+# conditionals).
+
+required=javac
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_CONDITIONAL([COND], [test x"$cond" = x"yes"])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+javadir = $(pkgdatadir)/java
+
+EXTRA_JAVA = Class1.java Class2.java Class3.java
+
+java_JAVA = Class1.java
+
+if COND
+java_JAVA += Class2.java
+else !COND
+java_JAVA += Class3.java
+endif !COND
+
+Class3.java: Makefile
+ echo 'class Class3 {}' > $@
+CLEANFILES = Class3.java
+END
+
+echo "class Class1 {}" > Class1.java
+echo "class Class2 {}" > Class2.java
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure cond=yes
+$MAKE
+ls -l
+test -f Class1.class
+test -f Class2.class
+test ! -e Class3.class
+test ! -e Class3.java
+
+$MAKE distclean
+
+./configure cond=no
+$MAKE
+ls -l
+test -f Class1.class
+test ! -e Class2.class
+test -f Class3.class
+test -f Class3.java
+
+:
diff --git a/t/java-mix.sh b/t/java-mix.sh
new file mode 100644
index 000000000..011c08b29
--- /dev/null
+++ b/t/java-mix.sh
@@ -0,0 +1,68 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that the JAVA primary can be used freely in the same Makefile.am
+# with proper combinations of the 'dist_', 'nodist_' and 'nobase_'
+# modifiers. Also check that '.java' files are not distributed by
+# default.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+# This test does not require compilation of *.java files.
+JAVAC = false
+javadir = $(prefix)
+
+java_JAVA = Class.java
+dist_java_JAVA = ClassDist.java
+nodist_java_JAVA = ClassNodist.java
+
+nobase_java_JAVA = ClassNobase.java
+nobase_dist_java_JAVA = ClassNobaseDist.java
+nobase_nodist_java_JAVA = ClassNobaseNodist.java
+
+Class.java ClassNodist.java ClassNobase.java ClassNobaseNodist.java:
+ @echo '$@ should not be generated!' >&2; exit 1
+END
+
+: > ClassDist.java
+: > ClassNobaseDist.java
+
+$ACLOCAL
+$AUTOCONF
+# Automake used to display non-fatal warnings with this test, but
+# they were unexpected, so we want to consider them as failures in
+# this test.
+$AUTOMAKE 2>stderr || { cat stderr >&2; exit 1; }
+cat stderr >&2
+test ! -s stderr
+
+./configure
+
+$MAKE distdir
+ls -l $distdir # For debugging.
+test ! -e $distdir/Class.java
+test -f $distdir/ClassDist.java
+test ! -e $distdir/ClassNobase.java
+test -f $distdir/ClassNobaseDist.java
+test ! -e $distdir/ClassNodist.java
+test ! -e $distdir/ClassNobaseNodist.java
+
+:
diff --git a/t/java-no-duplicate.sh b/t/java-no-duplicate.sh
new file mode 100644
index 000000000..cac0c20e2
--- /dev/null
+++ b/t/java-no-duplicate.sh
@@ -0,0 +1,45 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test that some Java-related variables and rules are not repeatedly
+# defined.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+javadir = $(datadir)/java
+java_JAVA = a.java
+dist_java_JAVA = b.java
+nodist_java_JAVA = c.java
+nobase_java_JAVA = d.java
+nobase_dist_java_JAVA = e.java
+nobase_nodist_java_JAVA = f.java
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+$EGREP -i '\.stamp|\.class|java|classpath' Makefile.in # For debugging.
+
+for var in JAVAC JAVAROOT CLASSPATH_ENV am__java_sources; do
+ grep "^$var =" Makefile.in
+ test $(grep -c "^[$sp$tab]*$var[$sp$tab]*=" Makefile.in) -eq 1
+done
+
+grep '^classjava\.stamp:' Makefile.in
+test $(grep -c "class.*java.*\.stamp.*:" Makefile.in) -eq 1
+
+:
diff --git a/t/java-nobase.sh b/t/java-nobase.sh
new file mode 100644
index 000000000..8673675a1
--- /dev/null
+++ b/t/java-nobase.sh
@@ -0,0 +1,65 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test support of 'nobase_' with the 'JAVA' primary.
+
+required=javac
+. test-init.sh
+
+cat >>configure.ac <<'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+javadir = $(datadir)/java
+nobase_java_JAVA = sub/subsub/Foo.java
+nobase_dist_java_JAVA = sub/Bar.java
+nobase_nodist_java_JAVA = sub2/Baz.java
+
+# Java files are not distributed by default.
+EXTRA_DIST = sub/subsub/Foo.java
+
+sub2/Baz.java:
+ rm -f $@ $@-t
+ test -d sub2 || mkdir sub2
+ echo 'class Baz {}' > $@-t
+ chmod a-w $@-t && mv -f $@-t $@
+
+.PHONY: test-install
+test-install:
+ find $(prefix) ;: For debugging.
+ test -f $(javadir)/sub/subsub/Foo.class
+ test -f $(javadir)/sub/Bar.class
+ test -f $(javadir)/sub2/Baz.class
+installcheck-local: test-install
+DISTCLEANFILES = sub2/Baz.java
+END
+
+mkdir sub sub/subsub
+echo 'class Foo {}' > sub/subsub/Foo.java
+echo 'class Bar {}' > sub/Bar.java
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure --prefix="$(pwd)"/_inst
+$MAKE check
+$MAKE install
+$MAKE test-install
+$MAKE distcheck
+
+:
diff --git a/t/java-noinst.sh b/t/java-noinst.sh
new file mode 100644
index 000000000..d0075b158
--- /dev/null
+++ b/t/java-noinst.sh
@@ -0,0 +1,55 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that noinst_JAVA causes generated *.class files not to
+# be installed.
+
+required=javac
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+noinst_JAVA = 1.java
+dist_noinst_JAVA = 2.java
+nodist_noinst_JAVA = 3.java
+nobase_noinst_JAVA = 4.java
+nobase_dist_noinst_JAVA = 5.java
+nobase_nodist_noinst_JAVA = 6.java
+END
+
+for i in 1 2 3 4 5 6; do
+ echo "class Class$i {}" > $i.java
+done
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+./configure --prefix="$(pwd)/_inst"
+
+$MAKE
+ls -l
+for i in 1 2 3 4 5 6; do
+ test -f Class$i.class
+done
+
+$MAKE install
+test -d _inst && { ls -l _inst; exit 1; }
+
+:
diff --git a/t/java-rebuild.sh b/t/java-rebuild.sh
new file mode 100644
index 000000000..3f10a6499
--- /dev/null
+++ b/t/java-rebuild.sh
@@ -0,0 +1,124 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test rebuild rules for Java class files.
+
+required='javac'
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+AM_JAVACFLAGS = -verbose
+foodir = $(datadir)/java
+foo_JAVA = a.java
+dist_foo_JAVA = d.java
+nodist_foo_JAVA = n.java
+nobase_foo_JAVA = Nobase.java
+nobase_dist_foo_JAVA = NobaseDist.java
+nobase_nodist_foo_JAVA = NobaseNoDist.java
+END
+
+echo 'class _x {}' > a.java
+echo 'class x_ {}' > d.java
+echo 'class a {} class d {}' > n.java
+echo 'class Nobase_Foo {} class Nobase_Bar {}' > Nobase.java
+echo 'class NobaseDist {}' > NobaseDist.java
+echo 'class NobaseNoDist {}' > NobaseNoDist.java
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+all_classes='_x x_ a d Nobase_Foo Nobase_Bar NobaseDist NobaseNoDist'
+
+for vpath in : false; do
+
+ if $vpath; then
+ srcdir=..
+ mkdir build
+ cd build
+ else
+ srcdir=.
+ fi
+
+ $srcdir/configure
+ $MAKE
+ ls -l # For debugging.
+
+ # Sanity check.
+ test -f classfoo.stamp
+ for cls in $all_classes; do
+ test -f $cls.class
+ done
+
+ # When the stampfile is removed, all the *.class files should
+ # be considered out-of-date.
+ echo timestamp > older
+ $sleep
+ rm -f classfoo.stamp
+ $MAKE
+ for cls in $all_classes; do
+ is_newest $cls.class older
+ done
+
+ # When only a java file is modified, only the *.class files derived from
+ # it should be updated.
+ # The strings we loop on here have the following format:
+ # "JAVA-FILES-TO-BE-TOUCHED -- CLASSES-THAT-SHOULD-BE-UPDATED"
+ for args in \
+ 'a -- _x' \
+ 'd -- x_' \
+ 'n -- a d' \
+ 'a d Nobase -- _x x_ Nobase_Foo Nobase_Bar' \
+ 'n NobaseDist -- a d NobaseDist' \
+ 'd NobaseNoDist -- x_ NobaseNoDist' \
+ "a d n Nobase NobaseDist NobaseNoDist -- $all_classes" \
+ ; do
+ set $args
+ touched_javas=
+ while test $# -gt 0; do
+ if test x"$1" = x"--"; then
+ shift
+ break
+ else
+ touched_javas="$touched_javas $1"
+ shift
+ fi
+ done
+ updated_classes=$*
+ echo timestamp > older
+ $sleep
+ for j in $touched_javas; do
+ touch $srcdir/$j.java
+ done
+ $MAKE
+ is_newest classfoo.stamp older
+ for cls in $all_classes; do
+ case " $updated_classes " in
+ *" $cls "*) is_newest $cls.class older;;
+ *) is_newest older $cls.class;;
+ esac
+ done
+ done # $args ...
+
+ cd $srcdir
+
+done # $vpath ...
+
+:
diff --git a/t/java-sources.sh b/t/java-sources.sh
new file mode 100644
index 000000000..d7dbcb2ca
--- /dev/null
+++ b/t/java-sources.sh
@@ -0,0 +1,65 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test definition of automake-generated private Makefile variable
+# '$(am__java_sources)'.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+foodir = $(prefix)
+
+foo_JAVA = a.java
+dist_foo_JAVA = b.java
+nodist_foo_JAVA = c.java
+nobase_foo_JAVA = d.java
+nobase_dist_foo_JAVA = e.java
+nobase_nodist_foo_JAVA = f.java
+
+.PHONY: debug
+debug:
+ @echo 'am__java_sources: "$(am__java_sources)"'
+got:
+ @lst='$(am__java_sources)'; \
+ for f in $$lst; do echo $$f; done | sort > $@
+END
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+cat > exp << 'END'
+a.java
+b.java
+c.java
+d.java
+e.java
+f.java
+END
+
+./configure
+$MAKE debug
+$MAKE got
+
+cat got
+cat exp
+diff exp got
+
+:
diff --git a/t/java-uninstall.sh b/t/java-uninstall.sh
new file mode 100644
index 000000000..3e79050eb
--- /dev/null
+++ b/t/java-uninstall.sh
@@ -0,0 +1,97 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check uninstallation of Java class files.
+
+required=javac
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+javadir = $(prefix)/java
+java_JAVA = Foo.java
+nobase_java_JAVA = Foo2.java
+nobase_dist_java_JAVA = Bar.java
+nodist_java_JAVA = Baz.java
+
+# Java files are not distributed by default, so we distribute
+# one "by hand" ...
+EXTRA_DIST = Foo.java
+# ... and make the other one generated.
+Foo2.java:
+ rm -f $@ $@-t
+ echo 'class bClass {}' > $@-t
+ chmod a-w $@-t && mv -f $@-t $@
+
+# Explicitly declared as 'nodist_', so generate it.
+Baz.java:
+ rm -f $@ $@-t
+ echo 'class Baz {}' > $@-t
+ echo 'class Baz2 {}' >> $@-t
+ chmod a-w $@-t && mv -f $@-t $@
+
+DISTCLEANFILES = Baz.java Foo2.java
+END
+
+echo 'class aClass {}' > Foo.java
+echo 'class Zardoz {}' > Bar.java
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure --prefix="$(pwd)"/_inst
+javadir=_inst/java
+
+check_uninstallation()
+{
+ test ! -e $javadir/aClass.class
+ test ! -e $javadir/bClass.class
+ test ! -e $javadir/Zardoz.class
+ test ! -e $javadir/Baz.class
+ test ! -e $javadir/Baz2.class
+ test -f $javadir/Foo.class
+ test -f $javadir/Bar.class
+ test -f $javadir/xClass.class
+}
+
+$MAKE
+ls -l
+$MAKE install
+: > $javadir/Foo.class
+: > $javadir/Bar.class
+: > $javadir/xClass.class
+ls -l $javadir
+$MAKE uninstall
+ls -l $javadir
+check_uninstallation
+
+# FIXME: "make uninstall" should continue to work also after "make clean",
+# but currently this doesn't happen. See automake bug#8540.
+$MAKE install
+ls -l $javadir
+$MAKE clean
+ls -l
+$MAKE uninstall
+ls -l $javadir
+#check_uninstallation
+
+$MAKE distcheck
+
+:
diff --git a/t/java.sh b/t/java.sh
new file mode 100644
index 000000000..6fad13bab
--- /dev/null
+++ b/t/java.sh
@@ -0,0 +1,45 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Minimal test of Java functionality.
+
+required=javac
+. test-init.sh
+
+cat >>configure.ac <<'EOF'
+AC_OUTPUT
+EOF
+
+cat > Makefile.am << 'END'
+javadir = $(datadir)/java
+dist_java_JAVA = a.java b.java
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+$EGREP '\.stamp|class' Makefile.in # For debugging.
+grep '^all[-a-z]*:.*classjava\.stamp' Makefile.in
+test $(grep -c '^all[-a-z]*:.*classjava\.stamp' Makefile.in) -eq 1
+
+echo 'class a { }' > a.java
+echo 'class b { }' > b.java
+
+./configure
+$MAKE distcheck
+
+:
diff --git a/t/java2.sh b/t/java2.sh
new file mode 100644
index 000000000..626ad6eaa
--- /dev/null
+++ b/t/java2.sh
@@ -0,0 +1,47 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that Java rules doesn't attempt to run javac when there is
+# no classes to compile.
+# Report from Braden McDaniel.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_CONDITIONAL(WITH_JDK, false)
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+JAVAC = false
+JAVAROOT = $(top_builddir)/java
+
+JAVA_FILES = MyClass1.java
+
+if WITH_JDK
+noinst_JAVA = $(JAVA_FILES)
+endif
+
+EXTRA_DIST = $(JAVA_FILES)
+END
+
+: >MyClass1.java
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+$MAKE
diff --git a/t/java3.sh b/t/java3.sh
new file mode 100644
index 000000000..b7d1f1968
--- /dev/null
+++ b/t/java3.sh
@@ -0,0 +1,56 @@
+#! /bin/sh
+# Copyright (C) 2004-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that Java rules don't attempt to compile or install
+# *.java files when there are none.
+# Report from Johannes Nicolai (PR/441).
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_CONDITIONAL([WHO_CARES], [false])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+if WHO_CARES
+JAVA_FILES = MyClass1.java
+endif
+
+javadir = $(prefix)/java
+java_JAVA = $(JAVA_FILES)
+END
+
+cat > MyClass1.java << 'END'
+class MyClass1 { // Deliberately missing right curly bracket.
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure --prefix="$(pwd)/_inst"
+$MAKE
+$MAKE install
+ls -l .
+find . -name '*.class' | grep . && exit 1
+# If we have nothing to install, we shouldn't create any installation
+# directory. Related to automake bug#11030.
+test ! -e _inst
+$MAKE uninstall
+$MAKE distcheck
+
+:
diff --git a/t/javadir-undefined.sh b/t/javadir-undefined.sh
new file mode 100644
index 000000000..e5285470f
--- /dev/null
+++ b/t/javadir-undefined.sh
@@ -0,0 +1,35 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Use of JAVA primary should not allow the use of the 'java_' prefix
+# when $(javadir) is undefined. Otherwise, we could silently end up
+# with a broken Makefile.in (where "make install" doesn't install
+# the *.class files).
+# See automake bug#8461.
+
+. test-init.sh
+
+$ACLOCAL
+
+echo java_JAVA = a.java > Makefile.am
+AUTOMAKE_fails
+grep '^Makefile\.am:1:.*java_JAVA.*javadir.* undefined' stderr
+$EGREP '(uninitialized|line) ' stderr && exit 1
+
+echo javadir = a-dummy-value >> Makefile.am
+$AUTOMAKE
+
+:
diff --git a/t/javaflags.sh b/t/javaflags.sh
new file mode 100644
index 000000000..1d8e0b7ae
--- /dev/null
+++ b/t/javaflags.sh
@@ -0,0 +1,56 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check support for $(JAVACFLAGS) and $(AM_JAVACFLAGS).
+
+. test-init.sh
+
+cat > fake-javac <<'END'
+#!/bin/sh
+echo "$*" > javaflags.list
+END
+chmod a+x fake-javac
+
+cat >> configure.ac <<'END'
+AC_PROG_CC
+# Simulate presence of the java compiler using our fake-javac script.
+AC_SUBST([JAVAC], ['$(abs_top_srcdir)'/fake-javac])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+foodir = $(prefix)
+foo_JAVA = bar.java
+AM_JAVACFLAGS = __am_flags__
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '\$(JAVACFLAGS).*\$(AM_JAVACFLAGS)' Makefile.in && exit 1
+
+: > bar.java
+
+$AUTOCONF
+./configure
+run_make JAVACFLAGS=__user_flags__
+
+ls -l
+
+cat javaflags.list
+grep '__am_flags__.*__user_flags__' javaflags.list
+
+:
diff --git a/t/javaprim.sh b/t/javaprim.sh
new file mode 100644
index 000000000..857e41e8f
--- /dev/null
+++ b/t/javaprim.sh
@@ -0,0 +1,36 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure JAVA variable can be defined by AC_SUBST.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_SUBST([JAVA])
+END
+
+cat > Makefile.am << 'END'
+javadir = $(datadir)/java
+java_JAVA = a.java b.java c.java
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+grep -i java Makefile.in # For debugging.
+grep '^JAVA = *@JAVA@ *$' Makefile.in
+
+:
diff --git a/t/javasubst.sh b/t/javasubst.sh
new file mode 100644
index 000000000..c761a8fae
--- /dev/null
+++ b/t/javasubst.sh
@@ -0,0 +1,36 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure redefining JAVAC with AC_SUBST works.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_SUBST([JAVAC])
+END
+
+cat > Makefile.am << 'END'
+javadir = $(datadir)/java
+java_JAVA = a.java b.java c.java
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+grep -i java Makefile.in # For debugging.
+grep '^JAVAC = *@JAVAC@ *$' Makefile.in
+
+:
diff --git a/t/ldadd.sh b/t/ldadd.sh
new file mode 100644
index 000000000..3083fc381
--- /dev/null
+++ b/t/ldadd.sh
@@ -0,0 +1,46 @@
+#! /bin/sh
+# Copyright (C) 1997-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check to make sure incorrect LDADD usage is diagnosed.
+
+required=libtool
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_LIBTOOL
+AC_SUBST([LTLIBOBJS], [q.lo])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+lib_LTLIBRARIES = libtu.la
+libtu_la_SOURCES = foo.c
+libtu_la_LDADD = @LTLIBOBJS@
+END
+
+: > ltconfig
+: > ltmain.sh
+: > config.guess
+: > config.sub
+: > q.c
+
+$ACLOCAL || exit 1
+AUTOMAKE_fails -Wno-extra-portability
+grep "libtu_la_LDADD" stderr
+grep " use 'libtu_la_LIBADD'" stderr
+
+:
diff --git a/t/ldflags.sh b/t/ldflags.sh
new file mode 100644
index 000000000..68dc553e9
--- /dev/null
+++ b/t/ldflags.sh
@@ -0,0 +1,50 @@
+#! /bin/sh
+# Copyright (C) 2000-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check for LDFLAGS in conditional.
+# PR 77.
+
+required=libtool
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_LIBTOOL
+AC_SUBST([LTLIBOBJS], [q.o])
+AM_CONDITIONAL([USE_SWIG], [:])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+if USE_SWIG
+lib_LTLIBRARIES = libtu.la
+libtu_la_SOURCES = foo.c
+libtu_la_LDFLAGS = -module
+endif
+END
+
+: > ltconfig
+: > ltmain.sh
+: > ar-lib
+: > config.guess
+: > config.sub
+: > q.c
+
+$ACLOCAL
+$AUTOMAKE
+
+:
diff --git a/t/lex-clean-cxx.sh b/t/lex-clean-cxx.sh
new file mode 100644
index 000000000..10749dcc4
--- /dev/null
+++ b/t/lex-clean-cxx.sh
@@ -0,0 +1,126 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that C++ source files derived from non-distributed Lex sources
+# are cleaned by "make clean", while C++ source files derived from
+# distributed Lex sources are cleaned by "make maintainer-clean".
+# See also sister test 'lex-clean.sh'.
+
+required='c++ lex'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CXX
+AC_PROG_LEX
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo bar baz qux
+
+foo_SOURCES = mainfoo.cc parsefoo.lxx
+
+bar_SOURCES = mainbar.cpp parsebar.ll
+bar_LFLAGS = $(AM_LFLAGS)
+
+baz_SOURCES = mainbaz.c++
+nodist_baz_SOURCES = parsebaz.l++
+
+qux_SOURCES = mainqux.cxx
+nodist_qux_SOURCES = parsequx.lpp
+qux_LFLAGS = $(AM_LFLAGS)
+
+parsebaz.l++ parsequx.lpp:
+ cp $(srcdir)/parsefoo.lxx $@
+
+CLEANFILES = parsebaz.l++ parsequx.lpp
+
+LDADD = $(LEXLIB)
+END
+
+cat > parsefoo.lxx << 'END'
+%{
+#define YY_NO_UNISTD_H 1
+int isatty (int fd) { return 0; }
+%}
+%%
+"GOOD" return EOF;
+.
+%%
+int yywrap (void)
+{
+ return 1;
+}
+END
+cp parsefoo.lxx parsebar.ll
+
+cat > mainfoo.cc << 'END'
+// This file should contain valid C++ but invalid C.
+using namespace std;
+int main (int argc, char **argv)
+{
+ extern int yylex (void);
+ return yylex ();
+}
+END
+cp mainfoo.cc mainbar.cpp
+cp mainfoo.cc mainbaz.c++
+cp mainfoo.cc mainqux.cxx
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+cp config.status config.sav
+
+$MAKE
+ls -l
+# Sanity checks.
+test -f parsefoo.cxx
+test -f bar-parsebar.cc
+test -f parsebaz.l++
+test -f parsebaz.c++
+test -f parsequx.lpp
+test -f qux-parsequx.cpp
+
+for target in clean distclean; do
+ $MAKE $target
+ ls -l
+ test -f parsefoo.cxx
+ test -f bar-parsebar.cc
+ test ! -e parsebaz.l++
+ test ! -e parsebaz.c++
+ test ! -e parsequx.lpp
+ test ! -e qux-parsequx.cpp
+done
+
+cp config.sav config.status
+./config.status # re-create Makefile
+
+$MAKE maintainer-clean
+ls -l
+test -f parsefoo.lxx
+test -f parsebar.ll
+test ! -e parsefoo.cxx
+test ! -e bar-parsebar.cc
+test -f parsefoo.lxx
+test -f parsebar.ll
+test ! -e parsefoo.cxx
+test ! -e bar-parsebar.cc
+
+:
diff --git a/t/lex-clean.sh b/t/lex-clean.sh
new file mode 100644
index 000000000..c32c2f2da
--- /dev/null
+++ b/t/lex-clean.sh
@@ -0,0 +1,114 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that .c files derived from non-distributed .l sources
+# are cleaned by "make clean", while .c files derived from
+# distributed .l sources are cleaned by "make maintainer-clean".
+# See also sister test 'lex-clean-cxx.sh'.
+
+required='cc lex'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_LEX
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo bar baz qux
+
+foo_SOURCES = main.c lexer.l
+
+bar_SOURCES = main.c lexer.l
+bar_LFLAGS = $(AM_LFLAGS)
+
+baz_SOURCES = main.c
+nodist_baz_SOURCES = baz.l
+
+qux_SOURCES = main.c
+nodist_qux_SOURCES = baz.l
+qux_LFLAGS = $(AM_LFLAGS)
+
+baz.l:
+ cp $(srcdir)/lexer.l $@
+
+CLEANFILES = baz.l
+
+LDADD = $(LEXLIB)
+END
+
+cat > lexer.l << 'END'
+%{
+#define YY_NO_UNISTD_H 1
+%}
+%%
+"GOOD" return EOF;
+.
+END
+
+cat > main.c << 'END'
+int main (void)
+{
+ return yylex ();
+}
+
+/* Avoid possible link errors. */
+int yywrap (void)
+{
+ return 1;
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+cp config.status config.sav
+
+$MAKE
+ls -l
+# Sanity checks.
+test -f lexer.l
+test -f lexer.c
+test -f bar-lexer.c
+test -f baz.l
+test -f baz.c
+test -f qux-baz.c
+
+for target in clean distclean; do
+ $MAKE $target
+ ls -l
+ test -f lexer.l
+ test -f lexer.c
+ test -f bar-lexer.c
+ test ! -e baz.l
+ test ! -e baz.c
+ test ! -e qux-baz.c
+done
+
+cp config.sav config.status
+./config.status # re-create Makefile
+
+$MAKE maintainer-clean
+ls -l
+test -f lexer.l
+test ! -e lexer.c
+test ! -e bar-lexer.c
+
+:
diff --git a/t/lex-depend-cxx.sh b/t/lex-depend-cxx.sh
new file mode 100644
index 000000000..b9fad4696
--- /dev/null
+++ b/t/lex-depend-cxx.sh
@@ -0,0 +1,97 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure dependencies work with Lex/C++.
+# Test synthesized from PR automake/6.
+
+required='c++ lex'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CXX
+AM_PROG_LEX
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+noinst_PROGRAMS = joe moe
+joe_SOURCES = joe.ll
+moe_SOURCES = moe.l++
+LDADD = $(LEXLIB)
+
+.PHONY: test-deps-exist
+test-deps-exist:
+ ls -l $(DEPDIR) ;: For debugging.
+ test -f $(DEPDIR)/joe.Po
+ test -f $(DEPDIR)/moe.Po
+
+.PHONY: test-obj-updated
+test-obj-updated: joe.$(OBJEXT) moe.$(OBJEXT)
+ is_newest joe.$(OBJEXT) my-hdr.hxx
+ is_newest moe.$(OBJEXT) my-hdr.hxx
+END
+
+cat > joe.ll << 'END'
+%{
+#define YY_NO_UNISTD_H 1
+int isatty (int fd) { return 0; }
+%}
+%%
+"foo" return EOF;
+.
+%%
+#include "my-hdr.hxx"
+int yywrap (void)
+{
+ return 1;
+}
+int main (int argc, char **argv)
+{
+ return 0;
+}
+END
+
+cp joe.ll moe.l++
+
+cat > my-hdr.hxx <<'END'
+// This header contains deliberately invalid C (but valid C++).
+using namespace std;
+END
+
+$ACLOCAL
+$AUTOMAKE -a
+
+$FGREP joe.Po Makefile.in
+$FGREP moe.Po Makefile.in
+
+$AUTOCONF
+# Try to enable dependency tracking if possible, even if that means
+# using slow dependency extractors.
+./configure --enable-dependency-tracking
+
+# For debugging.
+for f in $(find . -name '*.Po'); do
+ cat $f
+done
+
+$MAKE test-deps-exist
+$MAKE
+
+$sleep
+touch my-hdr.hxx
+$MAKE test-obj-updated
+
+:
diff --git a/t/lex-depend-grep.sh b/t/lex-depend-grep.sh
new file mode 100644
index 000000000..a6453bab7
--- /dev/null
+++ b/t/lex-depend-grep.sh
@@ -0,0 +1,46 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure dependencies for Lex and C/C++ does not break
+# in obvious ways. See PR automake/6, and related semantic tests
+# 'lex-depend.sh' and 'lex-depend-cxx.sh'.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_CXX
+AM_PROG_LEX
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = zoo foo
+zoo_SOURCES = joe.ll
+foo_SOURCES = moe.l
+noinst_PROGRAMS = zardoz
+zardoz_SOURCES = _0.l _1.ll _2.lxx _3.l++ _4.lpp
+END
+
+$ACLOCAL
+$AUTOMAKE -a
+
+$EGREP '([mj]oe|_[01234]|include|\.P)' Makefile.in # For debugging.
+
+for x in joe moe _0 _1 _2 _3 _4; do
+ $EGREP '\$\(DEPDIR\)/'"$x"'\.Po( |$)' Makefile.in
+done
+
+:
diff --git a/t/lex-depend.sh b/t/lex-depend.sh
new file mode 100644
index 000000000..e181af25f
--- /dev/null
+++ b/t/lex-depend.sh
@@ -0,0 +1,93 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure automatic dependency tracking work with Lex/C.
+# Test suggested by PR automake/6.
+
+required='cc lex'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_LEX
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = zoo
+zoo_SOURCES = joe.l
+LDADD = $(LEXLIB)
+
+.PHONY: test-deps-exist
+test-deps-exist:
+ ls -l $(DEPDIR) ;: For debugging.
+ test -f $(DEPDIR)/joe.Po
+
+.PHONY: test-obj-updated
+test-obj-updated: joe.$(OBJEXT)
+ is_newest joe.$(OBJEXT) my-hdr.h
+END
+
+cat > joe.l << 'END'
+%{
+#define YY_NO_UNISTD_H 1
+%}
+%%
+"foo" return EOF;
+.
+%%
+#include "my-hdr.h"
+int main (void)
+{
+ printf("%s\n", MESSAGE);
+ return 0;
+}
+/* Avoid possible link errors. */
+int yywrap (void)
+{
+ return 1;
+}
+END
+
+cat > my-hdr.h <<'END'
+#include <stdio.h>
+#define MESSAGE "Hello, World!"
+END
+
+$ACLOCAL
+$AUTOMAKE -a
+
+$FGREP joe.Po Makefile.in
+
+$AUTOCONF
+# Try to enable dependency tracking if possible, even if that means
+# using slow dependency extractors.
+./configure --enable-dependency-tracking
+
+$MAKE test-deps-exist
+$MAKE
+cross_compiling || test "$(./zoo)" = 'Hello, World!' || exit 1
+
+$sleep
+cat >> my-hdr.h << 'END'
+#undef MESSAGE
+#define MESSAGE "Howdy, Earth!"
+END
+$MAKE test-obj-updated
+$MAKE
+cross_compiling || test "$(./zoo)" = 'Howdy, Earth!' || exit 1
+
+:
diff --git a/t/lex-header.sh b/t/lex-header.sh
new file mode 100644
index 000000000..d0810c7d3
--- /dev/null
+++ b/t/lex-header.sh
@@ -0,0 +1,93 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Automake lex support can work with flex '--header-file' option (see
+# bugs #8844 and #9933).
+
+required='cc flex'
+. test-init.sh
+
+# Here, we need to use the use flex option '--header-file', but some
+# older flex versions don't support is (see automake bug#11524 and
+# bug#12836). Skip this test if such an old flex version is detected.
+$LEX --help | grep '.*--header-file' \
+ || skip_ "flex doesn't support the '--header-file' option"
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_LEX
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo
+foo_SOURCES = lexer.l main.c mylex.h
+foo_LFLAGS = --header-file=mylex.h
+BUILT_SOURCES = mylex.h
+# Recover from removal of header.
+mylex.h: foo-lexer.c
+ test -f $@ || rm -f foo-lexer.c
+ test -f $@ || $(MAKE) $(AM_MAKEFLAGS) foo-lexer.c
+END
+
+cat > lexer.l << 'END'
+%option noyywrap
+%{
+#define YY_NO_UNISTD_H 1
+%}
+%%
+"GOOD" return EOF;
+.
+%%
+END
+
+cat > main.c <<'END'
+#define YY_NO_UNISTD_H 1
+#include "mylex.h"
+int main (void)
+{
+ /* We don't use a 'while' loop here (like a real lexer would do)
+ to avoid possible hangs. */
+ if (yylex () == EOF)
+ return 0;
+ else
+ return 1;
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+# Program should build and run.
+$MAKE
+if ! cross_compiling; then
+ echo GOOD | ./foo
+ echo BAD | ./foo && exit 1
+ : For shells with busted 'set -e'.
+fi
+
+# Recovering from header removal.
+rm -f mylex.h
+$MAKE
+test -f mylex.h
+
+# Sanity check on distribution.
+yl_distcheck
+
+:
diff --git a/t/lex-lib-external.sh b/t/lex-lib-external.sh
new file mode 100644
index 000000000..902bedc95
--- /dev/null
+++ b/t/lex-lib-external.sh
@@ -0,0 +1,79 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that we can get use the 'yywrap' function from a system-wide
+# library, if that's available.
+
+required='cc lex'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_RANLIB
+AC_PROG_LEX
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = lexer
+lexer_SOURCES = foo.l
+lexer_LDADD = $(LEXLIB)
+
+.PHONY: have-lexlib
+have-lexlib:
+ test x'$(LEXLIB)' != x
+ echo 'int main (void) { return yywrap (); }' > x.c
+ $(CC) -c x.c
+ $(CC) x.$(OBJEXT) $(LEXLIB)
+ rm -f x.c *.$(OBJEXT) *.o *.out *.exe
+END
+
+cat > foo.l <<'END'
+%{
+#define YY_NO_UNISTD_H 1
+%}
+%%
+"GOOD" return EOF;
+.
+%%
+int main (void)
+{
+ /* We don't use a 'while' loop here (like a real lexer would do)
+ to avoid possible hangs. */
+ if (yylex () == EOF)
+ return 0;
+ else
+ return 1;
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+$MAKE have-lexlib || skip_ "no system-wide lex library found"
+
+# Program should build and run and distribute.
+$MAKE all
+if ! cross_compiling; then
+ echo GOOD | ./lexer
+ echo BAD | ./lexer && exit 1
+ : For shells with busted 'set -e'.
+fi
+yl_distcheck
+
+:
diff --git a/t/lex-lib.sh b/t/lex-lib.sh
new file mode 100644
index 000000000..b0bdd904b
--- /dev/null
+++ b/t/lex-lib.sh
@@ -0,0 +1,72 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that we can provide a personal 'yywrap' function in a custom
+# library.
+# See also test 'lex-lib-external.sh'.
+
+required='cc lex'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+LEXLIB=libmylex.a
+AC_PROG_LEX
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = lexer
+lexer_SOURCES = foo.l
+lexer_LDADD = $(LEXLIB)
+EXTRA_lexer_DEPENDENCIES = $(LEXLIB)
+noinst_LIBRARIES = libmylex.a
+libmylex_a_SOURCES = mu.c
+END
+
+cat > mu.c << 'END'
+int yywrap (void)
+{
+ return 1;
+}
+END
+
+cat > foo.l <<'END'
+%{
+#define YY_NO_UNISTD_H 1
+%}
+%%
+"END" return EOF;
+.
+%%
+int main (void)
+{
+ return 0;
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+$MAKE
+test -f foo.c
+test -f libmylex.a
+
+:
diff --git a/t/lex-libobj.sh b/t/lex-libobj.sh
new file mode 100644
index 000000000..2d4fe5916
--- /dev/null
+++ b/t/lex-libobj.sh
@@ -0,0 +1,83 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that we can provide a personal 'yywrap' function through the
+# LIBOBJ machinery.
+
+required='cc lex'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_RANLIB
+AC_PROG_LEX
+save_LIBS=$LIBS
+LIBS="$LEXLIB $LIBS"
+AC_REPLACE_FUNCS([yywrap])
+LIBS=$save_LIBS
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+noinst_PROGRAMS = foo
+foo_SOURCES = foo.l
+foo_LDADD = $(LEXLIB) $(LIBOBJS)
+END
+
+cat > yywrap.c << 'END'
+int yywrap (void)
+{
+ return 1;
+}
+END
+
+cat > foo.l <<'END'
+%{
+#define YY_NO_UNISTD_H 1
+%}
+%%
+"END" return EOF;
+.
+%%
+int main (void)
+{
+ return 0;
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+grep LIBOBJS Makefile # For debugging.
+$MAKE
+$MAKE distclean
+
+# Force "no system lex library". Setting LEXLIB to a non-empty value
+# ensures that configure won't search for a "lex library", and simply
+# rely on the LEXLIB to provide it, if needed. So, by setting LEXLIB
+# to a blank but non-empty value we can fool configure into thinking
+# that no system-level library providing a 'yywrap' function is
+# available. See also discussion on automake bug#11306.
+./configure LEXLIB=' '
+grep LIBOBJS Makefile # For debugging.
+grep '^LIBOBJS *=.*yywrap.*\.o' Makefile # Sanity check.
+$MAKE
+
+yl_distcheck
+
+:
diff --git a/t/lex-line.sh b/t/lex-line.sh
new file mode 100644
index 000000000..d93d0deb0
--- /dev/null
+++ b/t/lex-line.sh
@@ -0,0 +1,135 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that automake lex support ensures that lex-generated C
+# files use correct "#line" directives. Try also with the
+# 'subdir-object' option enabled.
+# See also sister test 'yacc-line.sh'.
+
+required='cc lex'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_FILES([sub/Makefile])
+AC_PROG_CC
+AC_PROG_LEX
+AC_OUTPUT
+END
+
+mkdir dir sub sub/dir
+
+cat > Makefile.am << 'END'
+SUBDIRS = sub
+bin_PROGRAMS = foo bar
+LDADD = $(LEXLIB)
+bar_LFLAGS = -v
+foo_SOURCES = zardoz.l
+bar_SOURCES = dir/quux.l
+## Avoid spurious failures with Solaris make.
+zardoz.@OBJEXT@: zardoz.c
+bar-quux.@OBJEXT@: bar-quux.c
+END
+
+cat > sub/Makefile.am << 'END'
+AUTOMAKE_OPTIONS = subdir-objects
+noinst_PROGRAMS = foo bar
+## We already used $(LEXLIB) above, so try @LEXLIB@ now.
+LDADD = @LEXLIB@
+foo_LFLAGS = -v
+foo_SOURCES = zardoz.l
+bar_SOURCES = dir/quux.l
+## Avoid spurious failures with Solaris make.
+foo-zardoz.@OBJEXT@: foo-zardoz.c
+dir/quux.@OBJEXT@: dir/quux.c
+END
+
+cat > zardoz.l << 'END'
+%{
+#define YY_NO_UNISTD_H 1
+%}
+%%
+"END" return EOF;
+.
+%%
+int main ()
+{
+ while (yylex () != EOF)
+ ;
+ return 0;
+}
+
+/* Avoid possible link errors. */
+int yywrap (void)
+{
+ return 1;
+}
+END
+
+cp zardoz.l dir/quux.l
+cp zardoz.l sub/zardoz.l
+cp zardoz.l sub/dir/quux.l
+
+c_outputs='zardoz.c bar-quux.c sub/foo-zardoz.c sub/dir/quux.c'
+
+$ACLOCAL
+$AUTOCONF
+# FIXME: stop disabling the warnings in the 'unsupported' category
+# FIXME: once the 'subdir-objects' option has been mandatory.
+$AUTOMAKE -a -Wno-unsupported
+
+for vpath in : false; do
+
+ if $vpath; then
+ srcdir=..
+ mkdir build
+ cd build
+ else
+ srcdir=.
+ fi
+
+ $srcdir/configure
+ $MAKE
+
+ # For debugging,
+ ls -l . sub sub/dir
+ $EGREP 'line|\.l' $c_outputs
+
+ grep '#.*line.*build.*\.l' $c_outputs && exit 1
+ # Adjusted "#line" should not contain reference to the absolute
+ # srcdir.
+ $EGREP '#.*line *"?/.*\.l' $c_outputs && exit 1
+ # Adjusted "#line" should not contain reference to the default
+ # output file names, e.g., 'lex.yy.c'.
+ grep '#.*line.*lex\.yy' $c_outputs && exit 1
+ # Look out for a silly regression.
+ grep "#.*\.l.*\.l" $c_outputs && exit 1
+ if $vpath; then
+ grep '#.*line.*"\.\./zardoz\.l"' zardoz.c
+ grep '#.*line.*"\.\./dir/quux\.l"' bar-quux.c
+ grep '#.*line.*"\.\./\.\./sub/zardoz\.l"' sub/foo-zardoz.c
+ grep '#.*line.*"\.\./\.\./sub/dir/quux\.l"' sub/dir/quux.c
+ else
+ grep '#.*line.*"zardoz\.l"' zardoz.c
+ grep '#.*line.*"dir/quux\.l"' bar-quux.c
+ grep '#.*line.*"zardoz\.l"' sub/foo-zardoz.c
+ grep '#.*line.*"dir/quux\.l"' sub/dir/quux.c
+ fi
+
+ cd $srcdir
+
+done
+
+:
diff --git a/t/lex-multiple.sh b/t/lex-multiple.sh
new file mode 100644
index 000000000..5d6d74c26
--- /dev/null
+++ b/t/lex-multiple.sh
@@ -0,0 +1,107 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that we can build a program using several lexers at once
+# (assuming Flex is used). That is a little tricky, but possible.
+# See:
+# <https://lists.gnu.org/archive/html/automake/2010-10/msg00081.html>
+# <https://lists.gnu.org/archive/html/automake/2009-03/msg00061.html>
+
+required='cc flex'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_LEX
+AM_PROG_AR
+AC_PROG_RANLIB
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = zardoz
+
+zardoz_SOURCES = main.c
+# Convenience libraries.
+noinst_LIBRARIES = liblex.a liblex-foo.a liblex-bar.a
+zardoz_LDADD = $(noinst_LIBRARIES)
+
+liblex_a_SOURCES = 0.l
+
+# We need the output to always be named 'lex.yy.c', in order for
+# ylwrap to pick it up.
+liblex_foo_a_LFLAGS = -Pfoo -olex.yy.c
+liblex_foo_a_SOURCES = a.l
+
+# Ditto.
+liblex_bar_a_LFLAGS = -Pbar_ -olex.yy.c
+liblex_bar_a_SOURCES = b.l
+END
+
+cat > main.c << 'END'
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+int main (int argc, char *argv[])
+{
+ if (argc != 2)
+ abort ();
+ else if (!strcmp(argv[1], "--vanilla"))
+ return (yylex () != 121);
+ else if (!strcmp(argv[1], "--foo"))
+ return (foolex () != 121);
+ else if (!strcmp(argv[1], "--bar"))
+ return (bar_lex () != 121);
+ else
+ abort ();
+}
+END
+
+cat > 0.l << 'END'
+%{
+#define YY_NO_UNISTD_H 1
+%}
+%%
+"VANILLA" { printf (":%s:\n", yytext); return 121; }
+. { printf (":%s:\n", yytext); return 1; }
+%%
+/* Avoid possible link errors. */
+int yywrap (void) { return 1; }
+END
+
+sed 's/VANILLA/FOO/' 0.l > a.l
+sed 's/VANILLA/BAR/' 0.l > b.l
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+./configure
+$MAKE
+
+if ! cross_compiling; then
+ echo VANILLA | ./zardoz --vanilla
+ echo FOO | ./zardoz --foo
+ echo BAR | ./zardoz --bar
+ ./zardoz --vanilla </dev/null && exit 1
+ echo BAR | ./zardoz --foo && exit 1
+ : For shells with busted 'set -e'.
+fi
+
+yl_distcheck
+
+:
diff --git a/t/lex-nodist.sh b/t/lex-nodist.sh
new file mode 100644
index 000000000..5cadcff0c
--- /dev/null
+++ b/t/lex-nodist.sh
@@ -0,0 +1,90 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Checks for .c files derived from non-distributed .l sources.
+# The test 'lex-pr204.sh' does similar check with AM_MAINTAINER_MODE
+# enabled.
+# The tests 'yacc-nodist.sh' and 'yacc-pr204.sh' does similar checks
+# for yacc-generated .c and .h files.
+
+required='cc lex'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+dnl Sister test 'lex-pr204.sh' should use 'AC_PROG_LEX' instead.
+AM_PROG_LEX
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+.PHONY: test-build test-dist
+test-build: all
+ ls -l
+ test -f lexer.l
+ test -f lexer.c
+test-dist: distdir
+ ls -l $(distdir)
+ test ! -r $(distdir)/lexer.l
+ test ! -r $(distdir)/lexer.c
+check-local: test-build test-dist
+
+lexer.l:
+ rm -f $@ $@-t
+ :; { : \
+ && echo '%{' \
+ && echo '#define YY_NO_UNISTD_H 1' \
+ && echo '%}' \
+ && echo '%%' \
+ && echo '"GOOD" return EOF;' \
+ && echo '.'; \
+ } > $@-t
+ chmod a-w $@-t && mv -f $@-t $@
+
+bin_PROGRAMS = prog
+prog_SOURCES = main.c
+nodist_prog_SOURCES = lexer.l
+prog_LDADD = $(LEXLIB)
+CLEANFILES = $(nodist_prog_SOURCES)
+END
+
+cat > main.c << 'END'
+int main ()
+{
+ return yylex ();
+}
+
+/* Avoid possible link errors. */
+int yywrap (void)
+{
+ return 1;
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+$MAKE
+$MAKE test-build
+$MAKE test-dist
+
+# But the distribution must work correctly, assuming the user has
+# the proper tools to process yacc files.
+$MAKE distcheck
+
+:
diff --git a/t/lex-noyywrap.sh b/t/lex-noyywrap.sh
new file mode 100644
index 000000000..dbbf8590a
--- /dev/null
+++ b/t/lex-noyywrap.sh
@@ -0,0 +1,76 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check Lex support with flex using the '%noyywrap' option.
+
+required='cc flex'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_LEX
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo
+foo_SOURCES = foo.l
+
+.PHONY: test-no-lexlib
+check-local: test-no-lexlib
+test-no-lexlib:
+ test x'$(LEXLIB)' = x'none needed'
+END
+
+cat > foo.l << 'END'
+%option noyywrap
+%{
+#define YY_NO_UNISTD_H 1
+%}
+%%
+"GOOD" return EOF;
+.
+%%
+int main (void)
+{
+ /* We don't use a 'while' loop here (like a real lexer would do)
+ to avoid possible hangs. */
+ if (yylex () == EOF)
+ return 0;
+ else
+ return 1;
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure LEXLIB="none needed"
+
+# Program should build and run.
+$MAKE
+if ! cross_compiling; then
+ echo GOOD | ./foo
+ echo BAD | ./foo && exit 1
+ : For shells with busted 'set -e'.
+fi
+
+# Sanity check on distribution. Escape in LEXLIB must use backspace,
+# not double-quotes, to avoid a spurious failure with AIX make.
+yl_distcheck DISTCHECK_CONFIGURE_FLAGS='LEXLIB=none\ needed'
+
+:
diff --git a/t/lex-pr204.sh b/t/lex-pr204.sh
new file mode 100644
index 000000000..e388353e8
--- /dev/null
+++ b/t/lex-pr204.sh
@@ -0,0 +1,88 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Related to PR 204.
+# C sources derived from nodist_ lex sources should not be distributed.
+# See also related test 'lex-nodist.sh'.
+# The tests 'yacc-nodist.sh' and 'yacc-pr204.sh' does similar checks
+# for yacc-generated .c and .h files.
+
+required='cc lex'
+. test-init.sh
+
+cat >> configure.ac <<'EOF'
+AM_MAINTAINER_MODE
+AC_PROG_CC
+dnl We use AC_PROG_LEX deliberately.
+dnl Sister 'lex-nodist.sh' should use 'AM_PROG_LEX' instead.
+AC_PROG_LEX
+AC_OUTPUT
+EOF
+
+# The LEXER2 intermediate variable is there to make sure Automake
+# matches 'nodist_' against the right variable name...
+cat > Makefile.am << 'EOF'
+EXTRA_PROGRAMS = foo
+LEXER2 = lexer2.l
+nodist_foo_SOURCES = lexer.l $(LEXER2)
+
+distdirtest: distdir
+ test ! -f $(distdir)/lexer.c
+ test ! -f $(distdir)/lexer.l
+ test ! -f $(distdir)/lexer.h
+ test ! -f $(distdir)/lexer2.c
+ test ! -f $(distdir)/lexer2.l
+ test ! -f $(distdir)/lexer2.h
+EOF
+
+cat > lexer.l << 'END'
+%{
+#define YY_NO_UNISTD_H 1
+%}
+%%
+"GOOD" return EOF;
+.
+%%
+int main (void)
+{
+ return yylex ();
+}
+END
+
+cp lexer.l lexer2.l
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+$MAKE distdirtest
+
+# Make sure lexer.c and lexer2.c are still targets.
+$MAKE lexer.c lexer2.c
+test -f lexer.c
+test -f lexer2.c
+
+# Ensure the rebuild rule works despite AM_MAINTAINER_MODE, because
+# it's a nodist_ lexer.
+$sleep
+touch lexer.l lexer2.l
+$sleep
+$MAKE lexer.c lexer2.c
+is_newest lexer.c lexer.l
+is_newest lexer2.c lexer2.l
+
+:
diff --git a/t/lex-subobj-nodep.sh b/t/lex-subobj-nodep.sh
new file mode 100644
index 000000000..4f79ce047
--- /dev/null
+++ b/t/lex-subobj-nodep.sh
@@ -0,0 +1,73 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Ensure subdirs for subdir scanners are generated when subdir-objects
+# are used, even when dependency tracking is disabled.
+
+required='cc lex'
+. test-init.sh
+
+cat >>configure.ac <<\END
+AC_PROG_CC
+AC_PROG_LEX
+AC_OUTPUT
+END
+
+cat >Makefile.am <<\END
+AUTOMAKE_OPTIONS = subdir-objects
+bin_PROGRAMS = p1 p2
+p1_SOURCES = sub1/s1.l
+p2_SOURCES = sub2/s2.l
+p2_CPPFLAGS = -DWHATEVER
+END
+
+mkdir sub1 sub2
+
+cat >sub1/s1.l <<\END
+%{
+#define YY_NO_UNISTD_H 1
+%}
+%%
+"END" return EOF;
+.
+%%
+int main (void)
+{
+ while (yylex () != EOF)
+ ;
+ return 0;
+}
+
+int yywrap(void)
+{
+ return 1;
+}
+END
+
+cp sub1/s1.l sub2/s2.l
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+mkdir build
+cd build
+../configure --disable-dependency-tracking
+$MAKE sub1/s1.c
+$MAKE sub2/s2.c
+rm -rf sub1 sub2
+$MAKE
+
+:
diff --git a/t/lex.sh b/t/lex.sh
new file mode 100644
index 000000000..94b11bc9c
--- /dev/null
+++ b/t/lex.sh
@@ -0,0 +1,40 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_LEX
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = zot
+zot_SOURCES = joe.l
+LDADD = @LEXLIB@
+END
+
+$ACLOCAL
+$AUTOMAKE -a
+
+# Test to make sure that lex source generates correct target.
+$FGREP '$(LEX)' Makefile.in
+
+# Test to make sure that lex source generates correct clean rule.
+# From Ralf Corsepius.
+$FGREP joel Makefile.in && exit 1
+
+:
diff --git a/t/lex2.sh b/t/lex2.sh
new file mode 100644
index 000000000..e9c4665bf
--- /dev/null
+++ b/t/lex2.sh
@@ -0,0 +1,35 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that Automake suggest using AM_PROG_LEX when a lexer is used.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = zot
+zot_SOURCES = joe.l
+END
+
+$ACLOCAL
+AUTOMAKE_fails -a
+grep 'LEX.* undefined' stderr
+grep 'add .*AM_PROG_LEX' stderr
+
+:
diff --git a/t/lex3.sh b/t/lex3.sh
new file mode 100644
index 000000000..9f1737a78
--- /dev/null
+++ b/t/lex3.sh
@@ -0,0 +1,91 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Basic semantic checks on Lex support.
+# Test associated with PR 19.
+# From Matthew D. Langston.
+
+required='cc lex'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_LEX
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+noinst_PROGRAMS = foo
+foo_SOURCES = foo.l
+END
+
+cat > foo.l << 'END'
+%{
+#define YY_NO_UNISTD_H 1
+%}
+%%
+"GOOD" return EOF;
+.
+%%
+
+int main (void)
+{
+ /* We don't use a 'while' loop here (like a real lexer would do)
+ to avoid possible hangs. */
+ if (yylex () == EOF)
+ return 0;
+ else
+ return 1;
+}
+
+/* Avoid possible link errors. */
+int yywrap (void)
+{
+ return 1;
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+# Program should build and run.
+$MAKE
+if ! cross_compiling; then
+ echo GOOD | ./foo
+ echo BAD | ./foo && exit 1
+ : For shells with busted 'set -e'.
+fi
+
+# The generated file 'foo.c' must be shipped.
+$MAKE distdir
+test -f $distdir/foo.c
+
+# Sanity check on distribution.
+yl_distcheck
+
+# While we are at it, make sure that foo.c is erased by
+# maintainer-clean, and not by distclean.
+test -f foo.c
+$MAKE distclean
+test -f foo.c
+./configure # Re-create 'Makefile'.
+$MAKE maintainer-clean
+test ! -e foo.c
+
+:
diff --git a/t/lex5.sh b/t/lex5.sh
new file mode 100644
index 000000000..ed20ef76f
--- /dev/null
+++ b/t/lex5.sh
@@ -0,0 +1,97 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for subdir lexers.
+
+required='cc lex'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_LEX
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = subdir-objects
+LDADD = @LEXLIB@
+
+bin_PROGRAMS = foo/foo
+foo_foo_SOURCES = foo/foo.l
+END
+
+mkdir foo
+
+cat > foo/foo.l << 'END'
+%{
+#define YY_NO_UNISTD_H 1
+%}
+%%
+"END" return EOF;
+.
+%%
+int
+main ()
+{
+ while (yylex () != EOF)
+ ;
+
+ return 0;
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+# We expect ylwrap to be used and distributed even if there is
+# only one lexer.
+test -f ylwrap
+
+mkdir sub
+cd sub
+../configure
+$MAKE foo/foo.o
+ls -l # For debugging.
+
+test -f foo/foo.c
+test -f foo/foo.o
+
+# Now, adds another lexer to test ylwrap.
+
+cd ..
+cp foo/foo.l foo/foo2.l
+cat >> Makefile.am << 'END'
+EXTRA_foo_foo_SOURCES = foo/foo2.l
+END
+
+# Make sure Makefile.in has a new time stamp: the rebuild rules are
+# used below. We do this after updating Makefile.am, that way we can
+# ensure that automake, even with --no-force, is not confused if the
+# new Makefile.am has the same time stamp as the older one (since the
+# output will change, --no-force should have no effect).
+$sleep
+
+$AUTOMAKE -a --no-force
+
+cd sub
+using_gmake || $MAKE Makefile
+$MAKE foo/foo2.o
+ls -l # For debugging.
+test -f foo/foo2.c
+test -f foo/foo2.o
+
+:
diff --git a/t/lexcpp.sh b/t/lexcpp.sh
new file mode 100644
index 000000000..a639b964b
--- /dev/null
+++ b/t/lexcpp.sh
@@ -0,0 +1,44 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure Lex + C++ is supported.
+# Please keep this is sync with sister test 'yaccpp.sh'.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CXX
+AC_PROG_LEX
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo bar baz qux
+foo_SOURCES = foo.l++
+bar_SOURCES = bar.lpp
+baz_SOURCES = baz.ll
+qux_SOURCES = qux.lxx
+END
+
+$ACLOCAL
+$AUTOMAKE -a
+
+sed -e 's/^/ /' -e 's/$/ /' Makefile.in >mk
+$FGREP ' foo.c++ ' mk
+$FGREP ' bar.cpp ' mk
+$FGREP ' baz.cc ' mk
+$FGREP ' qux.cxx ' mk
+
+:
diff --git a/t/lexvpath.sh b/t/lexvpath.sh
new file mode 100644
index 000000000..927d655ec
--- /dev/null
+++ b/t/lexvpath.sh
@@ -0,0 +1,128 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# This test checks that dependent files are updated before including
+# in the distribution. 'lexer.c' depends on 'lexer.l'. The latter is
+# updated so that 'lexer.c' should be rebuild. Then we are running
+# 'make' and 'make distdir' and check whether the version of 'lexer.c'
+# to be distributed is up to date.
+
+# Please keep this in sync with sister test 'yaccvapth.sh'.
+
+required='cc lex'
+. test-init.sh
+
+cat > lexoutroot.in << 'END'
+LEX_OUTPUT_ROOT='@LEX_OUTPUT_ROOT@'
+END
+
+cat >> configure.ac << 'END'
+AC_CONFIG_FILES([lexoutroot])
+AC_PROG_CC
+AC_PROG_LEX
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo
+foo_SOURCES = lexer.l foo.c
+LDADD = $(LEXLIB)
+END
+
+# Original lexer, with a "foobar" comment
+cat > lexer.l << 'END'
+%{
+#define YY_NO_UNISTD_H 1
+%}
+%%
+"END" return EOF;
+.
+%%
+/*foobar*/
+END
+
+cat > foo.c << 'END'
+int main (void)
+{
+ return 0;
+}
+/* Avoid possible link errors. */
+int yywrap (void)
+{
+ return 1;
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+mkdir sub
+
+# We must run configure early, to find out why $LEX_OUTPUT_ROOT is.
+cd sub
+../configure
+. ./lexoutroot
+test -n "$LEX_OUTPUT_ROOT" # Sanity check.
+cd ..
+
+$LEX lexer.l
+mv "$LEX_OUTPUT_ROOT".c lexer.c
+
+cd sub
+
+# Ensure that lexer.l will be newer than lexer.c.
+$sleep
+
+# New lexer, with 'fubar' comment.
+cat > ../lexer.l << 'END'
+%{
+#define YY_NO_UNISTD_H 1
+%}
+%%
+"END" return EOF;
+.
+%%
+/*fubar*/
+END
+
+$MAKE
+$MAKE distdir
+$FGREP '/*fubar*/' $distdir/lexer.c
+
+#
+# Now check to make sure that 'make dist' will rebuilt the parser.
+#
+
+# Ensure that lexer.l will be newer than lexer.c.
+$sleep
+
+# New lexer, with 'maude' comment.
+cat > ../lexer.l << 'END'
+%{
+#define YY_NO_UNISTD_H 1
+%}
+%%
+"END" return EOF;
+.
+%%
+/*maude*/
+END
+
+$MAKE distdir
+$FGREP '/*maude*/' $distdir/lexer.c
+
+:
diff --git a/t/lflags-cxx.sh b/t/lflags-cxx.sh
new file mode 100644
index 000000000..72231e722
--- /dev/null
+++ b/t/lflags-cxx.sh
@@ -0,0 +1,70 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that $(LFLAGS) takes precedence over both $(AM_LFLAGS) and
+# $(foo_LFLAGS). This is the C++ case.
+# Please keep this in sync with the sister tests:
+# - lflags.sh
+# - yflags.sh
+# - yflags-cxx.sh
+
+. test-init.sh
+
+cat >fake-lex <<'END'
+#!/bin/sh
+echo '/*' "$*" '*/' >lex.yy.c
+echo 'extern int dummy;' >> lex.yy.c
+END
+chmod a+x fake-lex
+
+cat >> configure.ac <<'END'
+AC_SUBST([CXX], [false])
+# Simulate presence of Lex using our fake-lex script.
+AC_SUBST([LEX], ['$(abs_top_srcdir)'/fake-lex])
+AC_SUBST([LEX_OUTPUT_ROOT], [lex.yy])
+AC_SUBST([LEXLIB], [''])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+AUTOMAKE_OPTIONS = no-dependencies
+bin_PROGRAMS = foo bar
+foo_SOURCES = main.cc foo.ll
+bar_SOURCES = main.cc bar.l++
+AM_LFLAGS = __am_flags__
+bar_LFLAGS = __bar_flags__
+END
+
+$ACLOCAL
+$AUTOMAKE -a
+
+grep '\$(LFLAGS).*\$(bar_LFLAGS)' Makefile.in && exit 1
+grep '\$(LFLAGS).*\$(AM_LFLAGS)' Makefile.in && exit 1
+
+: > foo.ll
+: > bar.l++
+
+$AUTOCONF
+./configure
+run_make LFLAGS=__user_flags__ foo.cc bar-bar.c++
+
+cat foo.cc
+cat bar-bar.c++
+
+grep '__am_flags__.*__user_flags__' foo.cc
+grep '__bar_flags__.*__user_flags__' bar-bar.c++
+
+:
diff --git a/t/lflags.sh b/t/lflags.sh
new file mode 100644
index 000000000..fefd9cc55
--- /dev/null
+++ b/t/lflags.sh
@@ -0,0 +1,71 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that $(LFLAGS) takes precedence over both $(AM_LFLAGS) and
+# $(foo_LFLAGS).
+# Please keep this in sync with the sister tests:
+# - lflags-cxx.sh
+# - yflags.sh
+# - yflags-cxx.sh
+
+required=cc
+. test-init.sh
+
+cat >fake-lex <<'END'
+#!/bin/sh
+echo '/*' "$*" '*/' >lex.yy.c
+echo 'extern int dummy;' >> lex.yy.c
+END
+chmod a+x fake-lex
+
+cat >> configure.ac <<'END'
+AC_SUBST([CC], [false])
+# Simulate presence of Lex using our fake-lex script.
+AC_SUBST([LEX], ['$(abs_top_srcdir)'/fake-lex])
+AC_SUBST([LEX_OUTPUT_ROOT], [lex.yy])
+AC_SUBST([LEXLIB], [''])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+AUTOMAKE_OPTIONS = no-dependencies
+bin_PROGRAMS = foo bar
+foo_SOURCES = main.c foo.l
+bar_SOURCES = main.c bar.l
+AM_LFLAGS = __am_flags__
+bar_LFLAGS = __bar_flags__
+END
+
+$ACLOCAL
+$AUTOMAKE -a
+
+grep '\$(LFLAGS).*\$(bar_LFLAGS)' Makefile.in && exit 1
+grep '\$(LFLAGS).*\$(AM_LFLAGS)' Makefile.in && exit 1
+
+: > foo.l
+: > bar.l
+
+$AUTOCONF
+./configure
+run_make LFLAGS=__user_flags__ foo.c bar-bar.c
+
+cat foo.c
+cat bar-bar.c
+
+grep '__am_flags__.*__user_flags__' foo.c
+grep '__bar_flags__.*__user_flags__' bar-bar.c
+
+:
diff --git a/t/libexec.sh b/t/libexec.sh
new file mode 100644
index 000000000..fdb63ae7b
--- /dev/null
+++ b/t/libexec.sh
@@ -0,0 +1,35 @@
+#! /bin/sh
+# Copyright (C) 2006-2017 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 <https://www.gnu.org/licenses/>.
+
+# PROGRAMS and LIBRARIES can be installed in (pkg)libexecdir.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+libexec_PROGRAMS = foo
+pkglibexec_PROGRAMS = bar
+END
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_OUTPUT
+END
+
+: > foo.c
+: > bar.c
+
+$ACLOCAL
+$AUTOMAKE
diff --git a/t/libobj-basic.sh b/t/libobj-basic.sh
new file mode 100644
index 000000000..686888d22
--- /dev/null
+++ b/t/libobj-basic.sh
@@ -0,0 +1,112 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure AC_LIBSOURCE and AC_LIBSOURCES work.
+
+required=cc
+. test-init.sh
+
+mv configure.ac configure.proto
+cat >> configure.proto << 'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+noinst_LIBRARIES = libtu.a
+libtu_a_SOURCES = foo.c
+libtu_a_LIBADD = $(LIBOBJS)
+
+include extra-checks.am
+.PHONY: $(extra_checks) pre-test
+
+pre-test: distdir
+ ls -l $(srcdir) $(builddir) $(distdir)
+ $(AR) tv libtu.a
+$(extra_checks): pre-test
+check-local: $(extra_checks)
+
+maude-src:
+ grep dummy_maude $(srcdir)/maude.c
+maude-dist:
+ grep dummy_maude $(distdir)/maude.c
+liver-src:
+ grep dummy_liver $(srcdir)/liver.c
+liver-dist:
+ grep dummy_liver $(distdir)/liver.c
+liver-not-dist:
+ test -d $(distdir)
+ test ! -r $(distdir)/liver.c
+maude-not-dist:
+ test -d $(distdir)
+ test ! -r $(distdir)/maude.c
+END
+
+cat > foo.c << 'END'
+extern int dummy_foo;
+END
+
+cat > maude.c << 'END'
+extern int dummy_maude;
+END
+
+cat > liver.c << 'END'
+extern int dummy_liver;
+END
+
+# AC_LIBSOURCE should work also if called after AC_OUTPUT.
+cat configure.proto - > configure.ac <<END
+AC_LIBSOURCE([maude.c])
+END
+
+cat > extra-checks.am << 'END'
+extra_checks = maude-src maude-dist liver-not-dist
+END
+
+cp "$am_scriptdir/ar-lib" . || fatal_ "fetching auxiliary script 'ar-lib'"
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+
+$MAKE check
+$MAKE distcheck
+
+$MAKE distclean
+# Avoid timestamp-related differences.
+rm -rf autom4te*.cache
+
+cat > extra-checks.am << 'END'
+extra_checks = maude-src maude-dist liver-src liver-dist
+END
+
+# AC_LIBSOURCES should work also if called after AC_OUTPUT.
+cat configure.proto - > configure.ac <<END
+AC_LIBSOURCES([maude.c, liver.c])
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+
+$MAKE check
+$MAKE distcheck
+
+:
diff --git a/t/libobj-no-dependency-tracking.sh b/t/libobj-no-dependency-tracking.sh
new file mode 100644
index 000000000..793b56f9e
--- /dev/null
+++ b/t/libobj-no-dependency-tracking.sh
@@ -0,0 +1,56 @@
+#! /bin/sh
+# Copyright (C) 2017 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 <https://www.gnu.org/licenses/>.
+
+# Ensure that LIBOBJS source files are properly built without dependency
+# tracking when using out of tree builds.
+#
+# This is a non regression test which is following an issue in flex-2.6.4 when
+# "malloc.o" was required, see <https://github.com/westes/flex/issues/244>.
+
+. test-init.sh
+
+# The LIBOBJS are in a separate LIBOBJ_DIR directory without anything else in
+# it to not trigger the creation of the build directory accidentally.
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_CONFIG_LIBOBJ_DIR([foo])
+AC_LIBOBJ([foo])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = subdir-objects
+bin_PROGRAMS = helldl
+LDADD = $(LIBOBJS)
+.PHONY: dummy
+dummy: $(LIBOBJS)
+END
+
+mkdir foo
+cat > foo/foo.c << 'END'
+int foo() { return 0; }
+END
+
+mkdir build
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+cd build
+../configure --disable-dependency-tracking
+run_make dummy
+:
diff --git a/t/libobj10.sh b/t/libobj10.sh
new file mode 100644
index 000000000..5c10e4aa0
--- /dev/null
+++ b/t/libobj10.sh
@@ -0,0 +1,56 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Do not complain about the nonexistence of a source for LIBOBJS if
+# it's in BUILT_SOURCES. Reported by Erez Zadok.
+
+required=cc
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+AC_LIBOBJ([foo])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+noinst_LIBRARIES = libfoo.a
+libfoo_a_SOURCES =
+libfoo_a_LIBADD = $(LIBOBJS)
+BUILT_SOURCES = foo.c
+CLEANFILES = foo.c
+foo.c:
+ echo 'extern int dummy;' > $@
+.PHONY: debugging
+debugging:
+ $(AR) t libfoo.a
+END
+
+cp "$am_scriptdir/ar-lib" . || fatal_ "fetching auxiliary script 'ar-lib'"
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+
+$MAKE
+$MAKE debugging
+$MAKE distcheck
+
+:
diff --git a/t/libobj12.sh b/t/libobj12.sh
new file mode 100644
index 000000000..6b1a537b5
--- /dev/null
+++ b/t/libobj12.sh
@@ -0,0 +1,77 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test if a file can be mentioned in LIBOBJS and explicitly.
+# (See libobj13.sh for the LTLIBRARIES check.)
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+AC_LIBOBJ([foo])
+AC_LIBOBJ([bar])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+noinst_LIBRARIES = libfoo.a libbar.a
+noinst_PROGRAMS = p1 p2
+
+libfoo_a_SOURCES =
+libfoo_a_LIBADD = @LIBOBJS@
+
+libbar_a_SOURCES = foo.c
+
+p1_SOURCES =
+p1_LDADD = @LIBOBJS@
+
+p2_SOURCES = bar.c
+END
+
+: > ar-lib
+: > foo.c
+: > bar.c
+
+$ACLOCAL
+
+# This however should be diagnosed, since foo.c and bar.c are in @LIBOBJS@.
+cat >> Makefile.am << 'END'
+libfoo_a_SOURCES += foo.c
+p1_SOURCES += bar.c
+END
+
+AUTOMAKE_fails
+grep 'foo\.c.*explicitly mentioned' stderr
+grep 'bar\.c.*explicitly mentioned' stderr
+
+# Global 'LDADD' can also come into play.
+cat > Makefile.am << 'END'
+noinst_PROGRAMS = a b
+LDADD = @LIBOBJS@
+END
+
+$AUTOMAKE
+grep 'a_DEPENDENCIES.*LIBOBJS' Makefile.in
+
+cat >> Makefile.am << 'END'
+a_SOURCES = foo.c
+END
+AUTOMAKE_fails
+grep 'foo\.c.*explicitly mentioned' stderr
+
+:
diff --git a/t/libobj13.sh b/t/libobj13.sh
new file mode 100644
index 000000000..8483f1553
--- /dev/null
+++ b/t/libobj13.sh
@@ -0,0 +1,51 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test if a file can be mentioned in LTLIBOBJS and explicitly.
+# (Like libobj12.sh, but for Libtool libraries.)
+
+required='libtoolize'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_LIBTOOL
+AC_LIBOBJ([foo])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+noinst_LTLIBRARIES = libfoo.la libbar.la
+
+libfoo_la_SOURCES =
+libfoo_la_LIBADD = @LTLIBOBJS@
+
+libbar_la_SOURCES = foo.c
+END
+
+: > foo.c
+
+$ACLOCAL
+: > ltmain.sh
+$AUTOMAKE --add-missing
+
+# This however should be diagnosed, since foo.c is in @LIBOBJS@.
+echo 'libfoo_la_SOURCES += foo.c' >> Makefile.am
+AUTOMAKE_fails
+grep 'foo\.c.*explicitly mentioned' stderr
+
+:
diff --git a/t/libobj14.sh b/t/libobj14.sh
new file mode 100644
index 000000000..10f101ed8
--- /dev/null
+++ b/t/libobj14.sh
@@ -0,0 +1,44 @@
+#!/bin/sh
+# Copyright (C) 2004-2017 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 <https://www.gnu.org/licenses/>.
+
+# Regression test for an internal error when @LIBOBJS@ is used in
+# a variable that is not defined in the same conditions as the _LDADD
+# that uses it.
+# Report from Bill Davidson.
+
+. test-init.sh
+
+cat >>configure.ac <<'EOF'
+AC_PROG_CC
+AC_LIBSOURCE([bar.c])
+AM_CONDITIONAL([CASE], [:])
+AC_OUTPUT
+EOF
+
+: >bar.c
+
+cat >>Makefile.am <<'EOF'
+COMMON_LIBS = @LIBOBJS@
+bin_PROGRAMS = foo
+if ! CASE
+foo_LDADD = $(COMMON_LIBS)
+endif
+EOF
+
+$ACLOCAL
+$AUTOMAKE
+
+:
diff --git a/t/libobj15a.sh b/t/libobj15a.sh
new file mode 100644
index 000000000..28f0552ca
--- /dev/null
+++ b/t/libobj15a.sh
@@ -0,0 +1,40 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Nonexistent sources for AC_LIBOBJ should cause an Automake failure.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+AC_LIBOBJ([foobar])
+END
+
+cat > Makefile.am << 'END'
+noinst_LIBRARIES = libtu.a
+libtu_a_SOURCES =
+libtu_a_LIBADD = $(LIBOBJS)
+END
+
+: > ar-lib
+
+$ACLOCAL
+AUTOMAKE_fails
+grep 'configure\.ac:.*required file.*foobar\.c.*' stderr
+
+:
diff --git a/t/libobj15b.sh b/t/libobj15b.sh
new file mode 100644
index 000000000..4f939eec6
--- /dev/null
+++ b/t/libobj15b.sh
@@ -0,0 +1,43 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Nonexistent source for AC_LIBSOURCE should cause Automake to fail.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+AC_LIBSOURCE([foobar.c])
+# NOTE: this call to AC_OUTPUT is really needed; see Automake bug #7635
+# <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=7635>
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+noinst_LIBRARIES = libtu.a
+libtu_a_SOURCES =
+libtu_a_LIBADD = $(LIBOBJS)
+END
+
+: > ar-lib
+
+$ACLOCAL
+AUTOMAKE_fails
+grep 'configure\.ac:.*required file.*foobar\.c.*' stderr
+
+:
diff --git a/t/libobj15c.sh b/t/libobj15c.sh
new file mode 100644
index 000000000..b03451335
--- /dev/null
+++ b/t/libobj15c.sh
@@ -0,0 +1,50 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Nonexistent sources for AC_LIBSOURCES should cause Automake to fail.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_RANLIB
+AC_LIBSOURCES([foobar.c, bazquux.c])
+# NOTE: this call to AC_OUTPUT is really needed; see Automake bug #7635
+# <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=7635>
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+noinst_LIBRARIES = libtu.a
+libtu_a_SOURCES =
+libtu_a_LIBADD = $(LIBOBJS)
+END
+
+# Don't trip on errors due to missing 'AM_PROG_AR'.
+AUTOMAKE="$AUTOMAKE -Wno-extra-portability"
+
+$ACLOCAL
+
+AUTOMAKE_fails
+grep 'configure\.ac:.*required file.*foobar\.c.*' stderr
+grep 'configure\.ac:.*required file.*bazquux\.c.*' stderr
+
+: > foobar.c
+AUTOMAKE_fails
+grep 'configure\.ac:.*required file.*bazquux\.c.*' stderr
+grep 'foobar\.c' stderr && exit 1
+
+:
diff --git a/t/libobj16a.sh b/t/libobj16a.sh
new file mode 100644
index 000000000..dcd46666f
--- /dev/null
+++ b/t/libobj16a.sh
@@ -0,0 +1,139 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure AC_LIBOBJ and friends work.
+# Please keep this in sync with sister test 'libobj16b.sh'.
+
+required=cc
+. test-init.sh
+
+mv configure.ac configure.proto
+cat >> configure.proto << 'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+%LIBOBJ-STUFF% # Will be activated later.
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+noinst_LIBRARIES = libtu.a
+libtu_a_SOURCES =
+libtu_a_LIBADD = $(LIBOBJS)
+
+include extra-checks.am
+.PHONY: $(extra_checks) pre-test
+
+pre-test: distdir
+ ls -l $(srcdir) $(builddir) $(distdir)
+ $(AR) tv libtu.a
+$(extra_checks): pre-test
+check-local: $(extra_checks)
+
+maude-src:
+ grep dummy_maude $(srcdir)/maude.c
+maude-dist:
+ grep dummy_maude $(distdir)/maude.c
+liver-src:
+ grep dummy_liver $(srcdir)/liver.c
+liver-dist:
+ grep dummy_liver $(distdir)/liver.c
+liver-not-dist: distdir
+ test ! -r $(distdir)/liver.c
+maude-not-dist: distdir
+ test ! -r $(distdir)/maude.c
+maude-lib:
+ $(AR) t libtu.a | grep maude
+maude-not-lib:
+ $(AR) t libtu.a | grep maude && exit 1; exit 0
+liver-lib:
+ $(AR) t libtu.a | grep liver
+liver-not-lib:
+ $(AR) t libtu.a | grep liver && exit 1; exit 0
+END
+
+cat > maude.c << 'END'
+extern int dummy_maude;
+END
+
+cat > liver.c << 'END'
+extern int dummy_liver;
+END
+
+sed '/%LIBOBJ-STUFF%/{
+s/.*//
+i\
+AC_LIBOBJ([maude])
+}' configure.proto > configure.ac
+cat configure.ac # For debugging.
+
+cat > extra-checks.am << 'END'
+extra_checks = maude-src maude-dist maude-lib liver-not-dist
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+./configure
+
+$MAKE
+$MAKE check
+$MAKE distcheck
+$MAKE distclean
+
+# Avoid timestamp-related differences.
+rm -rf autom4te*.cache
+
+cat > extra-checks.am << 'END'
+extra_checks = maude-src maude-dist liver-src liver-dist
+if MAUDE_COND
+extra_checks += maude-lib liver-not-lib
+else
+extra_checks += maude-not-lib liver-lib
+endif
+END
+
+sed '/%LIBOBJ-STUFF%/{
+s/.*//
+i\
+AM_CONDITIONAL([MAUDE_COND], [test x"$MAUDE" = x"yes"])\
+if test x"$MAUDE" = x"yes"; then\
+ AC_LIBOBJ([maude])\
+else\
+ AC_LIBOBJ([liver])\
+fi\
+AC_LIBSOURCES([maude.c, liver.c])
+}' configure.proto > configure.ac
+cat configure.ac # For debugging.
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure MAUDE=yes
+$MAKE
+$MAKE check
+$MAKE distcheck
+$MAKE distclean
+
+./configure MAUDE=no
+$MAKE
+$MAKE check
+$MAKE distcheck
+$MAKE distclean
+
+:
diff --git a/t/libobj16b.sh b/t/libobj16b.sh
new file mode 100644
index 000000000..be1d32829
--- /dev/null
+++ b/t/libobj16b.sh
@@ -0,0 +1,140 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure AC_LIBOBJ and friends work.
+# Please keep this in sync with sister test 'libobj16a.sh'.
+
+required=cc
+. test-init.sh
+
+mv configure.ac configure.proto
+cat >> configure.proto << 'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+%LIBOBJ-STUFF% # Will be activated later.
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+noinst_LIBRARIES = libtu.a
+libtu_a_SOURCES =
+libtu_a_LIBADD = @LIBOBJS@
+
+include extra-checks.am
+.PHONY: $(extra_checks) pre-test
+
+pre-test: distdir
+ ls -l $(srcdir) $(builddir) $(distdir)
+ $(AR) tv libtu.a
+$(extra_checks): pre-test
+check-local: $(extra_checks)
+
+maude-src:
+ grep dummy_maude $(srcdir)/maude.c
+maude-dist:
+ grep dummy_maude $(distdir)/maude.c
+liver-src:
+ grep dummy_liver $(srcdir)/liver.c
+liver-dist:
+ grep dummy_liver $(distdir)/liver.c
+liver-not-dist: distdir
+ test ! -r $(distdir)/liver.c
+maude-not-dist: distdir
+ test ! -r $(distdir)/maude.c
+maude-lib:
+ $(AR) t libtu.a | grep maude
+maude-not-lib:
+ $(AR) t libtu.a | grep maude && exit 1; exit 0
+liver-lib:
+ $(AR) t libtu.a | grep liver
+liver-not-lib:
+ $(AR) t libtu.a | grep liver && exit 1; exit 0
+END
+
+cat > maude.c << 'END'
+extern int dummy_maude;
+END
+
+cat > liver.c << 'END'
+extern int dummy_liver;
+END
+
+sed '/%LIBOBJ-STUFF%/{
+s/.*//
+i\
+AC_LIBOBJ(maude) dnl: do not quote this!
+}' configure.proto > configure.ac
+cat configure.ac # For debugging.
+
+cat > extra-checks.am << 'END'
+extra_checks = maude-src maude-dist maude-lib liver-not-dist
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+./configure
+
+$MAKE
+$MAKE check
+$MAKE distcheck
+$MAKE distclean
+
+# Avoid timestamp-related differences.
+rm -rf autom4te*.cache
+
+cat > extra-checks.am << 'END'
+extra_checks = maude-src maude-dist liver-src liver-dist
+if MAUDE_COND
+extra_checks += maude-lib liver-not-lib
+else
+extra_checks += maude-not-lib liver-lib
+endif
+END
+
+sed '/%LIBOBJ-STUFF%/{
+s/.*//
+i\
+AM_CONDITIONAL([MAUDE_COND], [test x"$MAUDE" = x"yes"])\
+if test x"$MAUDE" = x"yes"; then\
+ AC_LIBOBJ(maude) dnl: do not quote this!\
+else\
+ AC_LIBOBJ(liver) dnl: do not quote this!\
+fi\
+AC_LIBSOURCE(maude.c) dnl: do not quote this!\
+AC_LIBSOURCE(liver.c) dnl: do not quote this!
+}' configure.proto > configure.ac
+cat configure.ac # For debugging.
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure MAUDE=yes
+$MAKE
+$MAKE check
+$MAKE distcheck
+$MAKE distclean
+
+./configure MAUDE=no
+$MAKE
+$MAKE check
+$MAKE distcheck
+$MAKE distclean
+
+:
diff --git a/t/libobj17.sh b/t/libobj17.sh
new file mode 100644
index 000000000..85e84d597
--- /dev/null
+++ b/t/libobj17.sh
@@ -0,0 +1,72 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure AC_LIBOBJ accept non-literal arguments.
+
+required=cc
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_RANLIB
+AM_PROG_AR
+foo=${FOO-oops}
+AC_LIBSOURCES([quux.c, zardoz.c])
+AC_LIBOBJ([$foo])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+noinst_LIBRARIES = libtu.a
+libtu_a_SOURCES =
+libtu_a_LIBADD = $(LIBOBJS)
+.PHONY: check-quux check-zardoz
+check-quux:
+ $(AR) t libtu.a | grep quux
+ $(AR) t libtu.a | grep zardoz && exit 1; exit 0
+check-zardoz:
+ $(AR) t libtu.a | grep zardoz
+ $(AR) t libtu.a | grep quux && exit 1; exit 0
+END
+
+cat > quux.c <<'END'
+extern int dummy;
+END
+
+cat > zardoz.c <<'END'
+extern int dummy;
+END
+
+# These might print warnings, but should not error out.
+$ACLOCAL
+$AUTOMAKE -a
+$AUTOCONF
+
+./configure FOO=quux
+$MAKE
+ls -l # For debugging.
+test -f libtu.a
+$MAKE check-quux
+
+$MAKE distclean
+
+./configure FOO=zardoz
+$MAKE
+ls -l # For debugging.
+test -f libtu.a
+$MAKE check-zardoz
+
+:
diff --git a/t/libobj18.sh b/t/libobj18.sh
new file mode 100644
index 000000000..c920b071b
--- /dev/null
+++ b/t/libobj18.sh
@@ -0,0 +1,45 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure AC_LIBSOURCE and AC_LIBSOURCES use arguments literally.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+foo=dummy bar=dummy baz=dummy
+AC_LIBSOURCE([$foo.c])
+AC_LIBSOURCES([$bar.c, $baz.c])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+noinst_LIBRARIES = libtu.a
+libtu_a_SOURCES =
+libtu_a_LIBADD = $(LIBOBJS)
+END
+
+: > dummy.c
+
+$ACLOCAL
+AUTOMAKE_fails
+grep 'configure\.ac:.*required file.*\$foo\.c.*not found' stderr
+grep 'configure\.ac:.*required file.*\$bar\.c.*not found' stderr
+grep 'configure\.ac:.*required file.*\$baz\.c.*not found' stderr
+
+:
diff --git a/t/libobj19.sh b/t/libobj19.sh
new file mode 100644
index 000000000..21ce31e50
--- /dev/null
+++ b/t/libobj19.sh
@@ -0,0 +1,94 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test support for AC_CONFIG_LIBOBJ_DIR.
+
+required=cc
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_LIBOBJ_DIR([libobj-dir])
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+AC_LIBOBJ([foobar])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = subdir-objects
+noinst_LIBRARIES = libtu.a
+libtu_a_SOURCES =
+libtu_a_LIBADD = $(LIBOBJS)
+## Hack with this variable ans with extra make recursion in the check-local
+## rule are required for when we move this Makefile in a subdir, later.
+my_distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)
+check-local:
+ (cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) distdir)
+ ls -l $(top_srcdir)/* $(top_builddir)/* $(my_distdir)/*
+ test -f libtu.a
+ test ! -r $(top_srcdir)/foobar.c
+ test -f $(top_srcdir)/libobj-dir/foobar.c
+ test ! -r $(my_distdir)/foobar.c
+ test -f $(my_distdir)/libobj-dir/foobar.c
+ $(AR) t libtu.a
+ $(AR) t libtu.a | grep foobar
+END
+
+mkdir libobj-dir
+cat > libobj-dir/foobar.c << 'END'
+extern int dummy;
+END
+
+cp "$am_scriptdir/ar-lib" . || fatal_ "fetching auxiliary script 'ar-lib'"
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+
+$MAKE
+$MAKE check
+$MAKE distcheck
+
+# Same check, but with the Makefile.am using $(LIBOBJS) not being
+# the top-level one.
+
+$MAKE distclean
+rm -rf autom4te*.cache aclocal.m4 configure
+
+mkdir sub
+mv -f Makefile.am sub
+echo SUBDIRS = sub > Makefile.am
+
+sed '/^AC_OUTPUT/i\
+AC_CONFIG_FILES([sub/Makefile])
+' configure.ac > t
+mv -f t configure.ac
+cat configure.ac # For debugging.
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+
+$MAKE
+$MAKE check
+$MAKE distcheck
+
+:
diff --git a/t/libobj2.sh b/t/libobj2.sh
new file mode 100644
index 000000000..c52ae31a5
--- /dev/null
+++ b/t/libobj2.sh
@@ -0,0 +1,68 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure LIBOBJS works in subdirs.
+# Bug from Josh MacDonald.
+
+required=cc
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_FILES([subdir/Makefile])
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+AC_CHECK_TOOLS([AR], [ar])
+AC_LIBOBJ([fsusage])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+SUBDIRS = subdir
+check-local: distdir
+ ls -l $(srcdir) $(srcdir)/subdir
+ ls -l $(distdir) $(distdir)/subdir
+ ls -l $(builddir) $(builddir)/subdir
+ test -f $(srcdir)/subdir/fsusage.c
+ test -f $(distdir)/subdir/fsusage.c
+ $(AR) tv $(builddir)/subdir/libtu.a
+END
+
+mkdir subdir
+
+cat > subdir/Makefile.am << 'END'
+noinst_LIBRARIES = libtu.a
+libtu_a_SOURCES =
+libtu_a_LIBADD = @LIBOBJS@
+END
+
+cat > subdir/fsusage.c << 'END'
+extern int dummy;
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+# Older grepping check, kept "just to be sure".
+$FGREP 'fsusage.c' subdir/Makefile.in
+
+./configure
+
+$MAKE check
+$MAKE distcheck
+
+:
diff --git a/t/libobj20a.sh b/t/libobj20a.sh
new file mode 100644
index 000000000..b07a6bb3c
--- /dev/null
+++ b/t/libobj20a.sh
@@ -0,0 +1,45 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test error reporting for AC_CONFIG_LIBOBJ_DIR.
+# See also sister tests 'libobj20b.sh' and 'libobj20c.sh'.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_LIBOBJ_DIR([libobj-dir])
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+AC_LIBOBJ([foo])
+END
+
+cat > Makefile.am << 'END'
+noinst_LIBRARIES = libtu.a
+libtu_a_SOURCES =
+libtu_a_LIBADD = $(LIBOBJS)
+END
+
+mkdir libobj-dir
+: > libobj-dir/foo.c
+: > ar-lib
+
+$ACLOCAL
+AUTOMAKE_fails
+grep 'LIBOBJS.*used outside.*libobj-dir' stderr
+grep 'subdir-objects.*not set' stderr
+
+:
diff --git a/t/libobj20b.sh b/t/libobj20b.sh
new file mode 100644
index 000000000..3a466bf07
--- /dev/null
+++ b/t/libobj20b.sh
@@ -0,0 +1,57 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test error reporting for AC_CONFIG_LIBOBJ_DIR.
+# See also sister tests 'libobj20a.sh' and 'libobj20c.sh'.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_LIBOBJ_DIR([libobj-dir])
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+AC_LIBSOURCE([foobar.c])
+# NOTE: this call to AC_OUTPUT is really needed; see Automake bug #7635
+# <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=7635>
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = subdir-objects
+noinst_LIBRARIES = libtu.a
+libtu_a_SOURCES =
+libtu_a_LIBADD = $(LIBOBJS)
+END
+
+: > ar-lib
+
+$ACLOCAL
+
+AUTOMAKE_fails
+grep 'configure\.ac:.*required directory.*libobj-dir' stderr
+
+mkdir libobj-dir
+: > foobar.c # Oops, it should be in libobj-dir!
+AUTOMAKE_fails
+grep 'configure\.ac:.*required file.*libobj-dir/foobar.c.*' stderr
+
+rm -f foobar.c
+
+: > libobj-dir/foobar.c
+$AUTOMAKE # Now we should succeed.
+
+:
diff --git a/t/libobj20c.sh b/t/libobj20c.sh
new file mode 100644
index 000000000..b12eea618
--- /dev/null
+++ b/t/libobj20c.sh
@@ -0,0 +1,54 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test error reporting for AC_CONFIG_LIBOBJ_DIR.
+# See also sister tests 'libobj20a.sh' and 'libobj20b.sh'.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_LIBOBJ_DIR([libobj-dir])
+AC_PROG_CC
+AC_PROG_RANLIB
+AC_LIBOBJ([foobar])
+END
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = subdir-objects
+noinst_LIBRARIES = libtu.a
+libtu_a_SOURCES =
+libtu_a_LIBADD = $(LIBOBJS)
+END
+
+$ACLOCAL
+
+# Don't trip on errors due to missing 'AM_PROG_AR'.
+AUTOMAKE="$AUTOMAKE -Wno-extra-portability"
+
+AUTOMAKE_fails
+grep 'configure\.ac:.*required directory.*\./libobj-dir' stderr
+
+mkdir libobj-dir
+: > foobar.c # Oops, it should be in libobj-dir!
+AUTOMAKE_fails
+grep 'configure\.ac:.*required file.*libobj-dir/foobar.c.*' stderr
+
+rm -f foobar.c
+
+: > libobj-dir/foobar.c
+$AUTOMAKE # Now we should succeed.
+
+:
diff --git a/t/libobj3.sh b/t/libobj3.sh
new file mode 100644
index 000000000..2d0e6b017
--- /dev/null
+++ b/t/libobj3.sh
@@ -0,0 +1,39 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure we complain if @LIBOBJS@ is used without being set in
+# configure.ac.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_RANLIB
+AM_PROG_AR
+END
+
+cat > Makefile.am << 'END'
+noinst_LIBRARIES = libtu.a
+libtu_a_SOURCES =
+libtu_a_LIBADD = @LIBOBJS@
+END
+
+: > ar-lib
+
+$ACLOCAL
+AUTOMAKE_fails
+grep 'Makefile\.am:3:.*LIBOBJS' stderr
+
+:
diff --git a/t/libobj4.sh b/t/libobj4.sh
new file mode 100644
index 000000000..daefa43bb
--- /dev/null
+++ b/t/libobj4.sh
@@ -0,0 +1,34 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure LIBOBJS error only occurs if LIBOBJS seen. Report
+# from Jim Meyering.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo
+END
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_REPLACE_FUNCS([foo])
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+:
diff --git a/t/libobj5.sh b/t/libobj5.sh
new file mode 100644
index 000000000..e5769e372
--- /dev/null
+++ b/t/libobj5.sh
@@ -0,0 +1,39 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure AC_REPLACE_FUNCS works across lines. Report from
+# Jim Meyering.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = joe
+LDADD = @LIBOBJS@
+END
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_REPLACE_FUNCS(\
+ foo_bar_quux)
+END
+
+: > foo_bar_quux.c
+
+$ACLOCAL
+$AUTOMAKE
+$FGREP foo_bar_quux.c Makefile.in
+
+:
diff --git a/t/libobj7.sh b/t/libobj7.sh
new file mode 100644
index 000000000..0ec302e81
--- /dev/null
+++ b/t/libobj7.sh
@@ -0,0 +1,72 @@
+#! /bin/sh
+# Copyright (C) 1997-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for multiple replacement functions.
+
+required=cc
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+# 'am__dummy_function' is there to ensure that at least one function is
+# replaced, to avoid creating an empty archive which can cause problems
+# with e.g. Solaris ar.
+AC_REPLACE_FUNCS([basename dirname am__dummy_function])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+noinst_LIBRARIES = libtu.a
+libtu_a_SOURCES =
+libtu_a_LIBADD = @LIBOBJS@
+check-local: test1 test2 test3
+.PHONY: test1 test2 test3
+test1: all
+ $(AR) tv libtu.a
+test2:
+ @echo DIST_COMMON = $(DIST_COMMON)
+ echo ' ' $(DIST_COMMON) ' ' | grep '[ /]basename\.c '
+ echo ' ' $(DIST_COMMON) ' ' | grep '[ /]dirname\.c '
+ echo ' ' $(DIST_COMMON) ' ' | grep '[ /]am__dummy_function\.c '
+test3: distdir
+ test -f $(distdir)/basename.c
+ test -f $(distdir)/dirname.c
+ test -f $(distdir)/am__dummy_function.c
+END
+
+cat > basename.c <<'END'
+extern int dummy1;
+END
+cat > dirname.c <<'END'
+extern int dummy2;
+END
+cat > am__dummy_function.c <<'END'
+extern int dummy3;
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+./configure
+
+$MAKE
+$MAKE check
+$MAKE distcheck
+
+:
diff --git a/t/library.sh b/t/library.sh
new file mode 100644
index 000000000..1d0e487d3
--- /dev/null
+++ b/t/library.sh
@@ -0,0 +1,36 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for _DEPENDENCIES with libraries.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_RANLIB
+AC_PROG_CC
+AM_PROG_AR
+END
+
+cat > Makefile.am << 'END'
+lib_LIBRARIES = libfoo.a
+libfoo_a_DEPENDENCIES = libzot.a
+END
+
+: > ar-lib
+$ACLOCAL
+$AUTOMAKE
+
+:
diff --git a/t/library2.sh b/t/library2.sh
new file mode 100644
index 000000000..72eae1f83
--- /dev/null
+++ b/t/library2.sh
@@ -0,0 +1,31 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure Automake suggest using AC_PROG_RANLIB when *_LIBRARIES is used.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+END
+
+cat > Makefile.am << 'END'
+EXTRA_LIBRARIES = libfoo.a
+END
+
+$ACLOCAL
+AUTOMAKE_fails -Wno-portability
+grep AC_PROG_RANLIB stderr
diff --git a/t/library3.sh b/t/library3.sh
new file mode 100644
index 000000000..2068c101f
--- /dev/null
+++ b/t/library3.sh
@@ -0,0 +1,54 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure Automake simplify conditions in diagnostics.
+
+. test-init.sh
+
+cat >>configure.ac <<EOF
+AC_PROG_CC
+AM_CONDITIONAL([A], [:])
+AM_CONDITIONAL([B], [:])
+AM_CONDITIONAL([C], [:])
+AM_CONDITIONAL([D], [:])
+EOF
+
+cat > Makefile.am << 'END'
+if A
+if !B
+ RANLIB = anb
+else
+ RANLIB = ab
+endif
+endif
+if C
+ RANLIB = c
+endif
+if !C
+if D
+ RANLIB = ncd
+endif
+endif
+EXTRA_LIBRARIES = libfoo.a
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+grep '^Makefile.am:.*: !A and !C and !D$' stderr
+# Is there only one missing condition?
+test $(grep -c ': !' stderr) -eq 1
+
+:
diff --git a/t/libtoo10.sh b/t/libtoo10.sh
new file mode 100644
index 000000000..ddc83b6c0
--- /dev/null
+++ b/t/libtoo10.sh
@@ -0,0 +1,62 @@
+#! /bin/sh
+# Copyright (C) 2007-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure .libs directories are removed for _PROGRAMS.
+# Report from Guillermo Ontañón.
+
+required='cc libtoolize'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_PROG_AR
+AC_PROG_LIBTOOL
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+lib_LTLIBRARIES = lib/libfoo.la
+lib_libfoo_la_SOURCES = foo.c
+bin_PROGRAMS = src/main
+check_PROGRAMS = check/test
+src_main_SOURCES = main.c
+check_test_SOURCES = main.c
+LDADD = lib/libfoo.la
+END
+
+mkdir lib src check
+cat > foo.c << 'END'
+int foo () { return 0; }
+END
+
+cat > main.c << 'END'
+extern int foo ();
+int main () { return foo (); }
+END
+
+libtoolize
+$ACLOCAL
+$AUTOMAKE --add-missing
+$AUTOCONF
+./configure
+$MAKE all check
+$MAKE clean
+test ! -e src/.libs
+test ! -e src/_libs
+test ! -e check/.libs
+test ! -e check/_libs
+$MAKE distcheck
+
+:
diff --git a/t/libtoo11.sh b/t/libtoo11.sh
new file mode 100644
index 000000000..900b3bec6
--- /dev/null
+++ b/t/libtoo11.sh
@@ -0,0 +1,38 @@
+#! /bin/sh
+# Copyright (C) 2008-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure config.lt is removed with Libtool 2.2.x's LT_OUTPUT.
+# Report by Charles Wilson.
+
+required='cc libtoolize'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_LIBTOOL
+m4_ifdef([LT_OUTPUT], [LT_OUTPUT])
+AC_OUTPUT
+END
+
+: > Makefile.am
+
+libtoolize
+$ACLOCAL
+$AUTOMAKE --add-missing
+$AUTOCONF
+./configure
+$MAKE distcheck
+
+:
diff --git a/t/libtool-macros.sh b/t/libtool-macros.sh
new file mode 100644
index 000000000..903a25d3f
--- /dev/null
+++ b/t/libtool-macros.sh
@@ -0,0 +1,60 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Try to find the libtool '.m4' files and make them easily accessed
+# to the test cases requiring them.
+# See also automake bug#9807.
+
+. test-init.sh
+
+echo "# Automatically generated by $me." > get.sh
+echo : >> get.sh
+
+# The 'libtoolize' script will look into Makefile.am.
+echo ACLOCAL_AMFLAGS = -I m4 > Makefile.am
+
+if libtoolize --copy --install && test -f m4/libtool.m4; then
+ echo "ACLOCAL_PATH='$(pwd)/m4':\$ACLOCAL_PATH" >> get.sh
+ echo "export ACLOCAL_PATH" >> get.sh
+else
+ # Libtoolize from libtool < 2.0 didn't support the '--install' option,
+ # but this doesn't mean the user hasn't made the libtool macros
+ # available, e.g., by properly setting ACLOCAL_PATH.
+ rm -rf m4
+ mkdir m4
+ echo AC_PROG_LIBTOOL >> configure.ac
+ # See below for an explanation about the use the of '-Wno-syntax'.
+ if $ACLOCAL -Wno-syntax -I m4 --install && test -f m4/libtool.m4; then
+ : # Libtool macros already accessible by default.
+ else
+ echo "skip_all_ \"couldn't find or get libtool macros\"" >> get.sh
+ fi
+fi
+
+. ./get.sh
+
+$ACLOCAL --force -I m4 || cat >> get.sh <<'END'
+# We need to use '-Wno-syntax', since we do not want our test suite
+# to fail merely because some third-party '.m4' file is underquoted.
+ACLOCAL="$ACLOCAL -Wno-syntax"
+END
+
+# The file libtoolize might have just copied in the 'm4' subdirectory of
+# the test directory are going to be needed by other tests, so we must
+# not remove the test directory.
+keep_testdirs=yes
+
+:
diff --git a/t/libtool.sh b/t/libtool.sh
new file mode 100644
index 000000000..eab01f037
--- /dev/null
+++ b/t/libtool.sh
@@ -0,0 +1,41 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure libtool is removed.
+# Report from Kevin Dalley.
+
+required=libtool
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_LIBTOOL_DLOPEN
+AC_DISABLE_SHARED
+AC_PROG_LIBTOOL
+AC_SUBST([LIBTOOL_DEPS])
+END
+
+: > Makefile.am
+
+: > ltmain.sh
+: > config.guess
+: > config.sub
+
+$ACLOCAL
+$AUTOMAKE
+
+grep 'rm -f libtool' Makefile.in
+
+:
diff --git a/t/libtool2.sh b/t/libtool2.sh
new file mode 100644
index 000000000..a14cae019
--- /dev/null
+++ b/t/libtool2.sh
@@ -0,0 +1,49 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure libtool clean targets exist.
+# Report from Eric Magnien.
+
+required=libtoolize
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_LIBTOOL
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+SUBDIR = subdir
+lib_LTLIBRARIES = libfoo.la
+libfoo_la_SOURCES = foo.c
+END
+
+mkdir sub
+cat > sub/Makefile.am << 'END'
+lib_LTLIBRARIES = libfoo.la
+libfoo_la_SOURCES = foo.c
+END
+
+$ACLOCAL
+: > ltmain.sh
+$AUTOMAKE -a
+
+grep 'rm -f .*\.lo' sub/Makefile.in
+
+:
diff --git a/t/libtool3.sh b/t/libtool3.sh
new file mode 100644
index 000000000..5e5fd0df3
--- /dev/null
+++ b/t/libtool3.sh
@@ -0,0 +1,94 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Try to build and package a program linked to a Libtool library.
+# Also make sure we do not bloat the Makefile with unneeded rules.
+
+required='cc libtoolize'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_AR
+AM_PROG_LIBTOOL
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+# FIXME: stop disabling the warnings in the 'unsupported' category
+# FIXME: once the 'subdir-objects' option has been mandatory.
+AUTOMAKE_OPTIONS = -Wno-unsupported
+
+lib_LTLIBRARIES = lib0.la liba/liba.la
+lib0_la_SOURCES = 0.c
+liba_liba_la_SOURCES = liba/a.c
+
+bin_PROGRAMS = 1
+1_SOURCES = sub/1.c
+1_LDADD = lib0.la liba/liba.la
+END
+
+mkdir liba sub
+
+cat > 0.c << 'END'
+int
+zero (void)
+{
+ return 0;
+}
+END
+
+cat > sub/1.c << 'END'
+int zero ();
+
+int
+main (void)
+{
+ return zero ();
+}
+END
+
+cat > liba/a.c << 'END'
+int
+a (void)
+{
+ return 'a';
+}
+END
+
+# Use --copy to workaround a bug in Cygwin's 'cp -p' during distcheck.
+# (This bug is already exhibited by subobj9.sh.) In brief: Cygwin's
+# 'cp -p' tries to preserve group and owner of the source and fails
+# to do so under normal accounts. With --copy we ensure we own all files.
+
+libtoolize --force --copy
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing --copy
+
+# We need explicit rules to build 1.o and a.lo. Make sure
+# Automake did not output additional rules for 1.lo and and a.lo.
+$FGREP '1.o:' Makefile.in
+$FGREP '1.lo:' Makefile.in && exit 1
+$FGREP 'a.o:' Makefile.in && exit 1
+$FGREP 'a.lo:' Makefile.in
+
+./configure
+
+$MAKE
+$MAKE distcheck
+
+:
diff --git a/t/libtool4.sh b/t/libtool4.sh
new file mode 100644
index 000000000..0bfd2faa7
--- /dev/null
+++ b/t/libtool4.sh
@@ -0,0 +1,37 @@
+#!/bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure Automake suggests AC_PROG_LIBTOOL when *_LTLIBRARIES is used.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_PROG_CC
+AM_PROG_AR
+END
+
+cat > Makefile.am << 'END'
+EXTRA_LTLIBRARIES = liblib.la
+END
+
+: > ar-lib
+
+$ACLOCAL
+AUTOMAKE_fails
+grep '[Ll]ibtool library .*LIBTOOL.* undefined' stderr
+grep 'define .*LIBTOOL.* add .*LT_INIT' stderr
+
+:
diff --git a/t/libtool5.sh b/t/libtool5.sh
new file mode 100644
index 000000000..ccbeb3ce2
--- /dev/null
+++ b/t/libtool5.sh
@@ -0,0 +1,44 @@
+#!/bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure it's ok to install a library under different conditions
+# in the same directory.
+# Report from Harlan Stenn.
+
+required='libtoolize'
+. test-init.sh
+
+cat >>configure.ac <<'END'
+AM_CONDITIONAL([COND1], [true])
+AM_CONDITIONAL([COND2], [false])
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_LIBTOOL
+AC_OUTPUT
+END
+
+cat >Makefile.am <<'END'
+if COND1
+ lib_LTLIBRARIES = liba.la
+endif
+if COND2
+ lib_LTLIBRARIES = liba.la
+endif
+END
+
+libtoolize
+$ACLOCAL
+$AUTOMAKE --add-missing
diff --git a/t/libtool6.sh b/t/libtool6.sh
new file mode 100644
index 000000000..905c35267
--- /dev/null
+++ b/t/libtool6.sh
@@ -0,0 +1,47 @@
+#!/bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure it's OK to install a library under different conditions
+# in different directories. PR/285.
+
+required='libtoolize'
+. test-init.sh
+
+cat >>configure.ac <<'END'
+AM_CONDITIONAL([COND1], [true])
+AM_CONDITIONAL([COND2], [false])
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_LIBTOOL
+AC_OUTPUT
+END
+
+cat >Makefile.am <<'END'
+if COND1
+ lib_LTLIBRARIES = liba.la
+endif
+if COND2
+ pkglib_LTLIBRARIES = liba.la
+endif
+END
+
+libtoolize
+$ACLOCAL
+$AUTOMAKE --add-missing
+# am_liba_la_rpath is defined twice, and used once
+test 3 -eq $(grep -c 'am_liba_la_rpath' Makefile.in)
+
+:
diff --git a/t/libtool7.sh b/t/libtool7.sh
new file mode 100644
index 000000000..3e6342d99
--- /dev/null
+++ b/t/libtool7.sh
@@ -0,0 +1,98 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure we allow Libtool's -dlopen/-dlpreopen
+# Also check basic support for AM_LIBTOOLFLAGS/LIBTOOLFLAGS
+
+required='cc libtoolize'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_LIBTOOL_DLOPEN
+AM_PROG_LIBTOOL
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = subdir-objects
+AM_LIBTOOLFLAGS = --silent
+lib_LTLIBRARIES = libmod1.la mod2.la
+libmod1_la_SOURCES = sub/mod1.c
+libmod1_la_LDFLAGS = -module
+libmod1_la_LIBADD = -dlopen mod2.la
+mod2_la_SOURCES = mod2.c
+mod2_la_LDFLAGS = -module
+mod2_la_LIBTOOLFLAGS =
+
+bin_PROGRAMS = prg
+prg_SOURCES = prg.c
+prg_LDADD = -dlopen libmod1.la -dlpreopen mod2.la
+
+.PHONY: print
+print:
+ @echo 1BEG: $(prg_DEPENDENCIES) :END1
+ @echo 2BEG: $(libmod1_la_DEPENDENCIES) :END2
+ @echo 3BEG: $(LTCOMPILE) :END3
+END
+
+mkdir sub liba
+
+cat > sub/mod1.c << 'END'
+int mod1 (void)
+{
+ return 1;
+}
+END
+
+cat > mod2.c << 'END'
+int mod2 (void)
+{
+ return 2;
+}
+END
+
+cat > prg.c << 'END'
+int main (void)
+{
+ return 0;
+}
+END
+
+libtoolize --force --copy
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing --copy
+
+./configure "--prefix=$(pwd)/_inst"
+
+run_make -M print LIBTOOLFLAGS=--silent
+grep '1BEG: libmod1.la mod2.la :END1' output
+grep '2BEG: mod2.la :END2' output
+grep '3BEG: .*silent.*silent.* :END3' output
+test 2 -le $(grep mod2_la_LIBTOOLFLAGS Makefile | wc -l)
+
+$MAKE
+
+run_make -M install LIBTOOLFLAGS=--silent
+grep 'silent.*silent.*prg' output
+grep 'silent.*silent.*libmod1' output
+
+run_make -M uninstall LIBTOOLFLAGS=--silent
+grep 'silent.*silent.*libmod1' output
+
+:
diff --git a/t/libtool8.sh b/t/libtool8.sh
new file mode 100644
index 000000000..1e983401e
--- /dev/null
+++ b/t/libtool8.sh
@@ -0,0 +1,53 @@
+#!/bin/sh
+# Copyright (C) 2004-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure Automake diagnoses conflicting installations.
+
+required='libtoolize'
+. test-init.sh
+
+cat >>configure.ac <<'END'
+AM_CONDITIONAL([COND1], [true])
+AM_CONDITIONAL([COND2], [false])
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_LIBTOOL
+AC_OUTPUT
+END
+
+cat >Makefile.am <<'END'
+if COND1
+ lib_LTLIBRARIES = liba.la
+ EXTRA_LTLIBRARIES = libc.la libc.la libb.la
+else
+ lib_LTLIBRARIES = libb.la
+endif
+if COND2
+if COND1
+ pkglib_LTLIBRARIES = liba.la
+endif
+LIBTOOLFLAGS = ouch
+endif
+END
+
+libtoolize
+$ACLOCAL
+AUTOMAKE_fails --add-missing
+grep libb stderr && exit 1
+grep 'Makefile.am:3:.*libc.la.*multiply defined' stderr
+grep "Makefile.am:9:.*'pkglib" stderr
+grep "Makefile.am:2:.*'lib" stderr
+grep 'Makefile.am:11:.*AM_LIBTOOLFLAGS' stderr
diff --git a/t/libtool9.sh b/t/libtool9.sh
new file mode 100644
index 000000000..a4c392661
--- /dev/null
+++ b/t/libtool9.sh
@@ -0,0 +1,106 @@
+#! /bin/sh
+# Copyright (C) 2005-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure xxx_LINK is defined for each target that requires specific
+# flags.
+# Quite similar to 'libtool7.sh', using AM_LDFLAGS in addition to
+# xxx_LDFLAGS.
+
+required='cc libtoolize'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_LIBTOOL_DLOPEN
+AM_PROG_LIBTOOL
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AM_LDFLAGS = -module
+lib_LTLIBRARIES = libmod1.la mod2.la
+libmod1_la_SOURCES = mod1.c
+libmod1_la_LDFLAGS =
+libmod1_la_LIBADD = -dlopen mod2.la
+mod2_la_SOURCES = mod2.c
+
+bin_PROGRAMS = prg prg2
+prg_SOURCES = prg.c
+prg_LDADD = -dlopen libmod1.la -dlpreopen mod2.la
+prg_CPPFLAGS = -DXYZ=1
+prg2_SOURCES = prg.c
+prg2_CFLAGS =
+
+print:
+ @echo 1BEG: $(prg_DEPENDENCIES) :END1
+ @echo 2BEG: $(libmod1_la_DEPENDENCIES) :END2
+ @echo 3BEG: $(libmod1_la_LINK) :END3
+ @echo 4BEG: $(mod2_la_LINK) :END4
+ @echo 5BEG: $(prg_LINK) :END5
+ @echo 6BEG: $(prg2_LINK) :END6
+
+END
+
+mkdir liba
+
+cat > mod1.c << 'END'
+int mod1 (void)
+{
+ return 1;
+}
+END
+
+cat > mod2.c << 'END'
+int mod2 (void)
+{
+ return 2;
+}
+END
+
+cat > prg.c << 'END'
+int main (void)
+{
+ return 0;
+}
+END
+
+libtoolize --force --copy
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing --copy
+
+./configure
+run_make -M -- print \
+ LDFLAGS=ldflags \
+ AM_LDFLAGS=am_ldflags \
+ libmod1_la_LDFLAGS=lm1_la_ldflags \
+ CFLAGS=cflags \
+ AM_CFLAGS=am_cflags \
+ prg2_CFLAGS=prg2_cflags
+
+grep '1BEG: libmod1.la mod2.la :END1' output
+grep '2BEG: mod2.la :END2' output
+grep '3BEG:.* am_cflags cflags .*lm1_la_ldflags ldflags.* :END3' output
+grep '3BEG: .*am_ldflags.* :END3' output && exit 1
+grep '4BEG: :END4' output
+grep '5BEG: :END5' output
+grep '6BEG:.* prg2_cflags cflags .*am_ldflags ldflags.* :END6' output
+grep '6BEG: .*am_cflags.* :END6' output && exit 1
+
+$MAKE
+
+:
diff --git a/t/license.sh b/t/license.sh
new file mode 100644
index 000000000..13813d111
--- /dev/null
+++ b/t/license.sh
@@ -0,0 +1,61 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure COPYING is not overwritten, even with -a -f.
+
+. test-init.sh
+
+echo AC_OUTPUT >>configure.ac
+
+cat >Makefile.am <<\EOF
+test1: distdir
+ grep 'GNU GENERAL PUBLIC LICENSE' $(distdir)/COPYING
+test2: distdir
+ grep 'MY-OWN-LICENSE' $(distdir)/COPYING
+test3: distdir
+ test ! -f $(distdir)/COPYING
+ grep 'MY-OWN-LICENSE' $(distdir)/COPYING.LIB
+EOF
+
+:> NEWS
+:> AUTHORS
+:> ChangeLog
+:> README
+
+test ! -e COPYING
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --gnu --add-missing
+
+./configure
+$MAKE test1
+
+# Use 'rm' before 'echo', because COPYING is likely to be a symlink to
+# the real COPYING...
+rm -f COPYING
+echo 'MY-OWN-LICENSE' >COPYING
+$MAKE test2
+
+$AUTOMAKE --gnu --add-missing --force-missing
+./configure
+$MAKE test2
+
+rm -f COPYING
+echo 'MY-OWN-LICENSE' >COPYING.LIB
+$AUTOMAKE --gnu --add-missing --force-missing
+./configure
+$MAKE test3
diff --git a/t/license2.sh b/t/license2.sh
new file mode 100644
index 000000000..12bb31a6b
--- /dev/null
+++ b/t/license2.sh
@@ -0,0 +1,39 @@
+#! /bin/sh
+# Copyright (C) 2008-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that installing 'COPYING' outputs a warning.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = gnu
+END
+
+: >AUTHORS
+: >NEWS
+: >README
+: >ChangeLog
+: >INSTALL
+
+$ACLOCAL
+AUTOMAKE_fails
+grep 'COPYING' stderr
+
+AUTOMAKE_run --add-missing
+grep 'COPYING' stderr
+grep 'GNU General Public License' stderr
+grep 'Consider adding.*version control' stderr
+test -f COPYING
diff --git a/t/link_c_cxx.sh b/t/link_c_cxx.sh
new file mode 100644
index 000000000..0ac7c01bc
--- /dev/null
+++ b/t/link_c_cxx.sh
@@ -0,0 +1,45 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure the C++ linker is used when appropriate.
+# Matthew D. Langston <langston@SLAC.Stanford.EDU>
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_CXX
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = lavalamp
+lavalamp_SOURCES = lava.c lamp.cxx
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+# We should only see the C++ linker in the rules of 'Makefile.in'.
+
+# Look for this macro not at the beginning of any line; that will have
+# to be good enough for now.
+grep '.\$(CXXLINK)' Makefile.in
+
+# We should not see these patterns:
+grep '.\$(FLINK)' Makefile.in && exit 1
+grep '.\$(LINK)' Makefile.in && exit 1
+
+exit 0
diff --git a/t/link_cond.sh b/t/link_cond.sh
new file mode 100644
index 000000000..382e4a6e1
--- /dev/null
+++ b/t/link_cond.sh
@@ -0,0 +1,88 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test that automatic determination of the linker works well with
+# conditional use of languages in a single program.
+# This currently doesn't truly work, but we have an easy workaround
+# at least, that is tested here.
+# See automake bug#11089.
+
+required='cc c++'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_CXX
+AM_CONDITIONAL([HAVE_CXX], [test $have_cxx = yes])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo
+if HAVE_CXX
+foo_SOURCES = more.c++
+else
+foo_SOURCES = less.c
+endif
+## FIXME: ideally, this workaround shouldn't be needed.
+if HAVE_CXX
+foo_LINK = $(CXXLINK)
+else
+foo_LINK = $(LINK)
+endif
+END
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+rm -f *.c++
+cat > less.c <<'END'
+/* Valid C but deliberately invalid C++ */
+main ()
+{
+ int new = 0;
+ return new;
+}
+END
+
+./configure have_cxx=no
+run_make CXX=false
+
+# Sanity check.
+rm -f foo foo.exe
+run_make CC=false && fatal_ '"make CC=false" succeeded unexpectedly'
+
+$MAKE distclean
+
+rm -f *.c
+cat > more.c++ <<'END'
+/* Valid C++ but deliberately invalid C */
+using namespace std;
+int main (void)
+{
+ return 0;
+}
+END
+
+./configure have_cxx=yes
+run_make CC=false
+
+# Sanity check.
+rm -f foo foo.exe
+run_make CXX=false && fatal_ '"make CXX=false" succeeded unexpectedly'
+
+:
diff --git a/t/link_dist.sh b/t/link_dist.sh
new file mode 100644
index 000000000..b1bad18e9
--- /dev/null
+++ b/t/link_dist.sh
@@ -0,0 +1,47 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure the linker for a dist_*_SOURCES can override that for
+# *_SOURCES
+# Richard Boulton <richard@tartarus.org>
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_CXX
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = lavalamp
+lavalamp_SOURCES = lava.c
+dist_lavalamp_SOURCES = lamp.cxx
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+# We should only see the C++ linker in the rules of 'Makefile.in'.
+
+# Look for this macro not at the beginning of any line; that will have
+# to be good enough for now.
+grep '.\$(CXXLINK)' Makefile.in
+
+# We should not see these patterns:
+grep '.\$(FLINK)' Makefile.in && exit 1
+grep '.\$(LINK)' Makefile.in && exit 1
+
+exit 0
diff --git a/t/link_f90_only.sh b/t/link_f90_only.sh
new file mode 100644
index 000000000..79e7a2627
--- /dev/null
+++ b/t/link_f90_only.sh
@@ -0,0 +1,44 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure the Fortran 90 linker is used when appropriate.
+# (copied from 'link_f_only.sh') Mike Nolta <mrnolta@princeton.edu>
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_FC
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = lavalamp
+lavalamp_SOURCES = lamp.f90
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+# We should only see the Fortran linker in the rules of 'Makefile.in'.
+
+# Look for this macro not at the beginning of any line; that will have
+# to be good enough for now.
+grep '.\$(FCLINK)' Makefile.in
+
+# We should not see these patterns:
+grep '.\$(CXXLINK)' Makefile.in && exit 1
+grep '.\$(LINK)' Makefile.in && exit 1
+
+exit 0
diff --git a/t/link_f_only.sh b/t/link_f_only.sh
new file mode 100644
index 000000000..f8a9dcda0
--- /dev/null
+++ b/t/link_f_only.sh
@@ -0,0 +1,44 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure the Fortran 77 linker is used when appropriate.
+# Matthew D. Langston <langston@SLAC.Stanford.EDU>
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_F77
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = lavalamp
+lavalamp_SOURCES = lamp.f
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+# We should only see the Fortran linker in the rules of 'Makefile.in'.
+
+# Look for this macro not at the beginning of any line; that will have
+# to be good enough for now.
+grep '.\$(F77LINK)' Makefile.in
+
+# We should not see these patterns:
+grep '.\$(CXXLINK)' Makefile.in && exit 1
+grep '.\$(LINK)' Makefile.in && exit 1
+
+exit 0
diff --git a/t/link_fc.sh b/t/link_fc.sh
new file mode 100644
index 000000000..f0a77b82e
--- /dev/null
+++ b/t/link_fc.sh
@@ -0,0 +1,46 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure the Fortran 77 linker is used when appropriate.
+# Matthew D. Langston <langston@SLAC.Stanford.EDU>
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_F77
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = lavalamp
+lavalamp_SOURCES = lava.c lamp.f
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+# We should only see the Fortran 77 linker in the rules of
+# 'Makefile.in'.
+
+# Look for this macro not at the beginning of any line; that will have
+# to be good enough for now.
+grep '.\$(F77LINK)' Makefile.in
+
+# We should not see these patterns:
+grep '.\$(LINK)' Makefile.in && exit 1
+grep '.\$(CXXLINK)' Makefile.in && exit 1
+
+exit 0
diff --git a/t/link_fccxx.sh b/t/link_fccxx.sh
new file mode 100644
index 000000000..7c2001712
--- /dev/null
+++ b/t/link_fccxx.sh
@@ -0,0 +1,46 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure the C++ linker is used when appropriate.
+# Matthew D. Langston <langston@SLAC.Stanford.EDU>
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_CXX
+AC_PROG_F77
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = lavalamp
+lavalamp_SOURCES = lava.c lamp.cxx lamp2.f
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+# We should only see the C++ linker in the rules of 'Makefile.in'.
+
+# Look for this macro not at the beginning of any line; that will have
+# to be good enough for now.
+grep '.\$(CXXLINK)' Makefile.in
+
+# We should not see these patterns:
+grep '.\$(F77LINK)' Makefile.in && exit 1
+grep '.\$(LINK)' Makefile.in && exit 1
+
+exit 0
diff --git a/t/link_fcxx.sh b/t/link_fcxx.sh
new file mode 100644
index 000000000..8a044d2df
--- /dev/null
+++ b/t/link_fcxx.sh
@@ -0,0 +1,45 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure the C++ linker is used when appropriate.
+# Matthew D. Langston <langston@SLAC.Stanford.EDU>
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CXX
+AC_PROG_F77
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = lavalamp
+lavalamp_SOURCES = lava.cxx lamp.f
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+# We should only see the C++ linker in the rules of 'Makefile.in'.
+
+# Look for this macro not at the beginning of any line; that will have
+# to be good enough for now.
+grep '.\$(CXXLINK)' Makefile.in
+
+# We should not see these patterns:
+grep '.\$(F77LINK)' Makefile.in && exit 1
+grep '.\$(LINK)' Makefile.in && exit 1
+
+exit 0
diff --git a/t/link_override.sh b/t/link_override.sh
new file mode 100644
index 000000000..5ac59f850
--- /dev/null
+++ b/t/link_override.sh
@@ -0,0 +1,44 @@
+#! /bin/sh
+# Copyright (C) 2009-2017 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 3 of the License, 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure _LINK variables are detected and used as documented.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo bar baz boo
+foo_LINK = $(LINK)
+bar_LINK = $(LINK)
+bar_LDFLAGS = $(AM_LDFLAGS)
+END
+
+$ACLOCAL
+$AUTOMAKE -a
+
+# We should use foo_LINK not LINK.
+grep '.\$(foo_LINK)' Makefile.in
+grep '.\$(LINK).*foo' Makefile.in && exit 1
+
+# We should not override the user definition of bar_LINK.
+# IOW, bar_LDFLAGS is useless unless bar_LINK refers to it.
+grep '^ *bar_LINK *=.*bar_LDFLAGS' Makefile.in && exit 1
+grep '.\$(bar_LINK).*bar' Makefile.in
+
+exit 0
diff --git a/t/lisp-flags.sh b/t/lisp-flags.sh
new file mode 100644
index 000000000..34bb85ccd
--- /dev/null
+++ b/t/lisp-flags.sh
@@ -0,0 +1,41 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Elisp byte-compilation honours AM_ELCFLAFS and ELCFLAGS.
+
+. test-init.sh
+
+cat > Makefile.am << 'EOF'
+lisp_LISP = foo.el
+AM_ELCFLAGS = __am_elcflags__
+EOF
+
+cat >> configure.ac << 'EOF'
+AM_PATH_LISPDIR
+AC_OUTPUT
+EOF
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+./configure EMACS='echo >$@' --with-lispdir="$(pwd)/unused"
+
+: > foo.el
+run_make ELCFLAGS='__usr_elcflags__'
+grep '__am_elcflags__.*__usr_elcflags__' foo.elc
+
+:
diff --git a/t/lisp-loadpath.sh b/t/lisp-loadpath.sh
new file mode 100644
index 000000000..fa5b97010
--- /dev/null
+++ b/t/lisp-loadpath.sh
@@ -0,0 +1,67 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Emacs lisp files in both $(srcdir) and $(builddir) are found if
+# required by other files. Related to automake bug#11806.
+
+required=emacs
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_PATH_LISPDIR
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+noinst_LISP = requirer.el
+lisp_LISP = foo.el
+lisp_DATA = bar.el
+END
+
+echo "(require 'foo) (require 'bar)" >> requirer.el
+echo "(provide 'foo)" > foo.el
+echo "(provide 'bar)" > bar.el
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+mkdir build
+cd build
+../configure
+$MAKE
+test -f requirer.elc
+test -f foo.elc
+test ! -e bar.elc
+
+$MAKE clean
+test ! -e requirer.elc
+test ! -e foo.elc
+
+# In the spirit of VPATH, stuff in the builddir is preferred to
+# stuff in the srcdir.
+echo "(provide" > ../foo.el # Break it.
+echo "defun)" > ../bar.el # Likewise.
+$MAKE && exit 1
+$sleep
+echo "(provide 'foo)" > foo.el
+echo "(provide 'bar)" > bar.el
+$MAKE
+test -f requirer.elc
+test -f foo.elc
+test ! -e bar.elc
+
+:
diff --git a/t/lisp-pr11806.sh b/t/lisp-pr11806.sh
new file mode 100644
index 000000000..d27df9507
--- /dev/null
+++ b/t/lisp-pr11806.sh
@@ -0,0 +1,51 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Compiling .el files that requires each other in a VPATH build.
+# See automake bug#11806.
+
+required=emacs
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_PATH_LISPDIR
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+lisp_LISP = foo.el
+lisp_DATA = bar.el
+END
+
+echo "(require 'bar)" > foo.el
+echo "(provide 'bar)" > bar.el
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+mkdir build
+cd build
+../configure
+$MAKE
+test -f foo.elc
+cd ..
+
+./configure
+$MAKE
+test -f foo.elc
+
+:
diff --git a/t/lisp-subdir-mix.sh b/t/lisp-subdir-mix.sh
new file mode 100644
index 000000000..526591bfc
--- /dev/null
+++ b/t/lisp-subdir-mix.sh
@@ -0,0 +1,96 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check compiling elisp files in different subdirectories, where a
+# file in a subdirectory might require a file in another one.
+# This doesn't work out of the box, but can be made to work with a
+# judicious use of $(AM_ELCFLAGS).
+
+required=emacs
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_PATH_LISPDIR
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+dist_lisp_LISP = \
+ am-here.el \
+ sub1/am-one.el \
+ sub2/am-two.el \
+ sub3/subsub/am-three.el
+
+AM_ELCFLAGS = \
+ -L $(srcdir)/sub1 \
+ -L $(srcdir)/sub2 \
+ -L $(srcdir)/sub3/subsub
+
+elc-test:
+ test -f sub1/am-one.elc
+ test -f sub2/am-two.elc
+ test -f sub3/subsub/am-three.elc
+.PHONY: elc-test
+check-local: elc-test
+END
+
+mkdir sub1 sub2 sub3 sub3/subsub
+
+cat > am-here.el << 'END'
+(provide 'am-here)
+(require 'am-one)
+(require 'am-two)
+(require 'am-three)
+END
+
+cat > sub1/am-one.el << 'END'
+(require 'am-here)
+(provide 'am-one)
+(require 'am-two)
+(require 'am-three)
+END
+
+cat > sub2/am-two.el << 'END'
+(require 'am-here)
+(require 'am-one)
+(provide 'am-two)
+(require 'am-three)
+END
+
+cat > sub3/subsub/am-three.el << 'END'
+(require 'am-here)
+(require 'am-one)
+(require 'am-two)
+(provide 'am-three)
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+./configure
+
+$MAKE
+$MAKE elc-test
+$MAKE clean
+for x in am-here sub1/am-one sub2/am-two sub3/subsub/am-three; do
+ test -f $x.el
+ test ! -e $x.elc
+done
+
+$MAKE distcheck
+
+:
diff --git a/t/lisp-subdir.sh b/t/lisp-subdir.sh
new file mode 100644
index 000000000..7a3ed7fab
--- /dev/null
+++ b/t/lisp-subdir.sh
@@ -0,0 +1,80 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Emacs lisp files in subdirectories.
+
+required=emacs
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_PATH_LISPDIR
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+nobase_lisp_LISP = sub/am-one.el sub/am-two.el sub/am-three.el
+nobase_dist_lisp_LISP = sub/am-three.el
+dist_noinst_LISP = sub/am-four.el
+EXTRA_DIST = sub/am-one.el sub/am-two.el
+END
+
+mkdir sub
+echo "(require 'am-two) (provide 'am-one)" > sub/am-one.el
+echo "(require 'am-three) (provide 'am-two)" > sub/am-two.el
+echo "(provide 'am-three)" > sub/am-three.el
+echo "(require 'am-one) (require 'am-two)" > sub/am-four.el
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+./configure --prefix="$(pwd)/inst" \
+ --with-lispdir="$(pwd)/inst/elisp" \
+
+$MAKE
+# No byte-compiled elisp files in the top-level directory.
+test "$(echo *.elc)" = '*.elc'
+test -f sub/am-one.elc
+test -f sub/am-two.elc
+test -f sub/am-three.elc
+test -f sub/am-four.elc
+$MAKE clean
+test ! -e sub/am-one.elc
+test ! -e sub/am-two.elc
+test ! -e sub/am-three.elc
+test ! -e sub/am-four.elc
+
+# Check installation.
+
+sort > exp << 'END'
+inst/elisp/sub/am-one.elc
+inst/elisp/sub/am-two.elc
+inst/elisp/sub/am-three.elc
+END
+
+$MAKE install
+find inst # For debugging.
+find inst -name '*.elc' > lst || { cat lst; exit 1; }
+sort lst > got
+
+cat exp
+cat got
+diff exp got
+
+# Also check VPATH builds and uninstall completeness.
+$MAKE distcheck
+
+:
diff --git a/t/lisp-subdir2.sh b/t/lisp-subdir2.sh
new file mode 100644
index 000000000..681549207
--- /dev/null
+++ b/t/lisp-subdir2.sh
@@ -0,0 +1,78 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Compiling elisp files in different subdirectories.
+
+required=emacs
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_PATH_LISPDIR
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+dist_lisp_LISP = am-one.el
+nodist_lisp_LISP = sub/am-two.el
+sub/am-two.el:
+ mkdir sub
+ echo "(provide 'am-two)" > $@
+DISTCLEANFILES = $(nodist_lisp_LISP)
+dist_noinst_LISP = x/y/z/am-three.el
+
+elc-test:
+ test -f am-one.elc
+ test -f sub/am-two.elc
+ test -f x/y/z/am-three.elc
+.PHONY: elc-test
+check-local: elc-test
+END
+
+mkdir x x/y x/y/z
+echo "(provide 'am-one)" > am-one.el
+# sub/am-two.el is generated at make runtime
+echo "(provide 'am-three)" > x/y/z/am-three.el
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+./configure
+
+$MAKE
+$MAKE elc-test
+$MAKE clean
+test ! -e am-one.elc
+test ! -e sub/am-two.elc
+test ! -e x/y/z/am-three.elc
+test -f am-one.el
+test -f sub/am-two.el
+test -f x/y/z/am-three.el
+
+# Byte-compiling only a subset of the elisp files.
+$MAKE am-one.elc sub/am-two.elc
+test -f am-one.elc
+test -f sub/am-two.elc
+test ! -e x/y/z/am-three.elc
+rm -f am-one.elc sub/am-two.elc
+$MAKE x/y/z/am-three.elc
+test ! -e am-one.elc
+test ! -e sub/am-two.elc
+test -f x/y/z/am-three.elc
+
+$MAKE distcheck
+
+:
diff --git a/t/lisp2.sh b/t/lisp2.sh
new file mode 100644
index 000000000..5e9903544
--- /dev/null
+++ b/t/lisp2.sh
@@ -0,0 +1,75 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that Automake suggest using AM_PATH_LISPDIR to define lispdir.
+
+. test-init.sh
+
+
+: TRY 1 -- We lack both EMACS and lispdir.
+
+cat > Makefile.am << 'END'
+lisp_LISP = foo.el
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+grep AM_PATH_LISPDIR stderr
+grep '[Ll]isp source.*EMACS.* undefined' stderr
+grep '[Ll]isp source.*lispdir.* undefined' stderr
+grep ' add .*AM_PATH_LISPDIR' stderr
+
+
+: TRY 2 -- Setting lispdir should not be enough.
+
+cat > Makefile.am << 'END'
+lispdir = /usr/share/emacs/site-lisp
+lisp_LISP = foo.el
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+grep 'lispdir.*undefined' stderr && exit 1
+grep '[Ll]isp source.*EMACS.* undefined' stderr
+grep 'define .*EMACS.* add .*AM_PATH_LISPDIR' stderr
+
+
+: TRY 3 -- Setting EMACS should not be enough.
+
+cat > Makefile.am << 'END'
+EMACS = emacs
+lisp_LISP = foo.el
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+grep 'EMACS.*undefined' stderr && exit 1
+grep '[Ll]isp source.*lispdir.* undefined' stderr
+grep 'define .*lispdir.* add .*AM_PATH_LISPDIR' stderr
+
+
+: TRY 4 -- Setting both EMACS and lispdir is OK.
+
+cat > Makefile.am << 'END'
+lispdir = /usr/share/emacs/site-lisp
+EMACS = emacs
+lisp_LISP = foo.el
+END
+
+$ACLOCAL
+$AUTOMAKE -a
+
+:
diff --git a/t/lisp3.sh b/t/lisp3.sh
new file mode 100644
index 000000000..642b391c6
--- /dev/null
+++ b/t/lisp3.sh
@@ -0,0 +1,84 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test that compiling interdependent elisp files works.
+
+required=emacs
+. test-init.sh
+
+cat > Makefile.am << 'EOF'
+lisp_LISP = am-one.el am-two.el am-three.el
+EXTRA_DIST = am-one.el am-two.el
+am-three.el:
+ echo "(provide 'am-three)" > $@
+CLEANFILES = am-three.el
+EOF
+
+cat >> configure.ac << 'EOF'
+AM_PATH_LISPDIR
+AC_OUTPUT
+EOF
+
+echo "(require 'am-two)" > am-one.el
+echo "(require 'am-three) (provide 'am-two)" > am-two.el
+# am-three.el is a built source
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+./configure --prefix="$(pwd)/_inst"
+
+$MAKE
+
+test -f am-one.elc
+test -f am-two.elc
+test -f am-three.elc
+
+# Make sure we can recover from a deletion.
+rm -f am-one.elc
+$MAKE
+test -f am-one.elc
+
+# Test installation/deinstallation.
+
+$MAKE install
+
+find _inst # For debugging.
+
+# Keep thin in sync with m4/lispdir.m4.
+for dir in lib/emacs lib/xemacs share/emacs share/xemacs :; do
+ if test $dir = :; then
+ exit 1
+ elif test -d _inst/$dir/site-lisp; then
+ break
+ fi
+done
+
+test -f _inst/$dir/site-lisp/am-one.el
+test -f _inst/$dir/site-lisp/am-one.elc
+test -f _inst/$dir/site-lisp/am-two.el
+test -f _inst/$dir/site-lisp/am-two.elc
+test -f _inst/$dir/site-lisp/am-three.el
+test -f _inst/$dir/site-lisp/am-three.elc
+
+$MAKE uninstall
+find _inst | $EGREP '\.elc?$' && exit 1
+
+# It should also work for VPATH-builds.
+$MAKE distcheck
+
+:
diff --git a/t/lisp4.sh b/t/lisp4.sh
new file mode 100644
index 000000000..5eacc8842
--- /dev/null
+++ b/t/lisp4.sh
@@ -0,0 +1,81 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure setting ELCFILES= disable byte-compilation as documented.
+# Report from Simon Josefsson.
+
+required=emacs
+. test-init.sh
+
+cat > Makefile.am << 'EOF'
+lisp_LISP = am-one.el am-two.el am-three.el
+EXTRA_DIST = am-one.el am-two.el
+ELCFILES=
+am-three.el:
+ echo "(provide 'am-three)" > $@
+CLEANFILES = am-three.el
+
+test:
+ test ! -f am-one.elc
+ test ! -f am-two.elc
+ test ! -f am-three.elc
+
+install-test: install
+ test -f "$(lispdir)/am-one.el"
+ test -f "$(lispdir)/am-two.el"
+ test -f "$(lispdir)/am-three.el"
+ test ! -f "$(lispdir)/am-one.elc"
+ test ! -f "$(lispdir)/am-two.elc"
+ test ! -f "$(lispdir)/am-three.elc"
+
+not-installed:
+ find "$(lispdir)" | grep '\.el$$' && exit 1; :
+ find "$(lispdir)" | grep '\.elc$$' && exit 1; :
+EOF
+
+cat >> configure.ac << 'EOF'
+AM_PATH_LISPDIR
+AC_OUTPUT
+EOF
+
+echo "(require 'am-two)" > am-one.el
+echo "(require 'am-three) (provide 'am-two)" > am-two.el
+# am-tree.el is a built source
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+cwd=$(pwd) || fatal_ "getting current working directory"
+
+./configure --prefix "$cwd"
+$MAKE
+$MAKE test
+$MAKE install-test
+$MAKE uninstall
+$MAKE not-installed
+
+# Fake the absence of emacs.
+# *.el files should not be installed, but "make install" and
+# "make uninstall" should continue to work.
+./configure EMACS=no --prefix "$cwd"
+$MAKE
+$MAKE test
+$MAKE install
+$MAKE not-installed
+$MAKE uninstall
+
+:
diff --git a/t/lisp5.sh b/t/lisp5.sh
new file mode 100644
index 000000000..a98673e0b
--- /dev/null
+++ b/t/lisp5.sh
@@ -0,0 +1,80 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Same as 'lisp4.sh', but using the now-recommended way to install
+# non-bytecompiled *.el files.
+
+required=emacs
+. test-init.sh
+
+cat > Makefile.am << 'EOF'
+lisp_DATA = am-one.el am-two.el am-three.el
+EXTRA_DIST = am-one.el am-two.el
+am-three.el:
+ echo "(provide 'am-three)" > $@
+CLEANFILES = am-three.el
+
+test:
+ test ! -f am-one.elc
+ test ! -f am-two.elc
+ test ! -f am-three.elc
+
+install-test: install
+ test -f "$(lispdir)/am-one.el"
+ test -f "$(lispdir)/am-two.el"
+ test -f "$(lispdir)/am-three.el"
+ test ! -f "$(lispdir)/am-one.elc"
+ test ! -f "$(lispdir)/am-two.elc"
+ test ! -f "$(lispdir)/am-three.elc"
+
+not-installed:
+ find "$(lispdir)" | grep '\.el$$' && exit 1; :
+ find "$(lispdir)" | grep '\.elc$$' && exit 1; :
+EOF
+
+cat >> configure.ac << 'EOF'
+AM_PATH_LISPDIR
+AC_OUTPUT
+EOF
+
+echo "(require 'am-two)" > am-one.el
+echo "(require 'am-three) (provide 'am-two)" > am-two.el
+# am-tree.el is a built source
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+cwd=$(pwd) || fatal_ "getting current working directory"
+
+./configure --prefix "$cwd"
+$MAKE
+$MAKE test
+$MAKE install-test
+$MAKE uninstall
+$MAKE not-installed
+
+# Fake the absence of emacs.
+# *.el files SHOULD be installed by "make install" (and uninstalled
+# by "make uninstall").
+./configure EMACS=no --prefix "$cwd"
+$MAKE
+$MAKE test
+$MAKE install-test
+$MAKE uninstall
+$MAKE not-installed
+
+:
diff --git a/t/lisp6.sh b/t/lisp6.sh
new file mode 100644
index 000000000..07c8e1d4d
--- /dev/null
+++ b/t/lisp6.sh
@@ -0,0 +1,105 @@
+#! /bin/sh
+# Copyright (C) 2004-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for conditional _LISP.
+
+required=emacs
+. test-init.sh
+
+cat > Makefile.am << 'EOF'
+dist_lisp_LISP = am-one.el
+if WANT_TWO
+ dist_lisp_LISP += am-two.el
+endif
+dist_noinst_LISP = am-three.el
+
+dist-test: distdir
+ test -f $(distdir)/am-one.el
+ test -f $(distdir)/am-two.el
+ test -f $(distdir)/am-three.el
+EOF
+
+cat >> configure.ac << 'EOF'
+AM_CONDITIONAL([WANT_TWO], [test -n "$want_two"])
+AM_PATH_LISPDIR
+AC_OUTPUT
+EOF
+
+# Avoid possible spurious influences from the environment.
+unset want_two
+
+echo "(provide 'am-one)" > am-one.el
+echo "(require 'am-one)" > am-two.el
+echo "(require 'am-one)" > am-three.el
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+cwd=$(pwd) || fatal_ "getting current working directory"
+
+./configure --with-lispdir="$cwd/lisp"
+
+$MAKE
+test -f am-one.elc
+test ! -e am-two.elc
+test -f am-three.elc
+
+$MAKE install
+test -f lisp/am-one.el
+test -f lisp/am-one.elc
+test ! -e lisp/am-two.el
+test ! -e lisp/am-two.elc
+test ! -e lisp/am-three.el
+test ! -e lisp/am-three.elc
+
+$MAKE dist-test
+
+$MAKE distclean
+test ! -e am-one.elc
+test ! -e am-two.elc
+test ! -e am-three.elc
+
+./configure --with-lispdir="$cwd/lisp" want_two=1
+
+$MAKE
+test -f am-one.elc
+test -f am-two.elc
+test -f am-three.elc
+
+# Let's mutilate the source tree, to check the recover rule.
+rm -f am-*.elc
+$MAKE
+test -f am-one.elc
+test -f am-two.elc
+test -f am-three.elc
+
+$MAKE install
+test -f lisp/am-one.el
+test -f lisp/am-one.elc
+test -f lisp/am-two.el
+test -f lisp/am-two.elc
+test ! -e lisp/am-three.el
+test ! -e lisp/am-three.elc
+
+$MAKE dist-test
+
+$MAKE distclean
+test ! -e am-one.elc
+test ! -e am-two.elc
+test ! -e am-three.elc
+
+:
diff --git a/t/lisp7.sh b/t/lisp7.sh
new file mode 100644
index 000000000..833807843
--- /dev/null
+++ b/t/lisp7.sh
@@ -0,0 +1,47 @@
+#! /bin/sh
+# Copyright (C) 2005-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that lisp_LISP also works when emacs is not installed.
+
+. test-init.sh
+
+cat > Makefile.am << 'EOF'
+dist_lisp_LISP = am-one.el am-two.el am-three.el
+EOF
+
+cat >> configure.ac << 'EOF'
+AM_PATH_LISPDIR
+EMACS=no # Simulate no emacs.
+AC_OUTPUT
+EOF
+
+echo "(require 'am-two)" > am-one.el
+echo "(require 'am-three) (provide 'am-two)" > am-two.el
+echo "(provide 'am-three)" > am-three.el
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+./configure
+
+run_make -O
+test ! -e am-one.elc
+test ! -e am-two.elc
+test ! -e am-three.elc
+
+$MAKE distcheck
+
+:
diff --git a/t/lisp8.sh b/t/lisp8.sh
new file mode 100644
index 000000000..92b81900b
--- /dev/null
+++ b/t/lisp8.sh
@@ -0,0 +1,55 @@
+#! /bin/sh
+# Copyright (C) 2005-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check the recover rule of lisp_LISP with parallel make.
+
+required='GNUmake emacs'
+. test-init.sh
+
+cat > Makefile.am << 'EOF'
+dist_lisp_LISP = am-one.el am-two.el am-three.el
+EOF
+
+cat >> configure.ac << 'EOF'
+AM_PATH_LISPDIR
+AC_OUTPUT
+EOF
+
+echo "(require 'am-two)" > am-one.el
+echo "(require 'am-three) (provide 'am-two)" > am-two.el
+echo "(provide 'am-three)" > am-three.el
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+./configure
+
+run_make -O -- -j
+
+test -f am-one.elc
+test -f am-two.elc
+test -f am-three.elc
+
+# Delete ...
+rm -f am-*.elc
+
+# ... and recover.
+run_make -O -- -j
+test -f am-one.elc
+test -f am-two.elc
+test -f am-three.elc
+
+:
diff --git a/t/lispdry.sh b/t/lispdry.sh
new file mode 100644
index 000000000..1f50061e4
--- /dev/null
+++ b/t/lispdry.sh
@@ -0,0 +1,56 @@
+#! /bin/sh
+# Copyright (C) 2005-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that 'make -n' works with the lisp_LISP recover rule.
+
+required='emacs non-root'
+. test-init.sh
+
+cat > Makefile.am << 'EOF'
+dist_lisp_LISP = am-one.el am-two.el am-three.el
+EOF
+
+cat >> configure.ac << 'EOF'
+AM_PATH_LISPDIR
+AC_OUTPUT
+EOF
+
+echo "(require 'am-two)" > am-one.el
+echo "(require 'am-three) (provide 'am-two)" > am-two.el
+echo "(provide 'am-three)" > am-three.el
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+./configure
+
+$MAKE
+
+test -f am-one.elc
+test -f am-two.elc
+test -f am-three.elc
+
+rm -f am-*.elc
+
+chmod a-w .
+
+$MAKE -n
+
+test ! -e am-one.elc
+test ! -e am-two.elc
+test ! -e am-three.elc
+
+:
diff --git a/t/list-of-tests.mk b/t/list-of-tests.mk
new file mode 100644
index 000000000..b49a3ad0f
--- /dev/null
+++ b/t/list-of-tests.mk
@@ -0,0 +1,1323 @@
+## Makefile fragment that holds the list of test scripts of the automake
+## testsuite. This fragment is meant to be included by the Makefile.am,
+## but also to be executed directly by make when bootstrapping automake.
+
+## Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# FIXME: this "expected failures" are in truth an hack used to
+# FIXME: to verify that some incorrect usages of our perl libraries
+# FIXME: raise an error. We should find a cleaner way to check that.
+perl_fake_XFAIL_TESTS = \
+t/pm/Cond2.pl \
+t/pm/Cond3.pl \
+t/pm/DisjCon2.pl \
+t/pm/DisjCon3.pl \
+t/pm/Version2.pl \
+t/pm/Version3.pl
+
+XFAIL_TESTS = \
+t/all.sh \
+t/auxdir-pr19311.sh \
+t/cond17.sh \
+t/gcj6.sh \
+t/override-conditional-2.sh \
+t/override-conditional-pr13940.sh \
+t/dist-pr109765.sh \
+t/instdir-cond2.sh \
+t/java-nobase.sh \
+t/objext-pr10128.sh \
+t/remake-timing-bug-pr8365.sh \
+t/lex-subobj-nodep.sh \
+t/remake-am-pr10111.sh \
+t/remake-m4-pr10111.sh \
+$(perl_fake_XFAIL_TESTS)
+
+perl_TESTS = \
+t/pm/Cond2.pl \
+t/pm/Cond3.pl \
+t/pm/Condition.pl \
+t/pm/Condition-t.pl \
+t/pm/DisjCon2.pl \
+t/pm/DisjCon3.pl \
+t/pm/DisjConditions.pl \
+t/pm/DisjConditions-t.pl \
+t/pm/Version.pl \
+t/pm/Version2.pl \
+t/pm/Version3.pl \
+t/pm/Wrap.pl
+
+perf_TESTS = \
+t/perf/cond.sh \
+t/perf/testsuite-recheck.sh \
+t/perf/testsuite-summary.sh
+
+# The order here is mostly alphabetical, with the deliberate exception
+# that tests having a high runtime (especially TAP tests that run various
+# checks sequentially) are listed early; this improves performance on
+# concurrent testsuite runs.
+handwritten_TESTS = \
+t/get-sysconf.sh \
+$(perl_TESTS) \
+t/instspc.tap \
+t/aclocal.sh \
+t/aclocal-I-order-1.sh \
+t/aclocal-I-order-2.sh \
+t/aclocal-I-order-3.sh \
+t/aclocal-I-and-install.sh \
+t/aclocal-acdir.sh \
+t/aclocal-amflags.sh \
+t/aclocal-autoconf-version-check.sh \
+t/aclocal-comments-respected.sh \
+t/aclocal-deleted-header-aclocal-amflags.sh \
+t/aclocal-deleted-header.sh \
+t/aclocal-deps-subdir.sh \
+t/aclocal-deps.sh \
+t/aclocal-dirlist.sh \
+t/aclocal-dirlist-globbing.sh \
+t/aclocal-dirlist-abspath.sh \
+t/aclocal-install-absdir.sh \
+t/aclocal-install-fail.sh \
+t/aclocal-install-mkdir.sh \
+t/aclocal-m4-include-are-scanned-aclocal-amflags.sh \
+t/aclocal-m4-include-are-scanned.sh \
+t/aclocal-m4-sinclude.sh \
+t/aclocal-macrodir.tap \
+t/aclocal-macrodirs.tap \
+t/aclocal-missing-macros.sh \
+t/aclocal-no-extra-scan.sh \
+t/aclocal-no-force.sh \
+t/aclocal-no-install-no-mkdir.sh \
+t/aclocal-no-symlinked-overwrite.sh \
+t/aclocal-no-unused-required.sh \
+t/aclocal-path.sh \
+t/aclocal-path-install.sh \
+t/aclocal-path-install-serial.sh \
+t/aclocal-path-nonexistent.sh \
+t/aclocal-path-precedence.sh \
+t/aclocal-pr450.sh \
+t/aclocal-print-acdir.sh \
+t/aclocal-req.sh \
+t/aclocal-remake-misc.sh \
+t/aclocal-scan-configure-ac-pr319.sh \
+t/aclocal-serial.sh \
+t/aclocal-underquoted-defun.sh \
+t/aclocal-verbose-install.sh \
+t/auxdir-pr15981.sh \
+t/auxdir-cc-pr15981.sh \
+t/ac-output-old.tap \
+t/acsilent.sh \
+t/acsubst.sh \
+t/acsubst2.sh \
+t/add-missing.tap \
+t/add-missing-multiple.sh \
+t/all.sh \
+t/all2.sh \
+t/alloca.sh \
+t/alloca2.sh \
+t/alpha.sh \
+t/alpha2.sh \
+t/amhello-cflags.sh \
+t/amhello-cross-compile.sh \
+t/amhello-binpkg.sh \
+t/aminit-moreargs-deprecation.sh \
+t/aminit-trailing-dnl-comment-pr16841.sh \
+t/amassign.sh \
+t/am-config-header.sh \
+t/am-prog-cc-stdc.sh \
+t/am-prog-cc-c-o.sh \
+t/am-macro-not-found.sh \
+t/amopt.sh \
+t/amopts-location.sh \
+t/amopts-variable-expansion.sh \
+t/amsubst.sh \
+t/am-default-source-ext.sh \
+t/am-include-only-one-generated-fragment.sh \
+t/ansi2knr-no-more.sh \
+t/ar-lib.sh \
+t/ar-lib2.sh \
+t/ar-lib3.sh \
+t/ar-lib4.sh \
+t/ar-lib5a.sh \
+t/ar-lib5b.sh \
+t/ar-lib6a.sh \
+t/ar-lib6b.sh \
+t/ar-lib7.sh \
+t/ar.sh \
+t/ar2.sh \
+t/ar3.sh \
+t/ar4.sh \
+t/ar5.sh \
+t/asm.sh \
+t/asm2.sh \
+t/asm3.sh \
+t/autodist.sh \
+t/autodist-subdir.sh \
+t/autodist-acconfig.sh \
+t/autodist-acconfig-no-subdir.sh \
+t/autodist-aclocal-m4.sh \
+t/autodist-config-headers.sh \
+t/autodist-configure-no-subdir.sh \
+t/autodist-no-duplicate.sh \
+t/autodist-stamp-vti.sh \
+t/autohdr.sh \
+t/autohdr3.sh \
+t/autohdr4.sh \
+t/autohdr-subdir-pr12495.sh \
+t/autohdrdry.sh \
+t/automake-cmdline.tap \
+t/auxdir.sh \
+t/auxdir6.sh \
+t/auxdir7.sh \
+t/auxdir8.sh \
+t/auxdir-autodetect.sh \
+t/auxdir-computed.tap \
+t/auxdir-misplaced.sh \
+t/auxdir-nonexistent.sh \
+t/auxdir-pr19311.sh \
+t/auxdir-unportable.tap \
+t/backcompat.sh \
+t/backcompat2.sh \
+t/backcompat3.sh \
+t/backcompat6.sh \
+t/backcompat-acout.sh \
+t/backslash-issues.sh \
+t/backslash-before-trailing-whitespace.sh \
+t/badline.sh \
+t/badopt.sh \
+t/badprog.sh \
+t/built-sources-check.sh \
+t/built-sources-cond.sh \
+t/built-sources-fork-bomb.sh \
+t/built-sources-install.sh \
+t/built-sources-subdir.sh \
+t/built-sources.sh \
+t/candist.sh \
+t/canon.sh \
+t/canon2.sh \
+t/canon3.sh \
+t/canon4.sh \
+t/canon5.sh \
+t/canon6.sh \
+t/canon7.sh \
+t/canon8.sh \
+t/canon-name.sh \
+t/ccnoco.sh \
+t/ccnoco-lib.sh \
+t/ccnoco-lt.sh \
+t/ccnoco3.sh \
+t/ccnoco4.sh \
+t/ccnoco-deps.sh \
+t/check.sh \
+t/check2.sh \
+t/check4.sh \
+t/check5.sh \
+t/check6.sh \
+t/check7.sh \
+t/check8.sh \
+t/check10.sh \
+t/check11.sh \
+t/check12.sh \
+t/check-subst.sh \
+t/check-subst-prog.sh \
+t/check-exported-srcdir.sh \
+t/check-fd-redirect.sh \
+t/check-tests-in-builddir.sh \
+t/check-no-test-driver.sh \
+t/check-concurrency-bug9245.sh \
+t/checkall.sh \
+t/clean.sh \
+t/colneq.sh \
+t/colneq2.sh \
+t/colneq3.sh \
+t/colon.sh \
+t/colon2.sh \
+t/colon3.sh \
+t/colon4.sh \
+t/colon5.sh \
+t/colon6.sh \
+t/colon7.sh \
+t/color-tests.sh \
+t/color-tests2.sh \
+t/color-tests-opt.sh \
+t/comment.sh \
+t/comment2.sh \
+t/comment3.sh \
+t/comment4.sh \
+t/comment5.sh \
+t/comment6.sh \
+t/comment7.sh \
+t/comment8.sh \
+t/comment9.sh \
+t/commen10.sh \
+t/commen11.sh \
+t/comment-block.sh \
+t/comments-in-var-def.sh \
+t/compile.sh \
+t/compile2.sh \
+t/compile3.sh \
+t/compile4.sh \
+t/compile5.sh \
+t/compile6.sh \
+t/compile7.sh \
+t/compile_f90_c_cxx.sh \
+t/compile_f_c_cxx.sh \
+t/cond-basic.sh \
+t/cond.sh \
+t/cond3.sh \
+t/cond4.sh \
+t/cond5.sh \
+t/cond6.sh \
+t/cond7.sh \
+t/cond8.sh \
+t/cond9.sh \
+t/cond10.sh \
+t/cond11.sh \
+t/cond13.sh \
+t/cond14.sh \
+t/cond15.sh \
+t/cond16.sh \
+t/cond17.sh \
+t/cond18.sh \
+t/cond19.sh \
+t/cond20.sh \
+t/cond21.sh \
+t/cond22.sh \
+t/cond23.sh \
+t/cond24.sh \
+t/cond25.sh \
+t/cond26.sh \
+t/cond27.sh \
+t/cond28.sh \
+t/cond30.sh \
+t/cond31.sh \
+t/cond32.sh \
+t/cond33.sh \
+t/cond34.sh \
+t/cond35.sh \
+t/cond36.sh \
+t/cond37.sh \
+t/cond38.sh \
+t/cond39.sh \
+t/cond40.sh \
+t/cond41.sh \
+t/cond42.sh \
+t/cond43.sh \
+t/cond44.sh \
+t/cond45.sh \
+t/cond46.sh \
+t/condd.sh \
+t/condhook.sh \
+t/condhook2.sh \
+t/condinc.sh \
+t/condinc2.sh \
+t/condlib.sh \
+t/condman2.sh \
+t/condman3.sh \
+t/configure.sh \
+t/confdeps.sh \
+t/conff.sh \
+t/conff2.sh \
+t/conffile-leading-dot.sh \
+t/confh.sh \
+t/confh4.sh \
+t/confh5.sh \
+t/confh6.sh \
+t/confh7.sh \
+t/confh8.sh \
+t/confh-subdir-clean.sh \
+t/confincl.sh \
+t/conflnk.sh \
+t/conflnk2.sh \
+t/conflnk3.sh \
+t/conflnk4.sh \
+t/confsub.sh \
+t/confvar.sh \
+t/confvar2.sh \
+t/copy.sh \
+t/cscope.tap \
+t/cscope2.sh \
+t/cscope3.sh \
+t/c-demo.sh \
+t/cxx.sh \
+t/cxx2.sh \
+t/cxxcpp.sh \
+t/cxx-demo.sh \
+t/cxx-lt-demo.sh \
+t/cxxlibobj.sh \
+t/cxxlink.sh \
+t/cxxnoc.sh \
+t/cygnus-no-more.sh \
+t/cygwin32.sh \
+t/dash.sh \
+t/defun.sh \
+t/defun2.sh \
+t/dejagnu.sh \
+t/dejagnu2.sh \
+t/dejagnu3.sh \
+t/dejagnu4.sh \
+t/dejagnu5.sh \
+t/dejagnu6.sh \
+t/dejagnu7.sh \
+t/dejagnu-absolute-builddir.sh \
+t/dejagnu-relative-srcdir.sh \
+t/dejagnu-siteexp-extend.sh \
+t/dejagnu-siteexp-append.sh \
+t/dejagnu-siteexp-useredit.sh \
+t/deleted-am.sh \
+t/deleted-m4.sh \
+t/depacl2.sh \
+t/depcomp.sh \
+t/depcomp2.sh \
+t/depcomp8a.sh \
+t/depcomp8b.sh \
+t/depcomp-implicit-auxdir.sh \
+t/depdist.sh \
+t/depend.sh \
+t/depend3.sh \
+t/depend4.sh \
+t/depend5.sh \
+t/depend6.sh \
+t/depend-postproc.sh \
+t/deprecated-acinit.sh \
+t/destdir.sh \
+t/dir-named-obj-is-bad.sh \
+t/discover.sh \
+t/dist-formats.tap \
+t/dist-lzma.sh \
+t/dist-tarZ.sh \
+t/dist-shar.sh \
+t/dist-auxdir-many-subdirs.sh \
+t/dist-auxfile-2.sh \
+t/dist-auxfile.sh \
+t/dist-included-parent-dir.sh \
+t/dist-missing-am.sh \
+t/dist-missing-included-m4.sh \
+t/dist-missing-m4.sh \
+t/dist-readonly.sh \
+t/dist-repeated.sh \
+t/dist-pr109765.sh \
+t/distcleancheck.sh \
+t/distcom2.sh \
+t/distcom3.sh \
+t/distcom4.sh \
+t/distcom5.sh \
+t/distcom-subdir.sh \
+t/distdir.sh \
+t/disthook.sh \
+t/distlinks.sh \
+t/distlinksbrk.sh \
+t/distname.sh \
+t/distcheck-configure-flags.sh \
+t/distcheck-configure-flags-am.sh \
+t/distcheck-configure-flags-subpkg.sh \
+t/distcheck-hook.sh \
+t/distcheck-hook2.sh \
+t/distcheck-writable-srcdir.sh \
+t/distcheck-missing-m4.sh \
+t/distcheck-outdated-m4.sh \
+t/distcheck-no-prefix-or-srcdir-override.sh \
+t/distcheck-override-infodir.sh \
+t/distcheck-pr9579.sh \
+t/distcheck-pr10470.sh \
+t/distcheck-pr18286.sh \
+t/dmalloc.sh \
+t/doc-parsing-buglets-colneq-subst.sh \
+t/doc-parsing-buglets-tabs.sh \
+t/dollar.sh \
+t/dollarvar.sh \
+t/dollarvar2.sh \
+t/double.sh \
+t/dup2.sh \
+t/else.sh \
+t/empty-data-primary.sh \
+t/empty-sources-primary.tap \
+t/exdir.sh \
+t/exdir2.sh \
+t/exdir3.sh \
+t/exeext.sh \
+t/exeext2.sh \
+t/exeext3.sh \
+t/exeext4.sh \
+t/extra-sources.sh \
+t/ext.sh \
+t/ext2.sh \
+t/ext3.sh \
+t/extra.sh \
+t/extra-sources-no-spurious.sh \
+t/extra-data.sh \
+t/extra-dist-vpath-dir.sh \
+t/extra-dist-dirs-and-subdirs.sh \
+t/extra-dist-vpath-dir-merge.sh \
+t/extra-dist-wildcards.sh \
+t/extra-dist-wildcards-gnu.sh \
+t/extra-dist-wildcards-vpath.sh \
+t/extra-programs-misc.sh \
+t/extra-programs-and-libs.sh \
+t/extra-programs-empty.sh \
+t/extra-portability.sh \
+t/extra-portability2.sh \
+t/extra-portability3.sh \
+t/extra-deps.sh \
+t/extra-deps-lt.sh \
+t/f90only.sh \
+t/flavor.sh \
+t/flibs.sh \
+t/fn99.sh \
+t/fn99subdir.sh \
+t/fnoc.sh \
+t/forcemiss.sh \
+t/forcemiss2.sh \
+t/fort1.sh \
+t/fort2.sh \
+t/fort4.sh \
+t/fort5.sh \
+t/fonly.sh \
+t/fortdep.sh \
+t/gcj.sh \
+t/gcj2.sh \
+t/gcj3.sh \
+t/gcj4.sh \
+t/gcj5.sh \
+t/gcj6.sh \
+t/gettext-basics.sh \
+t/gettext-config-rpath.sh \
+t/gettext-external-pr338.sh \
+t/gettext-intl-subdir.sh \
+t/gettext-pr381.sh \
+t/gnumake.sh \
+t/gnuwarn.sh \
+t/gnuwarn2.sh \
+t/gnits.sh \
+t/gnits2.sh \
+t/gnits3.sh \
+t/hdr-vars-defined-once.sh \
+t/header.sh \
+t/help.sh \
+t/help2.sh \
+t/help3.sh \
+t/help4.sh \
+t/help-depend.sh \
+t/help-depend2.sh \
+t/help-dmalloc.sh \
+t/help-init.sh \
+t/help-lispdir.sh \
+t/help-python.sh \
+t/help-silent.sh \
+t/help-upc.sh \
+t/hfs.sh \
+t/implicit.sh \
+t/init.sh \
+t/init2.sh \
+t/dist-install-sh.sh \
+t/dist-with-unreadable-makefile-fails.sh \
+t/installdir.sh \
+t/add-missing-install-sh.sh \
+t/install-sh-unittests.sh \
+t/install-sh-option-C.sh \
+t/instdat.sh \
+t/instdat2.sh \
+t/instdir.sh \
+t/instdir2.sh \
+t/instdir-cond.sh \
+t/instdir-cond2.sh \
+t/instdir-no-empty.sh \
+t/instdir-java.sh \
+t/instdir-lisp.sh \
+t/instdir-ltlib.sh \
+t/instdir-prog.sh \
+t/instdir-python.sh \
+t/instdir-texi.sh \
+t/instexec.sh \
+t/instfail.sh \
+t/instfail-info.sh \
+t/instfail-java.sh \
+t/instfail-libtool.sh \
+t/insthook.sh \
+t/instman.sh \
+t/instman2.sh \
+t/instmany.sh \
+t/instmany-mans.sh \
+t/instmany-python.sh \
+t/install-info-dir.sh \
+t/interp.sh \
+t/interp2.sh \
+t/java.sh \
+t/java2.sh \
+t/java3.sh \
+t/javadir-undefined.sh \
+t/javaflags.sh \
+t/java-check.sh \
+t/java-clean.sh \
+t/java-compile-install.sh \
+t/java-compile-run-flat.sh \
+t/java-compile-run-nested.sh \
+t/java-empty-classpath.sh \
+t/javaprim.sh \
+t/javasubst.sh \
+t/java-extra.sh \
+t/java-mix.sh \
+t/java-no-duplicate.sh \
+t/java-nobase.sh \
+t/java-noinst.sh \
+t/java-rebuild.sh \
+t/java-sources.sh \
+t/java-uninstall.sh \
+t/ldadd.sh \
+t/ldflags.sh \
+t/lex.sh \
+t/lex2.sh \
+t/lex3.sh \
+t/lex5.sh \
+t/lexcpp.sh \
+t/lexvpath.sh \
+t/lex-subobj-nodep.sh \
+t/lex-header.sh \
+t/lex-lib.sh \
+t/lex-lib-external.sh \
+t/lex-libobj.sh \
+t/lex-multiple.sh \
+t/lex-noyywrap.sh \
+t/lex-clean-cxx.sh \
+t/lex-clean.sh \
+t/lex-depend-cxx.sh \
+t/lex-depend-grep.sh \
+t/lex-depend.sh \
+t/lex-line.sh \
+t/lex-nodist.sh \
+t/lex-pr204.sh \
+t/lflags.sh \
+t/lflags-cxx.sh \
+t/libexec.sh \
+t/libobj-basic.sh \
+t/libobj-no-dependency-tracking.sh \
+t/libobj2.sh \
+t/libobj3.sh \
+t/libobj4.sh \
+t/libobj5.sh \
+t/libobj7.sh \
+t/libobj10.sh \
+t/libobj12.sh \
+t/libobj13.sh \
+t/libobj14.sh \
+t/libobj15a.sh \
+t/libobj15b.sh \
+t/libobj15c.sh \
+t/libobj16a.sh \
+t/libobj16b.sh \
+t/libobj17.sh \
+t/libobj18.sh \
+t/libobj19.sh \
+t/libobj20a.sh \
+t/libobj20b.sh \
+t/libobj20c.sh \
+t/library.sh \
+t/library2.sh \
+t/library3.sh \
+t/libtool.sh \
+t/libtool2.sh \
+t/libtool3.sh \
+t/libtool4.sh \
+t/libtool5.sh \
+t/libtool6.sh \
+t/libtool7.sh \
+t/libtool8.sh \
+t/libtool9.sh \
+t/libtoo10.sh \
+t/libtoo11.sh \
+t/license.sh \
+t/license2.sh \
+t/link_c_cxx.sh \
+t/link_cond.sh \
+t/link_dist.sh \
+t/link_f90_only.sh \
+t/link_fc.sh \
+t/link_fccxx.sh \
+t/link_fcxx.sh \
+t/link_f_only.sh \
+t/link_override.sh \
+t/lisp2.sh \
+t/lisp3.sh \
+t/lisp4.sh \
+t/lisp5.sh \
+t/lisp6.sh \
+t/lisp7.sh \
+t/lisp8.sh \
+t/lisp-loadpath.sh \
+t/lisp-subdir.sh \
+t/lisp-subdir2.sh \
+t/lisp-subdir-mix.sh \
+t/lispdry.sh \
+t/lisp-pr11806.sh \
+t/lisp-flags.sh \
+t/listval.sh \
+t/location.sh \
+t/longline.sh \
+t/longlin2.sh \
+t/ltcond.sh \
+t/ltcond2.sh \
+t/ltconv.sh \
+t/ltdeps.sh \
+t/ltinit.sh \
+t/ltinstloc.sh \
+t/ltlibobjs.sh \
+t/ltlibsrc.sh \
+t/ltorder.sh \
+t/m4-inclusion.sh \
+t/maintclean.sh \
+t/maintclean-vpath.sh \
+t/maintmode-configure-msg.sh \
+t/make.sh \
+t/makefile-deps.sh \
+t/makej.sh \
+t/makej2.sh \
+t/maken.sh \
+t/maken3.sh \
+t/makevars.sh \
+t/make-dryrun.tap \
+t/make-keepgoing.tap \
+t/make-is-gnu.sh \
+t/man.sh \
+t/man2.sh \
+t/man3.sh \
+t/man5.sh \
+t/man6.sh \
+t/man7.sh \
+t/man8.sh \
+t/mdate.sh \
+t/mdate2.sh \
+t/mdate3.sh \
+t/mdate4.sh \
+t/mdate5.sh \
+t/mdate6.sh \
+t/missing-version-mismatch.sh \
+t/missing3.sh \
+t/am-missing-prog.sh \
+t/missing-auxfile-stops-makefiles-creation.sh \
+t/mkdir_p.sh \
+t/mkdirp-deprecation.sh \
+t/mkinstall.sh \
+t/mkinst2.sh \
+t/mkinst3.sh \
+t/mmode.sh \
+t/mmodely.sh \
+t/no-extra-c-stuff.sh \
+t/no-extra-makefile-code.sh \
+t/no-spurious-install-recursive.sh \
+t/nobase.sh \
+t/nobase-libtool.sh \
+t/nobase-python.sh \
+t/nobase-nodist.sh \
+t/nodef.sh \
+t/nodef2.sh \
+t/nodep.sh \
+t/nodep2.sh \
+t/nodepcomp.sh \
+t/nodist.sh \
+t/nodist2.sh \
+t/nodist3.sh \
+t/noinst.sh \
+t/noinstdir.sh \
+t/nolink.sh \
+t/nostdinc.sh \
+t/notrans.sh \
+t/number.sh \
+t/objc-basic.sh \
+t/objc-minidemo.sh \
+t/objc-flags.sh \
+t/objc-deps.sh \
+t/objcxx-basic.sh \
+t/objcxx-minidemo.sh \
+t/objcxx-flags.sh \
+t/objcxx-deps.sh \
+t/objc-megademo.sh \
+t/objext-pr10128.sh \
+t/oldvars.sh \
+t/order.sh \
+t/output.sh \
+t/output2.sh \
+t/output3.sh \
+t/output4.sh \
+t/output5.sh \
+t/output6.sh \
+t/output7.sh \
+t/output8.sh \
+t/output9.sh \
+t/output10.sh \
+t/output11.sh \
+t/output12.sh \
+t/output13.sh \
+t/output-order.sh \
+t/override-conditional-1.sh \
+t/override-conditional-2.sh \
+t/override-conditional-pr13940.sh \
+t/override-html.sh \
+t/override-suggest-local.sh \
+t/parallel-am.sh \
+t/parallel-am2.sh \
+t/parallel-am3.sh \
+t/serial-tests.sh \
+t/parallel-tests-basics.sh \
+t/parallel-tests-concurrency.sh \
+t/parallel-tests-concurrency-2.sh \
+t/parallel-tests-empty.sh \
+t/parallel-tests-exit-status-reported.sh \
+t/parallel-tests-generated-and-distributed.sh \
+t/parallel-tests-recheck.sh \
+t/parallel-tests-trailing-whitespace.sh \
+t/parallel-tests-recheck-depends-on-all.sh \
+t/parallel-tests-recheck-pr11791.sh \
+t/parallel-tests-exeext.sh \
+t/parallel-tests-suffix.sh \
+t/parallel-tests-suffix-prog.sh \
+t/parallel-tests-log-compiler-1.sh \
+t/parallel-tests-log-compiler-2.sh \
+t/parallel-tests-dry-run-1.sh \
+t/parallel-tests-dry-run-2.sh \
+t/parallel-tests-fd-redirect.sh \
+t/parallel-tests-fd-redirect-exeext.sh \
+t/parallel-tests-extra-programs.sh \
+t/parallel-tests-unreadable.sh \
+t/parallel-tests-subdir.sh \
+t/parallel-tests-interrupt.tap \
+t/parallel-tests-reset-term.sh \
+t/parallel-tests-harderror.sh \
+t/parallel-tests-log-override-1.sh \
+t/parallel-tests-log-override-2.sh \
+t/parallel-tests-log-override-recheck.sh \
+t/parallel-tests-log-compiler-example.sh \
+t/parallel-tests-cmdline-override.sh \
+t/parallel-tests-fork-bomb.sh \
+t/parallel-tests-empty-testlogs.sh \
+t/parallel-tests-driver-install.sh \
+t/parallel-tests-no-color-in-log.sh \
+t/parallel-tests-no-spurious-summary.sh \
+t/parallel-tests-exit-statuses.sh \
+t/parallel-tests-console-output.sh \
+t/parallel-tests-once.sh \
+t/tests-environment.sh \
+t/am-tests-environment.sh \
+t/tests-environment-backcompat.sh \
+t/testsuite-summary-color.sh \
+t/testsuite-summary-count.sh \
+t/testsuite-summary-count-many.sh \
+t/testsuite-summary-reference-log.sh \
+t/test-driver-acsubst.sh \
+t/test-driver-cond.sh \
+t/test-driver-custom-no-extra-driver.sh \
+t/test-driver-custom.sh \
+t/test-driver-custom-xfail-tests.sh \
+t/test-driver-custom-multitest.sh \
+t/test-driver-custom-multitest-recheck.sh \
+t/test-driver-custom-multitest-recheck2.sh \
+t/test-driver-create-log-dir.sh \
+t/test-driver-strip-vpath.sh \
+t/test-driver-trs-suffix-registered.sh \
+t/test-driver-fail.sh \
+t/test-driver-is-distributed.sh \
+t/test-harness-vpath-rewrite.sh \
+t/test-log.sh \
+t/test-logs-repeated.sh \
+t/test-metadata-global-log.sh \
+t/test-metadata-global-result.sh \
+t/test-metadata-recheck.sh \
+t/test-metadata-results.sh \
+t/test-missing.sh \
+t/test-missing2.sh \
+t/test-trs-basic.sh \
+t/test-trs-recover.sh \
+t/test-trs-recover2.sh \
+t/test-extensions.sh \
+t/test-extensions-cond.sh \
+t/parse.sh \
+t/percent.sh \
+t/percent2.sh \
+t/per-target-flags.sh \
+t/phony.sh \
+t/precious.sh \
+t/pluseq.sh \
+t/pluseq2.sh \
+t/pluseq3.sh \
+t/pluseq4.sh \
+t/pluseq5.sh \
+t/pluseq6.sh \
+t/pluseq7.sh \
+t/pluseq8.sh \
+t/pluseq9.sh \
+t/pluseq10.sh \
+t/pluseq11.sh \
+t/posixsubst-data.sh \
+t/posixsubst-extradist.sh \
+t/posixsubst-ldadd.sh \
+t/posixsubst-libraries.sh \
+t/posixsubst-ltlibraries.sh \
+t/posixsubst-programs.sh \
+t/posixsubst-scripts.sh \
+t/posixsubst-sources.sh \
+t/posixsubst-tests.sh \
+t/ppf77.sh \
+t/pr2.sh \
+t/pr9.sh \
+t/pr72.sh \
+t/pr87.sh \
+t/pr211.sh \
+t/pr220.sh \
+t/pr224.sh \
+t/pr229.sh \
+t/pr243.sh \
+t/pr266.sh \
+t/pr279.sh \
+t/pr279-2.sh \
+t/pr287.sh \
+t/pr300-lib.sh \
+t/pr300-ltlib.sh \
+t/pr300-prog.sh \
+t/pr307.sh \
+t/pr401.sh \
+t/pr401b.sh \
+t/pr401c.sh \
+t/prefix.sh \
+t/preproc-basics.sh \
+t/preproc-c-compile.sh \
+t/preproc-demo.sh \
+t/preproc-errmsg.sh \
+t/primary.sh \
+t/primary2.sh \
+t/primary3.sh \
+t/primary-prefix-invalid-couples.tap \
+t/primary-prefix-valid-couples.sh \
+t/primary-prefix-couples-force-valid.sh \
+t/primary-prefix-couples-documented-valid.sh \
+t/print-libdir.sh \
+t/proginst.sh \
+t/programs-primary-rewritten.sh \
+t/py-compile-basic.sh \
+t/py-compile-basedir.sh \
+t/py-compile-destdir.sh \
+t/py-compile-env.sh \
+t/py-compile-option-terminate.sh \
+t/py-compile-usage.sh \
+t/python.sh \
+t/python2.sh \
+t/python3.sh \
+t/python10.sh \
+t/python11.sh \
+t/python12.sh \
+t/python-am-path-iftrue.sh \
+t/python-missing.sh \
+t/python-too-old.sh \
+t/python-dist.sh \
+t/python-vars.sh \
+t/python-virtualenv.sh \
+t/python-pr10995.sh \
+t/recurs-user.sh \
+t/recurs-user2.sh \
+t/recurs-user-deeply-nested.sh \
+t/recurs-user-indir.sh \
+t/recurs-user-keep-going.sh \
+t/recurs-user-many.sh \
+t/recurs-user-no-subdirs.sh \
+t/recurs-user-no-top-level.sh \
+t/recurs-user-override.sh \
+t/recurs-user-phony.sh \
+t/recurs-user-wrap.sh \
+t/relativize.tap \
+t/remake-fail.sh \
+t/remake-not-after-make-dist.sh \
+t/remake-maintainer-mode.sh \
+t/remake-makefile-intree.sh \
+t/remake-makefile-vpath.sh \
+t/remake-after-configure-ac.sh \
+t/remake-after-makefile-am.sh \
+t/remake-after-acinclude-m4.sh \
+t/remake-after-aclocal-m4.sh \
+t/remake-include-configure.sh \
+t/remake-include-makefile.sh \
+t/remake-include-aclocal.sh \
+t/remake-config-status-dependencies.sh \
+t/remake-configure-dependencies.sh \
+t/remake-deeply-nested.sh \
+t/remake-mild-stress.sh \
+t/remake-all-1.sh \
+t/remake-all-2.sh \
+t/remake-recurs-user.sh \
+t/remake-subdir.sh \
+t/remake-subdir2.sh \
+t/remake-subdir3.sh \
+t/remake-subdir-only.sh \
+t/remake-subdir-grepping.sh \
+t/remake-subdir-from-subdir.sh \
+t/remake-subdir-gnu.sh \
+t/remake-subdir-no-makefile.sh \
+t/remake-subdir-long-time.sh \
+t/remake-gnulib-add-acsubst.sh \
+t/remake-gnulib-add-header.sh \
+t/remake-gnulib-remove-header.sh \
+t/remake-moved-m4-file.sh \
+t/remake-deleted-m4-file.sh \
+t/remake-renamed-m4-file.sh \
+t/remake-renamed-m4-macro-and-file.sh \
+t/remake-renamed-m4-macro.sh \
+t/remake-am-pr10111.sh \
+t/remake-m4-pr10111.sh \
+t/remake-deleted-am-2.sh \
+t/remake-deleted-am-subdir.sh \
+t/remake-deleted-am.sh \
+t/remake-renamed-am.sh \
+t/remake-aclocal-version-mismatch.sh \
+t/remake-macrodir.sh \
+t/remake-timing-bug-pr8365.sh \
+t/reqd2.sh \
+t/repeated-options.sh \
+t/rm-f-probe.sh \
+t/rulepat.sh \
+t/self-check-cc-no-c-o.sh \
+t/self-check-configure-help.sh \
+t/self-check-dir.tap \
+t/self-check-exit.tap \
+t/self-check-explicit-skips.sh \
+t/self-check-is_newest.tap \
+t/self-check-me.tap \
+t/self-check-report.sh \
+t/self-check-seq.tap \
+t/self-check-shell-no-trail-bslash.sh \
+t/self-check-is-blocked-signal.tap \
+t/self-check-unindent.tap \
+t/sanity.sh \
+t/seenc.sh \
+t/silent-c.sh \
+t/silent-cxx.sh \
+t/silent-lt.sh \
+t/silent-f77.sh \
+t/silent-f90.sh \
+t/silent-many-languages.sh \
+t/silent-gen.sh \
+t/silent-texi.sh \
+t/silent-lex.sh \
+t/silent-yacc.sh \
+t/silent-yacc-headers.sh \
+t/silent-configsite.sh \
+t/silent-nested-vars.sh \
+t/silent-custom.sh \
+t/src-acsubst.sh \
+t/sourcefile-in-subdir.sh \
+t/space.sh \
+t/specflg6.sh \
+t/specflg7.sh \
+t/specflg8.sh \
+t/specflg9.sh \
+t/specflg-dummy.sh \
+t/spell.sh \
+t/spell2.sh \
+t/spell3.sh \
+t/spelling.sh \
+t/spy-double-colon.sh \
+t/spy-rm.tap \
+t/stdinc.sh \
+t/stamph2.sh \
+t/stdlib.sh \
+t/stdlib2.sh \
+t/strictness-override.sh \
+t/strictness-precedence.sh \
+t/strip.sh \
+t/strip2.sh \
+t/strip3.sh \
+t/subdir.sh \
+t/subdir-ac-subst.sh \
+t/subdir-add-pr46.sh \
+t/subdir-add2-pr46.sh \
+t/subdir-am-cond.sh \
+t/subdir-cond-err.sh \
+t/subdir-cond-gettext.sh \
+t/subdir-env-interference.sh \
+t/subdir-order.sh \
+t/subdir-with-slash.sh \
+t/subdir-subsub.sh \
+t/subdir-distclean.sh \
+t/subdir-keep-going-pr12554.sh \
+t/subobj.sh \
+t/subobj2.sh \
+t/subobj4.sh \
+t/subobj5.sh \
+t/subobj6.sh \
+t/subobj7.sh \
+t/subobj8.sh \
+t/subobj9.sh \
+t/subobj10.sh \
+t/subobj11a.sh \
+t/subobj11b.sh \
+t/subobj11c.sh \
+t/subobjname.sh \
+t/subobj-clean-pr10697.sh \
+t/subobj-clean-lt-pr10697.sh \
+t/subobj-indir-pr13928.sh \
+t/subobj-objname-clash.sh \
+t/subobj-vpath-pr13928.sh \
+t/subobj-pr13928-more-langs.sh \
+t/subpkg.sh \
+t/subpkg2.sh \
+t/subpkg3.sh \
+t/subpkg4.sh \
+t/subpkg-yacc.sh \
+t/subpkg-macrodir.sh \
+t/subst.sh \
+t/subst3.sh \
+t/subst4.sh \
+t/subst5.sh \
+t/subst-no-trailing-empty-line.sh \
+t/substref.sh \
+t/substre2.sh \
+t/substtarg.sh \
+t/suffix.sh \
+t/suffix2.sh \
+t/suffix3.tap \
+t/suffix4.sh \
+t/suffix5.sh \
+t/suffix6.sh \
+t/suffix6b.sh \
+t/suffix6c.sh \
+t/suffix7.sh \
+t/suffix8.tap \
+t/suffix9.sh \
+t/suffix10.tap \
+t/suffix11.tap \
+t/suffix-chain.tap \
+t/suffix-custom-pr14441.sh \
+t/suffix-custom-subobj.sh \
+t/suffix-custom-subobj-and-specflg.sh \
+t/suffix-extra-c-stuff-pr14560.sh \
+t/symlink.sh \
+t/symlink2.sh \
+t/syntax.sh \
+t/tap-ambiguous-directive.sh \
+t/tap-autonumber.sh \
+t/tap-bailout.sh \
+t/tap-bailout-leading-space.sh \
+t/tap-bailout-and-logging.sh \
+t/tap-bailout-suppress-badexit.sh \
+t/tap-bailout-suppress-later-diagnostic.sh \
+t/tap-bailout-suppress-later-errors.sh \
+t/tap-color.sh \
+t/tap-deps.sh \
+t/tap-diagnostic.sh \
+t/tap-empty-diagnostic.sh \
+t/tap-empty.sh \
+t/tap-escape-directive.sh \
+t/tap-escape-directive-2.sh \
+t/tap-exit.sh \
+t/tap-signal.tap \
+t/tap-fancy.sh \
+t/tap-fancy2.sh \
+t/tap-global-log.sh \
+t/tap-global-result.sh \
+t/tap-log.sh \
+t/tap-msg0-result.sh \
+t/tap-msg0-directive.sh \
+t/tap-msg0-planskip.sh \
+t/tap-msg0-bailout.sh \
+t/tap-msg0-misc.sh \
+t/tap-merge-stdout-stderr.sh \
+t/tap-no-merge-stdout-stderr.sh \
+t/tap-no-disable-hard-error.sh \
+t/tap-no-spurious-summary.sh \
+t/tap-no-spurious-numbers.sh \
+t/tap-no-spurious.sh \
+t/tap-not-ok-skip.sh \
+t/tap-number-wordboundary.sh \
+t/tap-numeric-description.sh \
+t/tap-negative-numbers.sh \
+t/tap-numbers-leading-zero.sh \
+t/tap-out-of-order.sh \
+t/tap-passthrough.sh \
+t/tap-passthrough-exit.sh \
+t/tap-plan.sh \
+t/tap-plan-corner.sh \
+t/tap-plan-errors.sh \
+t/tap-plan-middle.sh \
+t/tap-plan-whitespace.sh \
+t/tap-plan-leading-zero.sh \
+t/tap-plan-malformed.sh \
+t/tap-missing-plan-and-bad-exit.sh \
+t/tap-planskip.sh \
+t/tap-planskip-late.sh \
+t/tap-planskip-and-logging.sh \
+t/tap-planskip-unplanned.sh \
+t/tap-planskip-unplanned-corner.sh \
+t/tap-planskip-case-insensitive.sh \
+t/tap-planskip-whitespace.sh \
+t/tap-planskip-badexit.sh \
+t/tap-planskip-bailout.sh \
+t/tap-planskip-later-errors.sh \
+t/tap-test-number-0.sh \
+t/tap-recheck-logs.sh \
+t/tap-result-comment.sh \
+t/tap-todo-skip-together.sh \
+t/tap-todo-skip-whitespace.sh \
+t/tap-todo-skip.sh \
+t/tap-unplanned.sh \
+t/tap-whitespace-normalization.sh \
+t/tap-with-and-without-number.sh \
+t/tap-xfail-tests.sh \
+t/tap-common-setup.sh \
+t/tap-bad-prog.tap \
+t/tap-basic.sh \
+t/tap-diagnostic-custom.sh \
+t/tap-driver-stderr.sh \
+t/tap-doc.sh \
+t/tap-doc2.sh \
+t/tap-more.sh \
+t/tap-more2.sh \
+t/tap-recheck.sh \
+t/tap-summary.sh \
+t/tap-summary-color.sh \
+t/tags.sh \
+t/tags2.sh \
+t/tagsub.sh \
+t/tags-pr12372.sh \
+t/tar-ustar.sh \
+t/tar-pax.sh \
+t/tar-opts-errors.sh \
+t/tar-ustar-id-too-high.sh \
+t/tar-override.sh \
+t/target-cflags.sh \
+t/targetclash.sh \
+t/tests-environment-fd-redirect.sh \
+t/tests-environment-and-log-compiler.sh \
+t/txinfo-absolute-srcdir-pr408.sh \
+t/txinfo-add-missing-and-dist.sh \
+t/txinfo-bsd-make-recurs.sh \
+t/txinfo-builddir.sh \
+t/txinfo-clean.sh \
+t/txinfo-dvi-recurs.sh \
+t/txinfo-info-in-srcdir.sh \
+t/txinfo-include.sh \
+t/txinfo-makeinfo-error-no-clobber.sh \
+t/txinfo-many-output-formats.sh \
+t/txinfo-many-output-formats-vpath.sh \
+t/txinfo-nodist-info.sh \
+t/txinfo-no-clutter.sh \
+t/txinfo-no-extra-dist.sh \
+t/txinfo-no-installinfo.sh \
+t/txinfo-no-repeated-targets.sh \
+t/txinfo-other-suffixes.sh \
+t/txinfo-override-infodeps.sh \
+t/txinfo-override-texinfo-tex.sh \
+t/txinfo-setfilename-repeated.sh \
+t/txinfo-setfilename-suffix-strip.sh \
+t/txinfo-subdir-pr343.sh \
+t/txinfo-tex-dist.sh \
+t/txinfo-unrecognized-extension.sh \
+t/txinfo-unrecognized-info-suffix.sh \
+t/txinfo-vtexi.sh \
+t/txinfo-vtexi2.sh \
+t/txinfo-vtexi3.sh \
+t/txinfo-vtexi4.sh \
+t/txinfo-without-info-suffix.sh \
+t/txinfo19.sh \
+t/txinfo23.sh \
+t/txinfo24.sh \
+t/txinfo25.sh \
+t/txinfo28.sh \
+t/transform.sh \
+t/transform2.sh \
+t/transform3.sh \
+t/uninstall-fail.sh \
+t/uninstall-pr9578.sh \
+t/unused.sh \
+t/upc.sh \
+t/upc2.sh \
+t/upc3.sh \
+t/vala-configure.sh \
+t/vala-grepping.sh \
+t/vala-headers.sh \
+t/vala-libs.sh \
+t/vala-mix.sh \
+t/vala-mix2.sh \
+t/vala-non-recursive-setup.sh \
+t/vala-parallel.sh \
+t/vala-per-target-flags.sh \
+t/vala-recursive-setup.sh \
+t/vala-vapi.sh \
+t/vala-vpath.sh \
+t/vars.sh \
+t/vars3.sh \
+t/var-recurs.sh \
+t/var-recurs2.sh \
+t/vartar.sh \
+t/vartypos.sh \
+t/vartypo2.sh \
+t/version3.sh \
+t/version4.sh \
+t/version6.sh \
+t/version7.sh \
+t/version8.sh \
+t/vpath.sh \
+t/warnings-obsolete-default.sh \
+t/warnings-override.sh \
+t/warnings-precedence.sh \
+t/warnings-strictness-interactions.sh \
+t/warnings-unknown.sh \
+t/warnopts.sh \
+t/warnings-win-over-strictness.sh \
+t/warning-groups-win-over-strictness.sh \
+t/werror.sh \
+t/werror2.sh \
+t/werror3.sh \
+t/werror4.sh \
+t/whoami.sh \
+t/xsource.sh \
+t/yacc-misc.sh \
+t/yacc-dry.sh \
+t/yacc-cxx-grepping.sh \
+t/yacc-vpath.sh \
+t/yacc-auxdir.sh \
+t/yacc-basic.sh \
+t/yacc-cxx.sh \
+t/yacc-bison-skeleton-cxx.sh \
+t/yacc-bison-skeleton.sh \
+t/yacc-clean.sh \
+t/yacc-clean-cxx.sh \
+t/yacc-d-basic.sh \
+t/yacc-d-cxx.sh \
+t/yacc-d-vpath.sh \
+t/yacc-deleted-headers.sh \
+t/yacc-depend.sh \
+t/yacc-depend2.sh \
+t/yacc-dist-nobuild-subdir.sh \
+t/yacc-dist-nobuild.sh \
+t/yacc-grepping.sh \
+t/yacc-grepping2.sh \
+t/yacc-headers-and-dist-pr47.sh \
+t/yacc-line.sh \
+t/yacc-mix-c-cxx.sh \
+t/yacc-nodist.sh \
+t/yacc-pr204.sh \
+t/yacc-subdir.sh \
+t/yacc-weirdnames.sh \
+t/yflags.sh \
+t/yflags-cxx.sh \
+t/yflags-cmdline-override.sh \
+t/yflags-conditional.sh \
+t/yflags-d-false-positives.sh \
+t/yflags-force-conditional.sh \
+t/yflags-force-override.sh \
+t/yflags-var-expand.sh \
+t/libtool-macros.sh \
+t/gettext-macros.sh \
+t/pkg-config-macros.sh
+
+print-list-of-tests:
+ @echo $(handwritten_TESTS)
+.PHONY: print-list-of-tests
diff --git a/t/listval.sh b/t/listval.sh
new file mode 100644
index 000000000..95970c705
--- /dev/null
+++ b/t/listval.sh
@@ -0,0 +1,46 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure variable is expanded properly.
+# From Adam J. Richter.
+
+required=libtool
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_SUBST([LTLIBOBJS])
+AM_PROG_AR
+AC_PROG_LIBTOOL
+END
+
+cat > Makefile.am << 'END'
+lib_LTLIBRARIES = libpanel_applet.la
+libpanel_applet_la_SOURCES = \
+ applet-widget.c
+libpanel_applet_la_LDFLAGS = -version-info 0:1:0 -rpath $(libdir)
+libpanel_applet_la_LIBADD = -lm
+END
+
+: > ltconfig
+: > ltmain.sh
+: > ar-lib
+: > config.guess
+: > config.sub
+
+$ACLOCAL
+$AUTOMAKE
+
+:
diff --git a/t/local.mk b/t/local.mk
new file mode 100644
index 000000000..082edb0a9
--- /dev/null
+++ b/t/local.mk
@@ -0,0 +1,268 @@
+## Included by top-level Makefile for Automake.
+
+## Copyright (C) 1995-2017 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 <https://www.gnu.org/licenses/>.
+
+## ------------ ##
+## Testsuite. ##
+## ------------ ##
+
+# Run the tests with a proper shell detected at configure time.
+LOG_COMPILER = ./pre-inst-env $(AM_TEST_RUNNER_SHELL)
+
+TEST_EXTENSIONS = .pl .sh .tap
+SH_LOG_COMPILER = $(LOG_COMPILER)
+TAP_LOG_COMPILER = $(LOG_COMPILER)
+PL_LOG_COMPILER = ./pre-inst-env $(PERL)
+AM_PL_LOG_FLAGS = -Mstrict -w
+
+TAP_LOG_DRIVER = AM_TAP_AWK='$(AWK)' $(SHELL) $(srcdir)/lib/tap-driver.sh
+
+AM_TAP_LOG_DRIVER_FLAGS = --merge
+
+EXTRA_DIST += %D%/README %D%/ax/is %D%/ax/is_newest %D%/ax/deltree.pl
+
+
+## Will be updated later.
+TESTS =
+
+# Some testsuite-influential variables should be overridable from the
+# test scripts, but not from the environment.
+# Keep this in sync with the similar list in ax/runtest.in.
+AM_TESTS_ENVIRONMENT = \
+ for v in \
+ required \
+ am_test_protocol \
+ am_serial_tests \
+ am_test_prefer_config_shell \
+ am_original_AUTOMAKE \
+ am_original_ACLOCAL \
+ am_test_lib_sourced \
+ test_lib_sourced \
+ ; do \
+ eval test x"\$${$$v}" = x || unset $$v; \
+ done;
+# We want warning messages and explanations for skipped tests to go to
+# the console if possible, so set up 'stderr_fileno_' properly.
+AM_TESTS_FD_REDIRECT = 9>&2
+AM_TESTS_ENVIRONMENT += stderr_fileno_=9; export stderr_fileno_;
+
+# For sourcing of extra "shell libraries" by our test scripts. As per
+# POSIX, sourcing a file with '.' will cause it to be looked up in $PATH
+# in case it is given with a relative name containing no slashes.
+AM_TESTS_ENVIRONMENT += \
+ if test $(srcdir) != .; then \
+ PATH='$(abs_srcdir)/%D%/ax$(PATH_SEPARATOR)'$$PATH; \
+ fi; \
+ PATH='$(abs_builddir)/%D%/ax$(PATH_SEPARATOR)'$$PATH; \
+ export PATH;
+
+# Hand-written tests.
+
+include $(srcdir)/%D%/list-of-tests.mk
+
+TESTS += $(handwritten_TESTS)
+EXTRA_DIST += $(handwritten_TESTS)
+
+# Automatically-generated tests wrapping hand-written ones.
+# Also, automatically-computed dependencies for tests.
+
+include $(srcdir)/%D%/testsuite-part.am
+
+TESTS += $(generated_TESTS)
+EXTRA_DIST += $(generated_TESTS)
+
+$(srcdir)/%D%/testsuite-part.am:
+ $(AM_V_at)rm -f %D%/testsuite-part.tmp $@
+ $(AM_V_GEN)$(PERL) $(srcdir)/gen-testsuite-part \
+ --srcdir $(srcdir) > %D%/testsuite-part.tmp
+ $(AM_V_at)chmod a-w %D%/testsuite-part.tmp
+ $(AM_V_at)mv -f %D%/testsuite-part.tmp $@
+EXTRA_DIST += gen-testsuite-part
+
+# The dependecies declared here are not truly complete, but such
+# completeness would cause more issues than it would solve. See
+# automake bug#11347.
+$(generated_TESTS): $(srcdir)/gen-testsuite-part
+$(srcdir)/%D%/testsuite-part.am: $(srcdir)/gen-testsuite-part
+$(srcdir)/%D%/testsuite-part.am: Makefile.am
+
+# Hand-written tests for stuff in 'contrib/'.
+include $(srcdir)/contrib/%D%/local.mk
+TESTS += $(contrib_TESTS)
+EXTRA_DIST += $(contrib_TESTS)
+
+# Static dependencies valid for each test case (also further
+# extended later). Note that use 'noinst_' rather than 'check_'
+# as the prefix, because we really want them to be built by
+# "make all". This makes it easier to run the test cases by
+# hand after having simply configured and built the package.
+
+dist_noinst_DATA += \
+ %D%/ax/test-init.sh \
+ %D%/ax/test-lib.sh \
+ %D%/ax/am-test-lib.sh \
+ %D%/ax/tap-functions.sh
+
+# Few more static dependencies.
+%D%/distcheck-missing-m4.log: %D%/ax/distcheck-hook-m4.am
+%D%/distcheck-outdated-m4.log: %D%/ax/distcheck-hook-m4.am
+EXTRA_DIST += %D%/ax/distcheck-hook-m4.am
+
+%D%/ax/test-defs.sh: %D%/ax/test-defs.in Makefile
+ $(AM_V_at)rm -f $@ $@-t
+ $(AM_V_at)$(MKDIR_P) %D%/ax
+ $(AM_V_GEN)in=%D%/ax/test-defs.in \
+ && $(do_subst) <$(srcdir)/$$in >$@-t
+ $(generated_file_finalize)
+EXTRA_DIST += %D%/ax/test-defs.in
+CLEANFILES += %D%/ax/test-defs.sh
+nodist_noinst_DATA += %D%/ax/test-defs.sh
+
+%D%/ax/shell-no-trail-bslash: %D%/ax/shell-no-trail-bslash.in Makefile
+ $(AM_V_at)rm -f $@ $@-t
+ $(AM_V_GEN)in=%D%/ax/shell-no-trail-bslash.in \
+ && $(MKDIR_P) %D%/ax \
+ && $(do_subst) <$(srcdir)/$$in >$@-t \
+ && chmod a+x $@-t
+ $(generated_file_finalize)
+EXTRA_DIST += %D%/ax/shell-no-trail-bslash.in
+CLEANFILES += %D%/ax/shell-no-trail-bslash
+nodist_noinst_SCRIPTS += %D%/ax/shell-no-trail-bslash
+
+%D%/ax/cc-no-c-o: %D%/ax/cc-no-c-o.in Makefile
+ $(AM_V_at)rm -f $@ $@-t
+ $(AM_V_GEN)in=%D%/ax/cc-no-c-o.in \
+ && $(MKDIR_P) %D%/ax \
+ && $(do_subst) <$(srcdir)/$$in >$@-t \
+ && chmod a+x $@-t
+ $(generated_file_finalize)
+EXTRA_DIST += %D%/ax/cc-no-c-o.in
+CLEANFILES += %D%/ax/cc-no-c-o
+nodist_noinst_SCRIPTS += %D%/ax/cc-no-c-o
+
+runtest: %D%/ax/runtest.in Makefile
+ $(AM_V_at)rm -f $@ $@-t
+ $(AM_V_GEN)in=%D%/ax/runtest.in \
+ && $(MKDIR_P) %D%/ax \
+ && $(do_subst) <$(srcdir)/$$in >$@-t \
+ && chmod a+x $@-t
+ $(generated_file_finalize)
+EXTRA_DIST += %D%/ax/runtest.in
+CLEANFILES += runtest
+nodist_noinst_SCRIPTS += runtest
+
+# If two test scripts have the same basename, they will end up sharing
+# the same log file, leading to all sort of undefined and undesired
+# behaviours.
+check-no-repeated-test-name:
+ @LC_ALL=C; export LC_ALL; \
+ lst='$(TEST_LOGS)'; for log in $$lst; do echo $$log; done \
+ | sort | uniq -c | awk '($$1 > 1) { print }' \
+ | sed 's/\.log$$//' | grep . >&2 \
+ && { \
+ echo $@: test names listed above are duplicated >&2; \
+ exit 1; \
+ }; :
+check-local: check-no-repeated-test-name
+.PHONY: check-no-repeated-test-name
+
+# Check that our test cases are syntactically correct.
+# See automake bug#11898.
+check-tests-syntax:
+ @st=0; \
+ err () { echo "$@: $$*" >&2; st=1; }; \
+## The user might do something like "make check TESTS=t/foo" or
+## "make check TESTS_LOGS=t/foo.log" and expect (say) the test
+## 't/foo.sh' to be run; this has worked well until today, and
+## we want to continue supporting this use case.
+ bases=`for log in : $(TEST_LOGS); do echo $$log; done \
+ | sed -e '/^:$$/d' -e 's/\.log$$//'`; \
+ for bas in $$bases; do \
+ for suf in sh tap pl; do \
+ tst=$$bas.$$suf; \
+## Emulate VPATH search.
+ if test -f $$tst; then \
+ break; \
+ elif test -f $(srcdir)/$$tst; then \
+ tst=$(srcdir)/$$tst; \
+ break; \
+ else \
+ tst=''; \
+ fi; \
+ done; \
+ test -n "$$tst" || err "couldn't find test '$$bas'"; \
+## Don't check that perl tests are valid shell scripts!
+ test $$suf = pl && continue; \
+ $(AM_V_P) && echo " $(AM_TEST_RUNNER_SHELL) -n $$tst"; \
+ $(AM_TEST_RUNNER_SHELL) -n "$$tst" \
+ || err "test '$$tst' syntactically invalid"; \
+ done; \
+ exit $$st
+check-local: check-tests-syntax
+.PHONY: check-tests-syntax
+
+# Recipes with a trailing backslash character (possibly followed by
+# blank characters only) can cause spurious syntax errors with at
+# least older bash versions (e.g., bash 2.05b), and can be potentially
+# be unportable to other weaker shells. Run the testsuite in a way
+# that helps catching such problems in Automake-generated recipes.
+# See automake bug#10436.
+check-no-trailing-backslash-in-recipes:
+ $(AM_V_GEN)$(MAKE) $(AM_MAKEFLAGS) check \
+ CONFIG_SHELL='$(abs_top_builddir)/%D%/ax/shell-no-trail-bslash'
+.PHONY: check-no-trailing-backslash-in-recipes
+
+# Some compilers out there (hello, MSVC) still choke on "-c -o" being
+# passed together on the command line. Run the whole testsuite faking
+# the presence of such a compiler, to help catch regressions that would
+# otherwise only present themselves later "in the wild". See also the
+# long discussion about automake bug#13378.
+check-cc-no-c-o:
+ $(AM_V_GEN)$(MAKE) $(AM_MAKEFLAGS) check \
+ AM_TESTSUITE_SIMULATING_NO_CC_C_O=yes
+.PHONY: check-cc-no-c-o
+
+# Automake-generated Makefiles should work when run with parallel make.
+check-parallel:
+ $(AM_V_GEN)$(MAKE) $(AM_MAKEFLAGS) check \
+ AM_TESTSUITE_MAKE="$${AM_TESTSUITE_MAKE-$${MAKE-make}} -j4"
+.PHONY: check-parallel
+
+## Checking the list of tests.
+test_subdirs = %D% %D%/pm contrib/%D%
+include %D%/CheckListOfTests.am
+
+# Run the testsuite with the installed aclocal and automake.
+installcheck-local: installcheck-testsuite
+installcheck-testsuite:
+ $(AM_V_GEN)$(MAKE) $(AM_MAKEFLAGS) check \
+ am_running_installcheck=yes
+
+# Performance tests.
+.PHONY: perf
+perf: all
+ $(AM_V_GEN)$(MAKE) $(AM_MAKEFLAGS) check \
+ TEST_SUITE_LOG='$(PERF_TEST_SUITE_LOG)' TESTS='$(perf_TESTS)'
+PERF_TEST_SUITE_LOG = %D%/perf/test-suite.log
+CLEANFILES += $(PERF_TEST_SUITE_LOG)
+EXTRA_DIST += $(perf_TESTS)
+
+clean-local: clean-local-check
+.PHONY: clean-local-check
+clean-local-check:
+ $(AM_V_GEN)$(PERL) $(srcdir)/t/ax/deltree.pl t/*.dir t/*/*.dir */t/*.dir
+
+# vim: ft=automake noet
diff --git a/t/location.sh b/t/location.sh
new file mode 100644
index 000000000..d13fc6251
--- /dev/null
+++ b/t/location.sh
@@ -0,0 +1,97 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for locations in error messages.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_CONDITIONAL([COND1], [true])
+AM_CONDITIONAL([COND2], [true])
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = libfoo.a
+if COND2
+ lib_LIBRARIES = libfoo.a
+endif
+if COND1
+ bin_PROGRAMS += ctags
+endif
+VAR = 1 \
+ 2 \
+ 3
+
+VAR = 1 \
+ 2 \
+ 3
+END
+
+: > ar-lib
+
+# Smash the useless difference of lib file locations.
+smash_useless_diffs ()
+{
+ sed -e "s,^$am_amdir/\\([a-z]*\.am\\),\\1," \
+ -e "s,^automake-$APIVERSION:,automake:," ${1+"$@"};
+}
+
+$ACLOCAL
+AUTOMAKE_fails -Wno-error
+
+smash_useless_diffs stderr >observed
+
+# Apparently useless use of sed here required to avoid spuriously
+# triggering some maintainer-checks failures.
+sed 's/^> //' > expected << 'END'
+> Makefile.am:12: warning: VAR multiply defined in condition TRUE ...
+> Makefile.am:8: ... 'VAR' previously defined here
+> automake: error: libfoo_a_OBJECTS should not be defined
+> Makefile.am:3: while processing library 'libfoo.a'
+> automake: error: use 'libfoo_a_LDADD', not 'libfoo_a_LIBADD'
+> Makefile.am:3: while processing library 'libfoo.a'
+> library.am: warning: deprecated feature: target 'libfoo.a' overrides 'libfoo.a$(EXEEXT)'
+> library.am: change your target to read 'libfoo.a$(EXEEXT)'
+> Makefile.am:3: while processing library 'libfoo.a'
+> program.am: target 'libfoo.a$(EXEEXT)' was defined here
+> Makefile.am:1: while processing program 'libfoo.a'
+> program.am: warning: redefinition of 'libfoo.a$(EXEEXT)' ...
+> Makefile.am:1: while processing program 'libfoo.a'
+> library.am: ... 'libfoo.a' previously defined here
+> Makefile.am:3: while processing library 'libfoo.a'
+> tags.am: warning: redefinition of 'ctags' ...
+> program.am: ... 'ctags$(EXEEXT)' previously defined here
+> Makefile.am:6: while processing program 'ctags'
+END
+
+cat expected
+cat observed
+diff expected observed || exit 1
+
+AUTOMAKE_fails -Werror
+smash_useless_diffs stderr >observed
+(echo 'automake: warnings are treated as errors' && cat expected) > t
+mv -f t expected
+
+cat expected
+cat observed
+
+diff expected observed || exit 1
+
+:
diff --git a/t/longlin2.sh b/t/longlin2.sh
new file mode 100644
index 000000000..858f3f95a
--- /dev/null
+++ b/t/longlin2.sh
@@ -0,0 +1,48 @@
+#! /bin/sh
+# Copyright (C) 2005-2017 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 <https://www.gnu.org/licenses/>.
+
+# Long lines should be wrapped.
+# Report from Albert Chin.
+
+. test-init.sh
+
+n=1 files= match=
+while test $n -le 100
+do
+ files="$files filename$n"
+ match="..........$match"
+ n=$(($n + 1))
+done
+files2=$(echo "$files" | sed s/filename/filenameb/g)
+
+cat >Makefile.am <<EOF
+FOO = $files $files2 \
+ grepme
+EOF
+
+# The 'FOO = ...' line is 2293-byte long. More than what a POSIX
+# conformant system is expected to support. So do not use grep
+# on the non-text file.
+
+# grep $match Makefile.am
+
+$ACLOCAL
+$AUTOMAKE
+
+grep $match Makefile.in && exit 1
+grep 'filenameb100 grepme' Makefile.in
+
+:
diff --git a/t/longline.sh b/t/longline.sh
new file mode 100644
index 000000000..25920c689
--- /dev/null
+++ b/t/longline.sh
@@ -0,0 +1,32 @@
+#! /bin/sh
+# Copyright (C) 2004-2017 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 <https://www.gnu.org/licenses/>.
+
+# Long lines of += should be wrapped.
+# Report from Simon Josefsson.
+
+. test-init.sh
+
+(echo DUMMY = some_long_filename_1;
+for i in 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20;
+do
+ echo DUMMY += some_long_filename_$i
+done) > Makefile.am
+
+$ACLOCAL
+$AUTOMAKE
+test 80 -ge $(grep DUMMY Makefile.in | wc -c)
+
+:
diff --git a/t/ltcond.sh b/t/ltcond.sh
new file mode 100644
index 000000000..1c013e821
--- /dev/null
+++ b/t/ltcond.sh
@@ -0,0 +1,106 @@
+#!/bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for conditional libtool libraries.
+# This combines two examples from the manual.
+
+required='cc libtoolize'
+. test-init.sh
+
+cat >>configure.ac <<'END'
+AM_CONDITIONAL([WANT_LIBFOO], [true])
+AM_CONDITIONAL([WANT_LIBBAR], [false])
+AC_SUBST([WANTEDLIBS], ['lib1foo.la lib1bar.la'])
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_LIBTOOL
+AC_OUTPUT
+END
+
+cat >Makefile.am <<'END'
+EXTRA_LTLIBRARIES = lib1foo.la lib1bar.la lib3bar.la
+lib_LTLIBRARIES = $(WANTEDLIBS)
+lib1foo_la_SOURCES = foo.c
+lib1foo_la_LDFLAGS = -rpath '$(libdir)'
+lib1bar_la_SOURCES = bar.c
+lib1bar_la_LDFLAGS = -rpath '$(libdir)'
+lib3bar_la_SOURCES = bar.c
+
+if WANT_LIBFOO
+lib_LTLIBRARIES += lib2foo.la
+check_LTLIBRARIES = lib3foo.la
+endif
+if WANT_LIBBAR
+lib_LTLIBRARIES += lib2bar.la
+endif
+lib2foo_la_SOURCES = foo.c
+lib2bar_la_SOURCES = bar.c
+lib3foo_la_SOURCES = foo.c
+END
+
+echo 'int one () { return 1; }' >foo.c
+echo 'int two () { return 2; }' >bar.c
+
+mkdir empty
+
+libtoolize
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+cwd=$(pwd) || fatal_ "getting current working directory"
+
+# Install libraries in lib/, and the rest in empty/.
+# (in fact there is no "rest", so as the name imply empty/ is
+# expected to remain empty).
+./configure --prefix="$cwd/empty" --libdir="$cwd/lib"
+
+$MAKE
+test -f lib1foo.la
+test -f lib1bar.la
+test -f lib2foo.la
+test ! -e lib2bar.la
+test ! -e lib3foo.la
+test ! -e lib3bar.la
+
+$MAKE check
+test ! -e lib2bar.la
+test -f lib3foo.la
+test ! -e lib3bar.la
+
+$MAKE install
+test -f lib/lib1foo.la
+test -f lib/lib1bar.la
+test -f lib/lib2foo.la
+test ! -e lib/lib3foo.la
+find empty -type f -print > empty.lst
+test -s empty.lst && { cat empty.lst; exit 1; }
+
+$MAKE uninstall
+find lib -type f -print > lib.lst
+test -s lib.lst && { cat lib.lst; exit 1; }
+test -f lib1foo.la
+test -f lib1bar.la
+test -f lib2foo.la
+test -f lib3foo.la
+
+$MAKE clean
+test ! -e lib1foo.la
+test ! -e lib1bar.la
+test ! -e lib2foo.la
+test ! -e lib3foo.la
+
+:
diff --git a/t/ltcond2.sh b/t/ltcond2.sh
new file mode 100644
index 000000000..e39935107
--- /dev/null
+++ b/t/ltcond2.sh
@@ -0,0 +1,91 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for bug in conditionals.
+
+required='cc native libtoolize'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_LIBTOOL
+AC_SUBST([HELLO_SYSTEM], [hello-generic.lo])
+AM_CONDITIONAL([LINUX], [true])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+lib_LTLIBRARIES = libhello.la
+libhello_la_SOURCES = hello-common.c
+EXTRA_libhello_la_SOURCES = hello-linux.c hello-generic.c
+libhello_la_LIBADD = $(HELLO_SYSTEM)
+libhello_la_DEPENDENCIES = $(HELLO_SYSTEM)
+
+lib_LTLIBRARIES += libhello2.la
+libhello2_la_SOURCES = hello-common.c
+if LINUX
+libhello2_la_SOURCES += hello-linux.c
+else
+libhello2_la_SOURCES += hello-generic.c
+endif
+
+bin_PROGRAMS = hello hello2
+hello_SOURCES = main.c
+hello_LDADD = libhello.la
+hello2_SOURCES = main.c
+hello2_LDADD = libhello2.la
+
+check-local:
+ ./hello$(EXEEXT) | grep hello-generic
+ ./hello2$(EXEEXT) | grep hello-linux
+ : > check-ok
+END
+
+cat > hello-linux.c <<'END'
+const char* str = "hello-linux";
+END
+
+cat > hello-generic.c <<'END'
+const char* str = "hello-generic";
+END
+
+cat > hello-common.c <<'END'
+#include <stdio.h>
+extern const char* str;
+void print (void)
+{
+ puts (str);
+}
+END
+
+cat > main.c <<'END'
+int main (void)
+{
+ print();
+ return 0;
+}
+END
+
+libtoolize
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+./configure
+$MAKE check
+test -f check-ok
+
+:
diff --git a/t/ltconv.sh b/t/ltconv.sh
new file mode 100644
index 000000000..6f8a6fc2d
--- /dev/null
+++ b/t/ltconv.sh
@@ -0,0 +1,158 @@
+#!/bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for libtool convenience libraries.
+# This example is taken from the manual.
+
+required='cc native libtoolize'
+. test-init.sh
+
+cat >>configure.ac <<'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_LIBTOOL
+AC_CONFIG_FILES([sub1/Makefile
+ sub2/Makefile
+ sub2/sub21/Makefile
+ sub2/sub22/Makefile])
+AC_OUTPUT
+END
+
+mkdir sub1
+mkdir sub2
+mkdir sub2/sub21
+mkdir sub2/sub22
+mkdir empty
+
+cat >Makefile.am <<'END'
+SUBDIRS = sub1 sub2
+lib_LTLIBRARIES = libtop.la
+libtop_la_SOURCES =
+libtop_la_LIBADD = \
+ sub1/libsub1.la \
+ sub2/libsub2.la
+
+bin_PROGRAMS = ltconvtest
+ltconvtest_SOURCES = test.c
+ltconvtest_LDADD = libtop.la
+
+check-local:
+ ./ltconvtest$(EXEEXT)
+ : > check-ok
+installcheck-local:
+ $(bindir)/ltconvtest$(EXEEXT)
+ : > installcheck-ok
+END
+
+cat >sub1/Makefile.am <<'END'
+noinst_LTLIBRARIES = libsub1.la
+libsub1_la_SOURCES = sub1.c
+END
+
+echo 'int sub1 () { return 1; }' > sub1/sub1.c
+
+cat >sub2/Makefile.am <<'END'
+SUBDIRS = sub21 sub22
+noinst_LTLIBRARIES = libsub2.la
+libsub2_la_SOURCES = sub2.c
+libsub2_la_LIBADD = \
+ sub21/libsub21.la \
+ sub22/libsub22.la
+END
+
+echo 'int sub2 () { return 2; }' > sub2/sub2.c
+
+cat >sub2/sub21/Makefile.am <<'END'
+noinst_LTLIBRARIES = libsub21.la
+libsub21_la_SOURCES = sub21.c
+END
+
+echo 'int sub21 () { return 21; }' > sub2/sub21/sub21.c
+
+cat >sub2/sub22/Makefile.am <<'END'
+noinst_LTLIBRARIES = libsub22.la
+libsub22_la_SOURCES = sub22.c
+END
+
+echo 'int sub22 () { return 22; }' > sub2/sub22/sub22.c
+
+cat >test.c <<'EOF'
+#include <stdio.h>
+int main ()
+{
+ if (1 != sub1 ())
+ return 1;
+ if (2 != sub2 ())
+ return 2;
+ if (21 != sub21 ())
+ return 3;
+ if (22 != sub22 ())
+ return 4;
+ return 0;
+}
+EOF
+
+libtoolize
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+cwd=$(pwd) || fatal_ "getting current working directory"
+
+# Install libraries in lib/, programs in bin/, and the rest in empty/.
+# (in fact there is no "rest", so as the name imply empty/ is
+# expected to remain empty).
+./configure --prefix="$cwd/empty" --libdir="$cwd/lib" --bindir="$cwd/bin"
+
+$MAKE
+test -f libtop.la
+test -f sub1/libsub1.la
+test -f sub2/libsub2.la
+test -f sub2/sub21/libsub21.la
+test -f sub2/sub22/libsub22.la
+$MAKE check
+test -f check-ok
+rm -f check-ok
+
+$MAKE install
+test -f lib/libtop.la
+$MAKE installcheck
+test -f installcheck-ok
+rm -f installcheck-ok
+
+find empty -type f -print > empty.lst
+test -s empty.lst && { cat empty.lst; exit 1; }
+
+$MAKE clean
+test ! -e libtop.la
+test ! -e sub1/libsub1.la
+test ! -e sub2/libsub2.la
+test ! -e sub2/sub21/libsub21.la
+test ! -e sub2/sub22/libsub22.la
+test ! -e ltconvtest
+
+$MAKE installcheck
+test -f installcheck-ok
+rm -f installcheck-ok
+
+$MAKE uninstall
+for d in lib bin; do
+ find $d -type f -print > $d.lst
+ test -s $d.lst && { cat $d.lst; exit 1; }
+ : For shells with busted 'set -e'.
+done
+
+:
diff --git a/t/ltdeps.sh b/t/ltdeps.sh
new file mode 100644
index 000000000..40e39a1df
--- /dev/null
+++ b/t/ltdeps.sh
@@ -0,0 +1,61 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure libtool library dependencies are correct.
+# Report from Lars J. Aas.
+required=libtool
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_PROG_AR
+AC_PROG_LIBTOOL
+AC_PROG_CXX
+AM_CONDITIONAL(HACKING_COMPACT_BUILD, whatever)
+END
+
+cat > Makefile.am << 'END'
+RegularSources = \
+ SbBSPTree.cpp \
+ SbBox2f.cpp \
+ SbBox2s.cpp
+
+LinkHackSources = \
+ all.cpp
+
+if HACKING_COMPACT_BUILD
+BuildSources = $(LinkHackSources)
+else
+BuildSources = $(RegularSources)
+endif
+
+noinst_LTLIBRARIES = libbase.la
+libbase_la_SOURCES = $(BuildSources)
+
+EXTRA_libbase_la_SOURCES = \
+ $(RegularSources) $(LinkHackSources)
+END
+
+: > ltconfig
+: > ltmain.sh
+: > ar-lib
+: > config.guess
+: > config.sub
+
+$ACLOCAL
+$AUTOMAKE
+
+grep 'OBJECTS =$' Makefile.in && exit 1
+exit 0
diff --git a/t/ltinit.sh b/t/ltinit.sh
new file mode 100644
index 000000000..70b109083
--- /dev/null
+++ b/t/ltinit.sh
@@ -0,0 +1,66 @@
+#!/bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test that libtool support works correctly when "newer" libtool
+# interface (with LT_INIT etc.) is used (this interface has been
+# present since libtool 1.9b, circa 2004).
+
+required='cc libtoolize'
+. test-init.sh
+
+cat >>configure.ac <<'END'
+AC_PROG_CC
+AM_PROG_AR
+dnl Older libtool versions don't define LT_PREREQ :-(
+m4_ifdef([LT_PREREQ],
+ [LT_PREREQ([2.0])],
+ [m4_fatal([Libtool version too old], [63])])
+LT_INIT([dlopen])
+AC_OUTPUT
+END
+
+cat >Makefile.am <<'END'
+lib_LTLIBRARIES = libfoo.la
+END
+
+cat > libfoo.c <<'END'
+int foo (void)
+{
+ return 1;
+}
+END
+
+libtoolize
+# Skip if older libtool (pre-2.0) is used.
+{ $ACLOCAL && $AUTOCONF; } || {
+ if test $? -eq 63; then
+ skip_ "libtool is too old (probably < 2.0)"
+ else
+ exit 1
+ fi
+}
+$EGREP 'LT_(INIT|PREREQ)' configure && exit 1 # Sanity check.
+$AUTOMAKE -a
+
+./configure --prefix="$(pwd)/inst" >stdout || { cat stdout; exit 1; }
+cat stdout
+grep '^checking.*dlfcn\.h.* no$' stdout || grep '^checking.*dlopen' stdout
+
+$MAKE
+$MAKE install
+$MAKE distcheck
+
+:
diff --git a/t/ltinstloc.sh b/t/ltinstloc.sh
new file mode 100644
index 000000000..521547bce
--- /dev/null
+++ b/t/ltinstloc.sh
@@ -0,0 +1,69 @@
+#!/bin/sh
+# Copyright (C) 2008-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for libtool errors for multiple install locations, esp. with nobase.
+
+
+required='libtoolize'
+. test-init.sh
+
+cat >>configure.ac <<'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_LIBTOOL
+AM_CONDITIONAL([COND], [:])
+AC_OUTPUT
+END
+
+cat >Makefile.am <<'END'
+if COND
+lib_LTLIBRARIES = liba1.la sub/liba2.la
+#else
+pkglib_LTLIBRARIES = liba1.la
+nobase_lib_LTLIBRARIES = sub/liba2.la
+endif
+AUTOMAKE_OPTIONS = subdir-objects
+END
+
+libtoolize
+$ACLOCAL
+$AUTOCONF
+AUTOMAKE_fails --add-missing
+
+# libtoolize might have installed config.guess and config.sub already,
+# and autom4te might warn about bugs in Libtool macro files, so filter
+# out warnings about Makefile.am only. We don't care in this test
+# whether automake installs config.guess, config.sub and ar-lib.
+
+cat >expected <<'END'
+Makefile.am:5: error: sub/liba2.la multiply defined in condition COND
+Makefile.am:5: 'sub/liba2.la' should be installed below 'lib' in condition COND ...
+Makefile.am:2: ... and should also be installed in 'lib' in condition COND.
+Makefile.am:4: error: liba1.la multiply defined in condition COND
+Makefile.am:4: 'liba1.la' should be installed in 'pkglib' in condition COND ...
+Makefile.am:2: ... and should also be installed in 'lib' in condition COND.
+Makefile.am:2: Libtool libraries can be built for only one destination
+END
+
+grep '^Makefile.am' stderr | diff - expected
+
+sed 's/#//' < Makefile.am > t
+mv -f t Makefile.am
+
+$AUTOMAKE
+grep ' -rpath \$(libdir)/sub' Makefile.in
+
+:
diff --git a/t/ltlibobjs.sh b/t/ltlibobjs.sh
new file mode 100644
index 000000000..4c00e4841
--- /dev/null
+++ b/t/ltlibobjs.sh
@@ -0,0 +1,43 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure LTLIBOBJS alone works ok.
+# Report from Vadim Zeitlin.
+required=libtool
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_SUBST([LTLIBOBJS])
+AM_PROG_AR
+AC_PROG_LIBTOOL
+END
+
+cat > Makefile.am << 'END'
+lib_LTLIBRARIES = libtu.la
+libtu_la_SOURCES = foo.c
+libtu_la_LIBADD = @LTLIBOBJS@
+END
+
+: > ltconfig
+: > ltmain.sh
+: > ar-lib
+: > config.guess
+: > config.sub
+
+$ACLOCAL
+$AUTOMAKE
+
+:
diff --git a/t/ltlibsrc.sh b/t/ltlibsrc.sh
new file mode 100644
index 000000000..1ca9b71a9
--- /dev/null
+++ b/t/ltlibsrc.sh
@@ -0,0 +1,76 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure a sensible default source for libraries is used.
+
+required='cc libtool'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_LIBTOOL
+AC_OUTPUT
+END
+
+mkdir zoo.d
+
+cat > Makefile.am << 'END'
+AM_LDFLAGS = -module
+pkglib_LTLIBRARIES = zoo.d/bar.la old.la
+noinst_LTLIBRARIES = foo.la zoo.d/old2.la
+
+$(srcdir)/zoo_d_old2_la.c: $(srcdir)/old_la.c
+ cp $(srcdir)/old_la.c $@
+
+AUTOMAKE_OPTIONS = -Wno-unsupported
+END
+
+cat > foo.c << 'END'
+int foo (void)
+{
+ return 0;
+}
+END
+
+cp foo.c zoo.d/bar.c
+cp foo.c old_la.c
+
+libtoolize
+$ACLOCAL
+$AUTOCONF
+AUTOMAKE_fails -a
+grep '^Makefile\.am:2:.*old_la\.c' stderr
+grep '^Makefile\.am:2:.*old\.c' stderr
+grep '^Makefile\.am:3:.*zoo_d_old2_la\.c' stderr
+grep '^Makefile\.am:3:.*zoo\.d/old2\.c' stderr
+
+$AUTOMAKE -Wno-obsolete
+
+mkdir sub
+cd sub
+
+../configure
+$MAKE
+
+test -f foo.la
+test -f zoo.d/bar.la
+test -f old.la
+test -f zoo.d/old2.la
+
+$MAKE distcheck
+
+:
diff --git a/t/ltorder.sh b/t/ltorder.sh
new file mode 100644
index 000000000..4e092037f
--- /dev/null
+++ b/t/ltorder.sh
@@ -0,0 +1,62 @@
+#!/bin/sh
+# Copyright (C) 2008-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for correct installation order of nobase libtool libraries.
+
+required='cc libtoolize'
+. test-init.sh
+
+cat >>configure.ac <<'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_LIBTOOL
+AC_OUTPUT
+END
+
+cat >Makefile.am <<'END'
+AUTOMAKE_OPTIONS = subdir-objects
+nobase_lib_LTLIBRARIES = liba1.la sub/liba2.la sub/liba3.la liba4.la liba5.la
+sub_liba2_la_LIBADD = liba1.la
+sub_liba3_la_LIBADD = sub/liba2.la
+liba4_la_LIBADD = sub/liba3.la
+liba5_la_LIBADD = liba4.la
+bin_PROGRAMS = p
+p_LDADD = liba5.la
+END
+
+mkdir sub
+echo 'int a1 () { return 1; }' >liba1.c
+echo 'extern int a1 (); int a2 () { return a1 (); }' >sub/liba2.c
+echo 'extern int a2 (); int a3 () { return a2 (); }' >sub/liba3.c
+echo 'extern int a3 (); int a4 () { return a3 (); }' >liba4.c
+echo 'extern int a4 (); int a5 () { return a4 (); }' >liba5.c
+echo 'extern int a5 (); int main () { return a5 (); }' >p.c
+
+libtoolize
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+./configure --prefix="$(pwd)/inst"
+
+$MAKE
+run_make -E install
+grep 'has not been installed' stderr && exit 1
+
+$MAKE uninstall
+test $(find inst -type f -print | wc -l) -eq 0
+
+:
diff --git a/t/m4-inclusion.sh b/t/m4-inclusion.sh
new file mode 100644
index 000000000..15f5f336f
--- /dev/null
+++ b/t/m4-inclusion.sh
@@ -0,0 +1,56 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to see if 'm4_sinclude' and 'm4_include' works.
+
+. test-init.sh
+
+cat >> configure.ac <<'EOF'
+sinclude([doesntexist.m4])
+EOF
+
+mkdir sub
+
+cat > sub/p.m4 << 'END'
+AC_SUBST([MAGICALPIG])
+END
+
+cat > sub/h.m4 << 'END'
+AC_SUBST([MAGICALHOG])
+END
+
+cat > sub/g.m4 << 'END'
+AC_SUBST([GREPME])
+END
+
+: > Makefile.am
+
+echo 'sinclude([sub/g.m4])' >> acinclude.m4
+echo 'm4_sinclude([sub/doesntexist.m4])' >> acinclude.m4
+
+$ACLOCAL
+
+echo 'm4_sinclude([sub/p.m4])' >> aclocal.m4
+echo 'm4_include([sub/h.m4])' >> aclocal.m4
+
+$AUTOMAKE
+
+grep doesntexist Makefile.in && exit 1
+grep MAGICALPIG Makefile.in
+grep MAGICALHOG Makefile.in
+grep GREPME Makefile.in
+
+:
diff --git a/t/maintclean-vpath.sh b/t/maintclean-vpath.sh
new file mode 100644
index 000000000..efb82c485
--- /dev/null
+++ b/t/maintclean-vpath.sh
@@ -0,0 +1,104 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure distclean and maintainer-clean erase the right files.
+# This test is for VPATH builds; see sister test 'maintclean.sh'
+# for in-tree builds.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_FILES([bar sub/Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+SUBDIRS = sub
+noinst_DATA = foo.c
+foo.c:
+ touch foo.c
+MAINTAINERCLEANFILES = foo.c
+END
+
+mkdir sub
+cat > sub/Makefile.am <<'END'
+noinst_SCRIPTS = zap
+zap: zap.sh
+ cp $(srcdir)/zap.sh $@ && chmod a+x $@
+MAINTAINERCLEANFILES = zap
+END
+
+: > bar.in
+: > sub/zap.sh
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+# Users can disable autom4te.cache.
+if test -d autom4te.cache; then
+ test_cache='test -d ../autom4te.cache'
+else
+ test_cache=:
+fi
+
+mkdir build
+
+chmod a-w . sub
+
+cd build
+
+../configure
+test -f bar
+
+$MAKE
+test -f foo.c
+test -f sub/zap
+$test_cache
+
+$MAKE distclean
+test ! -e bar
+test ! -e Makefile
+test ! -e sub/Makefile
+test ! -e config.status
+test -f foo.c
+test -f sub/zap
+test -f ../sub/zap.sh
+$test_cache
+
+../configure
+test -f bar
+
+$MAKE foo.c
+test -f foo.c
+cd sub
+$MAKE zap
+test -f zap
+cd ..
+
+chmod u+w ..
+
+$MAKE maintainer-clean
+test -f ../sub/zap.sh
+test ! -e bar
+test ! -e foo.c
+test ! -e sub/zap
+test ! -e Makefile
+test ! -e sub/Makefile
+test ! -e config.status
+test ! -e ../autom4te.cache
+
+:
diff --git a/t/maintclean.sh b/t/maintclean.sh
new file mode 100644
index 000000000..6cec08f8e
--- /dev/null
+++ b/t/maintclean.sh
@@ -0,0 +1,96 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure distclean and maintainer-clean erase the right files.
+# This test is for in-tree builds; see sister test 'maintclean-vpath.sh'
+# for VPATH builds.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_FILES([bar sub/Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+SUBDIRS = sub
+noinst_DATA = foo.c
+foo.c:
+ touch foo.c
+MAINTAINERCLEANFILES = foo.c
+END
+
+mkdir sub
+cat > sub/Makefile.am <<'END'
+noinst_SCRIPTS = zap
+zap: zap.sh
+ cp $(srcdir)/zap.sh $@ && chmod a+x $@
+MAINTAINERCLEANFILES = zap
+END
+
+: > bar.in
+: > sub/zap.sh
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+# Users can disable autom4te.cache.
+if test -d autom4te.cache; then
+ test_cache='test -d autom4te.cache'
+else
+ test_cache=:
+fi
+
+./configure
+test -f bar
+
+$MAKE
+test -f foo.c
+test -f sub/zap
+$test_cache
+
+$MAKE distclean
+test ! -e bar
+test ! -e Makefile
+test ! -e sub/Makefile
+test ! -e config.status
+test -f foo.c
+test -f sub/zap
+test -f sub/zap.sh
+$test_cache
+
+./configure
+test -f bar
+
+$MAKE foo.c
+test -f foo.c
+cd sub
+$MAKE zap
+test -f zap
+cd ..
+
+$MAKE maintainer-clean
+test -f sub/zap.sh
+test ! -e bar
+test ! -e foo.c
+test ! -e sub/zap
+test ! -e Makefile
+test ! -e sub/Makefile
+test ! -e config.status
+test ! -e autom4te.cache
+
+:
diff --git a/t/maintmode-configure-msg.sh b/t/maintmode-configure-msg.sh
new file mode 100644
index 000000000..6368f2710
--- /dev/null
+++ b/t/maintmode-configure-msg.sh
@@ -0,0 +1,72 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that our macro 'AM_MAINTAINER_MODE' adds proper text to
+# the configure help screen. Also make sure the "checking ..." messages
+# related to the enabling/disabling of maintainer mode are correct (see
+# automake bug#9890).
+
+. test-init.sh
+
+set_maintmode ()
+{
+ rm -rf autom4te*.cache # Just to be sure not to use a stale cache.
+ echo "AC_INIT([$me], [1.0])" > configure.ac
+ case $1 in
+ DEFAULT) echo AM_MAINTAINER_MODE;;
+ *) echo "AM_MAINTAINER_MODE([$*])";;
+ esac >> configure.ac
+}
+
+check_configure_message_with ()
+{
+ answer=$1; shift
+ ./configure ${1+"$@"} >stdout || { cat stdout; exit 1; }
+ cat stdout
+ grep "^checking whether to enable maintainer-specific.*\\.\\.\\. $answer$" stdout
+ test $(grep -c 'checking.*maint' stdout) -eq 1
+}
+
+set_maintmode "DEFAULT"
+
+$ACLOCAL
+
+$AUTOCONF --force
+
+grep_configure_help --enable-maintainer-mode 'enable make rules'
+
+check_configure_message_with "no"
+check_configure_message_with "yes" --enable-maintainer-mode
+
+set_maintmode "disable"
+
+$AUTOCONF --force
+grep_configure_help --enable-maintainer-mode 'enable make rules'
+
+check_configure_message_with "no"
+check_configure_message_with "yes" --enable-maintainer-mode
+
+set_maintmode "enable"
+
+$AUTOCONF --force
+./configure --help >stdout || { cat stdout; exit 1; }
+cat stdout
+grep_configure_help --disable-maintainer-mode 'disable make rules'
+
+check_configure_message_with "yes"
+check_configure_message_with "no" --disable-maintainer-mode
+
+:
diff --git a/t/make-dryrun.tap b/t/make-dryrun.tap
new file mode 100644
index 000000000..98189f0e7
--- /dev/null
+++ b/t/make-dryrun.tap
@@ -0,0 +1,147 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that $(am__make_dryrun) works as expected.
+
+. test-init.sh
+
+plan_ 60
+
+if echo "all: ; +@printf %sbb%s aa cc" | $MAKE -n -f - | grep aabbcc; then
+ make_plus_silence () { return 0; }
+else
+ make_plus_silence () { return 1; }
+fi
+
+mkdir none # Also used later.
+if echo nil: | $MAKE -I none -f -; then
+ make_supports_option_I () { return 0; }
+else
+ make_supports_option_I () { return 1; }
+fi
+
+echo AC_OUTPUT >> configure.ac
+
+cat > Makefile.am <<'END'
+all:
+ : Dummy, nothing to do.
+run:
+ @echo ":: $$MAKEFLAGS :: $$MFLAGS ::" ;: For debugging.
+ $(am__make_dryrun) && exit 1; echo ok > from-run
+dry:
+ +@echo ":: $$MAKEFLAGS :: $$MFLAGS ::" ;: For debugging.
+ +$(am__make_dryrun) || exit 1; echo ok > from-dry
+END
+
+check_make ()
+{
+ msg= mode= condition=: directive= reason= skip_reason=
+ case $1 in
+ --dry) mode=dry;;
+ --run) mode=run;;
+ *) fatal_ "check_run: invalid usage";;
+ esac
+ shift
+ while test $# -gt 0; do
+ case $1 in
+ -C) condition=$2 skip_reason=$3; shift; shift;;
+ -M) msg=$2; shift;;
+ --) shift; break;;
+ *) break;;
+ esac
+ shift
+ done
+ for opts in '' '-s' '-s -r'; do
+ r=ok
+ pmsg=${mode}${msg:+" [$msg]"}${opts:+" ($opts)"}
+ if $condition; then
+ $MAKE $opts "$mode" ${1+"$@"} || r='not ok'
+ test -f from-$mode || r='not ok'
+ test ! -e bad || r='not ok'
+ rm -f bad from-* || fatal_ "cleaning up"
+ else
+ directive=SKIP reason=$skip_reason
+ fi
+ result_ "$r" -D "$directive" -r "$reason" "$pmsg"
+ done
+ unset r msg pmsg opts mode condition directive reason skip_reason
+}
+
+# ----------------------------------------------------------------------
+
+$ACLOCAL || fatal_ "aclocal failed"
+$AUTOCONF || fatal_ "autoconf failed"
+$AUTOMAKE || fatal_ "automake failed"
+./configure || fatal_ "configure failed"
+
+# ----------------------------------------------------------------------
+
+check_make --run
+
+# Test against a known regression. This was especially heinous, since
+# make running in normal mode was sometimes mistaken for make running
+# in dry mode.
+check_make --run TESTS="n1.test n2.test"
+check_make --run TESTS="n1 n2" AM_MAKEFLAGS="TESTS='n1 n2'"
+check_make --run TESTS="n1 n2" AM_MAKEFLAGS='TESTS="n1 n2"'
+check_make --run FOOFLAGS="-n -n -knf2 n --none -n"
+check_make --run MYFLAGS="-n --dryrun -n --dry-run -n"
+
+# ----------------------------------------------------------------------
+
+check_make --dry -C make_plus_silence 'recipe prefix "+" unsupported' -n
+check_make --dry -C using_gmake "\$MAKE is not GNU make" --dry-run -k
+
+# ----------------------------------------------------------------------
+
+# Automake bug#13760: the "n" in "none" used to confound am__make_dryrun
+# into thinking the '-n' option had been passed.
+
+pr='bug#13760'
+
+check_make --run -C make_supports_option_I "-I make option unsupported" \
+ -M "$pr" -I none
+
+check_make --run -C using_gmake "\$MAKE is not GNU make" \
+ -M "$pr" -I none --include dry-run
+
+check_make --dry -C make_supports_option_I "-I make option unsupported" \
+ -M "$pr" -I none -n
+
+check_make --dry -C using_gmake "\$MAKE is not GNU make" \
+ -M "$pr" --dry-run -I none --include dry-run
+
+# ----------------------------------------------------------------------
+
+# Test for when shell metacharacters or backslashes are in $(MAKEFLAGS).
+
+check_metachars ()
+{
+ check_make --run -M "metachars" "$@"
+}
+
+check_metachars MYFLAGS="-n \"n\" '-n' --none -n"
+check_metachars MYFLAGS='-knf2\ n\ \\n'
+check_metachars MYFLAGS="(&) | ; \" \` '"
+check_metachars MYFLAGS=" ' # ' "
+check_metachars MYFLAGS='$(foo)'
+check_metachars MYFLAGS='$(foo -n)'
+check_metachars MYFLAGS='`touch bad`'
+check_metachars MYFLAGS='`touch --dry-run bad`'
+
+# ----------------------------------------------------------------------
+
+:
diff --git a/t/make-is-gnu.sh b/t/make-is-gnu.sh
new file mode 100644
index 000000000..c8478c9e8
--- /dev/null
+++ b/t/make-is-gnu.sh
@@ -0,0 +1,65 @@
+#! /bin/sh
+# Copyright (C) 2013-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that $(am__is_gnu_make) can be used to correctly determine if
+# we are running under GNU make.
+
+. test-init.sh
+
+if using_gmake; then
+ as_expected () { test $1 -eq 0 && test -f ok && test ! -e ko; }
+else
+ as_expected () { test $1 -gt 0 && test -f ko && test ! -e ok; }
+fi
+
+echo AC_OUTPUT >> configure.ac
+
+cat > Makefile.am <<'END'
+all: file
+ $(am__is_gnu_make)
+file:
+ if $(am__is_gnu_make); then : > ok; else : > ko; fi
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+
+st=0; $MAKE || st=$?
+if using_gmake; then
+ test $st -eq 0
+ test -f ok
+ test ! -e ko
+else
+ test $st -gt 0
+ test -f ko
+ test ! -e ok
+fi
+
+rm -f ok ko
+
+run_make -M -- -s file
+if using_gmake; then
+ test -f ok
+ test ! -e ko
+else
+ test -f ko
+ test ! -e ok
+fi
+test ! -s output
+
+:
diff --git a/t/make-keepgoing.tap b/t/make-keepgoing.tap
new file mode 100644
index 000000000..8cb5bb599
--- /dev/null
+++ b/t/make-keepgoing.tap
@@ -0,0 +1,137 @@
+#! /bin/sh
+# Copyright (C) 2013-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that $(am__make_keepgoing) works as expected.
+
+. test-init.sh
+
+plan_ 60
+
+mkdir kool # Also used later.
+if echo nil: | $MAKE -I kool -f -; then
+ make_supports_option_I () { return 0; }
+else
+ make_supports_option_I () { return 1; }
+fi
+
+echo AC_OUTPUT >> configure.ac
+
+cat > Makefile.am <<'END'
+all:
+ @echo 'Default target $@ should not be called'>&2; exit 1;
+k-y:
+ @echo ":: $$MAKEFLAGS :: $$MFLAGS ::" ;: For debugging.
+ $(am__make_keepgoing)
+k-n:
+ @echo ":: $$MAKEFLAGS :: $$MFLAGS ::" ;: For debugging.
+ $(am__make_keepgoing) && exit 1; exit 0
+END
+
+check_make ()
+{
+ msg= mode= condition=: directive= reason= skip_reason=
+ case $1 in
+ k-[yn]) mode=$1;;
+ *) fatal_ "check_run: invalid usage";;
+ esac
+ shift
+ while test $# -gt 0; do
+ case $1 in
+ -C) condition=$2 skip_reason=$3; shift; shift;;
+ -M) msg=$2; shift;;
+ -X) directive=TODO;;
+ --) shift; break;;
+ *) break;;
+ esac
+ shift
+ done
+ for opts in '' '-s' '-s -r'; do
+ r=ok
+ pmsg=${mode}${msg:+" [$msg]"}${opts:+" ($opts)"}
+ if $condition; then
+ $MAKE $opts "$mode" ${1+"$@"} || r='not ok'
+ else
+ directive=SKIP reason=$skip_reason
+ fi
+ result_ "$r" -D "$directive" -r "$reason" "$pmsg"
+ done
+ unset r msg pmsg opts mode condition directive reason skip_reason
+}
+
+# ----------------------------------------------------------------------
+
+$ACLOCAL || fatal_ "aclocal failed"
+$AUTOCONF || fatal_ "autoconf failed"
+$AUTOMAKE || fatal_ "automake failed"
+./configure || fatal_ "configure failed"
+
+# ----------------------------------------------------------------------
+
+check_make k-n
+
+# Test against a possible regressions similar to those that affected
+# detection of dry mode ("make -n").
+check_make k-n TESTS="k.test k2.test"
+check_make k-n TESTS="k1 k2" AM_MAKEFLAGS="TESTS='k1 k2'"
+check_make k-n TESTS="k1 k k2" AM_MAKEFLAGS='TESTS="k1 k k2"'
+check_make k-n FOOFLAGS="-k -k -nkf2 k -ks --keep -k"
+check_make k-n MYFLAGS="-k --keepgoing -k --keep-run -k"
+
+# ----------------------------------------------------------------------
+
+check_make k-y -k
+check_make k-y -C using_gmake "\$MAKE is not GNU make" --keep-going
+
+# ----------------------------------------------------------------------
+
+# Related to automake bug#12554: the "k" in "kool" used to confound
+# am__make_keepgoing into thinking the '-k' option had been passed.
+
+pr='bug#12554'
+
+check_make k-n -C make_supports_option_I "-I make option unsupported" \
+ -M "$pr" -I kool
+
+check_make k-n -C using_gmake "\$MAKE is not GNU make" \
+ -M "$pr" -I kool --include keep-going
+
+check_make k-y -C make_supports_option_I "-I make option unsupported" \
+ -M "$pr" -I kool -k
+
+check_make k-y -C using_gmake "\$MAKE is not GNU make" \
+ -M "$pr" --keep-going -I kool --include keep-going
+
+# ----------------------------------------------------------------------
+
+# Test for when shell metacharacters or backslashes are in $(MAKEFLAGS).
+
+check_metachars ()
+{
+ check_make k-n -M "metachars" "$@"
+}
+
+check_metachars MYFLAGS="-k \"k\" '-k' --keep-going -k"
+check_metachars MYFLAGS='-knf2\ k\ \\k'
+check_metachars MYFLAGS="(&) | ; \" \` '"
+check_metachars MYFLAGS=" ' # ' "
+check_metachars MYFLAGS='$(foo)'
+check_metachars MYFLAGS='$(foo -k)'
+check_metachars MYFLAGS='`touch bad`'
+check_metachars MYFLAGS='`touch --keep-going bad`'
+
+# ----------------------------------------------------------------------
+
+:
diff --git a/t/make.sh b/t/make.sh
new file mode 100644
index 000000000..36c010364
--- /dev/null
+++ b/t/make.sh
@@ -0,0 +1,52 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure 'make' check works.
+# From Ralf Corsepius.
+
+required=GNUmake
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_MAKE_INCLUDE
+AC_OUTPUT
+END
+
+: > Makefile.am
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+export ACLOCAL
+export AUTOCONF
+export AUTOMAKE
+
+# Do the test twice -- once with make and once with make -w.
+# This tests for a bug reported by Rainer Orth (see PR 175).
+
+save="$MAKE"
+for flag in '' -w; do
+ MAKE="$save $flag" ./configure
+ $FGREP 'am__include = include' Makefile
+ $sleep
+ touch configure.ac
+ $MAKE $flag
+ $FGREP 'am__include = include' Makefile
+ rm -f config.cache
+done
+
+exit 0
diff --git a/t/makefile-deps.sh b/t/makefile-deps.sh
new file mode 100644
index 000000000..8f50a0977
--- /dev/null
+++ b/t/makefile-deps.sh
@@ -0,0 +1,29 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure we don't emit a rule with empty target if list of
+# automatically-computed dependencies for Makefile.in is empty.
+
+. test-init.sh
+
+: > Makefile.am
+
+$ACLOCAL
+$AUTOMAKE
+
+grep "^ *:" Makefile.in && exit 1
+
+:
diff --git a/t/makej.sh b/t/makej.sh
new file mode 100644
index 000000000..6ebbac13a
--- /dev/null
+++ b/t/makej.sh
@@ -0,0 +1,53 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# 'make -j' used to fail with Autoconf < 2.58, because tools like
+# autoconf and automake can try to update autom4te's cache in parallel.
+#
+# Note that failures might not be reproducible systematically as they
+# depend on the time at which autoconf and automake update the cache
+# via autom4te.
+
+required=GNUmake
+. test-init.sh
+
+cat >configure.ac <<END
+m4_include([version.m4])
+AC_INIT([$me], [THE_VERSION])
+AM_INIT_AUTOMAKE
+AC_CONFIG_HEADER([config.h])
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+END
+
+echo 'm4_define([THE_VERSION], [2.718])' > version.m4
+
+: > Makefile.am
+
+$ACLOCAL
+$AUTOCONF
+$AUTOHEADER
+$AUTOMAKE --add-missing
+./configure --version | grep '2\.718'
+./configure
+$MAKE
+
+$sleep
+echo 'm4_define([THE_VERSION], [3.141])' > version.m4
+$MAKE -j
+./configure --version | grep '3\.141'
+
+:
diff --git a/t/makej2.sh b/t/makej2.sh
new file mode 100644
index 000000000..d2a7f6b3e
--- /dev/null
+++ b/t/makej2.sh
@@ -0,0 +1,44 @@
+#! /bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure known BSD 'make -jN' issues are fixed:
+# without -B, it may reuse the same shell for separate commands in a
+# rule, which can lead to interesting results.
+
+. test-init.sh
+
+cat >>configure.ac <<'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+test-distdir-removed:
+ test ! -d $(distdir)
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+mkdir build
+cd build
+../configure --prefix="$(pwd)/inst"
+
+$MAKE -j2 || skip_ "$MAKE failed to run with two parallel jobs"
+$MAKE -j2 distcheck
+$MAKE test-distdir-removed
+
+:
diff --git a/t/maken.sh b/t/maken.sh
new file mode 100644
index 000000000..bb9705786
--- /dev/null
+++ b/t/maken.sh
@@ -0,0 +1,62 @@
+#! /bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# Ensure that 'make -n dist' and 'make -n distcheck' do not change files
+# on disk, due to GNU make executing rules containing '$(MAKE)'.
+# Also, ensure that 'make -n dist' and 'make -n distcheck' show what
+# would happen, at least when using GNU make.
+
+. test-init.sh
+
+mkdir sub
+
+cat >> configure.ac << 'END'
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+SUBDIRS = sub
+distcheck-hook:
+ @: > stamp-distcheck-hook
+test-no-distdir:
+ test ! -d $(distdir)
+ test ! -f stamp-distcheck-hook
+ test ! -f sub/stamp-sub-dist-hook
+END
+cat >sub/Makefile.am <<'END'
+dist-hook:
+ @: > stamp-sub-dist-hook
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+
+echo stamp > stampfile
+$sleep
+for target in dist distcheck; do
+ $MAKE -n $target
+ if using_gmake; then
+ $MAKE -n $target | grep stamp-sub-dist-hook || exit 1
+ fi
+ $MAKE test-no-distdir
+ # No file has been actually touched or created.
+ is_newest stampfile $(find . -type f) sub
+done
+
+:
diff --git a/t/maken3.sh b/t/maken3.sh
new file mode 100644
index 000000000..1e5d02315
--- /dev/null
+++ b/t/maken3.sh
@@ -0,0 +1,188 @@
+#! /bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test 'make -n' for various targets, to ensure that:
+#
+# 1. no files or directories are created or removed, and
+#
+# 2. if using GNU make or a make implementation supporting the .MAKE
+# special target, the output from make is sufficiently complete.
+#
+# This test exercises the GCS-mandated targets (except for dist)
+# as well as tags.
+
+# For gen-testsuite-part: ==> try-with-serial-tests <==
+. test-init.sh
+
+# Does $MAKE support the '.MAKE' special target?
+have_dotmake=false
+if using_gmake; then
+ have_dotmake=: # GNU make must support it.
+else
+ unindent > mk.tmp << 'END'
+ targ.tmp:
+ : > $@
+ .MAKE: targ.tmp
+END
+ if $MAKE -n -f mk.tmp targ.tmp && test -f targ.tmp; then
+ have_dotmake=:
+ fi
+fi
+
+mkdir sub sub2
+
+cat >> configure.ac << 'END'
+AC_CONFIG_FILES([sub/Makefile sub2/Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+TESTS = foo.test
+SUBDIRS = sub sub2
+##BUILT_SOURCES = foo
+foo:
+foo.test:
+all-local:
+ @: > stamp-all
+install-data-local:
+ @: > stamp-install
+uninstall-local:
+ @: > stamp-uninstall
+clean-local:
+ @: > stamp-clean
+distclean-local:
+ @: > stamp-distclean
+info-local:
+ @: > stamp-info
+html-local:
+ @: > stamp-html
+dvi-local:
+ @: > stamp-dvi
+ps-local:
+ @: > stamp-ps
+pdf-local:
+ @: > stamp-pdf
+check-local:
+ @: > stamp-check
+installcheck-local:
+ @: > stamp-installcheck
+mostlyclean-local:
+ @: > stamp-mostlyclean
+maintainer-clean-local:
+ @: > stamp-maintainer-clean
+END
+cat >sub/Makefile.am <<'END'
+all-local:
+ @: > stamp-all-sub
+install-data-local:
+ @: > stamp-install-sub
+uninstall-local:
+ @: > stamp-uninstall-sub
+clean-local:
+ @: > stamp-clean-sub
+distclean-local:
+ @: > stamp-distclean-sub
+info-local:
+ @: > stamp-info-sub
+html-local:
+ @: > stamp-html-sub
+dvi-local:
+ @: > stamp-dvi-sub
+ps-local:
+ @: > stamp-ps-sub
+pdf-local:
+ @: > stamp-pdf-sub
+check-local:
+ @: > stamp-check-sub
+installcheck-local:
+ @: > stamp-installcheck-sub
+tags:
+ @: > stamp-tags-sub
+mostlyclean-local:
+ @: > stamp-mostlyclean-sub
+maintainer-clean-local:
+ @: > stamp-maintainer-clean-sub
+END
+cat >sub2/Makefile.am <<'END'
+all install uninstall clean check:
+ @: > sub2-$@-should-not-be-executed
+info dvi pdf ps:
+ @: > sub2-$@-should-not-be-executed
+html:
+ @: > sub2-$@-should-not-be-executed
+install-info install-html install-dvi install-pdf install-ps:
+ @: > sub2-$@-should-not-be-executed
+installcheck installdirs tags mostlyclean:
+ @: > sub2-$@-should-not-be-executed
+## These targets cannot be overridden like this:
+## install-strip distclean maintainer-clean
+END
+
+$ACLOCAL
+$AUTOCONF
+
+check_targets ()
+{
+ for target in \
+ all install install-strip uninstall clean distclean check \
+ info html dvi pdf ps \
+ install-info install-html install-dvi install-pdf install-ps \
+ installcheck installdirs tags mostlyclean maintainer-clean
+ do
+ run_make -O -- -n $target
+ case $target in
+ install-* | installdirs | tags ) ;;
+ *)
+ if $have_dotmake; then
+ grep "stamp-$target$" stdout || exit 1
+ fi
+ test ! -e "stamp-$target" || exit 1
+ ;;
+ esac
+ case $target in
+ install-* | installdirs ) ;;
+ *)
+ if $have_dotmake; then
+ grep "stamp-$target-sub" stdout || exit 1
+ fi
+ test ! -e "sub/stamp-$target-sub" || exit 1
+ ;;
+ esac
+ case $target in
+ distclean | maintainer-clean ) ;;
+ *)
+ if $have_dotmake; then
+ grep "should-not-be-executed" stdout || exit 1
+ fi
+ test ! -e "sub2/sub2-$target-should-not-be-executed" || exit 1
+ ;;
+ esac
+ done
+}
+
+$AUTOMAKE -a -Wno-override
+./configure
+check_targets || exit 1
+
+# Now, introduce BUILT_SOURCES into the toplevel Makefile
+# TODO: add BUILT_SOURCES to sub2, fix fallout.
+sed 's/##//' < Makefile.am > t
+mv -f t Makefile.am
+$AUTOMAKE -Wno-override --force Makefile
+./configure
+check_targets || exit 1
+
+exit 0
diff --git a/t/makevars.sh b/t/makevars.sh
new file mode 100644
index 000000000..883038759
--- /dev/null
+++ b/t/makevars.sh
@@ -0,0 +1,33 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure that automake includes the needed variables,
+# but not too many.
+
+. test-init.sh
+
+# Find the macros wanted by Automake.
+$ACLOCAL
+
+# Create some dummy Makefile.in.
+: > Makefile.am
+
+$AUTOMAKE
+
+# We are definitely not needing a compiler or preprocessor.
+$EGREP '^ *(CC|CPP|CXX|CXXCPP) *=' Makefile.in && exit 1
+
+:
diff --git a/t/man.sh b/t/man.sh
new file mode 100644
index 000000000..46f9c676b
--- /dev/null
+++ b/t/man.sh
@@ -0,0 +1,33 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure 'dist' prefix works with man pages.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+dist_man_MANS = foo.1
+nodist_man1_MANS = bar.man
+END
+
+: > foo.1
+: > bar.man
+
+$ACLOCAL
+$AUTOMAKE
+grep '^MANS *=' Makefile.in
+
+:
diff --git a/t/man2.sh b/t/man2.sh
new file mode 100644
index 000000000..512fb93f9
--- /dev/null
+++ b/t/man2.sh
@@ -0,0 +1,55 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that man pages listed in man_MANS are installed and
+# renamed as documented.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+man_MANS = foo.2
+man4_MANS = foo.4 bar.man
+END
+
+: > foo.2
+: > foo.4
+: > bar.man
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+cwd=$(pwd) || fatal_ "getting current working directory"
+
+# Let's play with $DESTDIR too, it shouldn't hurt.
+./configure --prefix='' --mandir=/man
+$MAKE DESTDIR="$cwd/_inst" install
+
+test -f _inst/man/man2/foo.2
+test -f _inst/man/man4/foo.4
+test -f _inst/man/man4/bar.4
+
+$MAKE DESTDIR="$cwd/_inst" uninstall
+
+test ! -e _inst/man/man2/foo.2
+test ! -e _inst/man/man4/foo.4
+test ! -e _inst/man/man4/bar.4
+
+:
diff --git a/t/man3.sh b/t/man3.sh
new file mode 100644
index 000000000..582448ae1
--- /dev/null
+++ b/t/man3.sh
@@ -0,0 +1,44 @@
+#! /bin/sh
+# Copyright (C) 2008-2017 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 <https://www.gnu.org/licenses/>.
+
+# PR 516: Prefer generated manpages to distributed ones.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+dist_man_MANS = foo.1
+installcheck-local:
+ grep bar "$(mandir)/man1/foo.1"
+END
+
+cat >>configure.ac <<'END'
+: ${foo=foo}
+AC_SUBST([foo])
+AC_CONFIG_FILES([foo.1])
+AC_OUTPUT
+END
+
+cat > foo.1.in <<'END'
+@foo@
+END
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+./configure
+run_make DISTCHECK_CONFIGURE_FLAGS='foo=bar' distcheck
+
+:
diff --git a/t/man5.sh b/t/man5.sh
new file mode 100644
index 000000000..0fb2abd8e
--- /dev/null
+++ b/t/man5.sh
@@ -0,0 +1,69 @@
+#! /bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure to extract the correct mansection from files in man_MANS.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+man_MANS = foo-1.4.5/foo.2 foo-1.4.5/bar.3 baz-1.4.2
+notrans_man_MANS = foo-1.4.5/nfoo.2 foo-1.4.5/nbar.3 nbaz-1.4.2
+END
+
+mkdir foo-1.4.5
+
+: > foo-1.4.5/foo.2
+: > foo-1.4.5/nfoo.2
+: > foo-1.4.5/bar.3
+: > foo-1.4.5/nbar.3
+: > baz-1.4.2
+: > nbaz-1.4.2
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+cwd=$(pwd) || fatal_ "getting current working directory"
+
+# Let's play with $DESTDIR too, it shouldn't hurt.
+./configure --mandir=/man
+$MAKE DESTDIR="$cwd/_inst" install
+
+test -f _inst/man/man2/foo.2
+test -f _inst/man/man2/nfoo.2
+test -f _inst/man/man2/baz-1.4.2
+test -f _inst/man/man2/nbaz-1.4.2
+test -f _inst/man/man3/bar.3
+test -f _inst/man/man3/nbar.3
+
+test ! -e _inst/man/man1
+test ! -e _inst/man/man4
+test ! -e _inst/man/man5
+
+$MAKE DESTDIR="$cwd/_inst" uninstall
+
+test ! -e _inst/man/man2/foo.2
+test ! -e _inst/man/man2/nfoo.2
+test ! -e _inst/man/man2/baz-1.4.2
+test ! -e _inst/man/man2/nbaz-1.4.2
+test ! -e _inst/man/man3/bar.3
+test ! -e _inst/man/man3/nbar.3
+
+:
diff --git a/t/man6.sh b/t/man6.sh
new file mode 100644
index 000000000..9c05fa904
--- /dev/null
+++ b/t/man6.sh
@@ -0,0 +1,101 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Ensure 'make distcheck' passes when help2man generates man pages,
+# even if the 'missing' script is involved.
+
+required=help2man
+. test-init.sh
+
+# Avoid a spurious failure due to a known FreeBSD make incompatibility.
+useless_vpath_rebuild \
+ && skip_ "VPATH useless rebuild detected (see bug#7884)"
+
+cat > Makefile.am << 'END'
+dist_man_MANS = $(srcdir)/foobar.1 bazquux.1 zardoz.1
+dist_bin_SCRIPTS = foobar bazquux zardoz
+$(srcdir)/foobar.1:
+ $(HELP2MAN) --output=$@ $(srcdir)/foobar
+bazquux.1:
+ $(HELP2MAN) --output=$@ $(srcdir)/bazquux
+zardoz.1:
+ $(HELP2MAN) --output=$(srcdir)/zardoz.1 $(srcdir)/zardoz
+END
+
+cat >> configure.ac <<'END'
+AM_MISSING_PROG([HELP2MAN], [help2man])
+AC_OUTPUT
+END
+
+cat > foobar <<'END'
+#! /bin/sh
+while test $# -gt 0; do
+ case $1 in
+ -h | --help) echo "usage: $0 [OPTIONS]..."; exit 0;;
+ -v | --version) echo "$0 1.0"; exit 0;;
+ esac
+ shift
+done
+END
+
+cp foobar bazquux
+cp foobar zardoz
+
+chmod +x foobar bazquux zardoz
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+mkdir build
+cd build
+
+../configure
+# Sanity check.
+grep '^HELP2MAN *=.*/missing help2man' Makefile
+
+$MAKE
+$FGREP foobar ../foobar.1
+$FGREP bazquux ./bazquux.1
+$FGREP zardoz ../zardoz.1
+
+$MAKE distdir
+$FGREP foobar $me-1.0/foobar.1
+$FGREP bazquux $me-1.0/bazquux.1
+$FGREP zardoz $me-1.0/zardoz.1
+
+$MAKE distcheck
+
+cd ..
+rm -f *.1 # Remove leftover generated manpages.
+
+./configure
+# Sanity check.
+grep '^HELP2MAN *=.*/missing help2man' Makefile
+
+$MAKE
+$FGREP foobar foobar.1
+$FGREP bazquux bazquux.1
+$FGREP zardoz zardoz.1
+
+$MAKE distdir
+$FGREP foobar $me-1.0/foobar.1
+$FGREP bazquux $me-1.0/bazquux.1
+$FGREP zardoz $me-1.0/zardoz.1
+
+$MAKE distcheck
+
+:
diff --git a/t/man7.sh b/t/man7.sh
new file mode 100644
index 000000000..5a95aada9
--- /dev/null
+++ b/t/man7.sh
@@ -0,0 +1,59 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check for a bug in maintainer-clean w.r.t. generated manpages.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+dist_man_MANS = $(srcdir)/foo.1 bar.1
+$(srcdir)/foo.1 bar.1:
+ : > $@
+MAINTAINERCLEANFILES = $(dist_man_MANS)
+END
+
+cat >> configure.ac <<'END'
+AC_OUTPUT
+END
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+mkdir build
+cd build
+../configure
+
+$MAKE
+test -f bar.1
+test -f ../foo.1
+
+$MAKE maintainer-clean
+test ! -e bar.1
+test ! -e ../foo.1
+
+cd ..
+./configure
+
+$MAKE
+test -f bar.1
+test -f foo.1
+
+$MAKE maintainer-clean
+test ! -e bar.1
+test ! -e foo.1
+
+:
diff --git a/t/man8.sh b/t/man8.sh
new file mode 100644
index 000000000..dcf619f4a
--- /dev/null
+++ b/t/man8.sh
@@ -0,0 +1,61 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check for a bug in distcheck w.r.t. generated manpages.
+
+. test-init.sh
+
+# Avoid a spurious failure due to a known FreeBSD make incompatibility.
+useless_vpath_rebuild \
+ && skip_ "VPATH useless rebuild detected (see bug#7884)"
+
+cat > Makefile.am << 'END'
+dist_man_MANS = foo.1
+foo.1:
+## This 'rm' command will fail if $(srcdir) is unwritable.
+ rm -f $(srcdir)/$@
+ : > $(srcdir)/$@
+END
+
+cat >> configure.ac <<'END'
+AC_OUTPUT
+END
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+mkdir build
+cd build
+../configure
+
+$MAKE
+test -f ../foo.1
+$MAKE distdir
+test -f $me-1.0/foo.1
+$MAKE distcheck
+
+cd ..
+rm -f foo.1
+./configure
+
+$MAKE
+test -f foo.1
+$MAKE distdir
+test -f $me-1.0/foo.1
+$MAKE distcheck
+
+:
diff --git a/t/mdate.sh b/t/mdate.sh
new file mode 100644
index 000000000..6b43e6269
--- /dev/null
+++ b/t/mdate.sh
@@ -0,0 +1,37 @@
+#!/bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test that mdate-sh is required when Texinfo used and version.texi needed.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+info_TEXINFOS = textutils.texi
+END
+
+cat > textutils.texi << 'END'
+@include version.texi
+@setfilename textutils.info
+END
+
+# Required when using Texinfo.
+: > texinfo.tex
+
+$ACLOCAL
+AUTOMAKE_fails
+grep 'required file.*mdate-sh.*not found' stderr
+
+:
diff --git a/t/mdate2.sh b/t/mdate2.sh
new file mode 100644
index 000000000..519503911
--- /dev/null
+++ b/t/mdate2.sh
@@ -0,0 +1,40 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure mdate-sh is included in distribution.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+info_TEXINFOS = textutils.texi
+END
+
+cat > textutils.texi << 'END'
+@include version.texi
+END
+
+# Required when using Texinfo.
+: > texinfo.tex
+: > mdate-sh
+echo '@setfilename textutils.info' > textutils.texi
+
+# Use "././" to confuse Automake into thinking this is a subdir build.
+$ACLOCAL
+$AUTOMAKE ././Makefile
+
+grep 'mdate-sh' Makefile.in | grep -v SHELL
+
+:
diff --git a/t/mdate3.sh b/t/mdate3.sh
new file mode 100644
index 000000000..7948482f6
--- /dev/null
+++ b/t/mdate3.sh
@@ -0,0 +1,49 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure mdate-sh run correctly.
+
+. test-init.sh
+
+cat > configure.ac << END
+AC_INIT([$me], [1.0])
+AC_CONFIG_AUX_DIR([foo])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile])
+END
+
+cat > Makefile.am << 'END'
+info_TEXINFOS = textutils.texi
+END
+
+cat > textutils.texi << 'END'
+@include version.texi
+@setfilename textutils.info
+END
+
+mkdir foo
+
+# Required when using Texinfo.
+: > foo/texinfo.tex
+: > foo/mdate-sh
+mv install-sh foo
+mv missing foo
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '[^/]mdate-sh' Makefile.in && exit 1
+exit 0
diff --git a/t/mdate4.sh b/t/mdate4.sh
new file mode 100644
index 000000000..fa2d9d4f5
--- /dev/null
+++ b/t/mdate4.sh
@@ -0,0 +1,46 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure that mdate-sh is added to the right directory.
+# Report from Kevin Dalley.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_FILES([sub/Makefile])
+END
+
+cat > Makefile.am << 'END'
+SUBDIRS = sub
+END
+
+mkdir sub
+
+cat > sub/Makefile.am << 'END'
+info_TEXINFOS = textutils.texi
+END
+
+cat > sub/textutils.texi << 'END'
+@include version.texi
+@setfilename textutils.info
+END
+
+$ACLOCAL
+$AUTOMAKE -a
+ls -l sub
+test -f sub/mdate-sh
+
+:
diff --git a/t/mdate5.sh b/t/mdate5.sh
new file mode 100644
index 000000000..9426e53eb
--- /dev/null
+++ b/t/mdate5.sh
@@ -0,0 +1,45 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure mdate-sh works correctly.
+
+am_create_testdir=empty
+. test-init.sh
+
+get_shell_script mdate-sh
+
+set x $(./mdate-sh mdate-sh)
+shift
+echo "$*" # For debugging.
+
+# Check that mdate output looks like a date:
+test $# = 3
+case $1$3 in *[!0-9]*) exit 1;; esac
+test $1 -lt 32
+# Hopefully automake will be obsolete in 80 years ;-)
+case $3 in 20[0-9][0-9]) :;; *) exit 1;; esac
+case $2 in
+ January|February|March|April|May|June|July|August) ;;
+ September|October|November|December) ;;
+ *) exit 1
+esac
+
+# Stricter checks on the year required a POSIX date(1) command.
+if year=$(date +%Y) && test $year -gt 2010; then
+ test $year = $3 || exit 1
+fi
+
+:
diff --git a/t/mdate6.sh b/t/mdate6.sh
new file mode 100644
index 000000000..21729c8b5
--- /dev/null
+++ b/t/mdate6.sh
@@ -0,0 +1,36 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# mdate-sh can work with weird file names, doesn't eval too much.
+
+am_create_testdir=empty
+. test-init.sh
+
+a=
+file='file name $a'
+( : > "$file" ) \
+ || skip_ "file name with spaces and metacharacters not accepted"
+
+get_shell_script mdate-sh
+
+./mdate-sh "$file" >stdout 2>stderr ||
+ { cat stdout; cat stderr >&2; exit 1; }
+cat stdout
+cat stderr >&2
+grep '[12][0-9]\{3\}' stdout
+test ! -s stderr
+
+:
diff --git a/t/missing-auxfile-stops-makefiles-creation.sh b/t/missing-auxfile-stops-makefiles-creation.sh
new file mode 100644
index 000000000..6d794a3a8
--- /dev/null
+++ b/t/missing-auxfile-stops-makefiles-creation.sh
@@ -0,0 +1,65 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Automake should stop the creation of Makefile.in files at the first
+# encountered error due to a required auxiliary file not found.
+
+. test-init.sh
+
+cat >> configure.ac <<END
+AM_PATH_PYTHON
+END
+
+echo SUBDIRS = > Makefile.am
+
+for i in 1 2 3 4 5; do
+ echo "AC_CONFIG_FILES([sub$i/Makefile])" >> configure.ac
+ echo "SUBDIRS += sub$i" >> Makefile.am
+ mkdir sub$i
+ echo python_PYTHON = foo.py > sub$i/Makefile.am
+done
+
+: > sub1/Makefile.am
+
+$ACLOCAL
+
+unset AUTOMAKE_JOBS
+
+AUTOMAKE_fails
+ls -l Makefile.in */Makefile.in || : # For debugging.
+# Top-level Makefile.in might be created or not, we don't want to set
+# too strict semantics here, so don't check for it. But the later
+# files shouldn't exist.
+test -f sub1/Makefile.in
+test ! -e sub2/Makefile.in
+test ! -e sub3/Makefile.in
+test ! -e sub4/Makefile.in
+test ! -e sub5/Makefile.in
+
+rm -f Makefile.in */Makefile.in
+
+: > sub2/Makefile.am
+: > sub3/Makefile.am
+
+AUTOMAKE_fails
+ls -l Makefile.in */Makefile.in || : # For debugging.
+test -f sub1/Makefile.in
+test -f sub2/Makefile.in
+test -f sub3/Makefile.in
+test ! -e sub4/Makefile.in
+test ! -e sub5/Makefile.in
+
+:
diff --git a/t/missing-version-mismatch.sh b/t/missing-version-mismatch.sh
new file mode 100644
index 000000000..41146746b
--- /dev/null
+++ b/t/missing-version-mismatch.sh
@@ -0,0 +1,50 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test missing with version mismatches.
+
+am_create_testdir=empty
+. test-init.sh
+
+get_shell_script missing
+
+do_check ()
+{
+ progname=$1; shift;
+ ./missing "$@" 2>stderr && { cat stderr >&2; exit 1; }
+ cat stderr >&2
+ $FGREP "WARNING: '$progname' is probably too old." stderr
+}
+
+echo 'AC_INIT([x], [1.0]) AC_PREREQ([9999])' >> configure.ac
+
+do_check autoconf $AUTOCONF
+do_check autoheader $AUTOHEADER
+do_check aclocal-$APIVERSION $am_original_ACLOCAL
+
+cat > configure.ac << 'END'
+AC_INIT([x], [0])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile])
+END
+
+echo AUTOMAKE_OPTIONS = 9999.9999 > Makefile.am
+$ACLOCAL
+: > install-sh
+# FIXME: this doesn't work due to a bug in automake (not 'missing').
+#do_check automake-$APIVERSION $am_original_AUTOMAKE
+
+:
diff --git a/t/missing3.sh b/t/missing3.sh
new file mode 100644
index 000000000..f0bdeed36
--- /dev/null
+++ b/t/missing3.sh
@@ -0,0 +1,55 @@
+#! /bin/sh
+# Copyright (C) 2004-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test missing when running a tool's --version.
+
+am_create_testdir=empty
+. test-init.sh
+
+get_shell_script missing
+
+# b7cb8259 assumed not to exist.
+
+run_cmd ()
+{
+ st=0; "$@" >stdout 2>stderr || st=$?
+ cat stdout
+ cat stderr >&2
+ return $st
+}
+
+run_cmd ./missing b7cb8259 --version && exit 1
+grep WARNING stderr && exit 1
+run_cmd ./missing b7cb8259 --grep && exit 1
+
+if test x"$am_test_prefer_config_shell" != x"yes"; then
+ # The /bin/sh from Solaris 10 is a spectacular failure. After a failure
+ # due to a "command not found", it sets '$?' to '1'.
+ if (st=0; /bin/sh -c 'no--such--command' || st=$?; test $st -eq 127); then
+ grep 'WARNING:.*missing on your system' stderr
+ fi
+fi
+
+# missing itself it known to exist :)
+
+run_cmd ./missing ./missing --version || exit 1
+grep 'missing .*(GNU [aA]utomake)' stdout
+test -s stderr && exit 1
+run_cmd ./missing ./missing --grep && exit 1
+grep WARNING stderr && exit 1
+grep "missing:.* unknown '--grep'" stderr
+
+:
diff --git a/t/mkdir_p.sh b/t/mkdir_p.sh
new file mode 100644
index 000000000..36d91fc24
--- /dev/null
+++ b/t/mkdir_p.sh
@@ -0,0 +1,55 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# AM_INIT_AUTOMAKE should still define $(mkdir_p), for backward
+# compatibility.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+SUBDIRS = sub
+all-local:
+ $(mkdir_p) . dir1/a
+ @mkdir_p@ . dir2/b
+check-local: all
+ test -d dir1/a
+ test -d dir2/b
+ test -d dir3/c
+ test -d dir3/d
+END
+
+mkdir sub
+cat > sub/Makefile.am << 'END'
+# '$(mkdir_p)' should continue to work even in subdir makefiles.
+all-local:
+ $(mkdir_p) .. ../dir3/c
+ @mkdir_p@ .. ../dir3/d
+END
+
+$ACLOCAL
+$AUTOCONF -Werror -Wall
+$AUTOMAKE
+
+./configure
+$MAKE check-local
+$MAKE distcheck
+
+:
diff --git a/t/mkdirp-deprecation.sh b/t/mkdirp-deprecation.sh
new file mode 100644
index 000000000..39e8d8a43
--- /dev/null
+++ b/t/mkdirp-deprecation.sh
@@ -0,0 +1,48 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that the AM_PROG_MKDIR_P macro is deprecated. It will be
+# be removed in the next major Automake release.
+
+. test-init.sh
+
+echo AM_PROG_MKDIR_P >> configure.ac
+: > Makefile.am
+
+grep_err ()
+{
+ loc='^configure.ac:4:'
+ grep "$loc.*AM_PROG_MKDIR_P.*deprecated" stderr
+ grep "$loc.* use .*AC_PROG_MKDIR_P" stderr
+ grep "$loc.* use '\$(MKDIR_P)' instead of '\$(mkdir_p)'.*Makefile" stderr
+}
+
+$ACLOCAL
+
+$AUTOCONF -Werror -Wobsolete 2>stderr && { cat stderr >&2; exit 1; }
+cat stderr >&2
+grep_err
+
+$AUTOCONF -Werror -Wno-obsolete
+
+#AUTOMAKE_fails
+#grep_err
+AUTOMAKE_fails --verbose -Wnone -Wobsolete
+grep_err
+
+$AUTOMAKE -Wno-obsolete
+
+:
diff --git a/t/mkinst2.sh b/t/mkinst2.sh
new file mode 100644
index 000000000..9a5f03cbe
--- /dev/null
+++ b/t/mkinst2.sh
@@ -0,0 +1,40 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure no-installman suppresses man dir creation.
+
+. test-init.sh
+
+echo AC_OUTPUT >> configure.ac
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = no-installman
+man_MANS = foo.1
+END
+
+: > foo.1
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure --prefix "$(pwd)/sub"
+
+$MAKE installdirs
+test ! -e sub/man
+$MAKE install
+test ! -e sub/man
+
+:
diff --git a/t/mkinst3.sh b/t/mkinst3.sh
new file mode 100644
index 000000000..dad26b74d
--- /dev/null
+++ b/t/mkinst3.sh
@@ -0,0 +1,68 @@
+#! /bin/sh
+# Copyright (C) 2005-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test mkinstalldirs with spaces in directory names.
+
+am_create_testdir=empty
+. test-init.sh
+
+cwd=$(pwd) || fatal_ "getting current working directory"
+
+# Make sure the directory we will create can be created...
+mkdir '~a b' && mkdir '~a b/-x y' \
+ || skip_ "directory names with spaces and metacharacters not accepted"
+rm -rf '~a b'
+
+get_shell_script mkinstalldirs
+
+# Test mkinstalldirs with the installed mkdir.
+
+./mkinstalldirs '~a b/-x y'
+test -d '~a b/-x y'
+rm -rf '~a b'
+
+# Trick mkinstalldirs into thinking mkdir does not support -p.
+
+mkdir bin
+cat >bin/mkdir <<'EOF'
+#!/bin/sh
+for arg
+do
+ case $arg in
+ -p) exit 1;;
+ esac
+done
+PATH=$AM_PATH
+export PATH
+exec mkdir "$@"
+EOF
+
+chmod +x bin/mkdir
+
+AM_PATH=$PATH; export AM_PATH
+PATH=$cwd/bin$PATH_SEPARATOR$PATH; export PATH
+
+# Test mkinstalldirs without mkdir -p.
+
+./mkinstalldirs '~a b/-x y'
+test -d '~a b/-x y'
+rm -rf '~a b'
+
+./mkinstalldirs "$cwd///~a b//-x y"
+test -d "$cwd/~a b/-x y"
+rm -rf '~a b'
+
+:
diff --git a/t/mkinstall.sh b/t/mkinstall.sh
new file mode 100644
index 000000000..eb3787161
--- /dev/null
+++ b/t/mkinstall.sh
@@ -0,0 +1,31 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for bug where mkinstalldirs variable can be set incorrectly.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+pkgdata_DATA =
+END
+
+# The "././" prefix confuses Automake into thinking it is doing a
+# subdir build. Yes, this is hacky.
+$ACLOCAL
+$AUTOMAKE ././Makefile
+
+grep ' /mkinstalldirs' Makefile.in && exit 1
+exit 0
diff --git a/t/mmode.sh b/t/mmode.sh
new file mode 100644
index 000000000..2dabcd612
--- /dev/null
+++ b/t/mmode.sh
@@ -0,0 +1,64 @@
+#! /bin/sh
+# Copyright (C) 2008-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check for AM_MAINTAINER_MODE defaults.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_MAINTAINER_MODE
+AC_OUTPUT
+END
+
+: >Makefile.am
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+grep '^MAINT.*#' Makefile
+
+./configure --disable-maintainer-mode
+grep '^MAINT.*#' Makefile
+
+./configure --enable-maintainer-mode
+grep '^MAINT.*#' Makefile && exit 1
+
+sed 's/\(AM_MAINTAINER_MODE\).*/\1([disable])/' configure.ac > configure.tmp
+mv -f configure.tmp configure.ac
+mv configure configure1
+$AUTOCONF --force
+diff configure configure1
+
+sed 's/\(AM_MAINTAINER_MODE\).*/\1([enable])/' configure.ac > configure.tmp
+mv -f configure.tmp configure.ac
+$AUTOCONF --force
+
+./configure
+grep '^MAINT.*#' Makefile && exit 1
+
+./configure --enable-maintainer-mode
+grep '^MAINT.*#' Makefile && exit 1
+
+./configure --disable-maintainer-mode
+grep '^MAINT.*#' Makefile
+
+sed 's/\(AM_MAINTAINER_MODE\).*/\1([foo])/' configure.ac > configure.tmp
+mv -f configure.tmp configure.ac
+$AUTOCONF --force -Werror && exit 1
+
+:
diff --git a/t/mmodely.sh b/t/mmodely.sh
new file mode 100644
index 000000000..19df3eac8
--- /dev/null
+++ b/t/mmodely.sh
@@ -0,0 +1,94 @@
+#! /bin/sh
+# Copyright (C) 2004-2017 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 <https://www.gnu.org/licenses/>.
+
+# Verify that intermediate files are only built from Yacc and Lex
+# sources in maintainer mode.
+# From Derek R. Price.
+
+required=cc
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_MAINTAINER_MODE
+AC_PROG_CC
+AM_PROG_LEX
+AC_PROG_YACC
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+YACC = false
+LEX = false
+bin_PROGRAMS = zardoz
+zardoz_SOURCES = zardoz.y joe.l
+LDADD = @LEXLIB@
+END
+
+# The point of this test is that it is not dependent on a working lex
+# or yacc.
+cat > joe.c <<EOF
+int joe (int arg)
+{
+ return arg * 2;
+}
+EOF
+# On systems which link in libraries non-lazily and whose linkers
+# complain about unresolved symbols by default, such as Solaris, an
+# yylex function needs to be defined to avoid an error due to an
+# unresolved symbol.
+cat > zardoz.c <<EOF
+int joe (int arg);
+int yylex (void)
+{
+ return 0;
+}
+int main (int argc, char **argv)
+{
+ return joe (argc);
+}
+EOF
+
+# Ensure a later timestamp for our Lex & Yacc sources.
+$sleep
+: > joe.l
+: > zardoz.y
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+$MAKE
+
+cat >myyacc.sh <<'END'
+#! /bin/sh
+echo "$@" >y.tab.c
+END
+cat >mylex.sh <<'END'
+echo "$@" >lex.yy.c
+END
+chmod +x myyacc.sh mylex.sh
+PATH=$(pwd)$PATH_SEPARATOR$PATH; export PATH
+
+# "make maintainer-clean; ./configure; make" should always work,
+# per GNU Standard.
+$MAKE maintainer-clean
+./configure
+run_make YACC=myyacc.sh LEX=mylex.sh LEX_OUTPUT_ROOT=lex.yy zardoz.c joe.c
+$FGREP zardoz.y zardoz.c
+$FGREP joe.l joe.c
+
+:
diff --git a/t/no-extra-c-stuff.sh b/t/no-extra-c-stuff.sh
new file mode 100644
index 000000000..6939059a9
--- /dev/null
+++ b/t/no-extra-c-stuff.sh
@@ -0,0 +1,74 @@
+#! /bin/sh
+# Copyright (C) 2013-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that Automake doesn't generated rules or definitions related
+# to compilation of C sources for a project that doesn't use nor need
+# a C Compiler. Inspired by the issues reported in automake bug#14560.
+
+am_create_testdir=empty
+. test-init.sh
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AC_CONFIG_AUX_DIR([.])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([
+ Makefile
+ sub/Makefile
+ sub2/Makefile
+])
+AC_PROG_CXX
+AC_PROG_F77
+AC_OUTPUT
+END
+
+cat > Makefile.am <<END
+SUBDIRS = sub sub2
+bin_PROGRAMS = bar
+bar_SOURCES = bar.cc
+END
+
+mkdir sub sub2
+
+cat > sub/Makefile.am <<END
+bin_PROGRAMS = foo
+foo_SOURCES = foo.f
+END
+
+cat > sub2/Makefile.am <<END
+bin_PROGRAMS = baz
+baz_SOURCES = baz.cxx
+END
+
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+test -f install-sh
+test ! -e compile
+
+# Sanity checks.
+$FGREP '$(CXX)' Makefile.in
+$FGREP '$(CXX)' sub2/Makefile.in
+$FGREP '$(F77)' Makefile.in sub2/Makefile.in && exit 1
+$FGREP '$(F77)' sub/Makefile.in
+$FGREP '$(CXX)' sub/Makefile.in && exit 1
+
+$EGREP '(^COMPILE|$\(CC\)|AM_V_CC)' \
+ Makefile.in sub/Makefile.in sub2/Makefile.in && exit 1
+
+:
diff --git a/t/no-extra-makefile-code.sh b/t/no-extra-makefile-code.sh
new file mode 100644
index 000000000..48a7990b6
--- /dev/null
+++ b/t/no-extra-makefile-code.sh
@@ -0,0 +1,41 @@
+#!/bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that we don't emit harmless but useless code in the generated
+# Makefile.in when the project does not use compiled languages. Motivated
+# by a regression caused by removal of automatic de-ANSI-fication support:
+# <https://lists.gnu.org/archive/html/automake-patches/2011-08/msg00200.html>
+
+. test-init.sh
+
+echo AC_OUTPUT >> configure.ac
+
+: > Makefile.am
+
+# Automake shouldn't need nor require these.
+rm -f depcomp compile
+
+$ACLOCAL
+
+# Don't use '--add-missing' here, so that we can implicitly
+# check that the auxiliary scripts 'compile' and 'depcomp'
+# are not spuriously required by Automake.
+$AUTOMAKE
+
+$EGREP 'INCLUDES|@am__isrc@|-compile|\$\(OBJEXT\)|tab\.[ch]' \
+ Makefile.in && exit 1
+
+:
diff --git a/t/no-spurious-install-recursive.sh b/t/no-spurious-install-recursive.sh
new file mode 100644
index 000000000..f5c91374e
--- /dev/null
+++ b/t/no-spurious-install-recursive.sh
@@ -0,0 +1,32 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Regression test for install-recursive appearing in a non recursive Makefile.
+# Report from Bruno Haible.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+noinst_SCRIPTS = hostname
+include_HEADERS = gettext-po.h
+BUILT_SOURCES = po-hash-gen.c
+END
+
+$ACLOCAL
+$AUTOMAKE
+grep 'install-recursive' Makefile.in && exit 1
+
+:
diff --git a/t/nobase-libtool.sh b/t/nobase-libtool.sh
new file mode 100644
index 000000000..a17c44d6a
--- /dev/null
+++ b/t/nobase-libtool.sh
@@ -0,0 +1,94 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure nobase_* works for libtool libraries and programs as well.
+# This is just the libtool equivalent of 'nobase.sh', split up to allow
+# greater exposure of that test.
+
+required='cc libtoolize'
+. test-init.sh
+
+cat >> configure.ac <<'EOF'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_LIBTOOL
+AC_OUTPUT
+EOF
+
+cat > Makefile.am << 'EOF'
+fooexecdir = $(prefix)/foo
+fooexec_LTLIBRARIES = sub/libbase.la
+nobase_fooexec_LTLIBRARIES = sub/libnobase.la
+fooexec_PROGRAMS = sub/base
+nobase_fooexec_PROGRAMS = sub/nobase
+sub_libbase_la_SOURCES = source2.c
+sub_libnobase_la_SOURCES = source2.c
+sub_base_SOURCES = source.c
+sub_nobase_SOURCES = source.c
+
+test-install-data: install-data
+ test ! -f inst/foo/sub/libnobase.la
+ test ! -f inst/foo/libbase.la
+
+test-install-exec: install-exec
+ test -f inst/foo/sub/libnobase.la
+ test ! -f inst/foo/libnobase.la
+ test -f inst/foo/libbase.la
+
+.PHONY: test-install-exec test-install-data
+EOF
+
+mkdir sub
+
+cat >source.c <<'EOF'
+int main (int argc, char *argv[])
+{
+ return 0;
+}
+EOF
+cp source.c source2.c
+
+rm -f install-sh
+
+libtoolize
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a --copy
+./configure --prefix "$(pwd)/inst" --program-prefix=p
+
+$MAKE
+$MAKE test-install-data
+$MAKE test-install-exec
+$MAKE uninstall
+
+test $(find inst/foo -type f -print | wc -l) -eq 0
+
+$MAKE install-strip
+
+# Likewise, in a VPATH build.
+
+$MAKE uninstall
+$MAKE distclean
+mkdir build
+cd build
+../configure --prefix "$(pwd)/inst" --program-prefix=p
+$MAKE
+$MAKE test-install-data
+$MAKE test-install-exec
+$MAKE uninstall
+test $(find inst/foo -type f -print | wc -l) -eq 0
+
+:
diff --git a/t/nobase-nodist.sh b/t/nobase-nodist.sh
new file mode 100644
index 000000000..3a6342b30
--- /dev/null
+++ b/t/nobase-nodist.sh
@@ -0,0 +1,60 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Interaction of 'nobase_' and 'nodist_' prefixes.
+
+. test-init.sh
+
+# Simulate no emacs and no python (it shouldn't be needed in this test).
+EMACS="no" PYTHON=":"; export EMCAS PYTHON
+
+cat >> configure.ac << 'END'
+AM_PATH_LISPDIR
+AM_PATH_PYTHON([], [], [:])
+# Simulate no javac (it shouldn't be needed in this test).
+AC_SUBST([JAVAC], [false])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+nobase_nodist_noinst_PYTHON = baz1.py sub/baz2.py
+# Lisp and Java sources are not distributed by default, so try both
+# with and without the 'nodist_' prefix, for more coverage.
+nobase_noinst_LISP = foo1.el sub/foo2.el
+nobase_nodist_noinst_LISP = foo3.el sub/foo4.el
+nobase_noinst_JAVA = bar1.java sub/bar2.java
+nobase_nodist_noinst_JAVA = bar3.java sub/bar4.java
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+./configure
+$MAKE distdir
+
+ls -l $distdir $distdir/* # For debugging.
+test ! -e $distdir/foo1.el
+test ! -e $distdir/sub/foo2.el
+test ! -e $distdir/foo3.el
+test ! -e $distdir/sub/foo4.el
+test ! -e $distdir/bar1.java
+test ! -e $distdir/sub/bar2.java
+test ! -e $distdir/bar3.java
+test ! -e $distdir/sub/bar4.java
+test ! -e $distdir/baz1.py
+test ! -e $distdir/sub/baz2.py
+
+:
diff --git a/t/nobase-python.sh b/t/nobase-python.sh
new file mode 100644
index 000000000..436bb5e82
--- /dev/null
+++ b/t/nobase-python.sh
@@ -0,0 +1,84 @@
+#! /bin/sh
+# Copyright (C) 2008-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure nobase_* works for python files.
+
+required=python
+. test-init.sh
+
+cat >>configure.ac <<EOF
+AM_PATH_PYTHON
+AC_OUTPUT
+EOF
+
+cat > Makefile.am <<'END'
+mydir=$(prefix)/my
+my_PYTHON = one.py sub/base.py
+nobase_my_PYTHON = two.py sub/nobase.py
+END
+
+test_install()
+{
+ $MAKE install-data
+ find inst -print # For debugging.
+ py_installed inst/my/one.py
+ py_installed inst/my/one.pyc
+ py_installed inst/my/two.py
+ py_installed inst/my/two.pyc
+ py_installed inst/my/base.py
+ py_installed inst/my/base.pyc
+ py_installed inst/my/sub/nobase.py
+ py_installed inst/my/sub/nobase.pyc
+ py_installed --not inst/my/nobase.py
+ py_installed --not inst/my/nobase.pyc
+}
+
+test_uninstall()
+{
+ $MAKE uninstall
+ test -d inst/my
+ ! find inst/my -type f -print | grep .
+}
+
+mkdir sub
+
+for file in one.py sub/base.py two.py sub/nobase.py; do
+ echo 'def one(): return 1' >$file
+done
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+./configure --prefix "$(pwd)/inst" --program-prefix=p
+
+$MAKE
+test_install
+test_uninstall
+
+$MAKE install-strip
+test_uninstall
+
+# Likewise, in a VPATH build.
+
+$MAKE distclean
+mkdir build
+cd build
+../configure --prefix "$(pwd)/inst" --program-prefix=p
+test_install
+test_uninstall
+
+:
diff --git a/t/nobase.sh b/t/nobase.sh
new file mode 100644
index 000000000..2bd1aa7ab
--- /dev/null
+++ b/t/nobase.sh
@@ -0,0 +1,147 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure nobase_* works.
+
+required=cc
+. test-init.sh
+
+cat >> configure.ac <<'EOF'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+AC_OUTPUT
+EOF
+
+cat > Makefile.am << 'EOF'
+foodir = $(prefix)/foo
+fooexecdir = $(prefix)/foo
+
+foo_HEADERS = sub/base.h sub/base-gen.h
+nobase_foo_HEADERS = sub/nobase.h sub/nobase-gen.h
+
+dist_foo_DATA = sub/base.dat sub/base-gen.dat
+nobase_dist_foo_DATA = sub/nobase.dat sub/nobase-gen.dat
+
+dist_fooexec_SCRIPTS = sub/base.sh sub/base-gen.sh
+nobase_dist_fooexec_SCRIPTS = sub/nobase.sh sub/nobase-gen.sh
+
+fooexec_PROGRAMS = sub/base
+nobase_fooexec_PROGRAMS = sub/nobase
+sub_base_SOURCES = source.c
+sub_nobase_SOURCES = source.c
+
+fooexec_LIBRARIES = sub/libbase.a
+nobase_fooexec_LIBRARIES = sub/libnobase.a
+sub_libbase_a_SOURCES = source.c
+sub_libnobase_a_SOURCES = source.c
+
+generated_files = sub/base-gen.h sub/nobase-gen.h sub/base-gen.dat \
+sub/nobase-gen.dat sub/base-gen.sh sub/nobase-gen.sh
+
+$(generated_files):
+ $(MKDIR_P) sub
+ echo "generated file $@" > $@
+
+CLEANFILES = $(generated_files)
+
+test-install-data: install-data
+ test -f inst/foo/sub/nobase.h
+ test ! -f inst/foo/nobase.h
+ test -f inst/foo/sub/nobase-gen.h
+ test ! -f inst/foo/nobase-gen.h
+ test -f inst/foo/base.h
+ test -f inst/foo/base-gen.h
+ test -f inst/foo/sub/nobase.dat
+ test ! -f inst/foo/nobase.dat
+ test -f inst/foo/sub/nobase-gen.dat
+ test ! -f inst/foo/nobase-gen.dat
+ test -f inst/foo/base.dat
+ test -f inst/foo/base-gen.dat
+ test ! -f inst/foo/sub/pnobase.sh
+ test ! -f inst/foo/sub/pnobase-gen.sh
+ test ! -f inst/foo/pbase.sh
+ test ! -f inst/foo/pbase-gen.sh
+ test ! -f inst/foo/sub/pnobase$(EXEEXT)
+ test ! -f inst/foo/pbase$(EXEEXT)
+ test ! -f inst/foo/sub/libnobase.a
+ test ! -f inst/foo/libbase.a
+
+test-install-exec: install-exec
+ test -f inst/foo/sub/pnobase.sh
+ test ! -f inst/foo/pnobase.sh
+ test -f inst/foo/sub/pnobase-gen.sh
+ test ! -f inst/foo/pnobase-gen.sh
+ test -f inst/foo/pbase.sh
+ test -f inst/foo/pbase-gen.sh
+ test -f inst/foo/sub/pnobase$(EXEEXT)
+ test ! -f inst/foo/pnobase$(EXEEXT)
+ test -f inst/foo/pbase$(EXEEXT)
+ test -f inst/foo/sub/libnobase.a
+ test ! -f inst/foo/libnobase.a
+ test -f inst/foo/libbase.a
+
+.PHONY: test-install-exec test-install-data
+EOF
+
+mkdir sub
+
+: > sub/base.h
+: > sub/nobase.h
+: > sub/base.dat
+: > sub/nobase.dat
+: > sub/base.sh
+: > sub/nobase.sh
+
+cat >source.c <<'EOF'
+int
+main (int argc, char *argv[])
+{
+ return 0;
+}
+EOF
+cp source.c source2.c
+
+rm -f install-sh
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a --copy
+./configure --prefix "$(pwd)/inst" --program-prefix=p
+
+$MAKE
+$MAKE test-install-data
+$MAKE test-install-exec
+$MAKE uninstall
+
+test $(find inst/foo -type f -print | wc -l) -eq 0
+
+$MAKE install-strip
+
+# Likewise, in a VPATH build.
+
+$MAKE uninstall
+$MAKE distclean
+mkdir build
+cd build
+../configure --prefix "$(pwd)/inst" --program-prefix=p
+$MAKE
+$MAKE test-install-data
+$MAKE test-install-exec
+$MAKE uninstall
+test $(find inst/foo -type f -print | wc -l) -eq 0
+
+:
diff --git a/t/nodef.sh b/t/nodef.sh
new file mode 100644
index 000000000..1b1de36de
--- /dev/null
+++ b/t/nodef.sh
@@ -0,0 +1,58 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that PACKAGE and VERSION are AC_DEFINEd when requested.
+
+. test-init.sh
+
+# -------------------------------------------------------------------
+# Do not upgrade this file to use the modern AC_INIT/AM_INIT_AUTOMAKE
+# forms. The day these obsolete AC_INIT and AM_INIT_AUTOMAKE forms
+# are dropped, just erase the file.
+# nodef2.test contains the modern version of this test.
+# -------------------------------------------------------------------
+
+# First, check that PACKAGE and VERSION are output by default.
+
+cat > configure.ac << 'END'
+AC_INIT
+AM_INIT_AUTOMAKE([UnIqUe_PaCkAgE], [UnIqUe_VeRsIoN])
+AC_OUTPUT(output)
+END
+
+echo 'DEFS = @DEFS@' > output.in
+
+$ACLOCAL
+$AUTOCONF
+./configure
+
+grep 'DEFS.*-DVERSION=\\"UnIqUe' output
+
+# Then, check that PACKAGE and VERSION are not output if requested.
+
+cat > configure.ac << 'END'
+AC_INIT
+AM_INIT_AUTOMAKE([UnIqUe_PaCkAgE], [UnIqUe_VeRsIoN], [no])
+AC_OUTPUT(output)
+END
+
+$ACLOCAL
+$AUTOCONF
+./configure
+
+grep 'DEFS.*-DVERSION=\\"UnIqUe' output && exit 1
+
+:
diff --git a/t/nodef2.sh b/t/nodef2.sh
new file mode 100644
index 000000000..f39009c32
--- /dev/null
+++ b/t/nodef2.sh
@@ -0,0 +1,54 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that PACKAGE and VERSION are AC_DEFINEd when requested.
+
+. test-init.sh
+
+# First, check that PACKAGE and VERSION are output by default.
+
+cat > configure.ac << 'END'
+AC_INIT([UnIqUe_PaCkAgE], [UnIqUe_VeRsIoN])
+AM_INIT_AUTOMAKE
+AC_OUTPUT(output)
+END
+
+echo 'DEFS = @DEFS@' > output.in
+
+$ACLOCAL
+$AUTOCONF
+./configure
+
+grep 'DEFS.*-DVERSION=\\"UnIqUe' output
+
+# Then, check that PACKAGE and VERSION are not output if requested.
+
+cat > configure.ac << 'END'
+AC_INIT([UnIqUe_PaCkAgE], [UnIqUe_VeRsIoN])
+AM_INIT_AUTOMAKE([no-define])
+AC_OUTPUT(output Makefile)
+END
+
+: > Makefile.am
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE # Dummy call to make sure Automake grok 'no-define' silently.
+./configure
+
+grep 'DEFS.*-DVERSION=\\"UnIqUe' output && exit 1
+
+:
diff --git a/t/nodep.sh b/t/nodep.sh
new file mode 100644
index 000000000..a3dc815df
--- /dev/null
+++ b/t/nodep.sh
@@ -0,0 +1,42 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure no-dependencies option does the right thing.
+# Bug report from Greg A. Woods.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = no-dependencies
+bin_PROGRAMS = zardoz
+zardoz_SOURCES = y.c
+END
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+END
+
+mkdir x
+
+: > y.c
+
+$ACLOCAL
+$AUTOMAKE
+
+sed 's/printf .*%s//' Makefile.in > Makefile.tmp
+grep '%' Makefile.tmp && exit 1
+
+:
diff --git a/t/nodep2.sh b/t/nodep2.sh
new file mode 100644
index 000000000..030e8865b
--- /dev/null
+++ b/t/nodep2.sh
@@ -0,0 +1,45 @@
+#! /bin/sh
+# Copyright (C) 2006-2017 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 <https://www.gnu.org/licenses/>.
+
+# Another test to make sure no-dependencies option does the right thing.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo
+foo_SOURCES = a.c b.cpp c.m cxx.mm d.S e.java f.upc
+END
+
+cat > configure.ac << 'END'
+AC_INIT([nodep2], [1], [bug-automake@gnu.org])
+AM_INIT_AUTOMAKE([no-dependencies])
+AC_CONFIG_FILES([Makefile])
+AC_PROG_CC
+AC_PROG_CXX
+AC_PROG_OBJC
+AC_PROG_OBJCXX
+AM_PROG_AS
+AM_PROG_GCJ
+AM_PROG_UPC
+AC_OUTPUT
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+grep DEPMODE Makefile.in && exit 1
+
+:
diff --git a/t/nodepcomp.sh b/t/nodepcomp.sh
new file mode 100644
index 000000000..96a57ec8d
--- /dev/null
+++ b/t/nodepcomp.sh
@@ -0,0 +1,26 @@
+#! /bin/sh
+# Copyright (C) 2000-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure depcomp isn't always required.
+
+. test-init.sh
+
+rm -f depcomp
+
+: > Makefile.am
+
+$ACLOCAL
+$AUTOMAKE
diff --git a/t/nodist.sh b/t/nodist.sh
new file mode 100644
index 000000000..c299b3abd
--- /dev/null
+++ b/t/nodist.sh
@@ -0,0 +1,40 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure dist_*_SOURCES and nodist_*_SOURCES work.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = eyeball
+
+eyeball_SOURCES = a.c
+nodist_eyeball_SOURCES = b.c
+dist_eyeball_SOURCES = c.c
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '^am_eyeball_OBJECTS' Makefile.in
+grep '^DIST_SOURCES =' Makefile.in
+grep '^DIST_SOURCES =.*nodist' Makefile.in && exit 1
+
+:
diff --git a/t/nodist2.sh b/t/nodist2.sh
new file mode 100644
index 000000000..d43528628
--- /dev/null
+++ b/t/nodist2.sh
@@ -0,0 +1,38 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure nodist_noinst_HEADERS work.
+# For PR 249.
+
+. test-init.sh
+
+cat >> configure.ac <<'EOF'
+AC_OUTPUT
+EOF
+
+cat > Makefile.am << 'EOF'
+nodist_noinst_HEADERS = baz.h
+EOF
+
+: > baz.h
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+./configure --prefix "$(pwd)/install"
+$MAKE install-data
+
+:
diff --git a/t/nodist3.sh b/t/nodist3.sh
new file mode 100644
index 000000000..354995939
--- /dev/null
+++ b/t/nodist3.sh
@@ -0,0 +1,37 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure no-dist option works.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+END
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = no-dist
+bin_PROGRAMS = eyeball
+eyeball_SOURCES = a.c
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '^dist:' Makefile.in && exit 1
+grep '^DIST_SOURCES =' Makefile.in && exit 1
+
+:
diff --git a/t/noinst.sh b/t/noinst.sh
new file mode 100644
index 000000000..4de379854
--- /dev/null
+++ b/t/noinst.sh
@@ -0,0 +1,32 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check to make sure "make install" will build all in directory with
+# nothing to install.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+all-local:
+ exit 1
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '^install[-a-z]*:.* all' Makefile.in
+
+:
diff --git a/t/noinstdir.sh b/t/noinstdir.sh
new file mode 100644
index 000000000..cab00fd0c
--- /dev/null
+++ b/t/noinstdir.sh
@@ -0,0 +1,70 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure that noinst_* and check_* are not installed.
+# From Pavel Roskin.
+
+required=cc
+. test-init.sh
+
+cat > Makefile.am << 'END'
+noinst_SCRIPTS = foo.sh
+noinst_DATA = foo.xpm
+noinst_LIBRARIES = libfoo.a
+noinst_PROGRAMS = foo
+noinst_HEADERS = foo.h
+check_SCRIPTS = bar.sh
+check_DATA = bar.xpm
+check_LIBRARIES = libbar.a
+check_PROGRAMS = bar
+check_HEADERS = bar.h
+END
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+AC_OUTPUT
+END
+
+: > ar-lib
+
+$ACLOCAL
+$AUTOMAKE
+
+$EGREP '(noinst|check)dir' Makefile.in && exit 1
+
+$AUTOCONF
+./configure --prefix="$(pwd)/inst"
+
+echo 'int main (void) { return 0; }' > foo.c
+echo 'int main (void) { return 0; }' > bar.c
+
+echo 'int foo (void) { return 0; }' > libfoo.c
+echo 'int bar (void) { return 0; }' > libbar.c
+
+: > foo.sh
+: > foo.xpm
+: > foo.h
+: > bar.sh
+: > bar.xpm
+: > bar.h
+
+$MAKE
+$MAKE install
+test ! -e inst
+
+:
diff --git a/t/nolink.sh b/t/nolink.sh
new file mode 100644
index 000000000..63b78fb1c
--- /dev/null
+++ b/t/nolink.sh
@@ -0,0 +1,36 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure Automake does not emit a link rule for unknown languages.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = no-exeext
+
+bin_PROGRAMS = meal
+meal_SOURCES = beans.veg beef.meat
+
+meal: beans.veg beef.meat
+ cat beans.veg beef.meat > meal
+END
+
+$ACLOCAL
+$AUTOMAKE -Wno-override
+
+grep '^meal.*:' Makefile.in | grep -v beef.meat && exit 1
+
+exit 0
diff --git a/t/nostdinc.sh b/t/nostdinc.sh
new file mode 100644
index 000000000..eeb774278
--- /dev/null
+++ b/t/nostdinc.sh
@@ -0,0 +1,56 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure nostdinc option works correctly.
+
+# We don't require a C compiler explicitly, because the first part of the
+# test (where 'Makefile.in' is grepped) does not require one. Insted, we
+# just skip the rest of the test if configure fails to find a working C
+# compiler.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = nostdinc
+bin_PROGRAMS = foo
+foo_SOURCES = foo.c
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+$EGREP '(-I *\.|-I.*srcdir|am__isrc)' Makefile.in && exit 1
+
+# We'll test the fully-processed Makefile too.
+$AUTOCONF
+
+# Test with $builddir != $srcdir
+mkdir build
+cd build
+../configure || exit $?
+$EGREP '.*-I *(\.|\$.srcdir.)' Makefile && exit 1
+
+# Test with $builddir = $srcdir
+cd ..
+./configure || exit $?
+$EGREP '.*-I *(\.|\$.srcdir.)' Makefile && exit 1
+
+exit 0
diff --git a/t/notrans.sh b/t/notrans.sh
new file mode 100644
index 000000000..ce9b421c2
--- /dev/null
+++ b/t/notrans.sh
@@ -0,0 +1,135 @@
+#! /bin/sh
+# Copyright (C) 2008-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check all notrans_, dist_, nodist_ prefix combinations for MANS
+# primary and install-man dependencies.
+
+. test-init.sh
+
+cat >>configure.ac <<'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'EOF'
+man_MANS = foo.1 foo2.1
+dist_man_MANS = bar.2 bar2.2
+nodist_man_MANS = baz.3 baz2.3
+notrans_man_MANS = x-foo.4 x-foo2.4
+notrans_dist_man_MANS = x-bar.5 x-bar2.5
+notrans_nodist_man_MANS = x-baz.6 x-baz2.6
+man7_MANS = y-foo.man y-foo2.man
+dist_man5_MANS = y-bar.man y-bar2.man
+nodist_man4_MANS = y-baz.man y-baz2.man
+notrans_man3_MANS = z-foo.man z-foo2.man
+notrans_dist_man2_MANS = z-bar.man z-bar2.man
+notrans_nodist_man1_MANS = z-baz.man z-baz2.man
+
+# These two are ignored.
+dist_notrans_man_MANS = nosuch.8
+nodist_notrans_man9_MANS = nosuch.man
+
+y-foo.man y-foo2.man:
+ : >$@
+y-bar.man y-bar2.man:
+ : >$@
+y-baz.man y-baz2.man:
+ : >$@
+z-foo.man z-foo2.man:
+ : >$@
+z-bar.man z-bar2.man:
+ : >$@
+z-baz.man z-baz2.man:
+ : >$@
+
+test-install: install
+ test -f inst/man/man1/gnu-foo.1
+ test -f inst/man/man1/gnu-foo2.1
+ test -f inst/man/man2/gnu-bar.2
+ test -f inst/man/man2/gnu-bar2.2
+ test -f inst/man/man3/gnu-baz.3
+ test -f inst/man/man3/gnu-baz2.3
+ test -f inst/man/man4/x-foo.4
+ test -f inst/man/man4/x-foo2.4
+ test -f inst/man/man5/x-bar.5
+ test -f inst/man/man5/x-bar2.5
+ test -f inst/man/man6/x-baz.6
+ test -f inst/man/man6/x-baz2.6
+ test -f inst/man/man7/gnu-y-foo.7
+ test -f inst/man/man7/gnu-y-foo2.7
+ test -f inst/man/man5/gnu-y-bar.5
+ test -f inst/man/man5/gnu-y-bar2.5
+ test -f inst/man/man4/gnu-y-baz.4
+ test -f inst/man/man4/gnu-y-baz2.4
+ test -f inst/man/man3/z-foo.3
+ test -f inst/man/man3/z-foo2.3
+ test -f inst/man/man2/z-bar.2
+ test -f inst/man/man2/z-bar2.2
+ test -f inst/man/man1/z-baz.1
+ test -f inst/man/man1/z-baz2.1
+ test ! -d inst/man/man8
+ test ! -d inst/man/man9
+EOF
+
+: > foo.1
+: > foo2.1
+: > bar.2
+: > bar2.2
+: > baz.3
+: > baz2.3
+: > x-foo.4
+: > x-foo2.4
+: > x-bar.5
+: > x-bar2.5
+: > x-baz.6
+: > x-baz2.6
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+grep '^install-man1:' Makefile.in | grep '\$(man_MANS)'
+grep '^install-man2:' Makefile.in | grep '\$(dist_man_MANS)'
+grep '^install-man3:' Makefile.in | grep '\$(nodist_man_MANS)'
+grep '^install-man4:' Makefile.in | grep '\$(notrans_man_MANS)'
+grep '^install-man5:' Makefile.in | grep '\$(notrans_dist_man_MANS)'
+grep '^install-man6:' Makefile.in | grep '\$(notrans_nodist_man_MANS)'
+grep '^install-man8:' Makefile.in && exit 1
+grep '^install-man9:' Makefile.in && exit 1
+
+cwd=$(pwd) || fatal_ "getting current working directory"
+
+./configure --program-prefix=gnu- --prefix "$cwd"/inst \
+ --mandir "$cwd"/inst/man
+$MAKE
+$MAKE test-install
+test $(find inst/man -type f -print | wc -l) -eq 24
+$MAKE uninstall
+test $(find inst/man -type f -print | wc -l) -eq 0
+
+# Opportunistically test for installdirs.
+rm -rf inst
+$MAKE installdirs
+test -d inst/man/man1
+test -d inst/man/man2
+test -d inst/man/man3
+test -d inst/man/man4
+test -d inst/man/man5
+test -d inst/man/man6
+test -d inst/man/man7
+test -d inst/man/man8 && exit 1
+test -d inst/man/man9 && exit 1
+
+:
diff --git a/t/number.sh b/t/number.sh
new file mode 100644
index 000000000..1a5742a6e
--- /dev/null
+++ b/t/number.sh
@@ -0,0 +1,36 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure _OBJECTS is only generated once. Bug reported by
+# Joerg-Martin Schwarz.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = zardoz
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '^zardoz_OBJECTS' Makefile.in
+test $(grep -c '^zardoz_OBJECTS' Makefile.in) -eq 1
+
+:
diff --git a/t/objc-basic.sh b/t/objc-basic.sh
new file mode 100644
index 000000000..8dad76f8b
--- /dev/null
+++ b/t/objc-basic.sh
@@ -0,0 +1,38 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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.
+
+# Basic tests on the Objective C support that don't actually
+# require an Objective-C compiler.
+# See also sister test 'objcxx-basic.sh'.
+
+. test-init.sh
+
+cat > Makefile.am <<'END'
+bin_PROGRAMS = hello
+hello_SOURCES = hello.m
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+grep "'OBJC'.* undefined" stderr
+grep "add .*'AC_PROG_OBJC'" stderr
+
+rm -rf autom4te*.cache
+
+echo AC_PROG_OBJC >> configure.ac
+
+$ACLOCAL
+$AUTOMAKE
+$EGREP '^\.SUFFIXES:.* \.m( |$)' Makefile.in
+
+:
diff --git a/t/objc-deps.sh b/t/objc-deps.sh
new file mode 100644
index 000000000..60585bbd2
--- /dev/null
+++ b/t/objc-deps.sh
@@ -0,0 +1,72 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Automatic dependency tracking for Objective C.
+# See also sister test 'objcxx-deps.sh'.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_OBJC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo
+foo_SOURCES = bar.m baz.h baz2.h
+END
+
+cat > baz.h << 'END'
+#include <stdio.h>
+#include <stdlib.h>
+#include "baz2.h"
+END
+
+cat > baz2.h << 'END'
+#define MSG "Hello, World"
+END
+
+cat > bar.m << 'END'
+/* The use of #import makes this valid Object C but invalid C. */
+#import "baz.h"
+int main (void)
+{
+ fprintf (stdout, "%s\n", MSG);
+ return EXIT_SUCCESS;
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+./configure --enable-dependency-tracking
+$MAKE
+cross_compiling || (./foo | $FGREP 'Hello, World') || exit 1
+$sleep
+: > old
+echo '#define MSG "Howdy, Earth"' > baz2.h
+$MAKE
+if test -f foo; then
+ is_newest foo old
+else
+ is_newest foo.exe old
+fi
+cross_compiling || (./foo | $FGREP 'Howdy, Earth') || exit 1
+
+$MAKE distcheck
+
+:
diff --git a/t/objc-flags.sh b/t/objc-flags.sh
new file mode 100644
index 000000000..e493935ef
--- /dev/null
+++ b/t/objc-flags.sh
@@ -0,0 +1,62 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test Objective C compilation flags.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_OBJC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AM_DEFAULT_SOURCE_EXT = .m
+bin_PROGRAMS = foo2 foo4
+AM_OBJCFLAGS = -DVALUE=2 -DERROR=1
+foo4_OBJCFLAGS = -DVALUE=4 -DERROR=1
+END
+
+for i in 2 4; do
+ unindent > foo$i.m << END
+ /* Let's make this file valid Objective C but invalid C. */
+ #import <stdlib.h>
+ @interface Who_Cares { } @end
+ #ifdef ERROR
+ # error "macro ERROR is defined for foo.m"
+ #else
+ # if VALUE == $i
+ int main (void) { exit (0); }
+ # else
+ # error "VALUE is != $i in foo.m"
+ # endif
+ #endif
+END
+done
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+$FGREP OBJCFLAGS Makefile.in # For debugging.
+grep '\$(OBJCFLAGS).*\$(AM_OBJCFLAGS)' Makefile.in && exit 1
+grep '\$(OBJCFLAGS).*\$(foo.*_OBJCFLAGS)' Makefile.in && exit 1
+grep '\$(foo.*_OBJCFLAGS).*\$(AM_OBJCFLAGS)' Makefile.in && exit 1
+
+./configure OBJCFLAGS=-UERROR
+$MAKE
+
+:
diff --git a/t/objc-megademo.sh b/t/objc-megademo.sh
new file mode 100644
index 000000000..244ac9a5c
--- /dev/null
+++ b/t/objc-megademo.sh
@@ -0,0 +1,340 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Stress test on Objective C/C++.
+
+required=libtoolize
+am_create_testdir=empty
+. test-init.sh
+
+## Autotools Input Files.
+
+cat > configure.ac << 'END'
+AC_INIT([play], [1.3], [bug-automake@gnu.org])
+
+AC_CONFIG_SRCDIR([play.c])
+AC_CONFIG_AUX_DIR([build-aux])
+AC_CONFIG_MACRO_DIR([m4])
+
+AM_INIT_AUTOMAKE
+
+AM_PROG_AR
+LT_INIT
+
+AC_PROG_CC
+AC_PROG_CXX
+AC_PROG_OBJC
+AC_PROG_OBJCXX
+
+AC_LANG_PUSH([Objective C])
+AC_CACHE_CHECK(
+ [whether the Objective C compiler really works],
+ [my_cv_objc_works],
+ [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#import <stdio.h>]],
+ [[printf ("foo\n");]])],
+ [my_cv_objc_works=yes],
+ [my_cv_objc_works=no])])
+AC_LANG_POP([Objective C])
+
+AC_LANG_PUSH([Objective C++])
+AC_CACHE_CHECK(
+ [whether the Objective C++ compiler really works],
+ [my_cv_objcxx_works],
+ [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#import <iostream>]],
+ [[std::cout << "foo" << "\n";]])],
+ [my_cv_objcxx_works=yes],
+ [my_cv_objcxx_works=no])])
+AC_LANG_POP([Objective C++])
+
+if test $my_cv_objc_works != yes; then
+ AC_MSG_ERROR([couldn't find a working Objective C compiler], [77])
+fi
+
+if test $my_cv_objcxx_works != yes; then
+ AC_MSG_ERROR([couldn't find a working Objective C++ compiler], [77])
+fi
+
+AC_CONFIG_HEADERS([config.h])
+AC_CONFIG_FILES([Makefile])
+
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = play
+play_SOURCES = play.h play.c playxx.cxx playo.m playoxx.mm
+play_LDADD = libfoo.la
+play_LDFLAGS = -lobjc
+lib_LTLIBRARIES = libfoo.la
+libfoo_la_SOURCES = foo.h foo.c fooxx.cxx fooo.m foooxx.mm
+END
+
+## Run Autotools.
+
+libtoolize
+$ACLOCAL
+$AUTOHEADER
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+## Program Sources.
+
+cat > play.h << 'END'
+#ifndef PLAY_H
+#define PLAY_H
+
+#include "foo.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void hello_cxx (void);
+void hello_objc (void);
+void hello_objcxx (void);
+
+#ifdef __OBJC__
+@interface Hello_ObjC
+{ }
++ (void)display;
+@end
+#endif /* __OBJC__ */
+
+#ifdef __cplusplus
+}
+
+class Hello_CXX
+{
+ public:
+ Hello_CXX() { }
+ virtual ~Hello_CXX () { }
+ void hello_cxx ();
+};
+
+#ifdef __OBJC__
+@interface Hello_ObjCXX
+{ }
++ (void)display;
+@end
+
+class Hello_OBJCXX
+{
+ public:
+ Hello_OBJCXX () { }
+ virtual ~Hello_OBJCXX () { }
+ void hello_objcxx();
+};
+#endif /* __OBJC__ */
+
+#endif /* __cplusplus */
+
+#endif /* PLAY_H */
+END
+
+cat > play.c << 'END'
+#include "play.h"
+int main (void)
+{
+ printf ("[Hello C,");
+ world_c ();
+ hello_cxx ();
+ hello_objc ();
+ hello_objcxx ();
+ return 0;
+}
+END
+
+cat > playxx.cxx << 'END'
+#include "play.h"
+
+void hello_cxx(void)
+{
+ Hello_CXX *hello = new Hello_CXX;
+ hello->hello_cxx();
+}
+
+void Hello_CXX::hello_cxx()
+{
+ std::cout << "[Hello C++,";
+ World_CXX *world = new World_CXX;
+ world->world_cxx();
+}
+END
+
+cat > playo.m << 'END'
+#import "play.h"
+
+void hello_objc (void)
+{
+ [Hello_ObjC display];
+}
+
+@implementation Hello_ObjC
++ (void)display
+{
+ printf ("[Hello ObjC,");
+ [World_ObjC display];
+}
+@end
+END
+
+cat > playoxx.mm << 'END'
+#import "play.h"
+
+// Calling: C -> C++ -> ObjC
+
+void hello_objcxx (void)
+{
+ Hello_OBJCXX *hello = new Hello_OBJCXX;
+ hello->hello_objcxx ();
+}
+
+void Hello_OBJCXX::hello_objcxx ()
+{
+ [Hello_ObjCXX display];
+}
+
+@implementation Hello_ObjCXX
++ (void)display
+{
+ std::cout << "[Hello ObjC++,";
+ [World_ObjCXX display];
+}
+@end
+END
+
+## Library Sources.
+
+cat > foo.h << 'END'
+#ifndef FOO_H
+#define FOO_H
+
+#ifdef __cplusplus
+#include <iostream>
+extern "C" {
+#else
+#include <stdio.h>
+#endif
+
+void world_c (void);
+
+#ifdef __OBJC__
+@interface World_ObjC
+{ }
++ (void)display;
+@end
+#endif /* __OBJC__ */
+
+#ifdef __cplusplus
+}
+
+class World_CXX
+{
+ public:
+ World_CXX() { }
+ virtual ~World_CXX () { }
+ void world_cxx ();
+};
+
+#ifdef __OBJC__
+class World_OBJCXX
+{
+ public:
+ World_OBJCXX () { }
+ virtual ~World_OBJCXX () { }
+ void world_objcxx ();
+};
+
+@interface World_ObjCXX
+{ }
++ (void)display;
+@end
+#endif /* __OBJC__ */
+
+#endif /* __cplusplus */
+
+#endif /* FOO_H */
+END
+
+cat > foo.c << 'END'
+#include "foo.h"
+
+void world_c (void)
+{
+ printf (" world C]\n");
+}
+END
+
+cat > fooxx.cxx << 'END'
+#include "foo.h"
+
+void World_CXX::world_cxx ()
+{
+ std::cout << " world C++]" << "\n";
+}
+END
+
+cat > fooo.m << 'END'
+#import "foo.h"
+
+@implementation World_ObjC
++ (void)display
+{
+ printf (" world ObjC]\n");
+}
+@end
+END
+
+cat > foooxx.mm << 'END'
+#import "foo.h"
+
+// Calling: ObjC -> C++
+
+@implementation World_ObjCXX
++ (void)display
+{
+ World_OBJCXX *world = new World_OBJCXX;
+ world->world_objcxx ();
+}
+@end
+
+void World_OBJCXX::world_objcxx ()
+{
+ std::cout << " world ObjC++]" << "\n";
+}
+END
+
+## Configure and build.
+
+./configure
+$MAKE
+
+if ! cross_compiling; then
+ unindent > exp << 'END'
+ [Hello C, world C]
+ [Hello C++, world C++]
+ [Hello ObjC, world ObjC]
+ [Hello ObjC++, world ObjC++]
+END
+ ./play > got || { cat got; exit 1; }
+ cat exp
+ cat got
+ diff exp got
+fi
+
+$MAKE distcheck
+
+:
diff --git a/t/objc-minidemo.sh b/t/objc-minidemo.sh
new file mode 100644
index 000000000..5dfa7fdf6
--- /dev/null
+++ b/t/objc-minidemo.sh
@@ -0,0 +1,76 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Dummy demo package using Objective C and doing distcheck.
+# See also sister test 'objcxx-minidemo.sh'.
+
+required=native
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_OBJC
+AC_CONFIG_HEADERS([config.h])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AM_DEFAULT_SOURCE_EXT = .m
+bin_PROGRAMS = ok
+noinst_PROGRAMS = ko
+TESTS = $(bin_PROGRAMS) $(XFAIL_TESTS)
+XFAIL_TESTS = $(noinst_PROGRAMS)
+END
+
+cat > ok.m << 'END'
+/* The use of #import makes this valid Object C but invalid C. */
+#import <stdio.h>
+#import <config.h>
+int main (void)
+{
+ printf ("Success (%s)\n", PACKAGE_STRING);
+ return 0;
+}
+END
+
+cat > ko.m << 'END'
+/* The use of #import makes this valid Object C but invalid C. */
+#import <stdio.h>
+int main (void)
+{
+ printf("Failure\n");
+ return 1;
+}
+END
+
+if $ACLOCAL; then
+ : We have a modern enough autoconf, go ahead.
+elif test $? -eq 63; then
+ skip_ "Object C++ support requires Autoconf 2.65 or later"
+else
+ exit 1 # Some other aclocal failure.
+fi
+
+$ACLOCAL
+$AUTOCONF
+$AUTOHEADER
+$AUTOMAKE --add-missing
+
+./configure
+$MAKE
+$MAKE check
+$MAKE distcheck
+
+:
diff --git a/t/objcxx-basic.sh b/t/objcxx-basic.sh
new file mode 100644
index 000000000..b4a0944d9
--- /dev/null
+++ b/t/objcxx-basic.sh
@@ -0,0 +1,40 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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.
+
+# Basic tests on the Objective C++ support that don't actually
+# require an Objective-C++ compiler.
+# See also sister test 'objc-basic.sh'.
+
+. test-init.sh
+
+cat > Makefile.am <<'END'
+bin_PROGRAMS = hello
+hello_SOURCES = hello.mm
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+grep "'OBJCXX'.* undefined" stderr
+grep "add .*'AC_PROG_OBJCXX'" stderr
+
+rm -rf autom4te*.cache
+
+cat >> configure.ac <<'END'
+AC_PROG_OBJCXX
+END
+
+$ACLOCAL
+$AUTOMAKE
+$EGREP '^\.SUFFIXES:.* \.mm( |$)' Makefile.in
+
+:
diff --git a/t/objcxx-deps.sh b/t/objcxx-deps.sh
new file mode 100644
index 000000000..f7e2dbf8e
--- /dev/null
+++ b/t/objcxx-deps.sh
@@ -0,0 +1,72 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Automatic dependency tracking for Objective C++.
+# See also sister test 'objc-deps.sh'.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_OBJCXX
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo
+foo_SOURCES = bar.mm baz.h++ baz2.hh
+END
+
+cat > baz.h++ << 'END'
+#include <iostream>
+#include "baz2.hh"
+END
+
+cat > baz2.hh << 'END'
+#define MSG "Hello, World"
+END
+
+cat > bar.mm << 'END'
+/* The use of #import makes this valid Object C++ but invalid C++. */
+#import "baz.h++"
+int main (void)
+{
+ std::cout << MSG << "\n";
+ return 0;
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+./configure --enable-dependency-tracking
+$MAKE
+cross_compiling || (./foo | $FGREP 'Hello, World') || exit 1
+
+$sleep
+: > old
+echo '#define MSG "Howdy, Earth"' > baz2.hh
+$MAKE
+if test -f foo; then
+ is_newest foo old
+else
+ is_newest foo.exe old
+fi
+cross_compiling || (./foo | $FGREP 'Howdy, Earth') || exit 1
+
+$MAKE distcheck
+
+:
diff --git a/t/objcxx-flags.sh b/t/objcxx-flags.sh
new file mode 100644
index 000000000..928bc56b7
--- /dev/null
+++ b/t/objcxx-flags.sh
@@ -0,0 +1,63 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test Objective C++ compilation flags.
+# See also sister test 'objc-flags.sh'.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_OBJCXX
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AM_DEFAULT_SOURCE_EXT = .mm
+bin_PROGRAMS = foo2 foo4
+AM_OBJCXXFLAGS = -DVALUE=2 -DERROR=1
+foo4_OBJCXXFLAGS = -DVALUE=4 -DERROR=1
+END
+
+for i in 2 4; do
+ unindent > foo$i.mm << END
+ /* Let's make this file valid Objective C but invalid C. */
+ #import <stdlib.h>
+ @interface Who_Cares { } @end
+ #ifdef ERROR
+ # error "macro ERROR is defined for foo.mm"
+ #else
+ # if VALUE == $i
+ int main (void) { exit (0); }
+ # else
+ # error "VALUE is != $i in foo.mm"
+ # endif
+ #endif
+END
+done
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+$FGREP OBJCXXFLAGS Makefile.in # For debugging.
+grep '\$(OBJCXXFLAGS).*\$(AM_OBJCXXFLAGS)' Makefile.in && exit 1
+grep '\$(OBJCXXFLAGS).*\$(foo.*_OBJCXXFLAGS)' Makefile.in && exit 1
+grep '\$(foo.*_OBJCXXFLAGS).*\$(AM_OBJCXXFLAGS)' Makefile.in && exit 1
+
+./configure OBJCXXFLAGS=-UERROR
+$MAKE
+
+:
diff --git a/t/objcxx-minidemo.sh b/t/objcxx-minidemo.sh
new file mode 100644
index 000000000..e8a0e4d71
--- /dev/null
+++ b/t/objcxx-minidemo.sh
@@ -0,0 +1,68 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Dummy demo package using Objective C++ and doing distcheck.
+# See also sister test 'objc-minidemo.sh'.
+
+required=native
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_OBJCXX
+AC_CONFIG_HEADERS([config.h])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AM_DEFAULT_SOURCE_EXT = .mm
+bin_PROGRAMS = ok
+noinst_PROGRAMS = ko
+TESTS = $(bin_PROGRAMS) $(XFAIL_TESTS)
+XFAIL_TESTS = $(noinst_PROGRAMS)
+END
+
+cat > ok.mm << 'END'
+/* The use of #import makes this valid Object C++ but invalid C++. */
+#import <iostream>
+#import <config.h>
+int main (void)
+{
+ std::cout << "Success (" << PACKAGE_STRING << ")\n";
+ return 0;
+}
+END
+
+cat > ko.mm << 'END'
+/* The use of #import makes this valid Object C++ but invalid C++. */
+#import <cstdio>
+int main (void)
+{
+ printf("Failure\n");
+ return 1;
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOHEADER
+$AUTOMAKE --add-missing
+
+./configure
+$MAKE
+$MAKE check
+$MAKE distcheck
+
+:
diff --git a/t/objext-pr10128.sh b/t/objext-pr10128.sh
new file mode 100644
index 000000000..ea738ecc8
--- /dev/null
+++ b/t/objext-pr10128.sh
@@ -0,0 +1,58 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for automake bug#10128: $(OBJEXT) redefinition causes
+# $(foo_OBJECTS) to be defined as empty.
+
+. test-init.sh
+
+echo AC_OUTPUT >> configure.ac
+
+cat > Makefile.am <<'END'
+LINK = echo >$@ Linked $@ from
+OBJEXT = fasl
+EXEEXT =
+
+noinst_PROGRAMS = foo zardoz
+foo_SOURCES = foo.lisp
+zardoz_SOURCES = mu1.lisp mu2.lisp
+
+## Un-commenting this is enough to make the test pass. Weird!
+##.lisp.o:
+
+.lisp.fasl:
+ touch $@
+
+.PHONY: test
+test:
+ is $(foo_OBJECTS) == foo.fasl
+ is $(zardoz_OBJECTS) == mu1.fasl mu2.fasl
+END
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+./configure
+$MAKE test
+touch foo.lisp mu1.lisp mu2.lisp
+$MAKE all
+cat foo
+cat zardoz
+test "$(cat foo)" = "Linked foo from foo.fasl"
+test "$(cat zardoz)" = "Linked zardoz from mu1.fasl mu2.fasl"
+
+:
diff --git a/t/oldvars.sh b/t/oldvars.sh
new file mode 100644
index 000000000..6a1ec9f06
--- /dev/null
+++ b/t/oldvars.sh
@@ -0,0 +1,37 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Use of these variables is deprecated:
+# LISP, HEADERS, DATA, SCRIPTS, LTLIBRARIES, LIBRARIES, PROGRAMS, MANS.
+
+. test-init.sh
+
+cat >Makefile.am <<\EOF
+DATA =
+HEADERS =
+LIBRARIES =
+LISP =
+LTLIBRARIES =
+MANS =
+PROGRAMS =
+SCRIPTS =
+EOF
+
+$ACLOCAL
+AUTOMAKE_fails
+test $(grep -c anachronism stderr) -eq 8
+
+:
diff --git a/t/order.sh b/t/order.sh
new file mode 100644
index 000000000..67a5d87b4
--- /dev/null
+++ b/t/order.sh
@@ -0,0 +1,32 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure AC_DEFUN is handled correctly. This test isn't named very
+# well. Report from Jim Meyering.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+jm_TEST
+FOO
+END
+
+cat > acinclude.m4 << 'END'
+AC_DEFUN([jm_TEST])
+AC_DEFUN([FOO], [AC_REQUIRE([jm_TEST])])
+END
+
+$ACLOCAL
diff --git a/t/output-order.sh b/t/output-order.sh
new file mode 100644
index 000000000..457d33d5e
--- /dev/null
+++ b/t/output-order.sh
@@ -0,0 +1,53 @@
+#! /bin/sh
+# Copyright (C) 2008-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test that 'automake -a' output order is stable.
+# From report by Bruno Haible.
+
+. test-init.sh
+
+cat >>configure.ac <<'END'
+AC_OUTPUT
+END
+
+: >Makefile.am
+: >AUTHORS
+: >ChangeLog
+: >NEWS
+: >README
+
+cat >.autom4te.cfg <<'END'
+begin-language: "Autoconf"
+args: --no-cache
+end-language: "Autoconf"
+begin-language: "Autoconf-without-aclocal-m4"
+args: --no-cache
+end-language: "Autoconf-without-aclocal-m4"
+END
+
+$ACLOCAL
+$AUTOCONF
+rm -f missing install-sh
+$AUTOMAKE --add-missing --copy 2>stderr || { cat stderr >&2; exit 1; }
+cat stderr >&2
+
+for i in 1 2 3 4 5 6; do
+ rm -f missing install-sh INSTALL COPYING
+ # The grep prevents a Heisenbug with the HP-UX shell and VERBOSE=yes.
+ $AUTOMAKE --add-missing --copy 2>&1 >/dev/null |
+ grep -v /dev/null |
+ diff - stderr
+done
diff --git a/t/output.sh b/t/output.sh
new file mode 100644
index 000000000..f0474be1b
--- /dev/null
+++ b/t/output.sh
@@ -0,0 +1,35 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure files listed in AC_OUTPUT are found.
+
+. test-init.sh
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE
+AC_OUTPUT([Makefile frob/zardoz])
+END
+
+: > Makefile.am
+
+mkdir frob
+: > frob/zardoz.in
+
+$ACLOCAL
+$AUTOMAKE
+
+:
diff --git a/t/output10.sh b/t/output10.sh
new file mode 100644
index 000000000..8957104c1
--- /dev/null
+++ b/t/output10.sh
@@ -0,0 +1,61 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure an AC_CONFIG_FILES can have an AC_CONFIG_FILES output as input.
+# This is comparable to 'output9.sh', but testing Makefile rules.
+# PR/411
+
+. test-init.sh
+
+cat >> configure.ac << END
+AC_SUBST([FOO], [top])
+AC_SUBST([BAR], [bot])
+AC_CONFIG_FILES([a/top])
+AC_CONFIG_FILES([a/bot])
+AC_CONFIG_FILES([b/Makefile:a/top:b/Makefile.in:a/bot])
+AC_OUTPUT
+END
+
+mkdir a
+mkdir b
+
+cat >Makefile.am <<\EOF
+SUBDIRS = b
+dist-hook:
+ test ! -f $(distdir)/a/top
+ test ! -f $(distdir)/a/bot
+EOF
+
+cat >b/Makefile.am <<\EOF
+output:
+ echo $(TOP)$(BOT) > ok
+EOF
+
+echo TOP=@FOO@ >a/top.in
+echo BOT=@BAR@ >a/bot.in
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+mkdir build
+cd build
+../configure
+cd b
+$MAKE output
+grep topbot ok
+cd ..
+$MAKE distcheck
diff --git a/t/output11.sh b/t/output11.sh
new file mode 100644
index 000000000..f91ec810b
--- /dev/null
+++ b/t/output11.sh
@@ -0,0 +1,63 @@
+#! /bin/sh
+# Copyright (C) 2005-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure an AC_CONFIG_FILES ignore filenames with shell variables.
+
+. test-init.sh
+
+cat >> configure.ac << \END
+AC_SUBST([FOO], [foo])
+file1=this.in
+echo @FOO@ >$file1
+file2=that
+file3=mumble
+file4=foo
+AC_CONFIG_FILES([this:$file1],, [file1=$file1])
+AC_CONFIG_FILES([sub/this:$file1])
+AC_CONFIG_FILES([${file2}:this],, [file2=$file2])
+AC_CONFIG_FILES([$file3],, [file3=$file3])
+AC_CONFIG_FILES([$file4:foo.in],, [file4=$file4])
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+END
+
+mkdir sub
+
+cat >Makefile.am <<\EOF
+SUBDIRS = sub
+EXTRA_DIST = mumble.in
+DISTCLEANFILES = this.in that mumble foo
+dist-hook:
+ test -f $(distdir)/foo.in
+ test ! -f $(distdir)/this
+EOF
+
+echo @FOO@ >mumble.in
+echo @FOO@ >foo.in
+: >sub/Makefile.am
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+$FGREP ' $file' Makefile.in sub/Makefile.in && exit 1
+
+./configure
+$MAKE distcheck
+cd sub
+rm -f this
+$MAKE this
+grep foo this
diff --git a/t/output12.sh b/t/output12.sh
new file mode 100644
index 000000000..27a30b1bc
--- /dev/null
+++ b/t/output12.sh
@@ -0,0 +1,60 @@
+#! /bin/sh
+# Copyright (C) 2005-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure an AC_CONFIG_FILES process filenames with AC_SUBST variables.
+
+. test-init.sh
+
+cat >> configure.ac << \END
+AC_SUBST([FOO], [foo])
+AC_SUBST([file1], [this.in])
+echo @FOO@ >$file1
+AC_SUBST([file2], [that])
+AC_SUBST([file3], [mumble])
+AC_SUBST([file4], [foo])
+AC_CONFIG_FILES([this:$file1],, [file1=$file1])
+AC_CONFIG_FILES([sub/this:$file1])
+AC_CONFIG_FILES([${file2}:this],, [file2=$file2])
+AC_CONFIG_FILES([${file3}],, [file3=$file3])
+AC_CONFIG_FILES([${file4}:foo.in],, [file4=$file4])
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+END
+
+mkdir sub
+
+cat >Makefile.am <<\EOF
+SUBDIRS = sub
+DISTCLEANFILES = $(file1)
+dist-hook:
+ test -f $(distdir)/foo.in
+ test ! -f $(distdir)/this
+EOF
+
+echo @FOO@ >mumble.in
+echo @FOO@ >foo.in
+: >sub/Makefile.am
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+$MAKE distcheck
+cd sub
+rm -f this
+$MAKE this
+grep foo this
diff --git a/t/output13.sh b/t/output13.sh
new file mode 100644
index 000000000..05a0013cb
--- /dev/null
+++ b/t/output13.sh
@@ -0,0 +1,50 @@
+#! /bin/sh
+# Copyright (C) 2007-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure an AC_CONFIG_FILES, AC_CONFIG_LINKS, and AC_CONFIG_COMMANDS
+# are not prerequisites of 'all'.
+
+. test-init.sh
+
+cat >> configure.ac << \END
+AC_SUBST([FOO], [foo])
+if $create; then
+ AC_CONFIG_FILES([file])
+ AC_CONFIG_LINKS([link:input])
+ AC_CONFIG_COMMANDS([stamp], [echo stamp > stamp])
+fi
+AC_OUTPUT
+END
+
+: >Makefile.am
+
+echo link > input
+echo @FOO@ >file.in
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure create=false
+$MAKE
+test ! -e file
+test ! -e link
+test ! -e stamp
+
+./configure create=:
+test -f file
+test -f link
+test -f stamp
diff --git a/t/output2.sh b/t/output2.sh
new file mode 100644
index 000000000..32264ef64
--- /dev/null
+++ b/t/output2.sh
@@ -0,0 +1,38 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Another AC_OUTPUT test. From report by Ulrich Drepper.
+
+. test-init.sh
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE
+AC_OUTPUT([Makefile intl/intlh.inst po/Makefile.in misc/gettextize])
+END
+
+: > Makefile.am
+
+mkdir intl po misc
+: > intl/intlh.inst.in
+: > po/Makefile.in.am
+: > misc/gettextize.in
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '^gettextize' Makefile.in && exit 1
+exit 0
diff --git a/t/output3.sh b/t/output3.sh
new file mode 100644
index 000000000..7870eb390
--- /dev/null
+++ b/t/output3.sh
@@ -0,0 +1,38 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Yet another AC_OUTPUT test.
+
+. test-init.sh
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE
+AC_OUTPUT([Makefile
+tests/Makefile tests/defs],
+[blah])
+END
+
+: > Makefile.am
+
+mkdir tests
+: > tests/Makefile.am
+: > tests/defs.in
+
+$ACLOCAL
+$AUTOMAKE
+
+:
diff --git a/t/output4.sh b/t/output4.sh
new file mode 100644
index 000000000..cc2ba319d
--- /dev/null
+++ b/t/output4.sh
@@ -0,0 +1,35 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# It's hard to believe there are so many AC_OUTPUT-related bugs.
+
+. test-init.sh
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE
+AC_OUTPUT([tests/Makefile tests/defs])
+END
+
+mkdir tests
+: > tests/defs.in
+: > tests/Makefile.am
+
+$ACLOCAL
+$AUTOMAKE
+
+grep tests/defs.in tests/Makefile.in && exit 1
+exit 0
diff --git a/t/output5.sh b/t/output5.sh
new file mode 100644
index 000000000..dd9466f63
--- /dev/null
+++ b/t/output5.sh
@@ -0,0 +1,31 @@
+#! /bin/sh
+# Copyright (C) 1997-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure Automake complains when there is no Makefile specified.
+
+. test-init.sh
+
+cat > configure.ac << 'END'
+AC_INIT([foo], [bar], [baz])
+AM_INIT_AUTOMAKE
+AC_OUTPUT
+END
+
+: > Makefile.am
+
+$ACLOCAL
+AUTOMAKE_fails
+grep 'AC_CONFIG_FILES(.Makefile.)' stderr
diff --git a/t/output6.sh b/t/output6.sh
new file mode 100644
index 000000000..fad71536e
--- /dev/null
+++ b/t/output6.sh
@@ -0,0 +1,72 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check for support for colon-separated input files in AC_CONFIG_FILES.
+
+. test-init.sh
+
+cat > configure.ac << END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([foo:a.in:b.in:c.in:d.in])
+AC_OUTPUT
+END
+
+cat >a.in <<'EOF'
+a = A
+b = A
+c = A
+d = A
+EOF
+
+cat >b.in <<'EOF'
+b = B
+c = B
+d = B
+EOF
+
+cat >c.am <<'EOF'
+c = C
+d = C
+
+.PHONY: test1 test2
+test1:
+ test $(a)$(b)$(c)$(d) = ABCD
+test2:
+ test $(a)$(b)$(c)$(d) = GFCD
+EOF
+
+echo 'd = D' > d.in
+
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+$MAKE -f foo test1
+
+$sleep
+cat >b.in <<'EOF'
+a = G
+b = F
+c = F
+d = F
+EOF
+
+using_gmake || $MAKE -f foo
+$MAKE -f foo test2
+
+:
diff --git a/t/output7.sh b/t/output7.sh
new file mode 100644
index 000000000..9fb255e80
--- /dev/null
+++ b/t/output7.sh
@@ -0,0 +1,71 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check for support for colon separated input files in AC_CONFIG_FILES,
+# with sources in sub directories.
+
+. test-init.sh
+
+cat > configure.ac << END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([
+ Makefile:mk/toplevel.in
+ sub/Makefile:mk/sub.in
+ mk/Makefile
+])
+AC_OUTPUT
+END
+
+mkdir mk sub
+cat >mk/Makefile.am <<'EOF'
+all-local:
+ @echo in--mk
+EOF
+
+cat >mk/sub.am <<'EOF'
+EXTRA_DIST = foo
+all-local:
+ @echo in--sub
+EOF
+
+cat >mk/toplevel.am <<'EOF'
+all-local:
+ @echo at--toplevel
+SUBDIRS = mk sub
+EOF
+
+# We have to distribute something in foo, because some versions
+# of tar do not archive empty directories when passed the 'o'
+# flags. (This was fixed in GNU tar 1.12, but older
+# versions are still used: NetBSD 1.6.1 ships with tar 1.11.2).
+#
+# If sub/ is missing from the archive, config.status will fail
+# to compute $ac_abs_srcdir during a VPATH build: config.status
+# is able to create sub/ in the build tree, but it assumes the
+# directory already exists in the source tree.
+echo bar > sub/foo
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+run_make -O
+grep in--mk stdout
+grep in--sub stdout
+grep at--toplevel stdout
+
+$MAKE distcheck
diff --git a/t/output8.sh b/t/output8.sh
new file mode 100644
index 000000000..f8c9b4f9a
--- /dev/null
+++ b/t/output8.sh
@@ -0,0 +1,54 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check AC_CONFIG_FILES support for files starting with '../'.
+# Report from Bruno Haible.
+
+. test-init.sh
+
+mkdir testdir
+cd testdir
+
+mv ../configure.ac .
+cat >> configure.ac << END
+AC_CONFIG_FILES([a/foo.sh:../testdir/a/foo.sh.in])
+AC_CONFIG_FILES([a/Makefile])
+AC_OUTPUT
+END
+
+mkdir a
+
+echo SUBDIRS = a >Makefile.am
+: >a/Makefile.am
+
+echo foo >a/foo.sh.in
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+./configure
+$MAKE
+test "$(cat a/foo.sh)" = foo
+
+$sleep
+echo 'bar' >a/foo.sh.in
+
+cd a
+$MAKE foo.sh
+test "$(cat foo.sh)" = bar
+
+:
diff --git a/t/output9.sh b/t/output9.sh
new file mode 100644
index 000000000..b0645f325
--- /dev/null
+++ b/t/output9.sh
@@ -0,0 +1,52 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure an AC_CONFIG_FILES can have an AC_CONFIG_FILES output as input.
+
+. test-init.sh
+
+cat >> configure.ac << END
+AC_CONFIG_FILES([a/mid.in:a/input.in.in])
+AC_CONFIG_FILES([b/out:a/mid.in])
+AC_CONFIG_FILES([a/Makefile b/Makefile])
+AC_OUTPUT
+END
+
+mkdir a
+mkdir b
+
+
+cat >Makefile.am <<\EOF
+SUBDIRS = a b
+dist-hook:
+ test -f $(distdir)/a/input.in.in
+ test ! -f $(distdir)/a/mid.in
+ if test ! -f check; then :; else : > ok; fi
+EOF
+
+: >a/Makefile.am
+: >b/Makefile.am
+
+echo foo >a/input.in.in
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+./configure
+: > check
+$MAKE distcheck
+test -f ok
diff --git a/t/override-conditional-1.sh b/t/override-conditional-1.sh
new file mode 100644
index 000000000..54ed455ee
--- /dev/null
+++ b/t/override-conditional-1.sh
@@ -0,0 +1,53 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for conditionally-defined overrides.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_CONDITIONAL([COND], [test x"$cond" = x"yes"])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+foobar:
+ : > $@
+if COND
+ps: foobar
+ :
+endif
+END
+
+$ACLOCAL
+$AUTOMAKE -Wno-override
+
+# "ps:" should be output in two conditions
+test $(grep -c '[^-]ps:' Makefile.in) -eq 2
+grep '@COND_TRUE@ps: *foobar' Makefile.in
+grep '@COND_FALSE@ps: *ps-am' Makefile.in
+
+$AUTOCONF
+
+./configure cond=no
+$MAKE ps
+test ! -e foobar
+
+./configure cond=yes
+$MAKE ps
+test -f foobar
+
+:
diff --git a/t/override-conditional-2.sh b/t/override-conditional-2.sh
new file mode 100644
index 000000000..acf0e19d4
--- /dev/null
+++ b/t/override-conditional-2.sh
@@ -0,0 +1,39 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test that conditional overrides are diagnosed.
+# This test is still xfailing; see the FIXME in Automake::Rule::define.
+# Once that is fixed, the test should succeed.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_CONDITIONAL([COND], [:])
+END
+
+cat > Makefile.am << 'END'
+if COND
+all:
+ :
+endif
+END
+
+$ACLOCAL
+
+AUTOMAKE_fails
+grep ':.*overrides.*all' stderr
+
+:
diff --git a/t/override-conditional-pr13940.sh b/t/override-conditional-pr13940.sh
new file mode 100644
index 000000000..8c860a9f1
--- /dev/null
+++ b/t/override-conditional-pr13940.sh
@@ -0,0 +1,44 @@
+#! /bin/sh
+# Copyright (C) 2013-2017 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 <https://www.gnu.org/licenses/>.
+
+# Expose automake bug#1394: automake erroneously think that a .PHONY
+# target's rule is overridden only because we declare dependencies
+# to such targets twice: one in an Automake conditional, and once
+# unconditionally.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_CONDITIONAL([FOO], [true])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+# The conditional here is important: Automake only appears to warn
+# when one of the all-local rules is inside a conditional and the
+# other is not.
+if FOO
+all-local: bar
+bar: ; @echo bar
+endif
+all-local: baz
+baz: ; @echo baz
+END
+
+$ACLOCAL
+$AUTOMAKE -a
+
+:
diff --git a/t/override-html.sh b/t/override-html.sh
new file mode 100644
index 000000000..aed07c57f
--- /dev/null
+++ b/t/override-html.sh
@@ -0,0 +1,33 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test that overriding 'html' target causes only one "html:" rule to
+# be output.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+html:
+ :
+END
+
+$ACLOCAL
+$AUTOMAKE -Wno-override
+
+# Overriding 'html' should cause only one "html:" rule to be output.
+test $(grep -c '^html:' Makefile.in) -eq 1
+
+:
diff --git a/t/override-suggest-local.sh b/t/override-suggest-local.sh
new file mode 100644
index 000000000..32d73a45b
--- /dev/null
+++ b/t/override-suggest-local.sh
@@ -0,0 +1,44 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure automake -Woverride suggests using TARGET-local instead
+# of TARGET when possible.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+install:
+ :
+installcheck:
+ :
+html:
+ :
+clean-am:
+ :
+END
+
+$ACLOCAL
+$AUTOMAKE -Wno-override
+AUTOMAKE_fails
+# There is no such thing as 'install-local'.
+grep ':.*install-local' stderr && exit 1
+grep ':.*installcheck-local' stderr
+grep ':.*html-local' stderr
+# Make sure overriding *-am targets suggest using *-local, not *-am.
+grep ':.*clean-am-local' stderr && exit 1
+grep ':.*clean-local' stderr
+
+:
diff --git a/t/parallel-am.sh b/t/parallel-am.sh
new file mode 100644
index 000000000..6e1371c38
--- /dev/null
+++ b/t/parallel-am.sh
@@ -0,0 +1,103 @@
+#! /bin/sh
+# Copyright (C) 2008-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test parallel automake execution.
+
+# There are several hypotheses to be tested: Independently of the number
+# of threads used by automake,
+# 0) the generated Makefile.in files must be identical without --add-missing,
+# 1) the Makefile.in that distributes auxiliary files must be generated
+# after all other ones, so all installed aux files are caught,
+# 2) normal automake output should have identical content and be ordered
+# in the same way, when --add-missing is not passed, or when
+# --add-missing is passed but there are no concurrent file requirements
+# (i.e., two Makefile.am files call for the same needed aux file)
+# 3) normal automake output should be identical and ordered in the same way
+# with --add-missing, even with concurrent file requirements, and the
+# installation of aux files should be race-free,
+# 4) warning and normal error output should be identical, in that duplicate
+# warnings should be omitted in the same way as without threads,
+# 5) fatal error and debug messages could be identical. This is not
+# intended, though.
+#
+# This test checks (0), (1), and (2). See sister tests for further coverage.
+
+required=perl-threads
+. test-init.sh
+
+cat > configure.ac << 'END'
+AC_INIT([parallel-am], [1.0])
+AC_CONFIG_AUX_DIR([build-aux])
+AM_INIT_AUTOMAKE
+AC_PROG_CC
+AM_PATH_LISPDIR
+AM_PATH_PYTHON
+AC_CONFIG_FILES([Makefile])
+END
+
+cat > Makefile.am << 'END'
+SUBDIRS =
+END
+
+list='1 2 3 4 5 6 7 8 9'
+for i in $list; do
+ echo "AC_CONFIG_FILES([sub$i/Makefile])" >> configure.ac
+ echo "SUBDIRS += sub$i" >> Makefile.am
+ mkdir sub$i
+ echo > sub$i/Makefile.am
+done
+# Use an include chain to cause a nontrivial location object to be
+# serialized through a thread queue.
+echo 'include foo.am' >> sub7/Makefile.am
+echo 'include bar.am' > sub7/foo.am
+echo 'python_PYTHON = foo.py' > sub7/bar.am
+echo 'lisp_LISP = foo.el' >> sub8/Makefile.am
+echo 'bin_PROGRAMS = p' >> sub9/Makefile.am
+
+rm -f install-sh missing depcomp
+mkdir build-aux
+
+$ACLOCAL
+
+# This test may have to be run several times in order to expose the
+# race that, when the last Makefile.in (the toplevel one) is created
+# before the other ones have finished, not all auxiliary files may
+# be installed yet, thus some may not be distributed.
+#
+# Further, automake output should be stable.
+
+# Generate expected output using the non-threaded code.
+unset AUTOMAKE_JOBS
+AUTOMAKE_run --add-missing
+mv stderr expected
+Makefile_ins=$(find . -name Makefile.in)
+for file in $Makefile_ins; do
+ mv $file $file.exp
+done
+
+AUTOMAKE_JOBS=5
+export AUTOMAKE_JOBS
+
+for run in 1 2 3 4 5 6 7; do
+ rm -f build-aux/* sub*/Makefile.in
+ AUTOMAKE_run --add-missing
+ diff stderr expected
+ for file in $Makefile_ins; do
+ diff $file $file.exp
+ done
+done
+
+:
diff --git a/t/parallel-am2.sh b/t/parallel-am2.sh
new file mode 100644
index 000000000..c85bbeef7
--- /dev/null
+++ b/t/parallel-am2.sh
@@ -0,0 +1,77 @@
+#! /bin/sh
+# Copyright (C) 2008-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test parallel automake execution.
+
+# This tests:
+# 4) warning and normal error output should be identical, in that duplicate
+# warnings should be omitted in the same way as without threads.
+
+required=perl-threads
+. test-init.sh
+
+mkdir sub
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = subdir-objects
+bin_PROGRAMS = main
+main_SOURCES = sub/main.c
+SUBDIRS =
+END
+
+list='1 2 3'
+for i in $list; do
+ echo "AC_CONFIG_FILES([sub$i/Makefile])" >> configure.ac
+ echo "SUBDIRS += sub$i" >> Makefile.am
+ mkdir sub$i sub$i/sub
+ unindent > sub$i/Makefile.am << END
+ AUTOMAKE_OPTIONS = subdir-objects
+ bin_PROGRAMS = sub$i
+ sub${i}_SOURCES = sub/main$i.c
+END
+done
+
+mkdir build-aux
+
+$ACLOCAL
+
+# Independently of the number of worker threads, automake output
+# should be
+# - stable (multiple runs should produce the same output),
+# - properly uniquified,
+# - complete (output from worker threads should not be lost).
+#
+# The parts output by --add-missing are unstable not only wrt. order
+# but also wrt. content: any of the Makefile.am files may cause the
+# depcomp script to be installed (or several of them).
+# Thus we install the auxiliary files in a prior step.
+
+# Generate expected output using non-threaded code.
+unset AUTOMAKE_JOBS
+rm -f install-sh missing depcomp
+AUTOMAKE_fails --add-missing
+mv stderr expected
+
+AUTOMAKE_JOBS=5
+export AUTOMAKE_JOBS
+
+for i in 1 2 3 4 5 6 7 8; do
+ rm -f install-sh missing depcomp
+ AUTOMAKE_fails --add-missing
+ diff expected stderr
+done
+
+:
diff --git a/t/parallel-am3.sh b/t/parallel-am3.sh
new file mode 100644
index 000000000..9d5ea02ba
--- /dev/null
+++ b/t/parallel-am3.sh
@@ -0,0 +1,74 @@
+#! /bin/sh
+# Copyright (C) 2008-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test parallel automake execution.
+
+# This tests:
+# 3) normal automake output should be identical and ordered in the same way
+# with --add-missing, even with concurrent file requirements, and the
+# installation of aux files should be race-free.
+
+required=perl-threads
+. test-init.sh
+
+cat > configure.ac << 'END'
+AC_INIT([parallel-am], [1.0])
+AC_CONFIG_AUX_DIR([build-aux])
+AM_INIT_AUTOMAKE
+AC_PROG_CC
+AM_PATH_LISPDIR
+AM_PATH_PYTHON
+AC_CONFIG_FILES([Makefile])
+END
+
+cat > Makefile.am << 'END'
+SUBDIRS =
+END
+
+list='1 2 3'
+for i in $list; do
+ echo "AC_CONFIG_FILES([sub$i/Makefile])" >> configure.ac
+ echo "SUBDIRS += sub$i" >> Makefile.am
+ mkdir sub$i
+ unindent > sub$i/Makefile.am <<END
+ python_PYTHON = foo$i.py
+ lisp_LISP = foo$i.el
+ bin_PROGRAMS = p$i
+END
+done
+
+rm -f install-sh missing depcomp
+mkdir build-aux
+
+$ACLOCAL
+
+# Generate expected output using the non-threaded code.
+unset AUTOMAKE_JOBS
+AUTOMAKE_run --add-missing
+mv stderr expected
+mv Makefile.in Makefile.in.exp
+
+AUTOMAKE_JOBS=3
+export AUTOMAKE_JOBS
+
+for run in 1 2 3 4 5 6 7; do
+ rm -f build-aux/* sub*/Makefile.in
+ AUTOMAKE_run --add-missing
+ diff stderr expected
+ diff Makefile.in Makefile.in.exp
+done
+
+:
diff --git a/t/parallel-tests-basics.sh b/t/parallel-tests-basics.sh
new file mode 100644
index 000000000..e1dc8cb82
--- /dev/null
+++ b/t/parallel-tests-basics.sh
@@ -0,0 +1,144 @@
+#! /bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# Basic checks on parallel-tests support:
+# - console output
+# - log files, and what goes in 'test-suite.log'
+# - make clean
+# - dependencies between tests
+# - TESTS redefinition at runtime
+# - TEST_LOGS redefinition at runtime
+# - RECHECK_LOGS redefinition at runtime
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TESTS = foo.test bar.test baz.test
+XFAIL_TESTS = bar.test
+foo.log: bar.log
+bar.log: baz.log
+END
+
+# foo.test and bar.test sleep to ensure their logs are always strictly newer
+# than the logs of their prerequisites, for HP-UX make. The quoting pleases
+# maintainer-check.
+cat > foo.test <<'END'
+#! /bin/sh
+echo "this is $0"
+sleep '1'
+exit 0
+END
+cat > bar.test <<'END'
+#! /bin/sh
+echo "this is $0"
+sleep '1'
+exit 99
+END
+cat > baz.test <<'END'
+#! /bin/sh
+echo "this is $0"
+exit 1
+END
+chmod a+x foo.test bar.test baz.test
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+run_make -O -e FAIL check
+count_test_results total=3 pass=1 fail=1 skip=0 xfail=0 xpass=0 error=1
+test -f test-suite.log
+cat test-suite.log
+test $(grep -c '^FAIL:' test-suite.log) -eq 1
+test $(grep -c '^ERROR:' test-suite.log) -eq 1
+$EGREP '^(X?PASS|XFAIL|SKIP)' test-suite.log && exit 1
+test -f baz.log
+test -f bar.log
+test -f foo.log
+
+$MAKE clean
+test ! -e baz.log
+test ! -e bar.log
+test ! -e foo.log
+test ! -e test-suite.log
+
+# Check dependencies: baz.test needs to run before bar.test,
+# but foo.test is not needed.
+# Note that this usage has a problem: the summary will only
+# take bar.log into account, because the $(TEST_SUITE_LOG) rule
+# does not "see" baz.log. Hmm.
+run_make -O -e FAIL TESTS='bar.test' check
+grep '^FAIL: baz\.test$' stdout
+grep '^ERROR: bar\.test$' stdout
+
+test -f baz.log
+test -f bar.log
+test ! -e foo.log
+test -f test-suite.log
+
+# Upon a lazy rerun, foo.test should be run, but the others shouldn't.
+# Note that the lazy rerun still exits with a failure, due to the previous
+# test failures.
+# Note that the previous test and this one taken together expose the timing
+# issue that requires the check-TESTS rule to always remove TEST_SUITE_LOG
+# before running the tests lazily.
+run_make -O -e FAIL check RECHECK_LOGS=
+test -f foo.log
+grep '^PASS: foo\.test$' stdout
+grep bar.test stdout && exit 1
+grep baz.test stdout && exit 1
+grep '^# PASS: *1$' stdout
+grep '^# FAIL: *1$' stdout
+grep '^# ERROR: *1$' stdout
+
+# Now, explicitly retry with all test logs already updated, and ensure
+# that the summary is still displayed.
+run_make -O -e FAIL check RECHECK_LOGS=
+grep foo.test stdout && exit 1
+grep bar.test stdout && exit 1
+grep baz.test stdout && exit 1
+grep '^# PASS: *1$' stdout
+grep '^# FAIL: *1$' stdout
+grep '^# ERROR: *1$' stdout
+
+# Lazily rerunning only foo should only rerun this one test.
+run_make -O -e FAIL check RECHECK_LOGS=foo.log
+grep foo.test stdout
+grep bar.test stdout && exit 1
+grep baz.test stdout && exit 1
+grep '^# PASS: *1$' stdout
+grep '^# FAIL: *1$' stdout
+grep '^# ERROR: *1$' stdout
+
+$MAKE clean
+run_make -O -e FAIL TEST_LOGS=baz.log check
+grep foo.test stdout && exit 1
+grep bar.test stdout && exit 1
+grep baz.test stdout
+
+$MAKE clean
+run_make -O -e FAIL TESTS=baz.test check
+grep foo.test stdout && exit 1
+grep bar.test stdout && exit 1
+grep baz.test stdout
+
+:
diff --git a/t/parallel-tests-cmdline-override.sh b/t/parallel-tests-cmdline-override.sh
new file mode 100644
index 000000000..1efacbe06
--- /dev/null
+++ b/t/parallel-tests-cmdline-override.sh
@@ -0,0 +1,82 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that we can use indirections when overriding TESTS and
+# TEST_LOGS from the command line.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TEST_EXTENSIONS = .test .t
+TEST_LOG_COMPILER = cat
+T_LOG_COMPILER = cat
+TESTS = bad.test
+var1 = b.test $(var2)
+var2 = c.test
+var3 = d.d
+var4 = e
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+rm -f config.log # Do not create false positives below.
+
+cat > exp-log <<'END'
+a.log
+b.log
+c.log
+d.log
+e.log
+test-suite.log
+END
+
+cat > exp-out <<'END'
+PASS: a.t
+PASS: b.test
+PASS: c.test
+PASS: d.t
+PASS: e.test
+END
+
+do_check ()
+{
+ run_make -O -- "$@" check
+ grep '^PASS:' stdout | LC_ALL=C sort > got-out
+ cat got-out
+ ls . | grep '\.log$' | LC_ALL=C sort > got-log
+ cat got-log
+ st=0
+ diff exp-out got-out || st=1
+ diff exp-log got-log || st=1
+ return $st
+}
+
+tests='a.t $(var1) $(var3:.d=.t) $(var4:=.test)'
+test_logs='a.log $(var1:.test=.log) $(var3:.d=.log) $(var4:=.log)'
+
+touch a.t b.test c.test d.t e.test
+
+do_check TESTS="$tests"
+do_check TEST_LOGS="$test_logs"
+
+:
diff --git a/t/parallel-tests-concurrency-2.sh b/t/parallel-tests-concurrency-2.sh
new file mode 100644
index 000000000..3c61a1a7d
--- /dev/null
+++ b/t/parallel-tests-concurrency-2.sh
@@ -0,0 +1,65 @@
+#! /bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check parallel-tests features:
+# - concurrent program compilation and testing (with EXTRA_PROGRAMS)
+#
+# Actually, this test doesn't ensure that things happen concurrently.
+# It merely serves as demonstration. :-)
+
+required='cc native GNUmake'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TESTS = $(programs) $(scripts)
+EXTRA_PROGRAMS = $(programs)
+CLEANFILES = $(EXTRA_PROGRAMS)
+dist_noinst_SCRIPTS = $(scripts)
+programs =
+scripts =
+END
+
+for i in 1 2 3 4 5 6 7 8; do
+ echo "scripts += foo$i.test" >> Makefile.am
+ echo "programs += foo$i.prog" >> Makefile.am
+ unindent >foo$i.test <<'END'
+ #! /bin/sh
+ echo "this is $0"
+ exit 0
+END
+ cat >foo$i.c <<'END'
+ int main (void)
+ {
+ return 0;
+ }
+END
+ chmod a+x foo$i.test
+done
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+$MAKE -j4 check
+$MAKE distcheck
+
+:
diff --git a/t/parallel-tests-concurrency.sh b/t/parallel-tests-concurrency.sh
new file mode 100644
index 000000000..69d6198b3
--- /dev/null
+++ b/t/parallel-tests-concurrency.sh
@@ -0,0 +1,120 @@
+#! /bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check parallel-tests features:
+# - concurrent parallel execution
+
+# FIXME: we should factor out (into am-test-lib.sh?) the code to determine
+# how to run make in parallel mode ...
+
+. test-init.sh
+
+case $MAKE in
+ *\ -j*) skip_ "\$MAKE contains '-j'";;
+esac
+
+if using_gmake; then
+ j=-j
+else
+ unindent > Makefile <<END
+ all: one two
+ one:
+ $sleep && test -f two
+ two:
+ echo ok > \$@
+END
+ for j in "-j" "-j " NONE; do
+ if test x"$j" = xNONE; then
+ skip_ "can't run make in parallel mode"
+ fi
+ run_make -M -- ${j}2 all || continue
+ $EGREP -i "(warning|error):|-j[\"\'\` ]" output && continue
+ break
+ done
+ rm -f one output Makefile
+fi
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TESTS =
+END
+
+cat > x <<'END'
+#! /bin/sh
+echo "this is $0"
+# Creative quoting below to please maintainer-check.
+sleep '1'
+exit 0
+END
+chmod a+x ./x
+
+mkdir sub
+for i in 1 2 3; do
+ echo "TESTS += foo$i.test" >> Makefile.am
+ cp x foo$i.test
+ echo "TESTS += zap$i" >> Makefile.am
+ cp x zap$i
+ echo "TESTS += sub/bar$i.test" >> Makefile.am
+ cp x sub/bar$i.test
+ echo "TESTS += sub/mu$i" >> Makefile.am
+ cp x sub/mu$i
+done
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+for build in serial parallel; do
+ mkdir $build
+ cd $build
+ ../configure
+ $MAKE
+ cd ..
+done
+
+cd serial
+# Do *not* use "make -j1" here; apparently, some make implementations
+# (e.g., AIX 7.1) interpret it as a synonym of "make -j" :-(
+$MAKE check &
+cd ..
+
+cd parallel
+$sleep
+run_make -O -- ${j}4 check
+cd ..
+
+# Ensure the tests are really being run in parallel mode: if this is
+# the case, the serial run of the dummy testsuite started above should
+# still be ongoing when the parallel one has terminated.
+kill -0 $!
+cat parallel/stdout
+test $(grep -c '^PASS:' parallel/stdout) -eq 12
+
+# Wait long enough so that there are no open files any more when the
+# post-test cleanup runs. But exit after we've waited for two minutes
+# or more, to avoid testsuite hangs in unusual situations (this has
+# already happened).
+i=1
+while test ! -f serial/test-suite.log && test $i -le 120; do
+ i=$(($i + 1))
+ sleep '1' # Extra quoting to please maintainer-check.
+done
+$sleep
+
+:
diff --git a/t/parallel-tests-console-output.sh b/t/parallel-tests-console-output.sh
new file mode 100644
index 000000000..e0fe331b5
--- /dev/null
+++ b/t/parallel-tests-console-output.sh
@@ -0,0 +1,102 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# parallel-tests: some checks on console output about testsuite
+# progress.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+XFAIL_TESTS = sub/xpass.test xfail.test error.test
+TESTS = $(XFAIL_TESTS) fail.test pass.test a/b/skip.test sub/error2.test
+pass.log: fail.log
+error.log: pass.log
+sub/xpass.log: error.log
+sub/error2.log: xfail.log
+a/b/skip.log: sub/error2.log
+END
+
+cat > exp <<'END'
+FAIL: fail.test
+PASS: pass.test
+ERROR: error.test
+XPASS: sub/xpass.test
+XFAIL: xfail.test
+ERROR: sub/error2.test
+SKIP: a/b/skip.test
+END
+
+mkdir sub a a/b
+
+cat > pass.test << 'END'
+#!/bin/sh
+exit 0
+END
+cp pass.test sub/xpass.test
+
+cat > fail.test << 'END'
+#!/bin/sh
+exit 1
+END
+
+cat > xfail.test << 'END'
+#!/bin/sh
+# The sleep should ensure expected execution order of tests
+# even when make is run in parallel mode.
+# Creative quoting below to plase maintainer-check.
+sleep '10'
+exit 1
+END
+
+cat > error.test << 'END'
+#!/bin/sh
+exit 99
+END
+cp error.test sub/error2.test
+
+cat > a/b/skip.test << 'END'
+#!/bin/sh
+exit 77
+END
+
+chmod a+x pass.test fail.test xfail.test sub/xpass.test \
+ a/b/skip.test error.test sub/error2.test
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+for vpath in : false; do
+ if $vpath; then
+ mkdir build
+ cd build
+ srcdir=..
+ else
+ srcdir=.
+ fi
+ $srcdir/configure
+ run_make -O -e FAIL check
+ LC_ALL=C grep '^[A-Z][A-Z]*:' stdout > got
+ cat got
+ diff $srcdir/exp got
+ cd $srcdir
+done
+
+:
diff --git a/t/parallel-tests-driver-install.sh b/t/parallel-tests-driver-install.sh
new file mode 100644
index 000000000..3bb27f0b4
--- /dev/null
+++ b/t/parallel-tests-driver-install.sh
@@ -0,0 +1,53 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that auxiliary script 'test-driver' gets automatically installed
+# in the correct directory.
+
+am_create_testdir=empty
+. test-init.sh
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AC_CONFIG_AUX_DIR([my_aux_dir])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile sub/Makefile])
+AC_OUTPUT
+END
+
+mkdir sub my_aux_dir
+
+cat > Makefile.am <<END
+SUBDIRS = sub
+TESTS = foo.test
+END
+
+cat > sub/Makefile.am <<END
+TESTS = bar.test
+END
+
+$ACLOCAL
+$AUTOMAKE -a 2>stderr || { cat stderr >&2; exit 1; }
+cat stderr >&2
+
+ls -l . sub my_aux_dir # For debugging.
+test -f my_aux_dir/test-driver
+test ! -e test-driver
+test ! -e sub/test-driver
+
+grep '^parallel-tests:.*installing.*my_aux_dir/test-driver' stderr
+
+:
diff --git a/t/parallel-tests-dry-run-1.sh b/t/parallel-tests-dry-run-1.sh
new file mode 100644
index 000000000..61e3d225b
--- /dev/null
+++ b/t/parallel-tests-dry-run-1.sh
@@ -0,0 +1,92 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check interactions between the parallel test harness and "make -n".
+# See also sister test 'parallel-tests-dry-run-2.sh'.
+
+. test-init.sh
+
+echo AC_OUTPUT >> configure.ac
+
+cat > Makefile.am <<'END'
+TESTS = foo.test bar.test
+$(TESTS):
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+# Avoid confusion with test logs.
+rm -f config.log
+
+log_files='test-suite.log foo.log bar.log'
+
+all_exist ()
+{
+ st=0
+ for i in $*; do
+ test -f $i || { echo File $i not found; st=1; }
+ done
+ test $st -eq 0
+}
+
+none_exist ()
+{
+ st=0
+ for i in $*; do
+ if test -r $i || test -f $i; then
+ echo File $i found
+ st=1
+ fi
+ done
+ test $st -eq 0
+}
+
+for targ in check recheck $log_files; do
+ $MAKE -n "$targ"
+ none_exist $log_files
+done
+
+touch $log_files
+
+$MAKE -n mostlyclean
+all_exist $log_files
+$MAKE -n clean
+all_exist $log_files
+
+cat > foo.test <<'END'
+#! /bin/sh
+exit 0
+END
+
+cat > bar.test <<'END'
+#! /bin/sh
+exit 1
+END
+
+chmod a+x foo.test bar.test
+
+$MAKE check && exit 1
+
+for targ in recheck clean mostlyclean distclean; do
+ $MAKE -n "$targ"
+ all_exist $log_files
+done
+
+:
diff --git a/t/parallel-tests-dry-run-2.sh b/t/parallel-tests-dry-run-2.sh
new file mode 100644
index 000000000..cbe38647c
--- /dev/null
+++ b/t/parallel-tests-dry-run-2.sh
@@ -0,0 +1,110 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check interactions between the parallel test harness and "make -n".
+# See also sister test 'parallel-tests-dry-run-1.sh'.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+TESTS = foo.test bar.test
+TEST_LOG_COMPILER = $(SHELL)
+END
+
+$ACLOCAL
+$AUTOMAKE -a
+$AUTOCONF
+
+./configure
+
+make_n_ ()
+{
+ st=0
+ run_make -M -- -n "$@" || { ls -l; exit 1; }
+ # Look out for possible errors from common tools used by recipes.
+ $EGREP -i ' (exist|permission|denied|no .*(such|file))' output && exit 1
+ $EGREP '(mv|cp|rm|cat|grep|sed|awk): ' output && exit 1
+ :
+}
+
+: > output
+
+files='foo.log bar.log foo.trs bar.trs'
+
+echo 'exit 0' > foo.test
+echo 'exit 1' > bar.test
+
+for target in check recheck test-suite.log; do
+ make_n_ $target
+ test ! -e foo.log
+ test ! -e foo.trs
+ test ! -e bar.log
+ test ! -e bar.trs
+ test ! -e test-suite.log
+done
+
+$MAKE check && exit 1
+
+chmod a-w .
+
+make_n_ clean
+test -f foo.log
+test -f foo.trs
+test -f foo.log
+test -f bar.trs
+
+cat > foo.test <<END
+echo this is bad
+exit 1
+END
+echo 'exit 0' > bar.test
+
+for target in check recheck test-suite.log; do
+ make_n_ $target
+ grep '^:test-result: *FAIL' bar.trs
+ grep 'this is bad' foo.log test-suite.log && exit 1
+ : For shells with busted 'set -e'.
+done
+
+chmod a-rw $files
+if test -r foo.log; then
+ : You can still read unreadable files! Skip these checks.
+else
+ for target in check recheck test-suite.log; do
+ make_n_ $target
+ for f in $files; do
+ test -f $f && test ! -r $f || exit 1
+ done
+ done
+fi
+chmod u+r $files
+
+chmod u+w .
+rm -f foo.log bar.trs
+chmod a-w .
+for target in check recheck test-suite.log $files; do
+ make_n_ $target
+ test ! -e foo.log
+ test -f foo.trs
+ test ! -e bar.trs
+ test -f bar.log
+done
+
+:
diff --git a/t/parallel-tests-empty-testlogs.sh b/t/parallel-tests-empty-testlogs.sh
new file mode 100644
index 000000000..55f89e60f
--- /dev/null
+++ b/t/parallel-tests-empty-testlogs.sh
@@ -0,0 +1,94 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check parallel-tests features:
+# - empty TESTS
+# - empty TEST_LOGS
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_FILES([sub1/Makefile sub2/Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+SUBDIRS = sub1 sub2
+END
+
+mkdir sub1 sub2
+
+cat > sub1/Makefile.am << 'END'
+TESTS =
+END
+
+# When $(TESTS) is empty, NetBSD 5.1 make ends up defining $(TESTS_LOGS)
+# to ".log" rather than to the empty string (as would be expected).
+# But our recipes are smart enough to work around such a botched-up
+# substitution, so let's not bother too much about it.
+if using_gmake; then
+ unindent >> sub1/Makefile.am << 'END'
+ check-local:
+ echo $(TEST_LOGS) | grep . && exit 1; exit 0
+END
+fi
+
+cat > sub2/Makefile.am << 'END'
+TESTS = foo.test
+END
+
+cat > sub2/foo.test <<'END'
+#! /bin/sh
+exit 0
+END
+chmod a+x sub2/foo.test
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+no_test_has_run ()
+{
+ ls -1 *.log | grep -v '^test-suite\.log$' | grep . && exit 1
+ grep '^# TOTAL: *0$' test-suite.log
+ :
+}
+
+for vpath in : false; do
+ if $vpath; then
+ mkdir build
+ cd build
+ srcdir=..
+ else
+ srcdir=.
+ fi
+ $srcdir/configure
+ cd sub1
+ VERBOSE=yes $MAKE check
+ no_test_has_run
+ cd ../sub2
+ run_make VERBOSE=yes TESTS= check
+ no_test_has_run
+ run_make VERBOSE=yes TEST_LOGS= check
+ no_test_has_run
+ cd ..
+ $MAKE check
+ cat sub2/foo.log
+ $MAKE distclean
+ cd $srcdir
+done
+
+:
diff --git a/t/parallel-tests-empty.sh b/t/parallel-tests-empty.sh
new file mode 100644
index 000000000..828cda7d0
--- /dev/null
+++ b/t/parallel-tests-empty.sh
@@ -0,0 +1,42 @@
+#! /bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check parallel-tests features:
+# - empty TESTS
+# BSD make will expand '$(TESTS:=.log)' to '.log' unless overridden.
+# See 'parallel-tests-trailing-whitespace.sh' for a similar issue.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TESTS =
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+run_make -O check
+for x in TOTAL PASS FAIL XPASS FAIL SKIP ERROR; do
+ grep "^# $x: *0$" stdout
+done
+
+:
diff --git a/t/parallel-tests-exeext.sh b/t/parallel-tests-exeext.sh
new file mode 100644
index 000000000..d7773e53b
--- /dev/null
+++ b/t/parallel-tests-exeext.sh
@@ -0,0 +1,66 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# parallel-tests:
+# - check2.am and interaction with $(EXEEXT)
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+dnl We need to fool the init.m4 internals a little.
+AC_DEFUN([_AM_FOO],
+ [m4_provide([_AM_COMPILER_EXEEXT])
+ AC_SUBST([CC], [false])
+ AC_SUBST([EXEEXT])])
+_AM_FOO
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TESTS = x y a.test b.test
+LOG_COMPILER = true
+TEST_LOG_COMPILER = true
+## We also need to fool the automake internals a little.
+EXTRA_PROGRAMS = y
+y_SOURCES =
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+$EGREP 'EXEEXT|\.log|\.test' Makefile.in # For debugging.
+
+./configure EXEEXT=
+touch x y a.test b.test
+$MAKE check
+
+$MAKE distclean
+rm -f x y a.test b.test *.log *.trs
+
+./configure EXEEXT=.bin
+touch x y.bin a.test b.test.bin
+$MAKE check
+ls -l # For debugging.
+test -f y.log
+test ! -e y.bin.log
+test -f b.log
+test ! -e b.test.log
+
+$EGREP '^y\.log: y(\$\(EXEEXT\)|\.bin)' Makefile
+$EGREP '^\.test(\$\(EXEEXT\)|\.bin)\.log:' Makefile
+
+:
diff --git a/t/parallel-tests-exit-status-reported.sh b/t/parallel-tests-exit-status-reported.sh
new file mode 100644
index 000000000..2b8420773
--- /dev/null
+++ b/t/parallel-tests-exit-status-reported.sh
@@ -0,0 +1,68 @@
+#! /bin/sh
+# Copyright (C) 2013-2017 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 <https://www.gnu.org/licenses/>.
+
+# The exit status of a test should be reported in the test logs, so
+# that one can see at a glance whether the test has succeeded or failed,
+# without having to look also into the corresponding .trs file.
+# See automake bug#11814.
+
+. test-init.sh
+
+echo AC_OUTPUT >> configure.ac
+
+echo XFAIL_TESTS = t3.test t00.test > Makefile.am
+echo TESTS = t00.test >> Makefile.am
+for s in 0 1 2 3 5 77 78 99 100 126 127; do
+ echo "TESTS += t${s}.test" >> Makefile.am
+ cat > t${s}.test <<END
+#!/bin/sh
+printf "%s\\n%s\\n" 'random' 'will exit with status $s'
+exit $s
+END
+done
+cp t0.test t00.test
+
+chmod a+x *.test
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+run_make -e FAIL check
+ls -l # For debugging.
+
+match_result ()
+{
+ cat "$1.log" # For debugging.
+ test $(wc -l <"$1.log") -eq 3
+ sed -n '$p' "$1.log" | grep "^$2 $1\\.test (exit status: $3)$"
+}
+
+match_result t0 PASS 0
+match_result t00 XPASS 0
+match_result t1 FAIL 1
+match_result t2 FAIL 2
+match_result t3 XFAIL 3
+match_result t5 FAIL 5
+match_result t77 SKIP 77
+match_result t78 FAIL 78
+match_result t99 ERROR 99
+match_result t100 FAIL 100
+match_result t126 FAIL 126
+match_result t127 FAIL 127
+
+:
diff --git a/t/parallel-tests-exit-statuses.sh b/t/parallel-tests-exit-statuses.sh
new file mode 100644
index 000000000..d8419629e
--- /dev/null
+++ b/t/parallel-tests-exit-statuses.sh
@@ -0,0 +1,91 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check parallel-tests features: normal and special exit statuses
+# in the test scripts.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+# $failure_statuses should be defined to the list of all integers between
+# 1 and 255 (inclusive), excluded 77 and 99.
+failure_statuses=$(seq_ 1 255 | $EGREP -v '^(77|99)$' | tr "$nl" ' ')
+# For debugging.
+echo "failure_statuses: $failure_statuses"
+# Sanity check.
+test $(for st in $failure_statuses; do echo $st; done | wc -l) -eq 253 \
+ || fatal_ "initializing list of exit statuses for simple failures"
+
+cat > Makefile.am <<END
+LOG_COMPILER = $AM_TEST_RUNNER_SHELL ./do-exit
+fail_tests = $failure_statuses
+TESTS = 0 77 99 $failure_statuses
+\$(TESTS):
+END
+
+cat > do-exit <<'END'
+#!/bin/sh
+echo "$0: $1"
+case $1 in
+ [0-9]|[0-9][0-9]|[0-9][0-9][0-9]) st=$1;;
+ */[0-9]|*/[0-9][0-9]|*/[0-9][0-9][0-9]) st=${1##*/};;
+ *) st=99;;
+esac
+exit $st
+END
+chmod a+x do-exit
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+{
+ echo PASS: 0
+ echo SKIP: 77
+ echo ERROR: 99
+ for st in $failure_statuses; do
+ echo "FAIL: $st"
+ done
+} | LC_ALL=C sort > exp-0
+
+sed 's/^FAIL:/XFAIL:/' exp-0 | LC_ALL=C sort > exp-1
+sed '/^ERROR:/d' exp-1 > exp-2
+
+./configure
+
+mk_ ()
+{
+ n=$1; shift
+ unset am_make_rc
+ run_make -e IGNORE -O -- ${1+"$@"} check
+ cat test-suite.log
+ LC_ALL=C grep '^[A-Z][A-Z]*:' stdout | LC_ALL=C sort > got-$n
+ cat exp-$n
+ cat got-$n
+ diff exp-$n got-$n
+}
+
+mk_ 0
+test $am_make_rc -gt 0
+mk_ 1 XFAIL_TESTS="$failure_statuses 99"
+test $am_make_rc -gt 0
+mk_ 2 XFAIL_TESTS="$failure_statuses" TESTS="0 77 $failure_statuses"
+test $am_make_rc -eq 0
+
+:
diff --git a/t/parallel-tests-extra-programs.sh b/t/parallel-tests-extra-programs.sh
new file mode 100644
index 000000000..6d33cb3cb
--- /dev/null
+++ b/t/parallel-tests-extra-programs.sh
@@ -0,0 +1,176 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Parallel test harness: check that $(TESTS) can lazily depend on
+# (or even be) $(EXTRA_PROGRAMS).
+
+required='cc native'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_OUTPUT
+END
+
+# Will be extended later.
+cat > Makefile.am << 'END'
+TEST_EXTENSIONS = .bin .test
+EXTRA_PROGRAMS =
+TESTS =
+END
+
+#
+# Now try various kinds of test dependencies ...
+#
+
+# 1. A program that is also a test, and whose source files
+# already exist.
+
+cat >> Makefile.am <<'END'
+EXTRA_PROGRAMS += foo.bin
+TESTS += foo.bin
+foo_bin_SOURCES = foo.c
+END
+
+cat > foo.c <<'END'
+#include <stdio.h>
+int main (void)
+{
+ printf ("foofoofoo\n");
+ return 0;
+}
+END
+
+# 2. A program that is also a test, and whose source files
+# are buildable by make.
+cat >> Makefile.am <<'END'
+EXTRA_PROGRAMS += bar.bin
+TESTS += bar.bin
+bar_bin_SOURCES = bar.c
+bar.c: foo.c
+ sed -e 's/foofoofoo/barbarbar/' foo.c > $@
+END
+
+# 3. A test script that already exists, whose execution depends
+# on a program whose source files already exist and which is
+# not itself a test.
+cat >> Makefile.am <<'END'
+EXTRA_PROGRAMS += y
+TESTS += baz.test
+baz.log: y$(EXEEXT)
+END
+
+cat > baz.test <<'END'
+#!/bin/sh
+$srcdir/y "$@" | sed 's/.*/&ep&ep&ep/'
+END
+chmod a+x baz.test
+
+cat > y.c <<'END'
+#include <stdio.h>
+int main (void)
+{
+ printf ("y\n");
+ return 0;
+}
+END
+
+# 4. A program that is also a test, but whose source files
+# do not exit and are not buildable by make.
+
+cat >> Makefile.am <<'END'
+EXTRA_PROGRAMS += none.bin
+TESTS += none.bin
+none_bin_SOURCES = none.c
+END
+
+#
+# Setup done, go with the tests.
+#
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+# What we check now:
+# 1. even if we cannot build the 'none.bin' program, all the other
+# test programs should be built, and all the other tests should
+# be run;
+# 2. still, since we cannot create the 'none.log' file, the
+# 'test-suite.log' file shouldn't be created (as it depends
+# on *all* the test logs).
+
+run_make -E -O -e IGNORE -- -k check
+ls -l
+if using_gmake; then
+ test $am_make_rc -gt 0 || exit 1
+else
+ # Don't trust exit status of "make -k" for non-GNU make.
+ $MAKE check && exit 1
+ : For shells with busted 'set -e'.
+fi
+
+# Files that should have been created, with the expected content.
+cat bar.c
+grep foofoofoo foo.log
+grep barbarbar bar.log
+grep yepyepyep baz.log
+# Files that shouldn't have been created.
+test ! -e none.log
+test ! -e test-suite.log
+# Expected testsuite progress output.
+grep '^PASS: baz\.test$' stdout
+# Don't anchor the end of the next two patterns, to allow for non-empty
+# $(EXEEXT).
+grep '^PASS: foo\.bin' stdout
+grep '^PASS: bar\.bin' stdout
+# Expected error messages from make. Some make implementations (e.g.,
+# FreeBSD make) seem to print the error on stdout instead, so check for
+# it there as well.
+$EGREP 'none\.(bin|o|c)' stderr stdout
+
+# What we check now:
+# 1. if we make the last EXTRA_PROGRAM buildable, the failed tests
+# pass;
+# 2. on a lazy re-run, the passed tests are not re-run, and
+# 3. their log files are not updated or touched.
+
+: > stamp
+$sleep
+
+echo 'int main (void) { return 0; }' > none.c
+
+run_make -O -e IGNORE check RECHECK_LOGS=
+ls -l # For debugging.
+test $am_make_rc -eq 0 || exit 1
+
+# For debugging.
+stat stamp foo.log bar.log baz.log || :
+
+# Files that shouldn't have been updated or otherwise touched.
+is_newest stamp foo.log bar.log baz.log
+# Files that should have been created now.
+test -f none.log
+test -f test-suite.log
+# Tests that shouldn't have been re-run.
+$EGREP '(foo|bar)\.bin|baz\.test$' stdout && exit 1
+# Tests that should have been run. Again, we don't anchor the end
+# of the next pattern, to allow for non-empty $(EXEEXT).
+grep '^PASS: none\.bin' stdout
+
+:
diff --git a/t/parallel-tests-fd-redirect-exeext.sh b/t/parallel-tests-fd-redirect-exeext.sh
new file mode 100644
index 000000000..217069140
--- /dev/null
+++ b/t/parallel-tests-fd-redirect-exeext.sh
@@ -0,0 +1,115 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# parallel-tests support: redirection of file descriptors with
+# AM_TESTS_FD_REDIRECT, for tests which are binary executables
+# We use some tricks to ensure that all code paths in 'lib/am/check2.am'
+# are covered, even on platforms where $(EXEEXT) would be naturally empty.
+# See also the more generic test 'check-fd-redirect.sh', and
+# sister test 'parallel-tests-fd-redirect.sh'.
+
+required='cc native'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+# Calls like "write(9, ...)" are unlikely to work for MinGW-compiled
+# programs. We must skip this test if this is the case.
+am__ok=no
+AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([[#include <unistd.h>]],
+ [[write (9, "foobar\n", 7); return 0;]])],
+ [AM_RUN_LOG([./conftest$EXEEXT 9>&1]) \
+dnl Leading ":;" required to avoid having two nested subshells starting
+dnl with '((' in the generated configure: that is unportable and could
+dnl confuse some shells (e.g., NetBSD 5.1 /bin/ksh) into thinking we are
+dnl trying to perform an arithmetic operation.
+ && AM_RUN_LOG([:; (./conftest$EXEEXT 9>&1) | grep "^foobar"]) \
+ && am__ok=yes])
+test $am__ok = yes || AS_EXIT([63])
+AM_CONDITIONAL([real_EXEEXT], [test -n "$EXEEXT"])
+test -n "$EXEEXT" || EXEEXT=.bin
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AM_TESTS_FD_REDIRECT = 9>&1
+TESTS = $(check_PROGRAMS)
+check_PROGRAMS = baz qux.test
+qux_test_SOURCES = zardoz.c
+
+## Sanity check.
+if !real_EXEEXT
+check-local:
+ test -f baz.bin
+ test -f qux.test.bin
+endif
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+cat > baz.c <<'END'
+#include <stdio.h>
+#include <unistd.h>
+int main (void)
+{
+ ssize_t res = write (9, " bazbazbaz\n", 11);
+ if (res < 0)
+ perror("write failed");
+ return res != 11;
+}
+END
+
+cat > zardoz.c <<'END'
+#include <stdio.h>
+#include <unistd.h>
+int main (void)
+{
+ ssize_t res = write (9, " quxquxqux\n", 11);
+ if (res < 0)
+ perror("write failed");
+ return res != 11;
+}
+END
+
+st=0; ./configure || st=$?
+cat config.log # For debugging, as we do tricky checks in configure.
+if test $st -eq 63; then
+ skip_ "fd redirect in compiled program unsupported"
+elif test $st -eq 0; then
+ : Continue.
+else
+ fatal_ "unexpected error in ./configure"
+fi
+
+# Sanity checks.
+st=0
+grep '^baz\.log:.*baz\$(EXEEXT)' Makefile || st=1
+grep '^\.test\$(EXEEXT)\.log:' Makefile || st=1
+grep '^qux\.log:' Makefile && st=1
+test $st -eq 0 || fatal_ "doesn't cover expected code paths"
+
+run_make -O -e IGNORE check
+cat baz.log
+cat qux.log
+test $am_make_rc -eq 0
+grep "^ bazbazbaz$" stdout
+grep "^ quxquxqux$" stdout
+$EGREP '(bazbazbaz|quxquxqux)' *.log && exit 1
+
+:
diff --git a/t/parallel-tests-fd-redirect.sh b/t/parallel-tests-fd-redirect.sh
new file mode 100644
index 000000000..386b7aada
--- /dev/null
+++ b/t/parallel-tests-fd-redirect.sh
@@ -0,0 +1,68 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# parallel-tests support: redirection of file descriptors with
+# AM_TESTS_FD_REDIRECT, even when using tests without suffix.
+# The sister 'parallel-tests-fd-redirect-exeext.sh' do a similar
+# check for tests that are binary executables.
+# See also the more generic test 'check-fd-redirect.sh'.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AM_TESTS_FD_REDIRECT = 9>&1
+TEST_EXTENSIONS = .test .sh
+TESTS = foo.sh bar
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+cat > foo.sh <<'END'
+#!/bin/sh
+echo " foofoofoo" >&9
+END
+chmod a+x foo.sh
+
+cat > bar <<'END'
+#!/bin/sh
+echo " barbarbar" >&9
+END
+
+chmod a+x foo.sh bar
+
+./configure
+
+# Sanity checks.
+st=0
+grep '^bar\.log:.*bar' Makefile || st=1
+grep '^foo\.log:' Makefile && st=1
+test $st -eq 0 || fatal_ "doesn't cover expected code paths"
+
+run_make -O -e IGNORE check
+cat foo.log
+cat bar.log
+test $am_make_rc -eq 0
+grep "^ foofoofoo$" stdout
+grep "^ barbarbar$" stdout
+$EGREP '(foofoofoo|barbarbar)' *.log && exit 1
+
+:
diff --git a/t/parallel-tests-fork-bomb.sh b/t/parallel-tests-fork-bomb.sh
new file mode 100644
index 000000000..315e891cb
--- /dev/null
+++ b/t/parallel-tests-fork-bomb.sh
@@ -0,0 +1,146 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check parallel-tests features:
+# - If $(TEST_SUITE_LOG) is in $(TEST_LOGS), we get a diagnosed
+# error, not a make hang or a system freeze.
+
+. test-init.sh
+
+# We don't want localized error messages from make, since we'll have
+# to grep them. See automake bug#11452.
+LANG=C LANGUAGE=C LC_ALL=C
+export LANG LANGUAGE LC_ALL
+
+# The tricky part of this test is to avoid that make hangs or even
+# freezes the system in case infinite recursion (which is the bug we
+# are testing against) is encountered. The following hacky makefile
+# should minimize the probability of that happening.
+cat > Makefile.am << 'END'
+TEST_LOG_COMPILER = true
+TESTS =
+
+errmsg = ::OOPS:: Recursion too deep
+
+if IS_GNU_MAKE
+
+ is_too_deep := $(shell test $(MAKELEVEL) -lt 10 && echo no)
+
+## Indenteation here required to avoid confusing Automake.
+ ifeq ($(is_too_deep),no)
+ else
+ $(error $(errmsg), $(MAKELEVEL) levels)
+ endif
+
+else !IS_GNU_MAKE
+
+# We use mkdir to detect the level of recursion, since it is easy
+# to use and assured to be portably atomical. Also use an higher
+# number than with GNU make above, since the level used here can
+# be incremented by tow or more per recursion.
+recursion-not-too-deep:
+ @ok=no; \
+ for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 \
+ 18 19 20 21 22 23 24 25 26 27 28 29; \
+ do \
+ echo " mkdir rec-$$i.d"; \
+ if mkdir rec-$$i.d; then \
+ ok=yes; break; \
+ else :; fi; \
+ done; \
+ test $$ok = yes || { echo '$(errmsg)' >&2; exit 1; }
+.PHONY: recursion-not-too-deep
+clean-local:
+ rmdir rec-[0-9].d
+
+targets = all check recheck $(TESTS) $(TEST_LOGS) $(TEST_SUITE_LOG)
+$(targets): recursion-not-too-deep
+
+# For BSD make.
+.BEGIN: recursion-not-too-deep
+
+endif !IS_GNU_MAKE
+END
+
+if using_gmake; then
+ cond=:
+else
+ cond=false
+fi
+
+cat >> configure.ac << END
+AM_CONDITIONAL([IS_GNU_MAKE], [$cond])
+AC_OUTPUT
+END
+
+# Another helpful idiom to avoid hanging on capable systems. The subshell
+# is needed since 'ulimit' might be a special shell builtin.
+if (ulimit -t 8); then ulimit -t 8; fi
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a -Wno-portability
+
+./configure
+
+do_check ()
+{
+ log=$1; shift
+ run_make -M -e IGNORE -- "$@" check
+ $FGREP '::OOPS::' output && exit 1 # Possible infinite recursion.
+ # Check that at least we don't create a botched global log file.
+ test ! -e "$log"
+ if using_gmake; then
+ grep "[Cc]ircular.*dependency" output | $FGREP "$log"
+ test $am_make_rc -gt 0
+ else
+ # Look for possible error messages about circular dependencies from
+ # either make or our own recipes. At least one such a message must
+ # be present. OTOH, some make implementations (e.g., NetBSD's), while
+ # smartly detecting the circular dependency early and diagnosing it,
+ # still exit with a successful exit status (yikes!). So don't check
+ # the exit status of non-GNU make, to avoid spurious failures.
+ # this case.
+ err_seen=no
+ for err_rx in \
+ 'circular.* depend' \
+ 'depend.* circular' \
+ 'graph cycle' \
+ 'infinite (loop|recursion)' \
+ 'depend.* on itself' \
+ ; do
+ $EGREP -i "$err_rx" output | $FGREP "$log" || continue
+ err_seen=yes
+ break
+ done
+ test $err_seen = yes || exit 1
+ fi
+}
+
+: > test-suite.test
+do_check test-suite.log TESTS=test-suite.test
+rm -f *.log *.test
+
+: > 0.test
+: > 1.test
+: > 2.test
+: > 3.test
+: > foobar.test
+do_check foobar.log TEST_LOGS='0.log 1.log foobar.log 2.log 3.log' \
+ TEST_SUITE_LOG=foobar.log
+rm -f *.log *.test
+
+:
diff --git a/t/parallel-tests-generated-and-distributed.sh b/t/parallel-tests-generated-and-distributed.sh
new file mode 100644
index 000000000..9627586f5
--- /dev/null
+++ b/t/parallel-tests-generated-and-distributed.sh
@@ -0,0 +1,74 @@
+#! /bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check parallel-tests features:
+# - generated distributed tests.
+# - listing $(srcdir)/ or $(top_srcdir)/ in TESTS doesn't work ATM,
+# and is thus diagnosed.
+
+# TODO: this test should also ensure that the 'make' implementation
+# properly adheres to rules in all cases. See the Autoconf
+# manual for the ugliness in this area, when VPATH comes into
+# play. :-/
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TESTS = foo.test
+## the next line will cause automake to error out:
+TESTS += $(srcdir)/bar.test $(top_srcdir)/baz.test
+.in.test:
+## Account for VPATH issues on weaker make implementations (e.g. IRIX 6.5)
+ cp `test -f '$<' || echo $(srcdir)/`$< $@
+ chmod +x $@
+check_SCRIPTS = $(TESTS)
+EXTRA_DIST = foo.in foo.test
+DISTCLEANFILES = foo.test
+END
+
+cat > foo.in <<'END'
+#! /bin/sh
+echo "this is $0"
+exit 0
+END
+
+$ACLOCAL
+$AUTOCONF
+AUTOMAKE_fails -a
+grep '$(srcdir).*TESTS.*bar\.test' stderr
+grep '$(top_srcdir).*TESTS.*baz\.test' stderr
+
+sed '/^TESTS +=.*srcdir/d' < Makefile.am > t
+mv -f t Makefile.am
+$AUTOMAKE -a
+
+./configure
+$MAKE check
+$MAKE distcheck
+$MAKE distclean
+
+mkdir build
+cd build
+../configure
+$MAKE check
+test ! -e ../foo.log
+$MAKE distcheck
+
+:
diff --git a/t/parallel-tests-harderror.sh b/t/parallel-tests-harderror.sh
new file mode 100644
index 000000000..70e21441e
--- /dev/null
+++ b/t/parallel-tests-harderror.sh
@@ -0,0 +1,94 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check parallel-tests features: DISABLE_HARD_ERRORS
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+END
+
+mkdir sub
+
+cat > Makefile.am << 'END'
+SUBDIRS = . sub
+TESTS = foo.test
+XFAIL_TESTS = foo.test
+EXTRA_DIST = $(TESTS)
+END
+
+cat > sub/Makefile.am << 'END'
+TESTS = bar.test
+XFAIL_TESTS = $(TESTS)
+EXTRA_DIST = $(TESTS)
+END
+
+cat > foo.test <<'END'
+#! /bin/sh
+exit 99
+END
+chmod a+x foo.test
+cp foo.test sub/bar.test
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+# DISABLE_HARD_ERRORS is not defined as a make variable, so that it
+# should be possible to define either from the environment or from
+# command-line, also when recursive make invocations are involved,
+# and also without using the '-e' make flag; this should work also
+# for non-GNU make. Moreover, it shouldn't be necessary to define
+# DISABLE_HARD_ERRORS to "yes" to really disable hard errors: any
+# non-empty value should do.
+$MAKE check DISABLE_HARD_ERRORS=yes
+DISABLE_HARD_ERRORS=x $MAKE check
+
+# But an empty values for DISABLE_HARD_ERRORS means that hard errors
+# are not to be counted like normal failures.
+
+$MAKE check DISABLE_HARD_ERRORS= && exit 1
+cat test-suite.log
+grep '^ERROR: foo$' test-suite.log
+
+cd sub
+$MAKE check DISABLE_HARD_ERRORS= && exit 1
+cat test-suite.log
+grep '^ERROR: bar$' test-suite.log
+cd ..
+
+# Check the distributions.
+$MAKE DISABLE_HARD_ERRORS=y distcheck
+
+# Finally, DISABLE_HARD_ERRORS should work also when the developer
+# sets it directly in Makefile.am or Makefile. And its effects
+# should remain local to that specific Makefile, obviously.
+
+echo 'DISABLE_HARD_ERRORS = yes' >> Makefile.am
+$AUTOMAKE Makefile
+./config.status Makefile
+VERBOSE=yes $MAKE check && exit 1
+grep '^FAIL' test-suite.log && exit 1
+grep '^ERROR: bar$' sub/test-suite.log
+
+echo 'DISABLE_HARD_ERRORS = zardoz' >> sub/Makefile
+VERBOSE=yes $MAKE check
+
+:
diff --git a/t/parallel-tests-interrupt.tap b/t/parallel-tests-interrupt.tap
new file mode 100644
index 000000000..9f0c5a049
--- /dev/null
+++ b/t/parallel-tests-interrupt.tap
@@ -0,0 +1,116 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that the parallel testsuite harness removes incomplete log files
+# when interrupt upon some signal. This test is definitely too hacky,
+# but we couldn't find a better way to deal with inter-processes
+# signals and the whole process-synchronization mess.
+
+. test-init.sh
+
+plan_ 16
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TESTS = foo.test
+## Provide more debugging info.
+TEST_LOG_COMPILER = $(SHELL) -ex
+## Required by foo.test; see below.
+AM_TESTS_FD_REDIRECT = 9>&1
+END
+
+# This is hacky and ugly, but has the great advantage of avoiding us a lot
+# of pain with background processes and related synchronization issues.
+
+cat - "$am_scriptdir"/test-driver > test-driver <<'END'
+#!/bin/sh
+echo $$ > pid
+END
+
+cat > foo.test << 'END'
+#!/bin/sh -e
+
+# We expect the test driver to be terminated by a signal, and so
+# to exit with non-zero status, thus causing "make check" to fail.
+# Exiting with status 0 from this test script is thus a good way to
+# make unexpected behaviours more evident, since this will likely
+# cause and unexpected success in "make check".
+trap 'exit 0' 0;
+stop_test () { exit 0; }
+
+# We need the "foo is starting to run" string flushed to standard output
+# ASAP, because we are soon going to grep for that string in the log file
+# where the test driver is redirecting this script's stdout. The safest
+# way force this flushing portably is to rely on perl I/O capabilities.
+$PERL -e 'BEGIN { $| = 1 }; print "foo is starting to run\n"' || stop_test
+
+ls -l >&9 || stop_test
+
+bailout ()
+{
+ # Print this to the original stdout (saved in the fd 9), so that the
+ # emitted "Bail out!" directive will be interpreted by the test driver
+ # running the Automake testsuite.
+ echo "Bail out! $*" >&9
+ stop_test
+}
+
+test $sig -gt 0 || bailout "\$sig not exported to test script"
+
+res=ok; cat foo.log >&9 || res="not ok"
+echo "$res - logfile created and readable [SIG $sig]" >&9
+
+res=ok; grep '^foo is starting to run$' foo.log >&9 || res='not ok'
+echo "$res - logfile contains output from test script [SIG $sig]" >&9
+
+cat pid >&9 || bailout "cannot get PID of test driver"
+kill -$sig `cat pid` || bailout "cannot send signal $sig to test driver"
+
+stop_test
+END
+chmod a+x foo.test
+
+$ACLOCAL || fatal_ "aclocal failed"
+$AUTOCONF || fatal_ "autoconf failed"
+$AUTOMAKE || fatal_ "automake failed"
+
+./configure || fatal_ "./configure failed"
+
+# The only signals that can be trapped portable are 1 "SIGHUP",
+# 2 "SIGINT", 13 "SIGPIPE" and 15 "SIGTERM".
+trapped_signals='1 2 13 15'
+
+for sig in $trapped_signals; do
+ if is_blocked_signal $sig; then
+ for i in 1 2 3 4; do echo "ok # SKIP signal $sig is blocked"; done
+ continue
+ fi
+ rm -f pid fail *.log
+ r=ok; env PERL="$PERL" sig="$sig" $MAKE check && r='not ok'
+ echo "$r - signal $sig to test driver causes \"make check\" to fail"
+ ls -l
+ # These files shouldn't exist, but in case they do, their content might
+ # provide helpful information about the causes of the failure(s).
+ cat foo.log || :
+ cat test-suite.log || :
+ r=ok; ls | $EGREP 'foo.*\.(log|tmp)' && r='not ok'
+ echo "$r - test driver clean up log and tmp files after signal $sig"
+done
+
+:
diff --git a/t/parallel-tests-log-compiler-1.sh b/t/parallel-tests-log-compiler-1.sh
new file mode 100644
index 000000000..12bdb92a1
--- /dev/null
+++ b/t/parallel-tests-log-compiler-1.sh
@@ -0,0 +1,125 @@
+#! /bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check parallel-tests features:
+# - per-extension "test runners" a.k.a. "log compilers" (xxx_LOG_COMPILER
+# and xxx_LOG_FLAGS), also with AC_SUBST'd stuff.
+# See also related test 'parallel-tests-log-compiler-2.sh'.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_SUBST([acsubst_compiler], [t-compiler])
+AC_CONFIG_LINKS([chk-compiler:chk-compiler])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+# Note that automake should not match the '/test' part of 'sub/test'
+# as '.test' suffix.
+TESTS = foo.chk bar.test baz bla.t bli.suff sub/test
+
+TEST_EXTENSIONS = .chk .test .t
+
+CHK_LOG_COMPILER = ./chk-compiler
+TEST_LOG_COMPILER = $(SHELL) $(srcdir)/test-compiler
+T_LOG_COMPILER = @acsubst_compiler@
+LOG_COMPILER = @SHELL@ -x $(srcdir)/noext-compiler
+
+CHK_LOG_FLAGS = --chk
+
+AM_TEST_LOG_FLAGS = --am-test
+
+T_LOG_FLAGS = --t
+AM_T_LOG_FLAGS = --am-t
+
+AM_LOG_FLAGS = -a
+LOG_FLAGS = -b
+
+# 't-compiler' is deliberately not distributed; it should be available
+# in PATH also from "make distcheck".
+EXTRA_DIST = $(TESTS) chk-compiler test-compiler noext-compiler
+END
+
+mkdir sub
+
+cat > chk-compiler <<'END'
+#! /bin/sh
+test x"$1" = x"--chk" || {
+ echo "$0: invalid command line: $*" >&2
+ exit 1
+}
+shift
+exec "$@"
+exit 127
+END
+sed 's/--chk/--am-test/' chk-compiler > test-compiler
+
+mkdir bin
+PATH=$(pwd)/bin$PATH_SEPARATOR$PATH; export PATH
+
+cat > bin/t-compiler <<'END'
+#! /bin/sh
+if test x"$1,$2" != x"--am-t,--t"; then
+ echo "$0: invalid command line: $*" >&2
+ exit 1
+fi
+shift; shift
+exec "$@"
+exit 127
+END
+sed 's/--am-t,--t/-a,-b/' bin/t-compiler > noext-compiler
+
+chmod a+x chk-compiler chk-compiler test-compiler bin/t-compiler noext-compiler
+
+cat >foo.chk << 'END'
+#! /bin/sh
+exit 0
+END
+chmod a+x foo.chk
+cp foo.chk bar.test
+cp foo.chk baz
+cp foo.chk bla.t
+cp foo.chk bli.suff
+cp foo.chk sub/test
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+$MAKE check || { cat test-suite.log; exit 1; }
+ls -l . sub
+cat test-suite.log
+test -f foo.log
+test -f bar.log
+test -f baz.log
+test -f bla.log
+test -f bli.suff.log
+test -f sub/test.log
+
+run_make -e FAIL T_LOG_FLAGS=--bad check
+cat test-suite.log
+cat bla.log
+# With the above flag overridden, bla.t should fail ...
+$EGREP '(^ *|/)t-compiler:.* invalid .*--bad' bla.log
+# ... but no other test should.
+grep -v '^FAIL: bla\.t ' bla.log | grep 'FAIL:' && exit 1
+
+# Try also with a VPATH build.
+$MAKE distcheck
+
+:
diff --git a/t/parallel-tests-log-compiler-2.sh b/t/parallel-tests-log-compiler-2.sh
new file mode 100644
index 000000000..ad9535af5
--- /dev/null
+++ b/t/parallel-tests-log-compiler-2.sh
@@ -0,0 +1,95 @@
+#! /bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check parallel-tests features:
+# - per-extension "test runners" a.k.a. "log compilers" (xxx_LOG_COMPILER
+# and xxx_LOG_FLAGS), when some tests are PROGRAMS.
+# See also related test 'parallel-tests-log-compiler-1.sh'.
+
+required='cc native'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+## Note that automake should not match the '/test' part
+## of 'sub/test' as '.test' suffix.
+TESTS = foo.chk bar.test $(check_PROGRAMS) sub/test
+check_PROGRAMS = baz bla.test bli.suff
+TEST_EXTENSIONS = .chk .test
+CHK_LOG_COMPILER = ./chk-compiler
+TEST_LOG_COMPILER = ./test-compiler
+LOG_COMPILER = ./noext-compiler
+AM_CHK_LOG_FLAGS = 1
+CHK_LOG_FLAGS = 2
+AM_TEST_LOG_FLAGS = 3
+TEST_LOG_FLAGS = 4
+AM_LOG_FLAGS = 5
+LOG_FLAGS = 6
+END
+
+mkdir sub
+
+cat >chk-compiler <<'END'
+#! /bin/sh
+echo $0 "$@"
+shift
+shift
+exec "$@"
+exit 127
+END
+chmod a+x chk-compiler
+cp chk-compiler test-compiler
+cp chk-compiler noext-compiler
+
+cat >foo.chk << 'END'
+#! /bin/sh
+exit 0
+END
+chmod a+x foo.chk
+cp foo.chk bar.test
+cp foo.chk sub/test
+
+cat >baz.c << 'END'
+int main (void)
+{
+ return 0;
+}
+END
+cp baz.c bla.c
+cp baz.c bli.c
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+$MAKE
+$MAKE check || { cat test-suite.log; exit 1; }
+ls -l . sub
+cat test-suite.log
+grep 'chk-compiler *1 *2' foo.log
+grep 'test-compiler *3 *4' bar.log
+grep 'noext-compiler *5 *6' baz.log
+grep 'test-compiler *3 *4' bla.log
+grep 'noext-compiler *5 *6' bli.suff.log
+grep 'noext-compiler *5 *6' sub/test.log
+
+:
diff --git a/t/parallel-tests-log-compiler-example.sh b/t/parallel-tests-log-compiler-example.sh
new file mode 100644
index 000000000..281d4ce32
--- /dev/null
+++ b/t/parallel-tests-log-compiler-example.sh
@@ -0,0 +1,68 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test the example of usage of generic and extension-specific
+# LOG_COMPILER and LOG_FLAGS given in the manual.
+
+required=python
+. test-init.sh
+
+cat >> configure.ac <<END
+AC_SUBST([PERL], ['$PERL'])
+AM_PATH_PYTHON
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TESTS = foo.pl bar.py baz
+TEST_EXTENSIONS = .pl .py
+PL_LOG_COMPILER = $(PERL)
+AM_PL_LOG_FLAGS = -w
+PY_LOG_COMPILER = $(PYTHON)
+AM_PY_LOG_FLAGS = -v
+LOG_COMPILER = ./wrapper-script
+AM_LOG_FLAGS = -d
+END
+
+echo 'my $a =+ 2; exit (0);' > foo.pl
+echo 'import sys; sys.exit(0);' > bar.py
+: > baz
+
+cat > wrapper-script <<'END'
+#!/bin/sh
+echo "wrapper args: $*"
+END
+chmod a+x wrapper-script
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+st=0
+$MAKE check || st=$?
+cat foo.log
+cat bar.log
+cat baz.log
+test $st -eq 0 || exit $st
+
+# Check that the wrappers have been run with the expected flags.
+grep '[rR]eversed.*+=.*operator.*foo\.pl' foo.log
+grep '^# *[cC]lear.*sys\.argv' bar.log
+grep '^wrapper args:.* -d .*baz' baz.log
+
+:
diff --git a/t/parallel-tests-log-override-1.sh b/t/parallel-tests-log-override-1.sh
new file mode 100644
index 000000000..6d4672efa
--- /dev/null
+++ b/t/parallel-tests-log-override-1.sh
@@ -0,0 +1,109 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check parallel-tests features: runtime redefinition of $(TEST_SUITE_LOG).
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+TESTS = pass.test skip.test xfail.test
+XFAIL_TESTS = xfail.test
+EXTRA_DIST = $(TESTS)
+END
+
+cat > pass.test <<'END'
+#! /bin/sh
+exit 0
+END
+
+cat > skip.test <<'END'
+#! /bin/sh
+echo "% test skipped %"
+exit 77
+END
+
+cat > xfail.test <<'END'
+#! /bin/sh
+echo "# expected failure #"
+exit 1
+END
+
+chmod a+x *.test
+
+test_log_edit ()
+{
+ sed -e "s|^ *$me 1\.0:.*$| $me 1.0: ???|" \
+ -e "s|^=====*|=======================|" $*
+}
+
+test_log_expected ()
+{
+ test_log_edit orig > exp
+ test_log_edit $1 > got
+ diff exp got || exit 1
+ rm -f exp got
+}
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+$MAKE check
+ls -l
+cat test-suite.log
+cp test-suite.log orig
+
+$MAKE clean
+test -f test-suite.log && exit 99 # Sanity check.
+
+# Check that we can override the testsuite log file at runtime.
+run_make TEST_SUITE_LOG=zardoz.log check
+ls -l
+test ! -e test-suite.log
+cat zardoz.log
+test_log_expected zardoz.log
+# Sanity check the distribution too (this also does minimal checks on
+# VPATH support).
+run_make TEST_SUITE_LOG=zardoz.log distcheck
+
+# Check that cleanup rules remove the correct file even when
+# user overrides are in place.
+cp orig test-suite.log
+run_make TEST_SUITE_LOG=zardoz.log clean
+ls -l
+test ! -e zardoz.log
+diff orig test-suite.log
+
+# Check that the default testsuite log doesn't get unduly modified.
+# Also check that the testsuite log file doesn't need to be named
+# accordingly to the '*.log' pattern.
+chmod a-w test-suite.log
+run_make TEST_SUITE_LOG=TheLogFile check
+ls -l
+diff orig test-suite.log
+test_log_expected TheLogFile
+run_make TEST_SUITE_LOG=TheLogFile clean
+ls -l
+test ! -e TheLogFile
+diff orig test-suite.log
+
+:
diff --git a/t/parallel-tests-log-override-2.sh b/t/parallel-tests-log-override-2.sh
new file mode 100644
index 000000000..470a8f8f8
--- /dev/null
+++ b/t/parallel-tests-log-override-2.sh
@@ -0,0 +1,82 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check parallel-tests features: runtime redefinition of:
+# - $(TEST_SUITE_LOG) and $(TESTS)
+# - $(TEST_SUITE_LOG) and $(TEST_LOGS)
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+TESTS = pass.test pass2.test skip.test skip2.test fail.test
+END
+
+cat > pass.test <<'END'
+#! /bin/sh
+exit 0
+END
+
+cp pass.test pass2.test
+
+cat > skip.test <<'END'
+#! /bin/sh
+echo "% skipped test %"
+exit 77
+END
+
+cp skip.test skip2.test
+
+cat > fail.test <<'END'
+#! /bin/sh
+exit 1
+END
+
+chmod a+x *.test
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+for test_list_override in \
+ 'TESTS=pass.test skip.test' \
+ 'TEST_LOGS=pass.log skip.log'
+do
+ run_make -O TEST_SUITE_LOG=partial.log "$test_list_override" check
+ ls -l
+ count_test_results total=2 pass=1 fail=0 skip=1 xfail=0 xpass=0 error=0
+ cat pass.log
+ cat skip.log
+ cat partial.log
+ test ! -e test-suite.log
+ test ! -e pass2.log
+ test ! -e skip2.log
+ test ! -e fail.log
+ grep '^PASS: pass\.test$' stdout
+ grep '^SKIP: skip\.test$' stdout
+ $FGREP 'SKIP: skip' partial.log
+ $FGREP '% skipped test %' partial.log
+ $EGREP '(pass2|skip2|fail)\.test' stdout && exit 1
+ $EGREP '(pass2|skip2|fail)' partial.log && exit 1
+ rm -f *.log
+done
+
+:
diff --git a/t/parallel-tests-log-override-recheck.sh b/t/parallel-tests-log-override-recheck.sh
new file mode 100644
index 000000000..f5097f857
--- /dev/null
+++ b/t/parallel-tests-log-override-recheck.sh
@@ -0,0 +1,97 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check parallel-tests features: runtime redefinition of $(TEST_SUITE_LOG)
+# for the recheck target.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+TESTS = foofoo.test barbar.test bazbaz.test
+END
+
+cat > foofoo.test <<'END'
+#! /bin/sh
+echo "this is $0"
+exit 0
+END
+
+cat > barbar.test <<'END'
+#! /bin/sh
+echo "this is $0"
+exit 99
+END
+
+cat > bazbaz.test <<'END'
+#! /bin/sh
+echo "this is $0"
+exit ${BAZ_EXIT_STATUS-1}
+END
+
+chmod a+x *.test
+
+unset BAZ_EXIT_STATUS
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+# Filter make output before grepping it, for make implementations that,
+# like Solaris' one, print the whole of the failed recipe on failure.
+filter_stdout ()
+{
+ grep -v 'bases=.*;' stdout > t && mv -f t stdout
+}
+
+./configure
+run_make -O -e FAIL check
+
+using_gmake || $sleep # Required by BSD make.
+
+chmod a-rw test-suite.log
+run_make -O -e FAIL TEST_SUITE_LOG=my.log recheck
+ls -l
+filter_stdout
+count_test_results total=2 pass=0 fail=1 skip=0 xfail=0 xpass=0 error=1
+for x in stdout my.log; do
+ $FGREP foofoo $x && exit 1
+ $FGREP barbar $x
+ $FGREP bazbaz $x
+done
+
+using_gmake || $sleep # Required by BSD make.
+
+chmod a-rw my.log
+run_make -O -e FAIL BAZ_EXIT_STATUS=0 TEST_SUITE_LOG=my2.log recheck
+ls -l
+count_test_results total=2 pass=1 fail=0 skip=0 xfail=0 xpass=0 error=1
+filter_stdout
+$FGREP foofoo stdout && exit 1
+$FGREP barbar stdout
+$FGREP bazbaz stdout
+$FGREP foofoo my2.log && exit 1
+$FGREP barbar my2.log
+$FGREP bazbaz my2.log && exit 1
+
+chmod u+r test-suite.log my.log
+$FGREP bazbaz test-suite.log
+$FGREP bazbaz my.log
+
+:
diff --git a/t/parallel-tests-no-color-in-log.sh b/t/parallel-tests-no-color-in-log.sh
new file mode 100644
index 000000000..0c4a7b6cf
--- /dev/null
+++ b/t/parallel-tests-no-color-in-log.sh
@@ -0,0 +1,53 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Colorized output from the testsuite report shouldn't end up in log files.
+
+required='grep-nonprint'
+. test-init.sh
+
+TERM=ansi; export TERM
+
+cat >>configure.ac <<END
+AC_OUTPUT
+END
+
+cat >Makefile.am <<'END'
+LOG_COMPILER = $(SHELL)
+AUTOMAKE_OPTIONS = color-tests
+TESTS = pass fail skip xpass xfail error
+XFAIL_TESTS = xpass xfail
+END
+
+echo 'exit 0' > pass
+echo 'exit 0' > xpass
+echo 'exit 1' > fail
+echo 'exit 1' > xfail
+echo 'exit 77' > skip
+echo 'exit 99' > error
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+./configure
+mv config.log config-log # Avoid possible false positives below.
+run_make -e FAIL AM_COLOR_TESTS=always check
+# Not a useless use of cat; see above comments "grep-nonprinting"
+# requirement in 'test-init.sh'.
+cat *.log | grep "$esc" && exit 1
+
+:
diff --git a/t/parallel-tests-no-spurious-summary.sh b/t/parallel-tests-no-spurious-summary.sh
new file mode 100644
index 000000000..888a60042
--- /dev/null
+++ b/t/parallel-tests-no-spurious-summary.sh
@@ -0,0 +1,65 @@
+#! /bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that ':test-results:' directives in test scripts' output doesn't
+# originate spurious results in the testsuite summary.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TESTS = foo.test bar.test
+END
+
+cat > foo.test <<'END'
+#! /bin/sh
+echo :test-result:XFAIL
+echo :test-result: SKIP
+echo :test-result:ERROR
+exit 0
+END
+cat > bar.test <<'END'
+#! /bin/sh
+echo :test-result: ERROR
+echo :test-result:FAIL
+echo :test-result: XPASS
+exit 0
+END
+chmod a+x foo.test bar.test
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+run_make -O -e IGNORE check
+cat test-suite.log
+cat foo.log
+cat bar.log
+test $am_make_rc -eq 0
+
+grep '^:test-result:XFAIL$' foo.log
+grep '^:test-result: SKIP$' foo.log
+grep '^:test-result:FAIL$' bar.log
+grep '^:test-result: XPASS$' bar.log
+
+count_test_results total=2 pass=2 fail=0 skip=0 xfail=0 xpass=0 error=0
+
+:
diff --git a/t/parallel-tests-once.sh b/t/parallel-tests-once.sh
new file mode 100644
index 000000000..add9cf4eb
--- /dev/null
+++ b/t/parallel-tests-once.sh
@@ -0,0 +1,47 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Tests shouldn't be run multiple times by a simple "make check" in a
+# clean directory. An early implementation of the '.trs' intermediate
+# files incurred a similar problem.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TESTS = foo.test
+END
+
+cat > foo.test <<'END'
+#! /bin/sh
+test -f foo.run && exit 1
+: > foo.run
+END
+chmod a+x foo.test
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+$MAKE check
+test -f foo.run # Sanity check.
+
+:
diff --git a/t/parallel-tests-recheck-depends-on-all.sh b/t/parallel-tests-recheck-depends-on-all.sh
new file mode 100644
index 000000000..736f4708a
--- /dev/null
+++ b/t/parallel-tests-recheck-depends-on-all.sh
@@ -0,0 +1,89 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# The parallel-tests 'recheck' target must depend on the 'all' target.
+# See automake bug#11252.
+
+required='cc native'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+all-local:
+ test ! -f status || echo okokok > status
+bin_PROGRAMS = foo
+TESTS = a.test b.test c.test
+END
+
+cat > foo.c << 'END'
+#include <stdio.h>
+int main (void)
+{
+ printf ("failure :-(" "\n");
+ return 1;
+}
+END
+
+cat > a.test << 'END'
+#!/bin/sh
+exit 0
+END
+
+cat > b.test << 'END'
+#!/bin/sh
+grep okokok status
+END
+
+cat > c.test << 'END'
+#!/bin/sh
+./foo
+END
+
+chmod a+x *.test
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+./configure
+
+run_make -O -e FAIL check
+count_test_results total=3 pass=1 fail=2 skip=0 xfail=0 xpass=0 error=0
+test ! -e status
+
+$sleep
+: > status
+cat > foo.c << 'END'
+#include <stdio.h>
+int main (void)
+{
+ printf ("success :-)" "\n");
+ return 0;
+}
+END
+
+run_make -O recheck
+count_test_results total=2 pass=2 fail=0 skip=0 xfail=0 xpass=0 error=0
+grep '^PASS: b\.test$' stdout
+grep '^PASS: c\.test$' stdout
+
+run_make -O recheck
+count_test_results total=0 pass=0 fail=0 skip=0 xfail=0 xpass=0 error=0
+
+:
diff --git a/t/parallel-tests-recheck-pr11791.sh b/t/parallel-tests-recheck-pr11791.sh
new file mode 100644
index 000000000..ffb99d4f7
--- /dev/null
+++ b/t/parallel-tests-recheck-pr11791.sh
@@ -0,0 +1,85 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# parallel-tests: "make recheck" and "make -k recheck" in the face of
+# build failures for the test cases. See automake bug#11791.
+
+required='cc native'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TESTS = $(EXTRA_PROGRAMS)
+EXTRA_PROGRAMS = foo
+END
+
+echo 'int main (void) { return 1; }' > foo.c
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+run_make -O -e FAIL check
+count_test_results total=1 pass=0 fail=1 xpass=0 xfail=0 skip=0 error=0
+
+using_gmake || $sleep # Required by BSD make.
+run_make -O -e IGNORE -- -k recheck
+# Don't trust the exit status of "make -k" for non-GNU makes.
+! using_gmake || test $am_make_rc -gt 0 || exit 1
+count_test_results total=1 pass=0 fail=1 xpass=0 xfail=0 skip=0 error=0
+
+# Introduce an error in foo.c, that should cause a compilation failure.
+$sleep
+echo choke me >> foo.c
+
+run_make -O -e FAIL recheck
+# We don't get a change to run the testsuite.
+$EGREP '(X?PASS|X?FAIL|SKIP|ERROR):' stdout && exit 1
+# These shouldn't be removed, otherwise the next make recheck will do
+# nothing.
+test -f foo.log
+test -f foo.trs
+
+using_gmake || $sleep # Required by BSD make.
+run_make -O -e IGNORE -- -k recheck
+# Don't trust the exit status of "make -k" for non-GNU makes.
+! using_gmake || test $am_make_rc -gt 0 || exit 1
+# We don't get a change to run the testsuite.
+$EGREP '(X?PASS|X?FAIL|SKIP|ERROR):' stdout && exit 1
+test -f foo.log
+test -f foo.trs
+
+# "Repair" foo.c, and expect everything to work.
+$sleep
+echo 'int main (void) { return 0; }' > foo.c
+
+run_make -O recheck
+count_test_results total=1 pass=1 fail=0 xpass=0 xfail=0 skip=0 error=0
+test -f foo.log
+test -f foo.trs
+
+run_make -O recheck
+count_test_results total=0 pass=0 fail=0 xpass=0 xfail=0 skip=0 error=0
+test -f foo.log
+test -f foo.trs
+
+:
diff --git a/t/parallel-tests-recheck.sh b/t/parallel-tests-recheck.sh
new file mode 100644
index 000000000..2ea07d1a8
--- /dev/null
+++ b/t/parallel-tests-recheck.sh
@@ -0,0 +1,82 @@
+#! /bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check parallel-tests features:
+# - recheck
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TEST_SUITE_LOG = mylog.log
+TESTS = foo.test bar.test baz.test
+check_SCRIPTS = bla
+CLEANFILES = bla
+bla:
+ echo bla > $@
+END
+
+cat > foo.test <<'END'
+#! /bin/sh
+echo "this is $0"
+test -f bla || exit 1
+exit 0
+END
+cat > bar.test <<'END'
+#! /bin/sh
+echo "this is $0"
+exit 99
+END
+cat > baz.test <<'END'
+#! /bin/sh
+echo "this is $0"
+exit 1
+END
+chmod a+x foo.test bar.test baz.test
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+run_make -O -e FAIL check
+count_test_results total=3 pass=1 fail=1 skip=0 xfail=0 xpass=0 error=1
+
+# Running this two times in a row should produce the same results the
+# second time.
+for i in 1 2; do
+ using_gmake || $sleep # Required by BSD make.
+ run_make -O -e FAIL recheck
+ count_test_results total=2 pass=0 fail=1 skip=0 xfail=0 xpass=0 error=1
+ grep 'foo\.test' stdout && exit 1
+ grep '^ERROR: bar\.test$' stdout
+ grep '^FAIL: baz\.test$' stdout
+done
+
+# Ensure that recheck builds check_SCRIPTS, and that
+# recheck reruns nothing if check has not been run.
+$MAKE clean
+$MAKE recheck
+test -f bla
+test ! -e foo.log
+test ! -e bar.log
+test ! -e baz.log
+test -f mylog.log
+
+:
diff --git a/t/parallel-tests-reset-term.sh b/t/parallel-tests-reset-term.sh
new file mode 100644
index 000000000..01cf4f9cc
--- /dev/null
+++ b/t/parallel-tests-reset-term.sh
@@ -0,0 +1,62 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that the testsuite harness correctly handle overrides of the
+# TERM variable by either TESTS_ENVIRONMENT and AM_TESTS_ENVIRONMENT.
+
+required='grep-nonprint'
+. test-init.sh
+
+TERM=ansi; export TERM
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AM_COLOR_TESTS = always
+AUTOMAKE_OPTIONS = color-tests
+TESTS = foobar
+END
+
+cat > foobar << 'END'
+#!/bin/sh
+echo "TERM='$TERM'"
+test x"$TERM" = x"dumb"
+END
+chmod a+x foobar
+
+mkcheck ()
+{
+ run_make -O -e IGNORE "$@" check
+ cat stdout
+ cat foobar.log
+ cat test-suite.log
+ return $am_make_rc
+}
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+./configure
+
+mkcheck TESTS_ENVIRONMENT='TERM=dumb'
+cat stdout | grep "PASS.*foobar" | grep "$esc\\["
+
+mkcheck AM_TESTS_ENVIRONMENT='TERM=dumb'
+cat stdout | grep "PASS.*foobar" | grep "$esc\\["
+
+:
diff --git a/t/parallel-tests-subdir.sh b/t/parallel-tests-subdir.sh
new file mode 100644
index 000000000..1647b5b55
--- /dev/null
+++ b/t/parallel-tests-subdir.sh
@@ -0,0 +1,50 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that the parallel test harness creates parent directories for
+# the log files when needed.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TESTS = dir1/foo.test dir2/dir3/foo.test
+TEST_LOG_COMPILER = sh
+END
+
+mkdir dir1 dir2 dir2/dir3
+echo : > dir1/foo.test
+echo : > dir2/dir3/foo.test
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+mkdir build
+cd build
+../configure
+$MAKE check
+find . # For debugging.
+test -f test-suite.log
+test -f dir1/foo.log
+test -f dir1/foo.trs
+test -f dir2/dir3/foo.log
+test -f dir2/dir3/foo.trs
+
+:
diff --git a/t/parallel-tests-suffix-prog.sh b/t/parallel-tests-suffix-prog.sh
new file mode 100644
index 000000000..abddb6439
--- /dev/null
+++ b/t/parallel-tests-suffix-prog.sh
@@ -0,0 +1,77 @@
+#! /bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check parallel-tests features:
+# - suffix rules, with PROGRAMS involved
+# See also sister test 'parallel-tests-suffix.sh'.
+
+required='cc native'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = subdir-objects
+## Note that automake should not match the '/test' part of 'sub/test' as
+## '.test' suffix, nor the '/chk' part of 'sub/chk' as '.chk' suffix.
+TESTS = $(dist_TESTS) $(check_PROGRAMS)
+dist_TESTS = foo.chk bar.test sub/test
+check_PROGRAMS = baz bla.test bli.suff sub/chk
+TEST_EXTENSIONS = .chk .test
+EXTRA_DIST = $(dist_TESTS)
+END
+
+mkdir sub
+
+cat >foo.chk << 'END'
+#! /bin/sh
+exit 0
+END
+chmod a+x foo.chk
+cp foo.chk bar.test
+cp foo.chk sub/test
+
+cat >baz.c << 'END'
+int main (void)
+{
+ return 0;
+}
+END
+cp baz.c bla.c
+cp baz.c bli.c
+cp baz.c sub/chk.c
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+$MAKE check
+ls -l . sub
+test -f foo.log
+test -f bar.log
+test -f baz.log
+test -f bla.log
+test -f bli.suff.log
+test -f sub/chk.log
+test -f sub/test.log
+
+$MAKE distcheck
+
+:
diff --git a/t/parallel-tests-suffix.sh b/t/parallel-tests-suffix.sh
new file mode 100644
index 000000000..47bdccf4c
--- /dev/null
+++ b/t/parallel-tests-suffix.sh
@@ -0,0 +1,62 @@
+#! /bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check parallel-tests features:
+# - suffix rules
+# See also sister test 'parallel-tests-suffix-prog.sh'.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+## Note that automake should not match the '/test' part
+## of 'sub/test' as '.test' suffix.
+TESTS = foo.chk bar.test baz bli.suff sub/test
+TEST_EXTENSIONS = .chk .test
+EXTRA_DIST = $(TESTS)
+END
+
+mkdir sub
+
+cat >foo.chk << 'END'
+#! /bin/sh
+exit 0
+END
+chmod a+x foo.chk
+cp foo.chk bar.test
+cp foo.chk baz
+cp foo.chk bli.suff
+cp foo.chk sub/test
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+$MAKE check
+ls -l . sub
+test -f foo.log
+test -f bar.log
+test -f baz.log
+test -f bli.suff.log
+test -f sub/test.log
+
+$MAKE distcheck
+
+:
diff --git a/t/parallel-tests-trailing-whitespace.sh b/t/parallel-tests-trailing-whitespace.sh
new file mode 100644
index 000000000..f82f76cb3
--- /dev/null
+++ b/t/parallel-tests-trailing-whitespace.sh
@@ -0,0 +1,46 @@
+#! /bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check parallel-tests features:
+# - trailing whitespace in TESTS
+# GNU make 3.80 may expand trailing white space to '.log'.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TESTS = foo $(BAR)
+BAR =
+END
+
+cat >foo <<'END'
+#! /bin/sh
+exit 0
+END
+
+chmod +x ./foo
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+$MAKE check
+
+:
diff --git a/t/parallel-tests-unreadable.sh b/t/parallel-tests-unreadable.sh
new file mode 100644
index 000000000..e57c4c0a8
--- /dev/null
+++ b/t/parallel-tests-unreadable.sh
@@ -0,0 +1,75 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that the testsuite driver copes well with unreadable '.log'
+# and '.trs' files.
+
+. test-init.sh
+
+: > t
+chmod a-r t && test ! -r t || skip_ "you can still read unreadable files"
+rm -f t
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TESTS = foo.test bar.test
+END
+
+cat > foo.test << 'END'
+#! /bin/sh
+echo foofoofoo
+exit 0
+END
+
+cat > bar.test << 'END'
+#! /bin/sh
+echo barbarbar
+exit 77
+END
+
+chmod a+x foo.test bar.test
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+for files in \
+ 'foo.log bar.log' \
+ 'foo.trs bar.trs' \
+ 'foo.trs bar.log' \
+ 'foo.log bar.trs' \
+; do
+ $MAKE check
+ rm -f test-suite.log
+ chmod a-r $files
+ $MAKE test-suite.log || { ls -l; exit 1; }
+ ls -l
+ grep '^foofoofoo$' foo.log
+ grep '^:test-result: PASS' foo.trs
+ grep '^barbarbar$' bar.log
+ grep '^:test-result: SKIP' bar.trs
+ grep '^SKIP: bar' test-suite.log
+ grep '^barbarbar$' test-suite.log
+ $EGREP ':.*foo|foofoofoo' test-suite.log && exit 1
+ : For shells with busted 'set -e'.
+done
+
+:
diff --git a/t/parse.sh b/t/parse.sh
new file mode 100644
index 000000000..06565c497
--- /dev/null
+++ b/t/parse.sh
@@ -0,0 +1,36 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure backslash-newline is treated as whitespace.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = zot
+zot_SOURCES = \
+zar.c\
+doz.c
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+$FGREP zar.cdoz Makefile.in && exit 1
+exit 0
diff --git a/t/per-target-flags.sh b/t/per-target-flags.sh
new file mode 100644
index 000000000..f9bbd32f2
--- /dev/null
+++ b/t/per-target-flags.sh
@@ -0,0 +1,92 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test executable-specific and library-specific flags, both with
+# and without dependency tracking.
+
+. test-init.sh
+
+makefiles='Makefile libMakefile Makefile2 libMakefile2'
+
+cat > configure.ac << END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE([-Wno-extra-portability])
+AC_CONFIG_FILES([$makefiles])
+AC_PROG_CC
+AC_PROG_CXX
+AC_PROG_RANLIB
+AC_OUTPUT
+END
+
+$ACLOCAL
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo
+foo_SOURCES = foo.c
+foo_CFLAGS = -DBAR
+END
+
+cat > libMakefile.am << 'END'
+lib_LIBRARIES = libfoo.a
+libfoo_a_SOURCES = foo.c bar.cc
+libfoo_a_CFLAGS = -DBAR
+libfoo_a_CXXFLAGS = -DZOT
+END
+
+cat - Makefile.am > Makefile2.am << 'END'
+AUTOMAKE_OPTIONS = no-dependencies
+END
+
+cat - libMakefile.am > libMakefile2.am << 'END'
+AUTOMAKE_OPTIONS = no-dependencies
+END
+
+makefiles=$(for mkf in $makefiles; do echo $mkf.in; done)
+
+$AUTOMAKE
+
+# Sanity check.
+for mkf in $makefiles; do test -f $mkf || exit 99; done
+
+# Regression test for missing space.
+$FGREP ')-c' $makefiles && exit 1
+
+# Regression test for botchedly transformed object names.
+$FGREP '.o.o' $makefiles && exit 1
+$FGREP '.obj.obj' $makefiles && exit 1
+$FGREP '.$(OBJEXT).$(OBJEXT)' $makefiles && exit 1
+
+# Watch against non-transformed "foo.$(OBJEXT)", "foo.o" and "foo.obj"
+# (and similarly for bar).
+$EGREP '[^-](foo|bar)\.[o$]' $makefiles && exit 1
+
+# All our programs and libraries have per-target flags, so all
+# the compilers invocations must use an explicit '-c' option.
+grep '\$.COMPILE' $makefiles | grep -v ' -c' && exit 1
+
+$FGREP 'foo-foo.$(OBJEXT)' Makefile.in
+$FGREP 'foo-foo.$(OBJEXT)' Makefile2.in
+$FGREP 'libfoo_a-foo.$(OBJEXT)' libMakefile.in
+$FGREP 'libfoo_a-foo.$(OBJEXT)' libMakefile2.in
+$FGREP 'libfoo_a-bar.$(OBJEXT)' libMakefile.in
+$FGREP 'libfoo_a-bar.$(OBJEXT)' libMakefile2.in
+
+$FGREP '$(foo_CFLAGS)' Makefile.in
+$FGREP '$(foo_CFLAGS)' Makefile2.in
+$FGREP '$(libfoo_a_CFLAGS)' libMakefile.in
+$FGREP '$(libfoo_a_CFLAGS)' libMakefile2.in
+
+:
diff --git a/t/percent.sh b/t/percent.sh
new file mode 100644
index 000000000..e8492e7b7
--- /dev/null
+++ b/t/percent.sh
@@ -0,0 +1,36 @@
+#!/bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure that -Wportability understands %-style pattern
+# rules.
+
+. test-init.sh
+
+cat >>configure.ac <<EOF
+AC_PROG_CC
+EOF
+
+cat >Makefile.am <<EOF
+bin_PROGRAMS = liver
+liver_SOURCES = foo.c
+
+%.o: %.c
+ echo "gnu make extension"
+EOF
+
+$ACLOCAL
+AUTOMAKE_fails -Wportability
+grep 'Makefile.am:4:.*%' stderr
diff --git a/t/percent2.sh b/t/percent2.sh
new file mode 100644
index 000000000..1aabfa72c
--- /dev/null
+++ b/t/percent2.sh
@@ -0,0 +1,39 @@
+#!/bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Another test for -Wportability warning about %-style rules, plus
+# make sure we don't warn about duplicate definition for
+# '${ARCH}/%.$(OBJEXT):'.
+# Report from Ralf Corsepius.
+
+. test-init.sh
+
+cat >>Makefile.am << 'EOF'
+${ARCH}/%.$(OBJEXT): %.S
+ test -d ${ARCH} || mkdir ${ARCH}
+ ${CCASCOMPILE} -o $@ -c $<
+
+${ARCH}/%.$(OBJEXT): %.c
+ test -d ${ARCH} || mkdir ${ARCH}
+ ${COMPILE} -o $@ -c $<
+EOF
+
+$ACLOCAL
+AUTOMAKE_fails
+grep '%.*pattern.*rules' stderr
+
+# No error otherwise.
+$AUTOMAKE -Wno-portability
diff --git a/t/perf/cond.sh b/t/perf/cond.sh
new file mode 100755
index 000000000..07ffb945b
--- /dev/null
+++ b/t/perf/cond.sh
@@ -0,0 +1,56 @@
+#!/bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that many conditions do not lead to combinatorial explosion.
+# (This is related to PR/352.)
+
+. test-init.sh
+
+echo AC_PROG_CC >>configure.ac
+
+cat >Makefile.am <<EOF
+bin_PROGRAMS = a
+a02_LDADD =
+a03_SOURCES =
+EOF
+
+# On this test, Automake 1.7.x would compute all 2**24 = 16777216
+# possible combinations of conditionals (it would do this five times,
+# to define a01_DEPENDENCIES, a02_DEPENDENCIES, a03_OBJECTS,
+# a04_OBJECTS, and to rewrite bin_PROGRAM), eating all memory, swap,
+# or cpu time it can found.
+
+for i in \
+ 01 02 03 04 05 06 07 08 09 10 \
+ 11 12 13 14 15 16 17 18 19 20 \
+ 21 22 23 24
+do
+ unindent >>Makefile.am <<EOF
+ if C$i
+ bin_PROGRAMS += a$i
+ a01_LDADD = foo${i}.o
+ a02_LDADD += bar${i}.o
+ a03_SOURCES += baz${i}.c
+ a04_SOURCES = quux${i}.c
+ endif C$i
+EOF
+ echo "AM_CONDITIONAL([C$i], [:])" >>configure.ac
+done
+
+$ACLOCAL
+$AUTOMAKE
+
+:
diff --git a/t/perf/testsuite-recheck.sh b/t/perf/testsuite-recheck.sh
new file mode 100755
index 000000000..d3c63503e
--- /dev/null
+++ b/t/perf/testsuite-recheck.sh
@@ -0,0 +1,98 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check performance of recheck target in the face of many failed tests.
+# FIXME: this test is not currently able to detect whether the measured
+# FIXME: performance is too low, and FAIL accordingly; it just offers an
+# FIXME: easy way to verify how effective a performance optimization is.
+
+. test-init.sh
+
+count=5000
+
+cat >> configure.ac <<'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am <<END
+count_expected = $count
+TEST_EXTENSIONS = .t
+## Updated later.
+TESTS =
+END
+
+# This should ensure that our timing won't be disturbed by the time
+# that would be actually required to run any of:
+# - the test cases
+# - the test driver executing them
+# - the recipe to create the final test-suite log.
+cat >> Makefile.am << 'END'
+AUTOMAKE_OPTIONS = -Wno-override
+## These should never be run.
+T_LOG_COMPILER = false
+T_LOG_DRIVER = false
+
+# The recipe of this also serves as a sanity check.
+$(TEST_SUITE_LOG):
+## For debugging.
+ @echo "RE-RUN:"; for i in $(TEST_LOGS); do echo " $$i"; done
+## All the test cases should have been re-run.
+ @count_got=`for i in $(TEST_LOGS); do echo $$i; done | wc -l` \
+ && echo "Count expected: $(count_expected)" \
+ && echo "Count obtained: $$count_got" \
+ && test $$count_got -eq $(count_expected)
+## Pre-existing log files of the tests to re-run should have been
+## removed by the 'recheck' target
+ @for i in $(TEST_LOGS); do \
+ test ! -f $$i.log || { echo "$$i.log exists!"; exit 1; }; \
+ done
+## Actually create the target file, for extra safety.
+ @echo dummy > $@
+END
+
+# Updated later.
+: > all
+
+# Temporarily disable shell traces, to avoid bloating the log file.
+set +x
+
+for i in $(seq_ 1 $count); do
+ echo dummy $i > $i.log
+ echo :global-test-result: PASS > $i.trs
+ echo :test-result: PASS >> $i.trs
+ echo :recheck: yes >> $i.trs
+ echo TESTS += $i.t >> Makefile.am
+ echo $i >> all
+done
+
+# Re-enable shell traces.
+set -x
+
+# So that we don't need to create a ton of dummy tests.
+echo '$(TESTS):' >> Makefile.am
+
+head -n 100 Makefile.am || : # For debugging.
+tail -n 100 Makefile.am || : # Likewise.
+cat $count.trs # Likewise, just the last specimen though.
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+$MAKE recheck
+
+:
diff --git a/t/perf/testsuite-summary.sh b/t/perf/testsuite-summary.sh
new file mode 100755
index 000000000..ca8e9a115
--- /dev/null
+++ b/t/perf/testsuite-summary.sh
@@ -0,0 +1,75 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check performanceof recipe generating test-suite.log file and testsuite
+# summary. That has suffered of huge inefficiencies in the past.
+# FIXME: this test is not currently able to detect whether the measured
+# FIXME: performance is too low, and FAIL accordingly; it just offers
+# FIXME: an easy way verify how effective a performance optimization is.
+
+. test-init.sh
+
+count=10000
+
+echo AC_OUTPUT >> configure.ac
+
+cat > Makefile.am <<'END'
+TEST_EXTENSIONS = .t
+## Will be updated later.
+TESTS =
+## None of these should ever be run.
+T_LOG_COMPILER = false
+T_LOG_DRIVER = false
+END
+
+# Temporarily disable shell traces, to avoid bloating the log file.
+set +x
+
+for i in $(seq_ 1 $count); do
+ echo false > $i.t
+ echo dummy $i > $i.log
+ echo :global-test-result: PASS > $i.trs
+ echo :test-result: PASS >> $i.trs
+ echo :copy-in-global-log: yes >> $i.trs
+ echo TESTS += $i.t
+done >> Makefile.am
+
+# Re-enable shell traces.
+set -x
+
+head -n 100 Makefile.am || : # For debugging.
+tail -n 100 Makefile.am || : # Likewise.
+cat $count.trs # Likewise, just the last specimen though.
+
+# So that we don't need to create a ton of dummy tests.
+#echo '$(TESTS):' >> Makefile.am
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+$MAKE test-suite.log >stdout || { cat stdout; exit 1; }
+cat stdout
+
+# Sanity checks.
+grep "^# TOTAL: $count$" stdout
+grep "^dummy $count$" test-suite.log
+specimen=347 # Could be any number <= $count.
+grep "^dummy $specimen$" test-suite.log
+
+:
diff --git a/t/phony.sh b/t/phony.sh
new file mode 100644
index 000000000..d6eeba829
--- /dev/null
+++ b/t/phony.sh
@@ -0,0 +1,32 @@
+#!/bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure .PHONY can be given dependencies several times.
+# From Ralf Corsepius.
+
+. test-init.sh
+
+cat >Makefile.am << 'EOF'
+.PHONY: foo
+.PHONY: bar
+EOF
+
+$ACLOCAL
+$AUTOMAKE
+$FGREP '.PHONY:' Makefile.in # For debugging.
+test $($FGREP -c '.PHONY:' Makefile.in) -eq 3
+
+:
diff --git a/t/pkg-config-macros.sh b/t/pkg-config-macros.sh
new file mode 100644
index 000000000..e4d761fac
--- /dev/null
+++ b/t/pkg-config-macros.sh
@@ -0,0 +1,95 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Try to find the pkg-config '.m4' files and make them easily accessed
+# to the test cases requiring them.
+
+. test-init.sh
+
+echo "# Automatically generated by $me." > get.sh
+echo : >> get.sh
+
+if ver=$(pkg-config --version) && test -n "$ver"; then
+ echo "printf 'pkg-config version: %s\\n' '$ver'" >> get.sh
+else
+ echo "skip_all_ \"'pkg-config' not available\"" >> get.sh
+fi
+
+cat > configure.ac <<'END'
+AC_INIT([pkg], [1.0])
+PKG_CHECK_MODULES([GOBJECT], [gobject-2.0 >= 2.4])
+END
+
+have_pkg_config_macros ()
+{
+ $AUTOCONF && ! $FGREP PKG_CHECK_MODULES configure
+}
+
+if have_pkg_config_macros; then
+ # The pkg-config macros are already available, nothing to do.
+ exit 0
+fi
+
+# Usual locations where pkg.m4 *might* be installed.
+XT_ACLOCAL_PATH=/usr/local/share/aclocal:/usr/share/aclocal
+
+# Find the location of the pkg-config executable.
+oIFS=$IFS dir=
+IFS=:
+for d in $PATH; do
+ IFS=$oIFS
+ if test -f $d/pkg-config || test -f $d/pkg-config.exe; then
+ dir=$d
+ break
+ fi
+done
+IFS=$oIFS
+
+# Now try to use the location of the pkg-config executable to guess
+# where the corresponding pkg.m4 might be installed.
+if test -n "$dir"; then
+ # Only support standard installation layouts.
+ XT_ACLOCAL_PATH=${dir%/bin}/share/aclocal:$XT_ACLOCAL_PATH
+fi
+
+XT_ACLOCAL_PATH=$XT_ACLOCAL_PATH${ACLOCAL_PATH+":$ACLOCAL_PATH"}
+
+# Try once again to fetch the pkg-config macros.
+mkdir m4
+ACLOCAL_PATH=$XT_ACLOCAL_PATH $ACLOCAL -Wno-syntax --install -I m4
+if test -f m4/pkg.m4 && have_pkg_config_macros; then
+ echo "ACLOCAL_PATH='$(pwd)/m4':\$ACLOCAL_PATH" >> get.sh
+ echo "export ACLOCAL_PATH" >> get.sh
+ echo "sed 20q '$(pwd)/m4/pkg.m4' # For debugging." >> get.sh
+else
+ echo "skip_all_ \"pkg-config m4 macros not found\"" >> get.sh
+fi
+
+unset ACLOCAL_PATH
+. ./get.sh
+
+$ACLOCAL --force -I m4 || cat >> get.sh <<'END'
+# We need to use '-Wno-syntax', since we do not want our test suite
+# to fail merely because some third-party '.m4' file is underquoted.
+ACLOCAL="$ACLOCAL -Wno-syntax"
+END
+
+# The pkg-config m4 file(s) we might fetched will be copied in the
+# 'm4' subdirectory of the test directory are going to be needed by
+# other tests, so we must not remove the test directory.
+keep_testdirs=yes
+
+:
diff --git a/t/pluseq.sh b/t/pluseq.sh
new file mode 100644
index 000000000..f769305dc
--- /dev/null
+++ b/t/pluseq.sh
@@ -0,0 +1,30 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test '+=' functionality.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+data_DATA = zar
+data_DATA += doz
+END
+
+$ACLOCAL
+$AUTOMAKE
+$FGREP 'zar doz' Makefile.in
+
+:
diff --git a/t/pluseq10.sh b/t/pluseq10.sh
new file mode 100644
index 000000000..9af0591e5
--- /dev/null
+++ b/t/pluseq10.sh
@@ -0,0 +1,52 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for += and backslashes.
+# Reported by Ralf Corsepius.
+
+. test-init.sh
+
+cat >>configure.ac << 'END'
+AM_CONDITIONAL([A], [true])
+AM_CONDITIONAL([B], [false])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+foo = 0.h
+if A
+foo += a0.h \
+ a1.h
+foo += a2.h \
+ a3.h
+endif
+if B
+foo += b0.h \
+ b1.h
+endif
+
+test:
+ is $(foo) == 0.h a0.h a1.h a2.h a3.h
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+$MAKE test
+
+:
diff --git a/t/pluseq11.sh b/t/pluseq11.sh
new file mode 100644
index 000000000..f65c5bf50
--- /dev/null
+++ b/t/pluseq11.sh
@@ -0,0 +1,52 @@
+#!/bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check for bug in variable concatenation with '+=': an extra backslash
+# is erroneously retained in the final value.
+# See also sister test 'pluseq11b.sh'.
+
+. test-init.sh
+
+cat >>configure.ac <<'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+## Use more line continuation to ensure we are robust and can (hopefully)
+## cope any number of them, and not just one
+FOO = \
+\
+\
+bar
+## Both these two variable additions are required to trigger the bug.
+FOO +=
+FOO += baz
+
+.PHONY: test
+test:
+ case '$(FOO)' in *\\*) exit 1;; *) exit 0;; esac
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '^ *FOO *=.*\\.' Makefile.in && exit 1
+
+$AUTOCONF
+./configure
+$MAKE test
+
+:
diff --git a/t/pluseq2.sh b/t/pluseq2.sh
new file mode 100644
index 000000000..b4f850d0a
--- /dev/null
+++ b/t/pluseq2.sh
@@ -0,0 +1,46 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test '+=' with conditionals.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_CONDITIONAL([CHECK], [true])
+END
+
+cat > Makefile.am << 'END'
+
+if CHECK
+data_DATA = zar
+else
+data_DATA =
+endif
+
+if CHECK
+data_DATA += doz
+else
+data_DATA += dog
+endif
+
+END
+
+$ACLOCAL
+$AUTOMAKE
+grep 'CHECK_TRUE.*zar doz' Makefile.in
+grep 'CHECK_FALSE.*dog' Makefile.in
+
+:
diff --git a/t/pluseq3.sh b/t/pluseq3.sh
new file mode 100644
index 000000000..7c8a8816c
--- /dev/null
+++ b/t/pluseq3.sh
@@ -0,0 +1,50 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Another '+=' test with conditionals.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_CONDITIONAL([CHECK], [true])
+END
+
+cat > Makefile.am << 'END'
+
+if CHECK
+data_DATA = zarrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
+else
+data_DATA =
+endif
+
+if CHECK
+data_DATA += \
+ doz
+else
+data_DATA += dog
+endif
+
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '^@CHECK_TRUE@data_DATA = zarrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr \\$' Makefile.in
+grep "^@CHECK_TRUE@${tab}doz$" Makefile.in
+
+grep '^@CHECK_FALSE@data_DATA = dog$' Makefile.in
+
+:
diff --git a/t/pluseq4.sh b/t/pluseq4.sh
new file mode 100644
index 000000000..df1294518
--- /dev/null
+++ b/t/pluseq4.sh
@@ -0,0 +1,34 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Yet another '+=' test.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo
+CC += -Dwhatever
+END
+
+$ACLOCAL
+$AUTOMAKE
+$FGREP '@CC@ -Dwhatever' Makefile.in
+
+:
diff --git a/t/pluseq5.sh b/t/pluseq5.sh
new file mode 100644
index 000000000..8c4d7ceac
--- /dev/null
+++ b/t/pluseq5.sh
@@ -0,0 +1,60 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for another '+=' problem. Report from Brian Jones.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_CONDITIONAL([CHECK], [true])
+END
+
+cat > Makefile.am << 'END'
+if CHECK
+INCLUDES = abc
+endif
+INCLUDES += def
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+
+# We expect the following diagnostic:
+#
+# Makefile.am:4: cannot apply '+=' because 'INCLUDES' is not defined in
+# Makefile.am:4: the following conditions:
+# Makefile.am:4: !CHECK
+# Makefile.am:4: either define 'INCLUDES' in these conditions, or use
+# Makefile.am:4: '+=' in the same conditions as the definitions.
+
+# Is !CHECK mentioned?
+grep ':.*!CHECK$' stderr
+# Is there only one missing condition?
+test $(grep -c ': ' stderr) -eq 1
+
+# By the way, Automake should suggest using AM_CPPFLAGS,
+# because INCLUDES is an obsolete name.
+grep AM_CPPFLAGS stderr
+
+# A way to suppress the obsolete warning is to use
+# -Wno-obsolete:
+echo 'AUTOMAKE_OPTIONS = -Wno-obsolete' >> Makefile.am
+AUTOMAKE_fails
+grep AM_CPPFLAGS stderr && exit 1
+# !CHECK should still be mentioned.
+grep ':.*!CHECK$' stderr
+
+:
diff --git a/t/pluseq6.sh b/t/pluseq6.sh
new file mode 100644
index 000000000..891454ab5
--- /dev/null
+++ b/t/pluseq6.sh
@@ -0,0 +1,38 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test that '+=' works with standard header-vars.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_SUBST([ZZZ])
+END
+
+# If you do this in a real Makefile.am, I will kill you.
+cat > Makefile.am << 'END'
+mandir += foo
+zq = zzz
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+$FGREP 'mandir' Makefile.in # For debugging.
+$FGREP '@mandir@ foo' Makefile.in
+test $(grep -c '^mandir =' Makefile.in) -eq 1
+
+:
diff --git a/t/pluseq7.sh b/t/pluseq7.sh
new file mode 100644
index 000000000..c457453c7
--- /dev/null
+++ b/t/pluseq7.sh
@@ -0,0 +1,37 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test that '+=' fails when required.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_RANLIB
+END
+
+# If you do this in a real Makefile.am, I will kill you.
+cat > Makefile.am << 'END'
+lib_LIBRARIES = libq.a
+libq_a_SOURCES = q.c
+AR += qq
+END
+
+$ACLOCAL
+AUTOMAKE_fails -Wno-portability
+grep "^Makefile\.am:3:.* AR .* with '=' before .*'+='" stderr
+
+:
diff --git a/t/pluseq8.sh b/t/pluseq8.sh
new file mode 100644
index 000000000..40ceb17c3
--- /dev/null
+++ b/t/pluseq8.sh
@@ -0,0 +1,43 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Another '+=' test. From Paul Berrevoets.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+VAR = \
+ one \
+ two
+VAR += three
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+sed -n -e '/^VAR =/ {
+ :loop
+ p
+ n
+ t clear
+ :clear
+ s/\\$/\\/
+ t loop
+ p
+ n
+ }' Makefile.in | grep three
+
+:
diff --git a/t/pluseq9.sh b/t/pluseq9.sh
new file mode 100644
index 000000000..b6b46a2af
--- /dev/null
+++ b/t/pluseq9.sh
@@ -0,0 +1,71 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test the += diagnostics.
+
+. test-init.sh
+
+cat >>configure.ac << 'END'
+AM_CONDITIONAL([COND1], [true])
+AM_CONDITIONAL([COND2], [true])
+AM_CONDITIONAL([COND3], [true])
+END
+
+cat > Makefile.am << 'END'
+if COND1
+ C = c
+if COND2
+ A = a
+ B = aa
+ C += cc
+else
+ A = b
+ B = bb
+endif
+ A += c
+else
+ A = d
+endif
+A += e
+
+if COND3
+ A += f
+ B = cc
+endif
+B += dd
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+
+# We expect the following diagnostic:
+#
+# Makefile.am:19: cannot apply '+=' because 'B' is not defined in
+# Makefile.am:19: the following conditions:
+# Makefile.am:19: !COND1 and !COND3
+# Makefile.am:19: either define 'B' in these conditions, or use
+# Makefile.am:19: '+=' in the same conditions as the definitions.
+#
+# It would be nice if Automake could print only COND3_FALSE and
+# COND1_FALSE (merging the last two conditions), so we'll support
+# this case in the check too.
+
+grep '[cC]annot apply.*+=' stderr
+grep ': !COND1 and !COND3$' stderr
+# Make sure there is exactly one missing condition.
+test $(grep -c ': ' stderr) -eq 1
+
+:
diff --git a/t/pm/Cond2.pl b/t/pm/Cond2.pl
new file mode 100644
index 000000000..702ed9109
--- /dev/null
+++ b/t/pm/Cond2.pl
@@ -0,0 +1,22 @@
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Catch common programming error:
+# A Condition passed as a string to 'new'.
+
+use Automake::Condition;
+
+my $cond = new Automake::Condition ('TRUE');
+new Automake::Condition ($cond);
diff --git a/t/pm/Cond3.pl b/t/pm/Cond3.pl
new file mode 100644
index 000000000..0ffe9553b
--- /dev/null
+++ b/t/pm/Cond3.pl
@@ -0,0 +1,22 @@
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Catch common programming error:
+# A Condition passed as a string to 'new'.
+
+use Automake::Condition;
+
+my $cond = new Automake::Condition ("COND1_TRUE");
+new Automake::Condition ("$cond");
diff --git a/t/pm/Condition-t.pl b/t/pm/Condition-t.pl
new file mode 100644
index 000000000..fcd971a57
--- /dev/null
+++ b/t/pm/Condition-t.pl
@@ -0,0 +1,327 @@
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+BEGIN {
+ use Config;
+ if (eval { require 5.007_002; } # for CLONE support
+ && $Config{useithreads}
+ && !$ENV{WANT_NO_THREADS})
+ {
+ require threads;
+ import threads;
+ }
+ else
+ {
+ exit 77;
+ }
+}
+use Automake::Condition qw/TRUE FALSE/;
+
+sub test_basics ()
+{
+ my @tests = (# [[Conditions], is_true?, is_false?, string, subst-string, human]
+ [[], 1, 0, 'TRUE', '', 'TRUE'],
+ [['TRUE'], 1, 0, 'TRUE', '', 'TRUE'],
+ [['FALSE'], 0, 1, 'FALSE', '#', 'FALSE'],
+ [['A_TRUE'], 0, 0, 'A_TRUE', '@A_TRUE@', 'A'],
+ [['A_TRUE', 'B_FALSE'],
+ 0, 0, 'A_TRUE B_FALSE', '@A_TRUE@@B_FALSE@', 'A and !B'],
+ [['B_TRUE', 'FALSE'], 0, 1, 'FALSE', '#', 'FALSE'],
+ [['B_TRUE', 'B_FALSE'], 0, 1, 'FALSE', '#', 'FALSE']);
+
+ for (@tests)
+ {
+ my $a = new Automake::Condition @{$_->[0]};
+ return 1
+ if threads->new(sub {
+ return 1 if $_->[1] != $a->true;
+ return 1 if $_->[1] != ($a == TRUE);
+ return 1 if $_->[2] != $a->false;
+ return 1 if $_->[2] != ($a == FALSE);
+ return 1 if $_->[3] ne $a->string;
+ return 1 if $_->[4] ne $a->subst_string;
+ return 1 if $_->[5] ne $a->human;
+ })->join;
+ }
+ return 0;
+}
+
+sub test_true_when ()
+{
+ my $failed = 0;
+
+ my @tests = (# [When,
+ # [Implied-Conditions],
+ # [Not-Implied-Conditions]]
+ [['TRUE'],
+ [['TRUE']],
+ [['A_TRUE'], ['A_TRUE', 'B_FALSE'], ['FALSE']]],
+ [['A_TRUE'],
+ [['TRUE'], ['A_TRUE']],
+ [['A_TRUE', 'B_FALSE'], ['FALSE']]],
+ [['A_TRUE', 'B_FALSE'],
+ [['TRUE'], ['A_TRUE'], ['B_FALSE'], ['A_TRUE', 'B_FALSE']],
+ [['FALSE'], ['C_FALSE'], ['C_FALSE', 'A_TRUE']]]);
+
+ for my $t (@tests)
+ {
+ my $a = new Automake::Condition @{$t->[0]};
+ return 1
+ if threads->new(sub {
+ for my $u (@{$t->[1]})
+ {
+ my $b = new Automake::Condition @$u;
+ return threads->new(sub {
+ if (! $b->true_when ($a))
+ {
+ print "`" . $b->string .
+ "' not implied by `" . $a->string . "'?\n";
+ $failed = 1;
+ }
+ })->join;
+ }
+ for my $u (@{$t->[2]})
+ {
+ my $b = new Automake::Condition @$u;
+ return threads->new(sub {
+ if ($b->true_when ($a))
+ {
+ print "`" . $b->string .
+ "' implied by `" . $a->string . "'?\n";
+ $failed = 1;
+ }
+
+ return threads->new(sub {
+ return 1 if $b->true_when ($a);
+ })->join;
+ })->join;
+ }
+ })->join;
+ }
+ return $failed;
+}
+
+sub test_reduce_and ()
+{
+ my @tests = (# If no conditions are given, TRUE should be returned
+ [[], ["TRUE"]],
+ # An empty condition is TRUE
+ [[""], ["TRUE"]],
+ # A single condition should be passed through unchanged
+ [["FOO"], ["FOO"]],
+ [["FALSE"], ["FALSE"]],
+ [["TRUE"], ["TRUE"]],
+ # TRUE and false should be discarded and overwhelm
+ # the result, respectively
+ [["FOO", "TRUE"], ["FOO"]],
+ [["FOO", "FALSE"], ["FALSE"]],
+ # Repetitions should be removed
+ [["FOO", "FOO"], ["FOO"]],
+ [["TRUE", "FOO", "FOO"], ["FOO"]],
+ [["FOO", "TRUE", "FOO"], ["FOO"]],
+ [["FOO", "FOO", "TRUE"], ["FOO"]],
+ # Two different conditions should be preserved,
+ # but TRUEs should be removed
+ [["FOO", "BAR"], ["BAR,FOO"]],
+ [["TRUE", "FOO", "BAR"], ["BAR,FOO"]],
+ [["FOO", "TRUE", "BAR"], ["BAR,FOO"]],
+ [["FOO", "BAR", "TRUE"], ["BAR,FOO"]],
+ # A condition implied by another condition should be removed.
+ [["FOO BAR", "BAR"], ["FOO BAR"]],
+ [["BAR", "FOO BAR"], ["FOO BAR"]],
+ [["TRUE", "FOO BAR", "BAR"], ["FOO BAR"]],
+ [["FOO BAR", "TRUE", "BAR"], ["FOO BAR"]],
+ [["FOO BAR", "BAR", "TRUE"], ["FOO BAR"]],
+
+ [["BAR FOO", "BAR"], ["BAR FOO"]],
+ [["BAR", "BAR FOO"], ["BAR FOO"]],
+ [["TRUE", "BAR FOO", "BAR"], ["BAR FOO"]],
+ [["BAR FOO", "TRUE", "BAR"], ["BAR FOO"]],
+ [["BAR FOO", "BAR", "TRUE"], ["BAR FOO"]],
+
+ # Check that reduction happens even when there are
+ # two conditions to remove.
+ [["FOO", "FOO BAR", "BAR"], ["FOO BAR"]],
+ [["FOO", "FOO BAR", "BAZ", "FOO BAZ"], ["FOO BAR", "FOO BAZ"]],
+ [["FOO", "FOO BAR", "BAZ", "FOO BAZ", "FOO BAZ BAR"],
+ ["FOO BAZ BAR"]],
+
+ # Duplicated conditionals should be removed.
+ [["FOO", "BAR", "BAR"], ["BAR,FOO"]],
+
+ # Equivalent conditions in different forms should be
+ # reduced: which one is left is unfortunately order
+ # dependent.
+ [["BAR FOO", "FOO BAR"], ["FOO BAR"]],
+ [["FOO BAR", "BAR FOO"], ["BAR FOO"]]);
+
+ my $failed = 0;
+ foreach (@tests)
+ {
+ my ($inref, $outref) = @$_;
+ my @inconds = map { new Automake::Condition $_ } @$inref;
+ return 1
+ if threads->new(sub {
+ my @outconds = map { (new Automake::Condition $_)->string } @$outref;
+ return threads->new(sub {
+ my @res =
+ map { $_->string } (Automake::Condition::reduce_and (@inconds));
+ return threads->new(sub {
+ my $result = join (",", sort @res);
+ my $exresult = join (",", @outconds);
+
+ if ($result ne $exresult)
+ {
+ print '"' . join(",", @$inref) . '" => "' .
+ $result . '" expected "' .
+ $exresult . '"' . "\n";
+ $failed = 1;
+ }
+ return $failed;
+ })->join;
+ })->join;
+ })->join;
+ }
+ return $failed;
+}
+
+sub test_reduce_or ()
+{
+ my @tests = (# If no conditions are given, FALSE should be returned
+ [[], ["FALSE"]],
+ # An empty condition is TRUE
+ [[""], ["TRUE"]],
+ # A single condition should be passed through unchanged
+ [["FOO"], ["FOO"]],
+ [["FALSE"], ["FALSE"]],
+ [["TRUE"], ["TRUE"]],
+ # FALSE and TRUE should be discarded and overwhelm
+ # the result, respectively
+ [["FOO", "TRUE"], ["TRUE"]],
+ [["FOO", "FALSE"], ["FOO"]],
+ # Repetitions should be removed
+ [["FOO", "FOO"], ["FOO"]],
+ [["FALSE", "FOO", "FOO"], ["FOO"]],
+ [["FOO", "FALSE", "FOO"], ["FOO"]],
+ [["FOO", "FOO", "FALSE"], ["FOO"]],
+ # Two different conditions should be preserved,
+ # but FALSEs should be removed
+ [["FOO", "BAR"], ["BAR,FOO"]],
+ [["FALSE", "FOO", "BAR"], ["BAR,FOO"]],
+ [["FOO", "FALSE", "BAR"], ["BAR,FOO"]],
+ [["FOO", "BAR", "FALSE"], ["BAR,FOO"]],
+ # A condition implying another condition should be removed.
+ [["FOO BAR", "BAR"], ["BAR"]],
+ [["BAR", "FOO BAR"], ["BAR"]],
+ [["FALSE", "FOO BAR", "BAR"], ["BAR"]],
+ [["FOO BAR", "FALSE", "BAR"], ["BAR"]],
+ [["FOO BAR", "BAR", "FALSE"], ["BAR"]],
+
+ [["BAR FOO", "BAR"], ["BAR"]],
+ [["BAR", "BAR FOO"], ["BAR"]],
+ [["FALSE", "BAR FOO", "BAR"], ["BAR"]],
+ [["BAR FOO", "FALSE", "BAR"], ["BAR"]],
+ [["BAR FOO", "BAR", "FALSE"], ["BAR"]],
+
+ # Check that reduction happens even when there are
+ # two conditions to remove.
+ [["FOO", "FOO BAR", "BAR"], ["BAR,FOO"]],
+ [["FOO", "FOO BAR", "BAZ", "FOO BAZ"], ["BAZ,FOO"]],
+ [["FOO", "FOO BAR", "BAZ", "FOO BAZ", "FOO BAZ BAR"],
+ ["BAZ,FOO"]],
+
+ # Duplicated conditionals should be removed.
+ [["FOO", "BAR", "BAR"], ["BAR,FOO"]],
+
+ # Equivalent conditions in different forms should be
+ # reduced: which one is left is unfortunately order
+ # dependent.
+ [["BAR FOO", "FOO BAR"], ["FOO BAR"]],
+ [["FOO BAR", "BAR FOO"], ["BAR FOO"]]);
+
+ my $failed = 0;
+ foreach (@tests)
+ {
+ my ($inref, $outref) = @$_;
+ my @inconds = map { new Automake::Condition $_ } @$inref;
+ return 1
+ if threads->new(sub {
+ my @outconds = map { (new Automake::Condition $_)->string } @$outref;
+ return threads->new(sub {
+ my @res =
+ map { $_->string } (Automake::Condition::reduce_or (@inconds));
+ return threads->new(sub {
+ my $result = join (",", sort @res);
+ my $exresult = join (",", @outconds);
+
+ if ($result ne $exresult)
+ {
+ print '"' . join(",", @$inref) . '" => "' .
+ $result . '" expected "' .
+ $exresult . '"' . "\n";
+ $failed = 1;
+ }
+ return $failed;
+ })->join;
+ })->join;
+ })->join;
+ }
+ return $failed;
+}
+
+sub test_merge ()
+{
+ my $cond = new Automake::Condition "COND1_TRUE", "COND2_FALSE";
+ return threads->new(sub {
+ my $other = new Automake::Condition "COND3_FALSE";
+ return threads->new(sub {
+ my $both = $cond->merge ($other);
+ return threads->new(sub {
+ my $both2 = $cond->merge_conds ("COND3_FALSE");
+ return threads->new(sub {
+ $cond = $both->strip ($other);
+ my @conds = $cond->conds;
+ return 1 if $both->string ne "COND1_TRUE COND2_FALSE COND3_FALSE";
+ return 1 if $cond->string ne "COND1_TRUE COND2_FALSE";
+ return 1 if $both != $both2;
+ })->join;
+ })->join;
+ })->join;
+ })->join;
+ return 0;
+}
+
+exit (test_basics
+ || test_true_when
+ || test_reduce_and
+ || test_reduce_or
+ || test_merge);
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/t/pm/Condition.pl b/t/pm/Condition.pl
new file mode 100644
index 000000000..8ebb7c7e2
--- /dev/null
+++ b/t/pm/Condition.pl
@@ -0,0 +1,277 @@
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+use Automake::Condition qw/TRUE FALSE/;
+
+sub test_basics ()
+{
+ my @tests = (# [[Conditions], is_true?, is_false?, string, subst-string, human]
+ [[], 1, 0, 'TRUE', '', 'TRUE'],
+ [['TRUE'], 1, 0, 'TRUE', '', 'TRUE'],
+ [['FALSE'], 0, 1, 'FALSE', '#', 'FALSE'],
+ [['A_TRUE'], 0, 0, 'A_TRUE', '@A_TRUE@', 'A'],
+ [['A_TRUE', 'B_FALSE'],
+ 0, 0, 'A_TRUE B_FALSE', '@A_TRUE@@B_FALSE@', 'A and !B'],
+ [['B_TRUE', 'FALSE'], 0, 1, 'FALSE', '#', 'FALSE'],
+ [['B_TRUE', 'B_FALSE'], 0, 1, 'FALSE', '#', 'FALSE']);
+
+ for (@tests)
+ {
+ my $a = new Automake::Condition @{$_->[0]};
+ return 1 if $_->[1] != $a->true;
+ return 1 if $_->[1] != ($a == TRUE);
+ return 1 if $_->[2] != $a->false;
+ return 1 if $_->[2] != ($a == FALSE);
+ return 1 if $_->[3] ne $a->string;
+ return 1 if $_->[4] ne $a->subst_string;
+ return 1 if $_->[5] ne $a->human;
+ }
+ return 0;
+}
+
+sub test_true_when ()
+{
+ my $failed = 0;
+
+ my @tests = (# [When,
+ # [Implied-Conditions],
+ # [Not-Implied-Conditions]]
+ [['TRUE'],
+ [['TRUE']],
+ [['A_TRUE'], ['A_TRUE', 'B_FALSE'], ['FALSE']]],
+ [['A_TRUE'],
+ [['TRUE'], ['A_TRUE']],
+ [['A_TRUE', 'B_FALSE'], ['FALSE']]],
+ [['A_TRUE', 'B_FALSE'],
+ [['TRUE'], ['A_TRUE'], ['B_FALSE'], ['A_TRUE', 'B_FALSE']],
+ [['FALSE'], ['C_FALSE'], ['C_FALSE', 'A_TRUE']]]);
+
+ for my $t (@tests)
+ {
+ my $a = new Automake::Condition @{$t->[0]};
+ for my $u (@{$t->[1]})
+ {
+ my $b = new Automake::Condition @$u;
+ if (! $b->true_when ($a))
+ {
+ print "`" . $b->string .
+ "' not implied by `" . $a->string . "'?\n";
+ $failed = 1;
+ }
+ }
+ for my $u (@{$t->[2]})
+ {
+ my $b = new Automake::Condition @$u;
+ if ($b->true_when ($a))
+ {
+ print "`" . $b->string .
+ "' implied by `" . $a->string . "'?\n";
+ $failed = 1;
+ }
+
+ return 1 if $b->true_when ($a);
+ }
+ }
+ return $failed;
+}
+
+sub test_reduce_and ()
+{
+ my @tests = (# If no conditions are given, TRUE should be returned
+ [[], ["TRUE"]],
+ # An empty condition is TRUE
+ [[""], ["TRUE"]],
+ # A single condition should be passed through unchanged
+ [["FOO"], ["FOO"]],
+ [["FALSE"], ["FALSE"]],
+ [["TRUE"], ["TRUE"]],
+ # TRUE and false should be discarded and overwhelm
+ # the result, respectively
+ [["FOO", "TRUE"], ["FOO"]],
+ [["FOO", "FALSE"], ["FALSE"]],
+ # Repetitions should be removed
+ [["FOO", "FOO"], ["FOO"]],
+ [["TRUE", "FOO", "FOO"], ["FOO"]],
+ [["FOO", "TRUE", "FOO"], ["FOO"]],
+ [["FOO", "FOO", "TRUE"], ["FOO"]],
+ # Two different conditions should be preserved,
+ # but TRUEs should be removed
+ [["FOO", "BAR"], ["BAR,FOO"]],
+ [["TRUE", "FOO", "BAR"], ["BAR,FOO"]],
+ [["FOO", "TRUE", "BAR"], ["BAR,FOO"]],
+ [["FOO", "BAR", "TRUE"], ["BAR,FOO"]],
+ # A condition implied by another condition should be removed.
+ [["FOO BAR", "BAR"], ["FOO BAR"]],
+ [["BAR", "FOO BAR"], ["FOO BAR"]],
+ [["TRUE", "FOO BAR", "BAR"], ["FOO BAR"]],
+ [["FOO BAR", "TRUE", "BAR"], ["FOO BAR"]],
+ [["FOO BAR", "BAR", "TRUE"], ["FOO BAR"]],
+
+ [["BAR FOO", "BAR"], ["BAR FOO"]],
+ [["BAR", "BAR FOO"], ["BAR FOO"]],
+ [["TRUE", "BAR FOO", "BAR"], ["BAR FOO"]],
+ [["BAR FOO", "TRUE", "BAR"], ["BAR FOO"]],
+ [["BAR FOO", "BAR", "TRUE"], ["BAR FOO"]],
+
+ # Check that reduction happens even when there are
+ # two conditions to remove.
+ [["FOO", "FOO BAR", "BAR"], ["FOO BAR"]],
+ [["FOO", "FOO BAR", "BAZ", "FOO BAZ"], ["FOO BAR", "FOO BAZ"]],
+ [["FOO", "FOO BAR", "BAZ", "FOO BAZ", "FOO BAZ BAR"],
+ ["FOO BAZ BAR"]],
+
+ # Duplicated conditionals should be removed.
+ [["FOO", "BAR", "BAR"], ["BAR,FOO"]],
+
+ # Equivalent conditions in different forms should be
+ # reduced: which one is left is unfortunately order
+ # dependent.
+ [["BAR FOO", "FOO BAR"], ["FOO BAR"]],
+ [["FOO BAR", "BAR FOO"], ["BAR FOO"]]);
+
+ my $failed = 0;
+ foreach (@tests)
+ {
+ my ($inref, $outref) = @$_;
+ my @inconds = map { new Automake::Condition $_ } @$inref;
+ my @outconds = map { (new Automake::Condition $_)->string } @$outref;
+ my @res =
+ map { $_->string } (Automake::Condition::reduce_and (@inconds));
+ my $result = join (",", sort @res);
+ my $exresult = join (",", @outconds);
+
+ if ($result ne $exresult)
+ {
+ print '"' . join(",", @$inref) . '" => "' .
+ $result . '" expected "' .
+ $exresult . '"' . "\n";
+ $failed = 1;
+ }
+ }
+ return $failed;
+}
+
+sub test_reduce_or ()
+{
+ my @tests = (# If no conditions are given, FALSE should be returned
+ [[], ["FALSE"]],
+ # An empty condition is TRUE
+ [[""], ["TRUE"]],
+ # A single condition should be passed through unchanged
+ [["FOO"], ["FOO"]],
+ [["FALSE"], ["FALSE"]],
+ [["TRUE"], ["TRUE"]],
+ # FALSE and TRUE should be discarded and overwhelm
+ # the result, respectively
+ [["FOO", "TRUE"], ["TRUE"]],
+ [["FOO", "FALSE"], ["FOO"]],
+ # Repetitions should be removed
+ [["FOO", "FOO"], ["FOO"]],
+ [["FALSE", "FOO", "FOO"], ["FOO"]],
+ [["FOO", "FALSE", "FOO"], ["FOO"]],
+ [["FOO", "FOO", "FALSE"], ["FOO"]],
+ # Two different conditions should be preserved,
+ # but FALSEs should be removed
+ [["FOO", "BAR"], ["BAR,FOO"]],
+ [["FALSE", "FOO", "BAR"], ["BAR,FOO"]],
+ [["FOO", "FALSE", "BAR"], ["BAR,FOO"]],
+ [["FOO", "BAR", "FALSE"], ["BAR,FOO"]],
+ # A condition implying another condition should be removed.
+ [["FOO BAR", "BAR"], ["BAR"]],
+ [["BAR", "FOO BAR"], ["BAR"]],
+ [["FALSE", "FOO BAR", "BAR"], ["BAR"]],
+ [["FOO BAR", "FALSE", "BAR"], ["BAR"]],
+ [["FOO BAR", "BAR", "FALSE"], ["BAR"]],
+
+ [["BAR FOO", "BAR"], ["BAR"]],
+ [["BAR", "BAR FOO"], ["BAR"]],
+ [["FALSE", "BAR FOO", "BAR"], ["BAR"]],
+ [["BAR FOO", "FALSE", "BAR"], ["BAR"]],
+ [["BAR FOO", "BAR", "FALSE"], ["BAR"]],
+
+ # Check that reduction happens even when there are
+ # two conditions to remove.
+ [["FOO", "FOO BAR", "BAR"], ["BAR,FOO"]],
+ [["FOO", "FOO BAR", "BAZ", "FOO BAZ"], ["BAZ,FOO"]],
+ [["FOO", "FOO BAR", "BAZ", "FOO BAZ", "FOO BAZ BAR"],
+ ["BAZ,FOO"]],
+
+ # Duplicated conditionals should be removed.
+ [["FOO", "BAR", "BAR"], ["BAR,FOO"]],
+
+ # Equivalent conditions in different forms should be
+ # reduced: which one is left is unfortunately order
+ # dependent.
+ [["BAR FOO", "FOO BAR"], ["FOO BAR"]],
+ [["FOO BAR", "BAR FOO"], ["BAR FOO"]]);
+
+ my $failed = 0;
+ foreach (@tests)
+ {
+ my ($inref, $outref) = @$_;
+ my @inconds = map { new Automake::Condition $_ } @$inref;
+ my @outconds = map { (new Automake::Condition $_)->string } @$outref;
+ my @res =
+ map { $_->string } (Automake::Condition::reduce_or (@inconds));
+ my $result = join (",", sort @res);
+ my $exresult = join (",", @outconds);
+
+ if ($result ne $exresult)
+ {
+ print '"' . join(",", @$inref) . '" => "' .
+ $result . '" expected "' .
+ $exresult . '"' . "\n";
+ $failed = 1;
+ }
+ }
+ return $failed;
+}
+
+sub test_merge ()
+{
+ my $cond = new Automake::Condition "COND1_TRUE", "COND2_FALSE";
+ my $other = new Automake::Condition "COND3_FALSE";
+ my $both = $cond->merge ($other);
+ my $both2 = $cond->merge_conds ("COND3_FALSE");
+ $cond = $both->strip ($other);
+ my @conds = $cond->conds;
+ return 1 if $both->string ne "COND1_TRUE COND2_FALSE COND3_FALSE";
+ return 1 if $cond->string ne "COND1_TRUE COND2_FALSE";
+ return 1 if $both != $both2;
+ return 0;
+}
+
+exit (test_basics
+ || test_true_when
+ || test_reduce_and
+ || test_reduce_or
+ || test_merge);
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/t/pm/DisjCon2.pl b/t/pm/DisjCon2.pl
new file mode 100644
index 000000000..26619a2a2
--- /dev/null
+++ b/t/pm/DisjCon2.pl
@@ -0,0 +1,24 @@
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Catch common programming error:
+# A non-Condition reference passed to new.
+
+use Automake::Condition;
+use Automake::DisjConditions;
+
+my $cond = new Automake::Condition ('TRUE');
+my $cond2 = new Automake::DisjConditions ($cond);
+new Automake::DisjConditions ($cond2);
diff --git a/t/pm/DisjCon3.pl b/t/pm/DisjCon3.pl
new file mode 100644
index 000000000..82abb7423
--- /dev/null
+++ b/t/pm/DisjCon3.pl
@@ -0,0 +1,23 @@
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Catch common programming error:
+# A non-reference passed to new.
+
+use Automake::Condition qw/TRUE FALSE/;
+use Automake::DisjConditions;
+
+my $cond = new Automake::Condition ("COND1_TRUE");
+new Automake::DisjConditions ("$cond");
diff --git a/t/pm/DisjConditions-t.pl b/t/pm/DisjConditions-t.pl
new file mode 100644
index 000000000..adcc4201f
--- /dev/null
+++ b/t/pm/DisjConditions-t.pl
@@ -0,0 +1,461 @@
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+BEGIN {
+ use Config;
+ if (eval { require 5.007_002; } # for CLONE support
+ && $Config{useithreads}
+ && !$ENV{WANT_NO_THREADS})
+ {
+ require threads;
+ import threads;
+ }
+ else
+ {
+ exit 77;
+ }
+}
+use Automake::Condition qw/TRUE FALSE/;
+use Automake::DisjConditions;
+
+sub test_basics ()
+{
+ my $true = new Automake::DisjConditions TRUE;
+ my $false = new Automake::DisjConditions FALSE;
+ my $cond = new Automake::Condition "COND1_TRUE", "COND2_FALSE";
+ return threads->new (sub {
+ my $other = new Automake::Condition "COND3_FALSE";
+ my $another = new Automake::Condition "COND3_TRUE", "COND4_FALSE";
+ return threads->new (sub {
+ my $set1 = new Automake::DisjConditions $cond, $other;
+ return threads->new (sub {
+ my $set2 = new Automake::DisjConditions $other, $cond;
+ my $set3 = new Automake::DisjConditions FALSE, $another;
+ return 1 unless $set1 == $set2;
+ return 1 if $set1->false;
+ return 1 if $set1->true;
+ return 1 unless (new Automake::DisjConditions)->false;
+ return 1 if (new Automake::DisjConditions)->true;
+ return 1 unless $true->human eq 'TRUE';
+ return 1 unless $false->human eq 'FALSE';
+ return 1 unless $set1->human eq "(COND1 and !COND2) or (!COND3)";
+ return 1 unless $set2->human eq "(COND1 and !COND2) or (!COND3)";
+ my $one_cond_human = $set1->one_cond->human;
+ return 1 unless $one_cond_human eq "!COND3"
+ || $one_cond_human eq "COND1 and !COND2";
+ return 1 unless $set1->string eq "COND1_TRUE COND2_FALSE | COND3_FALSE";
+
+ my $merged1 = $set1->merge ($set2);
+ my $merged2 = $set1->merge ($cond);
+ my $mult1 = $set1->multiply ($set3);
+ return threads->new (sub {
+ my $mult2 = $set1->multiply ($another);
+ return threads->new (sub {
+ return 1 unless $merged1->simplify->string eq "COND1_TRUE COND2_FALSE | COND3_FALSE";
+ return 1 unless $merged2->simplify->string eq "COND1_TRUE COND2_FALSE | COND3_FALSE";
+ return 1 unless $mult1->string eq "COND1_TRUE COND2_FALSE COND3_TRUE COND4_FALSE";
+ return 1 unless $mult1 == $mult2;
+ return 0;
+ })->join;
+ })->join;
+ })->join;
+ })->join;
+ })->join;
+}
+
+sub build_set (@)
+{
+ my @conds = @_;
+ my @set = ();
+ for my $cond (@conds)
+ {
+ push @set, new Automake::Condition @$cond;
+ }
+ return new Automake::DisjConditions @set;
+}
+
+sub test_invert ()
+{
+ my @tests = ([[["FALSE"]],
+ [["TRUE"]]],
+
+ [[["TRUE"]],
+ [["FALSE"]]],
+
+ [[["COND1_TRUE", "COND2_TRUE"],
+ ["COND3_FALSE", "COND2_TRUE"]],
+ [["COND2_FALSE"],
+ ["COND1_FALSE", "COND3_TRUE"]]],
+
+ [[["COND1_TRUE", "COND2_TRUE"],
+ ["TRUE"]],
+ [["FALSE"]]],
+
+ [[["COND1_TRUE", "COND2_TRUE"],
+ ["FALSE"]],
+ [["COND1_FALSE"],
+ ["COND2_FALSE"]]],
+
+ [[["COND1_TRUE"],
+ ["COND2_FALSE"]],
+ [["COND1_FALSE", "COND2_TRUE"]]]
+ );
+
+ for my $t (@tests)
+ {
+ my $set = build_set @{$t->[0]};
+ return 1
+ if threads->new(sub {
+ my $res = build_set @{$t->[1]};
+ my $inv = $set->invert;
+ if ($inv != $res)
+ {
+ print " (I) " . $set->string . "\n\t"
+ . $inv->string . ' != ' . $res->string . "\n";
+ return 1;
+ }
+ return 0
+ })-> join;
+ }
+ return 0;
+}
+
+sub test_simplify ()
+{
+ my @tests = ([[["FOO_TRUE", "BAR_FALSE", "BAZ_FALSE"],
+ ["FOO_TRUE", "BAR_FALSE", "BAZ_TRUE"]],
+ [["FOO_TRUE", "BAR_FALSE"]]],
+
+ [[["FOO_TRUE", "BAR_FALSE", "BAZ_FALSE"],
+ ["FOO_TRUE", "BAR_FALSE", "BAZ_TRUE"],
+ ["FOO_TRUE", "BAR_TRUE"]],
+ [["FOO_TRUE"]]],
+
+ [[["FOO_TRUE", "BAR_FALSE", "BAZ_FALSE"],
+ ["FOO_TRUE", "BAR_FALSE", "BAZ_TRUE"],
+ ["FOO_TRUE", "BAR_TRUE"],
+ ["FOO_FALSE"]],
+ [["TRUE"]]],
+
+ [[["FOO_TRUE", "BAR_FALSE", "BAZ_FALSE"],
+ ["FOO_TRUE", "BAR_FALSE", "BAZ_TRUE"],
+ ["BAR_TRUE", "BAZ_TRUE"],
+ ["BAR_FALSE", "BAZ_TRUE"]],
+ [["BAZ_TRUE"], ["FOO_TRUE", "BAR_FALSE"]]],
+
+ [[["FOO_TRUE", "BAR_FALSE", "BAZ_FALSE"],
+ ["FOO_TRUE", "BAR_FALSE", "BAZ_TRUE"],
+ ["BAR_TRUE", "BAZ_TRUE"],
+ ["BAR_FALSE", "BAZ_TRUE"],
+ ["FOO_FALSE"]],
+ [["FOO_FALSE"], ["BAZ_TRUE"], ["BAR_FALSE"]]],
+
+ [[["B_TRUE"],
+ ["A_FALSE", "B_TRUE"]],
+ [["B_TRUE"]]],
+
+ [[["B_TRUE"],
+ ["A_FALSE", "B_FALSE", "C_TRUE"],
+ ["A_FALSE", "B_FALSE", "C_FALSE"]],
+ [["A_FALSE"], ["B_TRUE"]]],
+
+ [[["B_TRUE"],
+ ["A_FALSE", "B_FALSE", "C_TRUE"],
+ ["A_FALSE", "B_FALSE", "C_FALSE"],
+ ["A_TRUE", "B_FALSE"]],
+ [["TRUE"]]],
+
+ [[["A_TRUE", "B_TRUE"],
+ ["A_TRUE", "B_FALSE"],
+ ["A_TRUE", "C_FALSE", "D_FALSE"]],
+ [["A_TRUE"]]],
+
+ [[["A_FALSE", "B_FALSE", "C_FALSE", "D_TRUE", "E_FALSE"],
+ ["A_FALSE", "B_FALSE", "C_TRUE", "D_TRUE", "E_TRUE"],
+ ["A_FALSE", "B_TRUE", "C_TRUE", "D_FALSE", "E_TRUE"],
+ ["A_FALSE", "B_TRUE", "C_FALSE", "D_FALSE", "E_FALSE"],
+ ["A_TRUE", "B_TRUE", "C_FALSE", "D_FALSE", "E_FALSE"],
+ ["A_TRUE", "B_TRUE", "C_TRUE", "D_FALSE", "E_TRUE"],
+ ["A_TRUE", "B_FALSE", "C_TRUE", "D_TRUE", "E_TRUE"],
+ ["A_TRUE", "B_FALSE", "C_FALSE", "D_TRUE", "E_FALSE"]],
+ [ ["B_FALSE", "C_FALSE", "D_TRUE", "E_FALSE"],
+ ["B_FALSE", "C_TRUE", "D_TRUE", "E_TRUE"],
+ ["B_TRUE", "C_TRUE", "D_FALSE", "E_TRUE"],
+ ["B_TRUE", "C_FALSE", "D_FALSE", "E_FALSE"]]],
+
+ [[["A_FALSE", "B_FALSE", "C_FALSE", "D_TRUE", "E_FALSE"],
+ ["A_FALSE", "B_FALSE", "C_TRUE", "D_TRUE", "E_TRUE"],
+ ["A_FALSE", "B_TRUE", "C_TRUE", "D_FALSE", "E_TRUE"],
+ ["A_FALSE", "B_TRUE", "C_FALSE", "D_FALSE", "E_FALSE"],
+ ["A_TRUE", "B_TRUE", "C_FALSE", "D_FALSE", "E_FALSE"],
+ ["A_TRUE", "B_TRUE", "C_TRUE", "D_FALSE", "E_TRUE"],
+ ["A_TRUE", "B_FALSE", "C_TRUE", "D_TRUE", "E_TRUE"],
+ ["A_TRUE", "B_FALSE", "C_FALSE", "D_TRUE", "E_FALSE"],
+ ["A_FALSE", "B_FALSE", "C_FALSE", "D_FALSE", "E_FALSE"],
+ ["A_FALSE", "B_FALSE", "C_TRUE", "D_FALSE", "E_TRUE"],
+ ["A_FALSE", "B_TRUE", "C_TRUE", "D_TRUE", "E_TRUE"],
+ ["A_FALSE", "B_TRUE", "C_FALSE", "D_TRUE", "E_FALSE"],
+ ["A_TRUE", "B_TRUE", "C_FALSE", "D_TRUE", "E_FALSE"],
+ ["A_TRUE", "B_TRUE", "C_TRUE", "D_TRUE", "E_TRUE"],
+ ["A_TRUE", "B_FALSE", "C_TRUE", "D_FALSE", "E_TRUE"],
+ ["A_TRUE", "B_FALSE", "C_FALSE", "D_FALSE", "E_FALSE"]],
+ [["C_FALSE", "E_FALSE"],
+ ["C_TRUE", "E_TRUE"]]],
+
+ [[["A_FALSE"],
+ ["A_TRUE", "B_FALSE"],
+ ["A_TRUE", "B_TRUE", "C_FALSE"],
+ ["A_TRUE", "B_TRUE", "C_TRUE", "D_FALSE"],
+ ["A_TRUE", "B_TRUE", "C_TRUE", "D_TRUE", "E_FALSE"],
+ ["A_TRUE", "B_TRUE", "C_TRUE", "D_TRUE", "E_TRUE", "F_FALSE"],
+ ["A_TRUE", "B_TRUE", "C_TRUE", "D_TRUE", "E_TRUE"]],
+ [["TRUE"]]],
+
+ # Simplify should work with up to 31 variables.
+ [[["V01_TRUE", "V02_TRUE", "V03_TRUE", "V04_TRUE", "V05_TRUE",
+ "V06_TRUE", "V07_TRUE", "V08_TRUE", "V09_TRUE", "V10_TRUE",
+ "V11_TRUE", "V12_TRUE", "V13_TRUE", "V14_TRUE", "V15_TRUE",
+ "V16_TRUE", "V17_TRUE", "V18_TRUE", "V19_TRUE", "V20_TRUE",
+ "V21_TRUE", "V22_TRUE", "V23_TRUE", "V24_TRUE", "V25_TRUE",
+ "V26_TRUE", "V27_TRUE", "V28_TRUE", "V29_TRUE", "V30_TRUE",
+ "V31_TRUE"],
+ ["V01_TRUE", "V02_TRUE", "V03_TRUE", "V04_TRUE", "V05_TRUE",
+ "V06_TRUE", "V07_TRUE", "V08_TRUE", "V09_TRUE", "V10_TRUE",
+ "V11_TRUE", "V12_TRUE", "V13_TRUE", "V14_TRUE", "V15_TRUE",
+ "V16_TRUE", "V17_TRUE", "V18_TRUE", "V19_TRUE", "V20_TRUE",
+ "V21_TRUE", "V22_TRUE", "V23_TRUE", "V24_TRUE", "V25_TRUE",
+ "V26_TRUE", "V27_TRUE", "V28_TRUE", "V29_TRUE", "V30_TRUE",
+ "V31_FALSE"],
+ ["V01_FALSE","V02_TRUE", "V03_TRUE", "V04_TRUE", "V05_TRUE",
+ "V06_TRUE", "V07_TRUE", "V08_TRUE", "V09_TRUE", "V10_TRUE",
+ "V11_TRUE", "V12_TRUE", "V13_TRUE", "V14_TRUE", "V15_TRUE",
+ "V16_TRUE", "V17_TRUE", "V18_TRUE", "V19_TRUE", "V20_TRUE",
+ "V21_TRUE", "V22_TRUE", "V23_TRUE", "V24_TRUE", "V25_TRUE",
+ "V26_TRUE", "V27_TRUE", "V28_TRUE", "V29_TRUE", "V30_TRUE",
+ "V31_TRUE"],
+ ["V01_FALSE","V02_TRUE", "V03_TRUE", "V04_TRUE", "V05_TRUE",
+ "V06_TRUE", "V07_TRUE", "V08_TRUE", "V09_TRUE", "V10_TRUE",
+ "V11_TRUE", "V12_TRUE", "V13_TRUE", "V14_TRUE", "V15_TRUE",
+ "V16_TRUE", "V17_TRUE", "V18_TRUE", "V19_TRUE", "V20_TRUE",
+ "V21_TRUE", "V22_TRUE", "V23_TRUE", "V24_TRUE", "V25_TRUE",
+ "V26_TRUE", "V27_TRUE", "V28_TRUE", "V29_TRUE", "V30_TRUE",
+ "V31_FALSE"]],
+ [[ "V02_TRUE", "V03_TRUE", "V04_TRUE", "V05_TRUE",
+ "V06_TRUE", "V07_TRUE", "V08_TRUE", "V09_TRUE", "V10_TRUE",
+ "V11_TRUE", "V12_TRUE", "V13_TRUE", "V14_TRUE", "V15_TRUE",
+ "V16_TRUE", "V17_TRUE", "V18_TRUE", "V19_TRUE", "V20_TRUE",
+ "V21_TRUE", "V22_TRUE", "V23_TRUE", "V24_TRUE", "V25_TRUE",
+ "V26_TRUE", "V27_TRUE", "V28_TRUE", "V29_TRUE", "V30_TRUE"
+ ]]]);
+
+ for my $t (@tests)
+ {
+ my $set = build_set @{$t->[0]};
+ return 1
+ if threads->new(sub {
+ my $res = build_set @{$t->[1]};
+ return threads->new(sub {
+
+ # Make sure simplify() yields the expected result.
+ my $sim = $set->simplify;
+ return threads->new(sub {
+ if ($sim != $res)
+ {
+ print " (S1) " . $set->string . "\n\t"
+ . $sim->string . ' != ' . $res->string . "\n";
+ return 1;
+ }
+
+ # Make sure simplify() is idempotent.
+ my $sim2 = $sim->simplify;
+ return threads->new(sub {
+ if ($sim2 != $sim)
+ {
+ print " (S2) " . $sim->string . "\n\t"
+ . $sim2->string . ' != ' . $sim->string . "\n";
+ return 1;
+ }
+
+ # Also exercise invert() while we are at it.
+
+ my $inv1 = $set->invert->simplify;
+ return threads->new(sub {
+ my $inv2 = $sim->invert->simplify;
+ return threads->new(sub {
+ if ($inv1 != $inv2)
+ {
+ print " (S3) " . $set->string . ", " . $sim->string . "\n\t"
+ . $inv1->string . ' -= ' . $inv2->string . "\n";
+ return 1;
+ }
+ })->join;
+ })->join;
+ })->join;
+ })->join;
+ })->join;
+ })->join;
+ }
+
+ return 0;
+}
+
+sub test_sub_conditions ()
+{
+ my @tests = ([[["FOO_TRUE", "BAR_FALSE", "BAZ_FALSE"],
+ ["FOO_TRUE", "BAR_FALSE", "BAZ_TRUE"],
+ ["FOO_FALSE"]],
+ ["FOO_TRUE"],
+ [["BAR_FALSE", "BAZ_FALSE"],
+ ["BAR_FALSE", "BAZ_TRUE"]]],
+
+ [[["FOO_TRUE", "BAR_FALSE", "BAZ_FALSE"],
+ ["FOO_TRUE", "BAR_FALSE", "BAZ_TRUE"],
+ ["FOO_FALSE"]],
+ ["FOO_TRUE", "BAR_FALSE"],
+ [["BAZ_FALSE"],
+ ["BAZ_TRUE"]]],
+
+ [[["FOO_TRUE", "BAR_FALSE", "BAZ_FALSE"],
+ ["FOO_TRUE", "BAR_FALSE", "BAZ_TRUE"],
+ ["FOO_FALSE"]],
+ ["FOO_TRUE", "BAR_TRUE"],
+ [["FALSE"]]],
+
+ [[["FOO_TRUE", "BAR_FALSE", "BAZ_FALSE"],
+ ["FOO_TRUE", "BAZ_TRUE"],
+ ["FOO_FALSE"]],
+ ["FOO_TRUE", "BAR_TRUE"],
+ [["BAZ_TRUE"]]],
+
+ [[["FOO_TRUE", "BAR_FALSE"],
+ ["FOO_TRUE", "BAR_TRUE"]],
+ ["FOO_TRUE", "BAR_TRUE"],
+ [["TRUE"]]],
+
+ [[["TRUE"]],
+ ["TRUE"],
+ [["TRUE"]]],
+
+ [[["FALSE"]],
+ ["TRUE"],
+ [["FALSE"]]],
+
+ [[["FALSE"]],
+ ["FALSE"],
+ [["FALSE"]]]);
+
+ for my $t (@tests)
+ {
+ my $t1 = build_set @{$t->[0]};
+ return 1
+ if threads->new(sub {
+ my $t2 = new Automake::Condition @{$t->[1]};
+ return threads->new(sub {
+ my $t3 = build_set @{$t->[2]};
+ return threads->new(sub {
+
+ # Make sure sub_conditions() yields the expected result.
+ my $s = $t1->sub_conditions ($t2);
+ threads->new(sub {
+ if ($s != $t3)
+ {
+ print " (SC) " . $t1->string . "\n\t"
+ . $s->string . ' != ' . $t3->string . "\n";
+ return 1;
+ }
+ })->join;
+ })->join;
+ })->join;
+ })->join;
+ }
+}
+
+sub test_ambig ()
+{
+ my @tests = ([[["TRUE"]],
+ ["TRUE"],
+ "multiply defined"],
+ [[["C1_TRUE"]],
+ ["C1_TRUE"],
+ "multiply defined"],
+ [[["TRUE"]],
+ ["C1_FALSE"],
+ "which includes"],
+ [[["C1_TRUE"]],
+ ["C1_TRUE", "C2_TRUE"],
+ "which includes"],
+ [[["C1_TRUE", "C2_TRUE"]],
+ ["C2_TRUE"],
+ "which is included in"],
+ [[["C1_TRUE"]],
+ ["C2_TRUE"],
+ ''],
+ [[["C1_TRUE"],
+ ["C2_FALSE"]],
+ ["C1_FALSE", "C2_TRUE"],
+ '']);
+
+ my $failed = 0;
+ for my $t (@tests)
+ {
+ my $t1 = build_set @{$t->[0]};
+ $failed = 1
+ if threads->new(sub {
+ my $t2 = new Automake::Condition @{$t->[1]};
+ my $t3 = $t->[2];
+ return threads->new(sub {
+ my ($ans, $cond) = $t1->ambiguous_p ("FOO", $t2);
+ return threads->new(sub {
+ if ($t3 && $ans !~ /FOO.*$t3/)
+ {
+ print " (A1) " . $t1->string . " vs. " . $t2->string . "\n\t"
+ . "Error message '$ans' does not match '$t3'\n";
+ return 1;
+ }
+ if (!$t3 && $ans ne '')
+ {
+ print " (A2) " . $t1->string . " vs. " . $t2->string . "\n\t"
+ . "Unexpected error message: $ans\n";
+ return 1;
+ }
+ })->join;
+ })->join;
+ })->join;
+ }
+ return $failed;
+}
+
+exit (test_basics
+ || test_invert
+ || test_simplify
+ || test_sub_conditions
+ || test_ambig);
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/t/pm/DisjConditions.pl b/t/pm/DisjConditions.pl
new file mode 100644
index 000000000..07952f43f
--- /dev/null
+++ b/t/pm/DisjConditions.pl
@@ -0,0 +1,404 @@
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+use Automake::Condition qw/TRUE FALSE/;
+use Automake::DisjConditions;
+
+sub test_basics ()
+{
+ my $true = new Automake::DisjConditions TRUE;
+ my $false = new Automake::DisjConditions FALSE;
+ my $cond = new Automake::Condition "COND1_TRUE", "COND2_FALSE";
+ my $other = new Automake::Condition "COND3_FALSE";
+ my $another = new Automake::Condition "COND3_TRUE", "COND4_FALSE";
+ my $set1 = new Automake::DisjConditions $cond, $other;
+ my $set2 = new Automake::DisjConditions $other, $cond;
+ my $set3 = new Automake::DisjConditions FALSE, $another;
+ return 1 unless $set1 == $set2;
+ return 1 if $set1->false;
+ return 1 if $set1->true;
+ return 1 unless (new Automake::DisjConditions)->false;
+ return 1 if (new Automake::DisjConditions)->true;
+ return 1 unless $true->human eq 'TRUE';
+ return 1 unless $false->human eq 'FALSE';
+ return 1 unless $set1->human eq "(COND1 and !COND2) or (!COND3)";
+ return 1 unless $set2->human eq "(COND1 and !COND2) or (!COND3)";
+ my $one_cond_human = $set1->one_cond->human;
+ return 1 unless $one_cond_human eq "!COND3"
+ || $one_cond_human eq "COND1 and !COND2";
+ return 1 unless $set1->string eq "COND1_TRUE COND2_FALSE | COND3_FALSE";
+
+ my $merged1 = $set1->merge ($set2);
+ my $merged2 = $set1->merge ($cond);
+ my $mult1 = $set1->multiply ($set3);
+ my $mult2 = $set1->multiply ($another);
+ return 1 unless $merged1->simplify->string eq "COND1_TRUE COND2_FALSE | COND3_FALSE";
+ return 1 unless $merged2->simplify->string eq "COND1_TRUE COND2_FALSE | COND3_FALSE";
+ return 1 unless $mult1->string eq "COND1_TRUE COND2_FALSE COND3_TRUE COND4_FALSE";
+ return 1 unless $mult1 == $mult2;
+
+ return 0;
+}
+
+sub build_set (@)
+{
+ my @conds = @_;
+ my @set = ();
+ for my $cond (@conds)
+ {
+ push @set, new Automake::Condition @$cond;
+ }
+ return new Automake::DisjConditions @set;
+}
+
+sub test_invert ()
+{
+ my @tests = ([[["FALSE"]],
+ [["TRUE"]]],
+
+ [[["TRUE"]],
+ [["FALSE"]]],
+
+ [[["COND1_TRUE", "COND2_TRUE"],
+ ["COND3_FALSE", "COND2_TRUE"]],
+ [["COND2_FALSE"],
+ ["COND1_FALSE", "COND3_TRUE"]]],
+
+ [[["COND1_TRUE", "COND2_TRUE"],
+ ["TRUE"]],
+ [["FALSE"]]],
+
+ [[["COND1_TRUE", "COND2_TRUE"],
+ ["FALSE"]],
+ [["COND1_FALSE"],
+ ["COND2_FALSE"]]],
+
+ [[["COND1_TRUE"],
+ ["COND2_FALSE"]],
+ [["COND1_FALSE", "COND2_TRUE"]]]
+ );
+
+ for my $t (@tests)
+ {
+ my $set = build_set @{$t->[0]};
+ my $res = build_set @{$t->[1]};
+ my $inv = $set->invert;
+ if ($inv != $res)
+ {
+ print " (I) " . $set->string . "\n\t"
+ . $inv->string . ' != ' . $res->string . "\n";
+ return 1;
+ }
+ }
+ return 0;
+}
+
+sub test_simplify ()
+{
+ my @tests = ([[["FOO_TRUE", "BAR_FALSE", "BAZ_FALSE"],
+ ["FOO_TRUE", "BAR_FALSE", "BAZ_TRUE"]],
+ [["FOO_TRUE", "BAR_FALSE"]]],
+
+ [[["FOO_TRUE", "BAR_FALSE", "BAZ_FALSE"],
+ ["FOO_TRUE", "BAR_FALSE", "BAZ_TRUE"],
+ ["FOO_TRUE", "BAR_TRUE"]],
+ [["FOO_TRUE"]]],
+
+ [[["FOO_TRUE", "BAR_FALSE", "BAZ_FALSE"],
+ ["FOO_TRUE", "BAR_FALSE", "BAZ_TRUE"],
+ ["FOO_TRUE", "BAR_TRUE"],
+ ["FOO_FALSE"]],
+ [["TRUE"]]],
+
+ [[["FOO_TRUE", "BAR_FALSE", "BAZ_FALSE"],
+ ["FOO_TRUE", "BAR_FALSE", "BAZ_TRUE"],
+ ["BAR_TRUE", "BAZ_TRUE"],
+ ["BAR_FALSE", "BAZ_TRUE"]],
+ [["BAZ_TRUE"], ["FOO_TRUE", "BAR_FALSE"]]],
+
+ [[["FOO_TRUE", "BAR_FALSE", "BAZ_FALSE"],
+ ["FOO_TRUE", "BAR_FALSE", "BAZ_TRUE"],
+ ["BAR_TRUE", "BAZ_TRUE"],
+ ["BAR_FALSE", "BAZ_TRUE"],
+ ["FOO_FALSE"]],
+ [["FOO_FALSE"], ["BAZ_TRUE"], ["BAR_FALSE"]]],
+
+ [[["B_TRUE"],
+ ["A_FALSE", "B_TRUE"]],
+ [["B_TRUE"]]],
+
+ [[["B_TRUE"],
+ ["A_FALSE", "B_FALSE", "C_TRUE"],
+ ["A_FALSE", "B_FALSE", "C_FALSE"]],
+ [["A_FALSE"], ["B_TRUE"]]],
+
+ [[["B_TRUE"],
+ ["A_FALSE", "B_FALSE", "C_TRUE"],
+ ["A_FALSE", "B_FALSE", "C_FALSE"],
+ ["A_TRUE", "B_FALSE"]],
+ [["TRUE"]]],
+
+ [[["A_TRUE", "B_TRUE"],
+ ["A_TRUE", "B_FALSE"],
+ ["A_TRUE", "C_FALSE", "D_FALSE"]],
+ [["A_TRUE"]]],
+
+ [[["A_FALSE", "B_FALSE", "C_FALSE", "D_TRUE", "E_FALSE"],
+ ["A_FALSE", "B_FALSE", "C_TRUE", "D_TRUE", "E_TRUE"],
+ ["A_FALSE", "B_TRUE", "C_TRUE", "D_FALSE", "E_TRUE"],
+ ["A_FALSE", "B_TRUE", "C_FALSE", "D_FALSE", "E_FALSE"],
+ ["A_TRUE", "B_TRUE", "C_FALSE", "D_FALSE", "E_FALSE"],
+ ["A_TRUE", "B_TRUE", "C_TRUE", "D_FALSE", "E_TRUE"],
+ ["A_TRUE", "B_FALSE", "C_TRUE", "D_TRUE", "E_TRUE"],
+ ["A_TRUE", "B_FALSE", "C_FALSE", "D_TRUE", "E_FALSE"]],
+ [ ["B_FALSE", "C_FALSE", "D_TRUE", "E_FALSE"],
+ ["B_FALSE", "C_TRUE", "D_TRUE", "E_TRUE"],
+ ["B_TRUE", "C_TRUE", "D_FALSE", "E_TRUE"],
+ ["B_TRUE", "C_FALSE", "D_FALSE", "E_FALSE"]]],
+
+ [[["A_FALSE", "B_FALSE", "C_FALSE", "D_TRUE", "E_FALSE"],
+ ["A_FALSE", "B_FALSE", "C_TRUE", "D_TRUE", "E_TRUE"],
+ ["A_FALSE", "B_TRUE", "C_TRUE", "D_FALSE", "E_TRUE"],
+ ["A_FALSE", "B_TRUE", "C_FALSE", "D_FALSE", "E_FALSE"],
+ ["A_TRUE", "B_TRUE", "C_FALSE", "D_FALSE", "E_FALSE"],
+ ["A_TRUE", "B_TRUE", "C_TRUE", "D_FALSE", "E_TRUE"],
+ ["A_TRUE", "B_FALSE", "C_TRUE", "D_TRUE", "E_TRUE"],
+ ["A_TRUE", "B_FALSE", "C_FALSE", "D_TRUE", "E_FALSE"],
+ ["A_FALSE", "B_FALSE", "C_FALSE", "D_FALSE", "E_FALSE"],
+ ["A_FALSE", "B_FALSE", "C_TRUE", "D_FALSE", "E_TRUE"],
+ ["A_FALSE", "B_TRUE", "C_TRUE", "D_TRUE", "E_TRUE"],
+ ["A_FALSE", "B_TRUE", "C_FALSE", "D_TRUE", "E_FALSE"],
+ ["A_TRUE", "B_TRUE", "C_FALSE", "D_TRUE", "E_FALSE"],
+ ["A_TRUE", "B_TRUE", "C_TRUE", "D_TRUE", "E_TRUE"],
+ ["A_TRUE", "B_FALSE", "C_TRUE", "D_FALSE", "E_TRUE"],
+ ["A_TRUE", "B_FALSE", "C_FALSE", "D_FALSE", "E_FALSE"]],
+ [["C_FALSE", "E_FALSE"],
+ ["C_TRUE", "E_TRUE"]]],
+
+ [[["A_FALSE"],
+ ["A_TRUE", "B_FALSE"],
+ ["A_TRUE", "B_TRUE", "C_FALSE"],
+ ["A_TRUE", "B_TRUE", "C_TRUE", "D_FALSE"],
+ ["A_TRUE", "B_TRUE", "C_TRUE", "D_TRUE", "E_FALSE"],
+ ["A_TRUE", "B_TRUE", "C_TRUE", "D_TRUE", "E_TRUE", "F_FALSE"],
+ ["A_TRUE", "B_TRUE", "C_TRUE", "D_TRUE", "E_TRUE"]],
+ [["TRUE"]]],
+
+ # Simplify should work with up to 31 variables.
+ [[["V01_TRUE", "V02_TRUE", "V03_TRUE", "V04_TRUE", "V05_TRUE",
+ "V06_TRUE", "V07_TRUE", "V08_TRUE", "V09_TRUE", "V10_TRUE",
+ "V11_TRUE", "V12_TRUE", "V13_TRUE", "V14_TRUE", "V15_TRUE",
+ "V16_TRUE", "V17_TRUE", "V18_TRUE", "V19_TRUE", "V20_TRUE",
+ "V21_TRUE", "V22_TRUE", "V23_TRUE", "V24_TRUE", "V25_TRUE",
+ "V26_TRUE", "V27_TRUE", "V28_TRUE", "V29_TRUE", "V30_TRUE",
+ "V31_TRUE"],
+ ["V01_TRUE", "V02_TRUE", "V03_TRUE", "V04_TRUE", "V05_TRUE",
+ "V06_TRUE", "V07_TRUE", "V08_TRUE", "V09_TRUE", "V10_TRUE",
+ "V11_TRUE", "V12_TRUE", "V13_TRUE", "V14_TRUE", "V15_TRUE",
+ "V16_TRUE", "V17_TRUE", "V18_TRUE", "V19_TRUE", "V20_TRUE",
+ "V21_TRUE", "V22_TRUE", "V23_TRUE", "V24_TRUE", "V25_TRUE",
+ "V26_TRUE", "V27_TRUE", "V28_TRUE", "V29_TRUE", "V30_TRUE",
+ "V31_FALSE"],
+ ["V01_FALSE","V02_TRUE", "V03_TRUE", "V04_TRUE", "V05_TRUE",
+ "V06_TRUE", "V07_TRUE", "V08_TRUE", "V09_TRUE", "V10_TRUE",
+ "V11_TRUE", "V12_TRUE", "V13_TRUE", "V14_TRUE", "V15_TRUE",
+ "V16_TRUE", "V17_TRUE", "V18_TRUE", "V19_TRUE", "V20_TRUE",
+ "V21_TRUE", "V22_TRUE", "V23_TRUE", "V24_TRUE", "V25_TRUE",
+ "V26_TRUE", "V27_TRUE", "V28_TRUE", "V29_TRUE", "V30_TRUE",
+ "V31_TRUE"],
+ ["V01_FALSE","V02_TRUE", "V03_TRUE", "V04_TRUE", "V05_TRUE",
+ "V06_TRUE", "V07_TRUE", "V08_TRUE", "V09_TRUE", "V10_TRUE",
+ "V11_TRUE", "V12_TRUE", "V13_TRUE", "V14_TRUE", "V15_TRUE",
+ "V16_TRUE", "V17_TRUE", "V18_TRUE", "V19_TRUE", "V20_TRUE",
+ "V21_TRUE", "V22_TRUE", "V23_TRUE", "V24_TRUE", "V25_TRUE",
+ "V26_TRUE", "V27_TRUE", "V28_TRUE", "V29_TRUE", "V30_TRUE",
+ "V31_FALSE"]],
+ [[ "V02_TRUE", "V03_TRUE", "V04_TRUE", "V05_TRUE",
+ "V06_TRUE", "V07_TRUE", "V08_TRUE", "V09_TRUE", "V10_TRUE",
+ "V11_TRUE", "V12_TRUE", "V13_TRUE", "V14_TRUE", "V15_TRUE",
+ "V16_TRUE", "V17_TRUE", "V18_TRUE", "V19_TRUE", "V20_TRUE",
+ "V21_TRUE", "V22_TRUE", "V23_TRUE", "V24_TRUE", "V25_TRUE",
+ "V26_TRUE", "V27_TRUE", "V28_TRUE", "V29_TRUE", "V30_TRUE"
+ ]]]);
+
+ for my $t (@tests)
+ {
+ my $set = build_set @{$t->[0]};
+ my $res = build_set @{$t->[1]};
+
+ # Make sure simplify() yields the expected result.
+ my $sim = $set->simplify;
+ if ($sim != $res)
+ {
+ print " (S1) " . $set->string . "\n\t"
+ . $sim->string . ' != ' . $res->string . "\n";
+ return 1;
+ }
+
+ # Make sure simplify() is idempotent.
+ my $sim2 = $sim->simplify;
+ if ($sim2 != $sim)
+ {
+ print " (S2) " . $sim->string . "\n\t"
+ . $sim2->string . ' != ' . $sim->string . "\n";
+ return 1;
+ }
+
+ # Also exercise invert() while we are at it.
+
+ my $inv1 = $set->invert->simplify;
+ my $inv2 = $sim->invert->simplify;
+ if ($inv1 != $inv2)
+ {
+ print " (S3) " . $set->string . ", " . $sim->string . "\n\t"
+ . $inv1->string . ' != ' . $inv2->string . "\n";
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
+sub test_sub_conditions ()
+{
+ my @tests = ([[["FOO_TRUE", "BAR_FALSE", "BAZ_FALSE"],
+ ["FOO_TRUE", "BAR_FALSE", "BAZ_TRUE"],
+ ["FOO_FALSE"]],
+ ["FOO_TRUE"],
+ [["BAR_FALSE", "BAZ_FALSE"],
+ ["BAR_FALSE", "BAZ_TRUE"]]],
+
+ [[["FOO_TRUE", "BAR_FALSE", "BAZ_FALSE"],
+ ["FOO_TRUE", "BAR_FALSE", "BAZ_TRUE"],
+ ["FOO_FALSE"]],
+ ["FOO_TRUE", "BAR_FALSE"],
+ [["BAZ_FALSE"],
+ ["BAZ_TRUE"]]],
+
+ [[["FOO_TRUE", "BAR_FALSE", "BAZ_FALSE"],
+ ["FOO_TRUE", "BAR_FALSE", "BAZ_TRUE"],
+ ["FOO_FALSE"]],
+ ["FOO_TRUE", "BAR_TRUE"],
+ [["FALSE"]]],
+
+ [[["FOO_TRUE", "BAR_FALSE", "BAZ_FALSE"],
+ ["FOO_TRUE", "BAZ_TRUE"],
+ ["FOO_FALSE"]],
+ ["FOO_TRUE", "BAR_TRUE"],
+ [["BAZ_TRUE"]]],
+
+ [[["FOO_TRUE", "BAR_FALSE"],
+ ["FOO_TRUE", "BAR_TRUE"]],
+ ["FOO_TRUE", "BAR_TRUE"],
+ [["TRUE"]]],
+
+ [[["TRUE"]],
+ ["TRUE"],
+ [["TRUE"]]],
+
+ [[["FALSE"]],
+ ["TRUE"],
+ [["FALSE"]]],
+
+ [[["FALSE"]],
+ ["FALSE"],
+ [["FALSE"]]]);
+
+ for my $t (@tests)
+ {
+ my $t1 = build_set @{$t->[0]};
+ my $t2 = new Automake::Condition @{$t->[1]};
+ my $t3 = build_set @{$t->[2]};
+
+ # Make sure sub_conditions() yields the expected result.
+ my $s = $t1->sub_conditions ($t2);
+ if ($s != $t3)
+ {
+ print " (SC) " . $t1->string . "\n\t"
+ . $s->string . ' != ' . $t3->string . "\n";
+ return 1;
+ }
+ }
+}
+
+sub test_ambig ()
+{
+ my @tests = ([[["TRUE"]],
+ ["TRUE"],
+ "multiply defined"],
+ [[["C1_TRUE"]],
+ ["C1_TRUE"],
+ "multiply defined"],
+ [[["TRUE"]],
+ ["C1_FALSE"],
+ "which includes"],
+ [[["C1_TRUE"]],
+ ["C1_TRUE", "C2_TRUE"],
+ "which includes"],
+ [[["C1_TRUE", "C2_TRUE"]],
+ ["C2_TRUE"],
+ "which is included in"],
+ [[["C1_TRUE"]],
+ ["C2_TRUE"],
+ ''],
+ [[["C1_TRUE"],
+ ["C2_FALSE"]],
+ ["C1_FALSE", "C2_TRUE"],
+ '']);
+
+ for my $t (@tests)
+ {
+ my $t1 = build_set @{$t->[0]};
+ my $t2 = new Automake::Condition @{$t->[1]};
+ my $t3 = $t->[2];
+ my ($ans, $cond) = $t1->ambiguous_p ("FOO", $t2);
+ if ($t3 && $ans !~ /FOO.*$t3/)
+ {
+ print " (A1) " . $t1->string . " vs. " . $t2->string . "\n\t"
+ . "Error message '$ans' does not match '$t3'\n";
+ return 1;
+ }
+ if (!$t3 && $ans ne '')
+ {
+ print " (A2) " . $t1->string . " vs. " . $t2->string . "\n\t"
+ . "Unexpected error message: $ans\n";
+ return 1;
+ }
+ }
+ return 0;
+}
+
+exit (test_basics
+ || test_invert
+ || test_simplify
+ || test_sub_conditions
+ || test_ambig);
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/t/pm/Version.pl b/t/pm/Version.pl
new file mode 100644
index 000000000..764478a2f
--- /dev/null
+++ b/t/pm/Version.pl
@@ -0,0 +1,129 @@
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+use Automake::Version;
+
+my $failed = 0;
+
+sub test_version_compare
+{
+ my ($left, $right, $result) = @_;
+ my @leftver = Automake::Version::split ($left);
+ my @rightver = Automake::Version::split ($right);
+ if ($#leftver == -1)
+ {
+ print "can't grok \"$left\"\n";
+ $failed = 1;
+ return;
+ }
+ if ($#rightver == -1)
+ {
+ print "can't grok \"$right\"\n";
+ $failed = 1;
+ return;
+ }
+ my $res = Automake::Version::compare (@leftver, @rightver);
+ if ($res != $result)
+ {
+ print "compare (\"$left\", \"$right\") = $res! (not $result?)\n";
+ $failed = 1;
+ }
+
+ my $check_expected = ($result == 0 || $result == 1) ? 0 : 1;
+ # Exception for 'foo' fork.
+ $check_expected = 1
+ if ($right =~ /foo/ && !($left =~ /foo/));
+
+ my $check = Automake::Version::check ($left, $right);
+ if ($check != $check_expected)
+ {
+ print "check (\"$left\", \"$right\") = $check! (not $check_expected?)\n";
+ $failed = 1;
+ }
+}
+
+sub test_bad_versions
+{
+ my ($ver) = @_;
+ my @version = Automake::Version::split ($ver);
+ if ($#version != -1)
+ {
+ print "shouldn't grok \"$ver\"\n";
+ $failed = 1;
+ }
+}
+
+my @tests = (
+# basics
+ ['1.0', '2.0', -1],
+ ['2.0', '1.0', 1],
+ ['1.2', '1.2', 0],
+ ['1.1', '1.2', -1],
+ ['1.2', '1.1', 1],
+# alphas
+ ['1.4', '1.4g', -1],
+ ['1.4g', '1.5', -1],
+ ['1.4g', '1.4', 1],
+ ['1.5', '1.4g', 1],
+ ['1.4a', '1.4g', -1],
+ ['1.5a', '1.3g', 1],
+ ['1.6a', '1.6a', 0],
+# micros
+ ['1.5.1', '1.5', 1],
+ ['1.5.0', '1.5', 0],
+ ['1.5.4', '1.6.1', -1],
+# micros and alphas
+ ['1.5a', '1.5.1', 1],
+ ['1.5a', '1.5.1a', 1],
+ ['1.5a', '1.5.1f', 1],
+ ['1.5', '1.5.1a', -1],
+ ['1.5.1a', '1.5.1f', -1],
+ ['1.5.1f', '1.5.1a', 1],
+ ['1.5.1f', '1.5.1f', 0],
+# special exceptions
+ ['1.6-p5a', '1.6.5a', 0],
+ ['1.6', '1.6-p5a', -1],
+ ['1.6-p4b', '1.6-p5a', -1],
+ ['1.6-p4b', '1.6-foo', 1],
+ ['1.6-p4b', '1.6a-foo', -1],
+ ['1.6-p5', '1.6.5', 0],
+ ['1.6a-foo', '1.6a-foo', 0],
+);
+
+my @bad_versions = (
+ '', 'a', '1', '1a', '1.2.3.4', '-1.2'
+);
+
+test_version_compare (@{$_}) foreach @tests;
+test_bad_versions ($_) foreach @bad_versions;
+
+exit $failed;
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/t/pm/Version2.pl b/t/pm/Version2.pl
new file mode 100644
index 000000000..4d9bfaa45
--- /dev/null
+++ b/t/pm/Version2.pl
@@ -0,0 +1,20 @@
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# prog_error due to invalid $VERSION.
+
+use Automake::Version;
+
+Automake::Version::check ('', '1.2.3');
diff --git a/t/pm/Version3.pl b/t/pm/Version3.pl
new file mode 100644
index 000000000..aa559b2ee
--- /dev/null
+++ b/t/pm/Version3.pl
@@ -0,0 +1,20 @@
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# prog_error due to invalid $REQUIRED.
+
+use Automake::Version;
+
+Automake::Version::check ('1.2.3', '');
diff --git a/t/pm/Wrap.pl b/t/pm/Wrap.pl
new file mode 100644
index 000000000..4da251128
--- /dev/null
+++ b/t/pm/Wrap.pl
@@ -0,0 +1,112 @@
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+use Automake::Wrap qw/wrap makefile_wrap/;
+
+my $failed = 0;
+
+sub test_wrap
+{
+ my ($in, $exp_out) = @_;
+
+ my $out = &wrap (@$in);
+ if ($out ne $exp_out)
+ {
+ print STDERR "For: @$in\nGot:\n$out\nInstead of:\n$exp_out\n---\n";
+ ++$failed;
+ }
+}
+
+sub test_makefile_wrap
+{
+ my ($in, $exp_out) = @_;
+
+ my $out = &makefile_wrap (@$in);
+ if ($out ne $exp_out)
+ {
+ print STDERR "For: @$in\nGot:\n$out\nInstead of:\n$exp_out\n---\n";
+ ++$failed;
+ }
+}
+
+my @tests = (
+ [["HEAD:", "NEXT:", "CONT", 13, "v" ,"a", "l", "ue", "s", "values"],
+"HEAD:v aCONT
+NEXT:l ueCONT
+NEXT:sCONT
+NEXT:values
+"],
+ [["rule: ", "\t", " \\", 20, "dep1" ,"dep2", "dep3", "dep4", "dep5",
+ "dep06", "dep07", "dep08"],
+"rule: dep1 dep2 \\
+\tdep3 dep4 \\
+\tdep5 dep06 \\
+\tdep07 \\
+\tdep08
+"],
+ [["big header:", "big continuation:", " END", 5, "diag1", "diag2", "diag3"],
+"big header:diag1 END
+big continuation:diag2 END
+big continuation:diag3
+"],
+ [["big header:", "cont: ", " END", 16, "word1", "word2"],
+"big header: END
+cont: word1 END
+cont: word2
+"],
+ [["big header:", "", " END", 16, "w1", "w2 ", "w3"],
+"big header: END
+w1 w2 w3
+"]);
+
+my @makefile_tests = (
+ [["target:"],
+"target:
+"],
+ [["target:", "\t"],
+"target:
+"],
+ [["target:", "\t", "prereq1", "prereq2"],
+"target: prereq1 prereq2
+"],
+ [["target: ", "\t", "this is a long list of prerequisites ending in space",
+ "so that there is no need for another space before the backslash",
+ "unlike in the second line"],
+"target: this is a long list of prerequisites ending in space \\
+\tso that there is no need for another space before the backslash \\
+\tunlike in the second line
+"]);
+
+test_wrap (@{$_}) foreach @tests;
+test_makefile_wrap (@{$_}) foreach @makefile_tests;
+
+exit $failed;
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/t/posixsubst-data.sh b/t/posixsubst-data.sh
new file mode 100644
index 000000000..2dc46237e
--- /dev/null
+++ b/t/posixsubst-data.sh
@@ -0,0 +1,74 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test that POSIX variable expansion '$(var:str=rpl)' works
+# in when used with the DATA primary.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+foodir = $(prefix)
+
+t1 = foo1 foo2
+t2 = barx
+t3 = baz.y
+
+bar.data bazzardoz:
+ : > $@
+CLEANFILES = bar.data bazzardoz
+
+# Also try an empty match suffix, to ensure that the ':=' in there is
+# not confused by the parser with an unportable assignment operator.
+dist_foo_DATA = $(t1:=.txt)
+foo_DATA = $(t2:x=.data)
+nodist_foo_DATA = $(t3:.y=zardoz)
+
+check-local: test
+.PHONY: test
+test: distdir
+ ls -l $(distdir)
+ test ! -r $(distdir)/foo.data
+ test ! -r $(distdir)/bazzardoz
+
+installcheck-local:
+ ls -l $(prefix)
+ test -f $(prefix)/foo1.txt
+ test -f $(prefix)/foo2.txt
+ test -f $(prefix)/bar.data
+ test -f $(prefix)/bazzardoz
+END
+
+: > foo1.txt
+: > foo2.txt
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+cwd=$(pwd) || fatal_ "getting current working directory"
+./configure --prefix="$cwd/_inst"
+$MAKE install
+test -f bar.data
+test -f bazzardoz
+$MAKE test
+$MAKE installcheck
+$MAKE distcheck
+
+:
diff --git a/t/posixsubst-extradist.sh b/t/posixsubst-extradist.sh
new file mode 100644
index 000000000..d821ebf5a
--- /dev/null
+++ b/t/posixsubst-extradist.sh
@@ -0,0 +1,54 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test that POSIX variable expansion '$(var:str=rpl)' works when used
+# in EXTRA_DIST.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+t1 = foo1 foo2
+t2 = bar.x
+t3 = baz-y
+# Also try an empty match suffix, to ensure that the ':=' in there is
+# not confused by the parser with an unportable assignment operator.
+EXTRA_DIST = $(t1:=.c) $(t2:.x=.f) $(t3:-y=ar)
+bazar bar.f:
+ : > $@
+.PHONY: test
+test: distdir
+ ls -l $(distdir)
+ test -f $(distdir)/foo1.c
+ test -f $(distdir)/foo2.c
+ test -f $(distdir)/bar.f
+ test -f $(distdir)/bazar
+END
+
+: > foo1.c
+: > foo2.c
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+$MAKE test
+
+:
diff --git a/t/posixsubst-ldadd.sh b/t/posixsubst-ldadd.sh
new file mode 100644
index 000000000..555360b16
--- /dev/null
+++ b/t/posixsubst-ldadd.sh
@@ -0,0 +1,78 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test that POSIX variable expansion '$(var:str=rpl)' works
+# when used in LDADD.
+
+required=cc
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_RANLIB
+AM_PROG_AR
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+u = libquux1.lib libquux2.lib
+v = libquux1
+w = none
+
+zardozdir = $(prefix)/zardoz
+zardoz_PROGRAMS = foo bar
+
+noinst_LIBRARIES = libquux1.a libquux2.a libquux3.a
+
+# Also try an empty match suffix, to ensure that the ':=' in there is
+# not confused by the parser with an unportable assignment operator.
+LDADD = $(u:.lib=.a)
+bar_LDADD = $(v:=.a) libquux2.a $(w:none=libquux3.a)
+
+libquux1.c:
+ echo 'int quux1(void) { return 0; }' > $@
+CLEANFILES = libquux1.c # For FreeBSD make.
+END
+
+cat > foo.c <<'END'
+int main(void)
+{
+ int quux1(void), quux2(void);
+ return quux1() + quux2();
+}
+END
+
+cat > bar.c <<'END'
+int main(void)
+{
+ int quux1(void), quux2(void), quux3(void);
+ return quux1() + quux2() + quux3();
+}
+END
+
+echo 'int quux2(void) { return 0; }' > libquux2.c
+echo 'int quux3(void) { return 0; }' > libquux3.c
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+$MAKE
+test -f libquux1.c
+$MAKE distcheck
+
+:
diff --git a/t/posixsubst-libraries.sh b/t/posixsubst-libraries.sh
new file mode 100644
index 000000000..b65b756d6
--- /dev/null
+++ b/t/posixsubst-libraries.sh
@@ -0,0 +1,65 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test that POSIX variable expansion '$(var:str=rpl)' works when used
+# with the LIBRARIES primary in a "simple" way.
+# Keep this in sync with sister test 'posixsubst-ltlibraries.sh'.
+
+required=cc
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_RANLIB
+AM_PROG_AR
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+foolibs = libfoo1 libfoo2
+barlibs = libbaz
+
+# Also try an empty match suffix, to ensure that the ':=' in there is
+# not confused by the parser with an unportable assignment operator.
+lib_LIBRARIES = $(foolibs:=.a) $(barlibs:z=r.a)
+
+libbar.c:
+ echo 'int bar(void) { return 0; }' > $@
+CLEANFILES = libbar.c # For FreeBSD make.
+
+installcheck-local:
+ ls -l $(libdir)
+ test -f $(libdir)/libfoo1.a
+ test -f $(libdir)/libfoo2.a
+ test -f $(libdir)/libbar.a
+END
+
+echo 'int bar1(void) { return 0; }' > libfoo1.c
+echo 'int bar2(void) { return 0; }' > libfoo2.c
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+cwd=$(pwd) || fatal_ "getting current working directory"
+./configure --prefix="$cwd/_inst"
+$MAKE
+test -f libfoo2.c
+$MAKE install
+$MAKE installcheck
+$MAKE distcheck
+
+:
diff --git a/t/posixsubst-ltlibraries.sh b/t/posixsubst-ltlibraries.sh
new file mode 100644
index 000000000..37848114f
--- /dev/null
+++ b/t/posixsubst-ltlibraries.sh
@@ -0,0 +1,66 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test that POSIX variable expansion '$(var:str=rpl)' works when used
+# with the LTLIBRARIES primary in a "simple" way.
+# Keep this in sync with sister test 'posixsubst-libraries.sh'.
+
+required='cc libtool libtoolize'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_LIBTOOL
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+foolibs = libfoo1 libfoo2
+barlibs = libbaz
+
+# Also try an empty match suffix, to ensure that the ':=' in there is
+# not confused by the parser with an unportable assignment operator.
+lib_LTLIBRARIES = $(foolibs:=.la) $(barlibs:z=r.la)
+
+libbar.c:
+ echo 'int bar(void) { return 0; }' > $@
+CLEANFILES = libbar.c # For FreeBSD make.
+
+installcheck-local:
+ ls -l $(libdir)
+ test -f $(libdir)/libfoo1.la
+ test -f $(libdir)/libfoo2.la
+ test -f $(libdir)/libbar.la
+END
+
+echo 'int bar1(void) { return 0; }' > libfoo1.c
+echo 'int bar2(void) { return 0; }' > libfoo2.c
+
+libtoolize
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+cwd=$(pwd) || fatal_ "getting current working directory"
+./configure --prefix="$cwd/_inst"
+$MAKE
+test -f libfoo2.c
+$MAKE install
+$MAKE installcheck
+$MAKE distcheck
+
+:
diff --git a/t/posixsubst-programs.sh b/t/posixsubst-programs.sh
new file mode 100644
index 000000000..2a41f049b
--- /dev/null
+++ b/t/posixsubst-programs.sh
@@ -0,0 +1,63 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test that POSIX variable expansion '$(var:str=rpl)' works when used
+# with the PROGRAMS primary.
+
+required=cc
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+t1 = foo1 foo2
+t2 = barx bar2
+
+# Also try an empty match suffix, to ensure that the ':=' in there is
+# not confused by the parser with an unportable assignment operator.
+bin_PROGRAMS = $(t1:=-p) $(t2:2=y)
+
+installcheck-local:
+ ls -l $(prefix)/bin
+ test -f $(prefix)/bin/foo1-p$(EXEEXT)
+ test -x $(prefix)/bin/foo1-p$(EXEEXT)
+ test -f $(prefix)/bin/foo2-p$(EXEEXT)
+ test -x $(prefix)/bin/foo2-p$(EXEEXT)
+ test -f $(prefix)/bin/barx$(EXEEXT)
+ test -x $(prefix)/bin/barx$(EXEEXT)
+ test -f $(prefix)/bin/bary$(EXEEXT)
+ test -x $(prefix)/bin/bary$(EXEEXT)
+END
+
+for f in foo1-p.c foo2-p.c barx.c bary.c; do
+ echo 'int main(void) { return 0; }' > $f
+done
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+cwd=$(pwd) || fatal_ "getting current working directory"
+./configure --prefix="$cwd/_inst"
+$MAKE
+$MAKE install
+$MAKE installcheck
+$MAKE distcheck
+
+:
diff --git a/t/posixsubst-scripts.sh b/t/posixsubst-scripts.sh
new file mode 100644
index 000000000..e3e7257e8
--- /dev/null
+++ b/t/posixsubst-scripts.sh
@@ -0,0 +1,99 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test that POSIX variable expansion '$(var:str=rpl)' works when used
+# with the SCRIPTS primary.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+# We have to be careful with 'test -x' commands on MinGW/MSYS, because
+# the file system does not actually have execute permission information.
+# Instead, that is emulated by looking at the file content, and returning
+# 0 if the file starts with, e.g., a COFF header or with '#!'.
+# So we need to create actual scripts in the make rules and in the file
+# creation below.
+
+cat > Makefile.am << 'END'
+t1 = foo1 foo2
+t2 = bar1x bar2
+t3 = quu-baz
+
+bar1 bar2:
+ (echo '#!/bin/sh' && echo 'exit 0') > $@
+quux.pl:
+ (echo '#!/bin/perl' && echo '1;') > $@
+CLEANFILES = bar1 bar2 quux.pl
+
+# Also try an empty match suffix, to ensure that the ':=' in there is
+# not confused by the parser with an unportable assignment operator.
+dist_sbin_SCRIPTS = $(t1:=.sh)
+libexec_SCRIPTS = $(t2:x=)
+nodist_bin_SCRIPTS = $(t3:-baz=x.pl)
+
+check-local: test1 test2
+.PHONY: test1 test2
+test1:
+ ls -l
+ test -f bar1
+ test -f bar2
+ test -f quux.pl
+test2: distdir
+ ls -l $(distdir)
+## The scripts foo1.sh and foo2.sh should be distributed.
+ test -f $(distdir)/foo1.sh
+ test -f $(distdir)/foo2.sh
+## The scripts bar1, bar2 and quux.pl shouldn't be distributed.
+ test ! -r $(distdir)/bar1
+ test ! -r $(distdir)/bar2
+ test ! -r $(distdir)/quux.pl
+
+installcheck-local:
+ ls -l $(libexecdir) $(bindir) $(sbindir)
+ test -f $(sbindir)/foo1.sh
+ test -x $(sbindir)/foo1.sh
+ test -f $(sbindir)/foo2.sh
+ test -x $(sbindir)/foo2.sh
+ test -f $(libexecdir)/bar1
+ test -x $(libexecdir)/bar1
+ test -f $(libexecdir)/bar2
+ test -x $(libexecdir)/bar2
+ test -f $(bindir)/quux.pl
+ test -x $(bindir)/quux.pl
+END
+
+cat > foo1.sh <<'END'
+#!/bin/sh
+exit 0
+END
+cp foo1.sh foo2.sh
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+cwd=$(pwd) || fatal_ "getting current working directory"
+./configure --prefix="$cwd/_inst"
+$MAKE
+$MAKE test1 test2
+$MAKE install
+$MAKE installcheck
+$MAKE distcheck
+
+:
diff --git a/t/posixsubst-sources.sh b/t/posixsubst-sources.sh
new file mode 100644
index 000000000..0efbf6f1d
--- /dev/null
+++ b/t/posixsubst-sources.sh
@@ -0,0 +1,81 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test that POSIX variable expansion '$(var:str=rpl)' works when used
+# with the SOURCES primary.
+
+required=cc
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo
+
+FOO = foo.cxx
+BAR = bar__
+BAZ = baz.
+
+# Also try an empty match suffix, to ensure that the ':=' in there is
+# not confused by the parser with an unportable assignment operator.
+foo_SOURCES = main.c $(FOO:.cxx=.c)
+dist_foo_SOURCES = $(BAR:__=.c)
+nodist_foo_SOURCES = $(BAZ:=c)
+
+bar.c baz.c:
+ echo 'int $@ (void) { return 0; }' | sed 's/\.c //' > $@
+CLEANFILES = baz.c
+CLEANFILES += bar.c # For FreeBSD make.
+
+.PHONY: test test2
+check-local: test1 test2
+test1:
+ ls -l . $(srcdir)
+ test -f $(srcdir)/bar.c
+ test -f baz.c
+test2: distdir
+ ls -l $(distdir)
+## These sources should be distributed ...
+ test -f $(distdir)/bar.c
+ test -f $(distdir)/foo.c
+ test -f $(distdir)/main.c
+## ... and this shouldn't.
+ test ! -r $(distdir)/baz.c
+END
+
+cat > main.c <<'END'
+int main(void)
+{
+ int foo(void), bar(void), baz(void);
+ return foo() + bar() + baz();
+}
+END
+
+echo 'int foo(void) { return 0; }' > foo.c
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+$MAKE
+$MAKE test1 test2
+$MAKE distcheck
+
+:
diff --git a/t/posixsubst-tests.sh b/t/posixsubst-tests.sh
new file mode 100644
index 000000000..77e6c446b
--- /dev/null
+++ b/t/posixsubst-tests.sh
@@ -0,0 +1,68 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test that POSIX variable expansion '$(var:str=rpl)' works when used
+# with the TESTS special variable.
+
+# For gen-testsuite-part: ==> try-with-serial-tests <==
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+t1 = foo1 foo2
+t2 = barx
+t3 = bar2
+
+foo2.test barz:
+ (echo '#!/bin/sh' && echo 'exit 0') > $@ && chmod a+x $@
+CLEANFILES = foo2.test barz # For FreeBSD make.
+
+# Also try an empty match suffix, to ensure that the ':=' in there is
+# not confused by the parser with an unportable assignment operator.
+TESTS = $(t1:=.test) $(t2:x=y) $(t3:2=z)
+
+EXTRA_DIST = $(TESTS)
+MOSTLYCLEANFILES = *.out
+END
+
+cat > foo1.test <<'END'
+#!/bin/sh
+touch foo1.out
+test x"${TESTSUITE_OK-no}" = x"yes"
+END
+sed 's/foo1/bary/g' foo1.test > bary
+chmod +x foo1.test bary
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+run_make -M -e FAIL check
+ls -l
+grep '^FAIL: foo1\.test *$' output
+grep '^PASS: foo2\.test *$' output
+grep '^FAIL: bary *$' output
+grep '^PASS: barz *$' output
+test -f foo1.out
+test -f bary.out
+
+TESTSUITE_OK=yes $MAKE distcheck
+
+:
diff --git a/t/ppf77.sh b/t/ppf77.sh
new file mode 100644
index 000000000..dcc177331
--- /dev/null
+++ b/t/ppf77.sh
@@ -0,0 +1,34 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure preprocessed F77 works.
+# Report from Jochen Kuepper.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_F77
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = ppf
+ppf_SOURCES = foo.F q.r
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+:
diff --git a/t/pr2.sh b/t/pr2.sh
new file mode 100644
index 000000000..0a7a90daa
--- /dev/null
+++ b/t/pr2.sh
@@ -0,0 +1,48 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for bug reported in PR 2.
+# "make dist" fails for AC_OUTPUT(README.foo:templ/README.foo.in).
+#
+# == Report ==
+# When my AC_OUTPUT macro in configure.ac contains something
+# like the following (among the Makefiles)
+# README.foo:templ/README.foo.in
+# the generated dist target in the Makefile.in fails,
+# because DIST_COMMON will contain templ/README.foo.in
+# and the dist target will try to copy templ/README.foo.in
+# to the distribution directory before it creates a templ
+# subdirectory in the distribution directory.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT([README.foo:templ/README.foo.in])
+END
+
+: > Makefile.am
+
+mkdir templ
+: > templ/README.foo.in
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+$MAKE distdir
+test -f $distdir/templ/README.foo.in
+
+:
diff --git a/t/pr211.sh b/t/pr211.sh
new file mode 100644
index 000000000..367fef3f9
--- /dev/null
+++ b/t/pr211.sh
@@ -0,0 +1,51 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for PR 211.
+#
+# == Description ==
+# Suppose you have a library and an ltlibrary in the same
+# directory which use the same source:
+#
+# libfoo_la_SOURCES = foo.c
+# libbar_a_SOURCES = foo.c
+#
+# In this case foo.c will be compiled twice but using different
+# compilers. This is a conflict. In this case the user should
+# rename one of the 'foo.o' files.
+
+required=libtoolize
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_LIBTOOL
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = helldl
+lib_LTLIBRARIES = libfoo.la
+helldl_SOURCES = foo.c
+libfoo_la_SOURCES = foo.c
+END
+
+libtoolize
+$ACLOCAL
+AUTOMAKE_fails -Wnone -a
+$FGREP 'foo.$(OBJEXT)' stderr
+
+:
diff --git a/t/pr220.sh b/t/pr220.sh
new file mode 100644
index 000000000..a80eb2c7b
--- /dev/null
+++ b/t/pr220.sh
@@ -0,0 +1,58 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for PR automake/220.
+# Test for problems when conditionals are not actually defined.
+# Check that the problems is diagnosed by configure.
+# This isn't perfect (ideally we'd like an error from autoconf),
+# but it is the best we can do. It certainly makes it easier
+# to debug the problem.
+# Note that this should be also in the documentation.
+
+. test-init.sh
+
+cat > Makefile.am << 'EOF'
+if NEVER_TRUE
+NEVER_DEFINED = foo.txt
+endif
+data_DATA = $(NEVER_DEFINED)
+EOF
+
+cat >> configure.ac << 'EOF'
+AC_ARG_ENABLE([foo],
+[ --enable-foo Enable foo],
+[ if test "foo" = "bar" ; then
+ AM_CONDITIONAL([NEVER_TRUE], [true])
+ else
+ AM_CONDITIONAL([NEVER_TRUE], [false])
+ fi
+])
+AC_OUTPUT
+EOF
+
+mkdir build
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+cd build
+# configure should fail since we've done something invalid.
+../configure 2>stderr && { cat stderr >&2; exit 1; }
+cat stderr >&2
+grep 'conditional.*NEVER_TRUE' stderr
+
+:
diff --git a/t/pr224.sh b/t/pr224.sh
new file mode 100644
index 000000000..32fa67b3e
--- /dev/null
+++ b/t/pr224.sh
@@ -0,0 +1,63 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for PR automake/224: $(top_srcdir) w.r.t. dependencies.
+#
+# == Description ==
+# Dependency tracking data should be stored in in the relative path
+# of the source file, as opposed the object file.
+# I.e., for 'foo.c' in '$(top_srcdir)/bar', being built in
+# '$(top_srcdir)/build', the location of the '.deps' directory
+# should be '$(top_builddir)/bar/.deps'.
+
+required=cc
+. test-init.sh
+
+mkdir foo
+
+cat >foo/main.c <<'EOF'
+int main (void)
+{
+ return 0;
+}
+EOF
+
+cat >Makefile.am <<'EOF'
+AUTOMAKE_OPTIONS = subdir-objects
+bin_PROGRAMS = bar
+bar_SOURCES = foo/main.c
+EOF
+
+cat >>configure.ac <<'EOF'
+AC_PROG_CC
+AC_OUTPUT
+EOF
+
+mkdir build
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+cd build
+../configure
+
+$MAKE
+test -f foo/.deps/main.Po
+$MAKE distclean
+test ! -e foo/.deps/main.Po
+
+:
diff --git a/t/pr229.sh b/t/pr229.sh
new file mode 100644
index 000000000..bed6d819a
--- /dev/null
+++ b/t/pr229.sh
@@ -0,0 +1,35 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for PR automake/229.
+# Make sure AC_CYGWIN requires config.{sub,guess}.
+# Reported by James Youngman.
+
+. test-init.sh
+
+cat >> configure.ac <<EOF
+AC_CYGWIN
+EOF
+
+: > Makefile.am
+
+$ACLOCAL
+$AUTOMAKE -a
+
+test -f config.sub
+test -f config.guess
+
+:
diff --git a/t/pr243.sh b/t/pr243.sh
new file mode 100644
index 000000000..9f5b52d9e
--- /dev/null
+++ b/t/pr243.sh
@@ -0,0 +1,57 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for PR 243.
+# AM_OUTPUT_DEPENDENCY_COMMANDS doesn't handle
+# 'Makefile:Makefile.in:tail.mk' in AC_OUTPUT.
+#
+# == Report ==
+# If configure.ac has something like:
+# AC_OUTPUT(Makefile:Makefile.in:tail.mk)
+# then config.status cannot parse the Makefile to build the
+# dependency files in the .deps directory. This is because
+# the AM_OUTPUT_DEPENDENCY_COMMANDS macro cannot cope with
+# the colon in the CONFIG_FILES variable.
+
+required=cc
+. test-init.sh
+
+cat > configure.ac << END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE
+AC_PROG_CC
+AC_CONFIG_FILES([Makefile:Makefile.in:tail.mk])
+AC_OUTPUT
+END
+
+: > tail.mk
+
+cat > Makefile.am << 'END'
+include_HEADERS = 3dfx.h linutil.h
+noinst_HEADERS = fx64.h fxdll.h fximg.h fxglob.h \
+ fxos.h fxver.h glob.h
+noinst_PROGRAMS = fxmisc
+fxmisc_SOURCES = fx64.c fximg.c fxos.c linutil.c
+END
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+./configure
+
+test -f .deps/fx64.Po
+
+:
diff --git a/t/pr266.sh b/t/pr266.sh
new file mode 100644
index 000000000..cabfd6504
--- /dev/null
+++ b/t/pr266.sh
@@ -0,0 +1,46 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for PR 266.
+# Dependency tracking -vs- nonstandard Makefile names
+
+required=cc
+. test-init.sh
+
+cat > configure.ac << END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE
+AC_PROG_CC
+AC_CONFIG_FILES([Maudefile])
+AC_OUTPUT
+END
+
+cat > Maudefile.am << 'END'
+include_HEADERS = 3dfx.h linutil.h
+noinst_HEADERS = fx64.h fxdll.h fximg.h fxglob.h \
+ fxos.h fxver.h glob.h
+noinst_PROGRAMS = fxmisc
+fxmisc_SOURCES = fx64.c fximg.c fxos.c linutil.c
+END
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+./configure --enable-dependency-tracking
+
+test -f .deps/fx64.Po
+
+:
diff --git a/t/pr279-2.sh b/t/pr279-2.sh
new file mode 100644
index 000000000..21e8c4c1d
--- /dev/null
+++ b/t/pr279-2.sh
@@ -0,0 +1,51 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Another test related to PR 279.
+# Multiple DEPENDENCIES on conditionals.
+# Please keep this in sync with sister test 'pr279.sh'.
+#
+# == Report ==
+# When defining xxx_LDADD and xxx_DEPENDENCIES variables where the
+# xxx_LDADD one contains values set in conditionals, automake will
+# fail with messages like:
+# foo_DEPENDENCIES was already defined in condition TRUE, ...
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_CONDITIONAL([FOOTEST], [false])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+if FOOTEST
+foo_LDADD = zardoz
+else
+foo_LDADD = maude
+endif
+
+bin_PROGRAMS = foo
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '^@FOOTEST_TRUE@foo_DEPENDENCIES *= *zardoz$' Makefile.in
+grep '^@FOOTEST_FALSE@foo_DEPENDENCIES *= *maude$' Makefile.in
+
+:
diff --git a/t/pr279.sh b/t/pr279.sh
new file mode 100644
index 000000000..0d209b2c2
--- /dev/null
+++ b/t/pr279.sh
@@ -0,0 +1,50 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for PR 279.
+# Multiple DEPENDENCIES on conditionals.
+# Please keep this in sync with sister test 'pr279-2.sh'.
+#
+# == Report ==
+# When defining xxx_LDADD and xxx_DEPENDENCIES variables where the
+# xxx_LDADD one contains values set in conditionals, automake will
+# fail with messages like:
+# foo_DEPENDENCIES was already defined in condition TRUE, ...
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_CONDITIONAL([FOOTEST], [false])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+if FOOTEST
+xtralib =
+else
+xtralib =
+endif
+
+bin_PROGRAMS = foo
+foo_LDADD = ${xtralib}
+foo_DEPENDENCIES =
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+:
diff --git a/t/pr287.sh b/t/pr287.sh
new file mode 100644
index 000000000..5ad8b0caf
--- /dev/null
+++ b/t/pr287.sh
@@ -0,0 +1,47 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for PR 287: empty SUBDIRS.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+SUBDIRS =
+bin_SCRIPTS = foo
+END
+
+cat > foo << 'END'
+#! /bin/sh
+echo Maude
+END
+chmod +x foo
+
+mkdir install
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure "--prefix=$(cd install && pwd)"
+
+$MAKE
+$MAKE distdir
+
+:
diff --git a/t/pr300-lib.sh b/t/pr300-lib.sh
new file mode 100644
index 000000000..06768058c
--- /dev/null
+++ b/t/pr300-lib.sh
@@ -0,0 +1,76 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that installing subdirectory libraries works.
+# PR/300
+
+required=cc
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_RANLIB
+AC_PROG_CC
+AM_PROG_AR
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+lib_LIBRARIES = subdir/liba.a
+subdir_liba_a_SOURCES = a.c
+
+nobase_lib_LIBRARIES = subdir/libb.a
+subdir_libb_a_SOURCES = a.c
+END
+
+cat > a.c << 'END'
+int i = 3;
+END
+
+## A rule in the Makefile should create subdir
+# mkdir subdir
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --copy --add-missing
+
+# We pass '--libdir' explicitly, to avoid spurious failures due to users
+# or distributions possibly overriding '${libdir}' in their $CONFIG_SITE
+# file (for example, defining it to '${prefix}/lib64' on 64-bit systems,
+# as is the case with openSUSE 12.1). See automake bug#10426.
+cwd=$(pwd) || fatal_ "getting current working directory"
+./configure --prefix "$cwd/inst" --libdir "$cwd/inst/lib"
+
+$MAKE
+
+test -f subdir/liba.a
+test -f subdir/libb.a
+
+$MAKE install
+
+test -f inst/lib/liba.a
+test -f inst/lib/subdir/libb.a
+
+$MAKE uninstall
+
+test -f inst/lib/liba.a && exit 1
+test -f inst/lib/subdir/libb.a && exit 1
+
+$MAKE install-strip
+
+test -f inst/lib/liba.a
+test -f inst/lib/subdir/libb.a
+
+:
diff --git a/t/pr300-ltlib.sh b/t/pr300-ltlib.sh
new file mode 100644
index 000000000..7a249bbf5
--- /dev/null
+++ b/t/pr300-ltlib.sh
@@ -0,0 +1,82 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that installing subdirectory libtool libraries works.
+# PR/300
+
+required='cc libtoolize'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_LIBTOOL
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+lib_LTLIBRARIES = subdir/liba.la
+subdir_liba_la_SOURCES = a.c
+
+nobase_lib_LTLIBRARIES = subdir/libb.la
+subdir_libb_la_SOURCES = a.c
+END
+
+cat > a.c << 'END'
+int i = 3;
+END
+
+libtoolize
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --copy --add-missing
+
+# We pass '--libdir' explicitly, to avoid spurious failures due to users
+# or distributions possibly overriding '${libdir}' in their $CONFIG_SITE
+# file (for example, defining it to '${prefix}/lib64' on 64-bit systems,
+# as is the case with openSUSE 12.1). See automake bug#10426.
+cwd=$(pwd) || fatal_ "getting current working directory"
+./configure --prefix "$cwd/inst" --libdir "$cwd/inst/lib"
+
+# A rule in the Makefile should create subdir.
+test ! -e subdir
+run_make -O
+test -d subdir
+
+grep 'liba.la .*-rpath .*lib' stdout
+grep 'liba.la .*-rpath .*lib/subdir' stdout && exit 1
+grep 'libb.la .*-rpath .*lib/subdir' stdout
+
+test -f subdir/liba.la
+test -f subdir/libb.la
+
+run_make -E install
+grep 'remember.*--finish' stderr && exit 1
+
+test -f inst/lib/liba.la
+test -f inst/lib/subdir/libb.la
+
+$MAKE uninstall
+
+test -f inst/lib/liba.la && exit 1
+test -f inst/lib/subdir/libb.la && exit 1
+
+$MAKE install-strip
+
+test -f inst/lib/liba.la
+test -f inst/lib/subdir/libb.la
+
+:
diff --git a/t/pr300-prog.sh b/t/pr300-prog.sh
new file mode 100644
index 000000000..a50d519c8
--- /dev/null
+++ b/t/pr300-prog.sh
@@ -0,0 +1,72 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that installing subdirectory programs works.
+# PR/300
+
+required=cc
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = subdir/wish
+subdir_wish_SOURCES = a.c
+
+nobase_bin_PROGRAMS = subdir/want
+subdir_want_SOURCES = a.c
+
+test-all: all
+ test -f subdir/wish$(EXEEXT)
+ test -f subdir/want$(EXEEXT)
+test-install: install
+ test -f inst/bin/wish$(EXEEXT)
+ test -f inst/bin/subdir/want$(EXEEXT)
+test-uninstall: uninstall
+ test ! -f inst/bin/wish$(EXEEXT)
+ test ! -f inst/bin/subdir/want$(EXEEXT)
+test-install-strip: install-strip
+ test -f inst/bin/wish$(EXEEXT)
+ test -f inst/bin/subdir/want$(EXEEXT)
+END
+
+cat > a.c << 'END'
+#include <stdio.h>
+int main ()
+{
+ printf ("hi liver!\n");
+ return 0;
+}
+END
+
+## A rule in the Makefile should create subdir
+# mkdir subdir
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --copy --add-missing
+
+./configure --prefix "$(pwd)/inst"
+
+$MAKE test-all
+$MAKE test-install
+$MAKE test-uninstall
+$MAKE test-install-strip
+
+:
diff --git a/t/pr307.sh b/t/pr307.sh
new file mode 100644
index 000000000..3380d07b0
--- /dev/null
+++ b/t/pr307.sh
@@ -0,0 +1,93 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for PR 307: depcomp with depmode=dashmstdout libtool race condition
+# Report from Laurent Morichetti.
+# (Also exercises check_LTLIBRARIES.)
+#
+# == Report ==
+# The dashmstdout depmode calls libtool in parallel to generate the
+# dependencies (with -M flag) and to build the objfile (both have
+# --mode=compile and -o).
+# The process with 'libtool --mode=compile .* -M' can corrupt the objfile
+# as none is generated by the compiler. Since --mode=compile and -o are
+# set libtool assumes that a objfile should be generated and will execute
+# invalid $mv & $LN_S.
+#
+# == Fix ==
+# Now 'depcomp' never compute dependencies in the background, as this can
+# cause races with libtool. Compute the dependencies after the actual
+# compilation.
+
+required='libtoolize gcc'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_LIBTOOL
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+check_LTLIBRARIES = librace.la
+librace_la_SOURCES = a.c b.c c.c d.c e.c f.c g.c h.c
+
+# Make sure the dependencies are updated.
+check-local:
+ for i in $(librace_la_SOURCES:.c=.Plo); do \
+ echo "checking ./$(DEPDIR)/$$i"; \
+ grep 'foo\.h' ./$(DEPDIR)/$$i >tst || exit 1; \
+ test `wc -l <tst` -eq 2 || exit 1; \
+ done
+END
+
+: >foo.h
+
+for i in a b c d e f g h; do
+ unindent >$i.c <<EOF
+ #include "foo.h"
+ int $i () { return 0; }
+EOF
+done
+
+libtoolize --force
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+# Sanity check: make sure the variable we are attempting to force
+# is indeed used by configure.
+grep am_cv_CC_dependencies_compiler_type configure
+
+./configure am_cv_CC_dependencies_compiler_type=dashmstdout
+
+$MAKE
+test -f librace.la && exit 1
+$MAKE check
+
+# The failure we check usually occurs during the above build,
+# with an output such as:
+#
+# mv -f .libs/f.lo f.lo
+# mv: cannot stat '.libs/f.lo': No such file or directory
+#
+# (This may happen on 'f' or on some other files.)
+
+test -f librace.la
+test -f tst # A proof that check-local was run.
+
+:
diff --git a/t/pr401.sh b/t/pr401.sh
new file mode 100644
index 000000000..b0c45cad8
--- /dev/null
+++ b/t/pr401.sh
@@ -0,0 +1,187 @@
+#! /bin/sh
+# Copyright (C) 2005-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check support for AC_CONFIG_LIBOBJ_DIR vs LIBOBJS.
+# (pr401b.sh and pr401c.sh do the same for LTLIBOBJS and ALLOCA)
+
+required=cc
+. test-init.sh
+
+mkdir lib src
+
+cat >lib/feep.c <<'EOF'
+const char *feep (void)
+{
+ return "feep";
+}
+EOF
+
+cat >src/main.c <<'EOF'
+#include <stdio.h>
+
+extern const char *feep (void);
+
+int main (void)
+{
+ puts (feep ());
+ return 0;
+}
+EOF
+
+cat >>configure.ac << 'EOF'
+## These lines are activated for later tests
+#: AC_CONFIG_LIBOBJ_DIR([lib])
+AC_PROG_CC
+AC_LIBOBJ([feep])
+AC_LIBSOURCE([feep.c])
+AM_PROG_AR
+AC_PROG_RANLIB
+AC_CONFIG_FILES([lib/Makefile src/Makefile])
+AM_CONDITIONAL([CROSS_COMPILING], [test $cross_compiling = yes])
+AC_OUTPUT
+EOF
+
+## ------------------------------------------ ##
+## First a test of traditional LIBOBJS usage. ##
+## ------------------------------------------ ##
+
+cat >Makefile.am <<'EOF'
+SUBDIRS = lib src
+EOF
+
+cat >lib/Makefile.am <<'EOF'
+noinst_LIBRARIES = libfeep.a
+libfeep_a_SOURCES =
+libfeep_a_LIBADD = $(LIBOBJS)
+EOF
+
+cat >src/Makefile.am <<'EOF'
+check_PROGRAMS = main
+main_LDADD = ../lib/libfeep.a
+
+if !CROSS_COMPILING
+TESTS = main
+endif
+EOF
+
+cp "$am_scriptdir/ar-lib" . || fatal_ "fetching auxiliary script 'ar-lib'"
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+./configure
+$MAKE distcheck
+
+## ------------------------------------------ ##
+## Traditional LIBOBJS with LIBOBJDIR set. ##
+## ------------------------------------------ ##
+
+# Invocation of AC_CONFIG_LIBOBJ_DIR may be necessary for reasons
+# unrelated to Automake or Makefile.am layout.
+
+sed 's/#: //' configure.ac >configure.tmp
+mv -f configure.tmp configure.ac
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+test ! -e lib/lib
+$MAKE distcheck
+
+## -------------------------------------------- ##
+## Error message with usage in wrong directory. ##
+## -------------------------------------------- ##
+
+mv -f src/Makefile.am src/t
+sed 's/LDADD = .*/LDADD = @LIBOBJS@/' src/t > src/Makefile.am
+AUTOMAKE_fails
+grep 'cannot be used outside.*lib' stderr
+mv -f src/t src/Makefile.am
+
+
+## -------------------------------------------- ##
+## Test using LIBOBJS from a sibling directory. ##
+## -------------------------------------------- ##
+
+sed 's/lib\/Makefile //' configure.ac >configure.tmp
+mv -f configure.tmp configure.ac
+
+cat >Makefile.am <<'EOF'
+SUBDIRS = src
+EOF
+
+cat > src/Makefile.am <<'EOF'
+AUTOMAKE_OPTIONS = subdir-objects
+
+noinst_LIBRARIES = libfeep.a
+libfeep_a_SOURCES =
+libfeep_a_LIBADD = $(LIBOBJS)
+
+check_PROGRAMS = main
+main_LDADD = libfeep.a
+
+if !CROSS_COMPILING
+TESTS = main
+endif
+EOF
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+./configure
+test ! -e src/lib
+test ! -e 'src/$(top_builddir)'
+$MAKE
+$MAKE check
+$MAKE distclean
+
+
+## ----------------------------------------- ##
+## Test using LIBOBJS from parent directory. ##
+## ----------------------------------------- ##
+
+sed 's/^.*src\/Makefile.*$//' configure.ac >configure.tmp
+mv -f configure.tmp configure.ac
+
+cat >Makefile.am <<'EOF'
+AUTOMAKE_OPTIONS = subdir-objects
+
+noinst_LIBRARIES = lib/libfeep.a
+lib_libfeep_a_SOURCES =
+lib_libfeep_a_LIBADD = $(LIBOBJS)
+
+check_PROGRAMS = src/main
+src_main_SOURCES = src/main.c
+src_main_LDADD = lib/libfeep.a
+
+if !CROSS_COMPILING
+TESTS = src/main
+endif
+
+check-local:
+ test -f src/main.$(OBJEXT)
+ test -f lib/feep.$(OBJEXT)
+ test ! -f src/$(DEPDIR)/feep.Po
+EOF
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+$MAKE distcheck
+
+:
diff --git a/t/pr401b.sh b/t/pr401b.sh
new file mode 100644
index 000000000..f6a7fa2b2
--- /dev/null
+++ b/t/pr401b.sh
@@ -0,0 +1,187 @@
+#! /bin/sh
+# Copyright (C) 2005-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check support for AC_CONFIG_LIBOBJ_DIR vs LTLIBOBJS.
+# (pr401.sh and pr401c.sh do the same for LIBOBJS and ALLOCA)
+
+required='cc libtoolize'
+. test-init.sh
+
+mkdir lib src
+
+cat >lib/feep.c <<'EOF'
+const char *feep (void)
+{
+ return "feep";
+}
+EOF
+
+cat >src/main.c <<'EOF'
+#include <stdio.h>
+
+extern const char *feep (void);
+
+int main (void)
+{
+ puts (feep ());
+ return 0;
+}
+EOF
+
+cat >>configure.ac << 'EOF'
+## These lines are activated for later tests
+#: AC_CONFIG_LIBOBJ_DIR([lib])
+AC_PROG_CC
+AC_LIBOBJ([feep])
+AC_LIBSOURCE([feep.c])
+AM_PROG_AR
+AC_PROG_LIBTOOL
+AC_CONFIG_FILES([lib/Makefile src/Makefile])
+AM_CONDITIONAL([CROSS_COMPILING], [test $cross_compiling = yes])
+AC_OUTPUT
+EOF
+
+## -------------------------------------------- ##
+## First a test of traditional LTLIBOBJS usage. ##
+## -------------------------------------------- ##
+
+cat >Makefile.am <<'EOF'
+SUBDIRS = lib src
+EOF
+
+cat >lib/Makefile.am <<'EOF'
+noinst_LTLIBRARIES = libfeep.la
+libfeep_la_SOURCES =
+libfeep_la_LIBADD = $(LTLIBOBJS)
+EOF
+
+cat >src/Makefile.am <<'EOF'
+check_PROGRAMS = main
+main_LDADD = ../lib/libfeep.la
+
+if !CROSS_COMPILING
+TESTS = main
+endif
+EOF
+
+cp "$am_scriptdir/ar-lib" . || fatal_ "fetching auxiliary script 'ar-lib'"
+
+libtoolize
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+./configure
+$MAKE distcheck
+
+## ----------------------------------------- ##
+## Traditional LTLIBOBJS with LIBOBJDIR set. ##
+## ----------------------------------------- ##
+
+# Invocation of AC_CONFIG_LIBOBJ_DIR may be necessary for reasons
+# unrelated to Automake or Makefile.am layout.
+
+sed 's/#: //' configure.ac >configure.tmp
+mv -f configure.tmp configure.ac
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+./configure
+test ! -e lib/lib
+$MAKE distcheck
+
+## -------------------------------------------- ##
+## Error message with usage in wrong directory. ##
+## -------------------------------------------- ##
+
+mv -f src/Makefile.am src/t
+sed 's/LDADD = .*/LDADD = @LTLIBOBJS@/' src/t > src/Makefile.am
+AUTOMAKE_fails
+grep 'cannot be used outside.*lib' stderr
+mv -f src/t src/Makefile.am
+
+## ---------------------------------------------- ##
+## Test using LTLIBOBJS from a sibling directory. ##
+## ---------------------------------------------- ##
+
+sed 's/lib\/Makefile //' configure.ac >configure.tmp
+mv -f configure.tmp configure.ac
+
+cat >Makefile.am <<'EOF'
+SUBDIRS = src
+EOF
+
+cat > src/Makefile.am <<'EOF'
+AUTOMAKE_OPTIONS = subdir-objects
+
+noinst_LTLIBRARIES = libfeep.la
+libfeep_la_SOURCES =
+libfeep_la_LIBADD = $(LTLIBOBJS)
+
+check_PROGRAMS = main
+main_LDADD = libfeep.la
+
+if !CROSS_COMPILING
+TESTS = main
+endif
+EOF
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+./configure
+test ! -e src/lib
+test ! -e 'src/$(top_builddir)'
+$MAKE
+$MAKE check
+$MAKE distclean
+
+
+## ------------------------------------------- ##
+## Test using LTLIBOBJS from parent directory. ##
+## ------------------------------------------- ##
+
+sed 's/^.*src\/Makefile.*$//' configure.ac >configure.tmp
+mv -f configure.tmp configure.ac
+
+cat >Makefile.am <<'EOF'
+AUTOMAKE_OPTIONS = subdir-objects
+
+noinst_LTLIBRARIES = lib/libfeep.la
+lib_libfeep_la_SOURCES =
+lib_libfeep_la_LIBADD = $(LTLIBOBJS)
+
+check_PROGRAMS = src/main
+src_main_SOURCES = src/main.c
+src_main_LDADD = lib/libfeep.la
+
+if !CROSS_COMPILING
+TESTS = src/main
+endif
+
+check-local:
+ test -f src/main.$(OBJEXT)
+ test -f lib/feep.lo
+ test ! -f src/$(DEPDIR)/feep.Po
+EOF
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+$MAKE distcheck
+
+:
diff --git a/t/pr401c.sh b/t/pr401c.sh
new file mode 100644
index 000000000..e1cea4ee6
--- /dev/null
+++ b/t/pr401c.sh
@@ -0,0 +1,189 @@
+#! /bin/sh
+# Copyright (C) 2005-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check support for AC_CONFIG_LIBOBJ_DIR vs ALLOCA.
+# (pr401.sh and pr401b.sh do the same for LIBOBJS and LTLIBOBJS)
+
+required=cc
+. test-init.sh
+
+mkdir lib src
+
+ac_cv_func_alloca_works=no; export ac_cv_func_alloca_works
+
+cat >lib/alloca.c <<'EOF'
+const char *feep (void)
+{
+ return "feep";
+}
+EOF
+
+cat >src/main.c <<'EOF'
+#include <stdio.h>
+
+extern const char *feep (void);
+
+int main (void)
+{
+ puts (feep ());
+ return 0;
+}
+EOF
+
+cat >>configure.ac << 'EOF'
+## These lines are activated for later tests.
+#: AC_CONFIG_LIBOBJ_DIR([lib])
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+AC_FUNC_ALLOCA
+AC_CONFIG_FILES([lib/Makefile src/Makefile])
+AM_CONDITIONAL([CROSS_COMPILING], [test $cross_compiling = yes])
+AC_OUTPUT
+EOF
+
+## ----------------------------------------- ##
+## First a test of traditional ALLOCA usage. ##
+## ----------------------------------------- ##
+
+cat >Makefile.am <<'EOF'
+SUBDIRS = lib src
+EOF
+
+cat >lib/Makefile.am <<'EOF'
+noinst_LIBRARIES = libfeep.a
+libfeep_a_SOURCES =
+libfeep_a_LIBADD = $(ALLOCA)
+EOF
+
+cat >src/Makefile.am <<'EOF'
+check_PROGRAMS = main
+main_LDADD = ../lib/libfeep.a
+
+if !CROSS_COMPILING
+TESTS = main
+endif
+EOF
+
+cp "$am_scriptdir/ar-lib" . || fatal_ "fetching auxiliary script 'ar-lib'"
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+./configure
+$MAKE distcheck
+
+
+## --------------------------------------- ##
+## Traditional ALLOCA with LIBOBJDIR set. ##
+## --------------------------------------- ##
+
+# Invocation of AC_CONFIG_LIBOBJ_DIR may be necessary for reasons
+# unrelated to Automake or Makefile.am layout.
+
+sed 's/#: //' configure.ac >configure.tmp
+mv -f configure.tmp configure.ac
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+test ! -e lib/lib
+$MAKE distcheck
+
+## -------------------------------------------- ##
+## Error message with usage in wrong directory. ##
+## -------------------------------------------- ##
+
+mv -f src/Makefile.am src/t
+sed 's/LDADD = .*/LDADD = @ALLOCA@/' src/t > src/Makefile.am
+AUTOMAKE_fails
+grep 'cannot be used outside.*lib' stderr
+mv -f src/t src/Makefile.am
+
+
+## ------------------------------------------- ##
+## Test using ALLOCA from a sibling directory. ##
+## ------------------------------------------- ##
+
+sed 's/lib\/Makefile //' configure.ac >configure.tmp
+mv -f configure.tmp configure.ac
+
+cat >Makefile.am <<'EOF'
+SUBDIRS = src
+EOF
+
+cat > src/Makefile.am <<'EOF'
+AUTOMAKE_OPTIONS = subdir-objects
+
+noinst_LIBRARIES = libfeep.a
+libfeep_a_SOURCES =
+libfeep_a_LIBADD = $(ALLOCA) $(LIBOBJS) # Add LIBOBJS for fun.
+
+check_PROGRAMS = main
+main_LDADD = libfeep.a
+
+if !CROSS_COMPILING
+TESTS = main
+endif
+EOF
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+./configure
+$MAKE
+test ! -e src/lib
+test ! -e 'src/$(top_builddir)'
+$MAKE check
+$MAKE distclean
+
+
+## ---------------------------------------- ##
+## Test using ALLOCA from parent directory. ##
+## ---------------------------------------- ##
+
+sed 's/^.*src\/Makefile.*$//' configure.ac >configure.tmp
+mv -f configure.tmp configure.ac
+
+cat >Makefile.am <<'EOF'
+AUTOMAKE_OPTIONS = subdir-objects
+
+noinst_LIBRARIES = lib/libfeep.a
+lib_libfeep_a_SOURCES =
+lib_libfeep_a_LIBADD = $(ALLOCA)
+
+check_PROGRAMS = src/main
+src_main_SOURCES = src/main.c
+src_main_LDADD = lib/libfeep.a
+
+if !CROSS_COMPILING
+TESTS = src/main
+endif
+
+check-local:
+ test -f src/main.$(OBJEXT)
+ test -f lib/alloca.$(OBJEXT)
+ test ! -f src/$(DEPDIR)/alloca.Po
+EOF
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+$MAKE distcheck
+
+:
diff --git a/t/pr72.sh b/t/pr72.sh
new file mode 100644
index 000000000..d853a6c78
--- /dev/null
+++ b/t/pr72.sh
@@ -0,0 +1,44 @@
+#! /bin/sh
+# Copyright (C) 2000-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for PR 72
+# Empty _SOURCES results in $(LINK) undefined.
+
+required=libtool
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_LIBTOOL
+END
+
+cat > Makefile.am << 'END'
+lib_LTLIBRARIES = libviewer.la
+libviewer_la_SOURCES =
+libviewer_la_LIBADD = libphony.la
+END
+
+: > ltconfig
+: > ltmain.sh
+: > config.guess
+: > config.sub
+
+$ACLOCAL
+$AUTOMAKE -Wno-extra-portability
+
+grep '^LINK =' Makefile.in
+
+:
diff --git a/t/pr87.sh b/t/pr87.sh
new file mode 100644
index 000000000..35bd217ba
--- /dev/null
+++ b/t/pr87.sh
@@ -0,0 +1,75 @@
+#! /bin/sh
+# Copyright (C) 2000-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for PR automake/87.
+# "make distcheck" fails when two source dirs exist.
+
+required=cc
+. test-init.sh
+
+subdirs="foo bar"
+
+for i in $subdirs; do
+ mkdir $i
+ unindent >$i/$i.c <<EOF
+ int main (void)
+ {
+ return 0;
+ }
+EOF
+ unindent >$i/Makefile.am <<EOF
+ bin_PROGRAMS = $i
+ ${i}_SOURCES = $i.c
+EOF
+done
+
+echo "SUBDIRS = $subdirs" > Makefile.am
+
+cat > configure.ac <<EOF
+AC_INIT([$me], [1.0])
+AC_CONFIG_SRCDIR([foo/foo.c])
+AC_CONFIG_AUX_DIR([.])
+AM_INIT_AUTOMAKE
+AC_PROG_CC
+AC_CONFIG_FILES([Makefile])
+AC_CONFIG_FILES([$(echo $subdirs | sed 's|\([a-z][a-z]*\)|\1/Makefile|g')])
+AC_OUTPUT
+EOF
+
+mkdir build
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+# Regression test for bug where '.c.o:' is followed by blank line.
+(while read line; do
+ if test "$line" = ".c.o:"; then
+ read next
+ if test -z "$next"; then
+ exit 1
+ else
+ : # For shells with broken 'set -e'.
+ fi
+ break
+ fi
+ done) < foo/Makefile.in || exit 1
+
+cd build
+../configure
+$MAKE distcheck
+
+:
diff --git a/t/pr9.sh b/t/pr9.sh
new file mode 100644
index 000000000..956ed0d53
--- /dev/null
+++ b/t/pr9.sh
@@ -0,0 +1,58 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for bug in PR 9.
+# "make dist" incorrect when AC_CONFIG_AUX_DIR is present.
+#
+# == Report ==
+# When AC_CONFIG_AUX_DIR is set (in my case to 'support'), make dist
+# no longer automatically includes config.guess, config.sub, install-sh,
+# ltconfig, ltmain.sh, mdate-sh, missing, and mkinstalldirs. In fact,
+# the entire 'support/' directory is omitted.
+
+. test-init.sh
+
+cat > configure.ac << END
+AC_INIT([$me], [1.0])
+AC_CONFIG_AUX_DIR([support])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+END
+
+: > Makefile.am
+
+mkdir support
+
+$ACLOCAL
+
+$AUTOCONF
+$AUTOMAKE -a -c
+./configure
+$MAKE
+$MAKE distcheck
+
+gzip -d $distdir.tar.gz
+
+tar tf $distdir.tar | $FGREP support
+
+tar xf $distdir.tar
+ls -l . $distdir # For debugging.
+test -d $distdir/support
+ls -l $distdir/support # For debugging.
+test -f $distdir/support/install-sh
+
+:
diff --git a/t/precious.sh b/t/precious.sh
new file mode 100644
index 000000000..54065e14d
--- /dev/null
+++ b/t/precious.sh
@@ -0,0 +1,32 @@
+#!/bin/sh
+# Copyright (C) 2013-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure .PRECIOUS can be extended by the user, and can be given
+# dependencies several times.
+
+. test-init.sh
+
+cat >Makefile.am << 'EOF'
+.PRECIOUS: foo
+.PRECIOUS: bar
+EOF
+
+$ACLOCAL
+$AUTOMAKE
+$FGREP '.PRECIOUS:' Makefile.in # For debugging.
+test $($FGREP -c '.PRECIOUS:' Makefile.in) -eq 3
+
+:
diff --git a/t/prefix.sh b/t/prefix.sh
new file mode 100644
index 000000000..2409a2d5b
--- /dev/null
+++ b/t/prefix.sh
@@ -0,0 +1,33 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure range of prefixes can be extended
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+END
+
+cat > Makefile.am << 'EOF'
+bnidir = $(prefix)/bni
+bni_PROGRAMS = zardoz
+EOF
+
+$ACLOCAL
+$AUTOMAKE
+
+:
diff --git a/t/preproc-basics.sh b/t/preproc-basics.sh
new file mode 100644
index 000000000..4e37daa87
--- /dev/null
+++ b/t/preproc-basics.sh
@@ -0,0 +1,106 @@
+#! /bin/sh
+# Copyright (C) 2013-2017 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 <https://www.gnu.org/licenses/>.
+
+# Basic tests for '%...%' preprocessing in included Makefile fragments:
+# %reldir% a.k.a. %D%
+# %canon_reldir% a.k.a. %C%
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_FILES([zot/Makefile])
+AC_OUTPUT
+END
+
+mkdir foo foo/bar foo/foobar zot
+
+cat > Makefile.am << 'END'
+include $(top_srcdir)/foo/local.mk
+include $(srcdir)/foo/foobar/local.mk
+include local.mk
+END
+
+cat > zot/Makefile.am << 'END'
+include $(top_srcdir)/zot/local.mk
+
+## Check that '%canon_reldir%' doesn't remain overridden
+## by the previous include.
+%canon_reldir%_zot_whoami:
+ echo "I am %reldir%/Makefile.am" >$@
+
+include $(top_srcdir)/top.mk
+include ../reltop.mk
+END
+
+cat > local.mk << 'END'
+%canon_reldir%_whoami:
+ echo "I am %reldir%/local.mk" >$@
+END
+
+cat > top.mk << 'END'
+%canon_reldir%_top_whoami:
+ echo "I am %reldir%/top.mk" >$@
+END
+
+cat > reltop.mk << 'END'
+%C%_reltop_whoami:
+ echo "I am %D%/reltop.mk" >$@
+END
+
+cp local.mk foo
+cp local.mk foo/bar
+cp local.mk foo/foobar
+cp local.mk zot
+
+cat >> foo/local.mk << 'END'
+include %reldir%/bar/local.mk
+## Check that '%canon_reldir%' doesn't remain overridden by the
+## previous include. The duplicated checks are done to ensure that
+## Automake substitutes all pre-processing occurrences on a line,
+## not just the first one.
+test-%reldir%:
+ test '%reldir%' = foo && test '%reldir%' = foo
+ test '%D%' = foo && test '%D%' = foo
+ test '%canon_reldir%' = foo && test '%C%' = foo
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+
+check ()
+{
+ test $# -eq 2 || fatal_ "made_into(): bad usage"
+ target=$1 contents=$2
+ rm -f "$target" \
+ && $MAKE "$target" \
+ && test x"$(cat "$target")" = x"$contents"
+}
+
+check whoami "I am local.mk"
+check foo_whoami "I am foo/local.mk"
+check foo_bar_whoami "I am foo/bar/local.mk"
+check foo_foobar_whoami "I am foo/foobar/local.mk"
+$MAKE test-foo
+
+cd zot
+check whoami "I am local.mk"
+check ___top_whoami "I am ../top.mk"
+check ___reltop_whoami "I am ../reltop.mk"
+check zot_whoami "I am Makefile.am"
+
+:
diff --git a/t/preproc-c-compile.sh b/t/preproc-c-compile.sh
new file mode 100644
index 000000000..5f659346b
--- /dev/null
+++ b/t/preproc-c-compile.sh
@@ -0,0 +1,118 @@
+#! /bin/sh
+# Copyright (C) 2013-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test pre-processing substitutions '%reldir%' and '%canon_reldir%'
+# with C compilation and subdir objects.
+
+require=cc
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_CC_C_O
+AC_CONFIG_FILES([zot/Makefile])
+AC_OUTPUT
+END
+
+mkdir foo
+mkdir foo/bar
+mkdir foo/foobar
+mkdir zot
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = subdir-objects
+SUBDIRS = zot
+bin_PROGRAMS =
+
+include $(top_srcdir)/foo/local.mk
+include $(srcdir)/foo/foobar/local.mk
+include local.mk
+
+check-local:
+ is $(bin_PROGRAMS) == \
+ foo/mumble2$(EXEEXT) \
+ foo/bar/mumble$(EXEEXT) \
+ foo/foobar/mumble$(EXEEXT) \
+ mumble$(EXEEXT)
+ test '$(mumble_SOURCES)' = one.c
+ test '$(foo_mumble2_SOURCES)' = foo/one.c
+ test '$(foo_bar_mumble_SOURCES)' = foo/bar/one.c
+ test '$(foo_foobar_mumble_SOURCES)' = foo/foobar/one.c
+ test -f mumble$(EXEEXT)
+ test -f foo/mumble2$(EXEEXT)
+ test -f foo/bar/mumble$(EXEEXT)
+ test -f foo/foobar/mumble$(EXEEXT)
+ test -f zot/mumble$(EXEEXT)
+ : Test some of the object files too.
+ test -f one.$(OBJEXT)
+ test -f foo/foobar/one.$(OBJEXT)
+ test -f zot/one.$(OBJEXT)
+END
+
+cat > zot/Makefile.am << 'END'
+AUTOMAKE_OPTIONS = subdir-objects
+bin_PROGRAMS =
+include $(top_srcdir)/zot/local.mk
+
+test:
+ test '$(bin_PROGRAMS)' = mumble$(EXEEXT)
+ test '$(mumble_SOURCES)' = one.c
+check-local: test
+END
+
+cat > local.mk << 'END'
+bin_PROGRAMS += %reldir%/mumble
+%canon_reldir%_mumble_SOURCES = %reldir%/one.c
+END
+
+echo 'int main (void) { return 0; }' > one.c
+
+sed 's/mumble/mumble2/' local.mk > foo/local.mk
+cp local.mk foo/bar
+cp local.mk foo/foobar
+cp local.mk zot
+echo "include %reldir%/bar/local.mk" >> foo/local.mk
+
+cp one.c foo
+cp one.c foo/bar
+cp one.c foo/foobar
+cp one.c zot
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+
+$MAKE
+$MAKE check-local
+if ! cross_compiling; then
+ ./mumble
+ ./foo/mumble2
+ ./foo/bar/mumble
+ ./foo/foobar/mumble
+ ./zot/mumble
+fi
+
+(cd zot && $MAKE test)
+
+# GNU install refuses to override a just-installed file; since we
+# have plenty of 'mumble' dummy programs to install in the same
+# location, such "overridden installations" are not a problem for
+# us; so just force the use the 'install-sh' script.
+ac_cv_path_install=$(pwd)/install-sh; export ac_cv_path_install
+$MAKE distcheck
+
+:
diff --git a/t/preproc-demo.sh b/t/preproc-demo.sh
new file mode 100644
index 000000000..a86f51c4a
--- /dev/null
+++ b/t/preproc-demo.sh
@@ -0,0 +1,230 @@
+#! /bin/sh
+# Copyright (C) 2013-2017 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 <https://www.gnu.org/licenses/>.
+
+# Demo of a package using pre-processing substitutions '%reldir%' and
+# '%canon_reldir%', and their respective shorthands '%D%' and '%C%'.
+
+am_create_testdir=empty
+required=cc
+. test-init.sh
+
+if cross_compiling; then
+ WE_ARE_CROSS_COMPILING=yes
+else
+ WE_ARE_CROSS_COMPILING=no
+fi
+export WE_ARE_CROSS_COMPILING
+
+SAFE_PRINT_FAIL=; unset SAFE_PRINT_FAIL
+
+cat > configure.ac << 'END'
+AC_INIT([GNU Demo], [0.7], [bug-automake@gnu.org])
+AC_CONFIG_AUX_DIR([build-aux])
+AM_INIT_AUTOMAKE([1.12.6 foreign subdir-objects -Wall])
+AM_CONDITIONAL([NATIVE_BUILD], [test $WE_ARE_CROSS_COMPILING != yes])
+AC_CONFIG_FILES([Makefile])
+AC_PROG_CC
+AM_PROG_CC_C_O
+AM_PROG_AR
+AC_PROG_RANLIB
+AC_OUTPUT
+END
+
+mkdir build-aux lib lib/tests src tests
+
+## Top level.
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS =
+check_PROGRAMS =
+noinst_LIBRARIES =
+AM_CPPFLAGS =
+AM_TESTS_ENVIRONMENT =
+CLEANFILES =
+EXTRA_DIST =
+LDADD =
+TESTS =
+
+include $(srcdir)/src/progs.am
+include $(srcdir)/lib/gnulib.am
+include $(srcdir)/tests/check.am
+END
+
+## Src subdir.
+
+cat > src/progs.am <<'END'
+bin_PROGRAMS += %reldir%/hello
+
+bin_PROGRAMS += %D%/goodbye
+%canon_reldir%_goodbye_SOURCES = %D%/hello.c
+%C%_goodbye_CPPFLAGS = $(AM_CPPFLAGS) -DGREETINGS='"Goodbye"'
+
+# The testsuite should have access to our built programs.
+AM_TESTS_ENVIRONMENT += \
+ PROGDIR='$(top_builddir)/%reldir%'; \
+ export PROGDIR; \
+ PATH='$(abs_builddir)/%reldir%'$(PATH_SEPARATOR)$$PATH; \
+ export PATH;
+END
+
+cat > src/hello.c <<'END'
+#include "safe-print.h"
+#include <stdlib.h>
+#include <stdio.h>
+
+#ifndef GREETINGS
+# define GREETINGS "Hello"
+#endif
+
+int
+main (void)
+{
+ safe_print (stdout, GREETINGS ", World!\n");
+ exit (EXIT_SUCCESS);
+}
+END
+
+## Lib subdir.
+
+cat > lib/gnulib.am << 'END'
+noinst_LIBRARIES += %D%/libgnu.a
+
+AM_CPPFLAGS += -I%D% -I$(top_srcdir)/%D%
+LDADD += $(noinst_LIBRARIES)
+
+%C%_libgnu_a_SOURCES = \
+ %D%/safe-print.c \
+ %D%/safe-print.h
+
+if NATIVE_BUILD
+include %D%/tests/gnulib-check.am
+endif
+END
+
+cat > lib/safe-print.c <<'END'
+#include "safe-print.h"
+#include <string.h>
+#include <stdlib.h>
+
+void
+safe_print (FILE *fp, const char * str)
+{
+ if (fprintf (fp, "%s", str) != strlen (str)
+ || fflush (fp) != 0 || ferror (fp))
+ {
+ fprintf (stderr, "I/O error\n");
+ exit (EXIT_FAILURE);
+ }
+}
+
+END
+
+cat > lib/safe-print.h <<'END'
+#include <stdio.h>
+void safe_print (FILE *, const char *);
+END
+
+## Lib/Tests (sub)subdir.
+
+cat > lib/tests/gnulib-check.am <<'END'
+check_PROGRAMS += %D%/safe-print-test
+TESTS += $(check_PROGRAMS)
+END
+
+cat > lib/tests/safe-print-test.c <<'END'
+#include "safe-print.h"
+int
+main (void)
+{
+ safe_print (stdout, "dummy\n");
+ return 0;
+}
+END
+
+## Tests subdir.
+
+cat > tests/check.am <<'END'
+TEST_EXTENSIONS = .sh
+SH_LOG_COMPILER = $(SHELL)
+
+AM_TESTS_ENVIRONMENT += EXEEXT='$(EXEEXT)'; export EXEEXT;
+
+handwritten_TESTS = \
+ %D%/hello.sh \
+ %D%/built.sh
+TESTS += $(handwritten_TESTS)
+EXTRA_DIST += $(handwritten_TESTS)
+
+TESTS += %D%/goodbye.sh
+CLEANFILES += %D%/goodbye.sh
+%D%/goodbye.sh: %D%/hello.sh
+ $(MKDIR_P) %D%
+ rm -f $@ $@-t
+ sed -e 's/hello/goodbye/' \
+ -e 's/Hello/Goodbye/' \
+ < $(srcdir)/%D%/hello.sh >$@-t
+ chmod a-w,a+x $@-t && mv -f $@-t $@
+END
+
+cat > tests/hello.sh <<'END'
+#!/bin/sh
+set -x -e
+if test "$WE_ARE_CROSS_COMPILING" = yes; then
+ echo Skipping: cannot run in cross-compilation mode
+ exit 77
+else
+ hello || exit 1
+ test "`hello`" = 'Hello, World!' || exit 1
+fi
+END
+
+cat > tests/built.sh <<'END'
+#!/bin/sh
+set -x
+test -n "$PROGDIR" || exit 99
+test -f "$PROGDIR/hello$EXEEXT" || exit 1
+test -x "$PROGDIR/hello$EXEEXT" || exit 1
+test -f "$PROGDIR/goodbye$EXEEXT" || exit 1
+test -x "$PROGDIR/goodbye$EXEEXT" || exit 1
+END
+
+
+## Go.
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing --copy
+test ! -e compile
+test -f build-aux/compile
+
+./configure
+
+$MAKE
+
+run_make -O check VERBOSE=x
+cat tests/built.log
+cat tests/hello.log
+cat tests/goodbye.log
+if cross_compiling; then
+ test ! -e lib/tests/safe-print-test.log
+ count_test_results total=3 pass=1 fail=0 xpass=0 xfail=0 skip=2 error=0
+else
+ count_test_results total=4 pass=4 fail=0 xpass=0 xfail=0 skip=0 error=0
+fi
+
+$MAKE distcheck
+
+:
diff --git a/t/preproc-errmsg.sh b/t/preproc-errmsg.sh
new file mode 100644
index 000000000..47cbd3c9a
--- /dev/null
+++ b/t/preproc-errmsg.sh
@@ -0,0 +1,78 @@
+#! /bin/sh
+# Copyright (C) 2013-2017 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 <https://www.gnu.org/licenses/>.
+
+# Tests error messages when '%reldir%' and '%canon_reldir%' substitutions
+# (and their shorthands '%D%' and '%C%') are involved.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_PROG_CC
+AC_PROG_RANLIB
+AM_PROG_AR
+END
+
+: > ar-lib
+
+mkdir sub sub/sub2
+
+cat > Makefile.am <<'END'
+%canon_reldir%_x1_SOURCES = bar.c
+include sub/local.mk
+END
+
+cat > sub/local.mk <<'END'
+AUTOMAKE_OPTIONS = -Wno-extra-portability
+include %D%/sub2/more.mk
+noinst_LIBRARIES = %reldir%-one.a %D%-two.a
+%C%_x2_SOURCES = foo.c
+END
+
+cat > sub/sub2/more.mk <<'END'
+%C%_UNDEFINED +=
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+
+cat > expected << 'END'
+sub/sub2/more.mk:1: sub_sub2_UNDEFINED must be set with '=' before using '+='
+Makefile.am:2: 'sub/local.mk' included from here
+sub/local.mk:2: 'sub/sub2/more.mk' included from here
+sub/local.mk:3: 'sub-one.a' is not a standard library name
+sub/local.mk:3: did you mean 'libsub-one.a'?
+Makefile.am:2: 'sub/local.mk' included from here
+sub/local.mk:3: 'sub-two.a' is not a standard library name
+sub/local.mk:3: did you mean 'libsub-two.a'?
+Makefile.am:2: 'sub/local.mk' included from here
+sub/local.mk:4: variable 'sub_x2_SOURCES' is defined but no program or
+sub/local.mk:4: library has 'sub_x2' as canonical name (possible typo)
+Makefile.am:2: 'sub/local.mk' included from here
+Makefile.am:1: variable 'x1_SOURCES' is defined but no program or
+Makefile.am:1: library has 'x1' as canonical name (possible typo)
+END
+
+# We need to break these substitutions into multiple sed invocations
+# to avoid spuriously triggering the 'sc_tests_logs_duplicate_prefixes'
+# maintainer check.
+sed -e '/warnings are treated as errors/d' stderr > t1
+sed -e 's/: warning:/:/' t1 > t2
+sed -e 's/: error:/:/' t2 > t3
+sed -e 's/ */ /g' t3 > obtained
+
+diff expected obtained
+
+:
diff --git a/t/primary-prefix-couples-documented-valid.sh b/t/primary-prefix-couples-documented-valid.sh
new file mode 100644
index 000000000..6cef44f2c
--- /dev/null
+++ b/t/primary-prefix-couples-documented-valid.sh
@@ -0,0 +1,87 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that the "uncommon" prefix/primary combinations used in
+# examples in the Automake manual do not cause obvious errors.
+# Please keep this test in sync with the automake manual.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+AC_PROG_LIBTOOL
+AM_PROG_GCJ
+AM_PATH_PYTHON
+END
+
+# Fake libtool availability.
+: > ltmain.sh
+cat > acinclude.m4 <<'END'
+AC_DEFUN([AC_PROG_LIBTOOL],
+ [AC_SUBST([LIBTOOL], [:])])
+END
+
+cat > Makefile.am <<'END'
+xmldir = $(datadir)/xml
+xml_DATA = file.xml
+
+data_DATA = file1 file2 file3
+data2dir = $(datadir)
+data2_DATA = file4 file5 file6
+
+aclocaldir = $(datadir)/aclocal
+aclocal_DATA = mymacro.m4 myothermacro.m4
+
+imagesdir = $(pkgdatadir)/images
+soundsdir = $(pkgdatadir)/sounds
+dist_images_DATA = images/vortex.pgm
+dist_sounds_DATA = sounds/whirl.ogg
+
+lisp_DATA = file1.el file2.el
+
+javadir = $(datadir)/java
+dist_java_JAVA = a.java b.java c.java
+
+pkgpython_PYTHON = foo.py
+
+pyexec_LTLIBRARIES = quaternion.la
+quaternion_la_SOURCES = quaternion.c support.c support.h
+quaternion_la_LDFLAGS = -avoid-version -module
+
+myexecbindir = /exec
+myexecbin_PROGRAMS = zardoz
+
+foodir = $(prefix)/foo
+barexecdir = $(prefix)/bar/binaries
+foo_SCRIPTS = foo.sh
+barexec_SCRIPTS = quux.pl
+
+my_execbindir = $(pkglibdir)
+my_doclibdir = $(docdir)
+my_execbin_PROGRAMS = foo
+my_doclib_LIBRARIES = libquux.a
+END
+
+$ACLOCAL
+
+# Both these two invocations are meant.
+# They exercise both code paths concerning auxiliary files.
+$AUTOMAKE -a
+$AUTOMAKE
+
+:
diff --git a/t/primary-prefix-couples-force-valid.sh b/t/primary-prefix-couples-force-valid.sh
new file mode 100644
index 000000000..f7ba8b7b5
--- /dev/null
+++ b/t/primary-prefix-couples-force-valid.sh
@@ -0,0 +1,92 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that a user who wants to use an invalid prefix/primary
+# combination can do so with a proper workaround.
+# For example, this:
+# lib_PROGRAMS = foo
+# is expected to cause an automake error, but this:
+# bardir = $(libdir)
+# bar_PROGRAMS = foo
+# should work.
+
+required=cc
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+my_libdir = $(libdir)
+my_lib_PROGRAMS = foo
+
+foodir = $(bindir)
+foo_LIBRARIES = libquux.a
+
+xdir = $(libexecdir)
+x_HEADERS = bar.h
+
+installcheck-local: test
+.PHONY: test
+test:
+ (cd '$(prefix)' && find .);: For debugging.
+ ls -l '$(libdir)/foo$(EXEEXT)'
+ test -f '$(libdir)/foo$(EXEEXT)'
+ test -x '$(libdir)/foo$(EXEEXT)'
+ ls -l '$(bindir)/libquux.a'
+ test -f '$(bindir)/libquux.a'
+ ls -l '$(libexecdir)/bar.h'
+ test -f '$(libexecdir)/bar.h'
+## If this test is run as root, "test -x" could succeed also for
+## non-executable files, so we need to protect the next check.
+## See automake bug#12041.
+ if test -x Makefile; then echo SKIP THIS; else \
+ test ! -x '$(libexecdir)/bar.h'; \
+ fi;
+END
+
+cat > foo.c <<'END'
+int main (void)
+{
+ return 0;
+}
+END
+
+cat > libquux.c <<'END'
+int quux(void)
+{
+ return 1;
+}
+END
+
+: > bar.h
+
+$ACLOCAL
+$AUTOMAKE -a
+$AUTOCONF
+
+cwd=$(pwd) || fatal_ "getting current working directory"
+./configure --prefix="$cwd/_inst"
+
+$MAKE install
+$MAKE installcheck
+$MAKE distcheck
+
+:
diff --git a/t/primary-prefix-invalid-couples.tap b/t/primary-prefix-invalid-couples.tap
new file mode 100644
index 000000000..1058ff5c0
--- /dev/null
+++ b/t/primary-prefix-invalid-couples.tap
@@ -0,0 +1,193 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Not all primaries/directories combinations are valid.
+# Automake should flag them as errors.
+# Originated from PR/294, extended later (following bug #7647) to
+# cover more cases.
+# See also test 'primary-prefix-valid-couples.test'.
+
+. test-init.sh
+
+plan_ "later"
+
+oIFS=$IFS # Saved for later.
+
+: > ar-lib
+: > ltmain.sh
+: > texinfo.tex
+: > py-compile
+: > config.guess
+: > config.sub
+
+cat >> configure.ac <<'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+AC_SUBST([LIBTOOL], [:]) dnl So that we don't have to require Libtool.
+AM_PROG_GCJ
+AM_PATH_PYTHON
+AM_PATH_LISPDIR
+END
+
+$ACLOCAL || fatal_ "aclocal failure"
+
+# Please keep this list in sync with the list of "Directory Variables"
+# in the GNU Coding Standards and with the list additional directory
+# variables provided by autoconf and/or automake (pkgdatadir, pkglibdir,
+# ...). See also the hash '%standard_prefix' in the automake script.
+prefixes='bin data dataroot doc dvi exec html include info lib libexec
+ lisp locale localstate man man1 man2 man3 man4 man5 man6 man7
+ man8 man9 oldinclude pdf pkgdata pkginclude pkglib pkglibexec
+ ps sbin sharedstate sysconf'
+# Please keep this list in sync with the list of primaries documented in
+# the Automake manual (see the "The Uniform Naming Scheme" section).
+primaries='PROGRAMS LIBRARIES LTLIBRARIES LISP PYTHON JAVA SCRIPTS DATA
+ HEADERS MANS TEXINFOS'
+
+# Use files, not variables, to hold the list of all the possible
+# prefix_PRIMARY couples and the list of those couples valid for
+# automake, to avoid having unreadable very verbose traces.
+
+set +x # Don't be overly verbose.
+
+for prefix in $prefixes; do
+ for primary in $primaries; do
+ echo ${prefix} ${primary}
+ done
+done >all.list
+
+for primary in $primaries; do
+ prefixes_ok=''
+ case $primary in
+ LIBRARIES|LTLIBRARIES)
+ prefixes_ok='lib pkglib'
+ ;;
+ PROGRAMS)
+ prefixes_ok='bin sbin libexec pkglibexec'
+ ;;
+ SCRIPTS)
+ prefixes_ok='bin sbin libexec pkglibexec pkgdata'
+ ;;
+ DATA)
+ prefixes_ok='data dataroot pkgdata doc html dvi pdf ps
+ sysconf sharedstate localstate lisp'
+ ;;
+ HEADERS)
+ prefixes_ok='include oldinclude pkginclude'
+ ;;
+ LISP)
+ prefixes_ok='lisp'
+ ;;
+ PYTHON)
+ prefixes_ok='python'
+ ;;
+ JAVA)
+ prefixes_ok='java'
+ ;;
+ MANS)
+ # FIXME: Here we'd like to have:
+ # prefixes_ok='man man1 man2 man3 man4 man5 man6 man7 man8 man9'
+ # but Automake currently fails on that, as it allows the MANS
+ # primary to be coupled to any prefix.
+ # See also Automake bug#7656.
+ # We should dig out how automake had come to behave this way, and
+ # if such a behaviour can be safely changed.
+ prefixes_ok=$prefixes
+ ;;
+ TEXINFOS)
+ # FIXME: Here we'd like to have:
+ # prefixes_ok='info'
+ # but Automake currently fails on that, as it allows the use of
+ # 'foo_TEXINFOS' to declare extra Texinfo sources for the 'foo'
+ # Texinfo manual, as in e.g.:
+ # info_TEXINFOS = foo.texi
+ # foo_TEXINFOS = gpl.texi
+ # See also Automake bug#7657.
+ prefixes_ok=$prefixes
+ ;;
+ *)
+ fatal_ "unrecognized primary '$primary'"
+ ;;
+ esac
+ for prefix in $prefixes_ok; do
+ echo ${prefix}_${primary}
+ done
+done >allow.list
+
+# 'html_TEXINFOS' is not yet supported, and might never be.
+grep -v '^html TEXINFOS$' all.list | awk '{print NR, $0}' > t
+mv -f t all.list
+
+# For debugging.
+echo '=== all.list ==='
+cat all.list
+echo '=== allow.list ==='
+cat allow.list
+
+# Create the Makefile.am.
+while read lineno prefix primary; do
+ test -n "$prefix" && test -n "$primary" && test 0 -lt $lineno \
+ || fatal_ "internal error in 'all.list'"
+ pfx='' ext=''
+ case $primary in
+ LTLIBRARIES) pfx=lib ext=la;;
+ LIBRARIES) pfx=lib ext=a;;
+ MANS) ext=man;;
+ HEADERS) ext=h;;
+ JAVA) ext=java;;
+ PYTHON) ext=py;;
+ LISP) ext=el;;
+ TEXINFOS) ext=texi;;
+ esac
+ test -z "$ext" || ext=.$ext
+ if test $primary = TEXINFOS; then
+ echo @setfilename foo$lineno.info > foo$lineno.texi
+ fi
+ echo ${prefix}_${primary} = ${pfx}foo${lineno}${ext}
+done <all.list >Makefile.am
+
+# For debugging.
+echo '=== Makefile.am ==='
+cat Makefile.am
+
+set -x # Restore shell xtraces from now on.
+
+AUTOMAKE_fails \
+ -d "'automake -a' error out on mismatched prefix/primary couples" \
+ -- --add-missing
+
+while read lineno prefix primary; do
+ test -n "$prefix" && test -n "$primary" && test 0 -lt $lineno \
+ || fatal_ "internal error in 'all.list'"
+ grep "^${prefix}_${primary}$" allow.list >/dev/null && continue
+ errmsg_rx=".*${prefix}dir.* not a legitimate directory .*$primary"
+ command_ok_ \
+ "mismatched prefix/primary in ${prefix}_${primary}" \
+ grep "^Makefile\\.am:$lineno: $errmsg_rx" stderr
+done <all.list
+
+# Check that automake really failed only for the expected reason(s).
+grep -v 'dir.* not a legitimate directory' stderr && exit 1
+
+# Check that the same failures are present without the '--add-missing'
+# option.
+mv stderr stderr.old
+AUTOMAKE_fails -d "automake error out on mismatched prefix/primary couples"
+command_ok_ "... and with the same diagnostic of 'automake -a'" \
+ diff stderr.old stderr
+
+:
diff --git a/t/primary-prefix-valid-couples.sh b/t/primary-prefix-valid-couples.sh
new file mode 100644
index 000000000..b7c64e2b9
--- /dev/null
+++ b/t/primary-prefix-valid-couples.sh
@@ -0,0 +1,87 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for valid prefix/primary combinations.
+# See also test 'primary-prefix-invalid-couples.sh'.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+AC_PROG_LIBTOOL
+AM_PATH_PYTHON
+AM_PATH_LISPDIR
+END
+
+# Fake libtool availability.
+: > ltmain.sh
+: > config.sub
+: > config.guess
+cat > acinclude.m4 <<'END'
+AC_DEFUN([AC_PROG_LIBTOOL],
+ [AC_SUBST([LIBTOOL], [:])])
+END
+
+# Other required files.
+echo '@setfilename foo.info' > foo.texi
+: > texinfo.tex
+: > py-compile
+: > ar-lib
+
+# Setup Makefile.am.
+
+: > Makefile.am
+
+for p in bin sbin libexec pkglibexec; do
+ echo "${p}_PROGRAMS = prog-$p" >> Makefile.am
+done
+
+for p in lib pkglib; do
+ echo "${p}_LIBRARIES = libs-$p.a" >> Makefile.am
+ echo "${p}_LTLIBRARIES = libd-$p.la" >> Makefile.am
+done
+
+for p in bin sbin libexec pkglibexec pkgdata; do
+ echo "${p}_SCRIPTS = $p.sh" >> Makefile.am
+done
+
+for p in data dataroot pkgdata doc html dvi pdf ps sysconf \
+ sharedstate localstate lisp; do
+ echo "${p}_DATA = $p.dat" >> Makefile.am
+done
+
+for p in include oldinclude pkginclude; do
+ echo "${p}_HEADERS = $p.h" >> Makefile.am
+done
+
+for p in man man1 man2 man3 man4 man5 man6 man7 man8 man9; do
+ echo "${p}_MANS = bar.$p"
+done
+
+echo "info_TEXINFOS = foo.texi" >> Makefile.am
+echo "lisp_LISP = foo.el" >> Makefile.am
+echo "python_PYTHON = foo.py" >> Makefile.am
+
+awk '{print NR ":" $0}' Makefile.am # For debugging.
+
+# Go with the tests.
+
+$ACLOCAL
+$AUTOMAKE
+
+:
diff --git a/t/primary.sh b/t/primary.sh
new file mode 100644
index 000000000..24ce9bf84
--- /dev/null
+++ b/t/primary.sh
@@ -0,0 +1,30 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure errors in am_install_var work.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = @programs@
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+grep 'bin_PROGRAMS.*configure substitution' stderr
+grep 'EXTRA_PROGRAMS.*not defined' stderr
+
+:
diff --git a/t/primary2.sh b/t/primary2.sh
new file mode 100644
index 000000000..951709b14
--- /dev/null
+++ b/t/primary2.sh
@@ -0,0 +1,32 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure errors in am_install_var work.
+
+. test-init.sh
+
+echo AC_PROG_CC >> configure.ac
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = @programs@
+EXTRA_PROGRAMS = joe @more@
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+grep 'EXTRA_PROGRAMS.*configure substitution' stderr
+
+:
diff --git a/t/primary3.sh b/t/primary3.sh
new file mode 100644
index 000000000..0307f25c5
--- /dev/null
+++ b/t/primary3.sh
@@ -0,0 +1,43 @@
+#! /bin/sh
+# Copyright (C) 2004-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure we can build programs ending in '.la'
+
+required=cc
+. test-init.sh
+
+cat >>configure.ac <<EOF
+AC_PROG_CC
+AC_OUTPUT
+EOF
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo.la
+foo_la_SOURCES = foo.c
+.PHONY: test
+test: all
+ test -f foo.la$(EXEEXT)
+END
+
+echo 'int main () { return 0; }' > foo.c
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+$MAKE test
+
+:
diff --git a/t/print-libdir.sh b/t/print-libdir.sh
new file mode 100644
index 000000000..a19db0feb
--- /dev/null
+++ b/t/print-libdir.sh
@@ -0,0 +1,46 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test on automake options '--print-data-dir' and '--print-script-dir'.
+
+am_create_testdir=empty
+. test-init.sh
+
+libdir=$($AUTOMAKE --print-libdir) || exit 1
+case $libdir in /*);; *) exit 1;; esac
+test -d "$libdir"
+test "$libdir" = "$am_pkgvdatadir"
+test "$libdir" = "$am_scriptdir"
+
+: > Makefile.am
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AC_CONFIG_AUX_DIR([.])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile])
+END
+
+touch ChangeLog README NEWS AUTHORS COPYING
+
+$ACLOCAL
+$AUTOMAKE --gnu --add-missing
+ls -l
+
+diff missing "$libdir"/missing
+diff INSTALL "$libdir"/INSTALL
+
+:
diff --git a/t/proginst.sh b/t/proginst.sh
new file mode 100644
index 000000000..98ce4f81d
--- /dev/null
+++ b/t/proginst.sh
@@ -0,0 +1,29 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for bug where when multiple scripts are installed,
+# the check for AC_PROG_INSTALL fails.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+bin_SCRIPTS = zardoz qbert brownie
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+:
diff --git a/t/programs-primary-rewritten.sh b/t/programs-primary-rewritten.sh
new file mode 100644
index 000000000..1b2cd3db7
--- /dev/null
+++ b/t/programs-primary-rewritten.sh
@@ -0,0 +1,61 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure xxx_PROGRAMS gets properly rewritten where needed. These
+# checks have been introduced in commit 'Release-1-9-254-g9d0eaef' into
+# the former test 'subst2.test'.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_SUBST([FOO], [c])
+AC_OUTPUT
+END
+
+cat >Makefile.am <<'END'
+AUTOMAKE_OPTIONS = no-dependencies
+CC = false
+EXEEXT = .bin
+
+check_PROGRAMS = a
+bin_PROGRAMS = b @FOO@
+noinst_PROGRAMS = $(bar) $(baz:=de)
+EXTRA_PROGRAMS =
+
+bar = zardoz
+baz = mau
+
+.PHONY: test
+test:
+ is $(check_PROGRAMS) == a.bin
+ is $(bin_PROGRAMS) == b.bin c
+ is $(noinst_PROGRAMS) == zardoz.bin maude.bin
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+grep PROGRAMS Makefile.in # For debugging.
+
+# Check that no useless indirections are used.
+grep '^check_PROGRAMS = a$(EXEEXT)$' Makefile.in
+grep '^bin_PROGRAMS = b$(EXEEXT) @FOO@$' Makefile.in
+
+$AUTOCONF
+./configure
+$MAKE test
+
+:
diff --git a/t/py-compile-basedir.sh b/t/py-compile-basedir.sh
new file mode 100644
index 000000000..bc1af61e6
--- /dev/null
+++ b/t/py-compile-basedir.sh
@@ -0,0 +1,54 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test the '--basedir' option of the 'py-compile' script,
+
+required=python
+. test-init.sh
+
+# We'll need to create files in '..', so we need one more subdirectory
+# level in order not to clutter up the top-level tests directory.
+mkdir sandbox
+cd sandbox
+
+cp "$am_scriptdir/py-compile" . \
+ || fatal_ "failed to fetch auxiliary script py-compile"
+
+f=__init__
+for d in foo foo/bar "$(pwd)/foo" . .. ../foo ''; do
+ if test -z "$d"; then
+ d2=.
+ else
+ d2=$d
+ fi
+ ../install-sh -d "$d2" "$d2/sub" || exit 99
+ : > "$d2/$f.py"
+ : > "$d2/sub/$f.py"
+ ./py-compile --basedir "$d" "$f.py" "sub/$f.py"
+ find "$d2" # For debugging.
+ py_installed "$d2/$f.pyc"
+ py_installed "$d2/$f.pyo"
+ py_installed "$d2/sub/$f.pyc"
+ py_installed "$d2/sub/$f.pyo"
+ files=$(find "$d2" | grep '\.py[co]$')
+ test $(echo "$files" | wc -l) -eq 4
+ case $d2 in
+ .|..) rm -f $files;;
+ *) rm -rf "$d2";;
+ esac
+done
+
+:
diff --git a/t/py-compile-basic.sh b/t/py-compile-basic.sh
new file mode 100644
index 000000000..ab12f272b
--- /dev/null
+++ b/t/py-compile-basic.sh
@@ -0,0 +1,70 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test more basic functionalities of the 'py-compile' script,
+# with "believable" python sources. See also related test
+# 'py-compile-basic2.sh'.
+
+required=python
+. test-init.sh
+
+cp "$am_scriptdir/py-compile" . \
+ || fatal_ "failed to fetch auxiliary script py-compile"
+
+cat > foo.py <<'END'
+# Try out some non-trivial syntax in here.
+
+'''Module docstring'''
+
+def foo (*args, **kwargs):
+ """Function docstring
+ with embedded newline"""
+ return 1
+
+class Foo:
+ r"""Class docstring"""
+ def __init__(self):
+ r'''Method docstring
+ with
+ embedded
+ newlines'''
+ pass
+
+bar = baz = (1, (2,), [3, 4]); zardoz = 0;
+END
+
+mkdir sub
+cat > sub/bar.py <<'END'
+# Import of non-existent modules, or assertion of false conditions,
+# shouldn't cause problems, as it should be enough for the code to
+# be syntactically correct.
+import Automake.No.Such.Module
+assert False
+END
+
+# An empty file in a more deeply-nested directory should be ok as well.
+mkdir -p 1/_/2/_/3/_
+: > 1/_/2/_/3/_/0.py
+
+./py-compile foo.py sub/bar.py 1/_/2/_/3/_/0.py
+py_installed foo.pyc
+py_installed foo.pyo
+py_installed sub/bar.pyc
+py_installed sub/bar.pyo
+py_installed 1/_/2/_/3/_/0.pyc
+py_installed 1/_/2/_/3/_/0.pyo
+
+:
diff --git a/t/py-compile-destdir.sh b/t/py-compile-destdir.sh
new file mode 100644
index 000000000..c524ecec1
--- /dev/null
+++ b/t/py-compile-destdir.sh
@@ -0,0 +1,47 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test the '--destdir' option of the 'py-compile' script,
+
+required=python
+. test-init.sh
+
+cp "$am_scriptdir/py-compile" . \
+ || fatal_ "failed to fetch auxiliary script py-compile"
+
+# Should not give false positives when grepping for it, so use
+# an "uncommon" string (with ugly CamelCase).
+destdir=TheDestDir
+
+mkdir sub $destdir $destdir/sub
+echo 'def foo (): return "foo"' > $destdir/foo.py
+echo 'def bar (): return "bar"' > $destdir/sub/bar.py
+
+./py-compile --destdir $destdir foo.py sub/bar.py
+
+find $destdir # For debugging.
+st=0
+for x in c o; do
+ for b in foo sub/bar; do
+ f=$(pyc_location -p "$destdir/$b.py$x")
+ test -f "$f"
+ strings "$f" || : # For debugging.
+ $FGREP $destdir $f && { echo BAD: $f; st=1; }
+ done
+done
+exit $st
+
+:
diff --git a/t/py-compile-env.sh b/t/py-compile-env.sh
new file mode 100644
index 000000000..d25d67da3
--- /dev/null
+++ b/t/py-compile-env.sh
@@ -0,0 +1,59 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure 'py-compile' honours the PYTHON environment variable.
+
+. test-init.sh
+
+cp "$am_scriptdir/py-compile" . \
+ || fatal_ "failed to fetch auxiliary script py-compile"
+
+cat > my-py <<'END'
+#!/bin/sh
+: > my-py.run
+END
+chmod a+x my-py
+
+mkdir sub1
+cd sub1
+
+PYTHON=: ../py-compile foo.py
+ls | grep . && exit 1
+
+PYTHON=false ../py-compile foo.py && exit 1
+ls | grep . && exit 1
+
+PYTHON='echo GrEpMe AndMeToo' ../py-compile foo.py
+PYTHON='echo GrEpMe AndMeToo' ../py-compile foo.py | grep 'GrEpMe AndMeToo'
+ls | grep . && exit 1
+
+cd ..
+mkdir sub2
+cd sub2
+
+PYTHON=../my-py ../py-compile foo.py
+test -f my-py.run
+ls | grep -v '^my-py\.run$' | grep . && exit 1
+
+cd ..
+mkdir sub3
+cd sub3
+PATH=..$PATH_SEPARATOR$PATH; export PATH
+PYTHON=my-py py-compile foo.py
+test -f my-py.run
+ls | grep -v '^my-py\.run$' | grep . && exit 1
+
+:
diff --git a/t/py-compile-option-terminate.sh b/t/py-compile-option-terminate.sh
new file mode 100644
index 000000000..a2c2d2095
--- /dev/null
+++ b/t/py-compile-option-terminate.sh
@@ -0,0 +1,43 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that a non-option argument and the '--' special argument
+# explicitly terminate the option list for 'py-compile'.
+
+required=python
+. test-init.sh
+
+cp "$am_scriptdir/py-compile" . \
+ || fatal_ "failed to fetch auxiliary script py-compile"
+
+: > ./-o.py
+: > ./--foo.py
+./py-compile -- -o.py --foo.py
+py_installed ./-o.pyc
+py_installed ./-o.pyo
+py_installed ./--foo.pyc
+py_installed ./--foo.pyo
+rm -f ./-*.py[co]
+: > x.py
+./py-compile x.py -o.py --foo.py
+py_installed ./x.pyc
+py_installed ./x.pyo
+py_installed ./-o.pyc
+py_installed ./-o.pyo
+py_installed ./--foo.pyc
+py_installed ./--foo.pyo
+
+:
diff --git a/t/py-compile-usage.sh b/t/py-compile-usage.sh
new file mode 100644
index 000000000..57574a4c0
--- /dev/null
+++ b/t/py-compile-usage.sh
@@ -0,0 +1,75 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test 'py-compile --help', 'py-compile --version', and that 'py-compile'
+# correctly complains on wrong usage.
+
+. test-init.sh
+
+cp "$am_scriptdir/py-compile" . \
+ || fatal_ "failed to fetch auxiliary script py-compile"
+
+# --help
+
+./py-compile --help >stdout 2>stderr \
+ || { cat stdout; cat stderr >&2; exit 1; }
+cat stdout
+test -s stderr && { cat stderr >&2; exit 1; }
+grep '^Usage: py-compile .' stdout
+$FGREP ' [--basedir DIR]' stdout
+$FGREP ' [--destdir DIR]' stdout
+
+# --version
+
+./py-compile --version >stdout 2>stderr \
+ || { cat stdout; cat stderr >&2; exit 1; }
+cat stdout
+test -s stderr && { cat stderr >&2; exit 1; }
+year='20[0-9][0-9]' # Hopefully automake will be obsolete in 80 years ;-)
+month='(0[0-9]|1[012])'
+day='([012][0-9]|3[01])'
+hour='([01][0-9]|2[0123])'
+LC_ALL=C $EGREP "^py-compile $year-$month-$day\.$hour" stdout
+test $(wc -l <stdout) -eq 1
+
+# Unknown option.
+
+for opt in -b -d --foo; do
+ ./py-compile $opt 2>stderr && { cat stderr >&2; exit 1; }
+ cat stderr >&2
+ grep "^py-compile: unrecognized option '$opt'" stderr
+ grep "^Try 'py-compile --help' for more information" stderr
+done
+
+# Missing option argument.
+
+for opt in --basedir --destdir; do
+ ./py-compile $opt 2>stderr && { cat stderr >&2; exit 1; }
+ cat stderr >&2
+ grep "^py-compile: option '$opt' requires an argument" stderr
+ grep "^Try 'py-compile --help' for more information" stderr
+done
+
+# Missing files.
+
+for args in '' '--basedir dir' '--destdir dir'; do
+ ./py-compile $args 2>stderr && { cat stderr >&2; exit 1; }
+ cat stderr >&2
+ grep '^py-compile: no files given' stderr
+ grep "^Try 'py-compile --help' for more information" stderr
+done
+
+:
diff --git a/t/python-am-path-iftrue.sh b/t/python-am-path-iftrue.sh
new file mode 100644
index 000000000..be837ed9c
--- /dev/null
+++ b/t/python-am-path-iftrue.sh
@@ -0,0 +1,55 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test ACTION-IF-TRUE in AM_PATH_PYTHON.
+
+am_create_testdir=empty
+required=python
+. test-init.sh
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+m4_include([mypy.m4])
+AC_OUTPUT
+END
+
+# $PYTHON is supposed to be properly set in ACTION-IF-TRUE.
+cat > mypy.m4 << 'END'
+AM_PATH_PYTHON(, [$PYTHON -V >py-version 2>&1])
+END
+
+$ACLOCAL
+$AUTOCONF
+./configure
+grep '^Python [0-9]\.[0-9][0-9]*\.[0-9]' py-version
+
+# The same, but requiring a version.
+
+rm -rf autom4te*.cache
+
+# $PYTHON is supposed to be properly set in ACTION-IF-TRUE.
+cat > mypy.m4 << 'END'
+AM_PATH_PYTHON([0.0], [$PYTHON -c 'print("%u:%u" % (1-1, 2**0))' > py.out])
+END
+
+# The "--force" option here is truly needed to avoid potential timestamp
+# races. See automake bug#12210.
+$ACLOCAL --force
+$AUTOCONF --force
+./configure
+test x"$(cat py.out)" = x0:1
+
+:
diff --git a/t/python-dist.sh b/t/python-dist.sh
new file mode 100644
index 000000000..6233746b1
--- /dev/null
+++ b/t/python-dist.sh
@@ -0,0 +1,78 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test distribution of *_PYTHON files.
+
+# This test does not require python.
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_PATH_PYTHON([], [:], [:])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+python_PYTHON = python.py
+dist_python_PYTHON = python-dist.py
+nodist_python_PYTHON = python-nodist.py
+
+pkgpython_PYTHON = pkgpython.py
+dist_pkgpython_PYTHON = pkgpython-dist.py
+nodist_pkgpython_PYTHON = pkgpython-nodist.py
+
+mydir = $(prefix)/my
+my_PYTHON = my.py
+dist_my_PYTHON = my-dist.py
+nodist_my_PYTHON = my-nodist.py
+
+my.py my-dist.py my-nodist.py:
+ : > $@
+
+.PHONY: disttest
+disttest: distdir
+ ls -l $(distdir)
+ test -f $(distdir)/python.py
+ test -f $(distdir)/python-dist.py
+ test ! -f $(distdir)/python-nodist.py
+ test -f $(distdir)/pkgpython.py
+ test -f $(distdir)/pkgpython-dist.py
+ test ! -f $(distdir)/pkgpython-nodist.py
+ test -f $(distdir)/my.py
+ test -f $(distdir)/my-dist.py
+ test ! -f $(distdir)/my-nodist.py
+END
+
+: > python.py
+: > python-dist.py
+: > python-nodist.py
+
+: > pkgpython.py
+: > pkgpython-dist.py
+: > pkgpython-nodist.py
+
+: > py-compile
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+
+$MAKE disttest
+# It's not distributed, hence it shouldn't be needlessly generated.
+test ! -e my-nodist.py
+
+:
diff --git a/t/python-missing.sh b/t/python-missing.sh
new file mode 100644
index 000000000..608d92360
--- /dev/null
+++ b/t/python-missing.sh
@@ -0,0 +1,82 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test detection of missing Python.
+# See also related test t/python-am-path-missing-2.sh (which requires
+# an actual python program).
+
+am_create_testdir=empty
+# An actual python is *not* required in this test.
+. test-init.sh
+
+unset PYTHON
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+m4_include([mypy.m4])
+AC_OUTPUT
+END
+
+echo AM_PATH_PYTHON > mypy.m4
+
+$ACLOCAL
+$AUTOCONF
+
+# Simulate no Python.
+./configure PYTHON=: 2>stderr && { cat stderr >&2; exit 1; }
+cat stderr >&2
+grep 'no suitable Python interpreter found' stderr
+
+# Again, but from the environment this time.
+env PYTHON=: ./configure 2>stderr && { cat stderr >&2; exit 1; }
+cat stderr >&2
+grep 'no suitable Python interpreter found' stderr
+
+# Now try using a custom ACTION-IF-NOT-FOUND.
+
+echo 'AM_PATH_PYTHON(,, [echo "$PYTHON" > py])' > mypy.m4
+$AUTOCONF --force
+./configure PYTHON=:
+test x"$(cat py)" = x:
+
+# Now try requiring a version.
+
+rm -rf autom4te*.cache # Will have to re-run aclocal.
+
+# Hopefully the Python team will never release such a version :-)
+echo 'AM_PATH_PYTHON([9999.9], [])' > mypy.m4
+# The "--force" options (here and below) are truly needed to avoid
+# potential timestamp races. See automake bug#12210.
+$ACLOCAL --force
+$AUTOCONF --force
+./configure >stdout 2>stderr && {
+ cat stdout
+ cat stderr >&2
+ exit 1
+}
+cat stdout
+cat stderr >&2
+$EGREP 'checking for a Python interpreter with version >= 9999\.9\.\.\. no(ne)? *$' stdout
+grep 'no suitable Python interpreter found' stderr
+
+# Now try requiring a version and using a custom ACTION-IF-NOT-FOUND.
+
+echo 'AM_PATH_PYTHON([9999.9], [], [echo "$PYTHON" > py])' > mypy.m4
+$AUTOCONF --force
+./configure
+test x"$(cat py)" = x:
+
+:
diff --git a/t/python-pr10995.sh b/t/python-pr10995.sh
new file mode 100644
index 000000000..de751903e
--- /dev/null
+++ b/t/python-pr10995.sh
@@ -0,0 +1,56 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test automake bug#10995: am__py_compile doesn't get correctly defined
+# when there a 'noinst_PYTHON' declaration precedes a 'foo_PYTHON'
+# declaration.
+
+required=python
+. test-init.sh
+
+cat >> configure.ac <<'EOF'
+AM_PATH_PYTHON
+AC_OUTPUT
+EOF
+
+cat > Makefile.am <<'END'
+yesinstdir = $(prefix)/py
+noinst_PYTHON = no.py
+yesinst_PYTHON = yes.py
+disttest: distdir
+ test -f $(distdir)/no.py
+ test -f $(distdir)/yes.py
+END
+
+echo 'def foo(): return 1' > yes.py
+# no.py shouldn't be byte-compiled, so lets make it syntactically invalid.
+echo 'if' > no.py
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+test -f py-compile
+
+./configure --prefix="$(pwd)/inst"
+$MAKE install
+test -f inst/py/yes.py
+test ! -e inst/py/no.py
+py_installed inst/py/yes.pyc
+py_installed --not inst/py/no.pyc
+
+$MAKE disttest
+
+:
diff --git a/t/python-too-old.sh b/t/python-too-old.sh
new file mode 100644
index 000000000..f74f26050
--- /dev/null
+++ b/t/python-too-old.sh
@@ -0,0 +1,61 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test detection of too old Python, also forcing the python to use.
+# See also related test 't/python-am-path-missing.sh'.
+
+am_create_testdir=empty
+required=python
+. test-init.sh
+
+py_too_old ()
+{
+ ./configure ${1+"PYTHON=$1"} >stdout 2>stderr && {
+ cat stdout
+ cat stderr >&2
+ exit 1
+ }
+ cat stdout
+ cat stderr >&2
+ grep "whether $1 version is >= 9999\\.9\\.\\.\\. no *$" stdout
+ grep '[Pp]ython interpreter is too old' stderr
+}
+
+saved_PYTHON=$PYTHON; export saved_PYTHON
+unset PYTHON
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+# Hopefully the Python team will never release such a version.
+AM_PATH_PYTHON([9999.9])
+END
+
+$ACLOCAL
+$AUTOCONF
+
+py_too_old python
+
+mkdir bin
+cat > bin/my-python << 'END'
+#! /bin/sh
+exec $saved_PYTHON ${1+"$@"}
+END
+chmod a+x bin/my-python
+PATH=$(pwd)/bin$PATH_SEPARATOR$PATH
+
+py_too_old my-python
+
+:
diff --git a/t/python-vars.sh b/t/python-vars.sh
new file mode 100644
index 000000000..e436915b2
--- /dev/null
+++ b/t/python-vars.sh
@@ -0,0 +1,105 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that AM_PATH_PYTHON correctly sets all the output variables
+# advertised in the manual.
+
+required=python
+. test-init.sh
+
+# In case the user's config.site defines pythondir or pyexecdir.
+CONFIG_SITE=/dev/null; export CONFIG_SITE
+
+# Update the definition below if the documentation changes.
+# Note that the value of the 'pythondir' and 'pyexecdir' variables can
+# vary among different python installations, so we need more relaxed
+# and ad-hoc checks for them. Also, more proper "functional" checks
+# on them should be done in the 'python-virtualenv.sh' test.
+PYTHON_VERSION=$($PYTHON -c 'import sys; print(sys.version[:3])') || exit 1
+PYTHON_PLATFORM=$($PYTHON -c 'import sys; print(sys.platform)') || exit 1
+PYTHON_EXEC_PREFIX='${exec_prefix}'
+PYTHON_PREFIX='${prefix}'
+pkgpythondir="\${pythondir}/$me"
+pkgpyexecdir="\${pyexecdir}/$me"
+
+pyvars='PYTHON_VERSION PYTHON_PLATFORM PYTHON_PREFIX PYTHON_EXEC_PREFIX
+ pkgpythondir pkgpyexecdir'
+
+cat >> configure.ac << 'END'
+AC_CONFIG_FILES([vars-got pythondir pyexecdir])
+AM_PATH_PYTHON
+AC_OUTPUT
+END
+
+cat > my.py << 'END'
+def my():
+ return 1
+END
+
+cat > Makefile.am << 'END'
+
+python_PYTHON = my.py
+
+EXTRA_DIST = vars-exp
+
+check-local: test-in test-am
+.PHONY: test-in test-am
+
+test-in:
+ cat pythondir
+ case `cat pythondir` in '$${prefix}'/*);; *) exit 1;; esac
+ cat pyexecdir
+ case `cat pyexecdir` in '$${exec_prefix}'/*);; *) exit 1;; esac
+ cat $(srcdir)/vars-exp
+ cat $(builddir)/vars-got
+ diff $(srcdir)/vars-exp $(builddir)/vars-got
+
+## Note: this target's rules will be extended in the "for" loop below.
+test-am:
+ case '$(pythondir)' in '$(prefix)'/*);; *) exit 1;; esac
+ case '$(pyexecdir)' in '$(exec_prefix)'/*);; *) exit 1;; esac
+END
+
+echo @pythondir@ > pythondir.in
+echo @pyexecdir@ > pyexecdir.in
+
+: > vars-exp
+: > vars-got.in
+
+for var in $pyvars; do
+ eval val=\$$var
+ echo "var=$val" >> vars-exp
+ echo "var=@$var@" >> vars-got.in
+ echo "${tab}test x'\$($var)' = x'$val'" >> Makefile.am
+done
+
+cat Makefile.am
+cat vars-got.in
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+
+for var in pythondir pyexecdir $pyvars; do
+ grep "^$var *=" Makefile.in
+done
+
+$AUTOCONF
+./configure PYTHON="$PYTHON"
+
+$MAKE test-in test-am
+$MAKE distcheck
+
+:
diff --git a/t/python-virtualenv.sh b/t/python-virtualenv.sh
new file mode 100644
index 000000000..5ec32f553
--- /dev/null
+++ b/t/python-virtualenv.sh
@@ -0,0 +1,201 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that python support can work well with virtualenvs.
+# This test also works as a mild stress-test on the python support.
+
+required='cc python virtualenv'
+. test-init.sh
+
+# In case the user's config.site defines pythondir or pyexecdir.
+CONFIG_SITE=/dev/null; export CONFIG_SITE
+
+py_version_pre=$($PYTHON -V)
+
+# Skip the test if a proper virtualenv cannot be created.
+virtualenv -p"$PYTHON" --verbose virtenv && py_installed virtenv/bin/activate \
+ || skip_ "couldn't create python virtual environment"
+
+# Activate the virtualenv.
+. ./virtenv/bin/activate
+# Sanity check.
+if test -z "$VIRTUAL_ENV"; then
+ framework_failure_ "can't activate python virtual environment"
+fi
+
+py_version_post=$(python -V)
+
+# Sanity check.
+test "$py_version_pre" = "$py_version_post"
+
+cwd=$(pwd) || fatal_ "getting current working directory"
+py_version=$(python -c 'import sys; print("%u.%u" % tuple(sys.version_info[:2]))')
+py_site=$VIRTUAL_ENV/lib/python$py_version/site-packages
+
+# We need to do do this early, just to set some cache variables properly,
+# since because we're going to unset $PYTHON next.
+if python_has_pep3147; then
+ : PEP 3147 will be used in installation of ".pyc" files
+fi
+# We don't want our original python to be picked up by configure
+# invocations.
+unset PYTHON
+
+# We need control over the package name.
+cat > configure.ac << END
+AC_INIT([am_virtenv], [1.0])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile])
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+AM_PATH_PYTHON
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+python_PYTHON = am_foo.py
+pkgpython_PYTHON = __init__.py
+pyexec_LIBRARIES = libquux.a
+libquux_a_SOURCES = foo.c
+pkgpyexec_LIBRARIES = libzardoz.a
+libzardoz_a_SOURCES = foo.c
+
+.PYTHON: debug test-run
+debug:
+ @echo PYTHON: $(PYTHON)
+ @echo PYTHON_VERSION: $(PYTHON_VERSION)
+ @echo prefix: $(prefix)
+ @echo pythondir: $(pythondir)
+ @echo pkgpythondir: $(pkgpythondir)
+ @echo pyexecdir: $(pyexecdir)
+ @echo pkgpyexecdir: $(pkgpyexecdir)
+test-run:
+ ## In a virtualenv, the default python must be the custom
+ ## virtualenv python.
+ @: \
+ && py1=`python -c 'import sys; print(sys.executable)'` \
+ && py2=`$(PYTHON) -c 'import sys; print(sys.executable)'` \
+ && echo "py1: $$py1" \
+ && echo "py2: $$py2" \
+ && test -n "$$py1" \
+ && test -n "$$py2" \
+ && test x"$$py1" = x"$$py2"
+ ## Check that modules installed in the virtualenv are readily
+ ## available.
+ python -c 'from am_foo import foo_func; assert (foo_func () == 12345)'
+ python -c 'from am_virtenv import old_am; assert (old_am () == "AutoMake")'
+all-local: debug
+END
+
+cat > am_foo.py << 'END'
+def foo_func ():
+ return 12345
+END
+
+cat > __init__.py << 'END'
+def old_am ():
+ return 'AutoMake'
+END
+
+cat > foo.c << 'END'
+int foo (void)
+{
+ return 0;
+}
+END
+
+check_install ()
+{
+ $MAKE install ${1+"$@"}
+
+ test -f "$py_site"/am_foo.py
+ py_installed "$py_site"/am_foo.pyc
+ py_installed "$py_site"/am_foo.pyo
+ py_installed "$py_site"/am_virtenv/__init__.py
+ py_installed "$py_site"/am_virtenv/__init__.pyc
+ py_installed "$py_site"/am_virtenv/__init__.pyo
+ test -f "$py_site"/libquux.a
+ test -f "$py_site"/am_virtenv/libzardoz.a
+}
+
+check_uninstall ()
+{
+ $MAKE uninstall ${1+"$@"}
+
+ test ! -e "$py_site"/am_foo.py
+ py_installed --not "$py_site"/am_foo.pyc
+ py_installed --not "$py_site"/am_foo.pyo
+ test ! -e "$py_site"/am_virtenv/__init__.py
+ py_installed --not "$py_site"/am_virtenv/__init__.pyc
+ py_installed --not "$py_site"/am_virtenv/__init__.pyo
+ test ! -e "$py_site"/libquux.a
+ test ! -e "$py_site"/am_virtenv/libzardoz.a
+}
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+# Try a VPATH build.
+mkdir build
+cd build
+../configure --prefix="$VIRTUAL_ENV"
+check_install
+$MAKE test-run
+check_uninstall
+cd ..
+
+# Try an in-tree build.
+./configure --prefix="$VIRTUAL_ENV"
+check_install
+$MAKE test-run
+check_uninstall
+
+$MAKE distclean
+
+# Overriding pythondir and pyexecdir with cache variables should work.
+./configure am_cv_python_pythondir="$py_site" \
+ am_cv_python_pyexecdir="$py_site"
+check_install
+$MAKE test-run
+check_uninstall
+
+$MAKE distclean
+
+# Overriding pythondir and pyexecdir at make time should be enough.
+./configure --prefix="$cwd/bad-prefix"
+check_install pythondir="$py_site" pyexecdir="$py_site" \
+ AM_MAKEFLAGS="pythondir='$py_site' pyexecdir='$py_site'"
+test ! -e bad-prefix
+$MAKE test-run
+check_uninstall pythondir="$py_site" pyexecdir="$py_site" \
+ AM_MAKEFLAGS="pythondir='$py_site' pyexecdir='$py_site'"
+
+# Also check that the distribution is self-contained, for completeness.
+$MAKE distcheck
+
+# Finally, check that if we disable the virtualenv, we shouldn't be
+# able to access to the installed modules anymore.
+cd build
+$MAKE install
+python -c 'import am_foo; print(am_foo.__file__)'
+python -c 'import am_virtenv; print(am_virtenv.__file__)'
+deactivate "nondestructive"
+python -c 'import am_foo' && exit 1
+python -c 'import am_virtenv' && exit 1
+
+:
diff --git a/t/python.sh b/t/python.sh
new file mode 100644
index 000000000..a5c709d6a
--- /dev/null
+++ b/t/python.sh
@@ -0,0 +1,60 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure py_compile and am__py_compile are correctly defined.
+
+. test-init.sh
+
+echo 'AM_PATH_PYTHON' >> configure.ac
+
+cat > Makefile.am << 'END'
+python_PYTHON = foo.py
+END
+
+cat > Makefile2.am << 'END'
+python_PYTHON = a.py
+nodist_python_PYTHON = b.py
+nobase_python_PYTHON = x/c.py
+mydir = ${prefix}
+my_PYTHON = d.py
+END
+
+# For automake bug#10995.
+cat > Makefile3.am << 'END'
+noinst_PYTHON = un.py
+python_PYTHON = in.py
+END
+
+$ACLOCAL
+
+AUTOMAKE_fails
+grep '^Makefile\.am:1:.* required file.*py-compile' stderr
+
+$AUTOMAKE -a
+grep '^py_compile *=' Makefile.in
+test -f py-compile
+
+$AUTOMAKE Makefile2
+$AUTOMAKE Makefile3
+
+grep "py" Makefile.in Makefile2.in Makefile3.in # For debugging.
+
+for f in Makefile.in Makefile2.in Makefile3.in; do
+ test $(grep -c '^py_compile =' $f) -eq 1
+ test $(grep -c '^am__py_compile =' $f) -eq 1
+done
+
+:
diff --git a/t/python10.sh b/t/python10.sh
new file mode 100644
index 000000000..863c2cee8
--- /dev/null
+++ b/t/python10.sh
@@ -0,0 +1,87 @@
+#! /bin/sh
+# Copyright (C) 2004-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test _PYTHON with conditionals.
+
+required=python
+. test-init.sh
+
+cat >>configure.ac <<'EOF'
+AM_PATH_PYTHON
+AM_CONDITIONAL([ONE], [test "x$one" = x1])
+AC_OUTPUT
+EOF
+
+cat > Makefile.am <<'END'
+if ONE
+mydir=$(prefix)/my
+my_PYTHON = one.py
+else
+yourdir=$(prefix)/your
+your_PYTHON = two.py
+endif
+
+one.py:
+ echo 'def one(): return 1' >$@
+two.py:
+ echo 'def two(): return 1' >$@
+
+.PHONY: disttest
+disttest: distdir
+ ls -l $(distdir)
+ test -f $(distdir)/one.py
+ test -f $(distdir)/two.py
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+inst=inst_
+mkdir inst_ build_
+cd build_
+
+cwd=$(pwd) || fatal_ "getting current working directory"
+
+../configure --prefix="$cwd/$inst" one=0
+$MAKE install
+test -f "$inst/your/two.py"
+py_installed "$inst/your/two.pyc"
+py_installed "$inst/your/two.pyo"
+py_installed --not "$inst/my/one.py"
+py_installed --not "$inst/my/one.pyc"
+py_installed --not "$inst/my/one.pyo"
+$MAKE uninstall
+py_installed --not "$inst/your/two.py"
+py_installed --not "$inst/your/two.pyc"
+py_installed --not "$inst/your/two.pyo"
+
+../configure --prefix=$cwd/"$inst" one=1
+$MAKE install
+py_installed --not "$inst/your/two.py"
+py_installed --not "$inst/your/two.pyc"
+py_installed --not "$inst/your/two.pyo"
+test -f "$inst/my/one.py"
+py_installed "$inst/my/one.pyc"
+py_installed "$inst/my/one.pyo"
+$MAKE uninstall
+py_installed --not "$inst/my/one.py"
+py_installed --not "$inst/my/one.pyc"
+py_installed --not "$inst/my/one.pyo"
+
+$MAKE disttest
+
+:
diff --git a/t/python11.sh b/t/python11.sh
new file mode 100644
index 000000000..305538478
--- /dev/null
+++ b/t/python11.sh
@@ -0,0 +1,58 @@
+#! /bin/sh
+# Copyright (C) 2004-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test missing python.
+
+# Python is not required for this test.
+. test-init.sh
+
+# We don't want to allow user overrides in this test.
+unset PYTHON
+
+cat >>configure.ac <<'EOF'
+m4_define([_AM_PYTHON_INTERPRETER_LIST], [IShouldNotExist1 IShouldNotExist2])
+AM_PATH_PYTHON
+# The following be executed only after the first run, once a
+# third argument has been added to the previous macro.
+echo PYTHON = $PYTHON
+test "$PYTHON" = : || exit 1
+EOF
+
+: > Makefile.am
+
+$ACLOCAL
+$AUTOCONF
+
+./configure >stdout 2>stderr && { cat stdout; cat stderr >&2; exit 1; }
+cat stdout
+cat stderr >&2
+grep 'checking for IShouldNotExist1' stdout
+grep 'checking for IShouldNotExist2' stdout
+grep 'no suitable Python interpreter found' stderr
+
+sed 's/AM_PATH_PYTHON/AM_PATH_PYTHON(,,:)/' configure.ac >configure.tmp
+mv -f configure.tmp configure.ac
+$ACLOCAL --force
+$AUTOCONF --force
+# This one should define PYTHON as ":" and exit successfully.
+./configure
+
+# Any user setting should be used.
+./configure PYTHON=foo >stdout && { cat stdout; exit 1; }
+cat stdout
+grep 'PYTHON = foo' stdout
+
+:
diff --git a/t/python12.sh b/t/python12.sh
new file mode 100644
index 000000000..f804d84c1
--- /dev/null
+++ b/t/python12.sh
@@ -0,0 +1,54 @@
+#! /bin/sh
+# Copyright (C) 2004-2017 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 <https://www.gnu.org/licenses/>.
+
+# Ensure DESTDIR is not included in byte-compiled files.
+
+required=python
+. test-init.sh
+
+cat >>configure.ac <<'EOF'
+AM_PATH_PYTHON
+AC_OUTPUT
+EOF
+
+cat >Makefile.am <<'END'
+mydir = $(datadir)/my
+my_PYTHON = my.py
+
+my.py:
+ echo 'def my(): return 1' >$@
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+destdir=$(pwd)/inst
+mkdir inst build
+cd build
+../configure --prefix="/usr"
+$MAKE install DESTDIR=$destdir
+
+# Perfunctory test that the files were created.
+test -f "$destdir/usr/share/my/my.py"
+pyo=$(pyc_location -p "$destdir/usr/share/my/my.pyo")
+pyc=$(pyc_location -p "$destdir/usr/share/my/my.pyc")
+
+# If DESTDIR has made it into the byte compiled files, fail the test.
+st=0; $FGREP "$destdir" "$pyc" "$pyo" || st=$?
+test $st -eq 1
+
+:
diff --git a/t/python2.sh b/t/python2.sh
new file mode 100644
index 000000000..d97fe2910
--- /dev/null
+++ b/t/python2.sh
@@ -0,0 +1,106 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that Automake suggests using AM_PATH_PYTHON.
+
+. test-init.sh
+
+$ACLOCAL
+
+echo 1. pythondir not defined
+
+cat > Makefile.am <<'END'
+PYTHON = x
+python_PYTHON = foo.py
+END
+
+AUTOMAKE_fails -a
+grep 'pythondir.*undefined' stderr
+grep AM_PATH_PYTHON stderr
+
+
+echo 2. pkgpythondir not defined
+
+cat > Makefile.am <<'END'
+PYTHON = x
+pkgpython_PYTHON = foo.py
+END
+
+AUTOMAKE_fails -a
+grep 'pkgpythondir.*undefined' stderr
+grep AM_PATH_PYTHON stderr
+
+
+echo 3. pyexecdir not defined
+
+cat > Makefile.am <<'END'
+PYTHON = x
+pyexec_PYTHON = foo.py
+END
+
+AUTOMAKE_fails -a
+grep 'pyexecdir.*undefined' stderr
+grep AM_PATH_PYTHON stderr
+
+
+echo 4. pkgpyexecdir not defined
+
+cat > Makefile.am <<'END'
+PYTHON = x
+pkgpyexec_PYTHON = foo.py
+END
+
+AUTOMAKE_fails -a
+grep 'pkgpyexecdir.*undefined' stderr
+grep AM_PATH_PYTHON stderr
+
+
+echo 5. PYTHON not defined.
+
+cat > Makefile.am <<'END'
+pkgpyexecdir = /here/we/go
+pkgpyexec_PYTHON = foo.py
+END
+
+AUTOMAKE_fails -a
+grep 'PYTHON.*undefined' stderr
+grep AM_PATH_PYTHON stderr
+
+
+echo 6. Ok.
+
+cat > Makefile.am <<'END'
+PYTHON = x
+pkgpyexecdir = /here/we/go
+pkgpyexec_PYTHON = foo.py
+END
+
+rm -f py-compile
+$AUTOMAKE -a
+test -f py-compile
+
+
+echo 7. Ok again.
+
+cat > Makefile.am <<'END'
+PYTHON = x
+fubardir = /here/we/go
+fubar_PYTHON = foo.py
+END
+
+$AUTOMAKE -a
+
+:
diff --git a/t/python3.sh b/t/python3.sh
new file mode 100644
index 000000000..2ddd4007f
--- /dev/null
+++ b/t/python3.sh
@@ -0,0 +1,47 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure we install built python files.
+
+required=python
+. test-init.sh
+
+cat >>configure.ac <<EOF
+AM_PATH_PYTHON
+AC_OUTPUT
+EOF
+
+cat > Makefile.am <<'END'
+mydir=$(prefix)/my
+my_PYTHON = one.py
+
+one.py:
+ echo 'def one(): return 1' >$@
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+mkdir build
+cd build
+../configure --prefix="$(pwd)/inst"
+$MAKE install
+py_installed inst/my/one.py
+py_installed inst/my/one.pyc
+py_installed inst/my/one.pyo
+
+:
diff --git a/t/recurs-user-deeply-nested.sh b/t/recurs-user-deeply-nested.sh
new file mode 100644
index 000000000..8d2e32fb2
--- /dev/null
+++ b/t/recurs-user-deeply-nested.sh
@@ -0,0 +1,97 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that recursion on user-defined targets can be made to work
+# with "deeply" nested uses of $(SUBDIRS).
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_CONFIG_FILES([
+ sub1/Makefile
+ sub1/sub2/Makefile
+ sub1/sub2/sub3/Makefile
+ sub1/sub2/sub3/sub4/Makefile
+])
+AM_EXTRA_RECURSIVE_TARGETS([foo])
+AC_OUTPUT
+END
+
+dirs='sub1 sub1/sub2 sub1/sub2/sub3 sub1/sub2/sub3/sub4'
+
+mkdir $dirs
+
+cat > Makefile.am <<'END'
+SUBDIRS = sub1
+
+foo-local:
+ cp sub1/foo foo
+MOSTLYCLEANFILES = foo
+
+.PHONY: test
+test:
+ echo 'It works!' > exp
+ diff exp foo
+ diff exp sub1/foo
+ test ! -f sub1/sub2/foo
+ test ! -f sub1/sub2/sub3/foo
+ diff exp sub1/sub2/sub3/sub4/foo
+ rm -f exp
+
+all-local: foo
+check-local: test
+END
+
+cat > sub1/Makefile.am <<'END'
+SUBDIRS = sub2
+foo-local:
+ test ! -f sub2/sub3/foo
+ cp sub2/sub3/sub4/foo foo
+MOSTLYCLEANFILES = foo
+END
+
+# Here we deliberately lack an explicit definition the 'foo-local'
+# target; that shouldn't stop 'foo' recursion into subdirectory
+# 'sub3/sub4'.
+echo SUBDIRS = sub3 > sub1/sub2/Makefile.am
+echo SUBDIRS = sub4 > sub1/sub2/sub3/Makefile.am
+
+cat > sub1/sub2/sub3/sub4/Makefile.am <<'END'
+foo-local:
+ echo 'It works!' > foo
+MOSTLYCLEANFILES = foo
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+for d in $dirs; do
+ $FGREP foo-am $d/Makefile.in || exit 1
+ case $d in
+ */sub4);;
+ *) $FGREP foo-recursive $d/Makefile.in || exit 1;;
+ esac
+done
+
+./configure
+
+$MAKE foo
+$MAKE test
+
+$MAKE distcheck
+
+:
diff --git a/t/recurs-user-indir.sh b/t/recurs-user-indir.sh
new file mode 100644
index 000000000..858daf691
--- /dev/null
+++ b/t/recurs-user-indir.sh
@@ -0,0 +1,99 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that user recursion works with various types of indirections
+# *involved in the definition of the '*-local' targets*: make macros,
+# AC_SUBST'd strings, automake-time file inclusions, automake
+# conditionals...
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_CONFIG_FILES([
+ sub1/Makefile
+ sub1/subsub/Makefile
+ sub2/Makefile
+ sub2/subsub/Makefile
+])
+AM_EXTRA_RECURSIVE_TARGETS([foo])
+AC_SUBST([FOO_LOCAL], [foo-local])
+AM_CONDITIONAL([COND], [:])
+AC_OUTPUT
+END
+
+mkdir sub1 sub1/subsub sub2 sub2/subsub
+
+cat > Makefile.am <<'END'
+SUBDIRS = sub1 sub2
+AM_FOO_LOCAL = foo-local
+
+$(AM_FOO_LOCAL):
+ pwd && : > foo
+CLEANFILES = foo
+
+all-local: foo
+check-local:
+ test -f foo
+ test -f sub1/foo
+ test -f sub1/subsub/foo
+ test -f sub2/foo
+ test -f sub2/subsub/foo
+ test ! -r sub2/subsub/bar
+END
+
+cat > sub1/Makefile.am <<'END'
+SUBDIRS = subsub
+@FOO_LOCAL@:
+ pwd && : > foo
+CLEANFILES = foo
+END
+
+cat > sub1/subsub/Makefile.am <<'END'
+$(FOO_LOCAL):
+ pwd && : > foo
+CLEANFILES = foo
+END
+
+cat > sub2/Makefile.am <<'END'
+include $(srcdir)/bar.am
+include $(srcdir)/baz.am
+CLEANFILES = foo
+END
+
+echo 'SUBDIRS = subsub' > sub2/bar.am
+echo 'foo-local: ; pwd && : > foo' > sub2/baz.am
+
+cat > sub2/subsub/Makefile.am <<'END'
+if COND
+foo-local:
+ pwd && : > foo
+CLEANFILES = foo
+else !COND
+foo-local:
+ pwd && : > bar
+endif !COND
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+
+$MAKE check
+$MAKE distcheck
+
+:
diff --git a/t/recurs-user-keep-going.sh b/t/recurs-user-keep-going.sh
new file mode 100644
index 000000000..ee2f47f5d
--- /dev/null
+++ b/t/recurs-user-keep-going.sh
@@ -0,0 +1,95 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that user recursion works with "make -k".
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AM_EXTRA_RECURSIVE_TARGETS([foo])
+AC_CONFIG_FILES([
+ sub1/Makefile
+ sub1/subsub1/Makefile
+ sub2/Makefile
+ sub2/subsub2/Makefile
+ sub3/Makefile
+])
+FAIL='@echo "FAIL $@ in `pwd`"; exit 1'
+PASS='@echo "PASS $@ in `pwd`"; : > foo'
+AC_SUBST([FAIL])
+AC_SUBST([PASS])
+AC_OUTPUT
+END
+
+mkdir sub1 sub1/subsub1 sub2 sub2/subsub2 sub3
+
+cat > Makefile.am <<'END'
+SUBDIRS = sub1 . sub2 sub3
+foo-local:; @FAIL@
+END
+
+cat > sub1/Makefile.am <<'END'
+SUBDIRS = subsub1
+foo-local:; @PASS@
+END
+
+cat > sub2/Makefile.am <<'END'
+SUBDIRS = subsub2
+foo-local:; @FAIL@
+END
+
+echo 'foo-local:; @FAIL@' > sub1/subsub1/Makefile.am
+echo 'foo-local:; @PASS@' > sub2/subsub2/Makefile.am
+echo 'foo-local:; @PASS@' > sub3/Makefile.am
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+
+cat > exp <<END
+./sub1/foo
+./sub2/subsub2/foo
+./sub3/foo
+END
+
+as_expected ()
+{
+ find . -name foo > t || { cat t; exit 1; }
+ LC_ALL=C sort t > got
+ cat exp
+ cat got
+ diff exp got
+}
+
+# Without "-k", we fail in 'sub1/subsub1', and do nothing else.
+# So, no 'foo' file gets created.
+$MAKE foo && exit 1
+find . -name foo | grep . && exit 1
+
+if using_gmake; then
+ $MAKE -k foo && exit 1
+ as_expected
+ $MAKE --keep-going foo && exit 1
+ as_expected
+else
+ # Don't trust the exit status of 'make -k' for non-GNU makes.
+ $MAKE -k foo || :
+ as_expected
+fi
+
+:
diff --git a/t/recurs-user-many.sh b/t/recurs-user-many.sh
new file mode 100644
index 000000000..c4a0f6481
--- /dev/null
+++ b/t/recurs-user-many.sh
@@ -0,0 +1,73 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that many user-defined recursive targets can be supported
+# at once, and that calls to 'AM_EXTRA_RECURSIVE_TARGETS' are
+# cumulative.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_CONFIG_FILES([sub/Makefile])
+## NOTE: extra white spaces, tabs, newlines and backslashes in the
+## lines below: on purpose.
+AM_EXTRA_RECURSIVE_TARGETS([ foo \
+ bar ])
+AC_SUBST([CLEANFILES], ['foo bar baz'])
+AC_OUTPUT
+# Yes, this appears after AC_OUTPUT. So what?
+AM_EXTRA_RECURSIVE_TARGETS([baz])
+END
+
+mkdir sub
+
+cat > Makefile.am <<'END'
+SUBDIRS = sub
+foo-local:
+ : > foo
+bar-local:
+ echo x > bar
+baz-local: ; touch baz
+check-local: foo bar baz
+ ls -l . sub ;: For debugging.
+ test -f foo
+ test -f bar
+ test -f baz
+ test -f sub/foo
+ test -f sub/bar
+ test -f sub/baz
+END
+
+cat > sub/Makefile.am <<'END'
+foo-local bar-local baz-local:
+ touch `echo $@ | sed 's/-local$$//'`
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+for t in foo bar baz; do
+ $FGREP "$t-am" Makefile.in
+ $FGREP "$t-am" sub/Makefile.in
+done
+
+./configure
+
+$MAKE check
+$MAKE distcheck
+
+:
diff --git a/t/recurs-user-no-subdirs.sh b/t/recurs-user-no-subdirs.sh
new file mode 100644
index 000000000..9c29d31ae
--- /dev/null
+++ b/t/recurs-user-no-subdirs.sh
@@ -0,0 +1,52 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that user recursion can be made to work even when $(SUBDIRS)
+# is empty or undefined.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AM_EXTRA_RECURSIVE_TARGETS([foo])
+AC_OUTPUT
+END
+
+$ACLOCAL
+$AUTOCONF
+
+# First try with undefined $(SUBDIRS).
+cat > Makefile.am <<'END'
+all-local: foo
+foo-local:
+ : > bar
+MOSTLYCLEANFILES = bar
+END
+$AUTOMAKE
+./configure
+$MAKE foo
+test -f bar
+
+$MAKE distclean
+test ! -r bar # Sanity check.
+
+# Now try with empty but defined $(SUBDIRS).
+echo SUBDIRS = >> Makefile.am
+$AUTOMAKE
+./configure
+$MAKE foo
+test -f bar
+
+:
diff --git a/t/recurs-user-no-top-level.sh b/t/recurs-user-no-top-level.sh
new file mode 100644
index 000000000..6f06e2c09
--- /dev/null
+++ b/t/recurs-user-no-top-level.sh
@@ -0,0 +1,50 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that user recursion works even for targets that don't exist
+# in the top-level Makefile.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_CONFIG_FILES([sub/Makefile])
+AM_EXTRA_RECURSIVE_TARGETS([foo-bar])
+AC_OUTPUT
+END
+
+mkdir sub
+
+cat > Makefile.am <<'END'
+SUBDIRS = sub
+all-local: foo-bar
+END
+
+cat > sub/Makefile.am <<'END'
+foo-bar-local:
+ : > foo-bar
+MOSTLYCLEANFILES = foo-bar
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+
+$MAKE foo-bar
+test -f sub/foo-bar
+
+:
diff --git a/t/recurs-user-override.sh b/t/recurs-user-override.sh
new file mode 100644
index 000000000..67a963de8
--- /dev/null
+++ b/t/recurs-user-override.sh
@@ -0,0 +1,68 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that override of user-defined recursive targets work as
+# expected.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_CONFIG_FILES([sub/Makefile])
+AM_EXTRA_RECURSIVE_TARGETS([foobar zardoz])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+SUBDIRS = sub
+all-local: foobar zardoz
+foobar:
+ : > foobar.out
+MOSTLYCLEANFILES = foobar.out
+check-local:
+ test -f foobar.out
+ test ! -r sub/foobar.out
+ test -f sub/zardoz.out
+ test ! -r sub/baz.out
+END
+
+mkdir sub
+cat > sub/Makefile.am <<'END'
+foobar foobar-local:
+ : > foobar.out
+zardoz-local:
+ : > baz.out
+zardoz:
+ : > zardoz.out
+MOSTLYCLEANFILES = zardoz.out
+END
+
+$ACLOCAL
+$AUTOCONF
+
+AUTOMAKE_fails
+grep '^Makefile\.am:3:.*user target.*foobar' stderr
+grep '^Makefile\.am:.*foobar-local.*instead of foobar$' stderr
+grep '^sub/Makefile\.am:5:.*user target.*zardoz' stderr
+grep '^sub/Makefile\.am:.*zardoz-local.*instead of zardoz$' stderr
+
+$AUTOMAKE -Wno-override
+
+./configure
+
+$MAKE check
+$MAKE distcheck
+
+:
diff --git a/t/recurs-user-phony.sh b/t/recurs-user-phony.sh
new file mode 100644
index 000000000..39b0f4893
--- /dev/null
+++ b/t/recurs-user-phony.sh
@@ -0,0 +1,64 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that user-defined recursive targets and their associate
+# '-local', '-am' and '-recursive' targets are declared as phony.
+
+# Require GNU make, because some vendo makes (e.g., Solaris) doesn't
+# truly respect .PHONY.
+required=GNUmake
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_CONFIG_FILES([sub/Makefile])
+AM_EXTRA_RECURSIVE_TARGETS([foo])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+SUBDIRS = sub
+foo-local:
+ echo 'GOOD!' > foo
+END
+
+mkdir sub
+cat > sub/Makefile.am <<'END'
+foo-local:
+ echo 'GOOD!' > foo
+END
+
+dummy_files='
+ foo
+ foo-local
+ foo-am
+ foo-recursive
+ sub/foo
+ sub/foo-local
+ sub/foo-am
+'
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+
+touch $dummy_files
+
+$MAKE foo
+grep 'GOOD!' foo
+grep 'GOOD!' sub/foo
+
+:
diff --git a/t/recurs-user-wrap.sh b/t/recurs-user-wrap.sh
new file mode 100644
index 000000000..a7f0c270b
--- /dev/null
+++ b/t/recurs-user-wrap.sh
@@ -0,0 +1,59 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that rules generated by user recursion are apt to be wrapped
+# by other makefiles.
+
+required=GNUmake
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_EXTRA_RECURSIVE_TARGETS([extra])
+AC_CONFIG_FILES([src/Makefile])
+AC_OUTPUT
+END
+
+mkdir src
+echo SUBDIRS = src > Makefile.am
+echo 'bar: ; : > $@ ' > src/Makefile.am
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+
+$MAKE extra
+test ! -f extra-local
+test ! -f src/bar
+
+cat > GNUmakefile << 'END'
+.DEFAULT_GOAL = all
+extra-local:
+ : > $@
+include ./Makefile
+END
+
+cat > src/GNUmakefile << 'END'
+include ./Makefile
+extra-local: bar
+END
+
+$MAKE extra
+test -f extra-local
+test -f src/bar
+
+:
diff --git a/t/recurs-user.sh b/t/recurs-user.sh
new file mode 100644
index 000000000..a3f95ff45
--- /dev/null
+++ b/t/recurs-user.sh
@@ -0,0 +1,81 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Basic checks on user-defined recursive rules.
+# Check that user recursion respect $(SUBDIRS) order,
+# and proceeds in a depth-first fashion.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AM_EXTRA_RECURSIVE_TARGETS([foo])
+AC_CONFIG_FILES([
+ sub1/Makefile
+ sub2/Makefile
+ sub3/Makefile
+ sub3/deeper/Makefile
+])
+AC_OUTPUT
+END
+
+mkdir sub1 sub2 sub3 sub3/deeper
+
+cat > Makefile.am <<'END'
+SUBDIRS = sub1 . sub3 sub2
+foo-local:
+ echo '.' >> $(top_builddir)/got
+.PHONY: test
+test: foo
+ cat $(srcdir)/exp
+ cat ./got
+ diff $(srcdir)/exp ./got
+check-local: test
+MOSTLYCLEANFILES = got
+EXTRA_DIST = exp
+END
+
+for i in 1 2 3; do
+ cat > sub$i/Makefile.am <<END
+foo-local:
+ echo 'sub$i' >> \$(top_builddir)/got
+END
+done
+
+echo SUBDIRS = deeper >> sub3/Makefile.am
+
+cat >> sub3/deeper/Makefile.am <<'END'
+foo-local:
+ echo sub3/deeper >> $(top_builddir)/got
+END
+
+cat >> exp <<'END'
+sub1
+.
+sub3/deeper
+sub3
+sub2
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+
+$MAKE test
+$MAKE distcheck
+
+:
diff --git a/t/recurs-user2.sh b/t/recurs-user2.sh
new file mode 100644
index 000000000..882a0d395
--- /dev/null
+++ b/t/recurs-user2.sh
@@ -0,0 +1,103 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that user recursion can be made to work when $(SUBDIRS) are
+# not "strictly" nested, as in e.g.:
+# SUBDIRS = src external/lib external/tests
+# with no Makefile in 'external'.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_CONFIG_FILES(
+ sub1/Makefile
+ sub2/Makefile
+dnl There's deliberately no 'sub3/Makefile'.
+ sub3/subsub/Makefile
+ sub4/Makefile
+ sub4/subsub/Makefile
+)
+AM_EXTRA_RECURSIVE_TARGETS([foo])
+AC_OUTPUT
+END
+
+mkdir sub1 sub2 sub3 sub4 sub3/subsub sub4/subsub
+
+cat > Makefile.am <<'END'
+SUBDIRS = sub1 sub2 sub3/subsub sub4 sub4/subsub
+
+foo-local:
+ echo _rootdir_ >foo
+MOSTLYCLEANFILES = foo
+
+.PHONY: test
+test: foo
+ grep _rootdir_ foo
+ grep ':sub1:' sub1/foo
+ grep ',sub1,' sub1/bar
+ test ! -r sub2/foo
+ test ! -r sub3/foo
+ grep '%sub3/subsub%' sub3/subsub/quux
+ test ! -r sub3/subsub/foo
+ test ! -r sub4/foo
+ grep '=sub4/subsub=' sub4/subsub/foo
+
+check-local: test
+END
+
+# A 'foo-local' target with dependencies shouldn't cause problems.
+cat > sub1/Makefile.am <<'END'
+foo-local: bar
+ sed 's/,/:/g' bar >foo
+bar:
+ echo ',sub1,' >$@
+MOSTLYCLEANFILES = foo bar
+END
+
+# The lack of a 'foo' target here shouldn't cause any error in
+# automake nor in make.
+: > sub2/Makefile.am
+
+# The lack of file 'sub3/Makefile.am' shouldn't cause any problem either.
+rm -f sub3/Makefile.am
+
+# A 'foo-local' creating a file != 'foo' shouldn't cause any problem.
+cat > sub3/subsub/Makefile.am <<'END'
+foo-local:
+ echo '%sub3/subsub%' >quux
+MOSTLYCLEANFILES = quux
+END
+
+# No 'foo-local' nor 'foo' target here ...
+: > sub4/Makefile.am
+# ... should not cause errors, nor cause the 'foo-local' target
+# here not to be executed.
+cat > sub4/subsub/Makefile.am <<'END'
+foo-local:
+ echo '=sub4/subsub=' >foo
+MOSTLYCLEANFILES = foo
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+
+$MAKE test
+$MAKE distcheck
+
+:
diff --git a/t/relativize.tap b/t/relativize.tap
new file mode 100644
index 000000000..ad4ddf87e
--- /dev/null
+++ b/t/relativize.tap
@@ -0,0 +1,96 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test Automake-provided internal make macro $(am__relativize).
+
+am_create_testdir=empty
+. test-init.sh
+
+plan_ later
+
+mkdir uber uber/top
+cd uber/top
+
+: > install-sh
+: > missing
+
+cat >> configure.ac <<END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+# The 'am__relitivize' definition is only brought in when
+# SUBDIRS are defined.
+SUBDIRS = .
+
+.PHONY: test
+test:
+ @$(am__relativize); echo "result: '$$reldir'"; set -x; \
+ case $${reldir:-.} in "$$exp"|"$$exp/.") ;; *) exit 1;; esac
+END
+
+$ACLOCAL && $AUTOMAKE && $AUTOCONF && ./configure || fatal_ "setup failure"
+
+rel_ ()
+{
+ case $1 in -x) directive=TODO; shift;; *) directive=;; esac
+ test $# -eq 4 && test x"$3" = x"=" || fatal_ "rel_: incorrect usage"
+ command_ok_ "$1/{$4} = $2" -D "$directive" \
+ env dir1=$1 dir2=$2 exp=$4 $MAKE test
+}
+
+# am__relativize
+# ~~~~~~~~~~~~~~
+# Computes a relative pathname RELDIR such that DIR1/RELDIR = DIR2.
+# Input:
+# - DIR1 relative pathname, relative to the current directory
+# - DIR2 relative pathname, relative to the current directory
+# Output:
+# - reldir relative pathname of DIR2, relative to DIR1
+
+rel_ . . = .
+rel_ . .. = ..
+rel_ .. . = top
+
+for d in x long-longer a/b 1/2/3/4/5; do
+ rel_ $d $d = .
+ for d2 in . .. x r/s/t; do
+ rel_ $d $d/$d2 = $d2
+ done
+done
+
+rel_ one two = ../two
+rel_ a b/c = ../b/c
+rel_ a/b . = ../..
+rel_ a/b foo = ../../foo
+rel_ a/b foo/bar = ../../foo/bar
+rel_ a/b a/c = ../c
+rel_ a/b a/c/d = ../c/d
+
+rel_ foo/bar/baz foo/bar/qux/zap = ../qux/zap
+
+rel_ ../foo . = ../top
+rel_ ../.. . = uber/top
+rel_ ../../foo . = ../uber/top
+rel_ ../../x ok = ../uber/top/ok
+rel_ ../../x bo/ba = ../uber/top/bo/ba
+rel_ ../../x ../ok2 = ../uber/top/../ok2
+rel_ ../a/b/c/d/e . = ../../../../../top
+
+:
diff --git a/t/remake-aclocal-version-mismatch.sh b/t/remake-aclocal-version-mismatch.sh
new file mode 100644
index 000000000..7af5ef5b9
--- /dev/null
+++ b/t/remake-aclocal-version-mismatch.sh
@@ -0,0 +1,45 @@
+#! /bin/sh
+# Copyright (C) 2006-2017 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 <https://www.gnu.org/licenses/>.
+
+# See how well the rebuild rule handles an aclocal.m4 that was
+# generated for another version of autoconf.
+
+. test-init.sh
+
+echo AC_OUTPUT >>configure.ac
+
+touch Makefile.am
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+$MAKE
+
+sed '1,20 s/m4_defn(\[AC_AUTOCONF_VERSION\]),/9999,/' < aclocal.m4 > aclocal.tmp
+cmp aclocal.m4 aclocal.tmp && exit 1
+
+mv aclocal.tmp aclocal.m4
+
+run_make -E
+grep 'You have another version of autoconf' stderr
+grep 'aclocal.m4:.*this file was generated for' stderr
+
+run_make -E
+grep 'You have another version of autoconf' stderr && exit 1
+grep 'aclocal.m4:.*this file was generated for' stderr && exit 1
+
+:
diff --git a/t/remake-after-acinclude-m4.sh b/t/remake-after-acinclude-m4.sh
new file mode 100644
index 000000000..182476d2e
--- /dev/null
+++ b/t/remake-after-acinclude-m4.sh
@@ -0,0 +1,112 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test remake rules when acinclude.m4 or its prerequisites change.
+# Keep in sync with the other sister tests 'remake-after-*.sh'.
+
+. test-init.sh
+
+magic1=::MagicStringOne::
+magic2=__MagicStringTwo__
+
+if using_gmake; then
+ remake_() { $MAKE nil; }
+else
+ remake_() { $MAKE Makefile && $MAKE foo.sh; }
+fi
+
+cat >> configure.ac <<END
+FINGERPRINT='my_fingerprint'
+AC_SUBST([FINGERPRINT])
+AC_CONFIG_FILES([foo.sh:foo.in], [chmod a+x foo.sh])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+nil:
+.PHONY: nil
+
+# The right way to extend an autogenerated aclocal.m4 is to provide
+# an acinclude.m4 file.
+$(srcdir)/acinclude.m4: $(srcdir)/tweak-acinclude-m4
+ $(SHELL) $(srcdir)/tweak-acinclude-m4 <$@ >$@-t
+ mv -f $@-t $@
+ touch $@
+EXTRA_DIST = $(srcdir)/tweak-acinclude-m4
+
+# Used by "make distcheck" later.
+check-local:
+ test x'$(FINGERPRINT)' = x'DummyValue'
+ test x"`./foo.sh`" = x"DummyValue"
+END
+
+cat > foo.in <<END
+#!/bin/sh
+echo '@FINGERPRINT@'
+END
+
+echo "AC_DEFUN([my_fingerprint], [BadBadBad])" > acinclude.m4
+
+echo : > tweak-acinclude-m4 # It is a no-op by default.
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+for vpath in : false; do
+
+ if $vpath; then
+ mkdir build
+ cd build
+ srcdir=..
+ else
+ srcdir=.
+ fi
+
+ $srcdir/configure
+ $MAKE # Should be a no-op.
+
+ $sleep
+ echo "AC_DEFUN([my_fingerprint], [$magic1])" > $srcdir/acinclude.m4
+ remake_
+ $FGREP FINGERPRINT Makefile # For debugging.
+ $FGREP $magic1 Makefile
+ test x"$(./foo.sh)" = x"$magic1"
+
+ $sleep
+ echo "echo 'AC_DEFUN([my_fingerprint], [$magic2])'" \
+ > $srcdir/tweak-acinclude-m4
+ remake_
+ $FGREP FINGERPRINT Makefile # For debugging.
+ $FGREP $magic1 Makefile && exit 1
+ $FGREP $magic2 Makefile
+ test x"$(./foo.sh)" = x"$magic2"
+
+ $sleep
+ echo : > $srcdir/tweak-acinclude-m4 # Make it a no-op again.
+ echo "AC_DEFUN([my_fingerprint], [DummyValue])" > $srcdir/acinclude.m4
+ using_gmake || remake_
+ $MAKE distcheck
+ $FGREP $magic1 Makefile && exit 1 # Sanity check.
+ $FGREP $magic2 Makefile && exit 1 # Likewise.
+
+ $MAKE distclean
+
+ cd $srcdir
+
+done
+
+:
diff --git a/t/remake-after-aclocal-m4.sh b/t/remake-after-aclocal-m4.sh
new file mode 100644
index 000000000..11f10a4b5
--- /dev/null
+++ b/t/remake-after-aclocal-m4.sh
@@ -0,0 +1,112 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test remake rules when aclocal.m4 or its prerequisites change.
+# Keep in sync with the other sister tests 'remake-after-*.sh'.
+
+. test-init.sh
+
+magic1=::MagicStringOne::
+magic2=__MagicStringTwo__
+
+if using_gmake; then
+ remake_() { $MAKE nil; }
+else
+ remake_() { $MAKE Makefile && $MAKE foo.sh; }
+fi
+
+cat >> configure.ac <<END
+FINGERPRINT='my_fingerprint'
+AC_SUBST([FINGERPRINT])
+AC_CONFIG_FILES([foo.sh:foo.in], [chmod a+x foo.sh])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+nil:
+.PHONY: nil
+
+# A non-autogenerated aclocal.m4 can be extended by hand.
+$(srcdir)/aclocal.m4: $(srcdir)/tweak-aclocal-m4
+ $(SHELL) $(srcdir)/tweak-aclocal-m4 <$@ >$@-t
+ mv -f $@-t $@
+ touch $@
+EXTRA_DIST = $(srcdir)/tweak-aclocal-m4
+
+# Used by "make distcheck" later.
+check-local:
+ test x'$(FINGERPRINT)' = x'DummyValue'
+ test x"`./foo.sh`" = x"DummyValue"
+END
+
+cat > foo.in <<END
+#!/bin/sh
+echo '@FINGERPRINT@'
+END
+
+echo cat > tweak-aclocal-m4 # It is a no-op by default.
+
+$ACLOCAL
+# Cheatingly mark aclocal.m4 as non auto-generated.
+sed '/^ *#.*generated automatically/d' aclocal.m4 > t
+mv -f t aclocal.m4
+$AUTOCONF
+$AUTOMAKE
+
+for vpath in : false; do
+
+ if $vpath; then
+ mkdir build
+ cd build
+ srcdir=..
+ else
+ srcdir=.
+ fi
+
+ $srcdir/configure
+ $MAKE # Should be a no-op.
+
+ $sleep
+ echo "AC_DEFUN([my_fingerprint], [$magic1])dnl %%%" >> $srcdir/aclocal.m4
+ remake_
+ $FGREP FINGERPRINT Makefile # For debugging.
+ $FGREP $magic1 Makefile
+ test x"$(./foo.sh)" = x"$magic1"
+
+ $sleep
+ echo "sed 's/.*dnl *%%%.*/AC_DEFUN([my_fingerprint], [$magic2])/'" \
+ > $srcdir/tweak-aclocal-m4
+ remake_
+ $FGREP FINGERPRINT Makefile # For debugging.
+ $FGREP $magic1 Makefile && exit 1
+ $FGREP $magic2 Makefile
+ test x"$(./foo.sh)" = x"$magic2"
+
+ $sleep
+ echo cat > $srcdir/tweak-aclocal-m4 # Make it a no-op again.
+ echo 'AC_DEFUN([my_fingerprint], [DummyValue])' >> $srcdir/aclocal.m4
+ using_gmake || remake_
+ $MAKE distcheck
+ $FGREP $magic1 Makefile && exit 1 # Sanity check.
+ $FGREP $magic2 Makefile && exit 1 # Likewise.
+
+ $MAKE distclean
+
+ cd $srcdir
+
+done
+
+:
diff --git a/t/remake-after-configure-ac.sh b/t/remake-after-configure-ac.sh
new file mode 100644
index 000000000..0479c3952
--- /dev/null
+++ b/t/remake-after-configure-ac.sh
@@ -0,0 +1,109 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test remake rules when configure.ac or its prerequisites change.
+# Keep in sync with the other sister tests 'remake-after-*.sh'.
+
+. test-init.sh
+
+magic1=::MagicStringOne::
+magic2=__MagicStringTwo__
+
+if using_gmake; then
+ remake_() { $MAKE nil; }
+else
+ remake_() { $MAKE Makefile && $MAKE foo.sh; }
+fi
+
+cat >> configure.ac <<END
+FINGERPRINT=BadBadBad
+AC_SUBST([FINGERPRINT])
+AC_CONFIG_FILES([foo.sh:foo.in], [chmod a+x foo.sh])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+nil:
+.PHONY: nil
+
+$(srcdir)/configure.ac: $(srcdir)/tweak-configure-in
+ $(SHELL) $(srcdir)/tweak-configure-in <$@ >$@-t
+ mv -f $@-t $@
+EXTRA_DIST = $(srcdir)/tweak-configure-in
+
+# Used by "make distcheck" later.
+check-local:
+ test x'$(FINGERPRINT)' = x'DummyValue'
+ test x"`./foo.sh`" = x"DummyValue"
+END
+
+cat > foo.in <<END
+#!/bin/sh
+echo '@FINGERPRINT@'
+END
+
+echo cat > tweak-configure-in # It is a no-op by default.
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+for vpath in : false; do
+
+ if $vpath; then
+ mkdir build
+ cd build
+ srcdir=..
+ else
+ srcdir=.
+ fi
+
+ $srcdir/configure
+ $MAKE # Should be a no-op.
+
+ $sleep
+ sed "s/^\\(FINGERPRINT\\)=.*/\\1=$magic1/" $srcdir/configure.ac >t
+ mv -f t $srcdir/configure.ac
+ remake_
+ $FGREP FINGERPRINT Makefile # For debugging.
+ $FGREP $magic1 Makefile
+ test x"$(./foo.sh)" = x"$magic1"
+
+ $sleep
+ echo 'sed "s/^\\(FINGERPRINT\\)=.*/\\1='$magic2'/"' \
+ > $srcdir/tweak-configure-in
+ remake_
+ $FGREP FINGERPRINT Makefile # For debugging.
+ $FGREP $magic1 Makefile && exit 1
+ $FGREP $magic2 Makefile
+ test x"$(./foo.sh)" = x"$magic2"
+
+ $sleep
+ echo cat > $srcdir/tweak-configure-in # Make it a no-op again.
+ sed "s/^\\(FINGERPRINT\\)=.*/\\1=DummyValue/" $srcdir/configure.ac >t
+ mv -f t $srcdir/configure.ac
+ using_gmake || remake_
+ $MAKE distcheck
+ $FGREP $magic1 Makefile && exit 1 # Sanity check.
+ $FGREP $magic2 Makefile && exit 1 # Likewise.
+
+ $MAKE distclean
+
+ cd $srcdir
+
+done
+
+:
diff --git a/t/remake-after-makefile-am.sh b/t/remake-after-makefile-am.sh
new file mode 100644
index 000000000..4585df0e3
--- /dev/null
+++ b/t/remake-after-makefile-am.sh
@@ -0,0 +1,111 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test remake rules when Makefile.am or its prerequisites change.
+# Keep in sync with the other sister tests 'remake-after-*.sh'.
+
+. test-init.sh
+
+if using_gmake; then
+ remake_() { $MAKE nil; }
+else
+ remake_() { $MAKE Makefile && $MAKE foo.sh; }
+fi
+
+magic1=::MagicStringOne::
+magic2=__MagicStringTwo__
+
+cat >> configure.ac <<END
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+FINGERPRINT = BadBadBad
+
+all-local: nil
+nil: foo.sh
+.PHONY: nil
+
+$(srcdir)/Makefile.am: $(srcdir)/tweak-makefile-am
+ $(SHELL) $(srcdir)/tweak-makefile-am <$@ >$@-t
+ mv -f $@-t $@
+EXTRA_DIST = $(srcdir)/tweak-makefile-am
+
+foo.sh: Makefile
+ rm -f $@ $@-t
+ echo '#!/bin/sh' > $@-t
+ echo "echo '$(FINGERPRINT)'" >> $@-t
+ chmod a+x $@-t && mv -f $@-t $@
+CLEANFILES = foo.sh
+
+# Used by "make distcheck" later.
+check-local:
+ test x'$(FINGERPRINT)' = x'DummyValue'
+ test x"`./foo.sh`" = x"DummyValue"
+END
+
+echo cat > tweak-makefile-am # It is a no-op by default.
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+for vpath in : false; do
+
+ if $vpath; then
+ mkdir build
+ cd build
+ srcdir=..
+ else
+ srcdir=.
+ fi
+
+ $srcdir/configure
+ $MAKE # Should be a no-op.
+
+ $sleep
+ sed "s/^\\(FINGERPRINT\\) *=.*/\\1 = $magic1/" $srcdir/Makefile.am >t
+ mv -f t $srcdir/Makefile.am
+ remake_
+ $FGREP FINGERPRINT Makefile # For debugging.
+ $FGREP $magic1 Makefile
+ test x"$(./foo.sh)" = x"$magic1"
+
+ $sleep
+ echo 'sed "s/^\\(FINGERPRINT\\) *=.*/\\1 = '$magic2'/"' \
+ > $srcdir/tweak-makefile-am
+ remake_
+ $FGREP FINGERPRINT Makefile # For debugging.
+ $FGREP $magic1 Makefile && exit 1
+ $FGREP $magic2 Makefile
+ test x"$(./foo.sh)" = x"$magic2"
+
+ $sleep
+ echo cat > $srcdir/tweak-makefile-am # Make it a no-op again.
+ sed "s/^\\(FINGERPRINT\\) *=.*/\\1 = DummyValue/" $srcdir/Makefile.am >t
+ mv -f t $srcdir/Makefile.am
+ using_gmake || remake_
+ $MAKE distcheck
+ $FGREP $magic1 Makefile && exit 1 # Sanity check.
+ $FGREP $magic2 Makefile && exit 1 # Likewise.
+
+ $MAKE distclean
+
+ cd $srcdir
+
+done
+
+:
diff --git a/t/remake-all-1.sh b/t/remake-all-1.sh
new file mode 100644
index 000000000..804e4807b
--- /dev/null
+++ b/t/remake-all-1.sh
@@ -0,0 +1,67 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that the "all" target triggers rebuilt of outdated Makefiles.
+# See also sister test 'remake-all-2.sh'.
+
+. test-init.sh
+
+mkfile=Makefile
+
+magic1=::MagicStringOne::
+magic2=__MagicStringTwo__
+magic3=%%MagicStringThree%%
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([$mkfile sub/$mkfile])
+FOO='$magic1'
+AC_OUTPUT
+END
+
+mkdir sub
+echo SUBDIRS = sub > $mkfile.am
+: > sub/$mkfile.am
+
+$ACLOCAL
+$AUTOMAKE
+
+$EGREP "^all-am:.* $mkfile( |$)" $mkfile.in sub/$mkfile.in
+
+$AUTOCONF
+./configure
+
+$FGREP "$magic1" mkfile.in && exit 1 # Sanity check.
+
+# Two code paths in configure.am:
+
+# - either a file in $(am__configure_deps) has been updated ...
+$sleep
+echo "AC_SUBST([FOO])" >> configure.ac
+$MAKE
+$FGREP FOO $mkfile # For debugging.
+$FGREP $magic1 $mkfile
+
+# - ... or not; i.e., Makefile.am or an included file has.
+$sleep
+echo "# $magic2" >> $mkfile.am
+echo "# $magic3" >> sub/$mkfile.am
+$MAKE
+$FGREP $magic2 $mkfile
+$FGREP $magic3 sub/$mkfile
+
+:
diff --git a/t/remake-all-2.sh b/t/remake-all-2.sh
new file mode 100644
index 000000000..649aaa584
--- /dev/null
+++ b/t/remake-all-2.sh
@@ -0,0 +1,75 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that the "all" target triggers rebuilt of outdated makefiles.
+# This handle the case in which the makefiles are not called 'Makefile'.
+# See also sister test 'remake-all-1.sh'.
+
+. test-init.sh
+
+mkfile=foobar
+
+magic1=::MagicStringOne::
+magic2=__MagicStringTwo__
+magic3=%%MagicStringThree%%
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([$mkfile sub/$mkfile])
+FOO='$magic1'
+AC_OUTPUT
+END
+
+mkdir sub
+
+cat > $mkfile.am <<END
+SUBDIRS = sub
+AM_MAKEFLAGS = -f $mkfile
+END
+
+cat > sub/$mkfile.am <<END
+AM_MAKEFLAGS = -f $mkfile
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+$EGREP "^all-am:.* $mkfile( |$)" $mkfile.in sub/$mkfile.in
+
+$AUTOCONF
+./configure
+
+$FGREP "$magic1" mkfile.in && exit 1 # Sanity check.
+
+# Two code paths in configure.am:
+
+# - either a file in $(am__configure_deps) has been updated ...
+$sleep
+echo "AC_SUBST([FOO])" >> configure.ac
+$MAKE -f $mkfile
+$FGREP FOO $mkfile # For debugging.
+$FGREP $magic1 $mkfile
+
+# - ... or not; i.e., Makefile.am or an included file has.
+$sleep
+echo "# $magic2" >> $mkfile.am
+echo "# $magic3" >> sub/$mkfile.am
+$MAKE -f $mkfile
+$FGREP $magic2 $mkfile
+$FGREP $magic3 sub/$mkfile
+
+:
diff --git a/t/remake-am-pr10111.sh b/t/remake-am-pr10111.sh
new file mode 100644
index 000000000..1f05c781d
--- /dev/null
+++ b/t/remake-am-pr10111.sh
@@ -0,0 +1,62 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that our remake rules doesn't give spurious successes in
+# some corner case situations where they should actually fail.
+# See automake bug#10111.
+# To be clear, we are speaking about *very* corner-case situations here,
+# and the fact that the remake rules might get confused in them is not a
+# big deal in practice (in fact, this test *currently fails*). Still,
+# keeping the limitation exposed is a good idea anyway.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_OUTPUT
+END
+
+: > foobar.am
+
+cat > Makefile.am <<'END'
+include $(srcdir)/foobar.am
+$(srcdir)/foobar.am:
+## Creative quoting is to avoid spurious matches in the grepping
+## of Makefile.in, later.
+ echo "mu =" foobar "was here =" > $@
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+
+# OK, so the developer wants to interactively try out how the
+# "distributed form" of his package behaves.
+$MAKE distdir
+cd $distdir
+# He's interested in trying out a VPATH build.
+mkdir build
+cd build
+../configure
+# He wants to verify that the rules he's written to rebuild a file
+# included by configure.ac works also in VPATH builds.
+rm -f ../foobar.am
+$MAKE
+grep '= foobar was here =' ../Makefile.in
+$MAKE distcheck
+
+:
diff --git a/t/remake-config-status-dependencies.sh b/t/remake-config-status-dependencies.sh
new file mode 100644
index 000000000..6802b48dd
--- /dev/null
+++ b/t/remake-config-status-dependencies.sh
@@ -0,0 +1,70 @@
+#! /bin/sh
+# Copyright (C) 2013-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test CONFIG_STATUS_DEPENDENCIES.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+. ${srcdir}/version.sh
+AC_SUBST([EXTRA_VERSION])
+AC_SUBST([CONFIG_STATUS_DEPENDENCIES], ['$(top_srcdir)/version.sh'])
+AC_OUTPUT
+END
+
+echo EXTRA_VERSION=1.0 > version.sh
+
+cat > Makefile.am <<'END'
+.PHONY: test-1 test-2 test-3
+check-local: test-3
+test-1:
+ test $(EXTRA_VERSION) = 1.0
+test-2:
+ test $(EXTRA_VERSION) = 2.1
+test-3:
+ test $(EXTRA_VERSION) = 3.14
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+$MAKE test-1
+
+$sleep
+echo EXTRA_VERSION=2.1 > version.sh
+using_gmake || $MAKE Makefile
+$MAKE test-2
+
+$MAKE distclean
+mkdir build
+cd build
+../configure
+$MAKE test-2
+$sleep
+echo EXTRA_VERSION=3.14 > ../version.sh
+using_gmake || $MAKE Makefile
+$MAKE test-3
+
+# Contents of $(CONFIG_STATUS_DEPENDENCIES) are *not* to be
+# automatically distributed; there is no generic good reason
+# for that.
+$MAKE distdir
+test ! -e $distdir/version.sh
+test -f $distdir/configure || exit 99 # Sanity check.
+
+:
diff --git a/t/remake-configure-dependencies.sh b/t/remake-configure-dependencies.sh
new file mode 100644
index 000000000..a27e68d4a
--- /dev/null
+++ b/t/remake-configure-dependencies.sh
@@ -0,0 +1,83 @@
+#! /bin/sh
+# Copyright (C) 2013-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test CONFIGURE_DEPENDENCIES.
+
+. test-init.sh
+
+cat > configure.ac <<'END'
+AC_INIT([confdeps], m4_esyscmd([./print-version]))
+AM_INIT_AUTOMAKE([foreign])
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+END
+
+# Needless to say, the autom4te cache happily break this test.
+cat > .autom4te.cfg <<'END'
+begin-language: "Autoconf-without-aclocal-m4"
+args: --no-cache
+end-language: "Autoconf-without-aclocal-m4"
+END
+
+cat > Makefile.am <<'END'
+EXTRA_DIST = .autom4te.cfg
+CONFIGURE_DEPENDENCIES = $(top_srcdir)/print-version
+
+test-1:
+ test $(VERSION) = 1.0
+test-2:
+ test $(VERSION) = 2.1
+test-3:
+ test $(VERSION) = 3.14
+
+.PHONY: test-1 test-2 test-3
+
+# Contents of $(CONFIGURE_DEPENDENCIES) are to be automatically
+# distributed.
+local-check: test-3 distdir
+ test -f $(distdir)/print-version
+END
+
+(echo '#!/bin/sh' && echo 'printf %s 1.0') > print-version
+chmod a+x print-version
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+$MAKE test-1
+
+$sleep
+(echo '#!/bin/sh' && echo 'printf %s 2.1') > print-version
+using_gmake || $MAKE Makefile
+$MAKE test-2
+
+$MAKE distclean
+mkdir build
+cd build
+../configure
+$MAKE test-2
+
+$sleep
+(echo '#!/bin/sh' && echo 'printf %s 3.14') > ../print-version
+using_gmake || $MAKE Makefile
+$MAKE test-3
+
+# Check that $(CONFIGURE_DEPENDENCIES) are automatically distributed.
+$MAKE distcheck
+
+:
diff --git a/t/remake-deeply-nested.sh b/t/remake-deeply-nested.sh
new file mode 100644
index 000000000..170b3831e
--- /dev/null
+++ b/t/remake-deeply-nested.sh
@@ -0,0 +1,83 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test remake rules in deeply nested subdirectories, and with a lot
+# of files. This is basically a mild stress test, ensuring that rebuild
+# rules don't break in obvious ways in a slightly "heavier than usual"
+# setup.
+
+. test-init.sh
+
+ocwd=$(pwd) || fatal_ "getting current working directory"
+
+magic1=::MagicStringOne::
+magic2=__MagicStringTwo__
+
+echo "AC_SUBST([FOO], [$magic1])" >> configure.ac
+
+echo "@FOO@" > bar.in
+echo "AC_CONFIG_FILES([bar])" >> configure.ac
+unset d # Avoid unduly interferences from the environment.
+for i in 0 1 2 3 4 5 6 7 8 9; do
+ d=${d+"$d/"}sub$i
+ echo "SUBDIRS = sub$i" > Makefile.am
+ echo "AC_CONFIG_FILES([$d/Makefile])" >> "$ocwd"/configure.ac
+ echo "AC_CONFIG_FILES([$d/bar])" >> "$ocwd"/configure.ac
+ mkdir sub$i
+ cd sub$i
+ echo "$d: @FOO@" > bar.in
+done
+echo AC_OUTPUT >> "$ocwd"/configure.ac
+: > Makefile.am
+unset d i
+
+bottom=$(pwd) || fatal_ "getting current working directory"
+
+cd "$ocwd"
+
+makefiles_am_list=$(find . -name Makefile.am | LC_ALL=C sort)
+makefiles_list=$(echo "$makefiles_am_list" | sed 's/\.am$//')
+bar_in_list=$(find . -name bar.in | LC_ALL=C sort)
+bar_list=$(echo "$bar_in_list" | sed 's/\.in$//')
+
+cat configure.ac # For debugging.
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+./configure
+
+for f in configure config.status $makefiles_list $bar_list; do
+ $FGREP "$magic1" $f
+done
+
+$sleep
+sed "s/$magic1/$magic2/" configure.ac >configure.tmp
+mv -f configure.tmp configure.ac
+
+cd "$bottom"
+$MAKE
+cd "$ocwd"
+
+for f in configure config.status $makefiles_list $bar_list; do
+ $FGREP "$magic2" $f
+done
+$FGREP "$magic1" configure config.status $makefiles_list $bar_list && exit 1
+
+$MAKE distcheck
+
+:
diff --git a/t/remake-deleted-am-2.sh b/t/remake-deleted-am-2.sh
new file mode 100644
index 000000000..768feb623
--- /dev/null
+++ b/t/remake-deleted-am-2.sh
@@ -0,0 +1,75 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that inclusion of '.am' fragments by automake does not suffer
+# of the "deleted header problem". This test checks deeper inclusion
+# stacks, and use VPATH builds.
+
+. test-init.sh
+
+echo AC_OUTPUT >> configure.ac
+
+$ACLOCAL
+$AUTOCONF
+
+cat > Makefile.am <<'END'
+include $(srcdir)/foo.am
+END
+
+cat > foo.am <<'END'
+# this is foo
+include sub/bar.am
+include baz.am
+END
+
+mkdir sub
+echo 'include $(top_srcdir)/sub/zardoz.am' > sub/bar.am
+echo '# this is zardoz' > sub/zardoz.am
+
+echo 'include fnord.am' > baz.am
+echo '# you are not seeing this' > fnord.am
+
+$AUTOMAKE
+# Sanity checks.
+$FGREP 'this is zardoz' Makefile.in
+$FGREP 'you are not seeing this' Makefile.in
+
+mkdir build
+cd build
+
+srcdir=..
+
+$srcdir/configure
+$MAKE
+
+$sleep
+echo '# this is baz' > $srcdir/baz.am
+rm -f $srcdir/fnord.am
+$MAKE
+# Sanity checks.
+$FGREP 'you are not seeing this' $srcdir/Makefile.in Makefile && exit 1
+$FGREP 'this is baz' $srcdir/Makefile.in
+$FGREP 'this is baz' Makefile
+
+$sleep
+rm -rf $srcdir/sub $srcdir/foo.am $srcdir/baz.am
+echo '# no more inclusions' > $srcdir/Makefile.am
+$MAKE
+# Sanity checks.
+$EGREP 'this is (foo|bar|baz)' Makefile $srcdir/Makefile.in && exit 1
+$FGREP 'no more inclusions' Makefile
+
+:
diff --git a/t/remake-deleted-am-subdir.sh b/t/remake-deleted-am-subdir.sh
new file mode 100644
index 000000000..c7888ea66
--- /dev/null
+++ b/t/remake-deleted-am-subdir.sh
@@ -0,0 +1,77 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that inclusion of '.am' fragments by automake does not suffer
+# of the "deleted header problem". This test does the check when the
+# SUBDIRS variable is involved.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_CONFIG_FILES([sub1/Makefile sub2/Makefile])
+AC_OUTPUT
+END
+
+$ACLOCAL
+$AUTOCONF
+
+cat > Makefile.am <<'END'
+include foo.am
+SUBDIRS = sub1 sub2
+END
+
+echo '# this is foo.am' > foo.am
+
+mkdir sub1 sub2
+
+echo 'include $(srcdir)/bar.am' > sub1/Makefile.am
+echo '# this is bar.am' > sub1/bar.am
+
+echo 'include $(top_srcdir)/foo.am' > sub2/Makefile.am
+
+$AUTOMAKE
+# Sanity checks.
+$FGREP 'this is foo.am' Makefile.in
+$FGREP 'this is bar.am' sub1/Makefile.in
+$FGREP 'this is foo.am' sub2/Makefile.in
+
+./configure
+$MAKE # Should be no-op.
+
+$sleep
+echo '# this is sub1/Makefile.am' > sub1/Makefile.am
+rm -f sub1/bar.am
+$MAKE all
+# Sanity checks.
+$FGREP 'this is bar' sub1/Makefile.in sub1/Makefile && exit 1
+$FGREP 'this is sub1/Makefile.am' sub1/Makefile.in
+$FGREP 'this is sub1/Makefile.am' sub1/Makefile
+
+$sleep
+for d in . sub2; do
+ sed "s|.*include.*foo\.am.*|# this is $d/Makefile.am|" $d/Makefile.am > t
+ mv -f t $d/Makefile.am
+done
+rm -f foo.am
+$MAKE all
+# Sanity checks.
+$FGREP 'this is foo' sub*/Makefile* Makefile* && exit 1
+for d in . sub1 sub2; do
+ $FGREP "this is $d/Makefile.am" $d/Makefile.in
+ $FGREP "this is $d/Makefile.am" $d/Makefile
+done
+
+:
diff --git a/t/remake-deleted-am.sh b/t/remake-deleted-am.sh
new file mode 100644
index 000000000..2204ed898
--- /dev/null
+++ b/t/remake-deleted-am.sh
@@ -0,0 +1,67 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that inclusion of '.am' fragments by automake does not suffer
+# of the "deleted header problem". Basic checks are done here.
+
+. test-init.sh
+
+echo AC_OUTPUT >> configure.ac
+
+$ACLOCAL
+$AUTOCONF
+
+cat > Makefile.am <<'END'
+include foo.am
+include $(srcdir)/bar.am
+include $(top_srcdir)/baz.am
+END
+
+echo '# this is foo' > foo.am
+echo '# this is bar' > bar.am
+echo '# this is baz' > baz.am
+
+$AUTOMAKE
+# Sanity checks.
+$FGREP 'this is foo' Makefile.in
+$FGREP 'this is bar' Makefile.in
+$FGREP 'this is baz' Makefile.in
+
+./configure
+$MAKE # Should be no-op.
+
+$sleep
+sed '/^include foo\.am$/d' Makefile.am > t
+mv -f t Makefile.am
+rm -f foo.am
+$MAKE Makefile
+# Sanity checks.
+$FGREP 'this is foo' Makefile.in Makefile && exit 1
+$FGREP 'this is bar' Makefile.in
+$FGREP 'this is bar' Makefile
+$FGREP 'this is baz' Makefile.in
+$FGREP 'this is baz' Makefile
+
+$sleep
+echo '# empty empty' > Makefile.am
+rm -f bar.am baz.am
+$MAKE Makefile
+# Sanity checks.
+$FGREP 'empty empty' Makefile.in
+$FGREP 'empty empty' Makefile
+grep 'this is ba[rz]' Makefile Makefile.in && exit 1
+
+:
diff --git a/t/remake-deleted-m4-file.sh b/t/remake-deleted-m4-file.sh
new file mode 100644
index 000000000..ad9750f9b
--- /dev/null
+++ b/t/remake-deleted-m4-file.sh
@@ -0,0 +1,74 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test remake rules when an m4 file gets removed and the macros it
+# defined get inlined into the caller. Try with both an indirect
+# call and a direct one. This can be seen as testing the "deleted
+# header file" issue w.r.t. aclocal.m4 dependencies. See also
+# related test 'aclocal-deleted-header.sh'.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+FOO_MACRO
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+ACLOCAL_AMFLAGS = -I m4
+.PHONY: test
+test:
+ test '$(the_answer)' -eq 42
+END
+
+macro_value='the_answer=42; AC_SUBST([the_answer])'
+
+mkdir m4
+
+cat > m4/foo.m4 <<'END'
+AC_DEFUN([FOO_MACRO], [BAR_MACRO])
+END
+
+cat > m4/bar.m4 <<END
+AC_DEFUN([BAR_MACRO], [$macro_value])
+END
+
+$ACLOCAL -I m4
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+$MAKE test
+
+$sleep
+
+sed -e "s|BAR_MACRO|$macro_value|" m4/foo.m4 > t
+mv -f t m4/foo.m4
+rm -f m4/bar.m4
+
+using_gmake || $MAKE Makefile
+$MAKE test
+
+$sleep
+
+sed -e "s|FOO_MACRO|$macro_value|" configure.ac > t
+mv -f t configure.ac
+rm -f m4/foo.m4
+
+using_gmake || $MAKE Makefile
+$MAKE test
+
+:
diff --git a/t/remake-fail.sh b/t/remake-fail.sh
new file mode 100644
index 000000000..c83b4240c
--- /dev/null
+++ b/t/remake-fail.sh
@@ -0,0 +1,69 @@
+#! /bin/sh
+# Copyright (C) 2008-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure remaking rules fail when they should.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+SUBDIRS = sub
+END
+mkdir sub
+: > sub/Makefile.am
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+./configure
+$MAKE
+
+$sleep
+
+# Fail for broken input files.
+
+echo "if FOO" > sub/Makefile.am
+$MAKE && exit 1
+
+: >sub/Makefile.am
+$MAKE
+
+mv Makefile.am backup
+echo "if FOO" > Makefile.am
+$MAKE && exit 1
+
+# Fail for missing input files, with or without missing
+# Makefile.in files.
+
+cp backup Makefile.am
+mv sub/Makefile.am sub/backup
+$MAKE && exit 1
+
+rm -f sub/Makefile.in
+$MAKE && exit 1
+
+mv sub/backup sub/Makefile.am
+rm -f Makefile.am
+$MAKE && exit 1
+
+rm -f Makefile.in
+$MAKE && exit 1
+
+:
diff --git a/t/remake-gnulib-add-acsubst.sh b/t/remake-gnulib-add-acsubst.sh
new file mode 100644
index 000000000..3f37f06f8
--- /dev/null
+++ b/t/remake-gnulib-add-acsubst.sh
@@ -0,0 +1,133 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test remake rules when a new AC_SUBST'd variable is added, and C header
+# files are involved.
+# This test overlaps with others, and is not strictly necessary per se,
+# but it exercises a real use case (from gnulib, see:
+# <https://lists.gnu.org/archive/html/bug-gnulib/2011-04/msg00005.html>
+# for more info).
+
+required=cc
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_PROG_CC
+MY_MACROS
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+ACLOCAL_AMFLAGS = -I m4
+noinst_PROGRAMS = foo
+foo_SOURCES = foo.c
+BUILT_SOURCES = foo.h
+edit_h = sed -e 's|[@]foovar@|@foovar@|g'
+foo.h: foo.in.h
+ $(edit_h) < $(srcdir)/foo.in.h > $@-t
+ cat $@-t;: For debugging.
+ mv -f $@-t $@
+EXTRA_DIST = foo.in.h
+MOSTLYCLEANFILES = foo.h foo.h-t
+END
+
+mkdir m4
+
+cat > m4/foo.m4 <<'END'
+AC_DEFUN([MY_MACROS], [
+ FOO_MACRO
+dnl: ZAP_MACRO
+])
+END
+
+cat > m4/bar.m4 <<'END'
+AC_DEFUN([FOO_MACRO], [
+ foovar=42; AC_SUBST([foovar])
+dnl: barvar=47; AC_SUBST([barvar])
+])
+END
+
+cat > foo.in.h <<'END'
+#define foo @foovar@
+END
+
+cat > foo.c <<'END'
+#include "foo.h"
+int main (void) { return 0; }
+typedef int checkfoo[1 - 2 * (foo != 42)];
+END
+
+$ACLOCAL -I m4
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+$MAKE
+
+: AC_SUBST @barvar@ and add it to foo.h.
+
+$sleep
+
+sed -e 's/^dnl:/ /' m4/bar.m4 > t
+mv -f t m4/bar.m4
+cat m4/bar.m4
+
+cat >> foo.in.h <<'END'
+#define bar @barvar@
+END
+
+cat >> foo.c <<'END'
+typedef int checkbar[1 - 2 * (bar != 47)];
+END
+
+cat >> Makefile.am <<'END'
+edit_h += -e 's|[@]barvar@|@barvar@|g'
+END
+
+using_gmake || $MAKE Makefile
+$MAKE
+
+: AC_SUBST @zapvar@ and add it to foo.h.
+# Do it in a slightly different way from how it was done for @barvar@.
+
+$sleep
+
+cat >> Makefile.am <<'END'
+edit_h += -e 's|[@]zapvar@|$(zapvar)|g'
+END
+
+cat >> foo.c <<'END'
+typedef int checkzap[1 - 2 * (zap != 163)];
+END
+
+sed -e 's/^dnl://' m4/foo.m4 > t
+mv -f t m4/foo.m4
+cat m4/foo.m4
+
+cat >> foo.in.h <<'END'
+#define zap @zapvar@
+END
+
+cat >> m4/bar.m4 <<'END'
+AC_DEFUN([ZAP_MACRO], [zapvar=163; AC_SUBST([zapvar])])
+END
+
+using_gmake || $MAKE Makefile
+$MAKE
+
+$MAKE distcheck
+
+:
diff --git a/t/remake-gnulib-add-header.sh b/t/remake-gnulib-add-header.sh
new file mode 100644
index 000000000..8f00063fb
--- /dev/null
+++ b/t/remake-gnulib-add-header.sh
@@ -0,0 +1,109 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test remake rules when a new C header "guarded" by AC_SUBST'd
+# variables is added.
+# This test overlaps with others, and is not strictly necessary per se,
+# but it exercises a real use case (from gnulib, see:
+# <https://lists.gnu.org/archive/html/bug-gnulib/2011-04/msg00005.html>
+# for more info).
+
+required=cc
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_CONFIG_HEADERS([config.h])
+AC_PROG_CC
+MY_MACROS
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+ACLOCAL_AMFLAGS = -I .
+noinst_PROGRAMS = foo
+foo_SOURCES = foo.c
+BUILT_SOURCES = $(STDIO_H)
+stdio.h: stdio.in.h
+ cp $(srcdir)/stdio.in.h $@
+MOSTLYCLEANFILES = stdio.h
+EXTRA_DIST = stdio.in.h
+check-local:
+ ls -l . $(srcdir)
+ if test -n '$(STDIO_H)'; then \
+ test -f stdio.h || exit 1; \
+ else \
+ test ! -f stdio.h || exit 1; \
+ fi
+END
+
+cat > macros.m4 <<'END'
+AC_DEFUN([MY_MACROS], [
+ override_stdio=false
+ if $override_stdio; then
+ STDIO_H=stdio.h
+ use_dummies=1
+ else
+ STDIO_H=
+ use_dummies=0
+ fi
+ AC_SUBST([STDIO_H])
+ AC_DEFINE_UNQUOTED([USE_DUMMIES], [$use_dummies],
+ [Whether to use dummy types.])
+])
+END
+
+cat > stdio.in.h <<'END'
+typedef struct dummyfile { void *p; } DUMMYFILE;
+END
+
+cat > foo.c <<'END'
+#include <config.h>
+#include <stdio.h>
+#if USE_DUMMIES
+DUMMYFILE *f;
+#else
+FILE *f;
+#endif
+int main () { return 0; }
+END
+
+$ACLOCAL -I .
+$AUTOHEADER
+$AUTOMAKE
+$AUTOCONF
+
+./configure
+
+$MAKE
+ls -l
+test ! -e stdio.h
+# Also try our build rules in a VPATH build.
+$MAKE distcheck
+
+# No need to sleep here: "./configure" and "make distcheck" above
+# have already slept enough.
+
+sed -e 's/^\( *override_stdio\)=.*$/\1=:/' macros.m4 > t
+mv -f t macros.m4
+
+using_gmake || $MAKE Makefile
+$MAKE
+ls -l
+test -f stdio.h
+# Also try our build rules in a VPATH build.
+$MAKE distcheck
+
+:
diff --git a/t/remake-gnulib-remove-header.sh b/t/remake-gnulib-remove-header.sh
new file mode 100644
index 000000000..ba1ade78f
--- /dev/null
+++ b/t/remake-gnulib-remove-header.sh
@@ -0,0 +1,136 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test remake rules when a C header "guarded" by AC_SUBST'd variables
+# is not needed anymore, or when it's needed again.
+# This test requires some user-level machinery, overlaps with other tests,
+# and is not strictly necessary per se, but it exercises a real, important
+# use case (from gnulib, see:
+# <https://lists.gnu.org/archive/html/bug-gnulib/2011-04/msg00005.html>
+# for more info).
+
+required=cc
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_CONFIG_HEADERS([config.h])
+AC_PROG_CC
+MY_MACROS
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+ACLOCAL_AMFLAGS = -I .
+noinst_PROGRAMS = foo
+foo_SOURCES = foo.c
+BUILT_SOURCES = $(STDIO_H)
+if REPLACE_STDIO_H
+stdio.h: stdio.in.h $(top_builddir)/config.status
+ cp $(srcdir)/stdio.in.h $@
+else
+stdio.h: $(top_builddir)/config.status
+ rm -f $@
+endif
+MOSTLYCLEANFILES = stdio.h
+END
+
+cat > macros.m4 <<'END'
+AC_DEFUN([MY_MACROS], [
+ override_stdio=:
+ if $override_stdio; then
+ STDIO_H=stdio.h
+ use_dummies=1
+ else
+ STDIO_H=
+ use_dummies=0
+ fi
+ AC_SUBST([STDIO_H])
+ AC_DEFINE_UNQUOTED([USE_DUMMIES], [$use_dummies],
+ [Whether to use dummy types.])
+ AM_CONDITIONAL([REPLACE_STDIO_H], [test -n "$STDIO_H"])
+])
+END
+
+cat > stdio.in.h <<'END'
+typedef struct dummyfile { void *p; } DUMMYFILE;
+END
+
+cat > foo.c <<'END'
+#include <config.h>
+#include <stdio.h>
+#if USE_DUMMIES
+DUMMYFILE *f;
+#else
+FILE *f;
+#endif
+int main () { return 0; }
+END
+
+$ACLOCAL -I .
+$AUTOHEADER
+$AUTOMAKE
+$AUTOCONF
+
+for vpath in : false; do
+
+ if $vpath; then
+ mkdir build
+ cd build
+ srcdir=..
+ else
+ srcdir=.
+ fi
+
+ # Do not reject slow dependency extractors: we need dependency tracking.
+ $srcdir/configure --enable-dependency-tracking
+ if $FGREP 'depmode=none' Makefile; then
+ skip_ "automatic dependency tracking couldn't be activated"
+ fi
+
+ $MAKE
+ ls -l
+ test -f stdio.h
+
+ # Simulate that we don't need our custom stdio.h anymore.
+
+ $sleep
+ sed -e 's/^\( *override_stdio\)=.*$/\1=false/' $srcdir/macros.m4 > t
+ diff $srcdir/macros.m4 t && fatal_ "failed to edit macros.m4"
+ mv -f t $srcdir/macros.m4
+
+ using_gmake || $MAKE Makefile
+ $MAKE
+ ls -l
+ test ! -e stdio.h
+
+ # And now simulate that we want our custom stdio.h back.
+
+ $sleep
+ sed -e 's/^\( *override_stdio\)=.*$/\1=:/' $srcdir/macros.m4 > t
+ diff $srcdir/macros.m4 t && fatal_ "failed to edit macros.m4"
+ mv -f t $srcdir/macros.m4
+
+ using_gmake || $MAKE Makefile
+ $MAKE
+ ls -l
+ test -f stdio.h
+
+ $MAKE distclean
+ cd $srcdir
+
+done
+
+:
diff --git a/t/remake-include-aclocal.sh b/t/remake-include-aclocal.sh
new file mode 100644
index 000000000..f20456518
--- /dev/null
+++ b/t/remake-include-aclocal.sh
@@ -0,0 +1,115 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test remake rules for m4 files included (also recursively) by
+# aclocal.m4. Keep in sync with sister tests:
+# - remake-include-configure.sh
+# - remake-include-makefile.sh
+
+. test-init.sh
+
+magic1=::MagicStringOne::
+magic2=__MagicStringTwo__
+magic3=%%MagicStringThree%%
+
+if using_gmake; then
+ remake="$MAKE nil"
+else
+ remake="$MAKE Makefile"
+fi
+
+cat >> configure.ac <<END
+AC_CONFIG_MACRO_DIR([m4])
+FINGERPRINT='my_fingerprint'
+AC_SUBST([FINGERPRINT])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+.PHONY: nil
+nil:
+## Used by "make distcheck" later.
+check-local:
+ test -f $(top_srcdir)/m4/foo.m4
+ test ! -r $(top_srcdir)/m4/bar.m4
+ test x'$(FINGERPRINT)' = x'DummyValue'
+END
+
+mkdir m4
+echo 'AC_DEFUN([my_fingerprint], [BadBadBad])' > m4/foo.m4
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+for vpath in : false; do
+
+ if $vpath; then
+ mkdir build
+ cd build
+ top_srcdir=..
+ else
+ top_srcdir=.
+ fi
+
+ $top_srcdir/configure
+ $MAKE # Should be a no-op.
+
+ $sleep
+ echo "AC_DEFUN([my_fingerprint], [$magic1])" > $top_srcdir/m4/foo.m4
+ $remake
+ $FGREP FINGERPRINT Makefile # For debugging.
+ $FGREP $magic1 Makefile
+
+ $sleep
+ echo "AC_DEFUN([my_fingerprint], [$magic2])" > $top_srcdir/m4/foo.m4
+ $remake
+ $FGREP FINGERPRINT Makefile # For debugging.
+ $FGREP $magic1 Makefile && exit 1
+ $FGREP $magic2 Makefile
+
+ $sleep
+ echo "m4_include([m4/bar.m4])" > $top_srcdir/m4/foo.m4
+ echo "AC_DEFUN([my_fingerprint], [$magic3])" > $top_srcdir/m4/bar.m4
+ $remake
+ $FGREP FINGERPRINT Makefile # For debugging.
+ $FGREP $magic1 Makefile && exit 1
+ $FGREP $magic2 Makefile && exit 1
+ $FGREP $magic3 Makefile
+
+ $sleep
+ echo "AC_DEFUN([my_fingerprint], [$magic1])" > $top_srcdir/m4/bar.m4
+ $remake
+ $FGREP $magic2 Makefile && exit 1
+ $FGREP $magic3 Makefile && exit 1
+ $FGREP $magic1 Makefile
+
+ $sleep
+ echo "AC_DEFUN([my_fingerprint], [DummyValue])" > $top_srcdir/m4/foo.m4
+ echo "AC_DEFUN([AM_UNUSED], [NoSuchMacro])" > $top_srcdir/m4/bar.m4
+ using_gmake || $remake
+ $MAKE distcheck
+ $FGREP $magic1 Makefile && exit 1 # Sanity check.
+ $FGREP $magic2 Makefile && exit 1 # Likewise.
+ $FGREP $magic3 Makefile && exit 1 # Likewise.
+
+ $MAKE distclean
+
+ cd $top_srcdir
+
+done
+
+:
diff --git a/t/remake-include-configure.sh b/t/remake-include-configure.sh
new file mode 100644
index 000000000..2227f3a53
--- /dev/null
+++ b/t/remake-include-configure.sh
@@ -0,0 +1,112 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test remake rules for m4 files included (also recursively) by
+# configure.ac. Keep in sync with sister tests:
+# - remake-include-aclocal.sh
+# - remake-include-makefile.sh
+
+. test-init.sh
+
+magic1=::MagicStringOne::
+magic2=__MagicStringTwo__
+magic3=%%MagicStringThree%%
+
+if using_gmake; then
+ remake="$MAKE nil"
+else
+ remake="$MAKE Makefile"
+fi
+
+cat >> configure.ac <<END
+m4_include([foo.m4])
+AC_SUBST([FINGERPRINT], [my_fingerprint])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+.PHONY: nil
+nil:
+## Used by "make distcheck" later.
+check-local:
+ test -f $(top_srcdir)/foo.m4
+ test ! -r $(top_srcdir)/bar.m4
+ test x'$(FINGERPRINT)' = x'DummyValue'
+END
+
+echo 'm4_define([my_fingerprint], [BadBadBad])' > foo.m4
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+for vpath in : false; do
+
+ if $vpath; then
+ mkdir build
+ cd build
+ top_srcdir=..
+ else
+ top_srcdir=.
+ fi
+
+ $top_srcdir/configure
+ $MAKE # Should be a no-op.
+
+ $sleep
+ echo "m4_define([my_fingerprint], [$magic1])" > $top_srcdir/foo.m4
+ $remake
+ $FGREP FINGERPRINT Makefile # For debugging.
+ $FGREP $magic1 Makefile
+
+ $sleep
+ echo "m4_define([my_fingerprint], [$magic2])" > $top_srcdir/foo.m4
+ $remake
+ $FGREP FINGERPRINT Makefile # For debugging.
+ $FGREP $magic1 Makefile && exit 1
+ $FGREP $magic2 Makefile
+
+ $sleep
+ echo "m4_include([bar.m4])" > $top_srcdir/foo.m4
+ echo "m4_define([my_fingerprint], [$magic3])" > $top_srcdir/bar.m4
+ $remake
+ $FGREP FINGERPRINT Makefile # For debugging.
+ $FGREP $magic1 Makefile && exit 1
+ $FGREP $magic2 Makefile && exit 1
+ $FGREP $magic3 Makefile
+
+ $sleep
+ echo "m4_define([my_fingerprint], [$magic1])" > $top_srcdir/bar.m4
+ $remake
+ $FGREP $magic2 Makefile && exit 1
+ $FGREP $magic3 Makefile && exit 1
+ $FGREP $magic1 Makefile
+
+ $sleep
+ echo "m4_define([my_fingerprint], [DummyValue])" > $top_srcdir/foo.m4
+ using_gmake || $remake
+ $MAKE distcheck
+ $FGREP $magic1 Makefile && exit 1 # Sanity check.
+ $FGREP $magic2 Makefile && exit 1 # Likewise.
+ $FGREP $magic3 Makefile && exit 1 # Likewise.
+
+ $MAKE distclean
+
+ cd $top_srcdir
+
+done
+
+:
diff --git a/t/remake-include-makefile.sh b/t/remake-include-makefile.sh
new file mode 100644
index 000000000..d3b3da0ee
--- /dev/null
+++ b/t/remake-include-makefile.sh
@@ -0,0 +1,112 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test remake rules for am files included (also recursively) by
+# Makefile.am. Keep in sync with sister tests:
+# - remake-include-aclocal.sh
+# - remake-include-configure.sh
+
+
+. test-init.sh
+
+magic1=::MagicStringOne::
+magic2=__MagicStringTwo__
+magic3=%%MagicStringThree%%
+
+if using_gmake; then
+ remake="$MAKE nil"
+else
+ remake="$MAKE Makefile"
+fi
+
+cat >> configure.ac <<'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+.PHONY: nil
+nil:
+include foo.am
+## Used by "make distcheck" later.
+check-local:
+ test -f $(top_srcdir)/foo.am
+ test ! -r $(top_srcdir)/bar.am
+ test x'$(FINGERPRINT)' = x'DummyValue'
+END
+
+echo 'FINGERPRINT = BadBadBad' > foo.am
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+for vpath in : false; do
+
+ if $vpath; then
+ mkdir build
+ cd build
+ top_srcdir=..
+ else
+ top_srcdir=.
+ fi
+
+ $top_srcdir/configure
+ $MAKE # Should be a no-op.
+
+ $sleep
+ echo "FINGERPRINT = $magic1" > $top_srcdir/foo.am
+ $remake
+ $FGREP FINGERPRINT Makefile # For debugging.
+ $FGREP $magic1 Makefile
+
+ $sleep
+ echo "FINGERPRINT = $magic2" > $top_srcdir/foo.am
+ $remake
+ $FGREP FINGERPRINT Makefile # For debugging.
+ $FGREP $magic1 Makefile && exit 1
+ $FGREP $magic2 Makefile
+
+ $sleep
+ echo 'include $(top_srcdir)/bar.am' > $top_srcdir/foo.am
+ echo "FINGERPRINT = $magic3" > $top_srcdir/bar.am
+ $remake
+ $FGREP FINGERPRINT Makefile # For debugging.
+ $FGREP $magic1 Makefile && exit 1
+ $FGREP $magic2 Makefile && exit 1
+ $FGREP $magic3 Makefile
+
+ $sleep
+ echo "FINGERPRINT = $magic1" > $top_srcdir/bar.am
+ $remake
+ $FGREP $magic2 Makefile && exit 1
+ $FGREP $magic3 Makefile && exit 1
+ $FGREP $magic1 Makefile
+
+ $sleep
+ echo "FINGERPRINT = DummyValue" > $top_srcdir/foo.am
+ using_gmake || $remake
+ $MAKE distcheck
+ $FGREP $magic1 Makefile && exit 1 # Sanity check.
+ $FGREP $magic2 Makefile && exit 1 # Likewise.
+ $FGREP $magic3 Makefile && exit 1 # Likewise.
+
+ $MAKE distclean
+
+ cd $top_srcdir
+
+done
+
+:
diff --git a/t/remake-m4-pr10111.sh b/t/remake-m4-pr10111.sh
new file mode 100644
index 000000000..b257b10a9
--- /dev/null
+++ b/t/remake-m4-pr10111.sh
@@ -0,0 +1,60 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that our remake rules doesn't give spurious successes in
+# some corner case situations where they should actually fail.
+# See automake bug#10111.
+# To be clear, we are speaking about *very* corner-case situations here,
+# and the fact that the remake rules might get confused in them is not a
+# big deal in practice (in fact, this test *currently fails*). Still,
+# keeping the limitation exposed is a good idea anyway.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+m4_include([foobar.m4])
+AC_OUTPUT
+END
+
+: > foobar.m4
+
+cat > Makefile.am <<'END'
+$(srcdir)/foobar.m4:
+ echo ': foobar was here :' > $@
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+
+# OK, so the developer wants to interactively try out how the
+# "distributed form" of his package behaves.
+$MAKE distdir
+cd $distdir
+# He's interested in trying out a VPATH build.
+mkdir build
+cd build
+../configure
+# He wants to verify that the rules he's written to rebuild a file
+# included by configure.ac works also in VPATH builds.
+rm -f ../foobar.m4
+$MAKE
+grep ': foobar was here :' ../configure
+$MAKE distcheck
+
+:
diff --git a/t/remake-macrodir.sh b/t/remake-macrodir.sh
new file mode 100644
index 000000000..aa85e0a90
--- /dev/null
+++ b/t/remake-macrodir.sh
@@ -0,0 +1,83 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that the aclocal honouring of AC_CONFIG_MACRO_DIR interacts
+# nicely with automatic rebuild rules.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_CONFIG_MACRO_DIR([macro-dir])
+my__FOO || AS_EXIT([1])
+AC_OUTPUT
+END
+
+: > Makefile.am
+
+mkdir macro-dir
+cat > macro-dir/foo.m4 <<'END'
+AC_DEFUN([my__FOO], [: > bar])
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+$FGREP my__FOO configure && exit 1
+
+./configure
+test -f bar
+rm -f bar
+
+$sleep
+
+cat > macro-dir/foo.m4 <<'END'
+AC_DEFUN([my__FOO], [: > baz])
+END
+
+$MAKE Makefile
+test -f baz
+test ! -r bar
+rm -f baz
+
+$sleep
+
+rm -f macro-dir/foo.m4
+cat > macro-dir/quux.m4 <<'END'
+AC_DEFUN([my__FOO], [: > quux])
+END
+
+$MAKE Makefile
+test -f quux
+test ! -r baz
+rm -f quux
+
+$sleep
+
+sed 's/^AC_CONFIG_MACRO_DIR/&([newdir])/' configure.ac > t
+mv -f t configure.ac
+
+mkdir newdir
+cat > newdir/mu.m4 <<'END'
+AC_DEFUN([my__FOO], [[: my__FOO do nothing]])
+END
+
+$MAKE Makefile
+$FGREP ': my__FOO do nothing' configure
+
+$MAKE distcheck
+
+:
diff --git a/t/remake-maintainer-mode.sh b/t/remake-maintainer-mode.sh
new file mode 100644
index 000000000..2c7012e5b
--- /dev/null
+++ b/t/remake-maintainer-mode.sh
@@ -0,0 +1,80 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that AM_MAINTAINER_MODE disable some rebuild rules,
+# but not all.
+# Report from Ralf Corsepius.
+
+. test-init.sh
+
+if using_gmake; then
+ remake="$MAKE"
+else
+ remake="$MAKE Makefile"
+fi
+
+cat >>configure.ac <<'EOF'
+AM_MAINTAINER_MODE
+m4_include([foo.m4])
+if test ! -f rebuild_ok; then
+ ACLOCAL=false
+ AUTOMAKE=false
+ AUTOCONF=false
+fi
+AC_OUTPUT
+EOF
+
+: > foo.m4
+: > Makefile.am
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+./configure
+$MAKE
+
+# Make sure the rules to rebuild configure/Makefile.in are not
+# triggered by default. ($MAKE will fail if they are, because the
+# tools are set to false.)
+$sleep
+touch aclocal.m4 Makefile.am configure.ac foo.m4
+$remake
+
+# Make sure the rebuild rule for Makefile is triggered.
+$sleep
+echo '# GrEpMe' >>Makefile.in
+$remake
+grep GrEpMe Makefile
+
+# Make sure the rebuild rule for config.status is triggered.
+$sleep
+grep 'AUTOCONF.*=.*false' Makefile
+: > rebuild_ok
+./configure --no-create
+$remake
+grep 'AUTOCONF.*=.*false' Makefile && exit 1
+
+# Make sure rebuild rules do work if --enable-maintainer-mode is given.
+./configure --enable-maintainer-mode
+$sleep
+echo 'AC_SUBST([YIPPY_YIPPY_YEAH])' >foo.m4
+$remake
+grep YIPPY_YIPPY_YEAH Makefile
+
+# Try the distribution, for completeness.
+$MAKE distcheck
+
+:
diff --git a/t/remake-makefile-intree.sh b/t/remake-makefile-intree.sh
new file mode 100644
index 000000000..d6bb3167f
--- /dev/null
+++ b/t/remake-makefile-intree.sh
@@ -0,0 +1,190 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test basic remake rules for Makefiles, for an *in-tree build*.
+# This testcase checks dependency of generated Makefile from Makefile.am,
+# configure.ac, acinclude.m4, aclocal.m4, and extra m4 files considered
+# by aclocal.
+# Keep this in sync with sister test 'remake-makefile-vpath.sh', which
+# performs the same checks for a VPATH build.
+
+. test-init.sh
+
+mv -f configure.ac configure.stub
+
+cat > Makefile.am <<'END'
+all-local: foo
+foo:
+ echo '!Foo!' >$@
+check-local:
+ cat foo
+ grep '!Foo!' foo
+CLEANFILES = foo
+END
+
+cat configure.stub - > configure.ac <<'END'
+AC_OUTPUT
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+srcdir='.' # To make syncing with remake-makefile-vpath.sh easier.
+
+$srcdir/configure
+
+$MAKE
+cat foo
+grep '!Foo!' foo
+$MAKE distcheck
+
+rm -f foo
+
+# Modify just Makefile.am.
+
+$sleep
+
+cat > $srcdir/Makefile.am <<'END'
+all-local: bar
+bar:
+ echo '!Baz!' >$@
+check-local:
+ cat bar
+ grep '!Baz!' bar
+ test ! -r $(srcdir)/foo
+ test ! -r foo
+CLEANFILES = bar
+END
+
+using_gmake || $MAKE Makefile
+$MAKE
+cat bar
+grep '!Baz!' bar
+test ! -e foo
+$MAKE distcheck
+
+rm -f bar
+
+# Modify Makefile.am and configure.ac.
+
+$sleep
+
+cat > $srcdir/Makefile.am <<'END'
+check-local:
+ cat quux
+ grep '!Zardoz!' quux
+ test ! -r $(srcdir)/bar
+ test ! -r bar
+END
+
+cat $srcdir/configure.stub - > $srcdir/configure.ac <<'END'
+AC_CONFIG_FILES([quux])
+AC_SUBST([QUUX], [Zardoz])
+AC_OUTPUT
+END
+
+cat > $srcdir/quux.in <<'END'
+!@QUUX@!
+END
+
+using_gmake || $MAKE Makefile
+$MAKE
+cat quux
+grep '!Zardoz!' quux
+test ! -e bar
+$MAKE distcheck
+
+rm -f quux
+
+# Modify configure.ac and aclocal.m4 to add a directory of extra m4
+# files considered by aclocal. Also update checks in Makefile.am.
+# Note that we won't use this new directory of extra m4 files in the
+# first rebuild below (but we will in the second).
+
+$sleep
+
+mkdir $srcdir/m4
+
+cat > $srcdir/Makefile.am <<'END'
+all-local: quux
+check-local:
+ cat quux
+ grep '%Foo%' quux
+ test x'$(QUUX)' = x'%Foo%'
+END
+
+# Modify configure.ac and aclocal.m4.
+
+$sleep
+
+cat $srcdir/configure.stub - > $srcdir/configure.ac <<'END'
+AC_CONFIG_MACRO_DIR([m4])
+AC_CONFIG_FILES([quux])
+MY_CUSTOM_MACRO
+AC_OUTPUT
+END
+
+cat >> $srcdir/aclocal.m4 <<'END'
+AC_DEFUN([MY_CUSTOM_MACRO], [AC_SUBST([QUUX], [%Foo%])])
+END
+
+$MAKE
+cat quux
+grep '%Foo%' quux
+$MAKE distcheck
+
+# Modify Makefile.am, remove aclocal.m4, and add a new m4 file to
+# the directory of extra m4 files considered by aclocal. This new
+# file should now provide a macro required by configure.ac and that
+# was previously provided by aclocal.m4.
+
+$sleep
+
+sed 's/%Foo%/%Bar%/g' $srcdir/Makefile.am > t
+mv -f t $srcdir/Makefile.am
+cat $srcdir/Makefile.am
+rm -f $srcdir/aclocal.m4
+cat > $srcdir/m4/blah.m4 <<'END'
+AC_DEFUN([MY_CUSTOM_MACRO], [AC_SUBST([QUUX], [%Bar%])])
+END
+
+$MAKE
+cat quux
+grep '%Bar%' quux
+$MAKE distcheck
+
+# Modify Makefile.am, remove all the extra m4 files to considered
+# by aclocal, and add an acinclude.m4 file. This last file should
+# now provide a macro required by configure.ac, and that was
+# previously provided by the extra m4 files considered by aclocal.
+
+$sleep
+
+rm -f $srcdir/m4/*.m4
+sed 's/%Bar%/%Quux%/g' $srcdir/Makefile.am > t
+mv -f t $srcdir/Makefile.am
+cat $srcdir/Makefile.am
+cat > $srcdir/acinclude.m4 <<'END'
+AC_DEFUN([MY_CUSTOM_MACRO], [AC_SUBST([QUUX], [%Quux%])])
+END
+
+$MAKE
+cat quux
+grep '%Quux%' quux
+$MAKE distcheck
+
+:
diff --git a/t/remake-makefile-vpath.sh b/t/remake-makefile-vpath.sh
new file mode 100644
index 000000000..6ec167187
--- /dev/null
+++ b/t/remake-makefile-vpath.sh
@@ -0,0 +1,192 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test basic remake rules for Makefiles, for a *VPATH build*.
+# This testcase checks dependency of generated Makefile from Makefile.am,
+# configure.ac, acinclude.m4, aclocal.m4, and extra m4 files considered
+# by aclocal.
+# Keep this in sync with sister test 'remake-makefile-instree.sh', which
+# performs the same checks for a in-tree build.
+
+. test-init.sh
+
+mv -f configure.ac configure.stub
+
+cat > Makefile.am <<'END'
+all-local: foo
+foo:
+ echo '!Foo!' >$@
+check-local:
+ cat foo
+ grep '!Foo!' foo
+CLEANFILES = foo
+END
+
+cat configure.stub - > configure.ac <<'END'
+AC_OUTPUT
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+mkdir build
+cd build
+srcdir='..' # To make syncing with remake-makefile-intree.sh easier.
+
+$srcdir/configure
+
+$MAKE
+cat foo
+grep '!Foo!' foo
+$MAKE distcheck
+
+rm -f foo
+
+# Modify just Makefile.am.
+
+$sleep
+
+cat > $srcdir/Makefile.am <<'END'
+all-local: bar
+bar:
+ echo '!Baz!' >$@
+check-local:
+ cat bar
+ grep '!Baz!' bar
+ test ! -r $(srcdir)/foo
+ test ! -r foo
+CLEANFILES = bar
+END
+
+using_gmake || $MAKE Makefile
+$MAKE
+cat bar
+grep '!Baz!' bar
+test ! -e foo
+$MAKE distcheck
+
+rm -f bar
+
+# Modify Makefile.am and configure.ac.
+
+$sleep
+
+cat > $srcdir/Makefile.am <<'END'
+check-local:
+ cat quux
+ grep '!Zardoz!' quux
+ test ! -r $(srcdir)/bar
+ test ! -r bar
+END
+
+cat $srcdir/configure.stub - > $srcdir/configure.ac <<'END'
+AC_CONFIG_FILES([quux])
+AC_SUBST([QUUX], [Zardoz])
+AC_OUTPUT
+END
+
+cat > $srcdir/quux.in <<'END'
+!@QUUX@!
+END
+
+using_gmake || $MAKE Makefile
+$MAKE
+cat quux
+grep '!Zardoz!' quux
+test ! -e bar
+$MAKE distcheck
+
+rm -f quux
+
+# Modify configure.ac and aclocal.m4 to add a directory of extra m4
+# files considered by aclocal. Also update checks in Makefile.am.
+# Note that we won't use this new directory of extra m4 files in the
+# first rebuild below (but we will in the second).
+
+$sleep
+
+mkdir $srcdir/m4
+
+cat > $srcdir/Makefile.am <<'END'
+all-local: quux
+check-local:
+ cat quux
+ grep '%Foo%' quux
+ test x'$(QUUX)' = x'%Foo%'
+END
+
+# Modify configure.ac and aclocal.m4.
+
+$sleep
+
+cat $srcdir/configure.stub - > $srcdir/configure.ac <<'END'
+AC_CONFIG_MACRO_DIR([m4])
+AC_CONFIG_FILES([quux])
+MY_CUSTOM_MACRO
+AC_OUTPUT
+END
+
+cat >> $srcdir/aclocal.m4 <<'END'
+AC_DEFUN([MY_CUSTOM_MACRO], [AC_SUBST([QUUX], [%Foo%])])
+END
+
+$MAKE
+cat quux
+grep '%Foo%' quux
+$MAKE distcheck
+
+# Modify Makefile.am, remove aclocal.m4, and add a new m4 file to
+# the directory of extra m4 files considered by aclocal. This new
+# file should now provide a macro required by configure.ac and that
+# was previously provided by aclocal.m4.
+
+$sleep
+
+sed 's/%Foo%/%Bar%/g' $srcdir/Makefile.am > t
+mv -f t $srcdir/Makefile.am
+cat $srcdir/Makefile.am
+rm -f $srcdir/aclocal.m4
+cat > $srcdir/m4/blah.m4 <<'END'
+AC_DEFUN([MY_CUSTOM_MACRO], [AC_SUBST([QUUX], [%Bar%])])
+END
+
+$MAKE
+cat quux
+grep '%Bar%' quux
+$MAKE distcheck
+
+# Modify Makefile.am, remove all the extra m4 files to considered
+# by aclocal, and add an acinclude.m4 file. This last file should
+# now provide a macro required by configure.ac, and that was
+# previously provided by the extra m4 files considered by aclocal.
+
+$sleep
+
+rm -f $srcdir/m4/*.m4
+sed 's/%Bar%/%Quux%/g' $srcdir/Makefile.am > t
+mv -f t $srcdir/Makefile.am
+cat $srcdir/Makefile.am
+cat > $srcdir/acinclude.m4 <<'END'
+AC_DEFUN([MY_CUSTOM_MACRO], [AC_SUBST([QUUX], [%Quux%])])
+END
+
+$MAKE
+cat quux
+grep '%Quux%' quux
+$MAKE distcheck
+
+:
diff --git a/t/remake-mild-stress.sh b/t/remake-mild-stress.sh
new file mode 100644
index 000000000..ecbe3c60f
--- /dev/null
+++ b/t/remake-mild-stress.sh
@@ -0,0 +1,146 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test basic remake rules for Makefiles with non-default names
+# and/or with multiple sources.
+
+. test-init.sh
+
+magic1=::MagicStringOne::
+magic2=__MagicStringTwo__
+magic3=%%MagicStringThree%%
+
+# See if the user's make implementation support an include directive.
+# We need it in this test.
+echo 'all:; @echo include is supported' > incl.mk
+echo 'include incl.mk' > gnu-style.mk
+echo '.include "incl.mk"' > bsd-style.mk
+if $MAKE -f gnu-style.mk | grep 'include is supported'; then
+ echo "$me: GNU make include style supported"
+ include_zardoz='include zardoz'
+elif $MAKE -f bsd-style.mk | grep 'include is supported'; then
+ echo "$me: BSD make include style supported"
+ include_zardoz='.include "zardoz"'
+else
+ skip_ "make doesn't support any \"include\" directive"
+fi
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([zardoz])
+AC_CONFIG_LINKS([Makefile:Makefile])
+AC_OUTPUT
+END
+
+cat > zardoz.am <<END
+EXTRA_DIST = Makefile
+#H: $magic1
+END
+
+cat > Makefile <<END
+$include_zardoz
+nil:
+.PHONY: nil
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+
+if using_gmake; then
+ $MAKE nil
+else
+ $MAKE Makefile
+fi
+grep '^#H:' zardoz.in # For debugging.
+$FGREP $magic1 zardoz
+$FGREP $magic1 zardoz.in
+$MAKE distcheck
+$MAKE distclean # This shouldn't remove Makefile.
+ls -l
+test -f Makefile
+
+./configure
+
+$sleep
+sed "s/%MAGIC3%/$magic3/" >> Makefile <<'END'
+my-check:
+ ls -l . $(srcdir) ;: For debugging.
+ test -f $(srcdir)/quux.am
+ test -f $(srcdir)/quux.in
+ test -f $(srcdir)/bot.in
+ test -f $(srcdir)/top.in
+ test ! -r $(srcdir)/zardoz.am
+ test ! -r $(srcdir)/zardoz.in
+ grep FOO zardoz ;: For debugging.
+ test x'$(FOO)' = x'%MAGIC3%'
+test:
+ ls -l ;: For debugging.
+ test x'$(FOO)' = x'dummy'
+.PHONY: test my-check
+END
+sed "s/^#H:.*/#H: $magic2/" zardoz.am > t
+cat >> t <<'END'
+# Used by "make distcheck" below.
+check-local: my-check
+END
+mv -f t zardoz.am
+cat zardoz.am # For debugging.
+if using_gmake; then
+ $MAKE nil
+else
+ $MAKE zardoz
+fi
+$FGREP my-check zardoz # Sanity check.
+$FGREP $magic1 zardoz zardoz.in && exit 1
+$FGREP $magic2 zardoz
+$FGREP $magic2 zardoz.in
+
+./configure
+
+$sleep
+sed 's/^\(AC_CONFIG_FILES\)(.*/\1([zardoz:top.in:quux.in:bot.in])/' \
+ <configure.ac >t
+mv -f t configure.ac
+cat configure.ac # For debugging.
+sed '/^#H:/d' zardoz.am > quux.am
+echo 'FOO = dummy' >> quux.am
+echo 'BAR = $(BAZ)' > top.in
+echo "BAZ = $magic3" > bot.in
+is_gmake || $MAKE zardoz
+$MAKE test
+$FGREP my-check zardoz # Sanity check.
+$FGREP $magic3 quux.in && exit 1
+$FGREP $magic3 zardoz
+$FGREP $magic1 zardoz && exit 1
+$FGREP $magic2 zardoz && exit 1
+# After the remake above, the files 'zardoz.am' and 'zardoz.in'
+# should be no more needed.
+echo 'endif' > zardoz.am # Put in a syntax error.
+is_gmake || $MAKE zardoz
+$MAKE test
+rm -f zardoz.in zardoz.am # Get rid of them.
+is_gmake || $MAKE zardoz
+$MAKE test
+
+echo 'FOO = $(BAR)' >> quux.am
+is_gmake || $MAKE zardoz
+$MAKE distcheck
+
+:
diff --git a/t/remake-moved-m4-file.sh b/t/remake-moved-m4-file.sh
new file mode 100644
index 000000000..98e17d5eb
--- /dev/null
+++ b/t/remake-moved-m4-file.sh
@@ -0,0 +1,76 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test remake rules when m4 files get moved among different "include
+# dirs" (i.e. those passed to aclocal with '-I' option).
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+MY_MACRO
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+ACLOCAL_AMFLAGS = -I d1 -I d2 -I d3
+.PHONY: test
+test:
+ test '$(the_answer)' -eq 42
+END
+
+mkdir d1 d2 d3
+
+cat > d1/macros.m4 <<'END'
+AC_DEFUN([MY_MACRO], [FOO])
+END
+
+cat > d1/foo.m4 <<'END'
+AC_DEFUN([FOO], [the_answer=42; AC_SUBST([the_answer])])
+END
+
+$ACLOCAL -I d1
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+$MAKE test
+
+# Move one file.
+mv d1/foo.m4 d2/foo.m4
+using_gmake || $MAKE Makefile
+$MAKE test
+$MAKE distdir
+ls -l $distdir $distdir/*
+test -f $distdir/d2/foo.m4
+test ! -e $distdir/d1/foo.m4
+test -f $distdir/d1/macros.m4
+test ! -e $distdir/d2/macros.m4
+
+# Move both files at once.
+mv d1/macros.m4 d3/macros.m4
+mv d2/foo.m4 d3/foo.m4
+using_gmake || $MAKE Makefile
+$MAKE test
+$MAKE distdir
+ls -l $distdir $distdir/*
+test -f $distdir/d3/foo.m4
+test -f $distdir/d3/macros.m4
+test ! -e $distdir/d1/foo.m4
+test ! -e $distdir/d2/foo.m4
+test ! -e $distdir/d1/macros.m4
+test ! -e $distdir/d2/macros.m4
+
+:
diff --git a/t/remake-not-after-make-dist.sh b/t/remake-not-after-make-dist.sh
new file mode 100644
index 000000000..5f41c8d1b
--- /dev/null
+++ b/t/remake-not-after-make-dist.sh
@@ -0,0 +1,56 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure Makefile.in are up to date after make dist.
+# This is expected to work even without GNU Make (the GNU Make
+# feature that isn't supported elsewhere is the rebuild of
+# Makefile dependencies during ordinary builds).
+#
+# If this fails, this is likely to be due to a dependency being
+# given two different name. For instance BSD Make does not know
+# that 'Makefile' is the same as './Makefile'
+#
+# Report from Akim Demaille.
+
+. test-init.sh
+
+cat >>configure.ac <<'EOF'
+# Rebuild rule are ok until make dist, but not afterwards.
+if test ! -f rebuild_ok; then
+ ACLOCAL=false
+ AUTOMAKE=false
+ AUTOCONF=false
+fi
+AC_OUTPUT
+EOF
+
+: > rebuild_ok
+: > Makefile.am
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+./configure
+$MAKE
+$sleep
+touch aclocal.m4
+$MAKE distdir
+cd $me-1.0
+test ! -f rebuild_ok
+./configure
+$MAKE
+
+:
diff --git a/t/remake-recurs-user.sh b/t/remake-recurs-user.sh
new file mode 100644
index 000000000..665dc3d16
--- /dev/null
+++ b/t/remake-recurs-user.sh
@@ -0,0 +1,89 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Remake rules and user-defined recursive rules.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+m4_include([extra-targets.m4])
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+END
+
+echo 'AM_EXTRA_RECURSIVE_TARGETS([foo])' > extra-targets.m4
+
+cat > Makefile.am << 'END'
+SUBDIRS = sub
+all-local: foo
+foo-local:
+ : > foo
+bar-local:
+ : > bar
+MOSTLYCLEANFILES = foo
+END
+
+mkdir sub
+cat > sub/Makefile.am << 'END'
+foo-local:
+ : > foo2
+MOSTLYCLEANFILES = foo2
+bar-local: later-target
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+
+$MAKE
+test -f foo
+test -f sub/foo2
+test ! -f bar
+test ! -f sub/zardoz
+$MAKE distcheck
+
+$sleep
+
+echo 'AM_EXTRA_RECURSIVE_TARGETS([bar])' >> extra-targets.m4
+
+cat >> Makefile.am <<'END'
+MOSTLYCLEANFILES += bar oof
+all-local: bar
+foo-local: oof
+oof:
+ : > $@
+END
+
+echo 'include $(srcdir)/more.am' >> sub/Makefile.am
+
+cat > sub/more.am << 'END'
+later-target:
+ : > zardoz
+DISTCLEANFILES = zardoz
+END
+
+using_gmake || $MAKE Makefile
+$MAKE
+test -f foo
+test -f oof
+test -f sub/foo2
+test -f bar
+test -f sub/zardoz
+$MAKE distcheck
+
+:
diff --git a/t/remake-renamed-am.sh b/t/remake-renamed-am.sh
new file mode 100644
index 000000000..2aa26c424
--- /dev/null
+++ b/t/remake-renamed-am.sh
@@ -0,0 +1,58 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that inclusion of '.am' fragments by automake does not suffer
+# of the "deleted header problem". This test checks that we can rename
+# an included .am file without confusing the remake rules.
+
+. test-init.sh
+
+echo AC_OUTPUT >> configure.ac
+
+cat > Makefile.am <<'END'
+include foo.am
+END
+
+cat > foo.am <<'END'
+all-local:
+ echo ok > has-run-1
+END
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+./configure
+$MAKE
+test -f has-run-1
+
+$sleep
+rm -f has-run-1
+mv -f foo.am bar.am
+echo include bar.am > Makefile.am
+$MAKE Makefile
+$FGREP 'foo.am' Makefile Makefile.in && exit 1
+
+$sleep
+rm -f has-run-1 bar.am
+echo 'all-local:; echo ok > has-run-2' > zardoz.am
+echo 'include $(srcdir)/zardoz.am' > Makefile.am
+using_gmake || $MAKE Makefile
+$MAKE
+test ! -e has-run-1
+test -f has-run-2
+
+:
diff --git a/t/remake-renamed-m4-file.sh b/t/remake-renamed-m4-file.sh
new file mode 100644
index 000000000..57e199488
--- /dev/null
+++ b/t/remake-renamed-m4-file.sh
@@ -0,0 +1,83 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test remake rules when m4 files get renamed.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+MY_MACRO
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+ACLOCAL_AMFLAGS = -I m4
+.PHONY: test
+test:
+ test '$(the_answer)' -eq 42
+END
+
+mkdir m4
+
+cat > m4/macros.m4 <<'END'
+AC_DEFUN([MY_MACRO], [FOO])
+END
+
+cat > m4/foo.m4 <<'END'
+AC_DEFUN([FOO], [the_answer=42; AC_SUBST([the_answer])])
+END
+
+$ACLOCAL -I m4
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+$MAKE test
+
+# Rename one file at the time.
+
+mv m4/foo.m4 m4/bar.m4
+using_gmake || $MAKE Makefile
+$MAKE test
+$MAKE distdir
+ls -l $distdir $distdir/*
+test -f $distdir/m4/bar.m4
+test ! -e $distdir/m4/foo.m4
+
+mv m4/macros.m4 m4/defs.m4
+using_gmake || $MAKE Makefile
+$MAKE test
+$MAKE distdir
+ls -l $distdir $distdir/*
+test -f $distdir/m4/defs.m4
+test ! -e $distdir/m4/macros.m4
+
+# Rename both files at once.
+
+mv m4/bar.m4 m4/quux.m4
+mv m4/defs.m4 acinclude.m4
+using_gmake || $MAKE Makefile
+$MAKE test
+$MAKE distdir
+ls -l $distdir $distdir/*
+test -f $distdir/m4/quux.m4
+test -f $distdir/acinclude.m4
+test ! -e $distdir/m4/foo.m4
+test ! -e $distdir/m4/bar.m4
+test ! -e $distdir/m4/macros.m4
+test ! -e $distdir/m4/defs.m4
+
+:
diff --git a/t/remake-renamed-m4-macro-and-file.sh b/t/remake-renamed-m4-macro-and-file.sh
new file mode 100644
index 000000000..72adcc640
--- /dev/null
+++ b/t/remake-renamed-m4-macro-and-file.sh
@@ -0,0 +1,86 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test remake rules when an m4 file gets renamed and *simultaneously*
+# an m4 macro in it gets renamed. Kudos to Bruno Haible for thinking
+# about this situation. See also related test 'aclocal-deleted-header.sh'.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+MY_MACRO
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+ACLOCAL_AMFLAGS = -I m4
+.PHONY: test
+test:
+ test '$(the_answer)' -eq 42
+END
+
+mkdir m4
+
+cat > m4/macros.m4 <<'END'
+AC_DEFUN([MY_MACRO], [FOO_MACRO])
+END
+
+cat > m4/foo.m4 <<'END'
+AC_DEFUN([FOO_MACRO], [the_answer=42; AC_SUBST([the_answer])])
+END
+
+$ACLOCAL -I m4
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+$MAKE test
+
+# Rename only one file and one macro.
+
+$sleep
+sed -e 's/FOO_MACRO/BAR_MACRO/' m4/foo.m4 > m4/bar.m4
+rm -f m4/foo.m4
+sed -e 's/FOO_MACRO/BAR_MACRO/' m4/macros.m4 > t
+mv -f t m4/macros.m4
+using_gmake || $MAKE Makefile
+$MAKE test
+$MAKE distdir
+ls -l $distdir $distdir/*
+test -f $distdir/m4/bar.m4
+test -f $distdir/m4/macros.m4
+test ! -e $distdir/m4/foo.m4
+
+# Rename both at once.
+
+$sleep
+sed -e 's/BAR_MACRO/QUUX_MACRO/' \
+ m4/bar.m4 > m4/quux.m4
+sed -e 's/BAR_MACRO/QUUX_MACRO/' -e 's/MY_MACRO/A_MACRO/' \
+ m4/macros.m4 > m4/defs.m4
+rm -f m4/macros.m4 m4/bar.m4
+sed -e 's/BAR_MACRO/QUUX_MACRO/' -e 's/MY_MACRO/A_MACRO/' configure.ac > t
+mv -f t configure.ac
+using_gmake || $MAKE Makefile
+$MAKE test
+$MAKE distdir
+ls -l $distdir $distdir/*
+test -f $distdir/m4/quux.m4
+test -f $distdir/m4/defs.m4
+test ! -e $distdir/m4/bar.m4
+test ! -e $distdir/m4/macros.m4
+
+:
diff --git a/t/remake-renamed-m4-macro.sh b/t/remake-renamed-m4-macro.sh
new file mode 100644
index 000000000..4bd9edb5d
--- /dev/null
+++ b/t/remake-renamed-m4-macro.sh
@@ -0,0 +1,72 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test remake rules when the name of an m4 macro change. Try both with
+# and without indirection.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+MY_MACRO
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+ACLOCAL_AMFLAGS = -I m4
+.PHONY: test
+test:
+ test '$(the_answer)' -eq 42
+END
+
+mkdir m4
+
+cat > m4/macros.m4 <<'END'
+AC_DEFUN([MY_MACRO], [FOO_1])
+END
+
+cat > m4/foo.m4 <<'END'
+AC_DEFUN([FOO_1], [the_answer=42
+ AC_SUBST([the_answer])])
+END
+
+$ACLOCAL -I m4
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+$MAKE test
+
+$sleep
+
+for x in macros foo; do
+ sed -e 's/FOO_1/FOO_2/' m4/$x.m4 > t
+ mv -f t m4/$x.m4
+done
+
+using_gmake || $MAKE Makefile
+$MAKE test
+
+$sleep
+
+for f in m4/macros.m4 configure.ac; do
+ sed -e 's/MY_MACRO/YOUR_MACRO/' $f > t
+ mv -f t $f
+done
+
+using_gmake || $MAKE Makefile
+$MAKE test
+
+:
diff --git a/t/remake-subdir-from-subdir.sh b/t/remake-subdir-from-subdir.sh
new file mode 100644
index 000000000..c63de118c
--- /dev/null
+++ b/t/remake-subdir-from-subdir.sh
@@ -0,0 +1,56 @@
+#! /bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that remake rules works for adding a new subdirectory from a
+# pre-existing subdirectory.
+# See also the other similar tests 'remake-subdir*.sh', and the
+# related test 'aclocal5.sh'.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+m4_include([subdirs.m4])
+AC_SUBST([MAGIC], [magic])
+AC_OUTPUT
+END
+
+echo 'AC_CONFIG_FILES([sub/Makefile])' > subdirs.m4
+echo 'SUBDIRS = sub' > Makefile.am
+
+mkdir sub
+: > sub/Makefile.am
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+$MAKE
+
+cd sub
+$sleep
+echo 'AC_CONFIG_FILES([sub/subsub/Makefile])' >> ../subdirs.m4
+echo 'SUBDIRS = subsub' >> Makefile.am
+mkdir subsub
+cat > subsub/Makefile.am <<'END'
+all-local:
+ : > ok-it-works
+END
+using_gmake || $MAKE Makefile
+$MAKE
+test -f subsub/ok-it-works
+
+:
diff --git a/t/remake-subdir-gnu.sh b/t/remake-subdir-gnu.sh
new file mode 100644
index 000000000..cbc4aae55
--- /dev/null
+++ b/t/remake-subdir-gnu.sh
@@ -0,0 +1,80 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that remake rules works from subdirectories, even using
+# 'GNUmakefile' as makefiles name. This obviously requires GNU
+# make.
+# See also the other similar tests 'remake-subdir*.sh', and the
+# related test 'aclocal5.sh'
+
+required=GNUmake
+. test-init.sh
+
+magic1='::MagicString::One::'
+magic2='__MagicString__Two__'
+
+debug_info ()
+{
+ grep -i magic configure GNUmakefile.in GNUmakefile \
+ sub/GNUmakefile.in sub/GNUmakefile
+}
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([GNUmakefile sub/GNUmakefile])
+AC_SUBST([MAGIC], [magic])
+AC_OUTPUT
+END
+
+cat > GNUmakefile.am <<'END'
+SUBDIRS = sub
+END
+
+mkdir sub
+: > sub/GNUmakefile.am
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+$MAKE
+debug_info
+
+$sleep
+sed "s|magic|$magic1|" configure.ac > t
+mv -f t configure.ac
+cd sub
+$MAKE
+cd ..
+debug_info
+$FGREP $magic1 configure
+$FGREP $magic1 GNUmakefile
+$FGREP $magic1 sub/GNUmakefile
+
+$sleep
+cd sub
+echo MAGIC = $magic2 >> GNUmakefile.am
+$MAKE
+cd ..
+debug_info
+$FGREP $magic2 sub/GNUmakefile
+$FGREP $magic2 sub/GNUmakefile.in
+$FGREP $magic1 sub/GNUmakefile sub/GNUmakefile.in && exit 1
+$FGREP $magic2 GNUmakefile GNUmakefile.in && exit 1
+
+:
diff --git a/t/remake-subdir-grepping.sh b/t/remake-subdir-grepping.sh
new file mode 100644
index 000000000..8c005e79c
--- /dev/null
+++ b/t/remake-subdir-grepping.sh
@@ -0,0 +1,39 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Weak "grepping" test trying to ensure that remaking rules in a subdir
+# are correctly generated.
+# See also sister functional test 'remake-subdir-only.sh'.
+
+. test-init.sh
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+END
+
+mkdir sub
+: > sub/Makefile.am
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '^Makefile' sub/Makefile.in
+grep '\$(AUTOMAKE).* sub/Makefile' sub/Makefile.in
+
+:
diff --git a/t/remake-subdir-long-time.sh b/t/remake-subdir-long-time.sh
new file mode 100644
index 000000000..e07dfa7a7
--- /dev/null
+++ b/t/remake-subdir-long-time.sh
@@ -0,0 +1,114 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that remake rules from subdirectories do not hang or cycle
+# endlessly, even with build systems that takes several seconds to
+# rebuild the Makefiles.
+# This test tries to ensure a long-enough rebuild time by introducing
+# an explicit delay in the build process.
+# Suggestion by Ralf Wildenhues.
+
+. test-init.sh
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE([foreign -Wall -Werror])
+AC_CONFIG_FILES([Makefile sub/Makefile])
+AC_SUBST([MAGIC], [magic])
+AC_OUTPUT
+END
+
+echo SUBDIRS = sub > Makefile.am
+mkdir sub
+: > sub/Makefile.am
+
+# Both aclocal and automake are expected to run one and just one time.
+# Create and use wrappers that will verify that.
+
+ocwd=$(pwd) || fatal_ "cannot get current working directory"
+
+mkdir bin
+
+cat > bin/automake <<END
+#!/bin/sh
+set -e
+PATH='$PATH'; export PATH
+sentinel='$ocwd/automake-has-run'
+if test -f "\$sentinel"; then
+ echo "Automake has been run more than one time" >&2
+ exit 1
+else
+ echo automake has run > "\$sentinel"
+fi
+$sleep; $sleep;
+exec $AUTOMAKE \${1+"\$@"}
+END
+chmod a+x bin/automake
+
+cat > bin/aclocal <<END
+#!/bin/sh
+set -e
+PATH='$PATH'; export PATH
+sentinel='$ocwd/aclocal-has-run'
+if test -f "\$sentinel"; then
+ echo "Aclocal has been run more than one time" >&2
+ exit 1
+else
+ echo aclocal has run > "\$sentinel"
+fi
+$sleep; $sleep;
+exec $ACLOCAL \${1+"\$@"}
+END
+chmod a+x bin/aclocal
+
+# Just to be sure.
+cp bin/automake bin/automake-$APIVERSION
+cp bin/aclocal bin/aclocal-$APIVERSION
+
+PATH=$ocwd/bin$PATH_SEPARATOR$PATH; export PATH
+
+AUTOMAKE=automake ACLOCAL=aclocal; export AUTOMAKE ACLOCAL
+
+$ACLOCAL # Should use or just-defined wrapper.
+$AUTOMAKE # Likewise.
+$AUTOCONF
+
+# Sanity check: the wrappers have been used.
+test -f automake-has-run
+test -f aclocal-has-run
+rm -f automake-has-run aclocal-has-run
+
+./configure
+# Sanity check: Makefile doesn't get updated uselessly.
+run_make ACLOCAL=false AUTOMAKE=false AUTOCONF=false
+
+$sleep
+sed "s|magic|magic2|" configure.ac > t
+mv -f t configure.ac
+
+cd sub
+run_make Makefile AUTOMAKE="$AUTOMAKE" ACLOCAL="$ACLOCAL"
+cd ..
+
+# For debugging.
+ls -l . sub
+grep -i magic configure Makefile.in Makefile sub/Makefile.in sub/Makefile
+# Sanity checks.
+$FGREP magic2 configure
+$FGREP magic2 Makefile
+$FGREP magic2 sub/Makefile
+
+:
diff --git a/t/remake-subdir-no-makefile.sh b/t/remake-subdir-no-makefile.sh
new file mode 100644
index 000000000..bfe2705dc
--- /dev/null
+++ b/t/remake-subdir-no-makefile.sh
@@ -0,0 +1,72 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Ensure that remake rules work for files in a subdirectory even when
+# there is no Makefile for that subdirectory.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_FILES([sub/foo])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+all-local: sub/foo
+END
+
+mkdir sub
+: > sub/foo.in
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+# First a VPATH build.
+mkdir build
+cd build
+../configure
+$sleep
+test -f sub/foo
+test ! -s sub/foo
+echo '#GrepMe#' > ../sub/foo.in
+$MAKE
+grep '#GrepMe#' sub/foo
+
+cd ..
+
+# Now try an in-tree build.
+: > sub/foo.in # Restore its original (empty) content.
+./configure
+$sleep
+test -f sub/foo
+test ! -s sub/foo
+echo '#GrepMe#' > sub/foo.in
+$MAKE
+grep '#GrepMe#' sub/foo
+
+# Finally try to check the distribution.
+$sleep
+echo '%GrepMe%' > sub/foo.in
+cat >>Makefile.am <<END
+check-local:
+ grep '%GrepMe%' sub/foo
+END
+$MAKE
+grep "grep '%GrepMe%' sub/foo" Makefile.in # Sanity check.
+$MAKE distcheck
+
+:
diff --git a/t/remake-subdir-only.sh b/t/remake-subdir-only.sh
new file mode 100644
index 000000000..8a4bfaffd
--- /dev/null
+++ b/t/remake-subdir-only.sh
@@ -0,0 +1,55 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure remaking rules in subdir are correctly generated.
+# See also sister "grepping" test 'remake-subdir-grepping.sh'.
+
+. test-init.sh
+
+fingerprint='=/FiNgErPrInT/='
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+END
+
+mkdir sub
+: > sub/Makefile.am
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+
+# Rebuild rules should work even if there is no top-level
+# makefiles, if we are careful enough to trigger them only
+# in proper subdirs.
+$sleep
+echo "# $fingerprint" > sub/Makefile.am
+cd sub
+$MAKE Makefile
+cd ..
+# Check that no spurious Makefile has been created in the
+# top-level directory.
+test ! -e Makefile
+# Check that the Makefile in the subdirectory has been properly
+# updated.
+$FGREP "$fingerprint" sub/Makefile
+
+:
diff --git a/t/remake-subdir.sh b/t/remake-subdir.sh
new file mode 100644
index 000000000..7a5d0825a
--- /dev/null
+++ b/t/remake-subdir.sh
@@ -0,0 +1,81 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that remake rules works from subdirectories, even with non-GNU
+# make implementations.
+# See also the other similar tests 'remake-subdir*.sh', and the
+# related test 'aclocal5.sh'.
+
+. test-init.sh
+
+if using_gmake; then
+ remake=$MAKE
+else
+ remake="$MAKE Makefile"
+fi
+
+magic1='::MagicString::One::'
+magic2='__MagicString__Two__'
+
+debug_info ()
+{
+ grep -i magic configure Makefile.in Makefile sub/Makefile.in sub/Makefile
+}
+
+cat >> configure.ac <<'END'
+AC_CONFIG_FILES([sub/Makefile])
+AC_SUBST([MAGIC], [magic])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+SUBDIRS = sub
+END
+
+mkdir sub
+: > sub/Makefile.am
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+$MAKE
+debug_info
+
+$sleep
+sed "s|magic|$magic1|" configure.ac > t
+mv -f t configure.ac
+cd sub
+$remake
+cd ..
+debug_info
+$FGREP $magic1 configure
+$FGREP $magic1 Makefile
+$FGREP $magic1 sub/Makefile
+
+$sleep
+cd sub
+echo MAGIC = $magic2 >> Makefile.am
+$remake
+cd ..
+debug_info
+$FGREP $magic2 sub/Makefile
+$FGREP $magic2 sub/Makefile.in
+$FGREP $magic1 sub/Makefile sub/Makefile.in && exit 1
+$FGREP $magic2 Makefile Makefile.in && exit 1
+
+:
diff --git a/t/remake-subdir2.sh b/t/remake-subdir2.sh
new file mode 100644
index 000000000..6ec23a49c
--- /dev/null
+++ b/t/remake-subdir2.sh
@@ -0,0 +1,82 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that remake rules works from subdirectories, even when makefiles
+# are not named "Makefile".
+# See also the other similar tests 'remake-subdir*.sh', and the
+# related test 'aclocal5.sh'.
+
+. test-init.sh
+
+magic1='::MagicString::One::'
+magic2='__MagicString__Two__'
+
+debug_info ()
+{
+ grep -i magic configure build.in build.mk sub/build.in sub/build.mk
+}
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([build.mk:build.in])
+AC_CONFIG_FILES([sub/build.mk:sub/build.in])
+AC_SUBST([MAGIC], [magic])
+AC_OUTPUT
+END
+
+cat > build.am <<'END'
+AM_MAKEFLAGS = -f build.mk
+SUBDIRS = sub
+END
+
+mkdir sub
+cat > sub/build.am <<'END'
+AM_MAKEFLAGS = -f build.mk
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+ls -l # For debugging.
+
+$MAKE -f build.mk
+debug_info
+
+$sleep
+sed "s|magic|$magic1|" configure.ac > t
+mv -f t configure.ac
+cd sub
+$MAKE -f build.mk build.mk
+cd ..
+debug_info
+$FGREP $magic1 configure
+$FGREP $magic1 build.mk
+$FGREP $magic1 sub/build.mk
+
+$sleep
+cd sub
+echo MAGIC = $magic2 >> build.am
+$MAKE -f build.mk build.mk
+cd ..
+debug_info
+$FGREP $magic2 sub/build.mk
+$FGREP $magic2 sub/build.in
+$FGREP $magic1 sub/build.in sub/build.mk && exit 1
+$FGREP $magic2 build.in build.mk && exit 1
+
+:
diff --git a/t/remake-subdir3.sh b/t/remake-subdir3.sh
new file mode 100644
index 000000000..0dbd673fb
--- /dev/null
+++ b/t/remake-subdir3.sh
@@ -0,0 +1,62 @@
+#! /bin/sh
+# Copyright (C) 2008-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure remaking rules work when subdir Makefile.in has been removed.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+SUBDIRS = sub
+END
+mkdir sub
+: > sub/Makefile.am
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+./configure
+$MAKE
+
+do_check ()
+{
+ run_make -O
+ test $(grep -c "/missing " stdout) -eq 1
+}
+
+# Now, we are set up. Ensure that, for either missing Makefile.in,
+# or updated Makefile.am, rebuild rules are run, and run exactly once
+# only.
+
+rm -f Makefile.in
+do_check
+
+rm -f sub/Makefile.in
+do_check
+
+$sleep # Let touched files appear newer.
+
+touch Makefile.am
+do_check
+
+touch sub/Makefile.am
+do_check
+
+:
diff --git a/t/remake-timing-bug-pr8365.sh b/t/remake-timing-bug-pr8365.sh
new file mode 100644
index 000000000..c94971e3c
--- /dev/null
+++ b/t/remake-timing-bug-pr8365.sh
@@ -0,0 +1,106 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for automake bug#8365, related to Makefile remake rules.
+# The bug is due to subtle timestamp issues and limitations in
+# make's behaviour, and is very unlikely to be triggered (we have
+# to resort to timestamp edit hacks to consistently expose it); in
+# any account, it is nigh to impossible to trigger it by running
+# make by hand. Thus, fixing it would not be worth the hassle, but
+# we prefer to keep it exposed anyway.
+
+. test-init.sh
+
+# We'll use calls to stat to get debugging information.
+if stat /dev/null; then stat=stat; else stat=:; fi
+
+cat >> configure.ac << 'END'
+FOOBAR=zardoz
+AC_OUTPUT
+END
+
+: > Makefile.am
+
+$ACLOCAL
+# Run automake *before* autoconf, because we want to ensure that
+# Makefile.in is not newer than configure.
+$AUTOMAKE
+$AUTOCONF
+
+./configure
+$MAKE Makefile
+# Sanity check.
+$EGREP 'FOOBAR|zardoz' Makefile && fatal_ 'unexpected AC_SUBST in Makefile'
+
+echo 'AC_SUBST([FOOBAR])' >> configure.ac
+
+# Modified configure dependencies must have the same timestamp of
+# config.status and Makefile in order to trigger the bug.
+# We also re-touch config.status, because "touch -r" can truncate
+# timestamps on file systems with sub-second resolutions (see the
+# autoconf manual). Finally, we also sleep before touching, to ensure
+# that the (possibly truncated) timestamps of config.status etc. are
+# strictly newer than the non-truncated configure timestamp.
+$stat config.status Makefile configure.ac
+$sleep
+touch config.status
+touch -r config.status config.status Makefile configure.ac
+$stat config.status Makefile configure.ac
+
+# Also, the race condition is triggered only when aclocal, automake
+# and aclocal run fast enough to keep the timestamp of the generated
+# aclocal.m4, Makefile.in and configure equal to the timestamp of
+# Makefile & config.status. To reproduce this race consistently, we
+# need the following hackish wrappers.
+
+cat > aclocal-wrap <<END
+#!/bin/sh
+set -ex
+# aclocal shouldn't use our autoconf wrapper when extracting
+# the races from configure.ac.
+AUTOCONF='$AUTOCONF'; export AUTOCONF
+$ACLOCAL "\$@"
+touch -r config.status aclocal.m4
+$stat aclocal.m4
+END
+
+cat > automake-wrap <<END
+#!/bin/sh
+set -ex
+# automake shouldn't use our autoconf wrapper when extracting
+# the races from configure.ac.
+AUTOCONF='$AUTOCONF'; export AUTOCONF
+$AUTOMAKE "\$@"
+touch -r config.status Makefile.in
+$stat Makefile.in
+END
+
+cat > autoconf-wrap <<END
+#!/bin/sh
+set -ex
+$AUTOCONF "\$@"
+touch -r config.status configure
+$stat configure
+END
+
+chmod a+x aclocal-wrap automake-wrap autoconf-wrap
+
+run_make Makefile \
+ ACLOCAL=./aclocal-wrap AUTOMAKE=./automake-wrap AUTOCONF=./autoconf-wrap
+grep '^FOOBAR =' Makefile.in
+grep '^FOOBAR *= *zardoz *$' Makefile
+
+:
diff --git a/t/repeated-options.sh b/t/repeated-options.sh
new file mode 100644
index 000000000..d4c25bc7c
--- /dev/null
+++ b/t/repeated-options.sh
@@ -0,0 +1,81 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that automake does not complain on repeated options, nor
+# generate broken or incorrect makefiles.
+
+required='cc bzip2'
+. test-init.sh
+
+cat >configure.ac <<END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE([foreign dist-bzip2 no-dist-gzip no-dist-gzip dist-bzip2])
+AC_PROG_CC
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+AUTOMAKE_OPTIONS = parallel-tests subdir-objects subdir-objects
+AUTOMAKE_OPTIONS += dist-bzip2 parallel-tests
+TESTS = foo.test
+EXTRA_DIST = $(TESTS)
+TESTS_ENVIRONMENT = EXEEXT='$(EXEEXT)'
+bin_PROGRAMS = sub/foo
+.PHONY: test-build
+test-build:
+ ls -l . sub
+ test -f sub/foo.$(OBJEXT)
+ test -f sub/foo$(EXEEXT)
+END
+
+mkdir sub
+
+cat > foo.test <<'END'
+#!/bin/sh
+test -f sub/foo$EXEEXT && test -x sub/foo$EXEEXT
+END
+chmod a+x foo.test
+
+cat > sub/foo.c <<'END'
+int main (void)
+{
+ return 0;
+}
+END
+
+cp "$am_scriptdir"/test-driver .
+
+$ACLOCAL
+$AUTOMAKE --foreign --foreign -Wall 2>stderr || { cat stderr >&2; exit 1; }
+test -s stderr && { cat stderr >&2; exit 1; }
+rm -f stderr
+$AUTOCONF
+
+./configure
+$MAKE
+$MAKE test-build
+$MAKE check
+ls -l
+test -f foo.log
+test -f test-suite.log
+$MAKE clean
+$MAKE distcheck
+ls -l
+test -f $me-1.0.tar.bz2
+test ! -e $me-1.0.tar.gz
+
+:
diff --git a/t/reqd2.sh b/t/reqd2.sh
new file mode 100644
index 000000000..42d575374
--- /dev/null
+++ b/t/reqd2.sh
@@ -0,0 +1,57 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Regression test for a bug reported by Andrew Suffield.
+# (Automake goes wild and try to rerun itself more than two time
+# to fix the Makefiles.)
+
+required='libtoolize'
+. test-init.sh
+
+cat > configure.ac << 'END'
+AC_INIT([req2], [1.0])
+AC_CONFIG_AUX_DIR([autoconf])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile])
+AC_PROG_CC
+AM_PROG_AR
+AM_PROG_LIBTOOL
+AC_CONFIG_FILES([autoconf/Makefile main/Makefile])
+AC_OUTPUT
+END
+
+mkdir autoconf
+mkdir main
+
+: > autoconf/Makefile.am
+echo 'SUBDIRS = autoconf main' >Makefile.am
+
+cat >main/Makefile.am <<'END'
+lib_LTLIBRARIES = lib0.la
+lib0_la_SOURCES = 0.c
+END
+
+: > ar-lib
+libtoolize --force --copy
+$ACLOCAL
+$AUTOCONF
+
+test -f autoconf/ltmain.sh # Sanity check.
+rm -f autoconf/ltmain.sh
+AUTOMAKE_fails --add-missing --copy
+grep '^configure\.ac:7:.* required file.*autoconf/ltmain\.sh' stderr
+
+:
diff --git a/t/rm-f-probe.sh b/t/rm-f-probe.sh
new file mode 100644
index 000000000..d8389ce46
--- /dev/null
+++ b/t/rm-f-probe.sh
@@ -0,0 +1,74 @@
+#! /bin/sh
+# Copyright (C) 2013-2017 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 <https://www.gnu.org/licenses/>.
+
+# Verify our probe that checks that "rm -f" doesn't complain if called
+# without file operands works as expected. See automake bug#10828.
+
+. test-init.sh
+
+echo AC_OUTPUT >> configure.ac
+: > Makefile.am
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+mkdir bin
+cat > bin/rm <<'END'
+#!/bin/sh
+set -e; set -u;
+PATH=$original_PATH; export PATH
+rm_opts=
+while test $# -gt 0; do
+ case $1 in
+ -*) rm_opts="$rm_opts $1";;
+ *) break;;
+ esac
+ shift
+done
+if test $# -eq 0; then
+ echo "Oops, fake rm called without arguments" >&2
+ exit 1
+else
+ exec rm $rm_opts "$@"
+fi
+END
+chmod a+x bin/rm
+
+original_PATH=$PATH
+PATH=$(pwd)/bin$PATH_SEPARATOR$PATH
+export PATH original_PATH
+
+rm -f && exit 99 # Sanity check.
+
+./configure 2>stderr && { cat stderr >&2; exit 1; }
+cat stderr >&2
+
+grep "'rm' program.* unable to run without file operands" stderr
+$FGREP "tell bug-automake@gnu.org about your system" stderr
+$FGREP "install GNU coreutils" stderr
+$EGREP "(^| |')ACCEPT_INFERIOR_RM_PROGRAM($| |')" stderr
+
+ACCEPT_INFERIOR_RM_PROGRAM=yes; export ACCEPT_INFERIOR_RM_PROGRAM
+
+./configure
+$MAKE
+$MAKE distcheck
+
+# For the sake of our exit trap.
+PATH=$original_PATH; export PATH
+
+:
diff --git a/t/rulepat.sh b/t/rulepat.sh
new file mode 100644
index 000000000..394520af9
--- /dev/null
+++ b/t/rulepat.sh
@@ -0,0 +1,30 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure RULE_PATTERN catches strange targets.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+$(srcdir)/Makefile.am:
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '^$(srcdir)/Makefile\.am' Makefile.in
+
+:
diff --git a/t/sanity.sh b/t/sanity.sh
new file mode 100644
index 000000000..dee123aea
--- /dev/null
+++ b/t/sanity.sh
@@ -0,0 +1,43 @@
+#! /bin/sh
+# Copyright (C) 2008-2017 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 <https://www.gnu.org/licenses/>.
+
+# Unsafe absolute directory names should be diagnosed.
+
+. test-init.sh
+
+mkdir 'unsafe$'
+cd 'unsafe$'
+
+mv ../configure.ac .
+mv ../install-sh ../missing .
+
+: > Makefile.am
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure 2>stderr && { cat stderr >&2; exit 1; }
+cat stderr >&2
+grep 'unsafe absolute working directory' stderr
+
+cd ..
+mkdir build
+cd build
+../unsafe$/configure 2>stderr && { cat stderr >&2; exit 1; }
+cat stderr >&2
+grep 'unsafe srcdir' stderr
+
+:
diff --git a/t/seenc.sh b/t/seenc.sh
new file mode 100644
index 000000000..5cea239c4
--- /dev/null
+++ b/t/seenc.sh
@@ -0,0 +1,43 @@
+#! /bin/sh
+# Copyright (C) 1997-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure C-but-not-CC error works.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+dnl AC_PROG_CC and AC_PROG_CXX missing on purpose
+AC_LIBOBJ([fsusage])
+AC_LIBOBJ([mountlist])
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo
+foo_SOURCES = x.C
+foo_LDADD = @LIBOBJS@
+END
+
+: > fsusage.c
+: > mountlist.c
+
+$ACLOCAL
+AUTOMAKE_fails
+grep ' C source.*CC.* undefined' stderr
+grep 'define .*CC.* add .*AC_PROG_CC' stderr
+grep ' C++ source.*CXX.* undefined' stderr
+grep 'define .*CXX.* add .*AC_PROG_CXX' stderr
+
+:
diff --git a/t/self-check-cc-no-c-o.sh b/t/self-check-cc-no-c-o.sh
new file mode 100644
index 000000000..115661465
--- /dev/null
+++ b/t/self-check-cc-no-c-o.sh
@@ -0,0 +1,35 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that our fake "C compiler" that doesn't grasp the '-c' and
+# '-o' command-line options passed together, used to enhance testsuite
+# coverage.
+
+required=gcc # Our fake compiler uses gcc.
+am_create_testdir=empty
+. test-init.sh
+
+CC=$am_testaux_builddir/cc-no-c-o; export CC
+
+echo 'int main (void) { return 0; }' > foo.c
+$CC -c foo.c
+test -f foo.o || test -f foo.obj
+$CC -c -o bar.o foo.c 2>stderr && { cat stderr >&2; exit 1; }
+cat stderr >&2
+grep "both '-o' and '-c' seen on the command line" stderr
+test ! -e bar.o && test ! -e bar.obj
+
+:
diff --git a/t/self-check-configure-help.sh b/t/self-check-configure-help.sh
new file mode 100644
index 000000000..1a72198ed
--- /dev/null
+++ b/t/self-check-configure-help.sh
@@ -0,0 +1,274 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Sanity check on the function used by the automake testsuite to
+# analyze output of "configure --help".
+
+. test-init.sh
+
+# FIXME: this test is a good candidate for a conversion to TAP.
+
+# Prefer real-world data. This is from the help screen of the
+# configure script from GNU coreutils, with small adaptations.
+cat > help <<'END'
+'configure' configures GNU coreutils 8.14a to adapt to many kinds of systems.
+
+Usage: ./configure [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE. See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --help=short display options specific to this package
+ --help=recursive display the short help of all the included packages
+ -V, --version display version information and exit
+ -q, --quiet, --silent do not print 'checking ...' messages
+ --cache-file=FILE cache test results in FILE [disabled]
+ -C, --config-cache alias for '--cache-file=config.cache'
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or '..']
+
+Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [/usr/local]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [PREFIX]
+
+By default, 'make install' will install all the files in
+'/usr/local/bin', '/usr/local/lib' etc. You can specify
+an installation prefix other than '/usr/local' using '--prefix',
+for instance '--prefix=$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
+ --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
+ --infodir=DIR info documentation [DATAROOTDIR/info]
+ --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
+ --mandir=DIR man documentation [DATAROOTDIR/man]
+ --docdir=DIR documentation root [DATAROOTDIR/doc/coreutils]
+ --htmldir=DIR html documentation [DOCDIR]
+ --dvidir=DIR dvi documentation [DOCDIR]
+ --pdfdir=DIR pdf documentation [DOCDIR]
+ --psdir=DIR ps documentation [DOCDIR]
+
+Program names:
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM run sed PROGRAM on installed program names
+
+System types:
+ --build=BUILD configure for building on BUILD [guessed]
+ --host=HOST cross-compile to build programs to run on HOST [BUILD]
+
+Optional Features:
+ --disable-option-checking ignore unrecognized --enable/--with options
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --enable-silent-rules less verbose build output (undo: 'make V=1')
+ --disable-silent-rules verbose build output (undo: 'make V=0')
+ --disable-dependency-tracking speeds up one-time build
+ --enable-dependency-tracking do not reject slow dependency extractors
+ --disable-largefile omit support for large files
+ --enable-threads={posix|solaris|pth|win32}
+ specify multithreading API
+ --disable-threads build without multithread safety
+ --disable-acl do not support ACLs
+ --disable-assert turn off assertions
+ --disable-rpath do not hardcode runtime library paths
+ --disable-xattr do not support extended attributes
+ --disable-libcap disable libcap support
+ --enable-gcc-warnings turn on lots of GCC warnings (for developers)
+ --enable-install-program=PROG_LIST
+ install the programs in PROG_LIST (comma-separated,
+ default: none)
+ --enable-no-install-program=PROG_LIST
+ do NOT install the programs in PROG_LIST
+ (comma-separated, default: arch,hostname,su)
+ --disable-nls do not use Native Language Support
+
+Optional Packages:
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --with-gnu-ld assume the C compiler uses GNU ld default=no
+ --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib
+ --without-libiconv-prefix don't search for libiconv in includedir and libdir
+ --with-libpth-prefix[=DIR] search for libpth in DIR/include and DIR/lib
+ --without-libpth-prefix don't search for libpth in includedir and libdir
+ --without-included-regex
+ don't compile regex; this is the default on systems
+ with recent-enough versions of the GNU C Library
+ (use with caution on other systems).
+ --without-selinux do not use SELinux, even on systems with SELinux
+ --with-packager String identifying the packager of this software
+ --with-packager-version Packager-specific version information
+ --with-packager-bug-reports
+ Packager info for bug reports (URL/e-mail/...)
+ --with-tty-group[=NAME]
+ group used by system for TTYs, "tty" when not
+ specified (default: do not rely on any group used
+ for TTYs)
+ --without-gmp do not use the GNU MP library for arbitrary
+ precision calculation (default: use it if available)
+ --with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib
+ --without-libintl-prefix don't search for libintl in includedir and libdir
+
+Some influential environment variables:
+ CC C compiler command
+ CFLAGS C compiler flags
+ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>
+ LIBS libraries to pass to the linker, e.g. -l<library>
+ CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+ you have headers in a nonstandard directory <include dir>
+ CPP C preprocessor
+ YACC The "Yet Another C Compiler" implementation to use. Defaults to
+ 'bison -y'. Values other than 'bison -y' will most likely break
+ on most systems.
+ YFLAGS YFLAGS contains the list arguments that will be passed by
+ default to Bison. This script will default YFLAGS to the empty
+ string to avoid a default value of '-d' given by some make
+ applications.
+ DEFAULT_POSIX2_VERSION
+ POSIX version to default to; see 'config.hin'.
+
+Use these variables to override the choices made by 'configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <bug-automake@gnu.org>.
+General help using GNU software: <https://www.gnu.org/gethelp/>.
+END
+
+compare_extracted_help ()
+{
+ cat > exp || exit 99
+ extract_configure_help "$1" help > got || exit 1
+ cat exp
+ cat got
+ diff exp got || exit 1
+}
+
+compare_extracted_help --disable-libcap <<'END'
+ --disable-libcap disable libcap support
+END
+
+compare_extracted_help --disable-nls <<'END'
+ --disable-nls do not use Native Language Support
+END
+
+compare_extracted_help --disable-option-checking <<'END'
+ --disable-option-checking ignore unrecognized --enable/--with options
+END
+
+compare_extracted_help --build= <<'END'
+ --build=BUILD configure for building on BUILD [guessed]
+END
+
+compare_extracted_help --host= <<'END'
+ --host=HOST cross-compile to build programs to run on HOST [BUILD]
+END
+
+compare_extracted_help '--with-libintl-prefix[=]' <<'END'
+ --with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib
+END
+
+compare_extracted_help --without-included-regex <<'END'
+ --without-included-regex
+ don't compile regex; this is the default on systems
+ with recent-enough versions of the GNU C Library
+ (use with caution on other systems).
+END
+
+compare_extracted_help --enable-threads= <<'END'
+ --enable-threads={posix|solaris|pth|win32}
+ specify multithreading API
+END
+
+compare_extracted_help '--with-tty-group[=]' <<'END'
+ --with-tty-group[=NAME]
+ group used by system for TTYs, "tty" when not
+ specified (default: do not rely on any group used
+ for TTYs)
+END
+
+compare_extracted_help '--prefix=' <<'END'
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [/usr/local]
+END
+
+compare_extracted_help '--exec-prefix=' <<'END'
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [PREFIX]
+END
+
+compare_extracted_help CC <<'END'
+ CC C compiler command
+END
+
+compare_extracted_help CPP <<'END'
+ CPP C preprocessor
+END
+
+compare_extracted_help CPPFLAGS <<'END'
+ CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+ you have headers in a nonstandard directory <include dir>
+END
+
+compare_extracted_help YACC <<'END'
+ YACC The "Yet Another C Compiler" implementation to use. Defaults to
+ 'bison -y'. Values other than 'bison -y' will most likely break
+ on most systems.
+END
+
+compare_extracted_help DEFAULT_POSIX2_VERSION <<'END'
+ DEFAULT_POSIX2_VERSION
+ POSIX version to default to; see 'config.hin'.
+END
+
+for o in \
+ '--nonesuch' \
+ '--nonesuch=' \
+ '--nonesuch[=]' \
+ '--disable-nls=' \
+ '--disable-nls[=]' \
+ '--without-included-regex=' \
+ '--without-included-regex[=]' \
+ '--prefix' \
+ '--prefix[=]' \
+ '--build' \
+ '--build[=]' \
+ '--with-tty-group' \
+ '--with-tty-group=' \
+ 'NO_SUCH_VAR' \
+ 'NOSUCHVAR' \
+; do
+ compare_extracted_help "$o" </dev/null
+done
+
+:
diff --git a/t/self-check-dir.tap b/t/self-check-dir.tap
new file mode 100644
index 000000000..a74921958
--- /dev/null
+++ b/t/self-check-dir.tap
@@ -0,0 +1,71 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Sanity check for the automake testsuite.
+# Check that tests using 'test-init.sh' create a proper temporary
+# directory, and run in it. Also check that we can prevent the
+# pre-population and the creation of such directory if we want.
+
+am_create_testdir=no
+. test-init.sh
+
+plan_ 5
+
+unset keep_testdirs
+
+# This needs to be consistent with what $AM_TEST_RUNNER_SHELL
+# deems to be the current working directory.
+cwd=$($AM_TEST_RUNNER_SHELL -c 'pwd') \
+ || fatal_ "can't get current working directory"
+echo "$cwd"
+
+do_check ()
+{
+ rm -rf _self.dir || framework_failure_ "cleaning up _self.dir"
+ command_ok_ "$1 [$2]" $AM_TEST_RUNNER_SHELL -c "
+ $2
+ . test-init.sh
+ # Don't fail if 'ls -l' fails; avoids possible racy spurious failures.
+ pwd; ls -l || : # For debugging.
+ $3
+ " t/_self.sh
+}
+
+do_check 'testdir has the expected path' \
+ 'unset am_create_testdir' \
+ 'case $(pwd) in '"$cwd"'/t/_self.dir);; *) exit 1;; esac'
+
+do_check 'fully pre-populated testdir' \
+ 'unset am_create_testdir' \
+ 'test -f install-sh || exit 1
+ test -f configure.ac || exit 1
+ case $(pwd) in '"$cwd"'/t/_self.dir) : ;; *) exit 1;; esac'
+
+do_check 'testdir has the expected path' \
+ 'am_create_testdir=empty' \
+ 'case $(pwd) in '"$cwd"'/t/_self.dir) : ;; *) exit 1;; esac'
+
+do_check 'do not pre-populate testdir' \
+ 'am_create_testdir=empty' \
+ 'ls -a | grep -v "^\\.\\{1,2\\}$" | grep . && exit 1; :'
+
+do_check 'do not create nor chdir in testdir' \
+ 'am_create_testdir=no' \
+ 'test ! -e t/_self.dir || exit 1
+ grep "self-check-dir\.tap" Makefile || exit 1
+ case $(pwd) in '"$cwd"') : ;; *) exit 1;; esac'
+
+:
diff --git a/t/self-check-exit.tap b/t/self-check-exit.tap
new file mode 100644
index 000000000..ca2ee7801
--- /dev/null
+++ b/t/self-check-exit.tap
@@ -0,0 +1,82 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Sanity check for the automake testsuite.
+# Check that, in case of failing commands, the correct exit status is
+# passed to the exit trap installed by the 'test-init.sh' script.
+# Also check that the 'errexit' shell flag is active.
+
+am_create_testdir=no
+. test-init.sh
+
+plan_ 32
+
+# This test becomes more cumbersome if we keep the 'errexit' shell flag
+# set. And removing it is no big deal, as this test is a TAP-based one,
+# so that false positives remain very unlikely.
+set +e
+
+# It's especially important that the 'unset' is done before sourcing
+# test-init.sh, i.e., when 'set -e' is not active yet, for the benefit
+# of shells (like Bash 2.05 and Solaris 10 /bin/ksh) that returns a
+# non-zero status when unsetting an already-unset variable.
+# Add an extra newline at the end so that the aliases defined by
+# test-init.sh can take effect. Yes, this is truly required.
+init="stderr_fileno_=2; unset am_explicit_skips;. test-init.sh${nl}"
+
+# Required so that the code in test-init.sh doesn't go crazy trying to creating a
+# temporary directory in the absolute dir of $AM_TEST_RUNNER_SHELL.
+dummy_test_script=t/$me.sh
+
+for st in 1 2 3 4 5 77 99 126 127 128 129 130 255; do
+ for exit_cmd in "exit $st" "sh -c 'exit $st'"; do
+ $AM_TEST_RUNNER_SHELL -c "$init $exit_cmd; :" "$dummy_test_script"
+ command_ok_ "$exit_cmd" test $? -eq $st
+ done
+done
+
+for sig in 1 2 13 15; do
+ if is_blocked_signal $sig; then
+ skip_ -r "signal $sig seems blocked"
+ continue
+ fi
+ if test $sig -eq 2; then
+ # Some Korn shells might otherwise get a spurious SIGINT when one is
+ # sent to the child $AM_TEST_RUNNER_SHELL. For more details, see:
+ # <https://lists.gnu.org/archive/html/bug-autoconf/2011-09/msg00004.html>
+ trap : 2
+ fi
+ $AM_TEST_RUNNER_SHELL -c "$init kill -$sig \$\$; :" "$dummy_test_script"
+ rc=$?
+ if test $sig -eq 2; then
+ # Reset default SIGINT handler as portably as possible.
+ trap 2 || trap - 2
+ fi
+ command_ok_ "kill -$sig" test $rc -eq 99
+ unset rc
+done
+
+: Non-existent program.
+$AM_TEST_RUNNER_SHELL -c "$init non-existent-prog; :" "$dummy_test_script"
+command_ok_ "command not found" -- test $? -gt 0
+
+: Non-executable command.
+test -f Makefile && test ! -x Makefile || \
+ framowork_failure_ "no proper Makefile in the current directory"
+$AM_TEST_RUNNER_SHELL -c "$init ./Makefile; :" "$dummy_test_script"
+command_ok_ "permission denied" test $? -gt 0
+
+:
diff --git a/t/self-check-explicit-skips.sh b/t/self-check-explicit-skips.sh
new file mode 100644
index 000000000..37d941dde
--- /dev/null
+++ b/t/self-check-explicit-skips.sh
@@ -0,0 +1,54 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Sanity check for the automake testsuite.
+# Check that our testsuite framework can be instructed not to consider
+# an early exit due to some command exiting unexpectedly with status 77.
+
+am_create_testdir=no
+. test-init.sh
+
+set +e
+
+unset am_explicit_skips stderr_fileno_
+
+# FIXME: this can be simplified when we improve our runtime checks on the
+# testsuite shell to ensure it supports "VAR=val shell_func" correctly.
+run_dummy_test ()
+{
+ env $2 $AM_TEST_RUNNER_SHELL -c "
+ am_create_testdir=no
+ . test-init.sh
+ $1
+ " dummy.sh
+}
+
+run_dummy_test 'exit 77'
+test $? -eq 77 || exit 1
+
+run_dummy_test 'sh -c "exit 77"' am_explicit_skips=no
+test $? -eq 77 || exit 1
+
+run_dummy_test '$PERL -e "exit 77"; true' am_explicit_skips=yes
+test $? -eq 78 || exit 1
+
+run_dummy_test 'sh -c "exit 77"; exit 0' am_explicit_skips=y
+test $? -eq 78 || exit 1
+
+run_dummy_test 'skip_ "foo"; :' am_explicit_skips=y
+test $? -eq 77 || exit 1
+
+:
diff --git a/t/self-check-is-blocked-signal.tap b/t/self-check-is-blocked-signal.tap
new file mode 100644
index 000000000..34160c976
--- /dev/null
+++ b/t/self-check-is-blocked-signal.tap
@@ -0,0 +1,29 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Sanity check for the automake testsuite: the 'signal_is_blocked'
+# shell function.
+
+am_create_testdir=no
+. test-init.sh
+
+plan_ 2
+
+command_ok_ "unblockable signal 9" not is_blocked_signal 9
+trap "" 13
+command_ok_ "blocked signal 13" is_blocked_signal 13
+
+:
diff --git a/t/self-check-is_newest.tap b/t/self-check-is_newest.tap
new file mode 100644
index 000000000..4b50dc329
--- /dev/null
+++ b/t/self-check-is_newest.tap
@@ -0,0 +1,90 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Sanity check for the automake testsuite: the 'is_newest' subroutine.
+
+. test-init.sh
+
+plan_ 21
+
+# I'm a lazy typist.
+Y () { command_ok_ "is_newest $*" is_newest "$@"; }
+N () { command_ok_ "not is_newest $*" not is_newest "$@"; }
+
+# A simple "touch -r" might not work, since on some file systems, and/or
+# with some 'touch' versions, it might truncate the timestamp (or even
+# rounded it upwards maybe). So the first (apparently redundant) 'touch'
+# invocation below ensures that the timestamp gets "normalized" in a way
+# that allows it to be correctly copied by the second 'touch' invocation.
+copy_timestamp ()
+{
+ touch -r "$1" "$1" && touch -r "$1" "$2"
+}
+
+: > a
+$sleep
+: > b
+: > c
+
+stat a b c || : # For debugging.
+
+Y c a
+Y b a
+N a b
+Y c b
+Y c c
+Y c a b c
+
+copy_timestamp c d
+
+stat c d || : # For debugging.
+
+Y c d
+
+# Should work on directories too, both empty and not-empty. An older
+# implementation of 'is_newest' failed if the first argument was a
+# directory containing files newer than itself (see automake bug#9147).
+mkdir u x
+touch x/foo
+$sleep
+touch x/foo
+$sleep
+mkdir v y
+touch y/foo
+$sleep
+touch y/foo
+
+stat u v x y x/foo y/foo || : # For debugging.
+
+for older in u x; do
+ for newer in v y; do
+ Y $newer $older
+ N $older $newer
+ done
+done
+
+Y x/foo x
+N x x/foo
+
+copy_timestamp x u
+Y x u
+Y u x
+
+# A couple of mild "stress" tests.
+Y y x u v
+Y y u x/foo a b c
+
+:
diff --git a/t/self-check-me.tap b/t/self-check-me.tap
new file mode 100644
index 000000000..c09d83b21
--- /dev/null
+++ b/t/self-check-me.tap
@@ -0,0 +1,67 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Sanity check for the automake testsuite.
+# Make sure that $me gets automatically defined by 'test-init.sh'.
+
+am_create_testdir=no
+. test-init.sh
+
+plan_ 12
+
+# This test becomes cumbersome if we keep the 'errexit' shell flag set.
+# And removing it is no big deal, as this test is a TAP-based one, so
+# that false positives remain very unlikely.
+set +e
+
+do_check ()
+{
+ $AM_TEST_RUNNER_SHELL -c '
+ am_create_testdir=no # Do not pollute the top-level directory.
+ . test-init.sh
+ echo me=$me
+ ' "$1" | grep "^me=$2$"
+ command_ok_ "me=$1" test $? -eq 0
+}
+
+for e in sh tap; do
+ do_check foo-bar-.$e 'foo-bar-'
+ do_check _foo__bar.$e '_foo__bar'
+ do_check 012.$e '012'
+ do_check a.b.c.$e 'a\.b\.c'
+done
+
+do_check foo.bar 'foo\.bar'
+do_check abc. 'abc\.'
+
+# A definition of $me in the environment should be ignored.
+
+s=$(me=bad $AM_TEST_RUNNER_SHELL -c '
+ # Do not pollute the top-level directory.
+ am_create_testdir=no
+ . test-init.sh
+ echo me=$me
+' foo.sh)
+command_ok_ "override of \$me before test-init.sh causes no error" \
+ test $? -eq 0
+
+r='ok'
+printf '%s\n' "$s" | grep '^me=foo$' || r='not ok'
+printf '%s\n' "$s" | grep 'me=bad' && r='not ok'
+result_ "$r" "\$me from the environment is ignored"
+unset r
+
+:
diff --git a/t/self-check-report.sh b/t/self-check-report.sh
new file mode 100644
index 000000000..f110efe51
--- /dev/null
+++ b/t/self-check-report.sh
@@ -0,0 +1,54 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Sanity check for the automake testsuite.
+# Test subroutines to report warnings, and to signal failures, skips
+# and hard errors.
+
+unset stderr_fileno_
+
+am_create_testdir=empty
+. test-init.sh
+
+set +e
+
+exec 5>&1
+
+(warn_ foobar) 2>&1 1>&5 | grep '^foobar$' || exit 1
+(fail_ foo); test $? -eq 1 || exit 1
+(fail_ foo) 2>&1 1>&5 | grep "^$me: failed test: foo" || exit 1
+(skip_ foo); test $? -eq 77 || exit 1
+(skip_ foo) 2>&1 1>&5 | grep "^$me: skipped test: foo" || exit 1
+(fatal_ foo); test $? -eq 99 || exit 1
+(fatal_ foo) 2>&1 1>&5 | grep "^$me: hard error: foo" || exit 1
+(framework_failure_ foo); test $? -eq 99 || exit 1
+(framework_failure_ foo) 2>&1 1>&5 \
+ | grep "^$me: set-up failure: foo" || exit 1
+
+stderr_fileno_=6
+
+(warn_ foobar) 6>&1 1>&5 | grep '^foobar$' || exit 1
+(fail_ foo); test $? -eq 1 || exit 1
+(fail_ foo) 6>&1 1>&5 | grep "^$me: failed test: foo" || exit 1
+(skip_ foo); test $? -eq 77 || exit 1
+(skip_ foo) 6>&1 1>&5 | grep "^$me: skipped test: foo" || exit 1
+(fatal_ foo); test $? -eq 99 || exit 1
+(fatal_ foo) 6>&1 1>&5 | grep "^$me: hard error: foo" || exit 1
+(framework_failure_ foo); test $? -eq 99 || exit 1
+(framework_failure_ foo) 6>&1 1>&5 \
+ | grep "^$me: set-up failure: foo" || exit 1
+
+:
diff --git a/t/self-check-seq.tap b/t/self-check-seq.tap
new file mode 100644
index 000000000..078d49129
--- /dev/null
+++ b/t/self-check-seq.tap
@@ -0,0 +1,75 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Sanity check for the automake testsuite.
+# Check the 'seq_' subroutine.
+
+. test-init.sh
+
+plan_ 14
+
+unset stderr_fileno_
+
+check_work ()
+{
+ desc=$1 args=$2 exp=$3
+ st=0; got=$(seq_ $args) || st=$?
+ command_ok_ "$desc [exit status = 0]" test $st -eq 0
+ command_ok_ "$desc [output]" test x"$exp" = x"$got"
+}
+
+check_work 'one-argument form' '5' "\
+1
+2
+3
+4
+5"
+
+check_work 'two-arguments form' '7 11' "\
+7
+8
+9
+10
+11"
+
+check_work 'three-arguments form (1)' '120 5 135' "\
+120
+125
+130
+135"
+
+check_work 'three-arguments form (1)' '13 4 23' "\
+13
+17
+21"
+
+check_err ()
+{
+ desc=$1 args=$2 err=$3
+ (seq_ $args) >output || st=$?
+ # Protect content emitted on stdout/stderr, to avoid sending to the
+ # TAP driver possible "Bail out!" directives generated by 'seq_'.
+ # Use 'grep -c' below for the same reason.
+ sed 's/^/: /' output
+ command_ok_ "$desc [exit status = 99]" test $st -eq 99
+ command_ok_ "$desc [error message]" grep -c "seq_: $err" output
+}
+
+check_err 'no argument is an error' '' 'missing argument'
+check_err 'four arguments is an error' '1 1 2 1' 'too many arguments'
+check_err 'six arguments is an error' '1 1 1 1 1 1' 'too many arguments'
+
+:
diff --git a/t/self-check-shell-no-trail-bslash.sh b/t/self-check-shell-no-trail-bslash.sh
new file mode 100644
index 000000000..a0ef5b6f3
--- /dev/null
+++ b/t/self-check-shell-no-trail-bslash.sh
@@ -0,0 +1,81 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that our fake "shell" used to guard against use of trailing
+# backslashes in recipes actually complains when those are used.
+
+# Our hack doesn't work with some make implementations (see comments
+# in 't/ax/shell-no-trail-bslash.in' for more details).
+required=GNUmake
+am_create_testdir=empty
+. test-init.sh
+
+cat >> Makefile <<'END'
+am__backslash = \\ # foo
+.PHONY: good bad
+good:
+ @printf '%s\n' OK
+.PHONY: bad
+bad:
+ @echo $(am__backslash)
+END
+
+SHELL=$am_testaux_builddir/shell-no-trail-bslash
+
+$SHELL -c 'exit 0'
+test "$($SHELL -c 'echo is o\k')" = "is ok"
+
+echo 'echo is ok\"' > ok.sh
+$SHELL ./ok.sh
+test "$($SHELL ./ok.sh)" = "is ok\""
+
+tab=' '
+nl='
+'
+for sfx in \
+ '\' \
+ '\\' \
+ '\\\\\' \
+ '\ ' \
+ "\\$tab" \
+ "\\ $tab$tab " \
+ "\\$nl" \
+ "\\ $nl " \
+ "\\$nl$nl$nl" \
+; do
+ for pfx in "" "echo bad" ": a${nl}# multine${nl}: text"; do
+ cmd=${pfx}${sfx}
+ printf '%s' "$cmd" > bad.sh
+ for args in '-c "$cmd"' './bad.sh'; do
+ eval "\$SHELL $args 2>stderr && { cat stderr >&2; exit 1; }; :"
+ cat stderr >&2
+ $FGREP "recipe/script ends with backslash character" stderr
+ cmd="$cmd" $PERL -w -e '
+ undef $/;
+ $_ = <>;
+ index($_, $ENV{cmd}) >= 0 or exit 1;
+ ' <stderr
+ $FGREP "$cmd" stderr
+ done
+ done
+done
+
+$MAKE good
+
+run_make -E -e FAIL bad SHELL="$SHELL"
+$FGREP "recipe/script ends with backslash character" stderr
+
+:
diff --git a/t/self-check-unindent.tap b/t/self-check-unindent.tap
new file mode 100644
index 000000000..109e2d49d
--- /dev/null
+++ b/t/self-check-unindent.tap
@@ -0,0 +1,255 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Sanity check for the automake testsuite.
+# Check the 'unindent' subroutine.
+
+. test-init.sh
+
+plan_ 22
+
+#------------------------------------------------------------------
+
+will_test () { tst=$*; }
+
+do_check ()
+{
+ command_ok_ "$tst [simple, exit status]" \
+ eval 'unindent input > got'
+ command_ok_ "$tst [simple, output]" \
+ diff exp got
+ command_ok_ "$tst [parallel, exit status]" \
+ eval 'unindent input | unindent > got'
+ command_ok_ "$tst [parallel, output]" \
+ diff exp got
+}
+
+#------------------------------------------------------------------
+
+will_test 'leading spaces'
+
+cat > input <<END
+ 1
+ 2
+3
+ 4
+${tab}5
+${tab} 6
+ 6${sp}
+7${sp}
+ 8${sp}${sp}
+9${sp}${sp}
+ 10${tab}
+11${tab}
+ 12${sp}${tab}
+13${sp}${tab}
+ 14 this${tab}with${tab}multiple fields${sp}
+15 and ${tab}${tab}this too${tab}
+ 16 and also this
+${sp}${sp}
+${sp}
+${tab}
+
+last line
+END
+
+cat > exp <<END
+1
+ 2
+3
+ 4
+${tab}5
+${tab} 6
+6${sp}
+7${sp}
+8${sp}${sp}
+9${sp}${sp}
+10${tab}
+11${tab}
+12${sp}${tab}
+13${sp}${tab}
+14 this${tab}with${tab}multiple fields${sp}
+15 and ${tab}${tab}this too${tab}
+ 16 and also this
+
+${sp}
+${tab}
+
+last line
+END
+
+do_check
+
+#------------------------------------------------------------------
+
+will_test 'leading tab'
+
+cat > input <<END
+${tab}1
+${tab} 2
+3
+ 4
+ 5
+ 6
+ 7
+ ${tab}8
+${tab}${tab}9
+${tab}10${tab}
+${tab}11${sp}
+12${tab}
+13${sp}
+${tab}14 this with${tab}multiple fields${sp}
+15 and ${tab}${tab}this too${tab}
+ 16 and also this
+${tab}
+${sp}
+${sp}${tab}
+
+last line
+END
+
+cat > exp <<END
+1
+ 2
+3
+ 4
+ 5
+ 6
+ 7
+ ${tab}8
+${tab}9
+10${tab}
+11${sp}
+12${tab}
+13${sp}
+14 this with${tab}multiple fields${sp}
+15 and ${tab}${tab}this too${tab}
+ 16 and also this
+
+${sp}
+${sp}${tab}
+
+last line
+END
+
+do_check "leading tab"
+
+#------------------------------------------------------------------
+
+will_test 'no leading whitespace'
+
+cat > input <<END
+1
+ 2
+ 3
+ 4
+${tab}5
+${tab} 6
+ ${tab}7
+${tab}${tab}8
+9${sp}
+ 10${tab}
+${tab}10${sp}${sp}
+14 this with${tab}multiple fields${sp}
+ 15 and this too${tab}
+${tab}16 and also this
+${tab}
+${sp}
+
+last line
+END
+
+cp input exp
+
+do_check
+
+#------------------------------------------------------------------
+
+will_test 'leading empty lines ignored (1)'
+
+cat > input <<END
+
+
+ foo
+ bar
+ quux
+END
+
+cat > exp <<END
+
+
+foo
+bar
+ quux
+END
+
+do_check
+
+#------------------------------------------------------------------
+
+will_test 'leading empty lines ignored (2)'
+
+cat > input <<END
+
+
+foo
+bar
+ quux
+END
+
+cat > exp <<END
+
+
+foo
+bar
+ quux
+END
+
+do_check
+
+#------------------------------------------------------------------
+
+will_test 'more elaborated parallel use'
+
+cat > input <<END
+ x
+ ${tab}y
+ z
+ ${tab}a
+ ${tab} b
+${tab}c
+ ${tab}d
+ ${tab}e
+ ${tab}${tab}f
+END
+
+cat > exp <<END
+y
+z
+a
+ b
+c
+ ${tab}d
+ ${tab}e
+${tab}f
+END
+
+command_ok_ "$tst [exit status]" \
+ eval 'unindent input | sed 1d | unindent > got'
+
+command_ok_ "$tst [output]" diff exp got
+
+:
diff --git a/t/serial-tests.sh b/t/serial-tests.sh
new file mode 100644
index 000000000..8a86638df
--- /dev/null
+++ b/t/serial-tests.sh
@@ -0,0 +1,84 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Option 'serial-tests'.
+
+am_create_testdir=empty
+. test-init.sh
+
+hasnt_parallel_tests ()
+{
+ $EGREP 'TEST_SUITE_LOG|TEST_LOGS|\.log.*:' $1 && exit 1
+ grep 'recheck.*:' $1 && exit 1
+ grep '^check-TESTS: \$(TESTS)$' $1
+}
+
+has_parallel_tests ()
+{
+ $EGREP '(^| )check-TESTS.*:' $1
+ $EGREP '(^| )recheck.*:' $1
+ grep '^\$(TEST_SUITE_LOG): \$(TEST_LOGS)$' $1
+ grep '^\.test\.log:$' $1
+}
+
+mkdir one two
+
+cat > one/configure.ac <<END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE([serial-tests])
+AC_CONFIG_FILES([Makefile])
+END
+
+echo 'TESTS = foo.test bar.test' > one/Makefile.am
+
+cat > two/configure.ac <<END
+AC_INIT([$me], [2.0])
+AC_CONFIG_AUX_DIR([config])
+AM_INIT_AUTOMAKE([parallel-tests])
+AC_CONFIG_FILES([aMakefile bMakefile])
+END
+
+cp one/Makefile.am two/aMakefile.am
+cat - one/Makefile.am > two/bMakefile.am <<END
+AUTOMAKE_OPTIONS = serial-tests
+END
+
+cd one
+touch missing install-sh
+$ACLOCAL
+$AUTOMAKE
+grep TEST Makefile.in # For debugging.
+hasnt_parallel_tests Makefile.in
+test ! -e test-driver
+cd ..
+
+cd two
+mkdir config
+$ACLOCAL
+$AUTOMAKE --add-missing
+grep TEST [ab]Makefile.in # For debugging.
+has_parallel_tests aMakefile.in
+hasnt_parallel_tests bMakefile.in
+mv aMakefile.in aMakefile.sav
+mv bMakefile.in bMakefile.sav
+test ! -e test-driver
+test -f config/test-driver
+$AUTOMAKE
+diff aMakefile.sav aMakefile.in
+diff bMakefile.sav bMakefile.in
+cd ..
+
+:
diff --git a/t/silent-c.sh b/t/silent-c.sh
new file mode 100644
index 000000000..00e691dd8
--- /dev/null
+++ b/t/silent-c.sh
@@ -0,0 +1,88 @@
+#!/bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check silent-rules mode for C, without libtool, both with and without
+# automatic dependency tracking.
+
+required=cc
+. test-init.sh
+
+mkdir sub
+
+cat >>configure.ac <<'EOF'
+AC_CONFIG_FILES([sub/Makefile])
+AC_PROG_CC
+AC_OUTPUT
+EOF
+
+cat > Makefile.am <<'EOF'
+# Need generic and non-generic rules.
+bin_PROGRAMS = foo bar
+bar_CFLAGS = $(AM_CFLAGS)
+SUBDIRS = sub
+EOF
+
+cat > sub/Makefile.am <<'EOF'
+AUTOMAKE_OPTIONS = subdir-objects
+# Need generic and non-generic rules.
+bin_PROGRAMS = baz bla
+bla_CFLAGS = $(AM_CFLAGS)
+EOF
+
+cat > foo.c <<'EOF'
+int main ()
+{
+ return 0;
+}
+EOF
+cp foo.c bar.c
+cp foo.c sub/baz.c
+cp foo.c sub/bla.c
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+$AUTOCONF
+
+for config_args in \
+ '--enable-dependency-tracking' \
+ '--disable-dependency-tracking' \
+; do
+
+ ./configure --enable-silent-rules $config_args
+
+ run_make -O
+ $EGREP ' (-c|-o)' stdout && exit 1
+ grep 'mv ' stdout && exit 1
+ grep 'CC .*foo\.' stdout
+ grep 'CC .*bar\.' stdout
+ grep 'CC .*baz\.' stdout
+ grep 'CC .*bla\.' stdout
+ grep 'CCLD .*foo' stdout
+ grep 'CCLD .*bar' stdout
+ grep 'CCLD .*baz' stdout
+ grep 'CCLD .*bla' stdout
+
+ $MAKE clean
+ run_make -O V=1
+ grep ' -c' stdout
+ grep ' -o foo' stdout
+ $EGREP '(CC|LD) ' stdout && exit 1
+
+ $MAKE distclean
+
+done
+
+:
diff --git a/t/silent-configsite.sh b/t/silent-configsite.sh
new file mode 100644
index 000000000..4a514ae4b
--- /dev/null
+++ b/t/silent-configsite.sh
@@ -0,0 +1,86 @@
+#!/bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that the user can control default mode of silent-rules
+# from config.site, and that this default can be overridden from
+# either the ./configure or make command line.
+
+. test-init.sh
+
+cat >> configure.ac <<'EOF'
+# This line will be edited later to force silent-rules default.
+AC_OUTPUT
+EOF
+
+cat > Makefile.am <<'EOF'
+.PHONY: test-silent test-nosilent
+test-silent:
+ test x'$(AM_DEFAULT_VERBOSITY)' = x'0'
+test-nosilent:
+ test x'$(AM_DEFAULT_VERBOSITY)' = x'1'
+EOF
+
+unset enable_silent_rules
+
+: 'No explicit default in configure.ac, enable by default in config.site'
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+echo "enable_silent_rules=\${enable_silent_rules-yes}" > config.site
+CONFIG_SITE=./config.site ./configure
+$MAKE test-silent
+$MAKE distclean
+# Command line should win over default values in config.site.
+CONFIG_SITE=./config.site ./configure --disable-silent-rules
+$MAKE test-nosilent
+$MAKE distclean
+
+: 'Disable by default in configure.ac, enable by default in config.site'
+
+sed 's/.*silent-rules default.*/AM_SILENT_RULES([no])/' configure.ac > t
+diff t configure.ac && fatal_ "editing configure.ac"
+mv -f t configure.ac
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+echo "enable_silent_rules=\${enable_silent_rules-yes}" > config.site
+CONFIG_SITE=./config.site ./configure
+$MAKE test-silent
+# Command line should win over default values in config.site.
+$MAKE distclean
+CONFIG_SITE=./config.site ./configure --disable-silent-rules
+$MAKE test-nosilent
+$MAKE distclean
+
+: 'Enable by default in configure.ac, disable by default in config.site'
+
+sed 's/.*AM_SILENT_RULES.*/AM_SILENT_RULES([yes])/' configure.ac > t
+diff t configure.ac && fatal_ "editing configure.ac"
+mv -f t configure.ac
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+echo "enable_silent_rules=\${enable_silent_rules-no}" > config.site
+CONFIG_SITE=./config.site ./configure
+$MAKE test-nosilent
+$MAKE distclean
+# Command line should win over default values in config.site.
+CONFIG_SITE=./config.site ./configure --enable-silent-rules
+$MAKE test-silent
+$MAKE distclean
+
+:
diff --git a/t/silent-custom.sh b/t/silent-custom.sh
new file mode 100644
index 000000000..6f214183b
--- /dev/null
+++ b/t/silent-custom.sh
@@ -0,0 +1,110 @@
+#!/bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check user extensibility of silent-rules mode.
+
+. test-init.sh
+
+cat >>configure.ac <<'EOF'
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+EOF
+
+# We delegate all the work to the subdir makefile. This is done
+# to ensure any command-line setting of $(V) gets correctly passed
+# down to recursive make invocations.
+echo SUBDIRS = sub > Makefile.am
+
+mkdir sub
+cat > sub/Makefile.am <<'EOF'
+AUTOMAKE_OPTIONS = -Wno-portability-recursive
+my_verbose = $(my_verbose_$(V))
+my_verbose_ = $(my_verbose_$(AM_DEFAULT_VERBOSITY))
+my_verbose_0 = @echo " XGEN $@";
+
+all-local: foo gen-headers
+
+list = 0 1 2
+.PHONY: gen-headers
+gen-headers:
+ @headers=`for i in $(list); do echo sub/$$i.h; done`; \
+ if $(AM_V_P); then set -x; else \
+ echo " GEN [headers]"; \
+ fi; \
+ rm -f $$headers || exit 1; \
+## Only fake header generation.
+ : generate-header --flags $$headers
+
+foo: foo.in
+ $(my_verbose)cp $(srcdir)/foo.in $@
+EXTRA_DIST = foo.in
+CLEANFILES = foo
+EOF
+
+: > sub/foo.in
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+$AUTOCONF
+
+do_check ()
+{
+ case ${1-} in
+ --silent) silent=:;;
+ --verbose) silent=false;;
+ *) fatal_ "do_check(): incorrect usage";;
+ esac
+ shift
+ $MAKE clean
+ run_make -M -- ${1+"$@"}
+ if $silent; then
+ $FGREP 'cp ' output && exit 1
+ $FGREP 'generate-header' output && exit 1
+ $FGREP 'rm -f' output && exit 1
+ grep '[012]\.h' output && exit 1
+ grep '^ XGEN foo$' output
+ grep '^ GEN \[headers\]$' output
+ else
+ $FGREP 'GEN ' output && exit 1
+ $FGREP 'cp ./foo.in foo' output
+ # Be prepared to handle "creative quoting" in the shell traces.
+ # See automake bug#14760.
+ ok=false
+ for q in '' \' \"; do
+ files="${q}sub/0.h${q} ${q}sub/1.h${q} ${q}sub/2.h${q}"
+ $FGREP "rm -f $files" output || continue
+ $FGREP "generate-header --flags $files" output || continue
+ ok=:
+ break
+ done
+ $ok || exit 1
+ unset ok
+ fi
+}
+
+./configure --enable-silent-rules
+do_check --silent
+do_check --verbose V=1
+
+$MAKE distclean
+
+./configure --disable-silent-rules
+do_check --verbose
+do_check --silent V=0
+
+$MAKE distclean
+
+:
diff --git a/t/silent-cxx.sh b/t/silent-cxx.sh
new file mode 100644
index 000000000..462f2265b
--- /dev/null
+++ b/t/silent-cxx.sh
@@ -0,0 +1,107 @@
+#!/bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check silent-rules mode for C++, both with and without automatic
+# dependency tracking.
+
+required=c++
+. test-init.sh
+
+mkdir sub
+
+cat >>configure.ac <<'EOF'
+AC_PROG_CXX
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+EOF
+
+cat > Makefile.am <<'EOF'
+# Need generic and non-generic rules.
+bin_PROGRAMS = foo1 foo2
+foo1_SOURCES = foo.cpp baz.cxx quux.cc
+foo2_SOURCES = $(foo1_SOURCES)
+foo2_CXXFLAGS = $(AM_CXXFLAGS)
+SUBDIRS = sub
+EOF
+
+cat > sub/Makefile.am <<'EOF'
+AUTOMAKE_OPTIONS = subdir-objects
+# Need generic and non-generic rules.
+bin_PROGRAMS = bar1 bar2
+bar1_SOURCES = bar.cpp
+bar2_SOURCES = $(bar1_SOURCES)
+bar2_CXXFLAGS = $(AM_CXXFLAGS)
+EOF
+
+cat > foo.cpp <<'EOF'
+using namespace std; /* C compilers fail on this. */
+int main (void) { return 0; }
+EOF
+
+# Let's try out other extensions too.
+echo 'class Baz { public: int i; };' > baz.cxx
+echo 'class Quux { public: bool b; };' > quux.cc
+
+cp foo.cpp sub/bar.cpp
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+$AUTOCONF
+
+# Sanity check: make sure the cache variable we force is really used
+# by configure.
+$FGREP am_cv_CXX_dependencies_compiler_type configure
+
+# Force dependency tracking explicitly, so that slow dependency
+# extractors are not rejected. Try also with dependency tracking
+# explicitly disabled.
+for config_args in \
+ --enable-dependency-tracking --disable-dependency-tracking
+do
+
+ ./configure $config_args --enable-silent-rules
+
+ run_make -O
+
+ $EGREP ' (-c|-o)' stdout && exit 1
+ grep 'mv ' stdout && exit 1
+
+ grep 'CXX .*foo\.' stdout
+ grep 'CXX .*baz\.' stdout
+ grep 'CXX .*quux\.' stdout
+ grep 'CXX .*bar\.' stdout
+ grep 'CXXLD .*foo1' stdout
+ grep 'CXXLD .*bar1' stdout
+ grep 'CXXLD .*foo2' stdout
+ grep 'CXXLD .*bar2' stdout
+
+ # Ensure a clean rebuild.
+ $MAKE clean
+
+ run_make -O V=1
+
+ grep ' -c ' stdout
+ grep ' -o ' stdout
+
+ $EGREP '(CXX|LD) ' stdout && exit 1
+
+ # Ensure a clean reconfiguration/rebuild.
+ $MAKE clean
+ $MAKE maintainer-clean
+
+done
+
+:
diff --git a/t/silent-f77.sh b/t/silent-f77.sh
new file mode 100644
index 000000000..37a3cb638
--- /dev/null
+++ b/t/silent-f77.sh
@@ -0,0 +1,89 @@
+#!/bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check silent-rules mode for Fortran 77.
+# Keep this ins sync with the sister test 'silent-f90.sh'.
+
+required=fortran77
+. test-init.sh
+
+mkdir sub
+
+cat >>configure.ac <<'EOF'
+AC_PROG_F77
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+EOF
+
+cat > Makefile.am <<'EOF'
+# Need generic and non-generic rules.
+bin_PROGRAMS = foo1 foo2
+foo1_SOURCES = foo.f
+foo2_SOURCES = $(foo1_SOURCES)
+foo2_FFLAGS = $(AM_FFLAGS)
+SUBDIRS = sub
+EOF
+
+cat > sub/Makefile.am <<'EOF'
+AUTOMAKE_OPTIONS = subdir-objects
+# Need generic and non-generic rules.
+bin_PROGRAMS = bar1 bar2
+bar1_SOURCES = bar.f
+bar2_SOURCES = $(bar1_SOURCES)
+bar2_FFLAGS = $(AM_FFLAGS)
+EOF
+
+cat > foo.f <<'EOF'
+ program foo
+ stop
+ end
+EOF
+cp foo.f sub/bar.f
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+$AUTOCONF
+
+./configure --enable-silent-rules
+run_make -O
+# Avoid spurious failures with SunStudio Fortran compilers.
+sed '/^NOTICE:/d' stdout > t
+mv -f t stdout
+cat stdout
+
+$EGREP ' (-c|-o)' stdout && exit 1
+grep 'mv ' stdout && exit 1
+
+grep 'F77 .*foo\.' stdout
+grep 'F77 .*bar\.' stdout
+grep 'F77LD .*foo1' stdout
+grep 'F77LD .*bar1' stdout
+grep 'F77LD .*foo2' stdout
+grep 'F77LD .*bar2' stdout
+
+$EGREP '(FC|FCLD) ' stdout && exit 1
+
+# Ensure a clean rebuild.
+$MAKE clean
+
+run_make -O V=1
+
+grep ' -c ' stdout
+grep ' -o ' stdout
+
+$EGREP '(F77|FC|LD) ' stdout && exit 1
+
+:
diff --git a/t/silent-f90.sh b/t/silent-f90.sh
new file mode 100644
index 000000000..6ace2a5c5
--- /dev/null
+++ b/t/silent-f90.sh
@@ -0,0 +1,89 @@
+#!/bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check silent-rules mode for Fortran 90.
+# Keep this ins sync with the sister test 'silent-f77.sh'.
+
+required=fortran
+. test-init.sh
+
+mkdir sub
+
+cat >>configure.ac <<'EOF'
+AC_PROG_FC
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+EOF
+
+cat > Makefile.am <<'EOF'
+# Need generic and non-generic rules.
+bin_PROGRAMS = foo1 foo2
+foo1_SOURCES = foo.f90
+foo2_SOURCES = $(foo1_SOURCES)
+foo2_FCFLAGS = $(AM_FCLAGS)
+SUBDIRS = sub
+EOF
+
+cat > sub/Makefile.am <<'EOF'
+AUTOMAKE_OPTIONS = subdir-objects
+# Need generic and non-generic rules.
+bin_PROGRAMS = bar1 bar2
+bar1_SOURCES = bar.f90
+bar2_SOURCES = $(bar1_SOURCES)
+bar2_FCFLAGS = $(AM_FCLAGS)
+EOF
+
+cat > foo.f90 <<'EOF'
+ program foo
+ stop
+ end
+EOF
+cp foo.f90 sub/bar.f90
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+$AUTOCONF
+
+./configure --enable-silent-rules
+run_make -O
+# Avoid spurious failures with SunStudio Fortran compilers.
+sed '/^NOTICE:/d' stdout > t
+mv -f t stdout
+cat stdout
+
+$EGREP ' (-c|-o)' stdout && exit 1
+grep 'mv ' stdout && exit 1
+
+grep 'FC .*foo\.' stdout
+grep 'FC .*bar\.' stdout
+grep 'FCLD .*foo1' stdout
+grep 'FCLD .*bar1' stdout
+grep 'FCLD .*foo2' stdout
+grep 'FCLD .*bar2' stdout
+
+$EGREP '(F77|F77LD) ' stdout && exit 1
+
+# Ensure a clean rebuild.
+$MAKE clean
+
+run_make -O V=1
+
+grep ' -c ' stdout
+grep ' -o ' stdout
+
+$EGREP '(F77|FC|LD) ' stdout && exit 1
+
+:
diff --git a/t/silent-gen.sh b/t/silent-gen.sh
new file mode 100644
index 000000000..ff306db22
--- /dev/null
+++ b/t/silent-gen.sh
@@ -0,0 +1,82 @@
+#!/bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# Silent rules: use of pre-defined variables $(AM_V_GEN) and $(AM_V_at).
+# Incidentally, also check that silent rules are disabled by default.
+
+. test-init.sh
+
+echo AC_OUTPUT >> configure.ac
+
+cat > Makefile.am <<'EOF'
+all-local: foo
+
+## And here's how you should do it in your own code:
+foo: foo.in
+ $(AM_V_GEN)cp $(srcdir)/foo.in $@
+ $(AM_V_at)echo more >> $@
+
+EXTRA_DIST = foo.in
+CLEANFILES = foo
+EOF
+
+: >foo.in
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+$AUTOCONF
+
+# Silent rules are disabled by default, since we haven't called
+# "AM_SILENT_RULES([yes])" explicitly.
+./configure
+run_make -O
+grep 'GEN ' stdout && exit 1
+grep 'cp ' stdout
+grep 'echo ' stdout
+
+$MAKE clean
+run_make -O V=1
+grep 'GEN ' stdout && exit 1
+grep 'cp ' stdout
+grep 'echo ' stdout
+
+$MAKE clean
+run_make -O V=0
+grep 'GEN .*foo' stdout
+grep 'cp ' stdout && exit 1
+grep 'echo ' stdout && exit 1
+
+$MAKE distclean
+
+./configure --enable-silent-rules
+run_make -O
+grep 'GEN .*foo' stdout
+grep 'cp ' stdout && exit 1
+grep 'echo ' stdout && exit 1
+
+$MAKE clean
+run_make -O V=0
+grep 'GEN .*foo' stdout
+grep 'cp ' stdout && exit 1
+grep 'echo ' stdout && exit 1
+
+$MAKE clean
+run_make -O V=1
+grep 'GEN ' stdout && exit 1
+grep 'cp ' stdout
+grep 'echo ' stdout
+
+:
diff --git a/t/silent-lex.sh b/t/silent-lex.sh
new file mode 100644
index 000000000..14ec086be
--- /dev/null
+++ b/t/silent-lex.sh
@@ -0,0 +1,133 @@
+#!/bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check silent-rules mode for Lex.
+
+required='cc lex'
+. test-init.sh
+
+mkdir sub
+
+cat >>configure.ac <<'EOF'
+AC_PROG_LEX
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+EOF
+
+cat > Makefile.am <<'EOF'
+# Need generic and non-generic rules.
+bin_PROGRAMS = foo1 foo2
+foo1_SOURCES = foo.l
+foo2_SOURCES = $(foo1_SOURCES)
+foo2_LFLAGS = -n
+foo2_CFLAGS = $(AM_CFLAGS)
+SUBDIRS = sub
+LDADD = $(LEXLIB)
+EOF
+
+cat > sub/Makefile.am <<'EOF'
+AUTOMAKE_OPTIONS = subdir-objects
+# Need generic and non-generic rules.
+bin_PROGRAMS = bar1 bar2
+bar1_SOURCES = bar.l
+bar2_SOURCES = $(bar1_SOURCES)
+bar2_LFLAGS = -n
+bar2_CFLAGS = $(AM_CFLAGS)
+LDADD = $(LEXLIB)
+EOF
+
+cat > foo.l <<'EOF'
+%{
+#define YY_NO_UNISTD_H 1
+%}
+%%
+"END" return EOF;
+.
+%%
+/* Avoid possible link errors. */
+int yywrap (void) { return 1; }
+int main (void) { return 0; }
+EOF
+cp foo.l sub/bar.l
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+$AUTOCONF
+
+# Ensure per-target rules are used, to ensure their coverage below.
+$FGREP 'foo2-foo.c' Makefile.in || exit 99
+$FGREP 'bar2-bar.c' sub/Makefile.in || exit 99
+
+./configure --enable-silent-rules
+
+run_make -O
+
+$EGREP ' (-c|-o)' stdout && exit 1
+$EGREP '(mv|ylwrap) ' stdout && exit 1
+
+grep 'LEX .*foo\.' stdout
+grep 'LEX .*bar\.' stdout
+grep ' CC .*foo\.' stdout
+grep ' CC .*bar\.' stdout
+grep 'CCLD .*foo1' stdout
+grep 'CCLD .*bar1' stdout
+grep 'CCLD .*foo2' stdout
+grep 'CCLD .*bar2' stdout
+
+# Cleaning and then rebuilding with the same V flag (and without
+# removing the generated sources in between) shouldn't trigger a
+# different set of rules.
+$MAKE clean
+
+run_make -O
+
+$EGREP ' (-c|-o)' stdout && exit 1
+$EGREP '(mv|ylwrap) ' stdout && exit 1
+
+# Don't look for LEX, as probably lex hasn't been re-run.
+grep ' CC .*foo\.' stdout
+grep ' CC .*bar\.' stdout
+grep 'CCLD .*foo1' stdout
+grep 'CCLD .*bar1' stdout
+grep 'CCLD .*foo2' stdout
+grep 'CCLD .*bar2' stdout
+
+# Ensure a truly clean rebuild.
+$MAKE clean
+rm -f *foo.c sub/*bar.c
+
+run_make -O V=1
+
+grep ' -c ' stdout
+grep ' -o ' stdout
+grep 'ylwrap ' stdout
+
+$EGREP '(LEX|CC|CCLD) ' stdout && exit 1
+
+# Cleaning and then rebuilding with the same V flag (and without
+# removing the generated sources in between) shouldn't trigger a
+# different set of rules.
+$MAKE clean
+
+run_make -O V=1
+
+# Don't look for ylwrap, as probably lex hasn't been re-run.
+grep ' -c ' stdout
+grep ' -o ' stdout
+
+$EGREP '(LEX|CC|CCLD) ' stdout && exit 1
+
+:
diff --git a/t/silent-lt.sh b/t/silent-lt.sh
new file mode 100644
index 000000000..a5dbb00fe
--- /dev/null
+++ b/t/silent-lt.sh
@@ -0,0 +1,93 @@
+#!/bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check silent-rules mode for C, with libtool, both with and without
+# automatic dependency tracking.
+
+required='cc libtoolize'
+. test-init.sh
+
+mkdir sub
+
+cat >>configure.ac <<'EOF'
+AC_CONFIG_FILES([sub/Makefile])
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_LIBTOOL
+AC_OUTPUT
+EOF
+
+cat > Makefile.am <<'EOF'
+# Need generic and non-generic rules.
+lib_LTLIBRARIES = libfoo.la libbar.la
+libbar_la_CFLAGS = $(AM_CFLAGS)
+SUBDIRS = sub
+EOF
+
+cat > sub/Makefile.am <<'EOF'
+AUTOMAKE_OPTIONS = subdir-objects
+# Need generic and non-generic rules.
+lib_LTLIBRARIES = libbaz.la libbla.la
+libbla_la_CFLAGS = $(AM_CFLAGS)
+EOF
+
+cat > libfoo.c <<'EOF'
+int main ()
+{
+ return 0;
+}
+EOF
+cp libfoo.c libbar.c
+cp libfoo.c sub/libbaz.c
+cp libfoo.c sub/libbla.c
+
+libtoolize
+$ACLOCAL
+$AUTOMAKE --add-missing
+$AUTOCONF
+
+for config_args in \
+ '--enable-dependency-tracking' \
+ '--disable-dependency-tracking' \
+; do
+
+ ./configure --enable-silent-rules $config_args
+
+ run_make -O
+
+ $EGREP ' (-c|-o)' stdout && exit 1
+ grep 'mv ' stdout && exit 1
+ grep ' CC .*foo\.' stdout
+ grep ' CC .*bar\.' stdout
+ grep ' CC .*baz\.' stdout
+ grep ' CC .*bla\.' stdout
+ grep ' CCLD .*foo' stdout
+ grep ' CCLD .*bar' stdout
+ grep ' CCLD .*baz' stdout
+ grep ' CCLD .*bla' stdout
+
+ $MAKE clean
+ run_make -O V=1
+ grep ' -c' stdout
+ grep ' -o libfoo' stdout
+ # The libtool command line can contain e.g. a '--tag=CC' option.
+ sed 's/--tag=[^ ]*/--tag=x/g' stdout | $EGREP '(CC|LD) ' && exit 1
+
+ $MAKE distclean
+
+done
+
+:
diff --git a/t/silent-many-languages.sh b/t/silent-many-languages.sh
new file mode 100644
index 000000000..d955aed22
--- /dev/null
+++ b/t/silent-many-languages.sh
@@ -0,0 +1,253 @@
+#!/bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check silent-rules mode, with many languages at once.
+# This test partly overlaps with other 'silent*.sh', but it serves as
+# a stress test by using many different languages at once -- so don't
+# remove this test script.
+
+required='cc c++ fortran fortran77 lex yacc'
+. test-init.sh
+
+# Avoids too much code duplication.
+do_and_check_silent_build ()
+{
+ case $1 in
+ --rebuild) rebuild=true;;
+ *) rebuild=false;;
+ esac
+
+ run_make -O
+ # Avoid spurious failures with SunStudio Fortran compilers.
+ sed '/^NOTICE:/d' stdout > t
+ mv -f t stdout
+ cat stdout
+
+ $EGREP ' (-c|-o)' stdout && exit 1
+ $EGREP '(mv|ylwrap) ' stdout && exit 1
+
+ grep 'CXX .*foo1\.' stdout
+ grep 'CXX .*baz1\.' stdout
+ grep 'FC .*foo2\.' stdout
+ grep 'FC .*baz2\.' stdout
+ grep 'F77 .*foo3\.' stdout
+ grep 'F77 .*baz3\.' stdout
+ grep ' CC .*foo5\.' stdout
+ grep ' CC .*baz5\.' stdout
+ grep ' CC .*foo6\.' stdout
+ grep ' CC .*baz6\.' stdout
+
+ grep 'CXXLD .*foo' stdout
+ grep 'CCLD .*bar' stdout
+ grep 'CXXLD .*baz' stdout
+ grep 'CCLD .*bla' stdout
+
+ if ! $rebuild; then
+ grep 'YACC .*foo6\.' stdout
+ grep 'YACC .*baz6\.' stdout
+ grep 'LEX .*foo5\.' stdout
+ grep 'LEX .*baz5\.' stdout
+ fi
+
+ unset rebuild
+}
+
+# Avoids too much code duplication.
+do_and_check_verbose_build ()
+{
+ case $1 in
+ --rebuild) rebuild=true;;
+ *) rebuild=false;;
+ esac
+
+ run_make -O V=1
+
+ grep ' -c ' stdout
+ grep ' -o ' stdout
+
+ $EGREP '(CC|CXX|FC|F77|LD) ' stdout && exit 1
+
+ if ! $rebuild; then
+ grep 'ylwrap ' stdout
+ $EGREP '(LEX|YACC) ' stdout && exit 1
+ fi
+
+ unset rebuild
+}
+
+mkdir sub
+
+cat >>configure.ac <<'EOF'
+AC_PROG_F77
+AC_PROG_FC
+AC_PROG_LEX
+AC_PROG_YACC
+AC_PROG_CXX
+
+# The SunStudio C++ compiler is unfortunately named 'sunCC' (or even just
+# 'CC', yuck!); similarly and the Portland group C++ compiler is named
+# 'pgCC'. This can cause problems with our grepping checks on the output
+# from make. Avoid these problems by invoking a wrapper script, as
+# filtering the make output proved too fragile.
+case " $CXX " in
+ *'CC '*)
+ AC_MSG_WARN([the C++ compiler '$CXX' name ends with 'CC'])
+ AC_MSG_WARN([it will be wrapped with the custom script 'am--cxx'])
+ echo '#!/bin/sh' > bin/am--cxx
+ echo 'PATH=$saved_PATH; export PATH' >> bin/am--cxx
+ echo "case \$# in" >> bin/am--cxx
+ echo " 0) exec $CXX ;;" >> bin/am--cxx
+ echo " *) exec $CXX \"\$@\" ;;" >> bin/am--cxx
+ echo "esac" >> bin/am--cxx
+ chmod a+x bin/am--cxx
+ CXX=am--cxx
+esac
+
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+EOF
+
+cat > Makefile.am <<'EOF'
+# Need generic and non-generic rules.
+bin_PROGRAMS = foo bar fo2
+bar_CFLAGS = $(AM_CFLAGS)
+foo_SOURCES = foo1.cpp foo2.f90 foo3.f foo5.l foo6.y
+fo2_SOURCES = $(foo_SOURCES)
+fo2_CPPFLAGS = $(AM_CPPFLAGS)
+fo2_FFLAGS = $(AM_FFLAGS)
+fo2_FCFLAGS = $(AM_FCFLAGS)
+fo2_YFLAGS = -v
+fo2_LFLAGS = -n
+SUBDIRS = sub
+AM_YFLAGS = -d
+LDADD = $(LEXLIB)
+BUILT_SOURCES = foo6.h
+EOF
+
+cat > sub/Makefile.am <<'EOF'
+AUTOMAKE_OPTIONS = subdir-objects
+# Need generic and non-generic rules.
+bin_PROGRAMS = baz bla ba2
+bla_CFLAGS = $(AM_CFLAGS)
+baz_SOURCES = baz1.cpp baz2.f90 baz3.f baz5.l baz6.y
+ba2_SOURCES = $(baz_SOURCES)
+ba2_CPPFLAGS = $(AM_CPPFLAGS)
+ba2_FFLAGS = $(AM_FFLAGS)
+ba2_FCFLAGS = $(AM_FCFLAGS)
+ba2_YFLAGS = -v
+ba2_LFLAGS = -n
+AM_YFLAGS = -d
+LDADD = $(LEXLIB)
+BUILT_SOURCES = baz6.h
+EOF
+
+cat > foo1.cpp <<'EOF'
+int main ()
+{
+ return 0;
+}
+EOF
+cat > foo2.f90 <<'EOF'
+ subroutine foo2
+ return
+ end
+EOF
+cat > foo3.f <<'EOF'
+ subroutine foo3
+ return
+ end
+EOF
+cat > foo5.l <<'EOF'
+%{
+#define YY_NO_UNISTD_H 1
+%}
+%%
+"END" return EOF;
+.
+%%
+/* Avoid possible link errors. */
+int yywrap (void)
+{
+ return 1;
+}
+EOF
+cat > foo6.y <<'EOF'
+%{
+void yyerror (char *s) {}
+%}
+%token EOF
+%%
+fubar : 'f' 'o' 'o' 'b' 'a' 'r' EOF {};
+EOF
+cp foo1.cpp bar.c
+cp foo1.cpp sub/baz.c
+cp foo1.cpp sub/bla.c
+cp foo1.cpp sub/baz1.cpp
+cp foo2.f90 sub/baz2.f90
+cp foo3.f sub/baz3.f
+cp foo5.l sub/baz5.l
+cp foo6.y sub/baz6.y
+
+mkdir bin
+saved_PATH=$PATH; export saved_PATH
+PATH=$(pwd)/bin$PATH_SEPARATOR$PATH; export PATH
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+$AUTOCONF
+
+# Ensure per-target rules are used, to ensure their coverage below.
+# (We do not do an exhaustive check, that wouldn't be practical).
+$FGREP 'bar-bar.o' Makefile.in
+$FGREP 'fo2-foo5.c' Makefile.in
+$FGREP 'fo2-foo6.c' Makefile.in
+
+# Force dependency tracking explicitly, so that slow dependency
+# extractors are not rejected. Try also with dependency tracking
+# explicitly disabled.
+for config_args in \
+ --enable-dependency-tracking --disable-dependency-tracking
+do
+
+ ./configure $config_args --enable-silent-rules
+
+ do_and_check_silent_build
+ # Cleaning and then rebuilding with the same V flag (and without
+ # removing the generated sources in between) shouldn't trigger a
+ # different set of rules.
+ $MAKE clean
+ do_and_check_silent_build --rebuild
+
+ # Ensure a clean rebuild.
+ $MAKE clean
+ # This is required, since these files are not removed by 'make clean'
+ # (as dictated by the GNU Coding Standards).
+ rm -f *foo5.c *foo6.[ch] sub/*baz5.c sub/*baz6.[ch]
+
+ do_and_check_verbose_build
+ # Cleaning and then rebuilding with the same V flag (and without
+ # removing the generated sources in between) shouldn't trigger a
+ # different set of rules.
+ $MAKE clean
+ do_and_check_verbose_build --rebuild
+
+ # Ensure a clean reconfiguration/rebuild.
+ $MAKE clean
+ $MAKE maintainer-clean
+
+done
+
+:
diff --git a/t/silent-nested-vars.sh b/t/silent-nested-vars.sh
new file mode 100644
index 000000000..c62a15c41
--- /dev/null
+++ b/t/silent-nested-vars.sh
@@ -0,0 +1,144 @@
+#!/bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check silent-rules mode, on 'make' implementations that do not
+# support nested variables (Bug#9928, Bug#10237).
+
+. test-init.sh
+
+cat >>configure.ac <<'EOF'
+AM_SILENT_RULES
+AC_PROG_CC
+AC_OUTPUT
+EOF
+
+cat > Makefile.am <<'EOF'
+# Need generic and non-generic rules.
+bin_PROGRAMS = foo bar
+bar_CFLAGS = $(AM_CFLAGS)
+
+# Check that AM_V and AM_DEFAULT_V work as advertised.
+pkg_verbose = $(pkg_verbose_@AM_V@)
+pkg_verbose_ = $(pkg_verbose_@AM_DEFAULT_V@)
+pkg_verbose_0 = @echo PKG-GEN $@;
+
+bin_SCRIPTS = oop
+oop:
+ $(pkg_verbose)echo $@ >$@
+
+mostlyclean-local:
+ rm -f oop
+EOF
+
+cat > foo.c <<'EOF'
+int main ()
+{
+ return 0;
+}
+EOF
+cp foo.c bar.c
+
+cat >mymake <<'EOF'
+#! /bin/sh
+makerules=
+
+case $1 in
+ -f)
+ makefile=$2
+ case $2 in
+ -) makerules=`cat` || exit ;;
+ esac ;;
+ *)
+ for makefile in makefile Makefile; do
+ test -f $makefile && break
+ done ;;
+esac
+
+nested_var_pat='^[^#].*\$([^)]*\$'
+if
+ case $makefile in
+ -) printf '%s\n' "$makerules" | grep "$nested_var_pat";;
+ *) grep "$nested_var_pat" $makefile;;
+ esac
+then
+ echo >&2 "mymake: $makefile contains nested variables"
+ exit 1
+fi
+
+case $makefile in
+ -) printf '%s\n' "$makerules" | $mymake_MAKE "$@";;
+ *) exec $mymake_MAKE "$@";;
+esac
+EOF
+chmod a+x mymake
+mymake_MAKE=${MAKE-make}
+MAKE=./mymake
+export MAKE mymake_MAKE
+
+# As a sanity check, verify that 'mymake' rejects Makefiles that
+# use nested variables.
+cat > Makefile <<'END'
+a = $(b$(c))
+all:
+ touch bar
+END
+$MAKE && exit 99
+mv -f Makefile foo.mk
+$MAKE -f foo.mk && exit 99
+cat foo.mk | $MAKE -f - && exit 99
+test -f bar && exit 99
+sed '/a =/d' foo.mk > Makefile
+$MAKE && test -f bar || exit 99
+rm -f bar Makefile foo.mk
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+$AUTOCONF
+
+./configure --enable-silent-rules >stdout || { cat stdout; exit 1; }
+cat stdout
+grep '^checking whether \./mymake supports nested variables\.\.\. no *$' \
+ stdout
+$EGREP 'CC|AM_V|GEN' Makefile # For debugging.
+grep '^AM_V_CC = *\$(am__v_CC_0) *$' Makefile
+grep '^AM_V_GEN = *\$(am__v_GEN_0) *$' Makefile
+run_make -O
+$EGREP ' (-c|-o)' stdout && exit 1
+grep 'mv ' stdout && exit 1
+grep 'echo .*oop' stdout && exit 1
+grep 'CC .*foo\.' stdout
+grep 'CC .*bar\.' stdout
+grep 'CCLD .*foo' stdout
+grep 'CCLD .*bar' stdout
+grep 'PKG-GEN .*oop' stdout
+$MAKE distclean
+
+./configure --disable-silent-rules > stdout || { cat stdout; exit 1; }
+cat stdout
+grep '^checking whether \./mymake supports nested variables\.\.\. no *$' \
+ stdout
+$EGREP 'CC|AM_V|GEN' Makefile # For debugging.
+grep '^AM_V_CC = *\$(am__v_CC_1) *$' Makefile
+grep '^AM_V_GEN = *\$(am__v_GEN_1) *$' Makefile
+
+run_make -O
+grep ' -c' stdout
+grep ' -o foo' stdout
+grep ' -o bar' stdout
+grep 'echo .*>oop' stdout
+$EGREP '(CC|LD) ' stdout && exit 1
+
+:
diff --git a/t/silent-texi.sh b/t/silent-texi.sh
new file mode 100644
index 000000000..dc694f798
--- /dev/null
+++ b/t/silent-texi.sh
@@ -0,0 +1,82 @@
+#!/bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check texinfo rules in silent-rules mode.
+
+required='makeinfo tex texi2dvi dvips'
+. test-init.sh
+
+echo AC_OUTPUT >> configure.ac
+
+cat > Makefile.am <<'EOF'
+info_TEXINFOS = foo.texi sub/zardoz.texi
+EOF
+
+cat > foo.texi <<'EOF'
+\input texinfo
+@setfilename foo.info
+@settitle foo manual
+@bye
+EOF
+
+mkdir sub
+cat > sub/zardoz.texi <<'EOF'
+\input texinfo
+@setfilename zardoz.info
+@settitle zardoz manual
+@bye
+EOF
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+$AUTOCONF
+
+./configure --disable-silent-rules
+
+# Silent mode output.
+run_make -O -E -- V=0 dvi html info ps pdf
+grep '^ DVIPS foo\.ps$' stdout
+grep '^ MAKEINFO foo\.html$' stdout
+# NetBSD make will print './foo.info' instead of 'foo.info'.
+$EGREP '^ MAKEINFO (\./)?foo\.info$' stdout
+grep '^ TEXI2DVI foo\.dvi$' stdout
+grep '^ TEXI2PDF foo\.pdf$' stdout
+grep '^ DVIPS sub/zardoz.ps$' stdout
+grep '^ MAKEINFO sub/zardoz.html$' stdout
+# NetBSD make will print './sub/zardoz.info' instead of 'zardoz.info'.
+$EGREP '^ MAKEINFO (\./)?sub/zardoz.info$' stdout
+grep '^ TEXI2DVI sub/zardoz.dvi$' stdout
+grep '^ TEXI2PDF sub/zardoz.pdf$' stdout
+# No make recipe is displayed before being executed.
+$EGREP 'texi2(dvi|pdf)|dvips|makeinfo|(rm|mv) ' \
+ stdout stderr && exit 1
+# No verbose output from TeX nor dvips.
+$EGREP '(zardoz|foo)\.log|3\.14|Copyright|This is|[Oo]utput ' \
+ stdout stderr && exit 1
+
+# Verbose mode output.
+$MAKE clean || exit 1
+run_make -M V=1 dvi html info ps pdf
+$EGREP '(DVIPS|MAKEINFO|TEXI2(PDF|DVI)) ' output && exit 1
+# Verbose output from TeX.
+grep '[Oo]utput .*foo\.pdf' output
+grep '[Oo]utput .*zardoz\.pdf' output
+$FGREP 'foo.log' output
+$FGREP 'zardoz.log' output
+# Verbose output from dvips.
+$FGREP ' dvips' output
+
+:
diff --git a/t/silent-yacc-headers.sh b/t/silent-yacc-headers.sh
new file mode 100644
index 000000000..d0d5f5b74
--- /dev/null
+++ b/t/silent-yacc-headers.sh
@@ -0,0 +1,164 @@
+#!/bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check silent-rules mode for Yacc, when yacc-generated headers are
+# involved (i.e., the '-d' option is in *YFLAGS).
+
+required='cc yacc'
+. test-init.sh
+
+mkdir sub
+
+cat >>configure.ac <<'EOF'
+AC_PROG_YACC
+AC_PROG_CC
+AC_OUTPUT
+EOF
+
+cat > Makefile.am <<'EOF'
+# Need generic and non-generic rules.
+AM_YFLAGS = -d
+bin_PROGRAMS = foo bar
+foo_SOURCES = parse.y
+bar_SOURCES = $(foo_SOURCES)
+bar_YFLAGS = $(AM_YFLAGS)
+EOF
+
+cat > parse.y <<'EOF'
+%{
+void yyerror (char *s) { return; }
+int yylex (void) { return 0; }
+int main (void) { return 0; }
+%}
+%token EOF
+%%
+fubar : 'f' 'o' 'o' 'b' 'a' 'r' EOF {};
+EOF
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+$AUTOCONF
+
+# Check that the expected non-generic rules has been truly generated.
+# Otherwise, the coverage offered by this test will be weaker then
+# expected and planned.
+$FGREP 'bar-parse.c' Makefile.in
+$FGREP '$(bar_YFLAGS)' Makefile.in
+
+./configure --enable-silent-rules
+
+run_make -O
+
+$EGREP ' (-c|-d|-o)' stdout && exit 1
+$EGREP '(mv|ylwrap) ' stdout && exit 1
+
+grep 'YACC *parse\.c' stdout
+grep 'updating *parse\.h' stdout
+grep 'YACC *bar-parse\.c' stdout
+grep 'updating *bar-parse\.h' stdout
+
+grep ' CC *parse\.' stdout
+grep ' CC *bar-parse\.' stdout
+grep 'CCLD *foo' stdout
+grep 'CCLD *bar' stdout
+
+# Check recovering from header removal.
+rm -f parse.h bar-parse.h
+run_make -O parse.h bar-parse.h
+
+$EGREP ' (-c|-d|-o)' stdout && exit 1
+$EGREP '(mv|ylwrap) ' stdout && exit 1
+
+grep 'YACC *parse\.c' stdout
+grep 'updating *parse\.h' stdout
+grep 'YACC *bar-parse\.c' stdout
+grep 'updating *bar-parse\.h' stdout
+
+# Cleaning and then rebuilding with the same V flag (and without
+# removing the generated sources in between) shouldn't trigger a
+# different set of rules.
+$MAKE clean
+
+run_make -O
+
+$EGREP ' (-c|-d|-o)' stdout && exit 1
+$EGREP '(mv|ylwrap) ' stdout && exit 1
+
+# Don't look for "YACC *.c" and "updating *.h", as yacc shouldn't
+# have been re-run.
+grep ' CC *parse\.' stdout
+grep ' CC *bar-parse\.' stdout
+grep 'CCLD *foo' stdout
+grep 'CCLD *bar' stdout
+
+# Check recovering from header removal.
+rm -f parse.h bar-parse.h
+run_make -O parse.h bar-parse.h
+
+$EGREP ' (-c|-d|-o)' stdout && exit 1
+$EGREP '(mv|ylwrap) ' stdout && exit 1
+
+grep 'YACC *parse\.c' stdout
+grep 'updating *parse\.h' stdout
+grep 'YACC *bar-parse\.c' stdout
+grep 'updating *bar-parse\.h' stdout
+
+# Ensure a truly clean rebuild.
+$MAKE maintainer-clean
+
+./configure --enable-silent-rules
+
+run_make -O V=1
+
+grep ' -c ' stdout
+grep ' -o ' stdout
+grep ' -d ' stdout
+grep 'ylwrap ' stdout
+
+$EGREP '(YACC|CC|CCLD) ' stdout && exit 1
+
+# Check recovering from header removal.
+rm -f parse.h bar-parse.h
+run_make -O V=1 parse.h bar-parse.h
+
+grep ' -d ' stdout
+grep 'ylwrap ' stdout
+
+grep 'YACC' stdout && exit 1
+
+# Cleaning and then rebuilding with the same V flag (and without
+# removing the generated sources in between) shouldn't trigger a
+# different set of rules.
+$MAKE clean
+
+run_make -O V=1
+
+# Don't look for ylwrap, as probably lex hasn't been re-run.
+grep ' -c ' stdout
+grep ' -o ' stdout
+
+$EGREP '(YACC|CC|CCLD) ' stdout && exit 1
+
+# Check recovering from header removal.
+rm -f parse.h bar-parse.h
+run_make -O V=1 parse.h bar-parse.h
+
+grep ' -d ' stdout
+grep 'ylwrap ' stdout
+
+grep 'YACC' stdout && exit 1
+
+:
diff --git a/t/silent-yacc.sh b/t/silent-yacc.sh
new file mode 100644
index 000000000..32b777212
--- /dev/null
+++ b/t/silent-yacc.sh
@@ -0,0 +1,130 @@
+#!/bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check silent-rules mode for Yacc.
+
+required='cc yacc'
+. test-init.sh
+
+mkdir sub
+
+cat >>configure.ac <<'EOF'
+AC_PROG_CC
+AC_PROG_YACC
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+EOF
+
+cat > Makefile.am <<'EOF'
+# Need generic and non-generic rules.
+bin_PROGRAMS = foo1 foo2
+foo1_SOURCES = foo.y
+foo2_SOURCES = $(foo1_SOURCES)
+foo2_YFLAGS = -v
+foo2_CFLAGS = $(AM_CPPFLAGS)
+SUBDIRS = sub
+EOF
+
+cat > sub/Makefile.am <<'EOF'
+AUTOMAKE_OPTIONS = subdir-objects
+# Need generic and non-generic rules.
+bin_PROGRAMS = bar1 bar2
+bar1_SOURCES = bar.y
+bar2_SOURCES = $(bar1_SOURCES)
+bar2_YFLAGS = -v
+bar2_CFLAGS = $(AM_CPPFLAGS)
+EOF
+
+cat > foo.y <<'EOF'
+%{
+void yyerror (char *s) { return; }
+int yylex (void) { return 0; }
+int main (void) { return 0; }
+%}
+%token EOF
+%%
+fubar : 'f' 'o' 'o' 'b' 'a' 'r' EOF {};
+EOF
+cp foo.y sub/bar.y
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+$AUTOCONF
+
+# Ensure per-target rules are used, to ensure their coverage below.
+$FGREP 'foo2-foo.c' Makefile.in || exit 99
+$FGREP 'bar2-bar.c' sub/Makefile.in || exit 99
+
+./configure --enable-silent-rules
+
+run_make -O
+
+$EGREP ' (-c|-o)' stdout && exit 1
+$EGREP '(mv|ylwrap) ' stdout && exit 1
+
+grep 'YACC .*foo\.' stdout
+grep 'YACC .*bar\.' stdout
+grep ' CC .*foo\.' stdout
+grep ' CC .*bar\.' stdout
+grep 'CCLD .*foo1' stdout
+grep 'CCLD .*bar1' stdout
+grep 'CCLD .*foo2' stdout
+grep 'CCLD .*bar2' stdout
+
+# Cleaning and then rebuilding with the same V flag (and without
+# removing the generated sources in between) shouldn't trigger a
+# different set of rules.
+$MAKE clean
+
+run_make -O
+
+$EGREP ' (-c|-o)' stdout && exit 1
+$EGREP '(mv|ylwrap) ' stdout && exit 1
+
+# Don't look for YACC, as probably yacc hasn't been re-run.
+grep ' CC .*foo\.' stdout
+grep ' CC .*bar\.' stdout
+grep 'CCLD .*foo1' stdout
+grep 'CCLD .*bar1' stdout
+grep 'CCLD .*foo2' stdout
+grep 'CCLD .*bar2' stdout
+
+# Ensure a truly clean rebuild.
+$MAKE clean
+rm -f *foo.[ch] sub/*bar.[ch]
+
+run_make -O V=1
+
+grep ' -c ' stdout
+grep ' -o ' stdout
+grep 'ylwrap ' stdout
+
+$EGREP '(YACC|CC|CCLD) ' stdout && exit 1
+
+# Cleaning and then rebuilding with the same V flag (and without
+# removing the generated sources in between) shouldn't trigger a
+# different set of rules.
+$MAKE clean
+
+run_make -O V=1
+
+# Don't look for ylwrap, as probably lex hasn't been re-run.
+grep ' -c ' stdout
+grep ' -o ' stdout
+
+$EGREP '(YACC|CC|CCLD) ' stdout && exit 1
+
+:
diff --git a/t/sourcefile-in-subdir.sh b/t/sourcefile-in-subdir.sh
new file mode 100644
index 000000000..8a478e00a
--- /dev/null
+++ b/t/sourcefile-in-subdir.sh
@@ -0,0 +1,36 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure subdir source file generates explicit dependency.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = zardoz widdershins
+zardoz_SOURCES = y.c x/z.c
+widdershins_SOURCES = x/z.c
+END
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+END
+
+$ACLOCAL
+$AUTOMAKE -Wno-unsupported
+
+grep '^z\.o: x/z\.c$' Makefile.in
+
+:
diff --git a/t/space.sh b/t/space.sh
new file mode 100644
index 000000000..d20fc1b9f
--- /dev/null
+++ b/t/space.sh
@@ -0,0 +1,29 @@
+#! /bin/sh
+# Copyright (C) 2000-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test leading space on macro assignment.
+
+. test-init.sh
+
+echo AC_PROG_CC >> configure.ac
+
+cat > Makefile.am << 'END'
+ bin_PROGRAMS = foo
+foo_SOURCES = foo.c
+END
+
+$ACLOCAL
+$AUTOMAKE
diff --git a/t/specflg-dummy.sh b/t/specflg-dummy.sh
new file mode 100644
index 000000000..52344486c
--- /dev/null
+++ b/t/specflg-dummy.sh
@@ -0,0 +1,246 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that even "dummy" per-target flags triggers the use of renamed
+# objects. I.e., a definition like 'foo_CFLAGS = $(AM_CFLAGS)' should
+# always cause Automake to trigger the semantics for per-target CFLAGS,
+# even if AM_CFLAGS is undefined. Similarly for other *FLAGS variables
+# (CXXFLAGS, YFLAGS, LDFLAGS, ...)
+
+. test-init.sh
+
+# Disable shell globbing if possible.
+(set +f) >/dev/null 2>&1 && set +f
+
+oIFS=$IFS
+nl='
+'
+
+matches=
+add_match ()
+{
+ matches="$matches$nl$1"
+}
+
+do_check ()
+{
+ IFS=$nl
+ for string in $matches; do
+ IFS=$oIFS
+ $FGREP "$string" Makefile.in
+ done
+ IFS=$oIFS
+}
+
+# Fake libtool presence, so that we won't have to require it.
+cat > acinclude.m4 <<END
+AC_DEFUN([AC_PROG_LIBTOOL], [AC_SUBST([LIBTOOL], [dummy])])
+END
+: > ltmain.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_CXX
+AC_PROG_YACC
+AC_PROG_LEX
+AC_PROG_F77
+AC_PROG_FC
+AM_PROG_GCJ
+AM_PROG_AR
+AC_PROG_RANLIB
+AC_PROG_LIBTOOL
+AM_PROG_UPC
+AC_PROG_OBJC
+END
+
+cat > Makefile.am <<'END'
+bin_PROGRAMS =
+lib_LIBRARIES =
+lib_LTLIBRARIES =
+END
+
+$ACLOCAL
+
+cat >> Makefile.am <<'END'
+bin_PROGRAMS += prog1
+prog1_SOURCES = source1.c
+prog1_CFLAGS = $(AM_CFLAGS)
+END
+
+add_match 'prog1-source1.$(OBJEXT)'
+
+cat >> Makefile.am <<'END'
+bin_PROGRAMS += prog2
+prog2_SOURCES = source2.c
+prog2_CPPFLAGS = $(AM_CPPFLAGS)
+END
+
+add_match 'prog2-source2.$(OBJEXT)'
+
+cat >> Makefile.am <<'END'
+bin_PROGRAMS += prog3
+prog3_SOURCES = source3.cxx
+prog3_CXXFLAGS = $(AM_CXXFLAGS)
+END
+
+add_match 'prog3-source3.$(OBJEXT)'
+
+cat >> Makefile.am <<'END'
+bin_PROGRAMS += prog4
+prog4_SOURCES = source4.c++
+prog4_CPPFLAGS = $(AM_CPPFLAGS)
+END
+
+add_match 'prog4-source4.$(OBJEXT)'
+
+cat >> Makefile.am <<'END'
+bin_PROGRAMS += prog5
+prog5_SOURCES = source5.f
+prog5_FFLAGS = $(AM_FFLAGS)
+END
+
+add_match 'prog5-source5.$(OBJEXT)'
+
+cat >> Makefile.am <<'END'
+bin_PROGRAMS += prog6
+prog6_SOURCES = source6.f90
+prog6_FCFLAGS = $(AM_FCFLAGS)
+END
+
+add_match 'prog6-source6.$(OBJEXT)'
+
+cat >> Makefile.am <<'END'
+bin_PROGRAMS += prog7
+prog7_SOURCES = source7.r
+prog7_RFLAGS = $(AM_RFLAGS)
+END
+
+add_match 'prog7-source7.$(OBJEXT)'
+
+cat >> Makefile.am <<'END'
+bin_PROGRAMS += prog8
+prog8_SOURCES = source8.java
+prog8_GCJFLAGS = $(AM_GCJFLAGS)
+END
+
+add_match 'prog8-source8.$(OBJEXT)'
+
+cat >> Makefile.am <<'END'
+bin_PROGRAMS += prog9
+prog9_SOURCES = source9.upc
+prog9_UPCFLAGS = $(AM_UPCFLAGS)
+END
+
+add_match 'prog9-source9.$(OBJEXT)'
+
+cat >> Makefile.am <<'END'
+bin_PROGRAMS += prog10
+prog10_SOURCES = source10.m
+prog10_OBJCFLAGS = $(AM_OBJCFLAGS)
+END
+
+add_match 'prog10-source10.$(OBJEXT)'
+
+cat >> Makefile.am <<'END'
+bin_PROGRAMS += linkprog
+linkprog_SOURCES = linkprog.c
+linkprog_LDFLAGS = $(AM_LDFLAGS)
+END
+
+add_match 'linkprog_LINK ='
+
+cat >> Makefile.am <<'END'
+lib_LIBRARIES += libstatic.a
+libstatic_a_SOURCES = static123.c
+libstatic_a_CFLAGS = $(AM_CFLAGS)
+END
+
+add_match 'libstatic_a-static123.$(OBJEXT)'
+
+cat >> Makefile.am <<'END'
+lib_LTLIBRARIES += libshared1.la
+libshared1_la_SOURCES = shared1.c
+libshared1_la_LIBTOOLFLAGS = $(AM_LIBTOOLFLAGS)
+END
+
+add_match 'libshared1_la-shared1.lo'
+
+cat >> Makefile.am <<'END'
+lib_LTLIBRARIES += libshared2.la
+libshared2_la_SOURCES = shared2.cc
+libshared2_la_CXXFLAGS = $(AM_CXXFLAGS)
+END
+
+add_match 'libshared2_la-shared2.lo'
+
+cat >> Makefile.am <<'END'
+bin_PROGRAMS += parse1
+parse1_SOURCES = parse.y
+parse1_YFLAGS = $(AM_YFLAGS)
+END
+
+add_match 'parse1-parse.c'
+
+cat >> Makefile.am <<'END'
+bin_PROGRAMS += parse2
+parse2_SOURCES = parse.ypp
+parse2_YFLAGS = $(AM_YFLAGS)
+END
+
+add_match 'parse2-parse.cpp'
+
+cat >> Makefile.am <<'END'
+bin_PROGRAMS += lexer1
+lexer1_SOURCES = lex.l
+lexer1_LFLAGS = $(AM_YFLAGS)
+END
+
+add_match 'lexer1-lex.c'
+
+cat >> Makefile.am <<'END'
+bin_PROGRAMS += lexer2
+lexer2_SOURCES = lexer.ll
+lexer2_LFLAGS = $(AM_YFLAGS)
+END
+
+add_match 'lexer2-lexer.cc'
+
+# For debugging.
+cat Makefile.am
+
+$AUTOMAKE -a
+do_check
+
+sed '
+ s|^\(.*\)_SOURCES *= *|sub_\1_SOURCES = srcsub/|
+ s|^\(.*\)PROGRAMS *+= *|\1PROGRAMS += sub/|
+ s|^\(.*\)LIBRARIES *+= *|\1LIBRARIES += sub/|
+ s|^\(.*\)FLAGS *=|sub_\1FLAGS =|
+' Makefile.am > t
+
+cat - t > Makefile.am <<'END'
+AUTOMAKE_OPTIONS = subdir-objects
+END
+
+rm -f t
+
+# For debugging.
+cat Makefile.am
+
+$AUTOMAKE
+do_check
+
+:
diff --git a/t/specflg6.sh b/t/specflg6.sh
new file mode 100644
index 000000000..5c13f6bd5
--- /dev/null
+++ b/t/specflg6.sh
@@ -0,0 +1,53 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Regression test for multiple rules being generated for each target when
+# conditionals are present.
+# From Richard Boulton.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_CONDITIONAL([BAR], [true])
+END
+
+cat > Makefile.am << 'END'
+if BAR
+BAR_SRCS = bar.c
+endif
+
+bin_PROGRAMS = foo
+foo_CFLAGS = -DFOO
+foo_SOURCES = foo.c
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+uncondval=$($FGREP 'foo-foo.o: foo.c' Makefile.in)
+
+cat >> Makefile.am << 'END'
+foo_SOURCES += $(BAR_SRCS)
+END
+
+$AUTOMAKE
+
+condval=$($FGREP 'foo-foo.o: foo.c' Makefile.in)
+
+test "x$uncondval" = "x$condval"
+
+:
diff --git a/t/specflg7.sh b/t/specflg7.sh
new file mode 100644
index 000000000..78210a75f
--- /dev/null
+++ b/t/specflg7.sh
@@ -0,0 +1,64 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# The true/false example from the manual, plus a check for _SHORTNAME.
+
+required='cc native'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = false true
+true_SOURCES = false.c
+true_CFLAGS = -DAM_TRUE
+true_SHORTNAME = t
+# No false_SOURCES definition. Use the default source.
+false_CFLAGS = -DAM_FALSE
+false_SHORTNAME = f
+END
+
+cat > false.c << 'END'
+#include <stdio.h>
+int
+main (int argc, char *argv[])
+{
+#ifdef AM_TRUE
+ puts ("true");
+#else
+ puts ("false");
+#endif
+ return 0;
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+$MAKE
+./true | grep true
+./false | grep false
+
+objext=$(sed -n -e 's/^OBJEXT = //p' < Makefile)
+test -f ./t-false.$objext
+test -f ./f-false.$objext
+
+:
diff --git a/t/specflg8.sh b/t/specflg8.sh
new file mode 100644
index 000000000..cf4cb8056
--- /dev/null
+++ b/t/specflg8.sh
@@ -0,0 +1,63 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Like the true/false example from the manual,
+# with one extra indirection in the sources (PR/315), and
+# use of _CPPFLAGS (PR/337).
+
+required='cc native'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_OUTPUT
+END
+
+# Using a separate variable to hold all the sources for a program is
+# common when building many flavors of this program, each with
+# different flags.
+
+cat > Makefile.am << 'END'
+TRUESOURCE = true.c
+bin_PROGRAMS = false true
+true_SOURCES = $(TRUESOURCE)
+true_CPPFLAGS = -DEXIT_CODE=0
+false_SOURCES = $(TRUESOURCE)
+false_CPPFLAGS = -DEXIT_CODE=1
+END
+
+cat > true.c << 'END'
+int main (void)
+{
+ return EXIT_CODE;
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+$MAKE
+
+./true
+./false && exit 1
+
+objext=$(sed -n -e 's/^OBJEXT = //p' < Makefile)
+test -f ./true-true.$objext
+test -f ./false-true.$objext
+
+:
diff --git a/t/specflg9.sh b/t/specflg9.sh
new file mode 100644
index 000000000..4c10340e8
--- /dev/null
+++ b/t/specflg9.sh
@@ -0,0 +1,45 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Another check for per-target flag substitutions.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = subdir-objects
+bin_PROGRAMS = zzfoo zzbar
+zzfoo_SOURCES = sub/foo.c
+zzbar_SOURCES = bar.c
+zzbar_CPPFLAGS = -Dfoo
+END
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+
+$FGREP '$(AM_CFLAGS)' Makefile.in
+
+$FGREP '$(zzfoo_CFLAGS)' Makefile.in && exit 1
+$FGREP '$(zzfoo_CPPFLAGS)' Makefile.in && exit 1
+
+$FGREP '$(zzbar_CFLAGS)' Makefile.in && exit 1
+$FGREP '$(zzbar_CPPFLAGS)' Makefile.in
+
+:
diff --git a/t/spell.sh b/t/spell.sh
new file mode 100644
index 000000000..cd9243e32
--- /dev/null
+++ b/t/spell.sh
@@ -0,0 +1,29 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure misspellings in _SOURCES variables cause failure.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = zardoz foo
+zardoz_SOURCES = x.c
+boo_SOURCES = y.c
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+grep 'Makefile.am:3:.*boo' stderr
diff --git a/t/spell2.sh b/t/spell2.sh
new file mode 100644
index 000000000..88fd6775e
--- /dev/null
+++ b/t/spell2.sh
@@ -0,0 +1,31 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure misspellings in _SOURCES variables cause failure.
+
+. test-init.sh
+
+echo AC_PROG_CC >> configure.ac
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = zardoz
+zardoz_SOURCES = x.c
+qardoz_LDADD = -ljoe
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+grep 'Makefile.am:3:.*qardoz' stderr
diff --git a/t/spell3.sh b/t/spell3.sh
new file mode 100644
index 000000000..ddd10fc54
--- /dev/null
+++ b/t/spell3.sh
@@ -0,0 +1,31 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure some internal _DEPENDENCIES variables don't cause
+# errors.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+TAGS_DEPENDENCIES = joe
+## Required to avoid error.
+ETAGS_ARGS = joe
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+:
diff --git a/t/spelling.sh b/t/spelling.sh
new file mode 100644
index 000000000..d56bc6966
--- /dev/null
+++ b/t/spelling.sh
@@ -0,0 +1,30 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure that misspelled prefixes actually cause error.
+
+. test-init.sh
+
+cat > Makefile.am << 'EOF'
+bni_PROGRAMS = zot
+EOF
+
+$ACLOCAL
+AUTOMAKE_fails
+grep 'bni_PROGRAMS' stderr
+grep 'bnidir.*undefined' stderr
+
+:
diff --git a/t/spy-double-colon.sh b/t/spy-double-colon.sh
new file mode 100644
index 000000000..4dc89d49b
--- /dev/null
+++ b/t/spy-double-colon.sh
@@ -0,0 +1,106 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check whether double colon rules work. The Unix V7 make manual
+# mentions double-colon rules, but POSIX does not. They seem to be
+# supported by all Make implementation as far as we can tell. This test
+# case is a spy: we want to detect if there exist implementations where
+# these do not work. We might use these rules to simplify the rebuild
+# rules (instead of the $? hack).
+
+# Tom Tromey write:
+# | In the distant past we used :: rules extensively.
+# | Fran?ois convinced me to get rid of them:
+# |
+# | Thu Nov 23 18:02:38 1995 Tom Tromey <tromey@cambric>
+# | [ ... ]
+# | * subdirs.am: Removed "::" rules
+# | * header.am, libraries.am, mans.am, texinfos.am, footer.am:
+# | Removed "::" rules
+# | * scripts.am, programs.am, libprograms.am: Removed "::" rules
+# |
+# |
+# | I no longer remember the rationale for this. It may have only been a
+# | belief that they were unportable.
+
+# On a related topic, the Autoconf manual has the following text:
+# | 'VPATH' and double-colon rules
+# | Any assignment to 'VPATH' causes Sun 'make' to only execute
+# | the first set of double-colon rules. (This comment has been
+# | here since 1994 and the context has been lost. It's probably
+# | about SunOS 4. If you can reproduce this, please send us a
+# | test case for illustration.)
+
+# We already know that overlapping ::-rule like
+#
+# a :: b
+# echo rule1 >> $@
+# a :: c
+# echo rule2 >> $@
+# a :: b c
+# echo rule3 >> $@
+#
+# do not work equally on all platforms. It seems that in all cases
+# Make attempts to run all matching rules. However at least GNU Make,
+# NetBSD Make, and FreeBSD Make will detect that $@ was updated by the
+# first matching rule and skip remaining matches (with the above
+# example that means that unless 'a' was declared PHONY, only "rule1"
+# will be appended to 'a' if both b and c have changed). Other
+# implementations like OSF1 Make and HP-UX Make do not perform such a
+# check and execute all matching rules whatever they do ("rule1",
+# "rule2", abd "rule3" will all be appended to 'a' if b and c have
+# changed).
+
+# So it seems only non-overlapping ::-rule may be portable. This is
+# what we check now.
+
+. test-init.sh
+
+cat >Makefile <<\EOF
+a :: b
+ echo rule1 >> $@
+a :: c
+ echo rule2 >> $@
+EOF
+
+touch b c
+$sleep
+: > a
+$MAKE
+test x"$(cat a)" = x
+$sleep
+touch b
+$MAKE
+test "$(cat a)" = "rule1"
+# Ensure a is strictly newer than b, so HP-UX make does not execute rule2.
+$sleep
+: > a
+$sleep
+touch c
+$MAKE
+test "$(cat a)" = "rule2"
+
+# Unfortunately, the following is not portable to FreeBSD/NetBSD/OpenBSD
+# make, see explanation above.
+
+#: > a
+#$sleep
+#touch b c
+#$MAKE
+#grep rule1 a
+#grep rule2 a
+
+:
diff --git a/t/spy-rm.tap b/t/spy-rm.tap
new file mode 100644
index 000000000..0f754cef2
--- /dev/null
+++ b/t/spy-rm.tap
@@ -0,0 +1,48 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check whether "rm -f" do not complain if called without file
+# operands. We'd like to depend on this behaviour (which seems
+# to hold on all non-museum systems, and will soon be mandated
+# by POSIX as well) in future version of automake, to simplify
+# automake-provided cleanup rules.
+# See automake bug#10828.
+# Other references:
+# <https://lists.gnu.org/archive/html/bug-autoconf/2012-02/msg00002.html>
+# <http://austingroupbugs.net/view.php?id=542>
+
+am_create_testdir=empty
+. test-init.sh
+
+plan_ 10
+
+chk ()
+{
+ if test -f /bin/rm; then
+ command_ok_ "/bin/rm $*" /bin/rm "$@"
+ else
+ skip_ -r "/bin/rm not found"
+ fi
+ command_ok_ "rm $*" rm "$@"
+}
+
+chk -f
+chk -rf
+chk -fr
+chk -f -r
+chk -r -f
+
+:
diff --git a/t/src-acsubst.sh b/t/src-acsubst.sh
new file mode 100644
index 000000000..cf5722e93
--- /dev/null
+++ b/t/src-acsubst.sh
@@ -0,0 +1,44 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure config substitution in _SOURCES fails.
+
+. test-init.sh
+
+echo AC_PROG_CC >> configure.ac
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = x y
+x_SOURCES = x.c @FOO@
+bar = @FOO@
+foo = $(bar)
+EXTRA_y_SOURCES = $(foo) y.c
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+
+cat > exp-err << 'END'
+Makefile.am:2: error: 'x_SOURCES' includes configure substitution '@FOO@';
+Makefile.am:2: configure substitutions are not allowed in _SOURCES variables
+Makefile.am:3: error: 'bar' includes configure substitution '@FOO@'
+Makefile.am:3: and is referred to from 'EXTRA_y_SOURCES';
+Makefile.am:3: configure substitutions are not allowed in _SOURCES variables
+END
+
+diff exp-err stderr
+
+:
diff --git a/t/stamph2.sh b/t/stamph2.sh
new file mode 100644
index 000000000..72afbd721
--- /dev/null
+++ b/t/stamph2.sh
@@ -0,0 +1,68 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure stamp-h* files are created where we expect
+. test-init.sh
+
+cat >> configure.ac << END
+AC_CONFIG_HEADERS([1.h
+ 2.h:config.hin
+ 3.h:sdir1/config1.hin])
+AC_CONFIG_HEADERS([sdir1/4.h
+ sdir1/5.h:config.hin
+ sdir1/6.h:sdir1/config1.hin
+ sdir1/7.h:sdir2/config2.hin])
+AC_OUTPUT
+END
+
+: > Makefile.am
+mkdir sdir1
+mkdir sdir2
+: > config.hin
+: > 1.h.in
+: > sdir1/4.h.in
+: > sdir1/config1.hin
+: > sdir2/config2.hin
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+
+test -f stamp-h1
+test -f stamp-h2
+test -f stamp-h3
+test -f sdir1/stamp-h4
+test -f sdir1/stamp-h5
+test -f sdir1/stamp-h6
+test -f sdir1/stamp-h7
+
+# Make sure './config.status foo' creates the right stamp file.
+# Report from Sander Niemeijer.
+
+rm -f stamp-h*
+rm -f sdir1/stamp-h*
+
+./config.status sdir1/7.h 2.h sdir1/4.h
+test ! -e stamp-h1
+test -f stamp-h2
+test ! -e stamp-h3
+test -f sdir1/stamp-h4
+test ! -e sdir1/stamp-h5
+test ! -e sdir1/stamp-h6
+test -f sdir1/stamp-h7
+
+:
diff --git a/t/stdinc.sh b/t/stdinc.sh
new file mode 100644
index 000000000..c4b5c21fb
--- /dev/null
+++ b/t/stdinc.sh
@@ -0,0 +1,62 @@
+#! /bin/sh
+# Copyright (C) 2007-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure the standard include order is stable.
+# Report by Kent Boortz.
+
+required=cc
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_CONFIG_HEADERS([sub/config.h])
+AC_CONFIG_FILES([sub/bar.h])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo
+foo_SOURCES = foo.c
+BUILT_SOURCES = bar.h
+END
+
+mkdir sub
+
+cat >foo.c <<'END'
+#include <config.h>
+#include <bar.h>
+int main() { return bar (); }
+END
+cat >bar.h <<'END'
+int bar () { return 0; }
+END
+cat >sub/bar.h.in <<'END'
+choke me
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOHEADER
+$AUTOMAKE
+
+mkdir build
+cd build
+../configure -C
+$MAKE
+
+cd ..
+./configure -C
+$MAKE
diff --git a/t/stdlib.sh b/t/stdlib.sh
new file mode 100644
index 000000000..dbbac7671
--- /dev/null
+++ b/t/stdlib.sh
@@ -0,0 +1,51 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test "not a standard library" error.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+END
+
+cat > Makefile.am << 'END'
+noinst_LIBRARIES = sub/foo
+include $(srcdir)/foo.mk
+END
+
+cat > foo.mk << 'END'
+## A dummy automake comment.
+a = x \
+ y
+# A dummy make comment.
+lib_LIBRARIES = zardoz.a
+END
+
+: > ar-lib
+
+$ACLOCAL
+AUTOMAKE_fails
+badname='not a standard library name'
+# We're specifically testing for line-number information.
+grep "^Makefile\\.am:1:.*'sub/foo'.*$badname" stderr
+grep "^Makefile\\.am:1:.*sub/libfoo\\.a" stderr
+grep "^foo\\.mk:5:.*'zardoz\\.a'.*$badname" stderr
+grep "^foo\\.mk:5:.*libzardoz\\.a" stderr
+
+:
diff --git a/t/stdlib2.sh b/t/stdlib2.sh
new file mode 100644
index 000000000..7ca5d7218
--- /dev/null
+++ b/t/stdlib2.sh
@@ -0,0 +1,94 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check for AM_LDFLAGS = -module
+# Report from Kevin P. Fleming.
+required=libtool
+. test-init.sh
+
+: > README
+: > NEWS
+: > AUTHORS
+: > ChangeLog
+: > ltconfig
+: > ltmain.sh
+: > config.guess
+: > config.sub
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_LIBTOOL
+AC_OUTPUT
+END
+
+: > Makefile.inc
+
+cat > Makefile.am << 'END'
+include Makefile.inc
+lib_LTLIBRARIES = nonstandard.la
+nonstandard_la_SOURCES = foo.c
+FOO = -module
+END
+
+$ACLOCAL
+AUTOMAKE_fails --add-missing --gnu
+grep 'Makefile.am:2:.*nonstandard.la.*standard libtool library name' stderr
+grep 'Makefile.am:2:.*libnonstandard.la' stderr
+
+# We will use -Wno-gnu to disable the warning about setting LDFLAGS (below)
+# Make sure nonstandard names are diagnosed anyway.
+AUTOMAKE_fails --add-missing --gnu -Wno-gnu
+grep 'Makefile.am:2:.*nonstandard.la.*standard libtool library name' stderr
+grep 'Makefile.am:2:.*libnonstandard.la' stderr
+
+# Make sure nonstandard_la_LDFLAGS is read even if LDFLAGS is used.
+cat >Makefile.inc <<'EOF'
+LDFLAGS = -lfoo
+nonstandard_la_LDFLAGS = $(FOO)
+EOF
+$AUTOMAKE -Wno-gnu
+
+# Make sure LDFLAGS is read even if nonstandard_la_LDFLAGS is used.
+cat >Makefile.inc <<'EOF'
+LDFLAGS = $(FOO)
+nonstandard_la_LDFLAGS = -lfoo
+EOF
+$AUTOMAKE -Wno-gnu
+
+# Make sure AM_LDFLAGS is not read if foo_LDFLAGS is used.
+cat >Makefile.inc <<'EOF'
+nonstandard_la_LDFLAGS = -lfoo
+AM_LDFLAGS = -module
+EOF
+AUTOMAKE_fails
+grep 'Makefile.am:2:.*nonstandard.la.*standard libtool library name' stderr
+grep 'Makefile.am:2:.*libnonstandard.la' stderr
+
+echo 'AM_LDFLAGS = -module' > Makefile.inc
+$AUTOMAKE
+
+# For module, Automake should not suggest the lib prefix.
+cat > Makefile.am << 'END'
+include Makefile.inc
+lib_LTLIBRARIES = nonstandard
+nonstandard_SOURCES = foo.c
+FOO = -module
+END
+
+AUTOMAKE_fails
+grep "Makefile.am:2:.*'nonstandard'.*standard libtool module name" stderr
+grep 'Makefile.am:2:.*nonstandard.la' stderr
diff --git a/t/strictness-override.sh b/t/strictness-override.sh
new file mode 100644
index 000000000..6a775b36e
--- /dev/null
+++ b/t/strictness-override.sh
@@ -0,0 +1,123 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# The strictness specified in Makefile.am:AUTOMAKE_OPTIONS should
+# override that specified in configure.ac:AM_INIT_AUTOMAKE, and both
+# should override the strictness specified on the command line.
+# NOTE: the current semantics might not be the best one (even if it has
+# been in place for quite a long time); see also Automake bug #7673.
+# Update this test if the semantics are changed.
+
+. test-init.sh
+
+# We want complete control over automake options.
+AUTOMAKE=$am_original_AUTOMAKE
+
+cat > Makefile.am <<'END'
+AUTOMAKE_OPTIONS =
+END
+
+set_strictness ()
+{
+ set +x
+ sed <$2 >$2-t -e "s|^\\(AUTOMAKE_OPTIONS\\) *=.*|\\1 = $1|" \
+ -e "s|^\\(AM_INIT_AUTOMAKE\\).*|\\1([$1])|"
+ mv -f $2-t $2
+ set -x
+ cat $2
+}
+
+ok ()
+{
+ $AUTOMAKE -Werror $*
+}
+
+ko ()
+{
+ AUTOMAKE_fails $*
+ grep 'required file.*README' stderr
+}
+
+$ACLOCAL
+
+# Leave out only one of the required files, to avoid too much
+# repetition in the error messages.
+touch INSTALL NEWS AUTHORS ChangeLog COPYING
+
+rm -rf autom4te*.cache
+set_strictness '' Makefile.am
+set_strictness '' configure.ac
+ko --gnu
+ko
+ok --foreign
+
+rm -rf autom4te*.cache
+set_strictness 'gnu' Makefile.am
+set_strictness '' configure.ac
+ko --gnu
+ko
+ko --foreign
+
+rm -rf autom4te*.cache
+set_strictness '' Makefile.am
+set_strictness 'gnu' configure.ac
+ko --gnu
+ko
+ko --foreign
+
+rm -rf autom4te*.cache
+set_strictness 'foreign' Makefile.am
+set_strictness '' configure.ac
+ok --gnu
+ok
+ok --foreign
+
+rm -rf autom4te*.cache
+set_strictness '' Makefile.am
+set_strictness 'foreign' configure.ac
+ok --gnu
+ok
+ok --foreign
+
+rm -rf autom4te*.cache
+set_strictness 'gnu' Makefile.am
+set_strictness 'gnu' configure.ac
+ko --gnu
+ko
+ko --foreign
+
+rm -rf autom4te*.cache
+set_strictness 'foreign' Makefile.am
+set_strictness 'foreign' configure.ac
+ok --gnu
+ok
+ok --foreign
+
+rm -rf autom4te*.cache
+set_strictness 'foreign' Makefile.am
+set_strictness 'gnu' configure.ac
+ok --gnu
+ok
+ok --foreign
+
+rm -rf autom4te*.cache
+set_strictness 'gnu' Makefile.am
+set_strictness 'foreign' configure.ac
+ko --gnu
+ko
+ko --foreign
+
+:
diff --git a/t/strictness-precedence.sh b/t/strictness-precedence.sh
new file mode 100644
index 000000000..d27370d0d
--- /dev/null
+++ b/t/strictness-precedence.sh
@@ -0,0 +1,77 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# On the command line, in AM_INIT_AUTOMAKE, and in AUTOMAKE_OPTIONS,
+# strictness specified later should take precedence over strictness
+# specified earlier.
+
+. test-init.sh
+
+# We want complete control over automake options.
+AUTOMAKE=$am_original_AUTOMAKE
+
+cat > Makefile.am <<'END'
+AUTOMAKE_OPTIONS =
+END
+
+set_strictness ()
+{
+ set +x
+ sed <$2 >$2-t -e "s|^\\(AUTOMAKE_OPTIONS\\) *=.*|\\1 = $1|" \
+ -e "s|^\\(AM_INIT_AUTOMAKE\\).*|\\1([$1])|"
+ mv -f $2-t $2
+ set -x
+ cat $2
+}
+
+ok ()
+{
+ $AUTOMAKE -Werror $*
+}
+
+ko ()
+{
+ AUTOMAKE_fails $*
+ grep 'required file.*README' stderr
+}
+
+# Leave out only one of the required files, to avoid too much
+# repetition in the error messages.
+touch INSTALL NEWS AUTHORS ChangeLog COPYING
+
+$ACLOCAL
+ko --foreign --gnu
+ok --gnu --foreign
+
+set_strictness '' Makefile.am
+set_strictness 'gnu foreign' configure.ac
+rm -rf autom4te*.cache
+$ACLOCAL
+ok
+set_strictness 'foreign gnu' configure.ac
+rm -rf autom4te*.cache
+$ACLOCAL
+ko
+
+set_strictness '' configure.ac
+rm -rf autom4te*.cache
+$ACLOCAL
+set_strictness 'gnu foreign' Makefile.am
+ok
+set_strictness 'foreign gnu' Makefile.am
+ko
+
+:
diff --git a/t/strip.sh b/t/strip.sh
new file mode 100644
index 000000000..96c326a32
--- /dev/null
+++ b/t/strip.sh
@@ -0,0 +1,50 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for install-strip.
+
+required=cc
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_SCRIPTS = foo
+END
+
+cat > foo << 'END'
+#! /bin/sh
+echo Maude
+END
+
+chmod +x foo
+
+mkdir install
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+prefix=$(cd install && pwd) || exit 99
+./configure --prefix="$prefix"
+$MAKE
+$MAKE install-strip
+diff foo "$prefix"/bin/foo
+
+:
diff --git a/t/strip2.sh b/t/strip2.sh
new file mode 100644
index 000000000..6c9045d76
--- /dev/null
+++ b/t/strip2.sh
@@ -0,0 +1,46 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Ensure install-strip works when STRIP consists of more than one word.
+# This test needs GNU binutils strip. See sister test 'strip3.sh'.
+
+required='cc strip'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo
+lib_LIBRARIES = libfoo.a
+END
+
+echo 'int main (void) { return 0; }' > foo.c
+echo 'int foo (void) { return 0; }' > libfoo.c
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure --prefix="$(pwd)/inst" STRIP='strip --verbose'
+$MAKE
+$MAKE install-strip
+
+:
diff --git a/t/strip3.sh b/t/strip3.sh
new file mode 100644
index 000000000..e9c845902
--- /dev/null
+++ b/t/strip3.sh
@@ -0,0 +1,48 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Ensure install-strip works when STRIP consists of more than one word.
+# This test needs GNU binutils strip. Libtool variant. See sister
+# test 'strip2.sh'.
+
+required='cc libtoolize strip'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_LIBTOOL
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo
+lib_LTLIBRARIES = libfoo.la
+END
+
+echo 'int main (void) { return 0; }' > foo.c
+echo 'int foo (void) { return 0; }' > libfoo.c
+
+libtoolize
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure --prefix="$(pwd)/inst" STRIP='strip --verbose'
+$MAKE
+$MAKE install-strip
+
+:
diff --git a/t/subdir-ac-subst.sh b/t/subdir-ac-subst.sh
new file mode 100644
index 000000000..594891319
--- /dev/null
+++ b/t/subdir-ac-subst.sh
@@ -0,0 +1,94 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# The for conditional SUBDIRS.
+# SUBDIRS + AC_SUBST setup from the manual.
+# Lots of lines here are duplicated in 'subcond-am-cond.sh'.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+if test "$want_opt" = yes; then
+ MAYBE_OPT=opt
+else
+ MAYBE_OPT=
+fi
+AC_SUBST([MAYBE_OPT])
+AC_CONFIG_FILES([src/Makefile opt/Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+SUBDIRS = src $(MAYBE_OPT)
+DIST_SUBDIRS = src opt
+
+# Testing targets.
+#
+# We want to ensure that
+# - src/source and opt/source are always distributed.
+# - src/result is always built
+# - opt/result is built conditionally
+#
+# We rely on 'distcheck' to run 'check-local' and use
+# 'sanity1' and 'sanity2' as evidences that test-build was run.
+
+test_rootdir = $(top_builddir)/../../..
+
+test-build: all
+ test -f src/result
+ if test -n "$(MAYBE_OPT)"; then \
+ test -f opt/result || exit 1; \
+ : > $(test_rootdir)/sanity2 || exit 1; \
+ else \
+ test ! -f opt/result || exit 1; \
+ : > $(test_rootdir)/sanity1 || exit 1; \
+ fi
+
+test-dist: distdir
+ test -f $(distdir)/src/source
+ test -f $(distdir)/opt/source
+
+check-local: test-build test-dist
+END
+
+mkdir src opt
+: > src/source
+: > opt/source
+
+cat > src/Makefile.am <<'END'
+EXTRA_DIST = source
+all-local: result
+CLEANFILES = result
+
+result: source
+ cp $(srcdir)/source result
+END
+
+# We want in opt/ the same Makefile as in src/. Let's exercise 'include'.
+cat > opt/Makefile.am <<'END'
+include ../src/Makefile.am
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+./configure
+$MAKE distcheck
+test -f sanity1
+DISTCHECK_CONFIGURE_FLAGS=want_opt=yes $MAKE distcheck
+test -f sanity2
+
+:
diff --git a/t/subdir-add-pr46.sh b/t/subdir-add-pr46.sh
new file mode 100644
index 000000000..339645c5e
--- /dev/null
+++ b/t/subdir-add-pr46.sh
@@ -0,0 +1,96 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure that adding a new directory works.
+# This test runs 'make' from the top-level directory, the sister
+# test 'subdir-add2-pr46.sh' do it from a subdirectory.
+# PR automake/46
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+: > Makefile.am
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+$MAKE
+
+# Now add new directories.
+
+# First we add a new directory by modifying configure.ac directly.
+# We update configure.ac *before* updating sub/Makefile.am; the sister
+# test 'subdir-add2-pr46.sh' does it in the other way: it updates
+# confiles.m4 (which is m4_included by configure.ac there) after
+# Makefile.am.
+
+# Modified configure dependencies must be newer than config.status.
+$sleep
+sed <configure.ac >configure.tmp -e '/^AC_OUTPUT$/i\
+AC_CONFIG_FILES([maude/Makefile])\
+m4_include([confile.m4])\
+' # Last newline required by older OpenBSD sed.
+mv -f configure.tmp configure.ac
+
+cat configure.ac # For debugging.
+
+: > confile.m4
+
+mkdir maude
+
+cat > maude/Makefile.am << 'END'
+include_HEADERS = foo.h
+END
+
+: > maude/foo.h
+
+echo 'SUBDIRS = maude' >> Makefile.am
+
+# We want a simple rebuild to create maude/Makefile automatically.
+$MAKE
+grep '^SUBDIRS = *maude *$' Makefile.in
+grep '^SUBDIRS = *maude *$' Makefile
+test -f maude/Makefile
+
+# Then we add a new directory by modifying a file included (through
+# 'm4_include') by configure.ac.
+mkdir maude2
+# Modified configure dependencies must be newer than config.status.
+$sleep
+cat >> confile.m4 << 'END'
+AC_CONFIG_FILES([maude2/Makefile])
+AC_SUBST([GREPME])
+END
+: > maude2/Makefile.am
+echo 'SUBDIRS += maude2' >> Makefile.am
+
+# We want a simple rebuild to create maude2/Makefile and update
+# all other Makefiles automatically.
+$MAKE
+grep '^SUBDIRS =.* maude2' Makefile.in
+grep '^SUBDIRS =.* maude2' Makefile
+
+for ext in '.in' ''; do
+ for d in . maude maude2; do
+ grep '^GREPME =' $d/Makefile$ext
+ done
+done
+
+:
diff --git a/t/subdir-add2-pr46.sh b/t/subdir-add2-pr46.sh
new file mode 100644
index 000000000..2a4d5c00a
--- /dev/null
+++ b/t/subdir-add2-pr46.sh
@@ -0,0 +1,97 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure that adding a new directory works, even from
+# subdirectories. The sister test 'subdir-add-pr46.sh' makes sure
+# it works when make is run from the top-level directory.
+# PR automake/46
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_MACRO_DIR([m4])
+m4_include([confiles.m4])
+MORE_DEFS
+AC_OUTPUT
+END
+
+echo 'AC_CONFIG_FILES([sub/Makefile])' > confiles.m4
+
+cat > Makefile.am << 'END'
+SUBDIRS = sub
+END
+
+mkdir sub
+
+: > sub/Makefile.am
+
+mkdir m4
+echo 'AC_DEFUN([MORE_DEFS], [])' > m4/moredefs.m4
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+$MAKE
+
+# Now add new directories.
+
+# The first step users typically do when adding a new subdir is editing
+# configure.ac. That is already tested by 'subdir-add-pr46.sh' though,
+# so here we try to just edit a file that is included by configure.ac,
+# without touching configure.ac itself.
+
+mkdir sub/maude
+cat > sub/maude/Makefile.am << 'END'
+include_HEADERS = foo.h
+END
+
+: > sub/maude/foo.h
+
+echo 'SUBDIRS = maude' >> sub/Makefile.am
+
+mkdir maude
+: > maude/Makefile.am
+
+# Update confiles.m4 *after* updating sub/Makefile.am; the sister test
+# 'subdir-add-pr46.sh' does it the in other way: it updates configure.ac
+# before Makefile.am. We sleep here because modified configure
+# dependencies must be newer than config.status.
+$sleep
+echo 'AC_CONFIG_FILES([maude/Makefile sub/maude/Makefile])' >> confiles.m4
+
+# We want a simple rebuild from sub/ to create sub/maude/Makefile
+# and maude/Makefile automatically.
+cd sub
+$MAKE
+cd ..
+grep '^SUBDIRS = *maude *$' sub/Makefile.in
+grep '^SUBDIRS = *maude *$' sub/Makefile
+test -f maude/Makefile
+test -f sub/maude/Makefile
+
+# Make sure the dependencies of aclocal.m4 or honored at least from
+# the top-level directory.
+echo 'AC_DEFUN([MORE_DEFS], [AC_SUBST([GREPME])])' > m4/moredefs.m4
+$MAKE
+
+for ext in '.in' ''; do
+ for d in . maude sub sub/maude; do
+ grep '^GREPME =' $d/Makefile$ext
+ done
+done
+
+:
diff --git a/t/subdir-am-cond.sh b/t/subdir-am-cond.sh
new file mode 100644
index 000000000..042bb3fa5
--- /dev/null
+++ b/t/subdir-am-cond.sh
@@ -0,0 +1,93 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# The for conditional SUBDIRS.
+# SUBDIRS + AM_CONDITIONAL setup from the manual.
+# Lots of lines here are duplicated in 'subdir-ac-subst.sh'.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AM_CONDITIONAL([COND_OPT], [test "$want_opt" = yes])
+AC_CONFIG_FILES([src/Makefile opt/Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+if COND_OPT
+ MAYBE_OPT = opt
+endif
+SUBDIRS = src $(MAYBE_OPT)
+
+# Testing targets.
+#
+# We want to ensure that
+# - src/source and opt/source are always distributed.
+# - src/result is always built
+# - opt/result is built conditionally
+#
+# We rely on 'distcheck' to run 'check-local' and use
+# 'sanity1' and 'sanity2' as evidences that test-build was run.
+
+test_rootdir = $(top_builddir)/../../..
+
+if COND_OPT
+test-build: all
+ test -f src/result
+ test -f opt/result
+ : > $(test_rootdir)/sanity2
+else
+test-build: all
+ test -f src/result
+ test ! -f opt/result
+ : > $(test_rootdir)/sanity1
+endif
+
+test-dist: distdir
+ test -f $(distdir)/src/source
+ test -f $(distdir)/opt/source
+
+check-local: test-build test-dist
+END
+
+mkdir src opt
+: > src/source
+: > opt/source
+
+cat > src/Makefile.am <<'END'
+EXTRA_DIST = source
+all-local: result
+CLEANFILES = result
+
+result: source
+ cp $(srcdir)/source result
+END
+
+# We want in opt/ the same Makefile as in src/. Let's exercise 'include'.
+cat > opt/Makefile.am <<'END'
+include ../src/Makefile.am
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+./configure
+$MAKE distcheck
+test -f sanity1
+DISTCHECK_CONFIGURE_FLAGS=want_opt=yes $MAKE distcheck
+test -f sanity2
+
+:
diff --git a/t/subdir-cond-err.sh b/t/subdir-cond-err.sh
new file mode 100644
index 000000000..2263fbc09
--- /dev/null
+++ b/t/subdir-cond-err.sh
@@ -0,0 +1,40 @@
+#! /bin/sh
+# Copyright (C) 1997-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check SUBDIRS set based on conditionals.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_CONDITIONAL([TEST], [true])
+END
+
+cat > Makefile.am << 'END'
+if TEST
+DIR = dir1
+else
+DIR = dir2
+endif
+SUBDIRS = $(DIR)
+END
+
+mkdir dir1
+
+$ACLOCAL
+AUTOMAKE_fails
+grep '^Makefile\.am:4:.*dir2.*does not exist' stderr
+
+:
diff --git a/t/subdir-cond-gettext.sh b/t/subdir-cond-gettext.sh
new file mode 100644
index 000000000..5b524b119
--- /dev/null
+++ b/t/subdir-cond-gettext.sh
@@ -0,0 +1,44 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# It is ok to have a conditional SUBDIRS when using gettext.
+
+required=gettext
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_GNU_GETTEXT
+AM_CONDITIONAL([MAUDE], [true])
+ALL_LINGUAS=
+AC_SUBST([ALL_LINGUAS])
+END
+
+mkdir po intl
+: >config.rpath
+
+cat > Makefile.am << 'END'
+if MAUDE
+SUBDIRS = po intl
+else
+SUBDIRS =
+endif
+END
+
+$ACLOCAL
+# Gettext wants config.guess etc.
+$AUTOMAKE --add-missing
+
+:
diff --git a/t/subdir-distclean.sh b/t/subdir-distclean.sh
new file mode 100644
index 000000000..3dd11e56c
--- /dev/null
+++ b/t/subdir-distclean.sh
@@ -0,0 +1,103 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that "./configure && make && make distclean" is actually a
+# no-op, even when conditional SUBDIRS are involved.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_FILES([sub1/Makefile sub2/Makefile sub1/subsub/Makefile])
+AM_CONDITIONAL([COND], [false])
+AC_SUBST([extra_subdirs], [''])
+AC_OUTPUT
+END
+
+mkdir sub1 sub2 sub1/subsub
+
+cat > Makefile.am << 'END'
+SUBDIRS = sub1
+if COND
+SUBDIRS += sub2
+endif
+END
+
+cat > sub1/Makefile.am << 'END'
+all-local:
+ : > run
+CLEANFILES = run
+SUBDIRS = @extra_subdirs@
+DIST_SUBDIRS = subsub
+END
+
+cat > sub2/Makefile.am << 'END'
+all-local:
+ @echo "Should not run in `pwd`!"
+ exit 1
+DISTCLEANFILES = oops
+END
+cp sub2/Makefile.am sub1/subsub/Makefile.am
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -c --add-missing
+
+./configure
+
+test -f sub1/Makefile
+test -f sub2/Makefile
+test -f sub1/subsub/Makefile
+
+$MAKE
+test -f sub1/run
+touch sub2/oops sub1/subsub/oops
+
+$MAKE distclean
+test ! -e sub1/run
+test ! -e sub2/oops
+test ! -e sub1/subsub/oops
+test ! -e sub1/Makefile
+test ! -e sub2/Makefile
+test ! -e sub1/subsub/Makefile
+
+mkdir build
+cd build
+
+../configure
+
+$MAKE
+
+test -f sub1/Makefile
+test -f sub2/Makefile
+test -f sub1/subsub/Makefile
+
+test -f sub1/run
+touch sub2/oops sub1/subsub/oops
+
+$MAKE maintainer-clean
+test ! -e sub1/run
+test ! -e sub2/oops
+test ! -e sub1/subsub/oops
+test ! -e sub1/Makefile
+test ! -e sub2/Makefile
+test ! -e sub1/subsub/Makefile
+
+cd ..
+
+./configure
+$MAKE distclean
+
+:
diff --git a/t/subdir-env-interference.sh b/t/subdir-env-interference.sh
new file mode 100644
index 000000000..50456b3d2
--- /dev/null
+++ b/t/subdir-env-interference.sh
@@ -0,0 +1,37 @@
+#! /bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# SUDBIRS with $fail set in the environment.
+
+. test-init.sh
+
+mkdir sub
+
+cat >> configure.ac <<'END'
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+END
+
+echo SUBDIRS = sub >Makefile.am
+: > sub/Makefile.am
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+env fail=1 $MAKE all clean
+
+:
diff --git a/t/subdir-keep-going-pr12554.sh b/t/subdir-keep-going-pr12554.sh
new file mode 100644
index 000000000..643e7886a
--- /dev/null
+++ b/t/subdir-keep-going-pr12554.sh
@@ -0,0 +1,70 @@
+#! /bin/sh
+# Copyright (C) 2013-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that the Automake-generated recursive rules are resilient against
+# false positives in deciding whether make is running with the '-k'
+# option, and thus whether a failure into one of the $(SUBDIRS) should
+# still prevent recursion in the following $(SUBDIRS) entries. See
+# automake bug#12544.
+
+. test-init.sh
+
+echo nil: | $MAKE -I . -f - || skip_ "$MAKE doesn't support the -I option"
+
+cat >> configure.ac <<'END'
+AC_CONFIG_FILES([sub1/Makefile sub2/Makefile])
+AC_OUTPUT
+END
+
+mkdir k ./--keep-going sub1 sub2
+
+cat > Makefile.am <<'END'
+SUBDIRS = sub1 sub2
+END
+
+cat > sub1/Makefile.am <<'END'
+all-local:
+ touch ko
+ false
+END
+cat > sub2/Makefile.am <<'END'
+all-local:
+ test -f ../sub1/ko
+ touch ok
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+
+st=0
+$MAKE -I k -I --keep-going \
+ TESTS='k --keep-going -k' AM_MAKEFLAGS="TESTS='k --keep-going -k'" \
+ || st=$?
+# Don't trust the exit status of "make -k" for non-GNU make.
+if using_gmake; then
+ test $st -gt 0 || exit 1
+fi
+test ! -r sub2/ok
+
+# Sanity check.
+st=0; $MAKE -k || st=$?
+if { using_gmake && test $st -eq 0; } || test ! -f sub2/ok; then
+ fatal_ '"make -k" not working as expected'
+fi
+
+:
diff --git a/t/subdir-order.sh b/t/subdir-order.sh
new file mode 100644
index 000000000..b06c62f65
--- /dev/null
+++ b/t/subdir-order.sh
@@ -0,0 +1,159 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# The $(SUDBIRS) entries are processed in the order they are specified.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_FILES([
+ sub0/Makefile
+ sub1/Makefile
+ sub2/Makefile
+ sub3/Makefile
+ sub3/a/Makefile
+ sub3/b/Makefile
+])
+AC_OUTPUT
+END
+
+mkdir sub0 sub1 sub2 sub3 sub3/a sub3/b
+
+cat > Makefile.am << 'END'
+SUBDIRS = sub2 sub1 sub3 sub0
+all-local:
+ test -f sub0/run
+ test -f sub1/run
+ test -f sub2/run
+ test -f sub3/run
+ test -f sub3/a/run
+ test -f sub3/b/run
+ test ! -f run
+ : > run
+
+CLEANFILES = \
+ run \
+ sub0/run \
+ sub1/run \
+ sub2/run \
+ sub3/run \
+ sub3/a/run \
+ sub3/b/run
+END
+
+cat > sub0/Makefile.am << 'END'
+all-local:
+ test ! -f $(top_builddir)/run
+ test -f $(top_builddir)/sub1/run
+ test -f $(top_builddir)/sub3/run
+ test -f $(top_builddir)/sub3/a/run
+ test -f $(top_builddir)/sub3/b/run
+ test ! -f run
+ : > run
+END
+
+cat > sub1/Makefile.am << 'END'
+all-local:
+ test ! -f $(top_builddir)/run
+ test ! -f $(top_builddir)/sub0/run
+ test -f $(top_builddir)/sub2/run
+ test ! -f $(top_builddir)/sub3/run
+ test ! -f $(top_builddir)/sub3/a/run
+ test ! -f $(top_builddir)/sub3/b/run
+ test ! -f run
+ : > run
+END
+
+
+cat > sub2/Makefile.am << 'END'
+all-local:
+ test ! -f $(top_builddir)/run
+ test ! -f $(top_builddir)/sub0/run
+ test ! -f $(top_builddir)/sub1/run
+ test ! -f $(top_builddir)/sub3/run
+ test ! -f $(top_builddir)/sub3/a/run
+ test ! -f $(top_builddir)/sub3/b/run
+ test ! -f run
+ : > run
+END
+
+cat > sub3/Makefile.am << 'END'
+SUBDIRS = b . a
+all-local:
+ test ! -f $(top_builddir)/run
+ test ! -f $(top_builddir)/sub0/run
+ test -f $(top_builddir)/sub1/run
+ test ! -f $(top_builddir)/sub3/a/run
+ test -f $(top_builddir)/sub3/b/run
+ test ! -f run
+ : > run
+END
+
+cat > sub3/a/Makefile.am << 'END'
+all-local:
+ test ! -f $(top_builddir)/run
+ test ! -f $(top_builddir)/sub0/run
+ test -f $(top_builddir)/sub1/run
+ test -f $(top_builddir)/sub3/b/run
+ test -f $(top_builddir)/sub3/run
+ test ! -f run
+ : > run
+END
+
+cat > sub3/b/Makefile.am << 'END'
+all-local:
+ test ! -f $(top_builddir)/run
+ test ! -f $(top_builddir)/sub0/run
+ test -f $(top_builddir)/sub1/run
+ test ! -f $(top_builddir)/sub3/b/run
+ test ! -f $(top_builddir)/sub3/run
+ test ! -f run
+ : > run
+END
+
+echo dummy: > Makefile
+if using_gmake; then
+ jobs=-j12
+elif $MAKE -j12; then
+ jobs=-j12
+elif $MAKE -j 12; then
+ jobs="-j 12"
+else
+ jobs=none
+fi
+rm -f Makefile
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -c --add-missing
+
+./configure
+
+for j in '' "$jobs"; do
+ test x"$j" = x"none" && continue
+ $MAKE $j
+ test -f run
+ test -f sub0/run
+ test -f sub1/run
+ test -f sub3/run
+ test -f sub3/a/run
+ test -f sub3/b/run
+ $MAKE clean
+ find . | grep 'run$' && exit 1
+ : # For shells with busted 'set -e'
+done
+
+:
diff --git a/t/subdir-subsub.sh b/t/subdir-subsub.sh
new file mode 100644
index 000000000..e65fa785d
--- /dev/null
+++ b/t/subdir-subsub.sh
@@ -0,0 +1,59 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure sub-sub-dirs work correctly.
+
+. test-init.sh
+
+mkdir one
+mkdir one/two
+
+cat >> configure.ac << 'END'
+AC_CONFIG_FILES([one/Makefile one/two/Makefile])
+AC_OUTPUT
+END
+
+# Files required because we are using '--gnu'.
+: > INSTALL
+: > NEWS
+: > README
+: > COPYING
+: > AUTHORS
+: > ChangeLog
+
+cat > Makefile.am << 'END'
+SUBDIRS = one
+END
+
+cat > one/Makefile.am << 'END'
+SUBDIRS = two
+END
+
+cat > one/two/Makefile.am << 'END'
+pkgdata_DATA = data.txt
+data.txt:
+ echo dummy >$@
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --gnu
+
+./configure
+$MAKE
+test -f one/two/data.txt
+
+:
diff --git a/t/subdir-with-slash.sh b/t/subdir-with-slash.sh
new file mode 100644
index 000000000..ee77e7ca6
--- /dev/null
+++ b/t/subdir-with-slash.sh
@@ -0,0 +1,55 @@
+#! /bin/sh
+# Copyright (C) 2004-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test SUDBIRS with '/' in them.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_FILES([src/subdir/Makefile src/subdir2/Makefile])
+AC_OUTPUT
+END
+
+echo SUBDIRS = src/subdir >Makefile.am
+
+mkdir src
+mkdir src/subdir
+mkdir src/subdir2
+
+: >src/subdir/foo
+: >src/subdir2/foo
+
+cat >src/subdir/Makefile.am <<'EOF'
+EXTRA_DIST = foo
+SUBDIRS = ../subdir2
+EOF
+
+cat >src/subdir2/Makefile.am <<'EOF'
+EXTRA_DIST = foo
+EOF
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --copy --add-missing
+./configure
+$MAKE distdir
+test -f $distdir/src/subdir/foo
+test -f $distdir/src/subdir2/foo
+$MAKE clean
+$MAKE distclean
+test ! -e src/subdir2/Makefile
+
+:
diff --git a/t/subdir.sh b/t/subdir.sh
new file mode 100644
index 000000000..bdce47755
--- /dev/null
+++ b/t/subdir.sh
@@ -0,0 +1,40 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure install-sh and mkinstalldirs correctly found in
+# subdirs.
+
+. test-init.sh
+
+mkdir zot
+
+cat >> configure.ac << 'END'
+AC_CONFIG_FILES([zot/Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+SUBDIRS = zot
+END
+
+cat > zot/Makefile.am << 'END'
+pkgdata_DATA =
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+:
diff --git a/t/subobj-clean-lt-pr10697.sh b/t/subobj-clean-lt-pr10697.sh
new file mode 100644
index 000000000..60d83ec03
--- /dev/null
+++ b/t/subobj-clean-lt-pr10697.sh
@@ -0,0 +1,168 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Removing subdir objects does not cause too much 'rm' invocations.
+# Also, if we rename a source file in a subdirectory, the stale
+# compiled object corresponding to the old name still gets removed
+# by "make mostlyclean". See automake bug#10697.
+# This is the libtool case. Keep this test in sync with sister test
+# 'subobj-clean-pr10697.sh', which deals with the non-libtool case.
+
+required='cc libtoolize'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_PROG_AR
+AC_PROG_LIBTOOL
+AC_PROG_CC
+AC_OUTPUT
+END
+
+oPATH=$PATH
+ocwd=$(pwd) || fatal_ "getting current working directory"
+
+# An rm(1) wrapper that fails when invoked too many times.
+mkdir rm-wrap
+max_rm_invocations=6
+count_file=$ocwd/rm-wrap/count
+cat > rm-wrap/rm <<END
+#!$AM_TEST_RUNNER_SHELL -e
+count=\$((\$(cat '$count_file') + 1))
+if ! test \$count -le $max_rm_invocations; then
+ echo "rm invoked more than $max_rm_invocations times" >&2
+ exit 1
+fi
+echo "\$count" > '$count_file'
+PATH='$oPATH'; export PATH
+exec rm "\$@"
+END
+chmod a+x rm-wrap/rm
+echo "0" > rm-wrap/count
+
+cat > Makefile.am <<'END'
+.PHONY: sanity-check-rm
+sanity-check-rm:
+ rm -f 1
+ rm -f 2
+ rm -f 3
+ rm -f 4
+ rm -f 5
+ rm -f 6
+ rm -f x && exit 1; :
+ echo "0" > rm-wrap/count
+
+AUTOMAKE_OPTIONS = subdir-objects
+lib_LTLIBRARIES = libfoo.la
+libfoo_la_SOURCES = \
+ sub1/a.c \
+ sub1/b.c \
+ sub1/c.c \
+ sub1/d.c \
+ sub1/e.c \
+ sub1/f.c \
+ sub2/a.c \
+ sub2/b.c \
+ sub2/c.c \
+ sub2/d.c \
+ sub2/e.c \
+ sub2/f.c \
+ main.c
+END
+
+mkdir sub1 sub2
+echo 'int libmain (void)' > main.c
+echo '{' >> main.c
+for i in 1 2; do
+ for j in a b c d e f; do
+ echo "void $j$i (void) { }" > sub$i/$j.c
+ echo " $j$i ();" >> main.c
+ done
+done
+echo ' return 0;' >> main.c
+echo '}' >> main.c
+cat main.c # For debugging.
+
+libtoolize
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+# The use of this variable is only meant to keep us better in sync
+# with the sister test 'subobj-clean-pr10697.sh'.
+OBJEXT=lo
+
+$MAKE
+
+# This must go after configure, since that will invoke rm many times.
+PATH=$ocwd/rm-wrap$PATH_SEPARATOR$PATH; export PATH
+$MAKE sanity-check-rm || fatal_ "rm wrapper doesn't work as expected"
+
+$MAKE mostlyclean
+ls -l . sub1 sub2
+for i in 1 2; do
+ for j in a b c d e f; do
+ test ! -e sub$i/$j.o
+ test ! -e sub$i/$j.obj
+ test ! -e sub$i/$j.lo
+ test -f sub$i/$j.c || exit 99 # Sanity check
+ done
+done
+
+PATH=$oPATH; export PATH
+rm -rf rm-wrap
+
+$MAKE clean
+$MAKE
+test -f sub1/a.$OBJEXT
+test -f sub2/d.$OBJEXT
+
+$sleep
+
+mv -f sub2/d.c sub2/x.c
+rm -f sub1/a.c
+
+sed -e '/ a1 ()/d' main.c > t
+mv -f t main.c
+
+sed -e '/sub1\/a\.c/d' -e 's|sub2/d\.c|sub2/x.c|' Makefile.am > t
+mv -f t Makefile.am
+
+using_gmake || $MAKE Makefile
+$MAKE
+test -f sub2/x.$OBJEXT
+
+# The stale objects are still there after a mere "make all" ...
+test -f sub1/a.$OBJEXT
+test -f sub2/a.$OBJEXT
+
+# ... but they get removed by "make mostlyclean" ...
+$MAKE mostlyclean
+test ! -e sub1/a.$OBJEXT
+test ! -e sub2/d.$OBJEXT
+
+# ... and do not get rebuilt ...
+$MAKE clean
+$MAKE all
+test ! -e sub1/a.$OBJEXT
+test ! -e sub2/d.$OBJEXT
+
+# ... while the non-stale files do.
+test -f sub1/b.$OBJEXT
+test -f sub2/x.$OBJEXT
+
+:
diff --git a/t/subobj-clean-pr10697.sh b/t/subobj-clean-pr10697.sh
new file mode 100644
index 000000000..f3a60f537
--- /dev/null
+++ b/t/subobj-clean-pr10697.sh
@@ -0,0 +1,163 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Removing subdir objects does not cause too much 'rm' invocations.
+# Also, if we rename a source file in a subdirectory, the stale
+# compiled object corresponding to the old name still gets removed by
+# "make mostlyclean". See automake bug#10697.
+# This is the non-libtool case. Keep this test in sync with sister test
+# 'subobj-clean-lt-pr10697.sh', which deals with the libtool case.
+
+required=cc
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_CONFIG_FILES([get-objext.sh:get-objext.in])
+AC_OUTPUT
+END
+
+echo "OBJEXT='@OBJEXT@'" > get-objext.in
+
+oPATH=$PATH
+ocwd=$(pwd) || fatal_ "getting current working directory"
+
+# An rm(1) wrapper that fails when invoked too many times.
+mkdir rm-wrap
+max_rm_invocations=3
+count_file=$ocwd/rm-wrap/count
+cat > rm-wrap/rm <<END
+#!$AM_TEST_RUNNER_SHELL -e
+count=\$((\$(cat '$count_file') + 1))
+test \$count -le $max_rm_invocations || {
+ echo "rm invoked more than $max_rm_invocations times" >&2
+ exit 1
+}
+echo "\$count" > '$count_file'
+PATH='$oPATH'; export PATH
+exec rm "\$@"
+END
+chmod a+x rm-wrap/rm
+echo "0" > rm-wrap/count
+
+cat > Makefile.am <<'END'
+.PHONY: sanity-check-rm
+sanity-check-rm:
+ rm -f 1
+ rm -f 2
+ rm -f 3
+ rm -f x && exit 1; :
+ echo "0" > rm-wrap/count
+
+AUTOMAKE_OPTIONS = subdir-objects
+bin_PROGRAMS = foo
+foo_SOURCES = \
+ sub1/a.c \
+ sub1/b.c \
+ sub1/c.c \
+ sub1/d.c \
+ sub1/e.c \
+ sub1/f.c \
+ sub2/a.c \
+ sub2/b.c \
+ sub2/c.c \
+ sub2/d.c \
+ sub2/e.c \
+ sub2/f.c \
+ main.c
+END
+
+mkdir sub1 sub2
+echo 'int main (void)' > main.c
+echo '{' >> main.c
+for i in 1 2; do
+ for j in a b c d e f; do
+ echo "void $j$i (void) { }" > sub$i/$j.c
+ echo " $j$i ();" >> main.c
+ done
+done
+echo ' return 0;' >> main.c
+echo '}' >> main.c
+cat main.c # For debugging.
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+test -f get-objext.sh
+. ./get-objext.sh
+
+$MAKE
+
+# This must go after configure, since that will invoke rm many times.
+PATH=$ocwd/rm-wrap$PATH_SEPARATOR$PATH; export PATH
+$MAKE sanity-check-rm || fatal_ "rm wrapper doesn't work as expected"
+
+$MAKE mostlyclean
+ls -l . sub1 sub2
+for i in 1 2; do
+ for j in a b c d e f; do
+ test ! -e sub$i/$j.o
+ test ! -e sub$i/$j.obj
+ test -f sub$i/$j.c || exit 99 # Sanity check
+ done
+done
+
+PATH=$oPATH; export PATH
+rm -rf rm-wrap
+
+$MAKE clean
+$MAKE
+test -f sub1/a.$OBJEXT
+test -f sub2/d.$OBJEXT
+
+$sleep
+
+mv -f sub2/d.c sub2/x.c
+rm -f sub1/a.c
+
+sed -e '/ a1 ()/d' main.c > t
+mv -f t main.c
+
+sed -e '/sub1\/a\.c/d' -e 's|sub2/d\.c|sub2/x.c|' Makefile.am > t
+mv -f t Makefile.am
+
+using_gmake || $MAKE Makefile
+$MAKE
+test -f sub2/x.$OBJEXT
+
+# The stale objects are still there after a mere "make all" ...
+test -f sub1/a.$OBJEXT
+test -f sub2/a.$OBJEXT
+
+# ... but they get removed by "make mostlyclean" ...
+$MAKE mostlyclean
+test ! -e sub1/a.$OBJEXT
+test ! -e sub2/d.$OBJEXT
+
+# ... and do not get rebuilt ...
+$MAKE clean
+$MAKE all
+test ! -e sub1/a.$OBJEXT
+test ! -e sub2/d.$OBJEXT
+
+# ... while the non-stale files do.
+test -f sub1/b.$OBJEXT
+test -f sub2/x.$OBJEXT
+
+:
diff --git a/t/subobj-indir-pr13928.sh b/t/subobj-indir-pr13928.sh
new file mode 100644
index 000000000..739083755
--- /dev/null
+++ b/t/subobj-indir-pr13928.sh
@@ -0,0 +1,51 @@
+#! /bin/sh
+# Copyright (C) 2013-2017 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 <https://www.gnu.org/licenses/>.
+
+# Expose part of Automake bug#13928: config.status generates broken
+# makefiles if the subdir-objects option is used and a _SOURCES
+# variable lists sources whose directory part is specified as a
+# make variable ("foo_SOURCES = $(src)/foo.c").
+
+required=cc
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_CC_C_O
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+AUTOMAKE_OPTIONS = subdir-objects
+src = s
+bin_PROGRAMS = foo
+foo_SOURCES = $(src)/foo.c
+END
+
+mkdir s
+echo 'int main(void) { return 0; }' > s/foo.c
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+$MAKE
+test -f s/.deps/foo.Po
+find . | $FGREP '$(src)' && exit 1
+$MAKE distcheck
+
+:
diff --git a/t/subobj-objname-clash.sh b/t/subobj-objname-clash.sh
new file mode 100644
index 000000000..7da9868c8
--- /dev/null
+++ b/t/subobj-objname-clash.sh
@@ -0,0 +1,104 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that object names don't clash when using subdir-objects.
+# The check is done for clashing programs, clashing libraries and
+# a program that clashes with a library
+
+. test-init.sh
+
+mkdir src
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_RANLIB
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = subdir-objects foreign
+noinst_PROGRAMS =
+noinst_LIBRARIES =
+
+# CLASHING PROGRAMS
+noinst_PROGRAMS += foo src/foo
+foo_SOURCES = src/foo.c src/main.c
+foo_CPPFLAGS = -DVAL=0
+src_foo_CPPFLAGS = -DVAL=1
+src_foo_SOURCES = src/foo.c src/main.c
+
+# CLASHING LIBS
+noinst_PROGRAMS += bar src/bar
+noinst_LIBRARIES += libbar.a src/libbar.a
+bar_SOURCES = src/main.c
+bar_LDADD = libbar.a
+src_bar_SOURCES = src/main.c
+src_bar_LDADD = src/libbar.a
+libbar_a_SOURCES = src/foo.c
+libbar_a_CPPFLAGS = -DVAL=0
+src_libbar_a_SOURCES = src/foo.c
+src_libbar_a_CPPFLAGS = -DVAL=1
+
+# CLASHING PROGRAM + LIB
+noinst_PROGRAMS += libzap_a src/zap
+noinst_LIBRARIES += src/libzap.a
+libzap_a_SOURCES = src/main.c src/foo.c
+libzap_a_CPPFLAGS = -DVAL=2
+src_zap_SOURCES = src/main.c
+src_zap_LDADD = src/libzap.a
+src_libzap_a_SOURCES = src/foo.c
+src_libzap_a_CPPFLAGS = -DVAL=3
+
+# NON-CLASHING
+noinst_PROGRAMS += src/foo-uniq
+src_foo_uniq_SOURCES = src/main.c src/foo.c
+src_foo_uniq_CPPFLAGS = -DVAL=4
+END
+
+cat > src/foo.c << 'END'
+int
+foo ()
+{
+ return VAL;
+}
+END
+
+cat > src/main.c << 'END'
+int foo (void);
+
+int
+main ()
+{
+ return foo ();
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+./configure
+$MAKE
+set +e
+./foo || fail_ "./foo should return 0"
+./src/foo; test $? = 1 || fail_ "./src/foo should return 1"
+./bar || fail_ "./bar should return 0"
+./src/bar; test $? = 1 || fail_ "./src/bar should return 1"
+./libzap_a; test $? = 2 || fail_ "./libfoo_a should return 2"
+./src/zap; test $? = 3 || fail_ "./src/prog_libfoo should return 3"
+./src/foo-uniq; test $? = 4 || fail_ "./foo_uniq should return 4"
+set -e
+$MAKE clean
diff --git a/t/subobj-pr13928-more-langs.sh b/t/subobj-pr13928-more-langs.sh
new file mode 100644
index 000000000..15bdd4ebe
--- /dev/null
+++ b/t/subobj-pr13928-more-langs.sh
@@ -0,0 +1,138 @@
+#! /bin/sh
+# Copyright (C) 2015 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 <https://www.gnu.org/licenses/>.
+
+# Expose part of automake bug#13928, also for non-C languages: if the
+# subdir-objects option is in use and a source file is listed in a
+# _SOURCES variable with a leading $(srcdir) component, Automake will
+# generate a Makefile that tries to create the corresponding object
+# file in $(srcdir) as well.
+
+required='cc c++ fortran77 fortran'
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_PROG_CC
+AC_PROG_CXX
+AC_PROG_F77
+AC_PROG_FC
+AM_CONDITIONAL([OBVIOUS], [:])
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+AUTOMAKE_OPTIONS = subdir-objects
+SUBDIRS = sub
+
+LESS = m/o/r/e
+
+noinst_PROGRAMS = test test2
+test_SOURCES = $(srcdir)/test.f90
+
+test2_SOURCES = $(indir)
+
+indir = ${indir2} $(empty)
+indir2 =
+if OBVIOUS
+indir2 += ${srcdir}/$(LESS)///test.f
+else
+endif
+
+test-objs:
+ ls -la @srcdir@ .
+ :
+ test ! -f @srcdir@/test.$(OBJEXT)
+ test -f test.$(OBJEXT)
+ test ! -f @srcdir@/m/o/r/e/test.$(OBJEXT)
+ test -f m/o/r/e/test.$(OBJEXT)
+ :
+ test ! -f @srcdir@/bar.$(OBJEXT)
+ test -f bar.$(OBJEXT)
+ test ! -f @srcdir@/baz.$(OBJEXT)
+ test -f baz.$(OBJEXT)
+ :
+ test ! -d @srcdir@/$(DEPDIR)
+ test ! -d @srcdir@/m/o/r/e/$(DEPDIR)
+ test -d $(DEPDIR)
+ test -d m/o/r/e/$(DEPDIR)
+
+check-local: test-objs
+END
+
+mkdir sub
+cat > sub/Makefile.am <<'END'
+AUTOMAKE_OPTIONS = subdir-objects
+bin_PROGRAMS = foo
+foo = baz
+foo_SOURCES = foo.h \
+ $(top_srcdir)/bar.cc \
+ ${top_srcdir}/$(foo).c
+END
+
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+mkfiles='Makefile.in sub/Makefile.in'
+$EGREP '(test|ba[rz])\.|DEPDIR|dirstamp|srcdir' $mkfiles # For debugging.
+$EGREP '\$.(top_)?srcdir./(test|ba[rz]|\$.foo.)\.[o$]' $mkfiles && exit 1
+$FGREP '\$.(top_)?srcdir./.*$(am__dirstamp)' $mkfiles && exit 1
+$FGREP '\$.(top_)?srcdir./.*$(DEPDIR)' $mkfiles && exit 1
+
+cat > test.f90 <<'EOF'
+ program foo
+ stop
+ end
+EOF
+
+mkdir -p m/o/r/e
+cp test.f90 m/o/r/e/test.f
+
+cat > sub/foo.h <<'END'
+#ifdef __cplusplus
+extern "C"
+#endif
+int foo (void);
+END
+
+cat > bar.cc <<'END'
+#include "foo.h"
+#include <iostream>
+int main (void)
+{
+ std::cout << "OK!" << "\n";
+ return foo ();
+}
+END
+
+cat > baz.c <<'END'
+#include "foo.h"
+int foo (void)
+{
+ return 0;
+}
+END
+
+mkdir build
+cd build
+../configure
+
+$MAKE
+$MAKE test-objs
+$MAKE distcheck
+
+:
diff --git a/t/subobj-vpath-pr13928.sh b/t/subobj-vpath-pr13928.sh
new file mode 100644
index 000000000..5f09515d3
--- /dev/null
+++ b/t/subobj-vpath-pr13928.sh
@@ -0,0 +1,127 @@
+#! /bin/sh
+# Copyright (C) 2013-2017 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 <https://www.gnu.org/licenses/>.
+
+# Expose part of automake bug#13928: if the subdir-objects option is
+# in use and a source file is listed in a _SOURCES variable with a
+# leading $(srcdir) component, Automake will generate a Makefile that
+# tries to create the corresponding object file in $(srcdir) as well.
+
+required=cc
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_PROG_CC
+AM_PROG_CC_C_O
+AM_CONDITIONAL([OBVIOUS], [:])
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+AUTOMAKE_OPTIONS = subdir-objects
+SUBDIRS = sub
+
+LESS = more
+
+noinst_PROGRAMS = test test2
+test_SOURCES = $(srcdir)/test.c
+
+test2_SOURCES = $(indir)
+
+indir =
+if OBVIOUS
+indir += ${srcdir}/$(LESS)/test.c
+else
+endif
+
+test-objs:
+ ls -la @srcdir@ .
+ :
+ test ! -f @srcdir@/test.$(OBJEXT)
+ test -f test.$(OBJEXT)
+ test ! -f @srcdir@/more/test.$(OBJEXT)
+ test -f more/test.$(OBJEXT)
+ :
+ test ! -f @srcdir@/bar.$(OBJEXT)
+ test -f bar.$(OBJEXT)
+ test ! -f @srcdir@/baz.$(OBJEXT)
+ test -f baz.$(OBJEXT)
+ :
+ test ! -d @srcdir@/$(DEPDIR)
+ test ! -d @srcdir@/more/$(DEPDIR)
+ test -d $(DEPDIR)
+ test -d more/$(DEPDIR)
+
+check-local: test-objs
+END
+
+mkdir sub
+cat > sub/Makefile.am <<'END'
+AUTOMAKE_OPTIONS = subdir-objects
+bin_PROGRAMS = foo
+foo_SOURCES = foo.h \
+ $(top_srcdir)/bar.c \
+ ${top_srcdir}/baz.c
+END
+
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+mkfiles='Makefile.in sub/Makefile.in'
+$EGREP '(test|ba[rz])\.|DEPDIR|dirstamp|srcdir' $mkfiles # For debugging.
+$EGREP '\$.(top_)?srcdir./(test|ba[rz])\.[o$]' $mkfiles && exit 1
+$FGREP '\$.(top_)?srcdir./.*$(am__dirstamp)' $mkfiles && exit 1
+$FGREP '\$.(top_)?srcdir./.*$(DEPDIR)' $mkfiles && exit 1
+
+cat > test.c <<'END'
+int main (void)
+{
+ return 0;
+}
+END
+
+mkdir more
+cp test.c more/test.c
+
+echo 'int foo (void);' > sub/foo.h
+
+cat > bar.c <<'END'
+#include "foo.h"
+int main (void)
+{
+ return foo ();
+}
+END
+
+cat > baz.c <<'END'
+#include "foo.h"
+int foo (void)
+{
+ return 0;
+}
+END
+
+mkdir build
+cd build
+../configure
+
+$MAKE
+$MAKE test-objs
+$MAKE distcheck
+
+:
diff --git a/t/subobj.sh b/t/subobj.sh
new file mode 100644
index 000000000..c5bc546ee
--- /dev/null
+++ b/t/subobj.sh
@@ -0,0 +1,91 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test of subdir objects with C and C++.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_PROG_CC
+AC_PROG_CXX
+AC_PROG_YACC
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+END
+
+$ACLOCAL
+: > ylwrap
+
+cat > Makefile.am << 'END'
+SUBDIRS = sub
+bin_PROGRAMS = wish
+wish_SOURCES = generic/a.c
+wish_SOURCES += another/z.cxx
+END
+
+mkdir sub
+cat > sub/Makefile.am << 'END'
+dream_SOURCES = generic/b.c more/r.y
+bin_PROGRAMS = dream
+END
+
+AUTOMAKE_fails
+grep "^Makefile\.am:3:.*'generic/a\.c'.* in a subdirectory" stderr
+grep "^Makefile\.am:[34]:.*'another/z\.cxx'.* in a subdirectory" stderr
+grep "^sub/Makefile\.am:1:.*'generic/b\.c'.* in a subdirectory" stderr
+grep "option 'subdir-objects' is disabled" stderr
+# Verbose tips should be given, but not too many times.
+for msg in \
+ "possible forward-incompatibility" \
+ "advi[sc]e.* 'subdir-objects' option throughout" \
+ "unconditionally.* object file.* same subdirectory" \
+; do
+ test $(grep -c "$msg" stderr) -eq 1
+done
+
+# Guard against stupid typos.
+grep 'subdir-object([^s]|$)' stderr && exit 1
+
+$AUTOMAKE -Wno-unsupported
+
+echo AUTOMAKE_OPTIONS = subdir-objects >> Makefile.am
+AUTOMAKE_fails
+grep "^Makefile\.am" stderr && exit 1
+grep "^sub/Makefile\.am:.*'generic/b\.c'.* in a subdirectory" stderr
+grep "option 'subdir-objects' is disabled" stderr
+
+sed 's/^AM_INIT_AUTOMAKE/&([subdir-objects])/' configure.ac > configure.tmp
+mv -f configure.tmp configure.ac
+$ACLOCAL --force
+$AUTOMAKE
+
+rm -f compile
+$AUTOMAKE --add-missing 2>stderr || { cat stderr >&2; exit 1; }
+cat stderr >&2
+# Make sure compile is installed, and that Automake says so.
+grep '^configure\.ac:[48]:.*install.*compile' stderr
+test -f compile
+
+grep '^generic/a\.\$(OBJEXT):' Makefile.in
+grep '^generic/b\.\$(OBJEXT):' sub/Makefile.in
+grep '^another/z\.\$(OBJEXT):' Makefile.in
+$EGREP '(^|[^/])[abz]\.\$(OBJEXT)' Makefile.in sub/Makefile.in && exit 1
+
+# Opportunistically test for a different bug.
+grep '^another/z\.\$(OBJEXT):.*dirstamp' Makefile.in
+grep '^generic/b\.\$(OBJEXT):.*dirstamp' sub/Makefile.in
+
+:
diff --git a/t/subobj10.sh b/t/subobj10.sh
new file mode 100644
index 000000000..2202a8b1f
--- /dev/null
+++ b/t/subobj10.sh
@@ -0,0 +1,55 @@
+#! /bin/sh
+# Copyright (C) 2006-2017 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 <https://www.gnu.org/licenses/>.
+
+# PR 492: Test asm subdir-objects.
+
+required='gcc -c-o'
+. test-init.sh
+
+cat > configure.ac << END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE([subdir-objects])
+
+AM_PROG_AS
+AM_PROG_AR
+AC_PROG_RANLIB
+
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+noinst_LIBRARIES = libfoo.a libbar.a
+libfoo_a_SOURCES = src/a.s b.s
+libbar_a_SOURCES = src/c.s d.s
+libbar_a_CCASFLAGS =
+END
+
+mkdir src
+: >src/a.s
+: >b.s
+: >src/c.s
+: >d.s
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+$MAKE
+$MAKE distcheck
+
+:
diff --git a/t/subobj11a.sh b/t/subobj11a.sh
new file mode 100644
index 000000000..6b8f2d983
--- /dev/null
+++ b/t/subobj11a.sh
@@ -0,0 +1,80 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test that automake works around a bug of Solaris Make. The bug is the
+# following. If we have a Makefile containg a file inclusion like this:
+# include .//foo.mk
+# Solaris make fails with a message like:
+# make: ... can't find '/foo.mk': No such file or directory
+# make: fatal error ... read of include file '/foo.mk' failed
+# (even if the file 'foo.mk' exists). The error disappear by collapsing
+# the repeated slash '/' characters into a single one.
+#
+# See also sister "grepping" test 'subobj11b.sh', and related test
+# 'subobj11c.sh'.
+
+required=cc
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = subdir-objects
+bin_PROGRAMS = foo
+## The './/' below is meant.
+foo_SOURCES = .//src/foo.c
+END
+
+mkdir src
+
+cat > src/foo.c << 'END'
+int main(void)
+{
+ return 0;
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure --enable-dependency-tracking
+
+depdir=$(sed -n 's/^ *DEPDIR *= *//p' Makefile)
+if test x"$depdir" != x; then
+ depdir=src/$depdir
+else
+ echo "$me: cannot extract value of DEPDIR from Makefile" >&2
+ exit 1
+fi
+
+ls -l "$depdir"
+test -f "$depdir"/foo.Po
+
+echo 'quux:; echo "z@rd@z" >$@' >> "$depdir"/foo.Po
+
+$MAKE quux
+$FGREP "z@rd@z" quux
+
+$MAKE
+
+DISTCHECK_CONFIGURE_FLAGS='--enable-dependency-tracking' $MAKE distcheck
+DISTCHECK_CONFIGURE_FLAGS='--disable-dependency-tracking' $MAKE distcheck
+
+:
diff --git a/t/subobj11b.sh b/t/subobj11b.sh
new file mode 100644
index 000000000..b340f3c74
--- /dev/null
+++ b/t/subobj11b.sh
@@ -0,0 +1,82 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test that automake works around a bug of Solaris Make. The bug is the
+# following. If we have a Makefile containg a file inclusion like this:
+# include .//foo.mk
+# Solaris make fails with a message like:
+# make: ... can't find '/foo.mk': No such file or directory
+# make: fatal error ... read of include file '/foo.mk' failed
+# (even if the file 'foo.mk' exists). The error disappear by collapsing
+# the repeated slash '/' characters into a single one.
+#
+# See also "semantic" sister test 'subobj11a.sh', and related test
+# 'subobj11c.sh'.
+
+. test-init.sh
+
+echo AC_PROG_CC >> configure.ac
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = subdir-objects
+bin_PROGRAMS = foo
+## The 'zardoz' sources should activate a code paths in Automake that
+## cannot be sensibly tested by sister test 'subobj11a.test'. The other
+## sources provide some sort of stress testing.
+foo_SOURCES = \
+ //server/zardoz0.c \
+ //server//zardoz1.c \
+ //server/path/to/zardoz2.c \
+ //server/another//path///to////zardoz3.c \
+ /foobar0.c \
+ ///foobar1.c \
+ ////foobar2.c \
+ /sub///foobar3.c \
+ ///sub/foobar4.c \
+ .//foobar5.c \
+ .//sub/foobar6.c \
+ ./sub//foobar7.c \
+ .//sub//foobar8.c \
+ sub/sub//sub///sub////foobar9.c
+END
+
+$ACLOCAL
+$AUTOMAKE -a
+
+grep '\.P' Makefile.in # For debugging.
+
+grep '//.*foobar\.P' Makefile.in && exit 1
+
+# These checks depend on automake internals, but presently this is
+# the only way to test the code path we are interested in.
+# Please update these checks when (and if) the relevant automake
+# internals are changed.
+for x in zardoz0 zardoz1 path/to/zardoz2 another/path/to/zardoz3; do
+ case $x in
+ */*) d=$(echo $x | sed 's,[^/]*$,,'); b=$(echo $x | sed 's,^.*/,,');;
+ *) d=''; b=$x;;
+ esac
+ # Be a little lax in the regexp, to account for automake conditionals,
+ # quoting, and similar stuff.
+ grep "[ ]//server/$d\\\$(DEPDIR)/$b\\.Po" Makefile.in
+done
+
+# Sanity checks.
+for i in 0 1 2 3 4 5 6 7 8 9; do
+ grep "\$(DEPDIR)/foobar$i\\.Po" Makefile.in
+done
+
+:
diff --git a/t/subobj11c.sh b/t/subobj11c.sh
new file mode 100644
index 000000000..b3e78b459
--- /dev/null
+++ b/t/subobj11c.sh
@@ -0,0 +1,48 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Automatic dependency tracking with subdir-objects option active:
+# check for a pathological case of slash-collapsing in the name of
+# included makefile fragments (containing dependency info).
+# See also related tests 'subobj11a.sh' and 'subobj11b.sh'.
+
+. test-init.sh
+
+echo AC_PROG_CC >> configure.ac
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = subdir-objects
+bin_PROGRAMS = foo
+foo_SOURCES = //zardoz.c
+END
+
+$ACLOCAL
+$AUTOMAKE -a
+
+#
+# This check depends on automake internals, but presently this is
+# the only way to test the code path we are interested in.
+# Please update these checks when (and if) the relevant automake
+# internals are changed.
+#
+# Be a little lax in the regexp, to account for automake conditionals,
+# quoting, and similar stuff.
+#
+# FIXME: Are we sure this is the most sensible output in our situation?
+#
+grep 'am__depfiles_remade =.* //\$(DEPDIR)/zardoz\.Po' Makefile.in
+
+:
diff --git a/t/subobj2.sh b/t/subobj2.sh
new file mode 100644
index 000000000..6cee18f7b
--- /dev/null
+++ b/t/subobj2.sh
@@ -0,0 +1,38 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test of subdir objects with C++.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CXX
+END
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = subdir-objects
+bin_PROGRAMS = wish
+wish_SOURCES = generic/a.cc generic/b.cxx
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+$FGREP 'generic/a.$(OBJEXT)' Makefile.in
+grep '[^/]a\.\$(OBJEXT)' Makefile.in && exit 1
+grep '.*-c -o' Makefile.in
+
+:
diff --git a/t/subobj4.sh b/t/subobj4.sh
new file mode 100644
index 000000000..dd464d934
--- /dev/null
+++ b/t/subobj4.sh
@@ -0,0 +1,50 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure '../foo/foo.cpp' generates a rule.
+# Report from Dave Brolley.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_CXX
+AC_CONFIG_FILES([d1/Makefile d2/Makefile])
+AC_OUTPUT
+END
+
+mkdir d1 d2
+
+cat > Makefile.am << 'END'
+SUBDIRS = d1 d2
+END
+
+cat > d1/Makefile.am << 'END'
+bin_PROGRAMS = z
+z_SOURCES = ../d2/z.c
+END
+
+cat > d2/Makefile.am << 'END'
+END
+
+: > d2/z.c
+
+$ACLOCAL
+$AUTOMAKE -Wno-unsupported
+
+grep '\$(CC) .*\.\./d2/z\.c' d1/Makefile.in
+
+:
diff --git a/t/subobj5.sh b/t/subobj5.sh
new file mode 100644
index 000000000..0b046baef
--- /dev/null
+++ b/t/subobj5.sh
@@ -0,0 +1,69 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test of subdir make dist rules.
+# From Robert Collins.
+
+required=cc
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_FILES([generic/Makefile])
+AC_PROG_CC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = subdir-objects
+bin_PROGRAMS = wish
+wish_SOURCES = generic/a.c
+
+.PHONY: test-distdir test-build
+test-distdir: distdir
+ ls -l $(distdir) $(distdir)/* ;: For debugging.
+ test ! -r $(distdir)/a.c
+ test -f $(distdir)/generic/a.c
+test-build: all
+ ls -l . generic ;: For debugging.
+ test -f generic/a.$(OBJEXT)
+ test -f wish$(EXEEXT)
+ test ! -r a.$(OBJEXT)
+ test ! -r a$(EXEEXT)
+ test ! -r generic/wish$(EXEEXT)
+ test ! -r generic/a$(EXEEXT)
+END
+
+mkdir generic
+: > generic/Makefile.am
+
+cat > generic/a.c << 'END'
+int main (void)
+{
+ return 0;
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --include-deps --copy --add-missing
+
+./configure
+
+$MAKE test-distdir
+$MAKE dist
+$MAKE test-build
+
+:
diff --git a/t/subobj6.sh b/t/subobj6.sh
new file mode 100644
index 000000000..f598c7f65
--- /dev/null
+++ b/t/subobj6.sh
@@ -0,0 +1,85 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test of subdir make distclean rules.
+# From Robert Collins.
+
+required=cc
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = subdir-objects
+bin_PROGRAMS = wish
+wish_SOURCES = generic/a.c
+
+test-all: all
+ test -f generic/$(am__dirstamp)
+test-mostlyclean: mostlyclean
+ test ! -f generic/a.o
+test-distclean: distclean
+ test ! -f generic/$(am__dirstamp)
+END
+
+mkdir generic
+cat > generic/a.c << 'END'
+#include <stdio.h>
+int main ()
+{
+ printf ("maude!\n");
+ return 0;
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --include-deps --copy --add-missing
+
+mkdir build
+cd build
+
+../configure
+$MAKE test-all
+$MAKE test-mostlyclean
+$MAKE test-distclean
+
+cd ..
+
+# Now test without the subdir.
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = subdir-objects
+bin_PROGRAMS = wish
+wish_SOURCES = a.c
+END
+
+mv generic/a.c a.c
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --include-deps --copy --add-missing
+
+mkdir build2
+cd build2
+
+../configure
+$MAKE
+$MAKE mostlyclean
+
+:
diff --git a/t/subobj7.sh b/t/subobj7.sh
new file mode 100644
index 000000000..313260684
--- /dev/null
+++ b/t/subobj7.sh
@@ -0,0 +1,38 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure AM_CFLAGS appears in subdir compilation rule.
+# Report from Steve M. Robbins.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = subdir-objects
+bin_PROGRAMS = wish
+wish_SOURCES = foo.c generic/a.c
+END
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+
+grep wish_CFLAGS Makefile.in && exit 1
+
+:
diff --git a/t/subobj8.sh b/t/subobj8.sh
new file mode 100644
index 000000000..d9d7d5fb5
--- /dev/null
+++ b/t/subobj8.sh
@@ -0,0 +1,46 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure 'compile' is included when subdir-objects is used in a subdir.
+
+. test-init.sh
+
+cat > configure.ac << END
+AC_INIT([$me], [1.0])
+AC_CONFIG_AUX_DIR([tools])
+AM_INIT_AUTOMAKE
+AC_PROG_CC
+AC_CONFIG_FILES([Makefile foo/Makefile])
+AC_OUTPUT
+END
+
+mkdir tools foo foo/bar
+
+cat > Makefile.am << 'END'
+SUBDIRS = foo
+END
+
+cat > foo/Makefile.am << 'END'
+AUTOMAKE_OPTIONS = subdir-objects
+bin_PROGRAMS = mumble
+mumble_SOURCES = bar/a.c
+END
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+test -f tools/compile
+
+:
diff --git a/t/subobj9.sh b/t/subobj9.sh
new file mode 100644
index 000000000..01d3b3497
--- /dev/null
+++ b/t/subobj9.sh
@@ -0,0 +1,87 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for PR 312.
+#
+# == Report ==
+# When using non-recursive make to build a libtoolize-library from
+# sources in a subdirectory, 'make distcheck' fails because of incomplete
+# cleanup. "make clean" tries to remove '*.o' and '.../<file>.lo' but
+# forgets '.../<file>.o'.
+
+required='c++ libtoolize'
+. test-init.sh
+
+cat > configure.ac << END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE([subdir-objects])
+AC_PROG_CXX
+AM_PROG_AR
+AM_PROG_LIBTOOL
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+noinst_LTLIBRARIES = libfoo.la
+libfoo_la_SOURCES = src/foo.cc .//src/bar.cc # The './/' is meant.
+.PHONY: print
+print:
+ @echo BEG1: "$(LTCXXCOMPILE)" :1END
+ @echo BEG2: "$(CXXLINK)" :2END
+END
+
+mkdir src
+cat > src/foo.cc << 'END'
+int doit2 (void);
+int doit (void)
+{
+ return doit2();
+}
+END
+
+cat > src/bar.cc << 'END'
+int doit2 (void)
+{
+ return 23;
+}
+END
+
+
+libtoolize --force
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+# Ensure './libtool --help' will use the right tool versions.
+export AUTOCONF AUTOMAKE
+
+# Opportunistically check that --tag=CXX is used when supported.
+if ./libtool --help | grep tag=TAG; then
+ run_make -O print
+ grep 'BEG1: .*--tag=CXX.*--mode=compile.* :1END' stdout
+ grep 'BEG2: .*--tag=CXX.*--mode=link.* :2END' stdout
+fi
+
+$MAKE
+run_make -M distcheck
+# GNU Make used to complain that the Makefile contained two rules
+# for 'src/.dirstamp' and './/src/.dirstamp'.
+grep 'overriding commands' output && exit 1
+
+:
diff --git a/t/subobjname.sh b/t/subobjname.sh
new file mode 100644
index 000000000..f3aa28d55
--- /dev/null
+++ b/t/subobjname.sh
@@ -0,0 +1,72 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure we reuse variables whenever possible, to limit
+# combinational explosion. (This test is named after the &subobjname
+# sub in Automake).
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_CONDITIONAL([FOO1], [some test])
+AM_CONDITIONAL([FOO2], [some test])
+AM_CONDITIONAL([FOO3], [some test])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+noinst_PROGRAMS = c d
+
+if FOO1
+A1=a1.c
+endif
+
+if FOO2
+A2=a2.c
+endif
+
+if FOO3
+A3=a3.c
+endif
+
+B=$(A1) $(A2) $(A3)
+
+c_SOURCES=$(B)
+d_SOURCES=$(B)
+END
+
+$ACLOCAL
+$AUTOMAKE -a
+
+# Sanity check: make sure am_c_OBJECTS and am_d_OBJECTS are used
+# in the Makefile. (This is an internal detail, so better make
+# sure we update this test if the naming changes in the future.)
+grep '^am_c_OBJECTS = ' Makefile.in
+grep '^am_d_OBJECTS = ' Makefile.in
+
+# Now the actual test. Are both values equal?
+cobj=$(sed -n '/^am_c_OBJECTS = / {
+ s/.* = \(.*\)$/\1/
+ p
+ }' Makefile.in)
+dobj=$(sed -n '/^am_d_OBJECTS = / {
+ s/^.* = \(.*\)$/\1/
+ p
+ }' Makefile.in)
+test "$cobj" = "$dobj"
+
+:
diff --git a/t/subpkg-macrodir.sh b/t/subpkg-macrodir.sh
new file mode 100644
index 000000000..7053570aa
--- /dev/null
+++ b/t/subpkg-macrodir.sh
@@ -0,0 +1,85 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Subpackages that want to use m4 macros from their superpackages,
+# with AC_CONFIG_MACRO_DIRS.
+
+. test-init.sh
+
+cat > configure.ac <<'END'
+AC_INIT([super], [1.0])
+AM_INIT_AUTOMAKE
+AC_CONFIG_MACRO_DIR([m4])
+AC_CONFIG_SUBDIRS([pkg])
+AX_BAR
+AX_FOO
+END
+
+mkdir m4
+
+cat > m4/foo.m4 <<'EOF'
+AC_DEFUN([AX_FOO], [
+ AC_CONFIG_FILES([Makefile])
+ AC_OUTPUT
+])
+EOF
+
+cat > m4/bar.m4 <<'EOF'
+AC_DEFUN([AX_BAR], [AC_SUBST([WHOAMI], [SuperPkg])])
+EOF
+
+cat > Makefile.am << 'END'
+test-whoami:
+ test '$(WHOAMI)' = SuperPkg
+check-local: test-whoami
+END
+
+mkdir pkg
+
+cat > pkg/configure.ac <<'END'
+AC_INIT([super], [1.0])
+AM_INIT_AUTOMAKE
+AC_CONFIG_MACRO_DIRS([macros ../m4])
+AX_BAR
+AX_FOO
+END
+
+mkdir pkg/macros
+cat > pkg/macros/zardoz.m4 << 'END'
+AC_DEFUN([AX_BAR], [AC_SUBST([WHOAMI], [sub-pkg])])
+END
+
+cat > pkg/Makefile.am << 'END'
+test-whoami:
+ test '$(WHOAMI)' = sub-pkg
+check-local: test-whomai
+END
+
+AUTOMAKE=$AUTOMAKE ACLOCAL=$ACLOCAL AUTOCONF=$AUTOCONF $AUTORECONF -vi
+
+$FGREP 'm4_include([m4/foo.m4])' aclocal.m4
+$FGREP 'm4_include([m4/bar.m4])' aclocal.m4
+$FGREP 'm4_include([../m4/foo.m4])' pkg/aclocal.m4
+$FGREP 'm4_include([macros/zardoz.m4])' pkg/aclocal.m4
+
+./configure
+
+$MAKE test-whoami
+(cd pkg && $MAKE test-whoami) || exit 1
+
+$MAKE distcheck
+
+:
diff --git a/t/subpkg-yacc.sh b/t/subpkg-yacc.sh
new file mode 100644
index 000000000..485337264
--- /dev/null
+++ b/t/subpkg-yacc.sh
@@ -0,0 +1,129 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that ylwrap is installed properly, and $(YLWRAP) us defined
+# properly, when a subpackage is involved.
+
+required='cc yacc'
+. test-init.sh
+
+cat >>configure.ac <<'END'
+AC_PROG_CC
+AC_CONFIG_SUBDIRS([lib])
+AC_OUTPUT
+END
+
+cat >Makefile.am <<'EOF'
+SUBDIRS = lib
+bin_PROGRAMS = MU
+MU_LDADD = lib/liblib.a
+# It's ok to override distdir.
+distdir = subpack-1
+# Remove a file created by rules in subdir lib.
+CLEANFILES = lib-dist-hook-has-run
+EOF
+
+cat >MU.c <<'EOF'
+int lib (void);
+int main (void)
+{
+ return lib ();
+}
+EOF
+
+mkdir lib
+mkdir lib/src
+
+cat >lib/configure.ac <<'EOF'
+AC_INIT([lib], [2.3])
+AM_INIT_AUTOMAKE([subdir-objects])
+AC_PROG_RANLIB
+AC_PROG_YACC
+dnl This comes after YACC and RANLIB checks, deliberately.
+AC_PROG_CC
+AM_PROG_AR
+AC_CONFIG_HEADERS([config.h:config.hin])
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+EOF
+
+cat >lib/Makefile.am <<'EOF'
+noinst_LIBRARIES = liblib.a
+liblib_a_SOURCES = src/x.c foo.y
+EXTRA_liblib_a_SOURCES = bar.y
+
+dist-hook:
+ test -d $(top_distdir)
+ test -d $(distdir)
+ find $(top_distdir) $(distdir) ;: For debugging.
+ test -f $(top_distdir)/MU.c
+ test ! -f $(distdir)/MU.c
+ for suf in y c; do \
+ for name in foo bar; do \
+ test -f $(distdir)/$$name.$$suf || exit 1; \
+ test ! -f $(top_distdir)/$$name.$$suf || exit 1; \
+ done; \
+ done
+ test -f $(distdir)/foo.y
+ test ! -f $(top_distdir)/foo.y
+ test -f $(distdir)/src/x.c
+ test ! -f $(top_distdir)/src/x.c
+ test -f $(YLWRAP)
+ : > $(top_builddir)/../lib-dist-hook-has-run
+EOF
+
+cat > lib/foo.y << 'END'
+%{
+int yylex (void) { return 0; }
+void yyerror (char *s) {}
+%}
+%%
+foobar : 'f' 'o' 'o' 'b' 'a' 'r' {};
+END
+
+cp lib/foo.y lib/bar.y
+
+cat >lib/src/x.c <<'EOF'
+#include <config.h>
+int lib (void)
+{
+ return 0;
+}
+EOF
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -Wno-override
+
+cd lib
+$ACLOCAL
+$AUTOCONF
+$AUTOHEADER
+$AUTOMAKE -Wno-override --add-missing
+cd ..
+
+./configure
+
+$MAKE dist
+test -f lib-dist-hook-has-run
+test -f subpack-1.tar.gz
+test ! -e subpack-1 # Make sure "dist" cleans up after itself.
+
+rm -f lib-dist-hook-has-run subpack-1.tar.gz
+
+yl_distcheck
+
+:
diff --git a/t/subpkg.sh b/t/subpkg.sh
new file mode 100644
index 000000000..d6351b100
--- /dev/null
+++ b/t/subpkg.sh
@@ -0,0 +1,111 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check subpackage handling.
+
+required=cc
+. test-init.sh
+
+mkdir m4
+
+cat >m4/foo.m4 <<'EOF'
+AC_DEFUN([FOO],[
+ AC_PROG_CC
+ AC_OUTPUT
+])
+EOF
+
+cat >>configure.ac <<'END'
+AC_CONFIG_MACRO_DIR([m4])
+AC_CONFIG_SUBDIRS([lib])
+FOO
+END
+
+cat >Makefile.am <<'EOF'
+SUBDIRS = lib
+# Yes, This program is named LDADD. So what?
+bin_PROGRAMS = LDADD
+LDADD_LDADD = lib/liblib.a
+
+# It's ok to override distdir.
+distdir = subpack-1
+
+# Make sure $(distdir) and $(top_distdir) work as expected.
+dist-hook:
+ test -f $(distdir)/LDADD.c
+ test -f $(top_distdir)/LDADD.c
+EOF
+
+cat >LDADD.c <<'EOF'
+int lib (void);
+int main (void)
+{
+ return lib ();
+}
+EOF
+
+mkdir lib
+mkdir lib/src
+
+cat >lib/configure.ac <<'EOF'
+AC_INIT([lib], [2.3])
+AM_INIT_AUTOMAKE([subdir-objects])
+AC_CONFIG_MACRO_DIR([../m4])
+AM_PROG_AR
+AC_PROG_RANLIB
+AC_CONFIG_HEADERS([config.h:config.hin])
+AC_CONFIG_FILES([Makefile])
+FOO
+EOF
+
+cat >lib/Makefile.am <<'EOF'
+noinst_LIBRARIES = liblib.a
+liblib_a_SOURCES = src/x.c
+
+dist-hook:
+ test ! -f $(distdir)/LDADD.c
+ test -f $(top_distdir)/LDADD.c
+ test -f $(distdir)/src/x.c
+ test ! -f $(top_distdir)/src/x.c
+EOF
+
+cat >lib/src/x.c <<'EOF'
+#include <config.h>
+int lib (void)
+{
+ return 0;
+}
+EOF
+
+$ACLOCAL
+$AUTOCONF -Werror -Wall
+$AUTOMAKE -Wno-override
+
+cd lib
+$ACLOCAL
+$FGREP 'm4_include([../m4/foo.m4])' aclocal.m4
+$AUTOCONF
+$AUTOHEADER
+$AUTOMAKE -Wno-override --add-missing
+cd ..
+
+./configure
+$MAKE
+$MAKE distcheck
+test ! -e subpack-1 # Make sure distcheck cleans up after itself.
+test -f subpack-1.tar.gz
+
+:
diff --git a/t/subpkg2.sh b/t/subpkg2.sh
new file mode 100644
index 000000000..1145c6242
--- /dev/null
+++ b/t/subpkg2.sh
@@ -0,0 +1,70 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Try a DIST_SUBDIRS subpackage with no SUBDIRS.
+# Report from Gary V. Vaughan.
+
+. test-init.sh
+
+mkdir m4
+
+cat >m4/foo.m4 <<'EOF'
+AC_DEFUN([FOO],[
+ AC_OUTPUT
+])
+EOF
+
+cat >>configure.ac <<'END'
+AC_CONFIG_MACRO_DIR([m4])
+AC_CONFIG_SUBDIRS([sub])
+AC_OUTPUT
+END
+
+cat >Makefile.am <<'EOF'
+DIST_SUBDIRS = sub
+dist-hook:
+ test -f $(distdir)/sub/script.in
+EOF
+
+mkdir sub
+
+cat >sub/configure.ac <<'EOF'
+AC_INIT([sub], [2.3])
+AM_INIT_AUTOMAKE
+AC_CONFIG_MACRO_DIR([../m4])
+AC_CONFIG_FILES([Makefile])
+AC_CONFIG_FILES([script])
+FOO
+EOF
+
+: >sub/script.in
+: >sub/Makefile.am
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+cd sub
+$ACLOCAL
+$FGREP 'm4_include([../m4/foo.m4])' aclocal.m4
+$AUTOCONF
+$AUTOMAKE -Wno-override
+cd ..
+
+./configure
+$MAKE distcheck
+
+:
diff --git a/t/subpkg3.sh b/t/subpkg3.sh
new file mode 100644
index 000000000..dacd862b8
--- /dev/null
+++ b/t/subpkg3.sh
@@ -0,0 +1,55 @@
+#! /bin/sh
+# Copyright (C) 2006-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure different subpackages may share files and directories.
+
+. test-init.sh
+
+cat >Makefile.am <<'END'
+SUBDIRS = subpkg
+EXTRA_DIST = subpkg/foobar
+END
+
+cat >>configure.ac <<'END'
+AC_CONFIG_SUBDIRS([subpkg])
+AC_OUTPUT
+END
+
+mkdir subpkg
+
+echo foobar >subpkg/foobar
+
+echo SUBDIRS = >subpkg/Makefile.am
+
+cat >subpkg/configure.ac <<'END'
+AC_INIT([subpkg], [1.0])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+END
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+cd subpkg
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+cd ..
+
+./configure
+$MAKE distcheck
diff --git a/t/subpkg4.sh b/t/subpkg4.sh
new file mode 100644
index 000000000..cb76e5281
--- /dev/null
+++ b/t/subpkg4.sh
@@ -0,0 +1,71 @@
+#! /bin/sh
+# Copyright (C) 2006-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to ensure 'distdir' fixes the mode of files and directories
+# copied into '$(distdir)', even with sub-packages.
+
+. test-init.sh
+
+cat >Makefile.am <<'END'
+SUBDIRS = subpkg
+test-distdir-is-readable:
+ bad_dirs=`find $(distdir) -type d ! -perm -755 -print`; \
+ if test -n "$$bad_dirs"; then \
+ echo "directories not permissive: $$bad_dirs" >&2; \
+ exit 1; \
+ fi
+ bad_files=`find $(distdir) ! -type d ! -perm -444 -print`; \
+ if test -n "$$bad_files"; then \
+ echo "file not permissive: $$bad_files" >&2; \
+ exit 1; \
+ fi
+END
+
+cat >>configure.ac <<'END'
+AC_CONFIG_SUBDIRS([subpkg])
+AC_OUTPUT
+END
+
+mkdir subpkg subpkg/dir
+echo foobar >subpkg/foobar
+echo baz > subpkg/dir/baz
+
+chmod go-rwx subpkg/foobar subpkg/dir/baz subpkg/dir
+
+cat >subpkg/Makefile.am <<'END'
+EXTRA_DIST = foobar dir
+END
+
+cat >subpkg/configure.ac <<'END'
+AC_INIT([subpkg], [1.0])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+END
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+cd subpkg
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+cd ..
+
+./configure
+$MAKE distdir
+$MAKE test-distdir-is-readable
diff --git a/t/subst-no-trailing-empty-line.sh b/t/subst-no-trailing-empty-line.sh
new file mode 100644
index 000000000..35f980676
--- /dev/null
+++ b/t/subst-no-trailing-empty-line.sh
@@ -0,0 +1,93 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# If the last line of a automake-rewritten definition is made only of
+# @substitutions@, automake should take care of appending an empty
+# variable to make sure that line cannot end up substituted as a blank
+# line (that would confuse HP-UX Make).
+# These checks have been introduced in commit 'Release-1-9-254-g9d0eaef'
+# into the former test 'subst2.test'.
+
+. test-init.sh
+
+# These are deliberately quite long, so that the xxx_PROGRAMS definition
+# in Makefile.am below will be split on multiple lines, with the last
+# line containing only @substituted@ stuff that expands to empty (this is
+# required to expose the bug we are testing).
+v1=ABCDEFGHIJKLMNOPQRSTUVWX
+v2=ABCDEFGHIJKLMNOPQRSTUVWXY
+v3=ABCDEFGHIJKLMNOPQRSTUVWXYZ
+
+# Literal backslash for use by grep.
+bs='\\'
+
+cat >> configure.ac <<END
+AC_SUBST([A], [''])
+AC_SUBST([$v1], [''])
+AC_SUBST([$v2], [''])
+AC_SUBST([$v3], [''])
+AC_OUTPUT
+END
+
+cat >Makefile.am <<END
+AUTOMAKE_OPTIONS = no-dependencies
+CC = false
+EXEEXT =
+
+## The "x" and "zardoz" strings and the use of '+=' are there to ensure
+## that these variables get rewritten by Automake.
+noinst_PROGRAMS = x @$v1@ @$v2@ @$v3@
+bin_PROGRAMS = @A@
+bin_PROGRAMS += @$v1@ @$v2@ @$v3@
+check_PROGRAMS = zardoz \$(noinst_PROGRAMS)
+
+## Required whenever there are @substituted@ values in the
+## PROGRAMS primary, otherwise automake will complain.
+EXTRA_PROGRAMS =
+
+test-real-empty:
+ is \$(noinst_PROGRAMS) == x
+ is \$(bin_PROGRAMS) ==
+ is \$(check_PROGRAMS) == zardoz x
+
+test-fake-empty:
+ is \$(noinst_PROGRAMS) == x X
+ is \$(bin_PROGRAMS) == X
+ is \$(check_PROGRAMS) == zardoz x X
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+# For debugging.
+$EGREP -n 'ABCD|am__empty' Makefile.in
+# Sanity check.
+test $($EGREP -c "^[ $tab]*@$v2@ @$v3@[ $tab]*$bs?$" Makefile.in) -eq 3
+
+./configure
+{
+ sed -n '/^noinst_PROGRAMS *=/,/[^\\]$/p' Makefile
+ sed -n '/^bin_PROGRAMS *=/,/[^\\]$/p' Makefile
+ sed -n '/^check_PROGRAMS *=/,/[^\\]$/p' Makefile
+ sed -n '/^am__EXEEXT.*=/,/[^\\]$/p' Makefile
+} >t-programs
+cat t-programs
+grep '^ *$' t-programs && exit 1
+
+run_make test-real-empty
+run_make test-fake-empty am__empty=X
+
+:
diff --git a/t/subst.sh b/t/subst.sh
new file mode 100644
index 000000000..b1d5c6e0d
--- /dev/null
+++ b/t/subst.sh
@@ -0,0 +1,39 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test that AC_SUBST($1) does something sensible. From Ulrich
+# Drepper.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+dnl This test used to have the following lines, which cannot have
+dnl worked sensibly with Autoconf for years, however:
+dnl AC_SUBST($1)
+dnl AC_SUBST([$]$1) dnl this is the actual invocation that was used
+dnl
+AC_DEFUN([FOO],
+[AC_SUBST([$1])])
+FOO([BAR])
+END
+
+: > Makefile.am
+
+$ACLOCAL
+$AUTOMAKE
+grep '^\$1' Makefile.in && exit 1
+
+:
diff --git a/t/subst3.sh b/t/subst3.sh
new file mode 100644
index 000000000..06ebee850
--- /dev/null
+++ b/t/subst3.sh
@@ -0,0 +1,178 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test installation with substitutions. This test is based on
+# 'nobase.sh'.
+
+required=cc
+. test-init.sh
+
+cat >> configure.ac <<'EOF'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+if test x"$doit" = x"yes"; then
+ AC_SUBST([basehdr], [sub/base.h])
+ AC_SUBST([nobasehdr], [sub/nobase.h])
+ AC_SUBST([basedata], [sub/base.dat])
+ AC_SUBST([nobasedata], [sub/nobase.dat])
+ AC_SUBST([basescript], [sub/base.sh])
+ AC_SUBST([nobasescript], [sub/nobase.sh])
+ AC_SUBST([baseprog], ['sub/base$(EXEEXT)'])
+ AC_SUBST([nobaseprog], ['sub/nobase$(EXEEXT)'])
+ AC_SUBST([baselib], [sub/libbase.a])
+ AC_SUBST([nobaselib], [sub/libnobase.a])
+fi
+AC_OUTPUT
+EOF
+
+cat > Makefile.am << 'EOF'
+foodir = $(prefix)/foo
+fooexecdir = $(prefix)/foo
+
+foo_HEADERS = @basehdr@
+nobase_foo_HEADERS = @nobasehdr@
+EXTRA_HEADERS = sub/base.h sub/nobase.h
+
+dist_foo_DATA = @basedata@
+nobase_dist_foo_DATA = @nobasedata@
+
+dist_fooexec_SCRIPTS = @basescript@
+nobase_dist_fooexec_SCRIPTS = @nobasescript@
+EXTRA_SCRIPTS = sub/base.sh sub/nobase.sh
+
+fooexec_PROGRAMS = @baseprog@
+nobase_fooexec_PROGRAMS = @nobaseprog@
+EXTRA_PROGRAMS = sub/base sub/nobase
+sub_base_SOURCES = source.c
+sub_nobase_SOURCES = source.c
+
+fooexec_LIBRARIES = @baselib@
+nobase_fooexec_LIBRARIES = @nobaselib@
+EXTRA_LIBRARIES = sub/libbase.a sub/libnobase.a
+sub_libbase_a_SOURCES = source.c
+sub_libnobase_a_SOURCES = source.c
+
+test-install-data: install-data
+ test -f inst/foo/sub/nobase.h
+ test ! -f inst/foo/nobase.h
+ test -f inst/foo/base.h
+ test -f inst/foo/sub/nobase.dat
+ test ! -f inst/foo/nobase.dat
+ test -f inst/foo/base.dat
+ test ! -f inst/foo/sub/pnobase.sh
+ test ! -f inst/foo/pbase.sh
+ test ! -f inst/foo/sub/pnobase$(EXEEXT)
+ test ! -f inst/foo/pbase$(EXEEXT)
+ test ! -f inst/foo/sub/libnobase.a
+ test ! -f inst/foo/libbase.a
+
+test-install-exec: install-exec
+ test -f inst/foo/sub/pnobase.sh
+ test ! -f inst/foo/pnobase.sh
+ test -f inst/foo/pbase.sh
+ test -f inst/foo/sub/pnobase$(EXEEXT)
+ test ! -f inst/foo/pnobase$(EXEEXT)
+ test -f inst/foo/pbase$(EXEEXT)
+ test -f inst/foo/sub/libnobase.a
+ test ! -f inst/foo/libnobase.a
+ test -f inst/foo/libbase.a
+
+test-install-nothing-data: install-data
+ test ! -f inst/foo/sub/nobase.h
+ test ! -f inst/foo/nobase.h
+ test ! -f inst/foo/base.h
+ test ! -f inst/foo/sub/nobase.dat
+ test ! -f inst/foo/nobase.dat
+ test ! -f inst/foo/base.dat
+ test ! -f inst/foo/sub/pnobase.sh
+ test ! -f inst/foo/pbase.sh
+ test ! -f inst/foo/sub/pnobase$(EXEEXT)
+ test ! -f inst/foo/pbase$(EXEEXT)
+ test ! -f inst/foo/sub/libnobase.a
+ test ! -f inst/foo/libbase.a
+
+test-install-nothing-exec: install-exec
+ test ! -f inst/foo/sub/pnobase.sh
+ test ! -f inst/foo/pnobase.sh
+ test ! -f inst/foo/pbase.sh
+ test ! -f inst/foo/sub/pnobase$(EXEEXT)
+ test ! -f inst/foo/pnobase$(EXEEXT)
+ test ! -f inst/foo/pbase$(EXEEXT)
+ test ! -f inst/foo/sub/libnobase.a
+ test ! -f inst/foo/libnobase.a
+ test ! -f inst/foo/libbase.a
+EOF
+
+mkdir sub
+
+: > sub/base.h
+: > sub/nobase.h
+: > sub/base.dat
+: > sub/nobase.dat
+: > sub/base.sh
+: > sub/nobase.sh
+
+cat >source.c <<'EOF'
+int
+main (int argc, char *argv[])
+{
+ return 0;
+}
+EOF
+cp source.c source2.c
+
+rm -f install-sh
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a --copy
+./configure --prefix "$(pwd)/inst" --program-prefix=p doit=yes
+
+$MAKE
+$MAKE test-install-data
+$MAKE test-install-exec
+$MAKE uninstall
+$MAKE clean
+
+test $(find inst/foo -type f -print | wc -l) -eq 0
+
+./configure --prefix "$(pwd)/inst" --program-prefix=p doit=no
+
+$MAKE
+$MAKE test-install-nothing-data
+$MAKE test-install-nothing-exec
+$MAKE uninstall
+
+
+# Likewise, in a VPATH build.
+
+$MAKE distclean
+mkdir build
+cd build
+../configure --prefix "$(pwd)/inst" --program-prefix=p doit=yes
+$MAKE
+$MAKE test-install-data
+$MAKE test-install-exec
+$MAKE uninstall
+test $(find inst/foo -type f -print | wc -l) -eq 0
+
+../configure --prefix "$(pwd)/inst" --program-prefix=p doit=no
+$MAKE
+$MAKE test-install-nothing-data
+$MAKE test-install-nothing-exec
+
+:
diff --git a/t/subst4.sh b/t/subst4.sh
new file mode 100644
index 000000000..161aaca13
--- /dev/null
+++ b/t/subst4.sh
@@ -0,0 +1,44 @@
+#! /bin/sh
+# Copyright (C) 2008-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test AM_SUBST_NOTMAKE.
+
+. test-init.sh
+
+cat >> configure.ac <<'EOF'
+myrule="\
+foo: bar
+ echo making \$@ from bar
+ echo \$@ > \$@
+"
+AC_SUBST([myrule])
+AM_SUBST_NOTMAKE([myrule])
+AC_OUTPUT
+EOF
+
+cat > Makefile.am <<'EOF'
+@myrule@
+EOF
+: > bar
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+$MAKE foo
+test -f foo
+
+:
diff --git a/t/subst5.sh b/t/subst5.sh
new file mode 100644
index 000000000..d502792f6
--- /dev/null
+++ b/t/subst5.sh
@@ -0,0 +1,40 @@
+#! /bin/sh
+# Copyright (C) 2009-2017 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 3 of the License, 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 <https://www.gnu.org/licenses/>.
+
+# Complain about configure substitutions in EXTRA_PRIMARY variables.
+# Rationale: we need to know the literal values of, say, PROGRAMS.
+# Thus, we allow substitutions in bin_PROGRAMS, but then EXTRA_PROGRAMS
+# needs to list possible values of that substitution, literally.
+
+. test-init.sh
+
+cat >>configure.ac <<'END'
+AC_PROG_CC
+AC_SUBST([substed1])
+AC_SUBST([substed2])
+END
+
+cat > Makefile.am <<'END'
+bin_PROGRAMS = @substed1@
+EXTRA_PROGRAMS = @substed2@
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+grep 'bin_PROGRAMS.*contains configure substitution' stderr && exit 1
+grep 'EXTRA_PROGRAMS.*contains configure substitution' stderr
+
+exit 0
diff --git a/t/substre2.sh b/t/substre2.sh
new file mode 100644
index 000000000..76aee664d
--- /dev/null
+++ b/t/substre2.sh
@@ -0,0 +1,50 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for bug in variable substitution references, where
+# undefined variables break later substitutions.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_SUBST([CC], [whocares])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = no-dependencies
+
+foo = foo.a foo.b $(doesnt_exist)
+bar = bar.a bar.b
+var1 = $(foo:.a=1.c) $(doesnt_exist:.b=2.c) $(bar:.a=3.c)
+var2 = $(var1:.b=4.c)
+
+bin_PROGRAMS = foo
+foo_SOURCES = $(var2)
+
+OBJEXT = obj
+.PHONY: test
+test:
+ is $(foo_OBJECTS) == foo1.obj foo4.obj bar3.obj bar4.obj
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+./configure
+$MAKE test
+
+:
diff --git a/t/substref.sh b/t/substref.sh
new file mode 100644
index 000000000..bf6153209
--- /dev/null
+++ b/t/substref.sh
@@ -0,0 +1,54 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for bug in variable substitution references when left hand
+# pattern is null.
+# Report from Richard Boulton.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_SUBST([CC], [whocares])
+AC_OUTPUT
+END
+
+: > hello.c
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = no-dependencies
+var1 = dlmain
+var2 = $(var1:=.)
+helldl_SOURCES = $(var2:=c)
+bin_PROGRAMS = helldl
+.PHONY: test
+test:
+ is $(helldl_SOURCES) $(helldl_OBJECTS) == dlmain.c dlmain.$(OBJEXT)
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+$MAKE test
+
+# This is unrelated to the rest of this test. But while we are
+# at it, make sure we don't use am__helldl_SOURCES_DIST here, since
+# it's not needed. DIST_SOURCES should contain $(helldl_SOURCES).
+grep am__helldl_SOURCES_DIST Makefile && exit 1
+grep 'DIST_SOURCES.*\$(helldl_SOURCES)' Makefile
+
+:
diff --git a/t/substtarg.sh b/t/substtarg.sh
new file mode 100644
index 000000000..b117a9c39
--- /dev/null
+++ b/t/substtarg.sh
@@ -0,0 +1,51 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test that substitutions in variables work.
+# From Lars J. Aas.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_SOURCE([fakelib.c])
+AC_PROG_CC
+AM_PROG_AR
+RANLIB=:
+AC_SUBST([RANLIB])
+SUBST=hei
+AC_SUBST([SUBST])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+noinst_LIBRARIES = libfake@SUBST@.a
+
+libfake@SUBST@_a_SOURCES = abra.c kadabra.c
+
+# Then we override the target rule:
+libfake@SUBST@.a: Makefile $(libfake@SUBST@_a_OBJECTS) $(libfake@SUBST@_a_DEPENDENCIES)
+ @echo here we do some custom stuff, instead of invoking the linker
+END
+
+: > ar-lib
+
+$ACLOCAL
+AUTOMAKE_fails
+grep 'overrid.*libfake@SUBST@.a' stderr
+$AUTOMAKE -Wno-override
+test $(grep -c '^libfake@SUBST@.a:' Makefile.in) -eq 1
+
+:
diff --git a/t/suffix-chain.tap b/t/suffix-chain.tap
new file mode 100644
index 000000000..504fefef7
--- /dev/null
+++ b/t/suffix-chain.tap
@@ -0,0 +1,64 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that Automake can emit code that work round the inability of
+# some make implementations to automatically chain suffix rules.
+# See automake bug#7824 and bug#7670.
+
+required=cc
+. test-init.sh
+
+plan_ 8
+
+cat >> configure.ac <<'END'
+AC_PROG_CC
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+bin_PROGRAMS = foo
+foo_SOURCES = foo.c1
+.c1.c0:
+ (echo 'int main (void)' && echo '{' && cat $<) > $@
+.c0.c:
+ (cat $< && echo '}') > $@
+CLEANFILES = foo.c0 foo.c
+END
+
+echo 'return 0;' > foo.c1
+
+command_ok_ "aclocal" $ACLOCAL
+command_ok_ "automake" $AUTOMAKE
+command_ok_ "autoconf" $AUTOCONF
+command_ok_ "configure" ./configure
+
+directive=''; make_can_chain_suffix_rules || directive=TODO
+
+for target in all distcheck; do
+ command_ok_ "make $target" \
+ -D "$directive" -r "suffix rules not chained" \
+ $MAKE $target
+done
+
+command_ok_ "clean" $MAKE clean
+# Sanity check.
+cat >> Makefile <<'END'
+foo.c: foo.c0
+foo.c0: foo.c1
+END
+command_ok_ "make with explicit dependencies" $MAKE
+
+:
diff --git a/t/suffix-custom-pr14441.sh b/t/suffix-custom-pr14441.sh
new file mode 100644
index 000000000..0af16790e
--- /dev/null
+++ b/t/suffix-custom-pr14441.sh
@@ -0,0 +1,56 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for bug#14441: the same user-defined suffix being transformed into
+# different automake-known suffixes in different Makefiles was confusing
+# Automake.
+
+. test-init.sh
+
+cat >>configure.ac <<EOF
+AC_PROG_CC
+AC_PROG_CXX
+AC_CONFIG_FILES([sub/Makefile])
+EOF
+
+mkdir sub
+
+cat > Makefile.am <<'END'
+SUBDIRS = sub
+bin_PROGRAMS = one
+one_SOURCES = one.ext
+.ext.cc:
+ whatever
+END
+
+cat > sub/Makefile.am <<'END'
+bin_PROGRAMS = two
+two_SOURCES = two.ext
+.ext.c:
+ do something
+END
+
+$ACLOCAL
+$AUTOMAKE -a
+
+$FGREP '.c' Makefile.in sub/Makefile.in # For debugging.
+
+grep '^\.cc\.o:' Makefile.in
+LC_ALL=C $EGREP '\.c[^a-z]' Makefile.in && exit 1
+grep '^\.c\.o:' sub/Makefile.in
+$FGREP '.cc' sub/Makefile.in && exit 1
+
+:
diff --git a/t/suffix-custom-subobj-and-specflg.sh b/t/suffix-custom-subobj-and-specflg.sh
new file mode 100644
index 000000000..43b30a89c
--- /dev/null
+++ b/t/suffix-custom-subobj-and-specflg.sh
@@ -0,0 +1,62 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Tests that Automake understands suffix rules with renamed objects
+# and subdir objects.
+# Reported by Florian Briegel.
+
+required=cc
+. test-init.sh
+
+cat >>configure.ac <<EOF
+AC_PROG_CC
+AC_OUTPUT
+EOF
+
+cat >Makefile.am << 'END'
+AUTOMAKE_OPTIONS = subdir-objects
+SUFFIXES = .baz .c
+.baz.c:
+ case $@ in sub/*) $(MKDIR_P) sub;; *) :;; esac
+## Account for VPATH issues on weaker make implementations (e.g. IRIX 6.5).
+ cp `test -f '$<' || echo $(srcdir)/`$< $@
+
+DISTCLEANFILES = sub/bar.c
+
+bin_PROGRAMS = foo
+foo_SOURCES = foo.c sub/bar.baz
+foo_CFLAGS =
+END
+
+mkdir sub
+cat > sub/bar.baz <<'END'
+extern int foo ();
+int main () { return foo (); }
+END
+cat > foo.c <<'END'
+int foo () { return 0; }
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+$MAKE
+$MAKE distcheck
+
+:
diff --git a/t/suffix-custom-subobj.sh b/t/suffix-custom-subobj.sh
new file mode 100644
index 000000000..ae3659014
--- /dev/null
+++ b/t/suffix-custom-subobj.sh
@@ -0,0 +1,59 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Tests that Automake understands suffix rules with subdir objects.
+# Reported by John Ratliff.
+
+required=cc
+. test-init.sh
+
+cat >>configure.ac <<EOF
+AC_PROG_CC
+AC_OUTPUT
+EOF
+
+cat >Makefile.am << 'END'
+AUTOMAKE_OPTIONS = subdir-objects
+SUFFIXES = .baz .o
+# We fake here:
+.baz.o:
+## Account for VPATH issues on weaker make implementations.
+ cp `test -f '$<' || echo $(srcdir)/`$< $@
+
+bin_PROGRAMS = foo
+foo_SOURCES = foo.c sub/bar.baz
+
+.PHONY: test-fake test-real
+test-fake:
+ echo $(foo_OBJECTS) | grep '^foo\.quux sub/bar\.quux$$'
+test-real:
+ echo $(foo_OBJECTS) | grep '^foo\.$(OBJEXT) sub/bar\.$(OBJEXT)$$'
+END
+
+mkdir sub
+: > sub/bar.baz
+: > foo.c
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+run_make OBJEXT=quux test-fake
+$MAKE test-real
+
+:
diff --git a/t/suffix-extra-c-stuff-pr14560.sh b/t/suffix-extra-c-stuff-pr14560.sh
new file mode 100644
index 000000000..9eb38ccd7
--- /dev/null
+++ b/t/suffix-extra-c-stuff-pr14560.sh
@@ -0,0 +1,37 @@
+#! /bin/sh
+# Copyright (C) 2013-2017 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 <https://www.gnu.org/licenses/>.
+
+# Automake bug#14560: if multiple user-specified suffix rules were
+# present, Automake could generate useless definitions and rules
+# related to C compilation.
+
+. test-init.sh
+
+cat > Makefile.am <<'END'
+.foo.bar:
+ foo2bar -o $@ $<
+.baz.qux:
+ baz2qux -o $@ $<
+bin_SCRIPTS = a.bar b.qux
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+$EGREP '\$\(CC\)|COMPILE|AM_V_CC|-compile|INCLUDES' Makefile.in && exit 1
+
+:
diff --git a/t/suffix.sh b/t/suffix.sh
new file mode 100644
index 000000000..2ded3db5b
--- /dev/null
+++ b/t/suffix.sh
@@ -0,0 +1,59 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure proper suffix rules for C compilation are produced, and
+# only once.
+# See also related test 'suffix2.sh'.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_RANLIB
+END
+
+cat > Makefile.am << 'END'
+noinst_PROGRAMS = foo
+noinst_LIBRARIES = libbar.a
+END
+
+for use_arlib in false :; do
+
+ rm -rf autom4te*.cache
+
+ if $use_arlib; then
+ am_warns=
+ echo AM_PROG_AR >> configure.ac
+ : > ar-lib
+ else
+ am_warns=-Wno-extra-portability
+ fi
+
+ $ACLOCAL
+
+ $AUTOMAKE $am_warns -i
+ grep '^ *\.c' Makefile.in # For debugging.
+ test $(grep -c '^\.c\.o:' Makefile.in) -eq 1
+ test $(grep -c '^\.c\.obj:' Makefile.in) -eq 1
+
+ $AUTOMAKE $am_warns
+ grep '^ *\.c' Makefile.in # For debugging.
+ test $(grep -c '^\.c\.o:' Makefile.in) -eq 1
+ test $(grep -c '^\.c\.obj:' Makefile.in) -eq 1
+
+done
+
+:
diff --git a/t/suffix10.tap b/t/suffix10.tap
new file mode 100644
index 000000000..ea89a7b40
--- /dev/null
+++ b/t/suffix10.tap
@@ -0,0 +1,82 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that derivations work with .lo too.
+# (related to PR/37)
+
+required='cc libtoolize yacc'
+. test-init.sh
+
+plan_ 7
+
+cat >>configure.ac <<EOF
+AC_PROG_CC
+AC_PROG_YACC
+AM_PROG_AR
+AC_PROG_LIBTOOL
+AC_OUTPUT
+EOF
+
+cat >Makefile.am << 'END'
+lib_LTLIBRARIES = libfoo.la
+libfoo_la_SOURCES = foo.x_
+.x_.y:
+ rm -f $@ $@-t
+## The leading ':;' works around a bug in bash <= 3.2.
+ :; { echo '/* autogenerated */' \
+ && echo '%{' \
+ && echo 'int yylex () {return 0;}' \
+ && echo 'void yyerror (char *s) {}' \
+ && echo '%}' \
+ && echo '%%' \
+ && echo "foobar : 'f' 'o' 'o' 'b' 'a' 'r' {};" \
+ && echo '%%' \
+## Account for VPATH issues on weaker make implementations.
+ && cat `test -f '$<' || echo $(srcdir)/`$<; \
+ } > $@-t
+ mv -f $@-t $@
+.PHONY: test
+test:
+ echo $(libfoo_la_OBJECTS) | grep '^foo\.lo$$'
+END
+
+cat > foo.x_ << 'END'
+int foo (void) { return yyparse(); }
+END
+
+# We must protect the TAP driver from the output of configure, since
+# that might output a stray "ok" on a line of its own (due to a
+# libtool bug on Mac OS X), thus causing a spurious test result to
+# be seen. See automake bug#11897.
+run_configure ()
+{
+ st=0; ./configure >output 2>&1 || st=1
+ sed 's/^/ /' output
+ test $st -eq 0
+}
+
+command_ok_ "libtoolize" libtoolize --force
+command_ok_ "aclocal" $ACLOCAL
+command_ok_ "autoconf" $AUTOCONF
+command_ok_ "automake" $AUTOMAKE --add-missing
+command_ok_ "configure" run_configure
+command_ok_ "make test" $MAKE test
+
+directive=''; make_can_chain_suffix_rules || directive=TODO
+command_ok_ "make all" -D "$directive" -r "suffix rules not chained" \
+ $MAKE all
+
+:
diff --git a/t/suffix11.tap b/t/suffix11.tap
new file mode 100644
index 000000000..1811ad71a
--- /dev/null
+++ b/t/suffix11.tap
@@ -0,0 +1,82 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Tests that Automake understands multiple suffix rules on the same line.
+# PR/371 and PR/372: Reported by Duncan Gibson.
+# We also check for suffixes containing '-'.
+
+required=cc
+. test-init.sh
+
+plan_ 10
+
+cat >>configure.ac <<EOF
+AC_PROG_CC
+AC_OUTPUT
+EOF
+
+cat >Makefile.am << 'END'
+bin_PROGRAMS = foo bar baz
+foo_SOURCES = foo.x_
+bar_SOURCES = bar.y-z
+baz_SOURCES = baz1.x_ baz2.y-z
+
+.y-z.c .x_.c:
+## Account for VPATH issues on weaker make implementations (e.g. IRIX 6.5).
+ sed 's/INTEGER/int/g' `test -f '$<' || echo $(srcdir)/`$< >$@
+
+CLEANFILES = foo.c bar.c baz1.c baz2.c
+
+.PHONY: test-real test-fake
+test-fake:
+ echo $(foo_OBJECTS) | grep '^foo\.foo$$'
+ echo $(bar_OBJECTS) | grep '^bar\.foo$$'
+ echo $(baz_OBJECTS) | grep '^baz1\.foo baz2\.foo$$'
+test-real:
+ echo $(foo_OBJECTS) | grep '^foo\.$(OBJEXT)$$'
+ echo $(bar_OBJECTS) | grep '^bar\.$(OBJEXT)$$'
+ echo $(baz_OBJECTS) | grep '^baz1\.$(OBJEXT) baz2\.$(OBJEXT)$$'
+check-local: test-real
+END
+
+echo 'INTEGER main(void) { return 0; }' > foo.x_
+echo 'INTEGER main(void) { return 0; }' > bar.y-z
+echo 'INTEGER main(void) { INTEGER baz(void); return baz(); }' > baz1.x_
+echo 'INTEGER baz(void) { return 0; }' > baz2.y-z
+
+command_ok_ "aclocal" $ACLOCAL
+command_ok_ "autoconf" $AUTOCONF
+
+# What we do is not portable. Automake should warn.
+AUTOMAKE_fails -a
+command_ok_ "warn about unportable make usage" \
+ grep '[iI]nference rules can have only one target before the colon' stderr
+# But this should work anyway.
+command_ok_ "automake" $AUTOMAKE -a -Wno-portability
+
+command_ok_ "configure" ./configure
+command_ok_ "make test-fake" run_make OBJEXT=foo test-fake
+command_ok_ "make test-real" $MAKE test-real
+
+directive=''; make_can_chain_suffix_rules || directive=TODO
+
+for target in '' distcheck; do
+ command_ok_ "make $target" \
+ -D "$directive" -r "suffix rules not chained" \
+ $MAKE $target
+done
+
+:
diff --git a/t/suffix2.sh b/t/suffix2.sh
new file mode 100644
index 000000000..445617a52
--- /dev/null
+++ b/t/suffix2.sh
@@ -0,0 +1,54 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure proper suffix rules for C compilation are produced,
+# and only once, even for libtool libraries.
+# See also related test 'suffix.sh'.
+required=libtoolize
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_LIBTOOL
+END
+
+cat > Makefile.am << 'END'
+lib_LTLIBRARIES = libltdl.la
+libltdl_la_SOURCES = ltdl.c ltdl.h
+END
+
+# Create all the files created libtoolize so we don't run libtoolize.
+# We don't want the user to need libtool to run this test.
+: > ltconfig
+: > ltmain.sh
+: > config.guess
+: > config.sub
+
+$ACLOCAL
+
+$AUTOMAKE -a
+grep '^ *\.c' Makefile.in # For debugging.
+test $(grep -c '^\.c\.o:' Makefile.in) -eq 1
+test $(grep -c '^\.c\.obj:' Makefile.in) -eq 1
+
+$AUTOMAKE -i
+grep '^ *\.c' Makefile.in # For debugging.
+test $(grep -c '^\.c\.o:' Makefile.in) -eq 1
+test $(grep -c '^\.c\.obj:' Makefile.in) -eq 1
+
+:
diff --git a/t/suffix3.tap b/t/suffix3.tap
new file mode 100644
index 000000000..81b832aef
--- /dev/null
+++ b/t/suffix3.tap
@@ -0,0 +1,82 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure that suffix rules chain.
+
+required=c++
+. test-init.sh
+
+plan_ 10
+
+cat >> configure.ac << 'END'
+AC_PROG_CXX
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+SUFFIXES = .zoo
+.zoo.cc:
+ sed 's/INTEGER/int/g' `test -f '$<' || echo $(srcdir)/`$< >$@
+bin_PROGRAMS = foo
+foo_SOURCES = foo.zoo
+# This is required by "make distcheck". The useless indirection is
+# reequired to avoid false positives by the grepping checks below.
+FOO = foo
+CLEANFILES = $(FOO).cc
+END
+
+command_ok_ "aclocal" $ACLOCAL
+command_ok_ "automake" $AUTOMAKE
+
+# The foo.cc intermediate step is implicit, it's a mistake if
+# Automake requires this file somewhere. Also, Automake should
+# not require the file 'foo.c' anywhere.
+command_ok_ "intermediate files not mentioned" \
+ not $FGREP foo.c Makefile.in
+# However Automake must figure that foo.zoo is eventually
+# transformed into foo.o, and use this latter file (to link foo).
+command_ok_ "final object file figured out" \
+ $FGREP 'foo.$(OBJEXT)' Makefile.in
+
+command_ok_ "autoconf" $AUTOCONF
+command_ok_ "configure" ./configure
+
+# This is deliberately valid C++, but invalid C.
+cat > foo.zoo <<'END'
+using namespace std;
+INTEGER main (void)
+{
+ return 0;
+}
+END
+
+directive=''; make_can_chain_suffix_rules || directive=TODO
+
+for target in all distcheck; do
+ command_ok_ "make $target" \
+ -D "$directive" -r "suffix rules not chained" \
+ $MAKE $target
+done
+
+# FIXME: should we check that intermediate file 'foo.cc' has
+# been removed? Or is this requiring too much from the make
+# implementation?
+
+# Intermediate files should not be distributed.
+command_ok_ "make distdir" $MAKE distdir
+command_ok_ "intermediate file not distributed" test ! -e $me-1.0/foo.cc
+
+:
diff --git a/t/suffix4.sh b/t/suffix4.sh
new file mode 100644
index 000000000..b7f77f6e7
--- /dev/null
+++ b/t/suffix4.sh
@@ -0,0 +1,39 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure Automake doesn't abort on user-defined extensions.
+# Based on a report from Dmitry Mikhin <dmitrym@acres.com.au>.
+
+# Also make sure that .SUFFIXES is automatically adjusted with
+# extensions from implicit rules.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+.k.o:
+ echo $< > $@
+
+bin_PROGRAMS = foo
+foo_SOURCES = foo.k
+END
+
+$ACLOCAL
+$AUTOMAKE
+grep '^\.SUFFIXES:' Makefile.in | sed -e 's/$/ /' > suffixes
+cat suffixes
+$FGREP ' .k ' suffixes
+
+:
diff --git a/t/suffix5.sh b/t/suffix5.sh
new file mode 100644
index 000000000..b7cd650ad
--- /dev/null
+++ b/t/suffix5.sh
@@ -0,0 +1,66 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure Automake include libtool objects resulting
+# from user-defined implicit rules.
+# Based on a report from Arkadiusz Miskiewicz <misiek@pld.ORG.PL>.
+
+required='cc libtool'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_SUBST([LINK], [:])
+AM_PROG_AR
+AC_PROG_LIBTOOL
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+.k.lo:
+## Account for VPATH issues on weaker make implementations.
+ (echo $< && cat `test -f '$<' || echo $(srcdir)/`$<) > $@
+
+noinst_LTLIBRARIES = libfoo.la
+libfoo_la_SOURCES = foo.k
+
+.PHONY: test
+test: all
+ grep '^=GREP=ME=$$' foo.lo
+## Weaker regex to account for VPATH issues.
+ grep 'foo\.k$$' foo.lo
+check-local: test
+END
+
+: > ltmain.sh
+
+for auxscript in ar-lib config.guess config.sub; do
+ cp "$am_scriptdir/$auxscript" . \
+ || fatal_ "fetching auxiliary script '$auxscript'"
+done
+
+$ACLOCAL
+$AUTOMAKE
+grep '_OBJECTS.*foo\.lo' Makefile.in
+
+$AUTOCONF
+./configure
+
+echo '=GREP=ME=' > foo.k
+
+$MAKE test
+$MAKE distcheck
+
+:
diff --git a/t/suffix6.sh b/t/suffix6.sh
new file mode 100644
index 000000000..1c8df185e
--- /dev/null
+++ b/t/suffix6.sh
@@ -0,0 +1,63 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure Automake supports implicit rules with dot-less
+# extensions. Also make sure that '.o' and '.obj' are handled like
+# '.$(OBJEXT)'. See also related "semantic" tests 'suffix6b.sh'
+# and 'suffix6c.sh'.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+SUFFIXES = a b .$(OBJEXT) c .o .obj
+bin_PROGRAMS = foo
+foo_SOURCES = fooa barc bazc
+ab:
+ dummy action 1
+b.$(OBJEXT):
+ dummy action 2
+c.o:
+ dummy action C
+c.obj:
+ dummy action C
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+sed -n -e '/foo_OBJECTS *=.*\\$/ {
+ :loop
+ p
+ n
+ t clear
+ :clear
+ s/\\$/\\/
+ t loop
+ p
+ n
+}' -e 's/$/ /' -e 's/^.*foo_OBJECTS *= */ /p' Makefile.in > foo-objects
+cat foo-objects
+
+# Automake must figure that fooa translates to foo.$(OBJEXT) and
+# foo.$(OBJEXT) using the following rules:
+# fooa --[ab]--> foob --[b.$(OBJEXT)]--> foo.$(OBJEXT)
+$FGREP ' foo.$(OBJEXT) ' foo-objects
+# barc --[c.o]--> bar.$(OBJEXT) ## This is really meant!
+$FGREP ' bar.$(OBJEXT) ' foo-objects
+# bazc --[c.obj]--> baz.$(OBJEXT) ## This is really meant!
+$FGREP ' baz.$(OBJEXT) ' foo-objects
+
+:
diff --git a/t/suffix6b.sh b/t/suffix6b.sh
new file mode 100644
index 000000000..f672fe453
--- /dev/null
+++ b/t/suffix6b.sh
@@ -0,0 +1,75 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure Automake supports implicit rules with dot-less
+# extensions. Se also related "grepping" test 'suffix6.sh'.
+
+required=GNUmake # Other makes might not grok dot-less suffix rules.
+. test-init.sh
+
+cat >> configure.ac << '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 -- but since such an hack can also serve as a
+# mild stress test, that's ok.
+AC_SUBST([LINK], ['cat >$@'])
+AC_SUBST([OBJEXT], [oOo])
+AC_SUBST([EXEEXT], [.XxX])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+SUFFIXES = a b c .$(OBJEXT)
+bin_PROGRAMS = foo
+foo_SOURCES = fooa
+ab:
+ { echo '=ab=' && cat $<; } >$@
+bc:
+ { echo '=bc=' && cat $<; } >$@
+c.$(OBJEXT):
+ { echo '=b.obj=' && cat $<; } >$@
+test:
+ : For debugging.
+ ls -l
+ : Implicit intermediate files should be removed by GNU make ...
+ test ! -r foob
+ test ! -r fooc
+ : ... but object files should not.
+ cat foo.$(OBJEXT)
+ : For debugging.
+ cat foo.XxX
+ : Now check that the chain of implicit rules has been executed
+ : completely and in the correct order.
+ (echo =b.obj= && echo =bc= && echo =ab= && echo =src=) > exp
+ diff exp foo.XxX
+ rm -f exp
+.PHONY: test
+check-local: test
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+
+echo =src= > fooa
+
+$MAKE
+$MAKE test
+$MAKE distcheck
+
+:
diff --git a/t/suffix6c.sh b/t/suffix6c.sh
new file mode 100644
index 000000000..0a8b63d56
--- /dev/null
+++ b/t/suffix6c.sh
@@ -0,0 +1,92 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure that '.o' and '.obj' are handled like '.$(OBJEXT)'.
+# See also related "grepping" test 'suffix6.sh'.
+
+. test-init.sh
+
+cat >> configure.ac << '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 -- but since such an hack can also serve as a
+# mild stress test, that's ok.
+OBJEXT=${OBJEXT-oOo}
+AC_SUBST([LINK], ['cat >$@'])
+AC_SUBST([EXEEXT], [.XxX])
+AC_SUBST([OBJEXT])
+AC_OUTPUT
+END
+
+unset OBJEXT
+
+cat > Makefile.am << 'END'
+SUFFIXES = .zoo .o .obj .@OBJEXT@
+
+bin_PROGRAMS = foo
+foo_SOURCES = foo.zoo
+
+.zoo.o:
+ { echo '=.zoo.o=' && cat $<; } >$@
+.zoo.obj:
+ { echo '=.zoo.obj=' && cat $<; } >$@
+.zoo.@OBJEXT@:
+ { echo '=.zoo.@OBJEXT@=' && cat $<; } >$@
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+
+cat > foo.exp <<'END'
+=.zoo.oOo=
+%ONE%
+END
+echo %ONE% > foo.zoo
+$MAKE
+cat foo.oOo
+cat foo.XxX
+diff foo.XxX foo.exp
+
+rm -f foo.* exp
+
+cat > foo.exp <<'END'
+=.zoo.o=
+%TWO%
+END
+echo %TWO% > foo.zoo
+run_make OBJEXT=o
+cat foo.o
+cat foo.XxX
+diff foo.XxX foo.exp
+
+rm -f foo.* exp
+
+cat > foo.exp <<'END'
+=.zoo.obj=
+%THREE%
+END
+echo %THREE% > foo.zoo
+run_make OBJEXT=obj
+cat foo.obj
+cat foo.XxX
+diff foo.XxX foo.exp
+
+rm -f foo.* exp
+
+:
diff --git a/t/suffix7.sh b/t/suffix7.sh
new file mode 100644
index 000000000..f6cb789c9
--- /dev/null
+++ b/t/suffix7.sh
@@ -0,0 +1,37 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure Automake supports implicit rules "confusing"
+# extensions. Inspired by a mail from Alex Hornby.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+SUFFIXES = .idl S.cpp C.h
+SUFFIXES += C.cpp S.h
+.idlC.cpp:
+ cp $< $@
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+# Make sure Automake has NOT recognized .cpp and .idlC as two new
+# extensions.
+grep 'SUFFIXES.* \.cpp' Makefile.in && exit 1
+grep 'SUFFIXES.* \.idlC' Makefile.in && exit 1
+
+:
diff --git a/t/suffix8.tap b/t/suffix8.tap
new file mode 100644
index 000000000..9db010bbc
--- /dev/null
+++ b/t/suffix8.tap
@@ -0,0 +1,105 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure Automake supports multiple derivations for the
+# same suffix.
+# From PR/37.
+
+required='cc libtoolize'
+. test-init.sh
+
+plan_ 10
+
+cat >>configure.ac <<'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_
+
+# We must protect the TAP driver from the output of configure, since
+# that might output a stray "ok" on a line of its own (due to a
+# libtool bug on Mac OS X), thus causing a spurious test result to
+# be seen. See automake bug#11897.
+protect_output ()
+{
+ st=0; "$@" >output 2>&1 || st=1
+ sed 's/^/ /' output
+ test $st -eq 0
+}
+
+command_ok_ "libtoolize" libtoolize
+command_ok_ "aclocal" $ACLOCAL
+command_ok_ "autoconf" $AUTOCONF
+command_ok_ "automake" $AUTOMAKE -a
+command_ok_ "configure" protect_output ./configure
+command_ok_ "make test0" run_make OBJEXT=foo 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" \
+ protect_output $MAKE $target
+done
+
+:
diff --git a/t/suffix9.sh b/t/suffix9.sh
new file mode 100644
index 000000000..4a997d67a
--- /dev/null
+++ b/t/suffix9.sh
@@ -0,0 +1,64 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that Automake choose the shorter route between suffixes
+# (related to PR/37)
+
+. test-init.sh
+
+cat >>configure.ac << 'END'
+AC_PROG_CC
+END
+
+$ACLOCAL
+
+# x_ -> y -> c -> o
+# \________/
+#
+# Automake should follow the bottom route: x_ -> c -> o because
+# it is shorter.
+#
+# It should not take the "-> y ->" route. We use 'y' here so that
+# then Automake will complains that YACC is not defined and the test will
+# fail when this happens.
+
+cat >Makefile.am << 'END'
+bin_PROGRAMS = foo
+foo_SOURCES = foo.x_
+
+.x_.y:
+ cp $< $@
+.x_.c:
+ cp $< $@
+END
+
+$AUTOMAKE -a
+
+# Idem with the rules the another order.
+
+cat >Makefile.am << 'END'
+bin_PROGRAMS = foo
+foo_SOURCES = foo.x_
+
+.x_.c:
+ cp $< $@
+.x_.y:
+ cp $< $@
+END
+
+$AUTOMAKE -a
+
+:
diff --git a/t/symlink.sh b/t/symlink.sh
new file mode 100644
index 000000000..78ad72218
--- /dev/null
+++ b/t/symlink.sh
@@ -0,0 +1,40 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure we get an error if symlink creation fails.
+# Reported by Joerg-Martin Schwarz.
+
+am_create_testdir=empty
+. test-init.sh
+
+: > Makefile.am
+
+cat > configure.ac << 'END'
+AC_INIT([symlink], [1.0])
+AC_CONFIG_AUX_DIR([subdir])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile])
+END
+
+$ACLOCAL
+AUTOMAKE_fails --add-missing
+
+grep '^configure\.ac:3: .*missing.*error while making link' stderr
+grep '^configure\.ac:3: .*install-sh.*error while making link' stderr
+
+test $(grep -c 'error while making link' stderr) -eq 2
+
+:
diff --git a/t/symlink2.sh b/t/symlink2.sh
new file mode 100644
index 000000000..863820167
--- /dev/null
+++ b/t/symlink2.sh
@@ -0,0 +1,32 @@
+#! /bin/sh
+# Copyright (C) 2000-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure that 'automake -a' redirects dangling symlinks.
+
+. test-init.sh
+
+rm -f install-sh
+ln -s Zardoz install-sh || skip_ "cannot create broken symlinks"
+
+: > Makefile.am
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+
+test -f install-sh
+test ! -e Zardoz
+
+:
diff --git a/t/syntax.sh b/t/syntax.sh
new file mode 100644
index 000000000..21d69afb2
--- /dev/null
+++ b/t/syntax.sh
@@ -0,0 +1,31 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for error for bad syntax.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+foo = q \
+
+bin_SCRIPTS = foo.sh
+END
+
+$ACLOCAL
+AUTOMAKE_fails -Wnone
+grep '^Makefile\.am:2:.*blank line following trailing backslash' stderr
+
+:
diff --git a/t/tags-pr12372.sh b/t/tags-pr12372.sh
new file mode 100644
index 000000000..14ae78c5b
--- /dev/null
+++ b/t/tags-pr12372.sh
@@ -0,0 +1,85 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure tags are processed also for files with non-standard
+# extensions. See automake bug#12372.
+
+required='cc etags'
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_PROG_CC
+AC_CONFIG_FILES([sub/Makefile])
+# Fake linking. Help avoid possible spurious errors from make
+# or from the linker; errors that are irrelevant to this test.
+AC_SUBST([LINK], ['echo $(CCLD) $(CFLAGS) $(LDFLAGS) -o $@'])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+all-local: tags
+.pc.o:
+ sed -e 's/\[/{/' -e 's/\]/}/' $(srcdir)/$*.pc >$*.c
+ $(CC) $(DEFS) $(CPPFLAGS) $(CFLAGS) -c $*.c
+ rm -f $*.c
+
+noinst_PROGRAMS = foo
+foo_SOURCES = foo-main.pc barbar.c
+SUBDIRS = sub
+END
+
+mkdir sub
+cat > sub/Makefile.am <<'END'
+all-local: tags
+.pc.o:
+ sed -e 's/@/a/g' $(srcdir)/$*.pc >$*.c
+ $(CC) $(DEFS) $(CPPFLAGS) $(CFLAGS) -c $*.c
+ rm -f $*.c
+
+noinst_PROGRAMS = zap
+zap_SOURCES = zardoz.pc
+END
+
+echo 'int main(void) [ return bar(1); ]' > foo-main.pc
+echo 'int bar(int x) { return !x; }' > barbar.c
+echo 'int m@in(void) { return 0; }' > sub/zardoz.pc
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+
+# Exuberant Ctags (at least version 5.8) doesn't generate any tags
+# for file extensions it doesn't recognize. This can be fixed by
+# using the '--langmap' option. But we must be careful, because
+# etags from Emacs (at least version 23.4) doesn't recognize that
+# option.
+if etags --help | grep '.*--langmap'; then
+ run_make ETAGSFLAGS="--langmap=c:+.pc"
+else
+ $MAKE
+fi
+
+cat TAGS
+cat sub/TAGS
+$FGREP foo-main.pc TAGS
+$FGREP barbar.c TAGS
+$FGREP zardoz.pc sub/TAGS
+
+$MAKE distcheck
+
+:
diff --git a/t/tags.sh b/t/tags.sh
new file mode 100644
index 000000000..628f7d189
--- /dev/null
+++ b/t/tags.sh
@@ -0,0 +1,29 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for bug reported by Harlan Stenn: the tags target doesn't work
+# when there are only headers in a directory.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+noinst_HEADERS = iguana.h
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '^ID:' Makefile.in
diff --git a/t/tags2.sh b/t/tags2.sh
new file mode 100644
index 000000000..ea3f3e8d4
--- /dev/null
+++ b/t/tags2.sh
@@ -0,0 +1,42 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAGS_DEPENDENCIES only make sense if other tag-worthy things (such as
+# sources) exist.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_OUTPUT
+END
+
+cat >Makefile.am << 'END'
+TAGS_DEPENDENCIES = foo
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+grep 'define.*TAGS_DEPENDENCIES.*without' stderr
+
+cat >>Makefile.am << 'END'
+bin_PROGRAMS = bar
+END
+
+AUTOMAKE_run
+grep 'define.*TAGS_DEPENDENCIES.*without' stderr && exit 1
+
+:
diff --git a/t/tagsub.sh b/t/tagsub.sh
new file mode 100644
index 000000000..177f790d1
--- /dev/null
+++ b/t/tagsub.sh
@@ -0,0 +1,48 @@
+#! /bin/sh
+# Copyright (C) 1997-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure tags and subdirs work correctly. Bug report by
+# François Pinard, and later by Akim Demaille.
+
+required=etags
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+END
+
+echo 'SUBDIRS = sub' > Makefile.am
+mkdir sub
+echo 'noinst_HEADERS = iguana.h' > sub/Makefile.am
+: > sub/iguana.h
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+$MAKE tags
+test -f sub/TAGS
+test -f TAGS
+$FGREP sub/TAGS TAGS
+$FGREP iguana.h sub/TAGS
+
+$MAKE distclean
+test ! -e sub/TAGS
+test ! -e TAGS
+
+:
diff --git a/t/tap-ambiguous-directive.sh b/t/tap-ambiguous-directive.sh
new file mode 100644
index 000000000..75ff7d4ef
--- /dev/null
+++ b/t/tap-ambiguous-directive.sh
@@ -0,0 +1,53 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - handling of "ambiguous" TODO and SKIP directives
+# See also related test 'tap-todo-skip-together.sh'.
+
+. test-init.sh
+
+. tap-setup.sh
+
+cat > all.test <<END
+1..6
+ok 1 # foo SKIP
+not ok 2 # bar TODO
+ok 3 # :SKIP
+not ok 4 # :TODO
+ok 5 # SKIP SKIP
+not ok 6 # TODO TODO
+END
+
+run_make -O -e FAIL check
+count_test_results total=6 pass=2 fail=2 xpass=0 xfail=1 skip=1 error=0
+
+cat > exp << 'END'
+PASS: all.test 1 # foo SKIP
+FAIL: all.test 2 # bar TODO
+PASS: all.test 3 # :SKIP
+FAIL: all.test 4 # :TODO
+SKIP: all.test 5 # SKIP SKIP
+XFAIL: all.test 6 # TODO TODO
+END
+
+$FGREP ': all.test' stdout > got
+
+cat exp
+cat got
+diff exp got
+
+:
diff --git a/t/tap-autonumber.sh b/t/tap-autonumber.sh
new file mode 100644
index 000000000..ded621975
--- /dev/null
+++ b/t/tap-autonumber.sh
@@ -0,0 +1,73 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - unnumbered tests are OK, as long as their final total number
+# agrees with the plan
+# - test results without number get automatically numbered in the
+# console progress output
+
+. test-init.sh
+
+. tap-setup.sh
+
+cat > all.test <<'END'
+1..14
+ok
+ok foo
+ok - foo2
+not ok
+not ok bar
+not ok - bar2
+; See that we can intermingle different kind of results without
+; messing up the autonumbering
+ok
+ok # TODO
+not ok # TODO who cares?
+ok
+not ok
+ok muuu # SKIP
+not ok
+ok
+END
+
+run_make -O -e FAIL TESTS=all.test check
+count_test_results total=14 pass=6 fail=5 xpass=1 xfail=1 skip=1 error=0
+
+cat > exp <<'END'
+PASS: all.test 1
+PASS: all.test 2 foo
+PASS: all.test 3 - foo2
+FAIL: all.test 4
+FAIL: all.test 5 bar
+FAIL: all.test 6 - bar2
+PASS: all.test 7
+XPASS: all.test 8 # TODO
+XFAIL: all.test 9 # TODO who cares?
+PASS: all.test 10
+FAIL: all.test 11
+SKIP: all.test 12 muuu # SKIP
+FAIL: all.test 13
+PASS: all.test 14
+END
+
+$FGREP ': all.test' stdout > got
+
+cat exp
+cat got
+diff exp got
+
+:
diff --git a/t/tap-bad-prog.tap b/t/tap-bad-prog.tap
new file mode 100644
index 000000000..5c5807759
--- /dev/null
+++ b/t/tap-bad-prog.tap
@@ -0,0 +1,85 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - missing, unreadable, or not-executable test scripts cause proper
+# error reports
+
+. test-init.sh
+
+fetch_tap_driver
+
+plan_ 6
+
+cat >> configure.ac <<END
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TEST_LOG_DRIVER = $(srcdir)/tap-driver
+TESTS = none.test noread.test noexec.test
+none.test:
+END
+
+cat > noexec.test <<'END'
+#!/bin/sh
+echo 1..1
+echo ok 1
+END
+
+cp noexec.test noread.test
+chmod a-r noread.test
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+
+command_ok_ '"make check" returns non-zero exit status' \
+ run_make -O -e FAIL check
+
+# FIXME: maybe grep for stricter error messages in the next checks?
+
+command_ok_ "non-existent test is reported" \
+ grep '^ERROR: none\.test' stdout
+
+desc="non-executable test is reported"
+# Redirect output to avoid confusing automake's testsuite own TAP driver.
+if ./noexec.test >/dev/null; then
+ skip_ -r "any file is executable" "$desc"
+else
+ command_ok_ "$desc" -- grep '^ERROR: noexec\.test' stdout
+fi
+
+desc="non-readable test is reported"
+if test -r noread.test; then
+ skip_ -r "any file is readable" "$desc"
+else
+ command_ok_ "$desc" -- grep '^ERROR: noread\.test' stdout
+fi
+
+# Check that no spurious test result is reported. This is lower-priority
+# (and in fact the check currently fails).
+
+command_ok_ 'no spurious "missing plan" message' \
+ -D TODO -- not grep 'missing.* plan' stdout
+
+command_ok_ 'no spurious results' \
+ -D TODO -r 'still get "missing plan"' \
+ count_test_results total=3 pass=0 fail=0 xpass=0 xfail=0 skip=0 error=3
+
+:
diff --git a/t/tap-bailout-and-logging.sh b/t/tap-bailout-and-logging.sh
new file mode 100644
index 000000000..6c4719755
--- /dev/null
+++ b/t/tap-bailout-and-logging.sh
@@ -0,0 +1,48 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - even after a "Bail out!" directive, all input is still copied in
+# the log file
+
+. test-init.sh
+
+. tap-setup.sh
+
+cat > all.test <<END
+First line
+Bail out!
+non-TAP line after bailout
+# TAP diagnostic after bailout
+1..0 # SKIP TAP plan after bailout
+ok 1 - TAP result after bailout
+END
+
+$MAKE check && { cat all.log; exit 1; }
+cat all.log
+
+for rx in \
+ 'First line' \
+ 'Bail out!' \
+ 'non-TAP line after bailout' \
+ '# TAP diagnostic after bailout' \
+ '1\.\.0 # SKIP TAP plan after bailout' \
+ 'ok 1 - TAP result after bailout' \
+; do
+ grep "^$rx$" all.log
+done
+
+:
diff --git a/t/tap-bailout-leading-space.sh b/t/tap-bailout-leading-space.sh
new file mode 100644
index 000000000..53d965e73
--- /dev/null
+++ b/t/tap-bailout-leading-space.sh
@@ -0,0 +1,63 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# A "Bail out!" directive that is preceded by whitespace should still
+# be recognized.
+
+. test-init.sh
+. tap-setup.sh
+
+cat > a.test <<END
+1..1
+ok 1
+ Bail out!
+END
+
+cat > b.test <<END
+1..1
+ok 1 # SKIP
+${tab}Bail out!
+END
+
+cat > c.test <<END
+1..1
+ ${tab} ${tab}${tab}Bail out! FUBAR! $tab
+END
+
+cat >> exp <<END
+PASS: a.test 1
+ERROR: a.test - Bail out!
+SKIP: b.test 1
+ERROR: b.test - Bail out!
+ERROR: c.test - Bail out! FUBAR!
+END
+
+run_make -O -e FAIL TESTS='a.test b.test c.test' check
+count_test_results total=5 pass=1 fail=0 xpass=0 xfail=0 skip=1 error=3
+
+LC_ALL=C sort exp > t
+mv -f t exp
+
+# We need the sort below to account for parallel make usage.
+grep ': [abcde]\.test' stdout \
+ | sed "s/[ $tab]*#[ $tab]*SKIP.*//" \
+ | LC_ALL=C sort > got
+
+cat exp
+cat got
+diff exp got
+
+:
diff --git a/t/tap-bailout-suppress-badexit.sh b/t/tap-bailout-suppress-badexit.sh
new file mode 100644
index 000000000..0a65980c1
--- /dev/null
+++ b/t/tap-bailout-suppress-badexit.sh
@@ -0,0 +1,63 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Basic TAP test protocol support:
+# - A "Bail out!" directive causes the driver to ignore the exit
+# status of the test script.
+
+. test-init.sh
+
+tests='exit.test exit127.test sighup.test sigterm.test'
+
+cat > Makefile.am <<END
+TESTS = $tests
+END
+
+. tap-setup.sh
+
+cat > exit.test << 'END'
+#!/bin/sh
+echo 'Bail out!'
+exit 1
+END
+
+cat > exit127.test << 'END'
+#!/bin/sh
+echo 'Bail out!'
+exit 127
+END
+
+cat > sighup.test << 'END'
+#!/bin/sh
+echo 'Bail out!'
+kill -1 $$
+END
+
+cat > sigterm.test << 'END'
+#!/bin/sh
+echo 'Bail out!'
+kill -15 $$
+END
+
+chmod a+x $tests
+
+run_make -O -e FAIL check
+count_test_results total=4 pass=0 fail=0 xpass=0 xfail=0 skip=0 error=4
+
+for tst in $tests; do grep "^ERROR: $tst - Bail out!" stdout; done
+$EGREP "ERROR: .*(exit.*status|terminat.*signal)" stdout && exit 1
+
+:
diff --git a/t/tap-bailout-suppress-later-diagnostic.sh b/t/tap-bailout-suppress-later-diagnostic.sh
new file mode 100644
index 000000000..08cee1405
--- /dev/null
+++ b/t/tap-bailout-suppress-later-diagnostic.sh
@@ -0,0 +1,40 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - A "Bail out!" directive causes the driver to ignore any TAP
+# diagnostic message in the rest of the following TAP stream.
+
+. test-init.sh
+
+. tap-setup.sh
+
+echo AM_TEST_LOG_DRIVER_FLAGS = --comments >> Makefile
+
+cat > all.test <<END
+1..1
+# sanity check
+ok 1
+Bail out!
+# not seen
+END
+
+run_make -O -e FAIL check
+count_test_results total=2 pass=1 fail=0 xpass=0 xfail=0 skip=0 error=1
+grep '# all.test: sanity check' stdout
+grep 'not seen' stdout && exit 1
+
+:
diff --git a/t/tap-bailout-suppress-later-errors.sh b/t/tap-bailout-suppress-later-errors.sh
new file mode 100644
index 000000000..88bd7027d
--- /dev/null
+++ b/t/tap-bailout-suppress-later-errors.sh
@@ -0,0 +1,70 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - A "Bail out!" directive causes the driver to ignore any TAP
+# result or error in the rest of the following TAP stream.
+
+. test-init.sh
+
+. tap-setup.sh
+
+# Various errors that can all be squashed into a single test script.
+cat > foo.test << 'END'
+1..5
+Bail out!
+# All possible test results.
+# Test out-of-order.
+ok 4
+# Extra TAP plan.
+1..2
+# Another bailout directive.
+Bail out! Not seen.
+# Stop now, with too few tests run.
+END
+
+# Tests run after a "SKIP" plan.
+cat > bar.test << 'END'
+1..0 # SKIP
+Bail out!
+ok 1
+END
+
+# Too many tests run.
+cat > baz.test << 'END'
+1..1
+ok 1
+Bail out!
+ok 2
+ok 3
+END
+
+run_make -e FAIL -O TESTS='foo.test bar.test baz.test' check
+count_test_results total=5 pass=1 fail=0 xpass=0 xfail=0 skip=1 error=3
+
+grep '^ERROR: foo\.test - Bail out!$' stdout
+grep '^ERROR: bar\.test - Bail out!$' stdout
+grep '^SKIP: bar\.test' stdout
+grep '^ERROR: baz\.test - Bail out!$' stdout
+grep '^PASS: baz\.test 1$' stdout
+
+$FGREP 'Not seen' stdout && exit 1
+
+test $($FGREP -c ': foo.test' stdout) -eq 1
+test $($FGREP -c ': bar.test' stdout) -eq 2
+test $($FGREP -c ': baz.test' stdout) -eq 2
+
+:
diff --git a/t/tap-bailout.sh b/t/tap-bailout.sh
new file mode 100644
index 000000000..641e9c223
--- /dev/null
+++ b/t/tap-bailout.sh
@@ -0,0 +1,134 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Basic TAP test protocol support:
+# - "Bail out!" magic
+
+. test-init.sh
+
+. tap-setup.sh
+
+: > exp
+
+#------------------------------------------------------------------
+
+# Bailout without explanation.
+
+cat > a.test <<END
+1..4
+ok 1
+not ok 2
+Bail out!
+not ok 3
+ok 4 # SKIP
+END
+
+cat >> exp <<END
+PASS: a.test 1
+FAIL: a.test 2
+ERROR: a.test - Bail out!
+END
+
+# pass += 1, fail +=1, error += 1
+
+#------------------------------------------------------------------
+
+# Bailout with explanation.
+
+cat > b.test <<END
+1..7
+ok 1 # SKIP
+ok 2 # TODO
+not ok 3 # TODO
+Bail out! We're out of disk space.
+ok 4
+not ok 5
+not ok 6 # TODO
+ok 7 # TODO
+END
+
+cat >> exp <<END
+SKIP: b.test 1 # SKIP
+XPASS: b.test 2 # TODO
+XFAIL: b.test 3 # TODO
+ERROR: b.test - Bail out! We're out of disk space.
+END
+
+# skip += 1, xpass += 1, xfail += 1, error += 1
+
+#------------------------------------------------------------------
+
+# Bail out before the test plan.
+
+cat > c.test <<END
+ok 1
+ok 2
+Bail out! BOOOH!
+1..2
+END
+
+cat >> exp <<END
+PASS: c.test 1
+PASS: c.test 2
+ERROR: c.test - Bail out! BOOOH!
+END
+
+# pass += 2, error += 1
+
+#------------------------------------------------------------------
+
+# Bailout on the first line.
+
+cat > d.test <<END
+Bail out! mktemp -d: Permission denied
+ok 1
+END
+
+echo 'ERROR: d.test - Bail out! mktemp -d: Permission denied' >> exp
+
+# error += 1
+
+#------------------------------------------------------------------
+
+# TAP input comprised only of a bailout directive.
+
+cat > e.test <<END
+Bail out!
+END
+
+echo "ERROR: e.test - Bail out!" >> exp
+
+# error += 1
+
+#------------------------------------------------------------------
+
+# Doing the sums above, we have:
+test_counts='total=12 pass=3 fail=1 xpass=1 xfail=1 skip=1 error=5'
+
+run_make -O -e FAIL TESTS='a.test b.test c.test d.test e.test' check
+count_test_results $test_counts
+
+LC_ALL=C sort exp > t
+mv -f t exp
+
+# We need the sort below to account for parallel make usage.
+grep ': [abcde]\.test' stdout | LC_ALL=C sort > got
+
+cat exp
+cat got
+diff exp got
+
+:
diff --git a/t/tap-basic.sh b/t/tap-basic.sh
new file mode 100644
index 000000000..37c1afd42
--- /dev/null
+++ b/t/tap-basic.sh
@@ -0,0 +1,168 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Basic TAP support:
+# - LOG_COMPILER support;
+# - basic support for TODO and SKIP directives, and "Bail out!" magic;
+# - testsuite progress output on console;
+# - runtime overriding of TESTS and TEST_LOGS;
+# - correct counts of test results (both in summary and in progress
+# output on console).
+# Note that some of the features checked here are checked in other
+# test cases too, usually in a more thorough and detailed way.
+
+. test-init.sh
+
+fetch_tap_driver
+
+cat >> configure.ac <<END
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TEST_LOG_DRIVER = $(srcdir)/tap-driver
+## Defining LOG_COMPILER should work and not intefere with the
+## tap-driver script.
+TEST_LOG_COMPILER = cat
+TESTS = success.test
+
+ok.test:
+ echo '1..3' > $@-t
+ echo 'ok 1' >> $@-t
+ echo 'not ok 2 # TODO' >>$@-t
+ echo 'ok 3 # SKIP' >>$@-t
+ cat $@-t ;: For debugging.
+ mv -f $@-t $@
+END
+
+cat > success.test << 'END'
+1..20
+ok 1
+ok 2 two
+ok 3 - three
+ok 4 four four
+not ok 5
+not ok 6 six
+not ok 7 - seven
+not ok 8 eight eight
+ok 9 # TODO
+ok 10 ten # TODO
+ok 11 - eleven # TODO
+ok 12 twelve twelve # TODO
+not ok 13 # TODO
+not ok 14 fourteen # TODO
+not ok 15 - fifteen # TODO
+not ok 16 sixteen sixteen # TODO
+ok 17 # SKIP
+ok 18 eighteen # SKIP
+ok 19 - nineteen # SKIP
+ok 20 twenty twenty # SKIP
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+
+# Basilar usage and testsuite progress output.
+
+run_make -O -e FAIL check
+count_test_results total=20 pass=4 fail=4 xpass=4 xfail=4 skip=4 error=0
+
+test -f success.log
+test -f test-suite.log
+
+cat > exp << 'END'
+PASS: success.test 1
+PASS: success.test 2 two
+PASS: success.test 3 - three
+PASS: success.test 4 four four
+FAIL: success.test 5
+FAIL: success.test 6 six
+FAIL: success.test 7 - seven
+FAIL: success.test 8 eight eight
+XPASS: success.test 9 # TODO
+XPASS: success.test 10 ten # TODO
+XPASS: success.test 11 - eleven # TODO
+XPASS: success.test 12 twelve twelve # TODO
+XFAIL: success.test 13 # TODO
+XFAIL: success.test 14 fourteen # TODO
+XFAIL: success.test 15 - fifteen # TODO
+XFAIL: success.test 16 sixteen sixteen # TODO
+SKIP: success.test 17 # SKIP
+SKIP: success.test 18 eighteen # SKIP
+SKIP: success.test 19 - nineteen # SKIP
+SKIP: success.test 20 twenty twenty # SKIP
+END
+
+$FGREP ': success.test' stdout > got
+
+cat exp
+cat got
+diff exp got
+
+# Override TESTS from the command line.
+
+rm -f *.log *.test
+
+cat > bail.test <<'END'
+1..1
+Bail out!
+ok 1
+END
+
+run_make -O -e FAIL check TESTS=bail.test
+count_test_results total=1 pass=0 fail=0 xpass=0 xfail=0 skip=0 error=1
+
+test ! -e success.log
+test -f bail.log
+test -f test-suite.log
+
+grep '^ERROR: bail\.test - Bail out!' stdout
+grep '^PASS:' stdout && exit 1
+test $($FGREP -c ': bail.test' stdout) -eq 1
+$FGREP 'success.test' stdout && exit 1
+
+# Override TEST_LOGS from the command line, making it point to a test
+# (ok.test) that has to be generated at make time.
+
+rm -f *.log *.test
+
+run_make -O check TEST_LOGS=ok.log
+count_test_results total=3 pass=1 fail=0 xpass=0 xfail=1 skip=1 error=0
+
+test -f ok.test
+test -f ok.log
+test ! -e success.log
+test ! -e bail.log
+test -f test-suite.log
+
+$EGREP '(bail|success)\.test' stdout && exit 1
+
+cat > exp << 'END'
+PASS: ok.test 1
+XFAIL: ok.test 2 # TODO
+SKIP: ok.test 3 # SKIP
+END
+
+$FGREP ': ok.test' stdout > got
+
+cat exp
+cat got
+diff exp got
+
+:
diff --git a/t/tap-color.sh b/t/tap-color.sh
new file mode 100644
index 000000000..dadfb26b0
--- /dev/null
+++ b/t/tap-color.sh
@@ -0,0 +1,163 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - colorization of TAP results and diagnostic messages
+
+required='grep-nonprint'
+. test-init.sh
+
+# Escape '[' for grep, below.
+red="$esc\[0;31m"
+grn="$esc\[0;32m"
+lgn="$esc\[1;32m"
+blu="$esc\[1;34m"
+mgn="$esc\[0;35m"
+std="$esc\[m"
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = color-tests
+AM_TEST_LOG_DRIVER_FLAGS = --comments
+TEST_LOG_COMPILER = cat
+TESTS = all.test skip.test bail.test badplan.test noplan.test \
+ few.test many.test order.test afterlate.test
+END
+
+. tap-setup.sh
+
+cat > all.test << 'END'
+1..5
+ok 1 - foo
+# Hi! I shouldn't be colorized!
+not ok 2 - bar # TODO td
+ok 3 - baz # SKIP sk
+not ok 4 - quux
+ok 5 - zardoz # TODO
+END
+
+cat > skip.test << 'END'
+1..0 # SKIP whole script
+END
+
+cat > bail.test << 'END'
+1..1
+ok 1
+Bail out!
+END
+
+cat > badplan.test << 'END'
+1..2
+ok 1
+1..2
+ok 2
+END
+
+cat > noplan.test << 'END'
+ok 1
+END
+
+cat > few.test << 'END'
+1..2
+ok 1
+END
+
+cat > many.test << 'END'
+1..1
+ok 1
+ok 2
+END
+
+cat > order.test << 'END'
+1..1
+ok 5
+END
+
+cat > afterlate.test << 'END'
+ok 1
+1..2
+ok 2
+END
+
+test_color ()
+{
+ # Not a useless use of cat; see above comments "grep-nonprinting"
+ # requirement in 'test-init.sh'.
+ cat stdout | grep "^${grn}PASS${std}: all\.test 1 - foo$"
+ cat stdout | grep "^${lgn}XFAIL${std}: all\.test 2 - bar # TODO td$"
+ cat stdout | grep "^${blu}SKIP${std}: all\.test 3 - baz # SKIP sk$"
+ cat stdout | grep "^${red}FAIL${std}: all\.test 4 - quux$"
+ cat stdout | grep "^${red}XPASS${std}: all\.test 5 - zardoz # TODO$"
+ cat stdout | grep "^${blu}SKIP${std}: skip\.test - whole script$"
+ cat stdout | grep "^${grn}PASS${std}: bail\.test 1$"
+ cat stdout | grep "^${mgn}ERROR${std}: bail\.test - Bail out!$"
+ cat stdout | grep "^${mgn}ERROR${std}: badplan\.test - multiple test plans$"
+ cat stdout | grep "^${mgn}ERROR${std}: noplan\.test - missing test plan$"
+ cat stdout | grep "^${mgn}ERROR${std}: few.test - too few tests run (expected 2, got 1)$"
+ cat stdout | grep "^${mgn}ERROR${std}: many.test - too many tests run (expected 1, got 2)$"
+ cat stdout | grep "^${mgn}ERROR${std}: many.test 2 # UNPLANNED$"
+ cat stdout | grep "^${mgn}ERROR${std}: order.test 5 # OUT-OF-ORDER (expecting 1)$"
+ cat stdout | grep "^${mgn}ERROR${std}: afterlate\.test 2 # AFTER LATE PLAN$"
+ # Diagnostic messages shouldn't be colorized.
+ cat stdout | grep "^# all\.test: Hi! I shouldn't be colorized!$"
+ :
+}
+
+test_no_color ()
+{
+ # With make implementations that, like Solaris make, in case of errors
+ # print the whole failing recipe on standard output, we should content
+ # ourselves with a laxer check, to avoid false positives.
+ # Keep this in sync with lib/am/check.am:$(am__color_tests).
+ if $FGREP '= Xalways; then' stdout; then
+ # Extra verbose make, resort to laxer checks.
+ # But we also want to check that the testsuite summary is not unduly
+ # colorized.
+ (
+ set +e # In case some grepped regex below isn't matched.
+ # Not a useless use of cat; see above comments "grep-nonprinting"
+ # requirement in 'test-init.sh'.
+ cat stdout | grep "TOTAL.*:"
+ cat stdout | grep "PASS.*:"
+ cat stdout | grep "FAIL.*:"
+ cat stdout | grep "SKIP.*:"
+ cat stdout | grep "XFAIL.*:"
+ cat stdout | grep "XPASS.*:"
+ cat stdout | grep "ERROR.*:"
+ cat stdout | grep "^#"
+ cat stdout | grep 'test.*expected'
+ cat stdout | grep 'test.*not run'
+ cat stdout | grep '===='
+ cat stdout | grep '[Ss]ee .*test-suite\.log'
+ cat stdout | grep '[Tt]estsuite summary'
+ ) | grep "$esc" && exit 1
+ : For shells with broken 'set -e'
+ else
+ cat stdout | grep "$esc" && exit 1
+ : For shells with broken 'set -e'
+ fi
+}
+
+# Forced colorization should take place also with non-ANSI terminals;
+# hence the "TERM=dumb" definition.
+AM_COLOR_TESTS=always; export AM_COLOR_TESTS
+run_make -O -e FAIL TERM=dumb check
+test_color
+
+unset AM_COLOR_TESTS
+run_make -O -e FAIL TERM=ansi check
+test_no_color
+
+:
diff --git a/t/tap-common-setup.sh b/t/tap-common-setup.sh
new file mode 100644
index 000000000..91d212724
--- /dev/null
+++ b/t/tap-common-setup.sh
@@ -0,0 +1,42 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Auxiliary test to set up common data used by many tests on TAP support.
+
+. test-init.sh
+
+cat >> configure.ac << END
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TEST_LOG_DRIVER = $(srcdir)/tap-driver
+TEST_LOG_COMPILER = cat
+TESTS = all.test
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+
+rm -rf autom4te*.cache
+
+# So that the data files we've created won't be removed at exit.
+keep_testdirs=yes
+
+:
diff --git a/t/tap-deps.sh b/t/tap-deps.sh
new file mode 100644
index 000000000..173c93433
--- /dev/null
+++ b/t/tap-deps.sh
@@ -0,0 +1,84 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Basic TAP test protocol support:
+# - dependencies between test scripts
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+# The tests are *deliberately* listed in inversed order here.
+TESTS = c.test b.test a.test
+b.log: a.log
+c.log: b.log
+END
+
+. tap-setup.sh
+
+cat > a.test << 'END'
+#!/bin/sh
+echo 1..2
+echo ok 1
+# Creative quoting below to please maintainer-check.
+sleep '3'
+echo ok 2
+: > a.run
+END
+
+cat > b.test << 'END'
+#!/bin/sh
+echo 1..2
+if test -f a.run; then
+ echo ok 1
+else
+ echo not ok 1
+fi
+# Creative quoting below to please maintainer-check.
+sleep '3'
+echo ok 2
+: > b.run
+END
+
+cat > c.test << 'END'
+#!/bin/sh
+echo 1..1
+test -f b.run || { echo 'Bail out!'; exit 1; }
+echo ok 1
+rm -f a.run b.run
+END
+
+chmod a+x *.test
+
+run_make -O check
+count_test_results total=5 pass=5 fail=0 xpass=0 xfail=0 skip=0 error=0
+
+cat > exp << 'END'
+PASS: a.test 1
+PASS: a.test 2
+PASS: b.test 1
+PASS: b.test 2
+PASS: c.test 1
+END
+
+grep ': [abc]\.test' stdout > got
+
+cat exp
+cat got
+diff exp got
+
+# TODO: it would be nice to also redo the checks forcing parallel make...
+
+:
diff --git a/t/tap-diagnostic-custom.sh b/t/tap-diagnostic-custom.sh
new file mode 100644
index 000000000..df5807bc8
--- /dev/null
+++ b/t/tap-diagnostic-custom.sh
@@ -0,0 +1,91 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - option '--diagnostic-string' to customize the string introducing
+# TAP diagnostics
+
+. test-init.sh
+
+fetch_tap_driver
+
+cat >> configure.ac <<END
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+my_log_driver = $(srcdir)/tap-driver
+my_log_compiler = cat
+TEST_EXTENSIONS =
+TESTS =
+END
+
+: > later.mk
+
+# Quoting our comments below is an hack required to keep
+# comments near the things they refer to.
+i=0
+for string in \
+'## A letter' \
+ a \
+'## A number' \
+ 1023 \
+'## A non-alphabetic character' \
+ @ \
+'## Some metacharacters (we need to repeat the "$" for make)' \
+ '^>;&*"|$$' \
+'## A whitespace character' \
+ " " \
+'## A tab character' \
+ "$tab" \
+'## A string with more whitespace' \
+ " ${tab}a b${tab} c" \
+'## Note the we do not have the empty string here. We prefer to' \
+'## leave its behaviour in this context undefined for the moment.'
+do
+ case $string in '##'*) continue;; esac
+ i=$(($i + 1))
+ unindent >> Makefile.am << END
+ TEST_EXTENSIONS += .t$i
+ TESTS += foo$i.t$i
+ T${i}_LOG_COMPILER = \$(my_log_compiler)
+ T${i}_LOG_DRIVER = \$(my_log_driver)
+ AM_T${i}_LOG_DRIVER_FLAGS = \
+ --comments \
+ --diagnostic-string '$string'
+END
+ unindent > foo$i.t$i <<END
+ 1..1
+ ok 1
+ $string blah blah $i
+END
+ echo "AM_T${i}_LOG_DRIVER_FLAGS = --no-comments" >> later.mk
+done
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+
+run_make -O check
+count_test_results total=$i pass=$i fail=0 xpass=0 xfail=0 skip=0 error=0
+
+cat later.mk >> Makefile
+run_make -O check
+$FGREP 'blah blah' stdout && exit 1
+
+:
diff --git a/t/tap-diagnostic.sh b/t/tap-diagnostic.sh
new file mode 100644
index 000000000..7f3993b97
--- /dev/null
+++ b/t/tap-diagnostic.sh
@@ -0,0 +1,117 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - diagnostic messages (TAP lines with leading "#")
+# - flags '--comments' and '--no-comments' of the TAP test driver
+
+. test-init.sh
+
+. tap-setup.sh
+
+metacharacters=\''"\$!&()[]<>#;^?*'
+
+cat > all.test <<END
+1..4
+# Hi! I'm a comment.
+# Tests begin.
+ok 1
+not ok 2 - foo # TODO
+ok 3 - bar # SKIP
+# Tests end.
+ok - zardoz
+# Shell metacharacters here: $metacharacters
+.# Leading characters before "#", not a TAP diagnostic line.
+x # Leading characters before "#", not a TAP diagnostic line.
+ # Leading whitespace before "#", not a TAP diagnostic line.
+${tab}# Leading whitespace before "#", not a TAP diagnostic line.
+ ${tab} # Leading whitespace before "#", not a TAP diagnostic line.
+END
+
+cat > exp <<END
+# all.test: Hi! I'm a comment.
+# all.test: Tests begin.
+PASS: all.test 1
+XFAIL: all.test 2 - foo # TODO
+SKIP: all.test 3 - bar # SKIP
+# all.test: Tests end.
+PASS: all.test 4 - zardoz
+# all.test: Shell metacharacters here: $metacharacters
+END
+
+run_make -O check
+$EGREP -i "#.*all\\.test|a comment|(Tests|Shell) " stdout && exit 1
+count_test_results total=4 pass=2 fail=0 xpass=0 xfail=1 skip=1 error=0
+
+echo 'AM_TEST_LOG_DRIVER_FLAGS = --comments' >> Makefile
+run_make -O check
+$FGREP ' all.test' stdout > got
+cat exp
+cat got
+diff exp got
+count_test_results total=4 pass=2 fail=0 xpass=0 xfail=1 skip=1 error=0
+
+run_make -O TEST_LOG_DRIVER_FLAGS="--no-comments" check
+$EGREP -i "#.*all\\.test|a comment|(Tests|Shell) " stdout && exit 1
+count_test_results total=4 pass=2 fail=0 xpass=0 xfail=1 skip=1 error=0
+
+# The "#"-prepended lines here shouldn't be parsed as test results.
+cat > all.test <<END
+1..1
+ok
+# ok
+#ok
+# not ok
+#not ok
+# Bail out!
+#Bail out!
+# SKIP
+#SKIP
+# TODO
+#TODO
+END
+
+run_make -O check
+count_test_results total=1 pass=1 fail=0 xpass=0 xfail=0 skip=0 error=0
+
+# Diagnostic without leading whitespace, or with extra leading whitespace,
+# is ok. Be laxer in the grepping checks, to allow for whitespace
+# normalization by the TAP driver.
+
+ws="[ $tab]"
+ws0p="${ws}*"
+ws1p="${ws}${ws0p}"
+
+cat > all.test <<END
+1..1
+ok 1
+#foo
+#bar${tab}
+# zardoz ${tab}
+# ${tab} ${tab}${tab}foo bar${tab}baz ${tab}
+END
+
+run_make -O check
+count_test_results total=1 pass=1 fail=0 xpass=0 xfail=0 skip=0 error=0
+
+grep "^# all.test:${ws0p}foo$" stdout
+grep "^# all.test:${ws0p}bar${ws0p}$" stdout
+grep "^# all.test:${ws1p}zardoz${ws0p}$" stdout
+grep "^# all.test:${ws1p}foo bar${tab}baz${ws0p}$" stdout
+
+test $(grep -c '^# all\.test:' stdout) -eq 4
+
+:
diff --git a/t/tap-doc.sh b/t/tap-doc.sh
new file mode 100644
index 000000000..41bd47d12
--- /dev/null
+++ b/t/tap-doc.sh
@@ -0,0 +1,96 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that an example given in the documentation really works.
+# See section "Simple Tests" subsection "Script-based Testsuites".
+
+. test-init.sh
+
+fetch_tap_driver
+
+cat >> configure.ac <<END
+AC_PROG_CC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TESTS = foo.sh zardoz.tap bar.sh mu.tap
+TEST_EXTENSIONS = .sh .tap
+TAP_LOG_DRIVER = $(srcdir)/tap-driver
+## Ensure the test scripts are run in the correct order.
+mu.log: bar.log
+bar.log: zardoz.log
+zardoz.log: foo.log
+END
+
+cat > foo.sh <<'END'
+#!/bin/sh
+exit 0
+END
+
+cat > bar.sh <<'END'
+#!/bin/sh
+exit 77
+END
+
+cat > zardoz.tap << 'END'
+#!/bin/sh
+echo 1..4
+echo 'ok 1 - Daemon started'
+echo 'ok 2 - Daemon responding'
+echo 'ok 3 - Daemon uses /proc # SKIP /proc is not mounted'
+echo 'ok 4 - Daemon stopped'
+END
+
+cat > mu.tap << 'END'
+#!/bin/sh
+echo 1..2
+echo 'ok'
+echo 'not ok # TODO frobnication not yet implemented'
+END
+
+chmod a+x *.sh *.tap
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+run_make -O check
+
+cat > exp <<'END'
+PASS: foo.sh
+PASS: zardoz.tap 1 - Daemon started
+PASS: zardoz.tap 2 - Daemon responding
+SKIP: zardoz.tap 3 - Daemon uses /proc # SKIP /proc is not mounted
+PASS: zardoz.tap 4 - Daemon stopped
+SKIP: bar.sh
+PASS: mu.tap 1
+XFAIL: mu.tap 2 # TODO frobnication not yet implemented
+END
+
+sed -n '/^PASS: foo\.sh/,/^XFAIL: mu\.tap/p' stdout > t
+cat t
+# Strip extra "informative" lines that could be printed by Solaris
+# Distributed Make.
+LC_ALL=C $EGREP -v ' --> ([0-9][0-9]* job|[Jj]ob output)' t > got
+
+cat exp
+cat got
+diff exp got
+
+:
diff --git a/t/tap-doc2.sh b/t/tap-doc2.sh
new file mode 100644
index 000000000..da2c20b17
--- /dev/null
+++ b/t/tap-doc2.sh
@@ -0,0 +1,138 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that an example given in the documentation really works.
+# See section "Using the TAP test protocol", subsection "Use TAP
+# with the Automake test harness".
+
+am_create_testdir=empty
+. test-init.sh
+
+cat > Makefile.am <<'END'
+TEST_LOG_DRIVER = env AM_TAP_AWK='$(AWK)' $(SHELL) \
+ $(top_srcdir)/build-aux/tap-driver.sh
+TESTS = foo.test bar.test baz.test
+EXTRA_DIST = $(TESTS)
+END
+
+cat > configure.ac <<'END'
+AC_INIT([GNU Try Tap], [1.0], [bug-automake@gnu.org])
+AC_CONFIG_AUX_DIR([build-aux])
+AM_INIT_AUTOMAKE([foreign -Wall -Werror])
+AC_CONFIG_FILES([Makefile])
+AC_REQUIRE_AUX_FILE([tap-driver.sh])
+AC_OUTPUT
+END
+
+cat > foo.test <<'END'
+#!/bin/sh
+echo 1..4 # Number of tests to be executed.
+echo 'ok 1 - Swallows fly'
+echo 'not ok 2 - Caterpillars fly # TODO metamorphosis in progress'
+echo 'ok 3 - Pigs fly # SKIP not enough acid'
+echo '# I just love word plays...'
+echo 'ok 4 - Flies fly too :-)'
+END
+
+cat > bar.test <<'END'
+#!/bin/sh
+echo 1..3
+echo 'not ok 1 - Bummer, this test has failed.'
+echo 'ok 2 - This passed though.'
+echo 'Bail out! Ennui kicking in, sorry...'
+echo 'ok 3 - This will not be seen.'
+END
+
+cat > baz.test <<'END'
+#!/bin/sh
+echo 1..1
+echo ok 1
+# Exit with error, even if all the tests have been successful.
+exit 7
+END
+
+chmod a+x *.test
+
+# Strip extra "informative" lines that could be printed by Solaris
+# Distributed Make.
+mkdir build-aux
+cp "$am_scriptdir"/tap-driver.sh build-aux \
+ || framework_failure_ "fetching the perl TAP driver"
+
+(export AUTOMAKE ACLOCAL AUTOCONF && $AUTORECONF -vi) || exit 1
+
+./configure --help # Sanity check.
+./configure || skip_ "configure failed"
+
+case $MAKE in *\ -j*) skip_ "can't work easily with concurrent make";; esac
+
+# Prevent Sun Distributed Make from trying to run in parallel.
+DMAKE_MODE=serial; export DMAKE_MODE
+
+run_make -O -e FAIL check
+
+cat > exp <<'END'
+PASS: foo.test 1 - Swallows fly
+XFAIL: foo.test 2 - Caterpillars fly # TODO metamorphosis in progress
+SKIP: foo.test 3 - Pigs fly # SKIP not enough acid
+PASS: foo.test 4 - Flies fly too :-)
+FAIL: bar.test 1 - Bummer, this test has failed.
+PASS: bar.test 2 - This passed though.
+ERROR: bar.test - Bail out! Ennui kicking in, sorry...
+PASS: baz.test 1
+ERROR: baz.test - exited with status 7
+END
+
+sed -n '/^PASS: foo\.test/,/^ERROR: baz\.test/p' stdout > got
+
+cat exp
+cat got
+diff exp got
+
+grep '^Please report to bug-automake@gnu\.org$' stdout
+
+run_make -O check \
+ TESTS='foo.test baz.test' \
+ TEST_LOG_DRIVER_FLAGS='--comments --ignore-exit'
+
+cat > exp <<'END'
+PASS: foo.test 1 - Swallows fly
+XFAIL: foo.test 2 - Caterpillars fly # TODO metamorphosis in progress
+SKIP: foo.test 3 - Pigs fly # SKIP not enough acid
+# foo.test: I just love word plays...
+PASS: foo.test 4 - Flies fly too :-)
+PASS: baz.test 1
+END
+
+sed -n '/^PASS: foo\.test/,/^PASS: baz\.test/p' stdout > got
+
+cat exp
+cat got
+diff exp got
+
+# Sanity check the distribution.
+cat > bar.test <<'END'
+#!/bin/sh
+echo 1..1
+echo ok 1
+END
+echo AM_TEST_LOG_DRIVER_FLAGS = --ignore-exit >> Makefile.in
+./config.status Makefile
+$MAKE distcheck
+
+rm -f Makefile.in # To avoid a maintainer-check failure.
+
+:
diff --git a/t/tap-driver-stderr.sh b/t/tap-driver-stderr.sh
new file mode 100644
index 000000000..9f9a702fe
--- /dev/null
+++ b/t/tap-driver-stderr.sh
@@ -0,0 +1,49 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Unit test on TAP driver:
+# - error messages from awk/shell/perl goes to the console
+
+required=non-root
+am_create_testdir=empty
+. test-init.sh
+
+fetch_tap_driver
+
+tst=zardoz
+
+for suf in trs log; do
+
+ rm -f $tst.log $tst.trs
+ touch $tst.$suf
+ chmod a-w $tst.$suf
+
+ st=0
+ ./tap-driver --test-name $tst --log-file $tst.log --trs-file $tst.trs \
+ -- sh -c 'echo 1..1; echo ok 1; echo "Hello, World!"' \
+ >stdout 2>stderr && st=1
+ cat stdout
+ cat stderr >&2
+ cat $tst.log || :
+ cat $tst.trs || :
+ test $st -eq 0
+
+ $FGREP 'Hello, World!' stderr stdout && exit 1
+ $FGREP $tst.$suf stderr
+
+done
+
+:
diff --git a/t/tap-empty-diagnostic.sh b/t/tap-empty-diagnostic.sh
new file mode 100644
index 000000000..b1f49bba5
--- /dev/null
+++ b/t/tap-empty-diagnostic.sh
@@ -0,0 +1,39 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - empty diagnostic messages are discarder
+
+. test-init.sh
+
+. tap-setup.sh
+
+sed 's/\$$//' > all.test <<END
+1..1$
+ok 1$
+#$
+# $
+#${tab}$
+# ${tab} $tab${tab}$
+END
+
+run_make -O check
+
+grep '^PASS:.*all\.test' stdout # Sanity check.
+grep '#.*all\.test' stdout && exit 1
+grep "all\.test[ $tab]*:[ $tab]*$" stdout && exit 1
+
+:
diff --git a/t/tap-empty.sh b/t/tap-empty.sh
new file mode 100644
index 000000000..44eb2af76
--- /dev/null
+++ b/t/tap-empty.sh
@@ -0,0 +1,53 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support: the following situations should be flagged as errors:
+# - empty TAP input
+# - blank TAP input
+
+. test-init.sh
+
+. tap-setup.sh
+
+# Empty TAP input.
+: > empty.test
+
+# Blank TAP input (one empty line).
+echo > blank.test
+
+# Blank TAP input (one whitespace-only line).
+cat > white.test <<END
+ ${tab}
+END
+
+# Blank TAP input (few blank and whitespace-only lines).
+cat > white2.test <<END
+
+
+ ${tab} ${tab}${tab}
+
+${tab}
+
+END
+
+for input in empty blank white white2; do
+ cp $input.test all.test
+ run_make -O -e FAIL check
+ count_test_results total=1 pass=0 fail=0 xpass=0 xfail=0 skip=0 error=1
+ grep '^ERROR: all\.test - missing test plan$' stdout
+done
+
+:
diff --git a/t/tap-escape-directive-2.sh b/t/tap-escape-directive-2.sh
new file mode 100644
index 000000000..3aba4e1fe
--- /dev/null
+++ b/t/tap-escape-directive-2.sh
@@ -0,0 +1,52 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - "escape" TODO and SKIP directives (by escaping the "#" character)
+
+. test-init.sh
+
+. tap-setup.sh
+
+cat > all.test <<'END'
+1..8
+
+not ok \ # TODO
+ok \ # SKIP
+
+not ok \\# TODO
+ok \\# SKIP
+
+ok \\\# TODO
+ok \\\# SKIP
+
+not ok \\\\\\\\\\# TODO
+ok \\\\\\\\\\# SKIP
+END
+
+run_make -O check
+count_test_results total=8 pass=2 fail=0 xpass=0 xfail=3 skip=3 error=0
+
+grep '^XFAIL: all\.test 1 .*# TODO' stdout
+grep '^SKIP: all\.test 2 .*# SKIP' stdout
+grep '^XFAIL: all\.test 3 .*# TODO' stdout
+grep '^SKIP: all\.test 4 .*# SKIP' stdout
+grep '^PASS: all\.test 5 .*# TODO' stdout
+grep '^PASS: all\.test 6 .*# SKIP' stdout
+grep '^XFAIL: all\.test 7 .*# TODO' stdout
+grep '^SKIP: all\.test 8 .*# SKIP' stdout
+
+:
diff --git a/t/tap-escape-directive.sh b/t/tap-escape-directive.sh
new file mode 100644
index 000000000..603c949c1
--- /dev/null
+++ b/t/tap-escape-directive.sh
@@ -0,0 +1,36 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - "escape" TODO and SKIP directives (by escaping the "#" character)
+
+. test-init.sh
+
+. tap-setup.sh
+
+cat > all.test <<'END'
+1..2
+ok \# TODO
+ok \# SKIP
+END
+
+run_make -O check
+count_test_results total=2 pass=2 fail=0 xpass=0 xfail=0 skip=0 error=0
+
+grep '^PASS: all\.test 1 .*# TODO' stdout
+grep '^PASS: all\.test 2 .*# SKIP' stdout
+
+:
diff --git a/t/tap-exit.sh b/t/tap-exit.sh
new file mode 100644
index 000000000..f09e7f411
--- /dev/null
+++ b/t/tap-exit.sh
@@ -0,0 +1,51 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - an exit status != 0 of a test script causes an hard error
+# - the '--ignore-exit' option causes the TAP test driver to ignore
+# exit statuses of the test scripts.
+
+. test-init.sh
+
+echo TESTS = > Makefile.am
+for st in 1 2 77 99; do
+ unindent > exit${st}.test <<END
+ #!/bin/sh
+ echo 1..1
+ echo ok 1
+ exit $st
+END
+ echo TESTS += exit${st}.test >> Makefile.am
+done
+
+chmod a+x *.test
+
+. tap-setup.sh
+
+run_make -O -e FAIL check
+count_test_results total=8 pass=4 fail=0 xpass=0 xfail=0 skip=0 error=4
+
+grep '^ERROR: exit1\.test - exited with status 1$' stdout
+grep '^ERROR: exit2\.test - exited with status 2$' stdout
+grep '^ERROR: exit77\.test - exited with status 77$' stdout
+grep '^ERROR: exit99\.test - exited with status 99$' stdout
+
+echo TEST_LOG_DRIVER_FLAGS = --ignore-exit >> Makefile
+run_make -O check
+count_test_results total=4 pass=4 fail=0 xpass=0 xfail=0 skip=0 error=0
+
+:
diff --git a/t/tap-fancy.sh b/t/tap-fancy.sh
new file mode 100644
index 000000000..1296306f4
--- /dev/null
+++ b/t/tap-fancy.sh
@@ -0,0 +1,127 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support: some unusual forms for valid TAP input.
+# See also related test 'tap-fancy2.sh'.
+
+. test-init.sh
+
+. tap-setup.sh
+
+#
+# From manpage Test::Harness::TAP(3):
+#
+# Lines written to standard output matching /^(not )?ok\b/ must be
+# interpreted as test lines. All other lines must not be considered
+# test output.
+#
+# Unfortunately, the exact format of TODO and SKIP directives is not as
+# clearly described in that manpage; but a simple reverse-engineering of
+# the prove(1) utility shows that it is probably given by the perl regex
+# /#\s*(TODO|SKIP)\b/.
+#
+
+cat > all.test <<END
+1..21
+
+ok? a question
+not ok? a question
+
+ok+plus
+not ok+plus
+
+ok-minus
+not ok-minus
+
+ok#55
+not ok#55
+
+ok${tab} ${tab}9
+ok ${tab}${tab} 10
+
+not ok${tab} ${tab}11
+not ok ${tab}${tab} 12
+
+ok# SKIP
+ok${tab}#SKIP--who cares?
+ok?#SKIP!
+ok!#SKIP?
+
+not ok# TODO
+not ok${tab}#TODO--who cares?
+not ok?#TODO!
+not ok!#TODO?
+
+ok~#TODO
+END
+
+run_make -O -e FAIL check
+count_test_results total=21 pass=6 fail=6 xfail=4 xpass=1 skip=4 error=0
+
+#
+# "Weird" characters support.
+#
+
+# The "#" character might cause confusion w.r.t. TAP directives (TODO,
+# SKIP), so we don't attempt to use it.
+weirdchars=\''"$!&()[]<>;^?*/@%=,.:'
+
+cat > all.test <<END
+1..6
+ok $weirdchars
+not ok $weirdchars
+ok $weirdchars # TODO
+not ok $weirdchars # TODO
+ok $weirdchars # SKIP
+Bail out! $weirdchars
+END
+
+run_make -O -e FAIL check
+count_test_results total=6 pass=1 fail=1 xfail=1 xpass=1 skip=1 error=1
+$FGREP "PASS: all.test 1 $weirdchars" stdout
+$FGREP "FAIL: all.test 2 $weirdchars" stdout
+$FGREP "XPASS: all.test 3 $weirdchars" stdout
+$FGREP "XFAIL: all.test 4 $weirdchars" stdout
+$FGREP "SKIP: all.test 5 $weirdchars" stdout
+$FGREP "ERROR: all.test - Bail out! $weirdchars" stdout
+
+#
+# Trailing backslashes does not confuse the parser.
+#
+
+bs='\'
+
+cat > all.test <<END
+1..6
+ok $bs
+not ok $bs
+ok # TODO $bs
+not ok # TODO $bs
+ok # SKIP $bs
+Bail out! $bs
+END
+
+run_make -O -e FAIL check
+count_test_results total=6 pass=1 fail=1 xfail=1 xpass=1 skip=1 error=1
+
+grep '^PASS: all\.test 1 \\$' stdout
+grep '^FAIL: all\.test 2 \\$' stdout
+grep '^XPASS: all\.test 3 # TODO \\$' stdout
+grep '^XFAIL: all\.test 4 # TODO \\$' stdout
+grep '^SKIP: all\.test 5 # SKIP \\$' stdout
+grep '^ERROR: all\.test - Bail out! \\$' stdout
+
+:
diff --git a/t/tap-fancy2.sh b/t/tap-fancy2.sh
new file mode 100644
index 000000000..a4851cd04
--- /dev/null
+++ b/t/tap-fancy2.sh
@@ -0,0 +1,136 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support: more unusual forms for valid TAP input.
+# See also related test 'tap-fancy.sh'.
+
+. test-init.sh
+
+. tap-setup.sh
+
+#
+# From manpage Test::Harness::TAP(3):
+#
+# Lines written to standard output matching /^(not )?ok\b/ must be
+# interpreted as test lines. All other lines must not be considered
+# test output.
+#
+# Unfortunately, the exact format of TODO and SKIP directives is not as
+# clearly described in that manpage; but a simple reverse-engineering of
+# the prove(1) utility shows that it is probably given by the perl regex
+# /#\s*(TODO|SKIP)\b/.
+#
+
+# To avoid problems with backslashes in echo arguments.
+xecho () { printf '%s\n' "$*"; }
+
+# There are 34 values for $str ...
+for str in \
+ \' \
+ '"' \
+ '`' \
+ '#' \
+ '$' \
+ '!' \
+ '\' \
+ '/' \
+ '&' \
+ '%' \
+ '(' \
+ ')' \
+ '|' \
+ '^' \
+ '~' \
+ '?' \
+ '*' \
+ '+' \
+ '-' \
+ ',' \
+ ':' \
+ ';' \
+ '=' \
+ '<' \
+ '>' \
+ '@' \
+ '[' \
+ ']' \
+ '{' \
+ '}' \
+ '\\' \
+ '...' \
+ '?[a-zA-Z0-9]*' \
+ '*.*' \
+; do
+ # ... each of them add 1 pass, 1 fail, ...
+ xecho "ok${str}"
+ xecho "not ok${str}"
+ # ... and (generally) 4 skips, 4 xfails, and 4 xpasses ...
+ for settings in \
+ 'result="ok" directive=SKIP' \
+ 'result="not ok" directive=TODO' \
+ 'result="ok" directive=TODO' \
+ ; do
+ eval "$settings"
+ xecho "${result}# ${directive}${str}"
+ # ... but 6 skips, 6 xpasses and 6 xfails are to be removed, since
+ # they might not work with $str = '#' or $str = '\' ...
+ if test x"$str" != x'#' && test x"$str" != x'\'; then
+ xecho "${result}${str}#${directive}"
+ xecho "${result}${str}# ${tab}${tab} ${directive}"
+ xecho "${result}${str}#${directive}${str}"
+ fi
+ done
+done > all.test
+
+# Sanity check against a previous use of unportable usages of backslashes
+# with the "echo" builtin.
+if grep '[^\\]\\#' all.test; then
+ framework_failure_ "writing backslashes in all.test"
+fi
+
+# ... so that we finally have:
+pass=34
+fail=34
+xfail=130 # = 4 * 34 - 6
+xpass=130 # = 4 * 34 - 6
+skip=130 # = 4 * 34 - 6
+error=0
+total=$(($pass + $fail + $xfail + $xpass + $skip))
+
+# Even nastier! But accordingly to the specifics, it should still work.
+for result in 'ok' 'not ok'; do
+ echo "${result}{[(<#${tab}TODO>)]}" >> all.test
+done
+echo "ok{[(<#${tab}SKIP>)]}" >> all.test
+
+# We have to update some test counts.
+xfail=$(($xfail + 1))
+xpass=$(($xpass + 1))
+skip=$(($skip + 1))
+total=$(($total + 3))
+
+# And add the test plan!
+echo 1..$total >> all.test
+
+run_make -O -e FAIL check
+
+$EGREP '^(PASS|FAIL|SKIP).*#.*TODO' stdout && exit 1
+$EGREP '^X?(PASS|FAIL).*#.*SKIP' stdout && exit 1
+
+count_test_results total=$total pass=$pass fail=$fail skip=$skip \
+ xpass=$xpass xfail=$xfail error=$error
+
+:
diff --git a/t/tap-global-log.sh b/t/tap-global-log.sh
new file mode 100644
index 000000000..57f55e608
--- /dev/null
+++ b/t/tap-global-log.sh
@@ -0,0 +1,122 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - which log files get copied in the global log?
+
+. test-init.sh
+
+. tap-setup.sh
+
+cat > ok.test << 'END'
+1..5
+ok 1
+ok 2
+ok 3
+not seen in global log
+ok 4
+ok 5
+END
+
+cat > top << 'END'
+1..6
+ok 1
+ok 2
+ok 3
+END
+
+cat > bot << 'END'
+ok 5
+ok 6
+END
+
+cat top - bot > skip.test << 'END'
+ok # SKIP
+::skip::
+END
+
+cat top - bot > todo.test << 'END'
+not ok # TODO
+::todo::
+END
+
+cat top - bot > fail.test << 'END'
+not ok
+::fail::
+END
+
+cat top - bot > xpass.test << 'END'
+ok # TODO
+::xpass::
+END
+
+cat top - bot > bail.test << 'END'
+::bail::
+Bail out!
+END
+
+cat top - bot > error.test << 'END'
+::error::
+1..7
+END
+
+# Created with "dd if=/dev/urandom count=1 | base64-encode"
+cat > hodgepodge <<'END'
+1+0 records in
+1+0 records out
+512 bytes (512 B) copied, 0.000241092 s, 2.1 MB/s
+gdivnV4VhL4DOzhE3zULJuun3PwqqQqMdATVcZbIQkNgyRvNBoqqHMBQEs7QsjDbp2nK+Szz
+EcelGyvXmHrW7yImaom6Yrg95k31VCmp/pGDRnTDwDrcOPJiv9jDReEmTAQkPuqLO+mFNly+
+DDHM9fNbzGumstsQ3wq3DOXz1pCV3JXwhjeaHSboeEbmr55bX0XHLSKaecctA0rXDXEyZWZ/
+ODlawSrAXzw0H7a+xBwjnNXZ3zYiwk3x+WQrPqNjb+qXiLLTxAKzx2/KnaFhxkPlte5jPRNB
+FciDolL+H/10LsCdSzLOrGnY2zH6vL2JMZfxjnb73zWFcdWWE01LTD7wpN5O1MP3+N47lcVe
+lWbkD04cJvhwxLElYSO24B743GG5EyGYt9SeZRE6xbgwq3fVOS8KqjwGxwi4adSBTtw0CV8W
+S/6n8dck1vBvjA+qpk0zMSYSqc3+jzW9UiGTmTEIwfw80p/lGNsfjcNBJ86nFkWUnHmrsi8k
+Dv57sK70mTg239g08f5Uvdga/5UreMBSgB0hUj5sbq57r7B1fsVr0Kag468la8zKy3ZEZ0gX
+++sbaJ9WGHhnKvjooeH+4Y6HwAFsdINde++FlCmp4EuNKKEEuXbSKLaOTy3+6pJ2DYdvRCL+
+frZwxH4hcrw8qh+8IakB02viewZS/qT57v4=
+END
+
+exec 5>misc.test
+echo 'ok # SKIP' >&5
+cat hodgepodge >&5
+echo 'not ok # TODO' >&5
+echo 'ok' >&5
+exec 5>&-
+
+cat > skipall.test << 'END'
+1..0 # SKIP all
+END
+
+run_make -e IGNORE TESTS="$(echo *.test)" check
+cat test-suite.log
+
+grep ':.*ok|not seen' test-suite.log && exit 1
+
+for s in skip todo fail xpass bail error; do
+ $FGREP "::$s::" test-suite.log
+done
+
+grep '^1\.\.0 # SKIP all$' test-suite.log
+
+test_suite_contents=$(cat test-suite.log)
+hodgepodge_contents=$(cat hodgepodge)
+case $test_suite_contents in
+ *"$hodgepodge_contents"*) ;;
+ *) exit 1;;
+esac
+
+:
diff --git a/t/tap-global-result.sh b/t/tap-global-result.sh
new file mode 100644
index 000000000..e89348cc3
--- /dev/null
+++ b/t/tap-global-result.sh
@@ -0,0 +1,185 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - which global test result derives from different test results
+# mixed in a single script?
+
+. test-init.sh
+
+. tap-setup.sh
+
+cat > ok.test <<END
+1..3
+ok 1
+not ok 2 # TODO
+ok 3 # SKIP
+END
+
+cat > skip.test <<'END'
+1..3
+ok 1 # SKIP
+ok 2 # SKIP
+ok 3 # SKIP
+END
+
+cat > skipall.test <<'END'
+1..0 # SKIP
+foo
+# bar
+END
+
+cat > fail.test <<'END'
+1..1
+not ok 1
+END
+
+(sed '1s/.*/1..4/' ok.test && echo 'not ok 4') > fail2.test
+
+cat > xpass.test <<'END'
+1..1
+ok 1 # TODO
+END
+
+(sed '1s/.*/1..4/' ok.test && echo 'ok 4 # TODO') > xpass2.test
+
+echo 'Bail out!' > bail.test
+
+(cat ok.test && echo 'Bail out!') > bail2.test
+
+cat > bail3.test <<'END'
+1..0 # SKIP
+Bail out!
+END
+
+# Too many tests.
+cat > error.test <<'END'
+1..2
+ok 1
+ok 2 # SKIP
+not ok 3
+not ok 4 # TODO
+END
+
+# Too few tests.
+cat > error2.test <<'END'
+1..4
+ok 1
+not ok 2 # TODO
+ok 3 # SKIP
+END
+
+# Repeated plan.
+cat > error3.test <<'END'
+1..2
+1..2
+ok 1
+ok 2
+END
+
+# Too many tests, after a "SKIP" plan.
+cat > error4.test <<'END'
+1..0 # SKIP
+ok 1
+ok 2
+END
+
+# Tests out of order.
+cat > error5.test <<'END'
+1..4
+not ok 1 # TODO
+ok 3
+ok 2
+ok 4
+END
+
+# Wrong test number.
+cat > error6.test <<'END'
+1..2
+ok 1 # SKIP
+ok 7
+END
+
+# No plan.
+cat > error7.test <<'END'
+ok 1 # SKIP
+ok 2 # TODO
+not ok 3 # TODO
+ok 4
+END
+
+cat > hodgepodge.test <<'END'
+1..2
+not ok 1
+ok 2 # TODO
+Bail out!
+END
+
+cat > hodgepodge-all.test <<'END'
+1..4
+ok 1
+ok 2 # SKIP
+not ok 2 # TODO
+not ok 3
+ok 4 # TODO
+Bail out!
+END
+
+tests=$(echo *.test) # Also required later.
+
+run_make -O -e FAIL TESTS="$tests" check
+
+# Dirty trick required here.
+for tst in $(echo " $tests " | sed 's/\.test / /'); do
+ echo :copy-in-global-log: yes >> $tst.trs
+done
+
+rm -f test-suite.log
+run_make -e FAIL TESTS="$tests" test-suite.log
+cat test-suite.log
+
+have_rst_section ()
+{
+ eqeq=$(echo "$1" | sed 's/./=/g')
+ # Assume $1 contains no RE metacharacters.
+ sed -n "/^$1$/,/^$eqeq$/p" test-suite.log > got
+ (echo "$1" && echo "$eqeq") > exp
+ cat exp
+ cat got
+ diff exp got
+}
+
+have_rst_section 'PASS: ok'
+have_rst_section 'SKIP: skip'
+have_rst_section 'SKIP: skipall'
+have_rst_section 'FAIL: fail'
+have_rst_section 'FAIL: fail2'
+have_rst_section 'FAIL: xpass'
+have_rst_section 'FAIL: xpass2'
+have_rst_section 'ERROR: bail'
+have_rst_section 'ERROR: bail2'
+have_rst_section 'ERROR: bail3'
+have_rst_section 'ERROR: error'
+have_rst_section 'ERROR: error2'
+have_rst_section 'ERROR: error3'
+have_rst_section 'ERROR: error4'
+have_rst_section 'ERROR: error5'
+have_rst_section 'ERROR: error6'
+have_rst_section 'ERROR: error7'
+have_rst_section 'ERROR: hodgepodge'
+have_rst_section 'ERROR: hodgepodge-all'
+
+:
diff --git a/t/tap-log.sh b/t/tap-log.sh
new file mode 100644
index 000000000..fbfdcc1bf
--- /dev/null
+++ b/t/tap-log.sh
@@ -0,0 +1,162 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - log file creation
+# - log file removal
+# - stdout and stderr of a script go in its log file
+# - TEST_SUITE_LOG redefinition, at either automake or make time
+# - VERBOSE environment variable support
+# Keep in sync with 'test-log.sh'.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+TESTS = pass.test skip.test xfail.test fail.test xpass.test error.test
+TEST_SUITE_LOG = global.log
+END
+
+. tap-setup.sh
+
+# Custom markers, for use in grepping checks.
+cmarker=::: # comment marker
+pmarker=%%% # plain maker
+
+cat > pass.test <<END
+#! /bin/sh -e
+echo 1..1
+echo "$pmarker pass $pmarker" >&2
+echo "# $cmarker pass $cmarker" >&2
+echo "ok 1"
+END
+
+cat > skip.test <<END
+#! /bin/sh -e
+echo 1..1
+echo "$pmarker skip $pmarker"
+echo "# $cmarker skip $cmarker"
+echo "ok 1 # SKIP"
+END
+
+cat > xfail.test <<END
+#! /bin/sh -e
+echo 1..1
+echo "$pmarker xfail $pmarker" >&2
+echo "# $cmarker xfail $cmarker" >&2
+echo "not ok 1 # TODO"
+END
+
+cat > fail.test <<END
+#! /bin/sh -e
+echo 1..1
+echo "$pmarker fail $pmarker"
+echo "# $cmarker fail $cmarker"
+echo "not ok 1"
+END
+
+cat > xpass.test <<END
+#! /bin/sh -e
+echo 1..1
+echo "$pmarker xpass $pmarker" >&2
+echo "# $cmarker xpass $cmarker" >&2
+echo "ok 1 # TODO"
+END
+
+cat > error.test <<END
+#! /bin/sh -e
+echo 1..1
+echo "$pmarker error $pmarker"
+echo "# $cmarker error $cmarker"
+echo 'Bail out!'
+END
+
+chmod a+x *.test
+
+run_make -e FAIL TEST_SUITE_LOG=my.log check
+ls -l # For debugging.
+test ! -e test-suite.log
+test ! -e global.log
+test -f my.log
+st=0
+for result in pass fail xfail xpass skip error; do
+ cat $result.log # For debugging.
+ $FGREP "$pmarker $result $pmarker" $result.log || st=1
+ $FGREP "$cmarker $result $cmarker" $result.log || st=1
+done
+test $st -eq 0 || exit 1
+cat my.log # For debugging.
+for result in xfail fail xpass skip error; do
+ cat $result.log # For debugging.
+ $FGREP "$pmarker $result $pmarker" my.log || st=1
+ $FGREP "$cmarker $result $cmarker" my.log || st=1
+done
+test $($FGREP -c "$pmarker" my.log) -eq 5
+test $($FGREP -c "$cmarker" my.log) -eq 5
+
+# Passed test scripts shouldn't be mentioned in the global log.
+$EGREP '(^pass|[^x]pass)\.test' my.log && exit 1
+# But failing (expectedly or not) and skipped ones should.
+$FGREP 'xfail.test' my.log
+$FGREP 'skip.test' my.log
+$FGREP 'fail.test' my.log
+$FGREP 'xpass.test' my.log
+$FGREP 'error.test' my.log
+
+touch error2.log test-suite.log global.log
+run_make TEST_SUITE_LOG=my.log mostlyclean
+ls -l # For debugging.
+test ! -e my.log
+test ! -e pass.log
+test ! -e fail.log
+test ! -e xfail.log
+test ! -e xpass.log
+test ! -e skip.log
+test ! -e error.log
+# "make mostlyclean" shouldn't remove unrelated log files.
+test -f error2.log
+test -f test-suite.log
+test -f global.log
+
+rm -f *.log
+
+run_make -O -e FAIL check VERBOSE=yes
+cat global.log
+test ! -e my.log
+test ! -e test-suite.log
+# Check that VERBOSE causes the global testsuite log to be
+# emitted on stdout.
+out=$(cat stdout)
+log=$(cat global.log)
+case $out in *"$log"*) ;; *) exit 1;; esac
+
+touch error2.log test-suite.log my.log
+$MAKE clean
+ls -l # For debugging.
+test ! -e global.log
+test ! -e pass.log
+test ! -e fail.log
+test ! -e xfail.log
+test ! -e xpass.log
+test ! -e skip.log
+test ! -e error.log
+# "make clean" shouldn't remove unrelated log files.
+test -f error2.log
+test -f test-suite.log
+test -f my.log
+
+rm -f *.log
+
+:
diff --git a/t/tap-merge-stdout-stderr.sh b/t/tap-merge-stdout-stderr.sh
new file mode 100644
index 000000000..dc411cbc6
--- /dev/null
+++ b/t/tap-merge-stdout-stderr.sh
@@ -0,0 +1,63 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - The Automake TAP driver has an option that instruct it to read TAP
+# input also from the stderr of the test command, not only its stdout.
+
+. test-init.sh
+
+fetch_tap_driver
+
+cat > Makefile.am << 'END'
+AM_TEST_LOG_DRIVER_FLAGS = --comments --merge
+TESTS = all.test
+END
+
+. tap-setup.sh
+
+cat > all.test <<END
+#!/bin/sh
+echo 1..4
+echo ok 1 >&2
+echo ok 2
+echo "not ok 3 # TODO" >&2
+echo "ok 4 # SKIP"
+echo "# foo foo foo" >&2
+END
+chmod a+x all.test
+
+run_make -O check
+count_test_results total=4 pass=2 fail=0 xpass=0 xfail=1 skip=1 error=0
+
+grep '^# all\.test: foo foo foo' stdout
+
+cat > all.test <<END
+#!/bin/sh
+echo 1..1
+echo ok 1
+echo 'Bail out!' >&2
+END
+
+run_make -O -e FAIL check
+count_test_results total=2 pass=1 fail=0 xpass=0 xfail=0 skip=0 error=1
+
+# See that the option '--no-merge' can override the effect of '--merge'.
+
+run_make -O TEST_LOG_DRIVER_FLAGS=--no-merge check
+count_test_results total=1 pass=1 fail=0 xpass=0 xfail=0 skip=0 error=0
+
+:
diff --git a/t/tap-missing-plan-and-bad-exit.sh b/t/tap-missing-plan-and-bad-exit.sh
new file mode 100644
index 000000000..5a1d0f9e9
--- /dev/null
+++ b/t/tap-missing-plan-and-bad-exit.sh
@@ -0,0 +1,41 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - if a test script exits with non-zero status before printing the TAP
+# plan, then the driver reports both "missing plan" and "exited with
+# non-zero status" errors.
+
+. test-init.sh
+
+cat > foo.test <<END
+#!/bin/sh
+exit 123
+END
+
+echo TESTS = foo.test > Makefile.am
+
+chmod a+x foo.test
+
+. tap-setup.sh
+
+run_make -O -e FAIL check
+count_test_results total=2 pass=0 fail=0 xpass=0 xfail=0 skip=0 error=2
+
+grep '^ERROR: foo\.test - exited with status 123$' stdout
+grep '^ERROR: foo\.test - missing test plan$' stdout
+
+:
diff --git a/t/tap-more.sh b/t/tap-more.sh
new file mode 100644
index 000000000..478868b5e
--- /dev/null
+++ b/t/tap-more.sh
@@ -0,0 +1,159 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# More on TAP support:
+# - more than one TAP-generating test script in $(TESTS)
+# - VPATH builds
+# - use with parallel make (if supported)
+# - basic use of diagnostic messages (lines beginning with "#")
+# - flags for TAP driver defined through AC_SUBST in configure.ac
+# - messages generated by the testsuite harness reference the
+# correct test script(s)
+# - "make distcheck" works
+
+. test-init.sh
+
+fetch_tap_driver
+
+cat >> configure.ac <<END
+AC_SUBST([AM_TEST_LOG_DRIVER_FLAGS], ['--comments'])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TEST_LOG_DRIVER = $(srcdir)/tap-driver
+TESTS = 1.test 2.test 3.test
+EXTRA_DIST = $(TESTS) tap-driver
+END
+
+cat > 1.test <<'END'
+#! /bin/sh
+echo 1..2
+echo ok 1 - mu
+if test -f not-skip; then
+ echo "not ok 2 zardoz"
+else
+ echo "ok 2 zardoz # SKIP"
+fi
+END
+
+cat > 2.test <<'END'
+#! /bin/sh
+echo 1..3
+echo "ok"
+echo "not ok # TODO not implemented"
+echo "ok 3"
+END
+
+cat > 3.test <<END
+#! /bin/sh
+echo 1..1
+echo ok - blah blah blah
+echo '# Some diagnostic'
+if test -f bail-out; then
+ echo 'Bail out! Kernel Panic'
+else
+ :
+fi
+END
+
+chmod a+x [123].test
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+# Try a VPATH and by default serial build first, and then an in-tree
+# and by default parallel build.
+for try in 0 1; do
+
+ if test $try -eq 0; then
+ # VPATH serial build.
+ mkdir build
+ cd build
+ srcdir=..
+ am_make=$MAKE
+ elif test $try -eq 1; then
+ # In-tree parallel build.
+ srcdir=.
+ case $MAKE in
+ *\ -j*)
+ # Degree of parallelism already specified by the user: do
+ # not override it.
+ :
+ ;;
+ *)
+ # Some make implementations (e.g., HP-UX) don't grok '-j',
+ # some require no space between '-j' and the number of jobs
+ # (e.g., older GNU make versions), and some *do* require a
+ # space between '-j' and the number of jobs (e.g., Solaris
+ # dmake). We need a runtime test to see what works.
+ echo 'all:' > Makefile
+ for am_make in "$MAKE -j3" "$MAKE -j 3" "$MAKE"; do
+ $am_make && break
+ done
+ rm -f Makefile
+ MAKE=$am_make
+ unset am_make
+ ;;
+ esac
+ else
+ fatal_ "internal error, invalid value of '$try' for \$try"
+ fi
+
+ $srcdir/configure
+ ls -l # For debugging.
+
+ # Success.
+
+ run_make -O check
+ count_test_results total=6 pass=4 fail=0 xpass=0 xfail=1 skip=1 error=0
+ grep '^PASS: 1\.test 1 - mu$' stdout
+ grep '^SKIP: 1\.test 2 zardoz # SKIP$' stdout
+ test $(grep -c '1\.test' stdout) -eq 2
+ grep '^PASS: 2\.test 1$' stdout
+ grep '^XFAIL: 2\.test 2 # TODO not implemented$' stdout
+ grep '^PASS: 2\.test 3$' stdout
+ test $(grep -c '2\.test' stdout) -eq 3
+ grep '^PASS: 3\.test 1 - blah blah blah$' stdout
+ grep '^# 3\.test: Some diagnostic$' stdout
+ test $(grep -c '3\.test' stdout) -eq 2
+
+ # Failure.
+
+ : > not-skip
+ : > bail-out
+ run_make -e FAIL -O check
+ count_test_results total=7 pass=4 fail=1 xpass=0 xfail=1 skip=0 error=1
+ grep '^PASS: 1\.test 1 - mu$' stdout
+ grep '^FAIL: 1\.test 2 zardoz$' stdout
+ test $(grep -c '1\.test' stdout) -eq 2
+ grep '^PASS: 2\.test 1$' stdout
+ grep '^XFAIL: 2\.test 2 # TODO not implemented$' stdout
+ grep '^PASS: 2\.test 3$' stdout
+ test $(grep -c '2\.test' stdout) -eq 3
+ grep '^PASS: 3\.test 1 - blah blah blah$' stdout
+ grep '^# 3\.test: Some diagnostic$' stdout
+ grep '^ERROR: 3\.test - Bail out! Kernel Panic$' stdout
+ test $(grep -c '3\.test' stdout) -eq 3
+
+ cd $srcdir
+
+done
+
+$MAKE distcheck
+
+:
diff --git a/t/tap-more2.sh b/t/tap-more2.sh
new file mode 100644
index 000000000..628545db6
--- /dev/null
+++ b/t/tap-more2.sh
@@ -0,0 +1,89 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# More on TAP support:
+# - more LOG_COMPILER at once for TAP tests
+# - binary programs in $(TESTS)
+# - interactions with 'check_*' variables
+
+required='cc native'
+. test-init.sh
+
+fetch_tap_driver
+
+cat >> configure.ac <<END
+AC_PROG_CC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TEST_EXTENSIONS = .sh .tap
+
+tap_driver = $(srcdir)/tap-driver
+
+LOG_DRIVER = $(tap_driver)
+SH_LOG_DRIVER = $(tap_driver)
+TAP_LOG_DRIVER = $(tap_driver)
+
+TAP_LOG_COMPILER = cat
+SH_LOG_COMPILER = $(SHELL)
+LOG_COMPILER =
+
+EXTRA_DIST = baz.tap
+
+check_SCRIPTS = bar.sh
+bar.sh: Makefile
+ echo '#!/bin/sh' > $@-t
+ echo 'echo 1..1' >> $@-t
+ echo 'echo "not ok 1 # TODO"' >> $@-t
+ chmod a-w $@-t && mv -f $@-t $@
+CLEANFILES = bar.sh
+
+check_PROGRAMS = foo-test
+foo_test_SOURCES = foo.c
+
+TESTS = foo-test $(check_SCRIPTS) baz.tap
+
+EXTRA_DIST += tap-driver
+END
+
+cat > foo.c <<'END'
+#include <stdio.h>
+int main (void)
+{
+ printf ("1..1\n");
+ printf ("ok 1\n");
+ return 0;
+}
+END
+
+cat > baz.tap << 'END'
+1..1
+ok 1 # SKIP
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+
+for target in check distcheck; do
+ run_make -O $target
+ count_test_results total=3 pass=1 fail=0 xpass=0 xfail=1 skip=1 error=0
+done
+
+:
diff --git a/t/tap-msg0-bailout.sh b/t/tap-msg0-bailout.sh
new file mode 100644
index 000000000..ab661f7f1
--- /dev/null
+++ b/t/tap-msg0-bailout.sh
@@ -0,0 +1,35 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - literal strings "0" and "0.0" as a test description in the message
+# of a "plan with skip" TAP plan
+# generally true!
+
+. test-init.sh
+
+. tap-setup.sh
+
+echo 'Bail out! 0' > a.test
+echo 'Bail out! 0.0' > b.test
+
+run_make -O -e FAIL TESTS='a.test b.test' check
+count_test_results total=2 pass=0 fail=0 xpass=0 xfail=0 skip=0 error=2
+
+grep '^ERROR: a.test - Bail out! 0$' stdout
+grep '^ERROR: b.test - Bail out! 0\.0$' stdout
+
+:
diff --git a/t/tap-msg0-directive.sh b/t/tap-msg0-directive.sh
new file mode 100644
index 000000000..8756c939e
--- /dev/null
+++ b/t/tap-msg0-directive.sh
@@ -0,0 +1,38 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - literal string "0" as a TODO or SKIP message
+
+. test-init.sh
+
+. tap-setup.sh
+
+cat > all.test << 'END'
+1..3
+ok 1 # TODO 0
+not ok 2 # TODO 0
+ok 3 # SKIP 0
+END
+
+run_make -O -e FAIL check
+count_test_results total=3 pass=0 fail=0 xpass=1 xfail=1 skip=1 error=0
+
+grep '^XPASS: all\.test 1 # TODO 0$' stdout
+grep '^XFAIL: all\.test 2 # TODO 0$' stdout
+grep '^SKIP: all\.test 3 # SKIP 0$' stdout
+
+:
diff --git a/t/tap-msg0-misc.sh b/t/tap-msg0-misc.sh
new file mode 100644
index 000000000..76596b23b
--- /dev/null
+++ b/t/tap-msg0-misc.sh
@@ -0,0 +1,79 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - literal "0" and "0.0" in a test description and a TODO/SKIP message
+# at the same time
+
+. test-init.sh
+
+. tap-setup.sh
+
+cat > all.test << 'END'
+1..14
+
+ok 1 0
+ok 2 0.0
+
+ok 3 0 # TODO 0
+ok 4 0.0 # TODO 0
+ok 5 0 # TODO 0.0
+ok 6 0.0 # TODO 0.0
+
+not ok 7 0 # TODO 0
+not ok 8 0.0 # TODO 0
+not ok 9 0 # TODO 0.0
+not ok 10 0.0 # TODO 0.0
+
+ok 11 0 # SKIP 0
+ok 12 0.0 # SKIP 0
+ok 13 0 # SKIP 0.0
+ok 14 0.0 # SKIP 0.0
+
+END
+
+run_make -O -e FAIL check
+count_test_results total=14 pass=2 fail=0 xpass=4 xfail=4 skip=4 error=0
+
+sed '/^ *$/d' > exp << 'END'
+
+PASS: all.test 1 0
+PASS: all.test 2 0.0
+
+XPASS: all.test 3 0 # TODO 0
+XPASS: all.test 4 0.0 # TODO 0
+XPASS: all.test 5 0 # TODO 0.0
+XPASS: all.test 6 0.0 # TODO 0.0
+
+XFAIL: all.test 7 0 # TODO 0
+XFAIL: all.test 8 0.0 # TODO 0
+XFAIL: all.test 9 0 # TODO 0.0
+XFAIL: all.test 10 0.0 # TODO 0.0
+
+SKIP: all.test 11 0 # SKIP 0
+SKIP: all.test 12 0.0 # SKIP 0
+SKIP: all.test 13 0 # SKIP 0.0
+SKIP: all.test 14 0.0 # SKIP 0.0
+
+END
+
+$FGREP ': all.test' stdout > got
+
+cat exp
+cat got
+diff exp got
+
+:
diff --git a/t/tap-msg0-planskip.sh b/t/tap-msg0-planskip.sh
new file mode 100644
index 000000000..aa5ebd28b
--- /dev/null
+++ b/t/tap-msg0-planskip.sh
@@ -0,0 +1,34 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - literal strings "0" and "0.0" as the reason of the skip in a "TAP
+# plan with skip" (i.e., "1..0 # SKIP ...").
+
+. test-init.sh
+
+. tap-setup.sh
+
+echo '1..0 # SKIP 0' > a.test
+echo '1..0 # SKIP 0.0' > b.test
+
+run_make -O TESTS='a.test b.test' check
+count_test_results total=2 pass=0 fail=0 xpass=0 xfail=0 skip=2 error=0
+
+grep '^SKIP: a.test - 0$' stdout
+grep '^SKIP: b.test - 0\.0$' stdout
+
+:
diff --git a/t/tap-msg0-result.sh b/t/tap-msg0-result.sh
new file mode 100644
index 000000000..317591c98
--- /dev/null
+++ b/t/tap-msg0-result.sh
@@ -0,0 +1,60 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - the string "0" as a test description
+
+. test-init.sh
+
+. tap-setup.sh
+
+cat > all.test << 'END'
+1..10
+ok 1 0
+ok - 0
+not ok 3 0
+not ok - 0
+ok 5 0 # TODO
+ok - 0 # TODO
+not ok 7 0 # TODO
+not ok - 0 # TODO
+ok 9 0 # SKIP
+ok - 0 # SKIP
+END
+
+run_make -O -e FAIL check
+count_test_results total=10 pass=2 fail=2 xpass=2 xfail=2 skip=2 error=0
+
+cat > exp << 'END'
+PASS: all.test 1 0
+PASS: all.test 2 - 0
+FAIL: all.test 3 0
+FAIL: all.test 4 - 0
+XPASS: all.test 5 0 # TODO
+XPASS: all.test 6 - 0 # TODO
+XFAIL: all.test 7 0 # TODO
+XFAIL: all.test 8 - 0 # TODO
+SKIP: all.test 9 0 # SKIP
+SKIP: all.test 10 - 0 # SKIP
+END
+
+$FGREP ': all.test' stdout > got
+
+cat exp
+cat got
+diff exp got
+
+:
diff --git a/t/tap-negative-numbers.sh b/t/tap-negative-numbers.sh
new file mode 100644
index 000000000..b506c93cb
--- /dev/null
+++ b/t/tap-negative-numbers.sh
@@ -0,0 +1,55 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - don't spuriously recognize negative TAP result numbers, but correctly
+# interpret them as test descriptions instead
+
+. test-init.sh
+
+. tap-setup.sh
+
+cat > all.test <<'END'
+1..7
+ok -1
+not ok -3
+ok -2 # SKIP
+not ok -5 # TODO
+ok -04 # TODO
+ok -121
+not ok -50000
+END
+
+run_make -O -e FAIL check
+count_test_results total=7 pass=2 fail=2 xpass=1 xfail=1 skip=1 error=0
+
+cat > exp <<'END'
+PASS: all.test 1 -1
+FAIL: all.test 2 -3
+SKIP: all.test 3 -2 # SKIP
+XFAIL: all.test 4 -5 # TODO
+XPASS: all.test 5 -04 # TODO
+PASS: all.test 6 -121
+FAIL: all.test 7 -50000
+END
+
+$FGREP ': all.test' stdout > got
+
+cat exp
+cat got
+diff exp got
+
+:
diff --git a/t/tap-no-disable-hard-error.sh b/t/tap-no-disable-hard-error.sh
new file mode 100644
index 000000000..1cd85561f
--- /dev/null
+++ b/t/tap-no-disable-hard-error.sh
@@ -0,0 +1,47 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - "Bail out!" magic and TAP parse errors are not disabled nor turned
+# into simple failures by the definition DISABLE_HARD_ERRORS.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+DISABLE_HARD_ERRORS = yes
+TEST_LOG_COMPILER = cat
+TESTS = bail.test few.test noplan.test
+END
+
+. tap-setup.sh
+
+cat > bail.test <<END
+1..1
+Bail out!
+END
+
+cat > few.test <<END
+1..1
+END
+
+cat > noplan.test <<END
+# nothing here
+END
+
+run_make -O -e FAIL check
+count_test_results total=3 pass=0 fail=0 xpass=0 xfail=0 skip=0 error=3
+
+:
diff --git a/t/tap-no-merge-stdout-stderr.sh b/t/tap-no-merge-stdout-stderr.sh
new file mode 100644
index 000000000..cda4c3f7d
--- /dev/null
+++ b/t/tap-no-merge-stdout-stderr.sh
@@ -0,0 +1,51 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - By default, TAP input is only from the stdout (and not the stderr)
+# of the test command.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+TEST_LOG_DRIVER_FLAGS = --comments
+TESTS = all.test
+END
+
+. tap-setup.sh
+
+cat > all.test <<END
+#!/bin/sh
+echo 1..2
+echo 'not ok' >&2
+echo 'not ok 1 # TODO' >&2
+echo 'ok 1'
+echo '# foo foo foo'
+echo '# bar bar bar' >&2
+echo 'ok 44 # TODO' >&2
+echo 'Bail out!' >&2
+echo 'ok 2 # SKIP'
+END
+
+chmod a+x all.test
+
+run_make -O check
+count_test_results total=2 pass=1 fail=0 xpass=0 xfail=0 skip=1 error=0
+
+$FGREP 'foo foo foo' stdout
+$FGREP 'bar bar bar' stdout && exit 1
+
+:
diff --git a/t/tap-no-spurious-numbers.sh b/t/tap-no-spurious-numbers.sh
new file mode 100644
index 000000000..9c6835e1b
--- /dev/null
+++ b/t/tap-no-spurious-numbers.sh
@@ -0,0 +1,98 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - we shouldn't spuriously recognize as TAP result numbers what it
+# not, even if it seems pretty close
+
+. test-init.sh
+
+. tap-setup.sh
+
+cat > prefixes <<'END'
+A
+a
+_
++
+-
+=
+/
+*
+.
+:
+,
+;
+$
+@
+%
+&
+#
+?
+!
+|
+\
+"
+`
+'
+(
+)
+[
+]
+{
+}
+<
+>
+END
+
+n=$(wc -l <prefixes)
+
+# See the loop below to understand this initialization.
+pass=$(($n * 3))
+fail=$pass
+skip=$(($pass - 3))
+xfail=$skip
+xpass=$xfail
+error=0
+total=$(($pass + $fail + $skip + $xfail + $xpass))
+
+echo 1..$total > all.test
+
+highno=1000
+
+for result in 'ok' 'not ok'; do
+ for spacing in "" " " "$tab"; do
+ subst="$result &$spacing$higno"
+ sed -e "s|.*|$subst|" prefixes
+ for directive in TODO SKIP; do
+ test "$result $directive" != "not ok SKIP" || continue
+ sed -e '/^#$/d' -e "s|.*|$subst # $directive|" prefixes
+ done
+ done
+done >> all.test
+
+cat all.test # For debugging.
+
+# Sanity checks.
+grep '#.*#' all.test \
+ && framework_failure_ "creating all.test"
+test $(wc -l <all.test) -lt $highno \
+ || framework_failure_ "creating all.test"
+
+run_make -O -e IGNORE check
+count_test_results total=$total pass=$pass fail=$fail skip=$skip \
+ xpass=$xpass xfail=$xfail error=$error
+
+:
diff --git a/t/tap-no-spurious-summary.sh b/t/tap-no-spurious-summary.sh
new file mode 100644
index 000000000..bdbdf808d
--- /dev/null
+++ b/t/tap-no-spurious-summary.sh
@@ -0,0 +1,44 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - ':test-results:' directives in test scripts' output doesn't
+# originate spurious results in the testsuite summary
+
+. test-init.sh
+
+. tap-setup.sh
+
+cat > all.test <<'END'
+1..1
+:test-result: PASS
+:test-result: FAIL
+:test-result: XPASS
+:test-result: XFAIL
+:test-result: SKIP
+:test-result: ERROR
+:test-result: UNKNOWN
+ok 1
+END
+
+run_make -O check
+count_test_results total=1 pass=1 fail=0 xpass=0 xfail=0 skip=0 error=0
+
+for result in PASS FAIL XPASS XFAIL SKIP ERROR UNKNOWN; do
+ grep "^ *:test-result: $result$" all.log
+done
+
+:
diff --git a/t/tap-no-spurious.sh b/t/tap-no-spurious.sh
new file mode 100644
index 000000000..cb82022b5
--- /dev/null
+++ b/t/tap-no-spurious.sh
@@ -0,0 +1,111 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - don't spuriously recognize lines that are "almost" TAP lines as
+# real TAP lines
+
+. test-init.sh
+
+. tap-setup.sh
+
+echo 1..5 > all.test
+
+# The only recognized directives are "TODO" and "SKIP".
+# So the following should count as passed tests.
+cat >> all.test <<END
+ok 1 # XFAIL
+ok 2 # SKIPPED
+ok 3 # TO DO
+ok 4 # TODOALL
+ok 5 # FIXME
+END
+
+# According to documentation of Test::Harness::TAP(3):
+#
+# Lines written to standard output matching /^(not )?ok\b/
+# must be interpreted as test lines. All other lines must
+# not be considered test output.
+
+cat >> all.test <<END
+ ok
+ ok 1
+${tab}ok
+${tab}ok 1
+ not ok
+ not ok 1
+${tab}not ok
+${tab}not ok 1
+notok
+notok 1
+not${tab}ok
+not${tab}ok 1
+not ok
+not ok 1
+no ok
+no ok 1
+# ok
+# not ok
+# ok 1
+# not ok 1
+#ok
+#not ok
+#ok 1
+#not ok 1
+END
+
+set +x # Don't pollute logs too much.
+for r in 'ok' 'not ok'; do
+ for s1 in \
+ a b c d e f g h i j k l m n o p q r s t u v w x y z \
+ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z \
+ 0 1 2 3 4 5 6 7 8 9 _ ab 0a 23 a1B2c _o _x_y_
+ do
+ for s2 in '' @ % + - = / . : \; \* \? \& \! \# \$ \< \> \\; do
+ printf '%s\n' "$r$s1$s2"
+ done
+ done
+done >> all.test
+set -x # Reset shell xtraces.
+
+# The prove(1) utility doesn't bail out on these, so our driver
+# shouldn't either.
+# See comments in 'tap-bailout-leading-space.sh' for an explanation
+# of why we don't have a whitespace-prepended "Bail out!" line here.
+cat >> all.test <<'END'
+bailout
+bailout!
+bail out
+bail out!
+Bailout
+Bailout!
+Bail out
+ Bail out
+#Bail out!
+# Bail out!
+END
+
+
+# Debugging info and minor sanity check.
+cat all.test \
+ && test $(grep -c '^ok1$' all.test) -eq 1 \
+ && test $(grep -c '^not ok1$' all.test) -eq 1 \
+ || framework_failure_ "creating all.test"
+
+run_make -O check
+count_test_results total=5 pass=5 fail=0 xpass=0 xfail=0 skip=0 error=0
+
+:
diff --git a/t/tap-not-ok-skip.sh b/t/tap-not-ok-skip.sh
new file mode 100644
index 000000000..535a546a2
--- /dev/null
+++ b/t/tap-not-ok-skip.sh
@@ -0,0 +1,36 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - a "not ok # SKIP" line should count as a failure, for consistency
+# with the prove(1) utility.
+
+. test-init.sh
+
+. tap-setup.sh
+
+cat > all.test <<'END'
+1..4
+not ok # SKIP
+not ok 2 # SKIP
+not ok - foo # SKIP
+not ok 4 - bar # SKIP
+END
+
+run_make -O -e FAIL check
+count_test_results total=4 pass=0 fail=4 skip=0 xpass=0 xfail=0 error=0
+
+:
diff --git a/t/tap-number-wordboundary.sh b/t/tap-number-wordboundary.sh
new file mode 100644
index 000000000..3fc7940c4
--- /dev/null
+++ b/t/tap-number-wordboundary.sh
@@ -0,0 +1,105 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - TAP result numbers terminated by a non-whitespace "word boundary"
+# character are recognized
+
+. test-init.sh
+
+. tap-setup.sh
+
+cat > all.test <<'END'
+1..5
+ok 1: foo1
+not ok 2- foo2
+ok 3@ foo3 # SKIP
+not ok 4?&%$ foo4 # TODO
+ok 5"`!! foo5 # TODO
+END
+
+run_make -O -e FAIL check
+count_test_results total=5 pass=1 fail=1 skip=1 xpass=1 xfail=1 error=0
+
+$EGREP '^PASS: all\.test 1 ?: foo1$' stdout
+$EGREP '^FAIL: all\.test 2 ?- foo2$' stdout
+$EGREP '^SKIP: all\.test 3 ?@ foo3 # SKIP$' stdout
+$EGREP '^XFAIL: all\.test 4 ?\?&%\$ foo4 # TODO$' stdout
+$EGREP '^XPASS: all\.test 5 ?"`!! foo5 # TODO$' stdout
+
+cat > all.test <<'END'
+1..3
+ok 2: quux
+not ok 1!
+ok 476$ # SKIP
+END
+
+run_make -O -e FAIL check
+count_test_results total=3 pass=0 fail=0 skip=0 xpass=0 xfail=0 error=3
+
+$EGREP '^ERROR: all\.test 2 ?: quux # OUT-OF-ORDER \(expecting 1\)$' stdout
+$EGREP '^ERROR: all\.test 1 ?! # OUT-OF-ORDER \(expecting 2\)$' stdout
+$EGREP '^ERROR: all\.test 476 ?\$ # OUT-OF-ORDER \(expecting 3\)$' stdout
+
+cat > punctuation <<'END'
+'
+"
+`
+#
+$
+!
+\
+/
+&
+%
+(
+)
+|
+^
+~
+?
+*
++
+-
+,
+:
+;
+=
+<
+>
+@
+[
+]
+{
+}
+\
+END
+
+# Strip any extra whitespace, for Solaris' wc.
+planned=$(wc -l <punctuation | tr -d " $tab")
+
+echo 1..$planned > all.test
+awk '{print "ok " NR $0 }' punctuation >> all.test
+# For debugging.
+cat all.test
+# Sanity check.
+grep "^ok 1'$" all.test || framework_failure_ "creating all.test"
+
+run_make -O check
+count_test_results total=$planned pass=$planned \
+ fail=0 skip=0 xpass=0 xfail=0 error=0
+
+:
diff --git a/t/tap-numbers-leading-zero.sh b/t/tap-numbers-leading-zero.sh
new file mode 100644
index 000000000..ffedd8788
--- /dev/null
+++ b/t/tap-numbers-leading-zero.sh
@@ -0,0 +1,107 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - how does TAP result numbers with leading zero fares?
+
+. test-init.sh
+
+. tap-setup.sh
+
+do_checks ()
+{
+ run_make -O -e FAIL check
+ count_test_results "$@"
+ # Allow some normalization of leading zeros, without forcing it.
+ LC_ALL=C sed -n 's/: all\.test 0*\([0-9]\)/: all.test \1/p' stdout > got
+ cat exp
+ cat got
+ diff exp got
+}
+
+cat > all.test <<END
+1..15
+
+ok 01
+ok 0002
+
+not ok 03
+not ok 0004
+
+ok 05 # SKIP
+ok 0006 # SKIP
+
+not ok 07 # TODO
+not ok 0008 # TODO
+
+ok 009
+ok 010
+
+ok 00000011
+not ok 0012
+ok 00000013 # SKIP
+not ok 0014 # TODO
+ok 00000015 # TODO
+END
+
+cat > exp <<END
+PASS: all.test 1
+PASS: all.test 2
+FAIL: all.test 3
+FAIL: all.test 4
+SKIP: all.test 5 # SKIP
+SKIP: all.test 6 # SKIP
+XFAIL: all.test 7 # TODO
+XFAIL: all.test 8 # TODO
+PASS: all.test 9
+PASS: all.test 10
+PASS: all.test 11
+FAIL: all.test 12
+SKIP: all.test 13 # SKIP
+XFAIL: all.test 14 # TODO
+XPASS: all.test 15 # TODO
+END
+
+do_checks total=15 pass=5 fail=3 xpass=1 xfail=3 skip=3 error=0
+
+cat > all.test <<END
+1..8
+
+ok 010
+not ok 003
+ok 0001 # SKIP
+not ok 010 # TODO
+ok 00100 # TODO
+
+ok 06
+ok 00007
+ok 8
+END
+
+cat > exp <<END
+ERROR: all.test 10 # OUT-OF-ORDER (expecting 1)
+ERROR: all.test 3 # OUT-OF-ORDER (expecting 2)
+ERROR: all.test 1 # OUT-OF-ORDER (expecting 3)
+ERROR: all.test 10 # OUT-OF-ORDER (expecting 4)
+ERROR: all.test 100 # OUT-OF-ORDER (expecting 5)
+PASS: all.test 6
+PASS: all.test 7
+PASS: all.test 8
+END
+
+do_checks total=8 pass=3 fail=0 xpass=0 xfail=0 skip=0 error=5
+
+:
diff --git a/t/tap-numeric-description.sh b/t/tap-numeric-description.sh
new file mode 100644
index 000000000..73f46b7c6
--- /dev/null
+++ b/t/tap-numeric-description.sh
@@ -0,0 +1,66 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP result lines whose description is a number.
+
+. test-init.sh
+
+. tap-setup.sh
+
+# Some random numbers to be used as test names. The definitions below are
+# selected so that $x<n> != <n> for every n >= 1. We can't use positional
+# parameters for this unfortunately, since Solaris 10 /bin/sh doesn't allow
+# the dereferencing of parameters from ${10} onwards.
+x1=5 x2=7 x3=45 x4=11 x5=7 x6=3 x7=6 x8=9 x9=1000 x10=1
+
+cat > all.test <<END
+1..10
+ok 1 ${x1}
+ok - ${x2}
+not ok 3 ${x3}
+not ok - ${x4}
+ok 5 ${x5} # SKIP
+ok - ${x6} # SKIP
+not ok 7 ${x7} # TODO
+not ok - ${x8} # TODO
+ok 9 ${x9} # TODO
+ok - ${x10} # TODO
+END
+
+cat > exp <<END
+PASS: all.test 1 ${x1}
+PASS: all.test 2 - ${x2}
+FAIL: all.test 3 ${x3}
+FAIL: all.test 4 - ${x4}
+SKIP: all.test 5 ${x5} # SKIP
+SKIP: all.test 6 - ${x6} # SKIP
+XFAIL: all.test 7 ${x7} # TODO
+XFAIL: all.test 8 - ${x8} # TODO
+XPASS: all.test 9 ${x9} # TODO
+XPASS: all.test 10 - ${x10} # TODO
+END
+
+run_make -O -e FAIL check
+count_test_results total=10 pass=2 fail=2 xpass=2 xfail=2 skip=2 error=0
+
+$FGREP ': all.test' stdout > got
+
+cat exp
+cat got
+diff exp got
+
+
+:
diff --git a/t/tap-out-of-order.sh b/t/tap-out-of-order.sh
new file mode 100644
index 000000000..e44d4fd5e
--- /dev/null
+++ b/t/tap-out-of-order.sh
@@ -0,0 +1,77 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - out-of-order test results
+
+. test-init.sh
+
+. tap-setup.sh
+
+cat > a.test <<END
+1..3
+ok
+not ok 2 # TODO
+ok 71
+END
+
+cat > b.test <<END
+1..5
+ok 1
+ok 2
+ok 4 foo # SKIP mu
+not ok 2 bar # TODO um
+ok 5
+END
+
+cat > c.test <<END
+1..4
+ok 1
+ok foo
+ok 4 - zardoz
+not ok 3
+END
+
+# This is documented as an "test out of sequence" error in the
+# TAP::Parser documentation. Keep it in sync with the example
+# there.
+cat > d.test <<'END'
+1..5
+ok 1
+ok 2
+ok 15
+ok 16
+ok 17
+END
+
+run_make -O -e FAIL TESTS='a.test b.test c.test d.test' check
+count_test_results total=17 pass=8 fail=0 xpass=0 xfail=1 skip=0 error=8
+
+test $($FGREP -c ': a.test' stdout) -eq 3
+test $($FGREP -c ': b.test' stdout) -eq 5
+test $($FGREP -c ': c.test' stdout) -eq 4
+test $($FGREP -c ': d.test' stdout) -eq 5
+
+grep '^ERROR: a\.test 71 # OUT-OF-ORDER (expecting 3)$' stdout
+grep '^ERROR: b\.test 4 foo # OUT-OF-ORDER (expecting 3)$' stdout
+grep '^ERROR: b\.test 2 bar # OUT-OF-ORDER (expecting 4)$' stdout
+grep '^ERROR: c\.test 4 - zardoz # OUT-OF-ORDER (expecting 3)$' stdout
+grep '^ERROR: c\.test 3 # OUT-OF-ORDER (expecting 4)$' stdout
+grep '^ERROR: d\.test 15 # OUT-OF-ORDER (expecting 3)$' stdout
+grep '^ERROR: d\.test 16 # OUT-OF-ORDER (expecting 4)$' stdout
+grep '^ERROR: d\.test 17 # OUT-OF-ORDER (expecting 5)$' stdout
+
+:
diff --git a/t/tap-passthrough-exit.sh b/t/tap-passthrough-exit.sh
new file mode 100644
index 000000000..1a4dfdcf3
--- /dev/null
+++ b/t/tap-passthrough-exit.sh
@@ -0,0 +1,58 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - non-success exit status of a test script is reported in the
+# log file
+# See also related test 'tap-passthrough.sh'.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+TEST_LOG_COMPILER = $(SHELL)
+TESTS =
+END
+
+exit_statuses='1 2 77 99'
+
+for e in $exit_statuses; do
+ unindent > exit-$e.test <<END
+ #!/bin/sh
+ echo 1..1
+ echo ok 1
+ exit $e
+END
+ echo TESTS += exit-$e.test >> Makefile.am
+done
+
+. tap-setup.sh
+
+st=0
+$MAKE check || st=$?
+for e in $exit_statuses; do cat exit-$e.log; done
+cat test-suite.log
+test $st -gt 0 || exit 1
+
+for e in $exit_statuses; do
+ for log in exit-$e.log test-suite.log; do
+ grep "^ERROR: exit-$e\\.test - exited with status $e$" $log
+ done
+done
+
+run_make check TEST_LOG_DRIVER_FLAGS='--ignore-exit'
+$FGREP ".test - exited with status" *.log && exit 1
+
+:
diff --git a/t/tap-passthrough.sh b/t/tap-passthrough.sh
new file mode 100644
index 000000000..8daa45a5e
--- /dev/null
+++ b/t/tap-passthrough.sh
@@ -0,0 +1,165 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - all input (valid TAP lines, invalid TAP lines, non-TAP lines)
+# are passed through in the log file
+# - TAP errors are reported in the log file too
+# See also related test 'tap-passthrough-exit.sh'.
+
+. test-init.sh
+
+weirdchars=\''"\$@!&()[]<>#;,:.^?*/'
+
+. tap-setup.sh
+
+#
+# Only successful tests.
+#
+
+# The whitespace in this test might be normalized in the testsuite
+# progress output, but should be copied verbatim in the log files.
+cat > ok.test <<END
+1..6
+TAP plan in the previous line.
+ok${tab}
+ok 2
+ok - foo
+ok 4 - x
+ This is not a TAP line, but should still be copied in the log file!
+# some diagnostic${tab}
+not ok # TODO low priority
+ok # SKIP who cares?
+$weirdchars
+END
+
+run_make TESTS=ok.test check || { cat ok.log; exit 1; }
+cat ok.log
+
+for rx in \
+ '1\.\.6' \
+ 'TAP plan in the previous line\.' \
+ "ok${tab}" \
+ 'ok 2' \
+ 'ok - foo' \
+ 'ok 4 - x' \
+ ' This is not a TAP line, but should still be copied in the log file!' \
+ "# some diagnostic${tab}" \
+ 'not ok # TODO low priority' \
+ 'ok # SKIP who cares?' \
+; do
+ grep "^$rx$" ok.log
+done
+$FGREP "$weirdchars" ok.log
+
+#
+# Mixed failing/successful tests.
+#
+
+cat > tiny.test <<END
+1..1
+ok
+END
+
+cat > ok.test <<END
+1..1
+ok
+only one success here
+END
+
+cat > ko.test <<END
+1..5
+foo foo foo
+ok${tab}
+ok 2
+not ok - foo
+not ok 4 - x
+# diagnostic ko
+ bar${tab}bar${tab}bar
+ok # TODO dunno
+$weirdchars
+END
+
+cat > bail.test <<END
+Bail out! Test is taking too long!
+END
+
+cat > skip.test <<END
+1..0 # Skipped: WWW::Mechanize not installed
+END
+
+cat > err.test <<END
+1..3
+ok 1
+Invalid test count
+ok 23
+Misplaced plan
+1..13
+ok
+Extra test
+ok
+Last line
+END
+
+st=0
+run_make check \
+ TESTS='tiny.test ok.test ko.test bail.test skip.test err.test' || st=$?
+cat tiny.log
+cat ok.log
+cat ko.log
+cat bail.log
+cat skip.log
+cat err.log
+test $st -gt 0 || exit 1
+
+grep '^1\.\.1$' tiny.log
+grep '^ok$' tiny.log
+grep '^only one success here$' ok.log
+
+for rx in \
+ '1\.\.5' \
+ 'foo foo foo' \
+ "ok${tab}" \
+ 'ok 2' \
+ 'not ok - foo' \
+ 'not ok 4 - x' \
+ '# diagnostic ko' \
+ " bar${tab}bar${tab}bar" \
+ 'ok # TODO dunno' \
+; do
+ grep "^$rx$" ko.log
+done
+$FGREP "$weirdchars" ko.log
+
+grep '^Bail out! Test is taking too long!$' bail.log
+grep '^1\.\.0 # Skipped: WWW::Mechanize not installed$' skip.log
+
+for rx in \
+ '^1\.\.3$' \
+ '^Invalid test count$' \
+ '^ok 23$' \
+ '^Misplaced plan$' \
+ '^1\.\.13$' \
+ '^ERROR:.* multiple test plans' \
+ '^Extra test$' \
+ '^Last line$' \
+ '^ERROR:.* [tT]oo many tests run.*expected 3, got 4' \
+ '^ERROR:.* err\.test 23 .*OUT[ -]OF[ -]ORDER.*expecting 2' \
+; do
+ grep "$rx" err.log
+done
+
+:
diff --git a/t/tap-plan-corner.sh b/t/tap-plan-corner.sh
new file mode 100644
index 000000000..966f04d8c
--- /dev/null
+++ b/t/tap-plan-corner.sh
@@ -0,0 +1,189 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - some corner cases for TAP plan
+
+. test-init.sh
+
+. tap-setup.sh
+
+# -------------------------------------------------------------------------
+
+cat > leading-repeated.test <<END
+1..1
+1..1
+ok 1
+END
+
+cat > trailing-repeated.test <<END
+ok 1
+1..1
+1..1
+END
+
+for pos in leading trailing; do
+ run_make -O -e FAIL TESTS="$pos-repeated.test" check
+ count_test_results total=2 pass=1 fail=0 xpass=0 xfail=0 skip=0 error=1
+ grep "^ERROR: $pos-repeated\\.test - multiple test plans$" stdout
+done
+
+# -------------------------------------------------------------------------
+
+cat > leading-repeated.test <<END
+1..2
+ok 1
+1..2
+ok 2
+END
+
+cat > trailing-repeated.test <<END
+ok 1
+1..2
+ok 2
+1..2
+END
+
+run_make -O -e FAIL check \
+ TESTS='leading-repeated.test trailing-repeated.test'
+count_test_results total=6 pass=3 fail=0 xpass=0 xfail=0 skip=0 error=3
+grep "^ERROR: leading-repeated\\.test - multiple test plans$" stdout
+grep "^ERROR: trailing-repeated\\.test - multiple test plans$" stdout
+grep "^ERROR: trailing-repeated\\.test 2 # AFTER LATE PLAN$" stdout
+grep "leading .*AFTER LATE PLAN" stdout && exit 1
+
+# -------------------------------------------------------------------------
+
+cat > 1.test <<END
+1..0
+1..0
+END
+
+cat > 2.test <<END
+1..0 # SKIP
+1..0
+END
+
+cat > 3.test <<END
+1..0
+1..0 # SKIP
+END
+
+cat > 4.test <<END
+1..0 # SKIP
+1..0 # SKIP
+END
+
+run_make -O -e FAIL check TESTS='1.test 2.test 3.test 4.test'
+count_test_results total=8 pass=0 fail=0 xpass=0 xfail=0 skip=4 error=4
+for i in 1 2 3 4; do
+ grep "^ERROR: $i\\.test - multiple test plans$" stdout
+done
+
+# -------------------------------------------------------------------------
+
+cat > all.test <<END
+1..5
+ok 1
+ok 2
+1..5
+ok 3
+1..5
+ok 4
+1..5
+ok 5
+END
+
+run_make -O -e FAIL check
+count_test_results total=8 pass=5 fail=0 xpass=0 xfail=0 skip=0 error=3
+
+cat > exp <<'END'
+PASS: all.test 1
+PASS: all.test 2
+ERROR: all.test - multiple test plans
+PASS: all.test 3
+ERROR: all.test - multiple test plans
+PASS: all.test 4
+ERROR: all.test - multiple test plans
+PASS: all.test 5
+END
+
+$FGREP ': all.test' stdout > got
+
+cat exp
+cat got
+diff exp got
+
+# -------------------------------------------------------------------------
+
+cat > all.test <<END
+1..2
+ok 1
+ok 2
+1..3
+ok 3
+END
+
+run_make -O -e FAIL check
+count_test_results total=5 pass=2 fail=0 xpass=0 xfail=0 skip=0 error=3
+
+cat > exp <<'END'
+PASS: all.test 1
+PASS: all.test 2
+ERROR: all.test - multiple test plans
+ERROR: all.test 3 # UNPLANNED
+ERROR: all.test - too many tests run (expected 2, got 3)
+END
+
+$FGREP ': all.test' stdout > got
+
+cat exp
+cat got
+diff exp got
+
+# -------------------------------------------------------------------------
+
+cat > all.test <<END
+ok 1
+ok 2
+ok 3
+1..5
+1..5
+ok 4
+1..5
+ok 5
+END
+
+run_make -O -e FAIL check
+count_test_results total=7 pass=3 fail=0 xpass=0 xfail=0 skip=0 error=4
+
+cat > exp <<'END'
+PASS: all.test 1
+PASS: all.test 2
+PASS: all.test 3
+ERROR: all.test - multiple test plans
+ERROR: all.test 4 # AFTER LATE PLAN
+ERROR: all.test - multiple test plans
+ERROR: all.test 5 # AFTER LATE PLAN
+END
+
+$FGREP ': all.test' stdout > got
+
+cat exp
+cat got
+diff exp got
+
+:
diff --git a/t/tap-plan-errors.sh b/t/tap-plan-errors.sh
new file mode 100644
index 000000000..46ab17b1f
--- /dev/null
+++ b/t/tap-plan-errors.sh
@@ -0,0 +1,112 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support: the following situations should be flagged as errors:
+# - unmatched test plan (too few tests run)
+# - multiple test plans
+# - missing test plan
+# - misplaced test plan (tests run after a late plan)
+# Checks about unplanned tests are performed in 'tap-unplanned.sh'
+# and 'tap-skip-whole-badcount.sh'. More checks about corner-cases
+# in TAP plans are performed in 'tap-plan-corner.sh'.
+
+. test-init.sh
+
+. tap-setup.sh
+
+my_check ()
+{
+ cat > all.test
+ test -n "$err" || fatal_ "\$err not set before calling my_check"
+ cat all.test # For debugging.
+ run_make -O -e FAIL check
+ count_test_results "$@"
+ grep "^ERROR: all\\.test $err$" stdout
+ unset err
+}
+
+err='- too few tests run (expected 2, got 1)'
+my_check total=2 pass=1 fail=0 xpass=0 xfail=0 skip=0 error=1 <<END
+1..2
+ok 1
+END
+
+err='- too few tests run (expected 12, got 3)'
+my_check total=4 pass=2 fail=0 xpass=0 xfail=1 skip=0 error=1 <<END
+ok 1
+ok 2
+not ok 3 # TODO
+1..12
+END
+
+err='- too few tests run (expected 1, got 0)'
+my_check total=1 pass=0 fail=0 xpass=0 xfail=0 skip=0 error=1 <<END
+1..1
+END
+
+err='2 # AFTER LATE PLAN'
+my_check total=2 pass=1 fail=0 xpass=0 xfail=0 skip=0 error=1 <<END
+ok 1
+1..2
+ok 2
+END
+
+err='5 # AFTER LATE PLAN'
+my_check total=5 pass=4 fail=0 xpass=0 xfail=0 skip=0 error=1 <<END
+ok 1
+ok 2
+ok 3
+ok 4
+1..5
+ok 5
+END
+
+err='- missing test plan'
+my_check total=2 pass=1 fail=0 xpass=0 xfail=0 skip=0 error=1 <<END
+ok 1
+END
+
+
+# The two test plans here are deliberately equal.
+err='- multiple test plans'
+my_check total=3 pass=2 fail=0 xpass=0 xfail=0 skip=0 error=1 <<END
+1..2
+ok 1
+ok 2
+1..2
+END
+
+# The second plan is diagnosed as extra, and only the first one is
+# relevant w.r.t. the number of the expected test.
+err='- multiple test plans'
+my_check total=4 pass=3 fail=0 xpass=0 xfail=0 skip=0 error=1 <<END
+1..3
+ok 1
+ok 2
+1..2
+ok 3
+END
+
+# As above, in a slightly different situation.
+err='- multiple test plans'
+my_check total=3 pass=2 fail=0 xpass=0 xfail=0 skip=0 error=1 <<END
+1..2
+ok 1
+ok 2
+1..4
+END
+
+:
diff --git a/t/tap-plan-leading-zero.sh b/t/tap-plan-leading-zero.sh
new file mode 100644
index 000000000..c13e19ca5
--- /dev/null
+++ b/t/tap-plan-leading-zero.sh
@@ -0,0 +1,53 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - TAP plans with numbers having leading zeroes, as in "1..01"
+# - TAP "SKIP" plans with multiple zeroes, as in "1..00 # SKIP"
+# This is consistent with the behaviour of the 'prove' utility.
+
+. test-init.sh
+
+. tap-setup.sh
+
+cat > a.test <<END
+1..01
+ok 1
+END
+
+cat > b.test <<END
+1..0002
+ok 1
+ok 2
+END
+
+echo 1..010 > c.test
+for i in 1 2 3 4 5 6 7 8 9 10; do echo ok $i; done >> c.test
+
+echo 1..00100 > d.test
+for i in 1 2 3 4 5 6 7 8 9 10; do
+ for j in 1 2 3 4 5 6 7 8 9 10; do
+ echo ok
+ done
+done >> d.test
+
+echo 1..00 > e.test
+echo '1..000 # SKIP' > f.test
+
+run_make -O TESTS='a.test b.test c.test d.test e.test f.test' check
+count_test_results total=115 pass=113 xfail=0 skip=2 fail=0 xpass=0 error=0
+
+:
diff --git a/t/tap-plan-malformed.sh b/t/tap-plan-malformed.sh
new file mode 100644
index 000000000..efe53578e
--- /dev/null
+++ b/t/tap-plan-malformed.sh
@@ -0,0 +1,57 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support: a malformed TAP plan is not recognized. The checks in
+# here should be consistent with the behaviour of the 'prove' utility.
+
+. test-init.sh
+
+. tap-setup.sh
+
+cat > a.test <<END
+1..1 foo
+END
+
+cat > b.test <<END
+ 1..2
+ok 1
+ok 2
+END
+
+cat > c.test <<END
+1..1 # SKIP
+END
+
+cat > d.test <<END
+1..2 # foo bar
+not ok 1 # TODO
+not ok 2 # TODO
+END
+
+cat > e.test <<END
+0..0
+END
+
+tests_list=$(echo *.test)
+
+run_make -O -e FAIL TESTS="$tests_list" check
+count_test_results total=9 pass=2 fail=0 xpass=0 xfail=2 skip=0 error=5
+
+for tst in $tests_list; do
+ grep "^ERROR: $tst - missing test plan$" stdout
+done
+
+:
diff --git a/t/tap-plan-middle.sh b/t/tap-plan-middle.sh
new file mode 100644
index 000000000..97c95f34f
--- /dev/null
+++ b/t/tap-plan-middle.sh
@@ -0,0 +1,80 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - test plan preceding and/or following non-result TAP lines
+
+. test-init.sh
+
+. tap-setup.sh
+
+cat > top1.test <<END
+non-TAP line, ignored
+1..1
+ok 1
+END
+
+cat > top2.test <<END
+some
+non-TAP
+lines
+are
+ignored
+# and a TAP comment won't cause problems either
+1..2
+ok 1
+ok 2
+END
+
+# Try with a blank line too, just to be sure.
+cat > top3.test <<END
+
+1..1
+ok 1
+END
+
+cat > bot1.test <<END
+ok 1 # SKIP
+1..1
+bla blah blah ...
+END
+
+cat > bot2.test <<END
+ok 1
+ok 2
+not ok 3 # TODO
+1..3
+#@$%! (a cursing comment :-)
+END
+
+# Try with a blank line too, just to be sure.
+cat > bot3.test <<END
+ok 1
+not ok 2 # TODO
+ok 3 # SKIP
+ok 4 # SKIP
+1..4
+
+END
+
+tests=$(echo *.test)
+
+for tap_flags in "" "--comments"; do
+ run_make -O TEST_LOG_DRIVER_FLAGS="$tap_flags" TESTS="$tests" check
+ count_test_results total=12 pass=7 xfail=2 skip=3 fail=0 xpass=0 error=0
+done
+
+:
diff --git a/t/tap-plan-whitespace.sh b/t/tap-plan-whitespace.sh
new file mode 100644
index 000000000..d168d9420
--- /dev/null
+++ b/t/tap-plan-whitespace.sh
@@ -0,0 +1,38 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - plan line with trailing whitespace is recognized and handled correctly
+
+. test-init.sh
+
+. tap-setup.sh
+
+sed 's/\$$//' > foo.test <<END
+1..2 $
+ok 1$
+ok 2$
+END
+
+cat > bar.test <<END
+1..1$tab $tab$tab
+ok 1
+END
+
+run_make -O TESTS='foo.test bar.test' check
+count_test_results total=3 pass=3 fail=0 error=0 xpass=0 xfail=0 skip=0
+
+:
diff --git a/t/tap-plan.sh b/t/tap-plan.sh
new file mode 100644
index 000000000..c86ef6fa9
--- /dev/null
+++ b/t/tap-plan.sh
@@ -0,0 +1,51 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - test scripts with the test plan at the beginning
+# - test scripts with the test plan at the end
+
+. test-init.sh
+
+. tap-setup.sh
+
+cat > top.test <<END
+1..3
+ok 1
+ok 2 # SKIP
+ok 3
+# a trailing comment
+END
+
+cat > bot.test <<END
+ok 1
+# a comment
+ok 2
+not ok 3 # TODO
+# another comment
+ok
+1..4
+END
+
+for tap_flags in "" "--comments"; do
+ run_make -O check \
+ TESTS='top.test bot.test' \
+ TEST_LOG_DRIVER_FLAGS="$tap_flags"
+ count_test_results total=7 pass=5 xfail=1 skip=1 fail=0 xpass=0 error=0
+done
+
+
+:
diff --git a/t/tap-planskip-and-logging.sh b/t/tap-planskip-and-logging.sh
new file mode 100644
index 000000000..0db7bf0f1
--- /dev/null
+++ b/t/tap-planskip-and-logging.sh
@@ -0,0 +1,70 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - interactions between "TAP plan with SKIP" and logging of earlier or
+# later TAP or non-TAP text
+
+. test-init.sh
+
+. tap-setup.sh
+
+echo TEST_LOG_DRIVER_FLAGS = --comments >> Makefile
+
+cat > foo.test <<END
+1..0
+a non-TAP line
+# a comment
+END
+
+cat > foo2.test <<END
+a non-TAP line 2
+# a comment 2
+1..0
+END
+
+cat > bar.test <<END
+# an early comment
+an early non-TAP line
+ $tab
+1..0 # SKIP
+# a later comment
+a later non-TAP line
+END
+
+run_make -O TESTS='foo.test foo2.test bar.test' check
+count_test_results total=3 pass=0 fail=0 xpass=0 xfail=0 skip=3 error=0
+
+grep '^# foo\.test: a comment$' stdout
+grep '^# foo2\.test: a comment 2$' stdout
+grep '^# bar\.test: an early comment$' stdout
+grep '^# bar\.test: a later comment$' stdout
+
+cat foo.log
+cat foo2.log
+cat bar.log
+
+grep '^a non-TAP line$' foo.log
+grep '^# a comment$' foo.log
+grep '^a non-TAP line 2$' foo2.log
+grep '^# a comment 2$' foo2.log
+grep '^# an early comment' bar.log
+grep '^an early non-TAP line$' bar.log
+grep '^# a later comment' bar.log
+grep '^a later non-TAP line$' bar.log
+grep "^ $tab$" bar.log
+
+:
diff --git a/t/tap-planskip-badexit.sh b/t/tap-planskip-badexit.sh
new file mode 100644
index 000000000..f2cafeafd
--- /dev/null
+++ b/t/tap-planskip-badexit.sh
@@ -0,0 +1,50 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - an exit status != 0 of a test script causes an hard error, even if
+# the last line of output is a "SKIP plan" (e.g., "1..0 # SKIP").
+
+. test-init.sh
+
+echo TESTS = one.test two.test > Makefile.am
+
+. tap-setup.sh
+
+cat > one.test <<'END'
+#!/bin/sh
+echo '1..0 # SKIP'
+exit 1
+END
+
+cat > two.test <<'END'
+#!/bin/sh
+echo '1..0'
+exit 22
+END
+
+chmod a+x one.test two.test
+
+run_make -O -e FAIL check
+
+# The 'prove' utility reports both the skip and the non-zero exit status,
+# so we do the same.
+count_test_results total=4 pass=0 fail=0 xpass=0 xfail=0 skip=2 error=2
+
+grep '^ERROR: one\.test - exited with status 1$' stdout
+grep '^ERROR: two\.test - exited with status 22$' stdout
+
+:
diff --git a/t/tap-planskip-bailout.sh b/t/tap-planskip-bailout.sh
new file mode 100644
index 000000000..9cb1a6a33
--- /dev/null
+++ b/t/tap-planskip-bailout.sh
@@ -0,0 +1,34 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - a "Bail out!" directive causes an hard error, even if coming after
+# a "SKIP plan" (e.g., "1..0 # SKIP").
+
+. test-init.sh
+
+. tap-setup.sh
+
+cat > all.test <<END
+1..0 # SKIP
+Bail out!
+END
+
+run_make -O -e FAIL check
+count_test_results total=2 pass=0 fail=0 xpass=0 xfail=0 skip=1 error=1
+grep '^ERROR: all\.test - Bail out!' stdout
+
+:
diff --git a/t/tap-planskip-case-insensitive.sh b/t/tap-planskip-case-insensitive.sh
new file mode 100644
index 000000000..b5b57d801
--- /dev/null
+++ b/t/tap-planskip-case-insensitive.sh
@@ -0,0 +1,42 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - "SKIP" keyword in a TAP plan is case-insensitive
+
+. test-init.sh
+
+. tap-setup.sh
+
+# These nested loops below are clearer without indentation.
+i=0
+for c1 in s S; do
+for c2 in k K; do
+for c3 in i I; do
+for c4 in p P; do
+ i=$(($i + 1))
+ case $i in ?) j=0$i;; *) j=$i;; esac
+ echo "1..0 # $c1$c2$c3$c4 foobar" > $j.test
+done; done; done; done
+
+run_make -O TESTS="$(echo *.test)" check
+count_test_results total=16 pass=0 fail=0 xpass=0 xfail=0 skip=16 error=0
+
+for tst in *.test; do
+ grep "^SKIP: $tst .* foobar$" stdout
+done
+
+:
diff --git a/t/tap-planskip-late.sh b/t/tap-planskip-late.sh
new file mode 100644
index 000000000..752f3c0ab
--- /dev/null
+++ b/t/tap-planskip-late.sh
@@ -0,0 +1,42 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - the special "plan with SKIP" can also be used "late" in the TAP
+# stream, i.e., preceded by non-TAP output or TAP diagnostic.
+
+. test-init.sh
+
+. tap-setup.sh
+
+cat > foo.test <<END
+some non-TAP text, will be copied in the global log
+1..0 # SKIP from the last line
+END
+
+cat > bar.test <<END
+# some TAP diagnostic, will go to console
+1..0
+END
+
+run_make -O TESTS='foo.test bar.test' check
+
+grep '^SKIP: foo\.test .* from the last line$' stdout
+grep '^SKIP: bar\.test$' stdout
+test $(grep -c ': .*\.test' stdout) -eq 2
+count_test_results total=2 pass=0 fail=0 xpass=0 xfail=0 skip=2 error=0
+
+:
diff --git a/t/tap-planskip-later-errors.sh b/t/tap-planskip-later-errors.sh
new file mode 100644
index 000000000..16454f6b4
--- /dev/null
+++ b/t/tap-planskip-later-errors.sh
@@ -0,0 +1,37 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - TAP errors following a "TAP plan with SKIP" are still diagnosed.
+
+. test-init.sh
+
+. tap-setup.sh
+
+cat > all.test <<END
+1..0
+a non-TAP line
+1..3
+1..5
+# a comment
+1..1
+END
+
+run_make -O -e FAIL check
+count_test_results total=4 pass=0 fail=0 xpass=0 xfail=0 skip=1 error=3
+test $(grep -c '^ERROR: all\.test - multiple test plans' stdout) -eq 3
+
+:
diff --git a/t/tap-planskip-unplanned-corner.sh b/t/tap-planskip-unplanned-corner.sh
new file mode 100644
index 000000000..7cf03d4fe
--- /dev/null
+++ b/t/tap-planskip-unplanned-corner.sh
@@ -0,0 +1,45 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - test results seen in a TAP stream that has a "plan with SKIP" are
+# flagged as errors, even if all of them are "SKIP" results.
+
+. test-init.sh
+
+. tap-setup.sh
+
+cat > foo.test <<END
+1..0 # SKIP
+ok 1 # SKIP
+END
+
+cat > bar.test <<END
+ok 1 # SKIP
+1..0 # SKIP
+END
+
+run_make -O -e FAIL TESTS='foo.test bar.test' check
+count_test_results total=5 pass=0 fail=0 xpass=0 xfail=0 skip=2 error=3
+
+# Don't be too strict w.r.t. the format of the "skip whole test" message.
+grep '^SKIP: foo\.test$' stdout || grep '^SKIP: foo\.test [^0-9]' stdout
+grep '^ERROR: foo\.test 1 # UNPLANNED$' stdout
+grep '^ERROR: foo\.test - too many tests run (expected 0, got 1)$' stdout
+grep '^SKIP: bar\.test 1 # SKIP$' stdout
+grep '^ERROR: bar\.test - too many tests run (expected 0, got 1)$' stdout
+
+:
diff --git a/t/tap-planskip-unplanned.sh b/t/tap-planskip-unplanned.sh
new file mode 100644
index 000000000..a500dff4d
--- /dev/null
+++ b/t/tap-planskip-unplanned.sh
@@ -0,0 +1,68 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - a "plan with skip" given after one or more test result have already
+# been seen is an error
+# - any test result following a "plan with skip" is an error.
+
+. test-init.sh
+
+. tap-setup.sh
+
+cat > all.test <<END
+ok 1
+1..0 # SKIP too late
+END
+run_make -O -e FAIL check
+count_test_results total=2 pass=1 fail=0 xpass=0 xfail=0 skip=0 error=1
+grep '^ERROR: all\.test - too many tests run (expected 0, got 1)$' stdout
+
+cat > all.test <<END
+ok 1
+ok 2 # SKIP
+not ok 3 # TODO
+1..0 # SKIP too late
+END
+run_make -O -e FAIL check
+count_test_results total=4 pass=1 fail=0 xpass=0 xfail=1 skip=1 error=1
+grep '^ERROR: all\.test - too many tests run (expected 0, got 3)$' stdout
+
+cat > all.test <<END
+1..0 # SKIP falsified later
+ok 1
+END
+run_make -O -e FAIL check
+count_test_results total=3 pass=0 fail=0 xpass=0 xfail=0 skip=1 error=2
+grep '^ERROR: all\.test 1 # UNPLANNED$' stdout
+grep '^ERROR: all\.test - too many tests run (expected 0, got 1)$' stdout
+
+cat > all.test <<END
+1..0 # SKIP falsified later
+ok 1
+ok 2 # SKIP
+not ok 3
+not ok 4 # TODO
+END
+run_make -O -e FAIL check
+count_test_results total=6 pass=0 fail=0 xpass=0 xfail=0 skip=1 error=5
+grep '^ERROR: all\.test 1 # UNPLANNED$' stdout
+grep '^ERROR: all\.test 2 # UNPLANNED$' stdout
+grep '^ERROR: all\.test 3 # UNPLANNED$' stdout
+grep '^ERROR: all\.test 4 # UNPLANNED$' stdout
+grep '^ERROR: all\.test - too many tests run (expected 0, got 4)$' stdout
+
+:
diff --git a/t/tap-planskip-whitespace.sh b/t/tap-planskip-whitespace.sh
new file mode 100644
index 000000000..3a28c18a6
--- /dev/null
+++ b/t/tap-planskip-whitespace.sh
@@ -0,0 +1,44 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - normalization of whitespace in console testsuite progress associated
+# with a SKIP directive in the TAP plan
+
+. test-init.sh
+
+. tap-setup.sh
+
+cat > foo.test <<END
+1..0${tab}${tab} #${tab}SKIP ${tab}Strip leading & trailing ${tab}${tab}
+END
+
+cat > bar.test <<END
+1..0 #SKIP Preserve ${tab} middle${tab}${tab}space
+END
+
+cat > baz.test <<END
+1..0 # SKIP${tab} Strip${tab}external preserve ${tab}middle ${tab}${sp}
+END
+
+run_make -O TESTS='foo.test bar.test baz.test' check
+count_test_results total=3 pass=0 fail=0 error=0 xpass=0 xfail=0 skip=3
+
+grep "SKIP: foo\\.test - Strip leading & trailing$" stdout
+grep "SKIP: bar\\.test - Preserve ${tab} middle${tab}${tab}space" stdout
+grep "SKIP: baz\\.test - Strip${tab}external preserve ${tab}middle" stdout
+
+:
diff --git a/t/tap-planskip.sh b/t/tap-planskip.sh
new file mode 100644
index 000000000..1440c5310
--- /dev/null
+++ b/t/tap-planskip.sh
@@ -0,0 +1,75 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Basic TAP test protocol support:
+# - special plan format to skip all the tests in a script
+
+. test-init.sh
+
+. tap-setup.sh
+
+weirdchars=\''"$!&()[]<>#;^?*/@%=,.:'
+
+cat > foo.test <<END
+1..0
+END
+
+cat > bar.test <<END
+blah
+# blah
+1..0$tab $tab
+END
+
+# It is undefined whether the comment after the plan below should
+# count as an explanation; still, the test should be skipped.
+cat > baz.test <<END
+1..0 # WWW::Mechanize not installed
+other
+ junk
+ lines
+END
+
+cat > wget.test <<END
+1..0 # SKIP wget(1) not installed
+# See also curl.test
+END
+
+cat > curl.test <<END
+1..0 # SKIP: Can't connect to gnu.org!
+# See also wget.test
+END
+
+cat > mu.test <<END
+1..0 # SKIP $weirdchars
+END
+
+run_make -O check \
+ TESTS='foo.test bar.test baz.test wget.test curl.test mu.test'
+count_test_results total=6 pass=0 fail=0 xpass=0 xfail=0 skip=6 error=0
+
+# Look for a regression where the "1..0" wasn't being stripped from the
+# SKIP message.
+$FGREP '1..0' stdout && exit 1
+
+grep '^SKIP: foo\.test$' stdout
+grep '^SKIP: bar\.test$' stdout
+grep '^SKIP: baz\.test' stdout # Deliberately laxer, see above for why.
+grep '^SKIP: wget\.test .* wget(1) not installed$' stdout
+grep '^SKIP: curl\.test .* Can'\''t connect to gnu\.org!$' stdout
+grep '^SKIP: mu\.test' stdout | $FGREP "$weirdchars" stdout
+test $(grep -c ': .*\.test' stdout) -eq 6
+
+:
diff --git a/t/tap-recheck-logs.sh b/t/tap-recheck-logs.sh
new file mode 100644
index 000000000..c5039f435
--- /dev/null
+++ b/t/tap-recheck-logs.sh
@@ -0,0 +1,113 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - RECHECK_LOGS
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+TEST_LOG_COMPILER = cat
+TESTS = foo.test bar.test baz.test
+baz.log: zardoz
+END
+
+. tap-setup.sh
+
+: > zardoz
+
+cat > foo.test <<'END'
+1..2
+ok 1
+ok 2
+END
+
+cat > bar.test <<'END'
+1..1
+not ok 1
+END
+
+cat > baz.test <<'END'
+1..1
+Bail out!
+END
+
+# Even the tests that are not re-run should contribute to the testsuite
+# summary when obtained by "make check RECHECK_LOGS=".
+grep_summary ()
+{
+ grep '^# TOTAL: *4$' stdout
+ grep '^# PASS: *2$' stdout
+ grep '^# XPASS: *0$' stdout
+ grep '^# FAIL: *1$' stdout
+ grep '^# XFAIL: *0$' stdout
+ grep '^# SKIP: *0$' stdout
+ grep '^# ERROR: *1$' stdout
+}
+
+run_make -e FAIL check
+test -f foo.log
+test -f bar.log
+test -f baz.log
+
+rm -f foo.log bar.log
+
+run_make -O -e FAIL check RECHECK_LOGS=
+test -f foo.log
+test -f bar.log
+grep '^PASS: foo\.test 1$' stdout
+grep '^PASS: foo\.test 2$' stdout
+grep '^FAIL: bar\.test 1$' stdout
+grep 'baz\.test' stdout && exit 1
+grep_summary
+
+$sleep
+touch foo.test
+# We re-run only a successful test, but the tests that failed in the
+# previous run should still be taken into account, and cause an overall
+# failure.
+run_make -O -e FAIL check RECHECK_LOGS=
+grep '^PASS: foo\.test 1$' stdout
+grep '^PASS: foo\.test 2$' stdout
+grep 'ba[rz]\.test' stdout && exit 1
+is_newest foo.log foo.test
+grep_summary
+
+$sleep
+touch zardoz
+run_make -O -e FAIL check RECHECK_LOGS=
+grep '^ERROR: baz\.test' stdout
+$EGREP '(foo|bar)\.test' stdout && exit 1
+is_newest baz.log zardoz
+grep_summary
+
+# Now, explicitly retry with all test logs already updated, and ensure
+# that the summary is still displayed.
+run_make -O -e FAIL check RECHECK_LOGS=
+$EGREP '(foo|bar|baz)\.test' stdout && exit 1
+grep_summary
+
+# The following should re-run foo.test (and only foo.test), even if its
+# log file is up-to-date.
+: > older
+run_make -O -e FAIL check RECHECK_LOGS=foo.log
+grep '^PASS: foo\.test 1$' stdout
+grep '^PASS: foo\.test 2$' stdout
+grep 'ba[rz]\.test' stdout && exit 1
+is_newest foo.log older
+grep_summary
+
+:
diff --git a/t/tap-recheck.sh b/t/tap-recheck.sh
new file mode 100644
index 000000000..005b75d34
--- /dev/null
+++ b/t/tap-recheck.sh
@@ -0,0 +1,220 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test the 'recheck' target for TAP test protocol.
+# Keep in sync with 'test-driver-custom-multitest-recheck.sh'.
+
+. test-init.sh
+
+fetch_tap_driver
+
+cat >> configure.ac <<END
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TEST_LOG_DRIVER = $(srcdir)/tap-driver
+TESTS = a.test b.test c.test d.test
+END
+
+cat > a.test << 'END'
+#! /bin/sh
+echo 1..2
+echo ok 1
+echo ok 2
+: > a.run
+END
+
+cat > b.test << 'END'
+#! /bin/sh
+: > b.run
+echo 1..2
+echo ok 1
+if test -f b.ok; then
+ echo ok 2
+else
+ echo 'Bail out!'
+fi
+END
+
+cat > c.test << 'END'
+#! /bin/sh
+echo 1..3
+if test -f c.pass; then
+ echo 'ok - c is ok :-)'
+else
+ echo 'not ok - c is ko :-('
+fi
+if test -f c.xfail; then
+ echo 'not ok 2 # TODO'
+else
+ echo 'ok 2 # TODO'
+fi
+echo 'not ok 3 - blah blah # TODO need better diagnostic'
+: > c.run
+END
+
+cat > d.test << 'END'
+#! /bin/sh
+test -f ./d.count && . ./d.count
+echo 1..${test_count-2}
+echo ok 1 '# SKIP: who cares ...'
+(. ./d.extra) || echo 'not ok 2 - d.extra failed'
+: > d.run
+END
+
+chmod a+x *.test
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+do_recheck ()
+{
+ case $* in
+ --fail) status=FAIL;;
+ --pass) status=0;;
+ *) fatal_ "invalid usage of function 'do_recheck'";;
+ esac
+ rm -f *.run
+ run_make -O -e $status recheck || { ls -l; exit 1; }
+ ls -l
+}
+
+for vpath in : false; do
+ if $vpath; then
+ mkdir build
+ cd build
+ srcdir=..
+ else
+ srcdir=.
+ fi
+
+ $srcdir/configure
+
+ : A "make recheck" in a clean tree should run no tests.
+ do_recheck --pass
+ cat test-suite.log
+ test ! -e a.run
+ test ! -e a.log
+ test ! -e b.run
+ test ! -e b.log
+ test ! -e c.run
+ test ! -e c.log
+ test ! -e d.run
+ test ! -e d.log
+ count_test_results total=0 pass=0 fail=0 xpass=0 xfail=0 skip=0 error=0
+
+ : Run the tests for the first time.
+ run_make -O -e FAIL check
+ ls -l
+ # All the test scripts should have run.
+ test -f a.run
+ test -f b.run
+ test -f c.run
+ test -f d.run
+ count_test_results total=9 pass=3 fail=2 xpass=1 xfail=1 skip=1 error=1
+
+ : Let us make b.test pass.
+ using_gmake || $sleep # Required by BSD make.
+ echo OK > b.ok
+ do_recheck --fail
+ # a.test has been successful the first time, so no need to re-run it.
+ # Similar considerations apply to similar checks, below.
+ test ! -e a.run
+ test -f b.run
+ test -f c.run
+ test -f d.run
+ count_test_results total=7 pass=2 fail=2 xpass=1 xfail=1 skip=1 error=0
+
+ : Let us make the first part of c.test pass.
+ using_gmake || $sleep # Required by BSD make.
+ echo OK > c.pass
+ do_recheck --fail
+ test ! -e a.run
+ test ! -e b.run
+ test -f c.run
+ test -f d.run
+ count_test_results total=5 pass=1 fail=1 xpass=1 xfail=1 skip=1 error=0
+
+ : Let us make also the second part of c.test pass.
+ using_gmake || $sleep # Required by BSD make.
+ echo KO > c.xfail
+ do_recheck --fail
+ test ! -e a.run
+ test ! -e b.run
+ test -f c.run
+ test -f d.run
+ count_test_results total=5 pass=1 fail=1 xpass=0 xfail=2 skip=1 error=0
+
+ : Nothing changed, so only d.test should be run.
+ for i in 1 2; do
+ using_gmake || $sleep # Required by BSD make.
+ do_recheck --fail
+ test ! -e a.run
+ test ! -e b.run
+ test ! -e c.run
+ test -f d.run
+ count_test_results total=2 pass=0 fail=1 xpass=0 xfail=0 skip=1 error=0
+ done
+
+ : Let us make d.test run more testcases, and experience _more_ failures.
+ using_gmake || $sleep # Required by BSD make.
+ echo 'test_count=9' > d.count
+ unindent > d.extra <<'END'
+ echo 'ok # SKIP s'
+ echo 'not ok - f 1'
+ echo 'ok - p 1'
+ echo 'not ok - f 2'
+ echo 'ok # TODO xp'
+ echo 'not ok - f 3'
+ echo 'not ok - f 4'
+ echo 'ok - p 2'
+ echo 'ok' # Extra test.
+ echo 'Bail out!'
+END
+ do_recheck --fail
+ test ! -e a.run
+ test ! -e b.run
+ test ! -e c.run
+ test -f d.run
+ count_test_results total=11 pass=2 fail=4 xpass=1 xfail=0 skip=2 error=2
+
+ : Let us finally make d.test pass.
+ using_gmake || $sleep # Required by BSD make.
+ echo 'test_count=1' > d.count
+ echo : > d.extra
+ do_recheck --pass
+ test ! -e a.run
+ test ! -e b.run
+ test ! -e c.run
+ test -f d.run
+ count_test_results total=1 pass=0 fail=0 xpass=0 xfail=0 skip=1 error=0
+
+ : All tests have been successful or skipped, nothing should be re-run.
+ using_gmake || $sleep # Required by BSD make.
+ do_recheck --pass
+ test ! -e a.run
+ test ! -e b.run
+ test ! -e c.run
+ test ! -e d.run
+ count_test_results total=0 pass=0 fail=0 xpass=0 xfail=0 skip=0 error=0
+
+ cd $srcdir
+
+done
+
+:
diff --git a/t/tap-result-comment.sh b/t/tap-result-comment.sh
new file mode 100644
index 000000000..5455303a9
--- /dev/null
+++ b/t/tap-result-comment.sh
@@ -0,0 +1,51 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - non-directive comments in TAP results are kept verbatim
+
+. test-init.sh
+
+. tap-setup.sh
+
+cat > all.test <<END
+1..5
+ok 1 # TDO
+not ok 2 # SKP
+ok #SIKP${tab}${sp}
+not ok # TOD${tab}
+ok 5 # ${tab}${tab}TOOD${tab}${sp}${sp}
+END
+
+run_make -O -e FAIL check
+count_test_results total=5 pass=3 fail=2 xpass=0 xfail=0 skip=0 error=0
+
+# Don't be too strict about trailing white space.
+$FGREP ': all.test' stdout | sed "s/[$sp$tab]*$//" > got
+
+cat > exp <<END
+PASS: all.test 1 # TDO
+FAIL: all.test 2 # SKP
+PASS: all.test 3 #SIKP
+FAIL: all.test 4 # TOD
+PASS: all.test 5 # ${tab}${tab}TOOD
+END
+
+cat exp
+cat got
+diff exp got
+
+:
diff --git a/t/tap-signal.tap b/t/tap-signal.tap
new file mode 100644
index 000000000..86d487377
--- /dev/null
+++ b/t/tap-signal.tap
@@ -0,0 +1,133 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - a test script terminated by a signal causes an hard error
+
+. test-init.sh
+
+fetch_tap_driver
+
+plan_ 10
+
+cat >> configure.ac <<END
+AC_OUTPUT
+END
+
+cat > Makefile.am << END
+TEST_LOG_DRIVER = \$(srcdir)/tap-driver
+TEST_LOG_COMPILER = $PERL -w
+## Will be updated later.
+TESTS =
+END
+
+all_signals='1 2 3 9 13 15'
+blocked_signals=''
+for sig in $all_signals; do
+ # Ignore blocked signals
+ if is_blocked_signal $sig; then
+ blocked_signals="$blocked_signals $sig"
+ continue
+ fi
+ # Write the dummy test scripts in perl, not as shell scripts, to work
+ # around unportabilities in the handling of signals (in fact, even
+ # with bash, the older script were unable to properly deliver a SIGQUIT
+ # to themselves consistently). The shebang is dummy here, as we prefer
+ # to rely on the definition of TEST_LOG_COMPILER instead.
+ unindent > signal-$sig.test <<END
+ #! /usr/bin/env perl
+ # We need autoflush to avoid losing output, which could cause spurious
+ # "no test plan seen" in the TAP driver.
+ BEGIN { $| = 1 }
+ use warnings FATAL => "all";
+ print "1..1\\n";
+ print "ok 1\\n";
+ kill $sig, \$\$;
+ print "Bail out! \$0 not killed?\\n";
+END
+ echo TESTS += signal-$sig.test >> Makefile.am
+done
+results_count=$(ls *.test | wc -l | tr -d "$tab$sp")
+
+chmod a+x *.test
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+
+system=$(uname -s -r || echo unknown) # Needed later.
+
+signal_caught ()
+{
+ numeric=$1
+ case $numeric in
+ 1) symbolic=HUP;;
+ 2) symbolic=INT;;
+ 3) symbolic=QUIT;;
+ 9) symbolic=KILL;;
+ 13) symbolic=PIPE;;
+ 15) symbolic=TERM;;
+ *) fatal_ "unexpected signal number '$numeric'"
+ esac
+ # Sending a SIGQUIT on Cygwin 1.5 can cause a segmentation fault
+ # instead (sometimes). Don't let this older bug pollute the results
+ # of our testsuite.
+ case $numeric,$system in
+ 3,CYGWIN*\ 1.5.*) sig_re="((SIG)?($symbolic|SEGV)|$numeric|11)";;
+ *) sig_re="((SIG)?$symbolic|$numeric)";;
+ esac
+ wbound_re="($|[^a-zA-Z0-9_-])"
+ pfx_re="^ERROR: signal-$numeric\\.test"
+ rx="${pfx_re} .*terminated by signal ${sig_re}${wbound_re}"
+ desc="TAP driver catch test termination by signal SIG${symbolic}"
+ case " $blocked_signals " in
+ *" $numeric "*) skip_ -r "SIG$symbolic is blocked" "$desc" ;;
+ *) command_ok_ "$desc" env LC_ALL=C $EGREP "$rx" stdout ;;
+ esac
+}
+
+command_ok_ '"make check" fails' eval '
+ (
+ run_make -e IGNORE -O check
+ # Extra "echo" and silencing of xtraces required to avoid possible
+ # garbled output with NetBSD make, which would miss some final
+ # newlines in the expected places and thus mess up our TAP output.
+ set +x; echo
+ test $am_make_rc -gt 0
+ )
+'
+cat stdout # For debugging.
+
+command_ok_ "count of test results" count_test_results \
+ total=$(($results_count * 2)) \
+ pass=$results_count error=$results_count \
+ fail=0 xpass=0 xfail=0 skip=0
+
+for sig in $all_signals; do
+ signal_caught $sig
+done
+
+echo 'TEST_LOG_DRIVER_FLAGS = --ignore-exit' >> Makefile
+
+command_ok_ '"make check" passes [--ignore-exit]' run_make -O check
+
+command_ok_ "count of test results [--ignore-exit]" count_test_results \
+ total=$results_count pass=$results_count \
+ fail=0 xpass=0 xfail=0 skip=0 error=0
+
+:
diff --git a/t/tap-summary-color.sh b/t/tap-summary-color.sh
new file mode 100644
index 000000000..c6d74ce96
--- /dev/null
+++ b/t/tap-summary-color.sh
@@ -0,0 +1,23 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - colorized testsuite summary
+
+. test-lib.sh
+
+use_colors=yes
+. tap-summary-aux.sh
diff --git a/t/tap-summary.sh b/t/tap-summary.sh
new file mode 100644
index 000000000..87ece97a0
--- /dev/null
+++ b/t/tap-summary.sh
@@ -0,0 +1,23 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - colorized testsuite summary
+
+. test-lib.sh
+
+use_colors=no
+. tap-summary-aux.sh
diff --git a/t/tap-test-number-0.sh b/t/tap-test-number-0.sh
new file mode 100644
index 000000000..b82f0650d
--- /dev/null
+++ b/t/tap-test-number-0.sh
@@ -0,0 +1,58 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - a test result numbered as 0 is to be considered out-of-order
+# This is consistent with the behaviour of the 'prove' utility.
+
+. test-init.sh
+. tap-setup.sh
+
+cat > a.test <<END
+1..1
+ok 0
+END
+
+cat > b.test <<END
+1..1
+not ok 0
+END
+
+cat > c.test <<END
+1..1
+ok 0 foo # SKIP
+END
+
+cat > d.test <<END
+1..1
+not ok 0 bar # TODO
+END
+
+cat > e.test <<END
+1..1
+ok 0 # TODO
+END
+
+run_make -O -e FAIL TESTS='a.test b.test c.test d.test e.test' check
+count_test_results total=5 pass=0 fail=0 xpass=0 xfail=0 skip=0 error=5
+
+grep '^ERROR: a\.test 0 # OUT-OF-ORDER (expecting 1)$' stdout
+grep '^ERROR: b\.test 0 # OUT-OF-ORDER (expecting 1)$' stdout
+grep '^ERROR: c\.test 0 foo # OUT-OF-ORDER (expecting 1)$' stdout
+grep '^ERROR: d\.test 0 bar # OUT-OF-ORDER (expecting 1)$' stdout
+grep '^ERROR: e\.test 0 # OUT-OF-ORDER (expecting 1)$' stdout
+
+:
diff --git a/t/tap-todo-skip-together.sh b/t/tap-todo-skip-together.sh
new file mode 100644
index 000000000..3abd23af8
--- /dev/null
+++ b/t/tap-todo-skip-together.sh
@@ -0,0 +1,37 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - TODO and SKIP directives on the same line: the first one wins
+# See also related test 'tap-ambiguous-directive.sh'.
+
+. test-init.sh
+
+. tap-setup.sh
+
+cat > all.test <<END
+1..2
+ok 1 # SKIP TODO
+not ok 2 # TODO SKIP
+END
+
+run_make -O check
+count_test_results total=2 pass=0 fail=0 xpass=0 xfail=1 skip=1 error=0
+
+grep '^SKIP: all\.test 1 ' stdout
+grep '^XFAIL: all\.test 2 ' stdout
+
+:
diff --git a/t/tap-todo-skip-whitespace.sh b/t/tap-todo-skip-whitespace.sh
new file mode 100644
index 000000000..f45642883
--- /dev/null
+++ b/t/tap-todo-skip-whitespace.sh
@@ -0,0 +1,99 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - normalization of whitespace in console testsuite progress associated
+# with TODO and SKIP directives
+
+. test-init.sh
+
+. tap-setup.sh
+
+cat > stub.tap <<END
+1 # TODO
+2 # TODO foo?
+3 # TODO: bar!
+4 aa # TODO
+5 bb # TODO fnord 5
+6 cc # TODO:${tab}fnord 6
+7 - x # TODO
+8 - y # TODO fnord $tab 8
+9 - z # TODO: fnord 9 $tab
+10# TODO x0
+11$tab# TODO x1
+12 $tab$tab # TODO x2
+13 asd# TODO x3
+14 sad$tab# TODO x4
+15 das$tab$tab # TODO x5
+END
+
+cat > stub.exp <<END
+1 # TODO
+2 # TODO foo?
+3 # TODO: bar!
+4 aa # TODO
+5 bb # TODO fnord 5
+6 cc # TODO:${tab}fnord 6
+7 - x # TODO
+8 - y # TODO fnord $tab 8
+9 - z # TODO: fnord 9
+10 # TODO x0
+11 # TODO x1
+12 # TODO x2
+13 asd # TODO x3
+14 sad # TODO x4
+15 das # TODO x5
+END
+
+plan=1..15
+
+my_make_check ()
+{
+ xpass=0 xfail=0 skip=0
+ case $1 in
+ xpass|xfail|skip) eval $1=15;;
+ *) fatal_ "bad argument '$1' for my_make_check";;
+ esac
+ cat all.test
+ # We don't care about the exit status in this test.
+ run_make -O -e IGNORE check
+ count_test_results total=15 pass=0 fail=0 error=0 \
+ xpass=$xpass xfail=$xfail skip=$skip
+ # Don't be too strict w.r.t. possible normalization of "TODO: foo" into
+ # "TODO : foo" (as is done by, e.g., the 'TAP::Parser' perl module).
+ LC_ALL=C grep '^[A-Z][A-Z]*:' stdout \
+ | sed -e 's/# TODO *:/# TODO:/' -e 's/# SKIP *:/# SKIP:/' > got
+ cat exp
+ cat got
+ diff exp got
+}
+
+# For "TODO" directives leading to XPASS results.
+(echo $plan && sed -e 's/^/ok /' stub.tap) > all.test
+sed -e 's/^/XPASS: all.test /' stub.exp > exp
+my_make_check xpass
+
+# For "TODO" directives leading to XFAIL results.
+(echo $plan && sed -e 's/^/not ok /' stub.tap) > all.test
+sed -e 's/^/XFAIL: all.test /' stub.exp > exp
+my_make_check xfail
+
+# For "SKIP" directives.
+(echo $plan && sed -e 's/^/ok /' -e 's/TODO/SKIP/' stub.tap) > all.test
+sed -e 's/TODO/SKIP/' -e 's/^/SKIP: all.test /' stub.exp > exp
+my_make_check skip
+
+:
diff --git a/t/tap-todo-skip.sh b/t/tap-todo-skip.sh
new file mode 100644
index 000000000..5bafa451c
--- /dev/null
+++ b/t/tap-todo-skip.sh
@@ -0,0 +1,86 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - TODO and SKIP directives are case-insensitive
+# - TODO and SKIP directives can be followed optionally by a colon ":"
+# and by an optional explanation.
+# - our driver isn't fooled into recognizing TODO and SKIP directives
+# spuriously
+# - the reasons for TODO and SKIP, if present, are nicely printed in
+# the testsuite progress output
+
+. test-init.sh
+
+. tap-setup.sh
+
+# ----------------------------------------------------- #
+# Check all possible combinations of: #
+# - uppercase/lowercase #
+# - with/without colon character ":" #
+# - with/without explanatory message #
+# in TODO and SKIP directives. #
+# ----------------------------------------------------- #
+
+# There are 2 * 2^6 + 2 * 2^6 = 256 tests.
+echo 1..256 > all.test
+
+# These nested loops are clearer without indentation.
+
+for c1 in t T; do
+for c2 in o O; do
+for c3 in d D; do
+for c4 in o O; do
+for ex in '' ':' ' foo' ': foo'; do
+ echo "not ok # $c1$c2$c3$c4$ex"
+ echo "not ok# $c1$c2$c3$c4$ex"
+done; done; done; done; done >> all.test
+
+for c1 in s S; do
+for c2 in k K; do
+for c3 in i I; do
+for c4 in p P; do
+for ex in '' ':' ' foo' ': foo'; do
+ echo "ok # $c1$c2$c3$c4$ex"
+ echo "ok# $c1$c2$c3$c4$ex"
+done; done; done; done; done >> all.test
+
+cat all.test # For debugging.
+
+run_make -O check
+count_test_results total=256 pass=0 fail=0 xpass=0 xfail=128 skip=128 error=0
+
+# -------------------------------------------------------- #
+# TODO ans SKIP directives aren't recognized spuriously. #
+# -------------------------------------------------------- #
+
+cat > all.test <<'END'
+1..9
+ok TODO
+ok - TODO
+ok 3 TODO
+ok 4 - TODO
+ok SKIP
+ok - SKIP
+ok 7 SKIP
+ok 8 - SKIP
+ok 9
+END
+
+run_make -O check
+count_test_results total=9 pass=9 fail=0 xpass=0 xfail=0 skip=0 error=0
+
+:
diff --git a/t/tap-unplanned.sh b/t/tap-unplanned.sh
new file mode 100644
index 000000000..95133795c
--- /dev/null
+++ b/t/tap-unplanned.sh
@@ -0,0 +1,153 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - unplanned tests are properly reported as errors
+
+. test-init.sh
+
+. tap-setup.sh
+
+cat > all.test <<END
+1..1
+ok 1
+ok 2
+END
+run_make -O -e FAIL check
+count_test_results total=3 pass=1 fail=0 xpass=0 xfail=0 skip=0 error=2
+grep '^ERROR: all\.test - too many tests run (expected 1, got 2)$' stdout
+grep '^ERROR: all\.test 2 # UNPLANNED$' stdout
+
+cat > all.test <<END
+1..2
+ok 1
+ok 2
+ok 3
+END
+run_make -O -e FAIL check
+count_test_results total=4 pass=2 fail=0 xpass=0 xfail=0 skip=0 error=2
+grep '^ERROR: all\.test - too many tests run (expected 2, got 3)$' stdout
+grep '^ERROR: all\.test 3 # UNPLANNED$' stdout
+
+# Interaction with XFAIL_TESTS.
+cat > all.test <<END
+1..2
+not ok 1
+ok 2 # SKIP
+ok 3
+not ok 4
+ok 5 # SKIP
+END
+run_make -O -e FAIL XFAIL_TESTS=all.test check
+count_test_results total=6 pass=0 fail=0 xpass=0 xfail=1 skip=1 error=4
+grep '^ERROR: all\.test - too many tests run (expected 2, got 5)$' stdout
+grep '^ERROR: all\.test 3 # UNPLANNED$' stdout
+grep '^ERROR: all\.test 4 # UNPLANNED$' stdout
+grep '^ERROR: all\.test 5 # UNPLANNED$' stdout
+
+cat > all.test <<END
+1..1
+ok 1
+
+ok
+ok 3
+ok foo
+ok 5 - bar bar
+
+not ok
+not ok 7
+not ok foo
+not ok 9 - bar bar
+
+ok # TODO
+ok 11 # TODO
+ok foo # TODO
+ok 13 - bar bar # TODO
+
+not ok # TODO
+not ok 15 # TODO
+not ok foo # TODO
+not ok 17 - bar bar # TODO
+
+ok # SKIP
+ok 19 # SKIP
+ok foo # SKIP
+ok 21 - bar bar # SKIP
+END
+
+cat > t <<END
+
+2
+3
+4 foo
+5 - bar bar
+
+6
+7
+8 foo
+9 - bar bar
+
+10
+11
+12 foo
+13 - bar bar
+
+14
+15
+16 foo
+17 - bar bar
+
+18
+19
+20 foo
+21 - bar bar
+
+END
+
+run_make -O -e FAIL check
+count_test_results total=22 pass=1 fail=0 xpass=0 xfail=0 skip=0 error=21
+
+echo 'PASS: all.test 1' > exp
+sed -e '/^$/d' -e 's/.*/ERROR: all.test & # UNPLANNED/' t >> exp
+echo 'ERROR: all.test - too many tests run (expected 1, got 21)' >> exp
+
+$FGREP ': all.test' stdout > got
+
+cat exp
+cat got
+diff exp got
+
+# Note that, if the TAP input has a trailing plan, it is not possible
+# to flag unplanned tests as such, since we do not know they're unplanned
+# until the plan is reached; still, we should give at least an error
+# message about the unmatched number of tests once we've got the plan.
+
+for x in 'ok' 'ok 3' 'not ok' 'not ok # TODO' 'ok # TODO' 'ok # SKIP'; do
+ unindent > all.test <<END
+ ok 1
+ ok 2 # SKIP
+ $x
+ 1..2
+END
+ run_make -O -e FAIL check
+ test $($FGREP -c ': all.test' stdout) -eq 4
+ $EGREP '^PASS: all\.test 1($| )' stdout
+ $EGREP '^SKIP: all\.test 2($| )' stdout
+ $EGREP ': all\.test 3($| )' stdout
+ grep '^ERROR: all\.test - too many tests run (expected 2, got 3)$' stdout
+done
+
+:
diff --git a/t/tap-whitespace-normalization.sh b/t/tap-whitespace-normalization.sh
new file mode 100644
index 000000000..4b767f5c1
--- /dev/null
+++ b/t/tap-whitespace-normalization.sh
@@ -0,0 +1,163 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support: whitespace normalization (or lack thereof) in the testsuite
+# progress output on console. We keep all of these checks here in a single
+# script so that a potential cosmetic change in the output format won't
+# force us to tweak dozens of other tests (hopefully).
+# See also related test 'tap-todo-skip-whitespace.sh'.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+TEST_LOG_COMPILER = cat
+TESTS =
+END
+
+: > exp
+
+spaces_a=${sp}${tab}${tab}${sp}${sp}${tab}
+spaces_b=${tab}${tab}${sp}${tab}${sp}${sp}${sp}
+
+#-----------------------------------------------------------------------
+
+echo TESTS += numbers.test >> Makefile.am
+
+cat > numbers.test <<END
+1..6
+ok${spaces_a}1
+ok 2${spaces_b}
+ok${spaces_a}3${spaces_b}
+not ok${spaces_b}4
+not ok 5${spaces_a}
+not ok${spaces_b}6${spaces_a}
+END
+
+cat >> exp <<END
+PASS: numbers.test 1
+PASS: numbers.test 2
+PASS: numbers.test 3
+FAIL: numbers.test 4
+FAIL: numbers.test 5
+FAIL: numbers.test 6
+END
+
+#-----------------------------------------------------------------------
+
+echo TESTS += description.test >> Makefile.am
+
+cat > description.test <<END
+1..8
+ok${spaces_a}+foo
+ok +bar${spaces_b}
+ok${spaces_a}+baz${spaces_b}
+not ok${spaces_b}-foo
+not ok -bar${spaces_a}
+not ok${spaces_b}-baz${spaces_a}
+ok u${spaces_b}v${spaces_a}w${sp}
+not ok${spaces_a}x${spaces_a}y${tab}z${tab}
+END
+
+cat >> exp <<END
+PASS: description.test 1 +foo
+PASS: description.test 2 +bar
+PASS: description.test 3 +baz
+FAIL: description.test 4 -foo
+FAIL: description.test 5 -bar
+FAIL: description.test 6 -baz
+PASS: description.test 7 u${spaces_b}v${spaces_a}w
+FAIL: description.test 8 x${spaces_a}y${tab}z
+END
+
+#-----------------------------------------------------------------------
+
+# "Bail out!" magic.
+
+echo TESTS += bailout.test >> Makefile.am
+
+cat > bailout.test <<END
+1..1
+Bail out!${tab}${sp}${sp}${tab}We're out of disk space.
+ok 1
+END
+
+cat >> exp <<END
+ERROR: bailout.test - Bail out! We're out of disk space.
+END
+
+echo TESTS += bailout2.test >> Makefile.am
+
+cat > bailout2.test <<END
+1..1
+Bail out!foo${tab}${sp}
+ok 1
+END
+
+cat >> exp <<END
+ERROR: bailout2.test - Bail out! foo
+END
+
+#-----------------------------------------------------------------------
+
+# Diagnostic lines.
+
+echo AM_TEST_LOG_DRIVER_FLAGS = --comments >> Makefile.am
+echo TESTS += cmnt.test >> Makefile.am
+
+cat > cmnt.test <<END
+1..1
+ok 1
+#Leading whitespace gets added
+# ${tab}${tab} ${tab}Extra leading whitespace is stripped
+# Trailing whitespace is stripped ${tab} ${tab}${tab}
+# Middle${tab}whitespace is${tab} ${tab}${tab} kept
+# ${tab} And only${tab}middle ${tab}whitespace ${tab}${tab} ${tab}
+END
+
+cat >> exp <<END
+PASS: cmnt.test 1
+# cmnt.test: Leading whitespace gets added
+# cmnt.test: Extra leading whitespace is stripped
+# cmnt.test: Trailing whitespace is stripped
+# cmnt.test: Middle${tab}whitespace is${tab} ${tab}${tab} kept
+# cmnt.test: And only${tab}middle ${tab}whitespace
+END
+
+#-----------------------------------------------------------------------
+
+# TODO: we should have more checks here ... (but let's not over-do FTM).
+
+#-----------------------------------------------------------------------
+
+chmod a+x *.test
+
+. tap-setup.sh
+
+# We don't care about exit status or number of test results, they
+# should be checked for in many other tests.
+run_make -O -e FAIL check
+
+LC_ALL=C sort exp > t
+mv -f t exp
+
+# We need the sort below to account for parallel make usage.
+LC_ALL=C grep '[a-z0-9][a-z0-9]*\.test' stdout | LC_ALL=C sort > got
+
+cat exp
+cat got
+diff exp got
+
+:
diff --git a/t/tap-with-and-without-number.sh b/t/tap-with-and-without-number.sh
new file mode 100644
index 000000000..9ba708bb5
--- /dev/null
+++ b/t/tap-with-and-without-number.sh
@@ -0,0 +1,48 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP support:
+# - numbered and unnumbered test results can coexist
+# - tests without explicit number get automatically numbered in the
+# testsuite progress output on console
+
+. test-init.sh
+
+. tap-setup.sh
+
+cat > all.test <<'END'
+1..7
+ok 1 foo
+ok 2 - foo2
+ok - bar
+not ok baz # TODO
+not ok 5 - asd # TODO
+ok 6 # SKIP
+ok zardoz
+END
+
+run_make -O check
+count_test_results total=7 pass=4 fail=0 xpass=0 xfail=2 skip=1 error=0
+
+grep '^PASS: all\.test 1 foo$' stdout
+grep '^PASS: all\.test 2 - foo2$' stdout
+grep '^PASS: all\.test 3 - bar$' stdout
+grep '^XFAIL: all\.test 4 baz # TODO$' stdout
+grep '^XFAIL: all\.test 5 - asd # TODO$' stdout
+grep '^SKIP: all\.test 6 # SKIP$' stdout
+grep '^PASS: all\.test 7 zardoz$' stdout
+
+:
diff --git a/t/tap-xfail-tests.sh b/t/tap-xfail-tests.sh
new file mode 100644
index 000000000..7be985918
--- /dev/null
+++ b/t/tap-xfail-tests.sh
@@ -0,0 +1,63 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# TAP and $(XFAIL_TESTS): test results without directives are turned from
+# PASS to XPASS and from FAIL to XFAIL; other results are unchanged.
+
+. test-init.sh
+
+. tap-setup.sh
+
+echo 'XFAIL_TESTS = $(TESTS)' >> Makefile
+
+cat > all.test <<END
+1..6
+ok 1
+not ok 2
+ok 3 # TODO
+not ok 4 # TODO
+ok 5 # SKIP
+# The next should count as a failure (and thus will be
+# rendered into an expected failure by XFAIL_TESTS).
+not ok 6 # SKIP
+Bail out!
+END
+
+run_make -O -e FAIL check
+count_test_results total=7 pass=0 fail=0 xpass=2 xfail=3 skip=1 error=1
+
+grep '^XPASS: all\.test 1$' stdout
+grep '^XFAIL: all\.test 2$' stdout
+grep '^XPASS: all\.test 3 # TODO' stdout
+grep '^XFAIL: all\.test 4 # TODO' stdout
+grep '^SKIP: all\.test 5 # SKIP' stdout
+grep '^XFAIL: all\.test 6 # SKIP' stdout
+grep '^ERROR: all\.test - Bail out!' stdout
+
+# Check that the exit status of the testsuite is indeed 0 when we
+# would expect success.
+
+cat > all.test <<END
+1..3
+not ok 1
+ok 2 # SKIP
+not ok 3 # TODO
+END
+
+run_make -O check
+count_test_results total=3 pass=0 fail=0 xpass=0 xfail=2 skip=1 error=0
+
+:
diff --git a/t/tar-opts-errors.sh b/t/tar-opts-errors.sh
new file mode 100644
index 000000000..ff92ad05c
--- /dev/null
+++ b/t/tar-opts-errors.sh
@@ -0,0 +1,52 @@
+#! /bin/sh
+# Copyright (C) 2004-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check the tar options diagnostics.
+
+. test-init.sh
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE([tar-pax tar-v7])
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+END
+
+: > Makefile.am
+
+$ACLOCAL
+AUTOMAKE_fails
+grep "^configure\.ac:2:.*mutually exclusive" stderr > tar-err
+cat tar-err
+test 1 -eq $(wc -l < tar-err)
+grep "'tar-pax'" tar-err
+grep "'tar-v7'" tar-err
+
+rm -rf autom4te.cache
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+END
+
+echo 'AUTOMAKE_OPTIONS = tar-pax' > Makefile.am
+
+AUTOMAKE_fails
+grep "^Makefile\.am:1:.*'tar-pax'.*AM_INIT_AUTOMAKE" stderr
+
+:
diff --git a/t/tar-override.sh b/t/tar-override.sh
new file mode 100644
index 000000000..116dd382c
--- /dev/null
+++ b/t/tar-override.sh
@@ -0,0 +1,68 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that the user can override the tar program used by "make dist"
+# at runtime, by redefining the 'TAR' environment variable.
+# NOTE: currently this works only when the tar format used is 'v7'
+# (which is the default one).
+
+. test-init.sh
+
+cwd=$(pwd) || fatal_ "getting current working directory"
+
+echo AC_OUTPUT >> configure.ac
+
+cat > am--tar <<'END'
+#!/bin/sh
+echo $1 > am--tar-has-run
+shift
+exec tar "$@"
+END
+chmod a+x am--tar
+
+cat > Makefile.am <<'END'
+check-local: dist
+ ls -l ;: For debugging.
+ test -f am--tar-has-run
+CLEANFILES = am--tar-has-run
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+
+clean_temp () { rm -f *.tar.* *has-run*; }
+
+$MAKE dist
+test -f $distdir.tar.gz
+ls | grep has-run && exit 1
+
+clean_temp
+
+TAR="$cwd/am--tar foo" $MAKE distcheck
+test -f $distdir.tar.gz
+test "$(cat am--tar-has-run)" = foo
+
+clean_temp
+
+unset TAR
+# Creative use of eval to pacify maintainer checks.
+eval \$'MAKE dist "TAR=./am--tar mu"'
+test -f $distdir.tar.gz
+test "$(cat am--tar-has-run)" = mu
+
+:
diff --git a/t/tar-pax.sh b/t/tar-pax.sh
new file mode 100644
index 000000000..eb1cbea1e
--- /dev/null
+++ b/t/tar-pax.sh
@@ -0,0 +1,43 @@
+#! /bin/sh
+# Copyright (C) 2004-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check the tar-pax option.
+
+. test-init.sh
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE([tar-pax])
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+END
+
+: > Makefile.am
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+
+grep 'am__tar' Makefile # For debugging.
+if grep '^am__tar = false' Makefile; then
+ skip_ "cannot find proper archiver program"
+fi
+
+$MAKE distcheck
+test -f "$distdir.tar.gz"
+
+:
diff --git a/t/tar-ustar-id-too-high.sh b/t/tar-ustar-id-too-high.sh
new file mode 100644
index 000000000..81802c3f9
--- /dev/null
+++ b/t/tar-ustar-id-too-high.sh
@@ -0,0 +1,88 @@
+#! /bin/sh
+# Copyright (C) 2013-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that UID or GID too high for the ustar format are correctly
+# rwcognized and diagnosed by configure. See bug#8343 and bug#13588.
+
+. test-init.sh
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE([tar-ustar])
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+END
+
+: > Makefile.am
+
+run_configure()
+{
+ st=0; ./configure ${1+"$@"} >stdout || st=$?
+ cat stdout || exit 1
+ test $st -eq 0 || exit 1
+}
+
+checked ()
+{
+ grep "^checking $1\.\.\. $2$" stdout
+}
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+mkdir bin
+cat > bin/id <<'END'
+#!/bin/sh -e
+case "$*" in
+ -u) echo "${am_uid-1000}";;
+ -g) echo "${am_gid-1000}";;
+ *) echo "id: bad/unexpected usage" >&2; exit 1;;
+esac
+END
+chmod a+x bin/id
+
+PATH=$(pwd)/bin$PATH_SEPARATOR$PATH
+
+# Problematic ID reported in
+# <https://bugzilla.redhat.com/show_bug.cgi?id=843376>.
+am_uid=16777216; export am_uid
+am_gid=1000; export am_gid
+run_configure
+checked "whether UID '$am_uid' is supported by ustar format" "no"
+checked "whether GID '1000' is supported by ustar format" "yes"
+checked "how to create a ustar tar archive" "none"
+
+# Another problematic ID reported in
+# <https://bugzilla.redhat.com/show_bug.cgi?id=843376>.
+am_uid=1000; export am_uid
+am_gid=17000000; export am_gid
+run_configure
+checked "whether UID '1000' is supported by ustar format" "yes"
+checked "whether GID '$am_gid' is supported by ustar format" "no"
+checked "how to create a ustar tar archive" "none"
+
+# The minimal ID that is too big.
+two_to_twentyone=$((32 * 32 * 32 * 32 * 2))
+# <https://bugzilla.redhat.com/show_bug.cgi?id=843376>.
+am_uid=$two_to_twentyone; export am_uid
+am_gid=$two_to_twentyone; export am_gid
+run_configure
+checked "whether UID '$two_to_twentyone' is supported by ustar format" "no"
+checked "whether GID '$two_to_twentyone' is supported by ustar format" "no"
+checked "how to create a ustar tar archive" "none"
+
+:
diff --git a/t/tar-ustar.sh b/t/tar-ustar.sh
new file mode 100644
index 000000000..359e162c2
--- /dev/null
+++ b/t/tar-ustar.sh
@@ -0,0 +1,43 @@
+#! /bin/sh
+# Copyright (C) 2004-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check the tar-ustar option.
+
+. test-init.sh
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE([tar-ustar])
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+END
+
+: > Makefile.am
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+
+grep 'am__tar' Makefile # For debugging.
+if grep '^am__tar = false' Makefile; then
+ skip_ "cannot find proper archiver program"
+fi
+
+$MAKE distcheck
+test -f "$distdir.tar.gz"
+
+:
diff --git a/t/target-cflags.sh b/t/target-cflags.sh
new file mode 100644
index 000000000..2571e6197
--- /dev/null
+++ b/t/target-cflags.sh
@@ -0,0 +1,75 @@
+#! /bin/sh
+# Copyright (C) 2000-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure target specific CFLAGS work
+# Assar Westerlund <assar@sics.se>
+
+required=cc
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = no-dependencies
+
+bin_PROGRAMS = foo bar
+foo_CFLAGS = -DFOO
+END
+
+cat > foo.c << 'END'
+#include <stdio.h>
+#ifdef FOO
+int main(void)
+{
+ return 0;
+}
+#endif
+END
+
+cat > bar.c << 'END'
+#ifndef FOO
+int main(void)
+{
+ return 0;
+}
+#endif
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+mkdir build
+
+cd build
+../configure
+$MAKE
+if ! cross_compiling; then
+ ./foo
+ ./bar
+fi
+cd ..
+
+./configure
+$MAKE
+if ! cross_compiling; then
+ ./foo
+ ./bar
+fi
+
+:
diff --git a/t/targetclash.sh b/t/targetclash.sh
new file mode 100644
index 000000000..e9c91f316
--- /dev/null
+++ b/t/targetclash.sh
@@ -0,0 +1,33 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that target clashes are diagnosed.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = ctags
+END
+
+$ACLOCAL
+AUTOMAKE_fails -a
+grep 'redefinition.*ctags' stderr
+
+:
diff --git a/t/test-driver-acsubst.sh b/t/test-driver-acsubst.sh
new file mode 100644
index 000000000..e78290acc
--- /dev/null
+++ b/t/test-driver-acsubst.sh
@@ -0,0 +1,86 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# parallel-tests:
+# - LOG_DRIVER variables can be AC_SUBST'd
+
+. test-init.sh
+
+mkdir test-drivers
+
+cp "$am_testaux_srcdir"/trivial-test-driver test-drivers/triv \
+ || fatal_ "failed to fetch auxiliary script trivial-test-driver"
+cp "$am_scriptdir"/test-driver test-drivers/dflt \
+ || fatal_ "failed to fetch auxiliary script test-driver"
+
+cat >> configure.ac <<'END'
+AC_SUBST([LOG_DRIVER], ['${SHELL} test-drivers/triv'])
+AC_SUBST([TEST_LOG_DRIVER], ['${SHELL} test-drivers/dflt'])
+AC_SUBST([SH_LOG_DRIVER], ['${my_drv}'])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+TEST_EXTENSIONS = .test .sh
+my_drv = $(SHELL) test-drivers/dflt
+TESTS = foo bar.test baz.sh
+XFAIL_TESTS = baz.sh
+.PHONY: check-autodefs
+check-autodefs:
+### For debugging.
+ @echo LOG_DRIVER = $(LOG_DRIVER)
+ @echo TEST_LOG_DRIVER = $(TEST_LOG_DRIVER)
+ @echo SH_LOG_DRIVER = $(SH_LOG_DRIVER)
+### Checks here.
+ @echo ' ' $(LOG_DRIVER) ' ' | grep ' test-drivers/triv '
+ @echo ' ' $(TEST_LOG_DRIVER) ' ' | grep ' test-drivers/dflt '
+ @echo ' ' $(SH_LOG_DRIVER) ' ' | grep ' test-drivers/dflt '
+END
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+./configure
+
+cat > foo <<'END'
+#!/bin/sh
+echo "PASS: from $0"
+exit 1 # exit status should be ignored by the trivial-test-driver.
+END
+
+cat > bar.test <<'END'
+#!/bin/sh
+exit 77
+END
+
+cat > baz.sh <<'END'
+#!/bin/sh
+exit 1
+END
+
+chmod a+x foo bar.test baz.sh
+
+$MAKE check-autodefs
+run_make -O -e IGNORE check
+cat test-suite.log
+cat foo.log
+cat bar.log
+cat baz.log
+test $am_make_rc -eq 0
+count_test_results total=3 pass=1 fail=0 skip=1 xfail=1 xpass=0 error=0
+
+:
diff --git a/t/test-driver-cond.sh b/t/test-driver-cond.sh
new file mode 100644
index 000000000..cc6f2dc22
--- /dev/null
+++ b/t/test-driver-cond.sh
@@ -0,0 +1,116 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# parallel-tests:
+# - Automake can correctly handle conditionals contents for the
+# LOG_DRIVER variables.
+
+. test-init.sh
+
+cp "$am_testaux_srcdir"/trivial-test-driver . \
+ || fatal_ "failed to fetch auxiliary script trivial-test-driver"
+cp "$am_scriptdir"/tap-driver.sh . \
+ || fatal_ "failed to fetch auxiliary script tap-driver.sh"
+
+cat >> configure.ac << END
+AM_CONDITIONAL([COND1], [:])
+AM_CONDITIONAL([COND2], [false])
+AM_CONDITIONAL([COND3], [false])
+AC_SUBST([PERL], ['$PERL'])
+AC_SUBST([my_LOG_DRIVER], ['\${SHELL} \${top_srcdir}/trivial-test-driver'])
+AM_SUBST_NOTMAKE([my_LOG_DRIVER])
+AC_OUTPUT
+END
+
+$ACLOCAL
+$AUTOCONF
+
+cat > Makefile.am << 'END'
+TESTS = foo bar.test baz.sh
+EXTRA_DIST = $(TESTS) tap-driver.sh trivial-test-driver
+TEST_EXTENSIONS = .test .sh
+LOG_DRIVER =
+SH_LOG_DRIVER = $(tap_rulez)
+if COND1
+LOG_DRIVER += @my_LOG_DRIVER@
+if COND2
+tap_rulez = false
+else !COND2
+tap_rulez = $(PERL) $(srcdir)/tap-driver.sh
+endif !COND2
+endif COND1
+END
+
+cat > foo <<'END'
+#!/bin/sh
+echo "PASS: from $0"
+echo "SKIP: from $0"
+exit 1 # exit status should be ignored by the trivial-test-driver.
+END
+
+cat > bar.test <<'END'
+#!/bin/sh
+exit 0
+END
+
+cat > baz.sh <<'END'
+#!/bin/sh
+echo 1..3
+echo 'ok 1'
+echo 'not ok 2 # TODO'
+echo 'not ok 3 # TODO'
+END
+
+chmod a+x foo bar.test baz.sh
+
+$AUTOMAKE -a
+test -f test-driver
+
+grep DRIVER Makefile.in || exit 99 # For debugging.
+
+grep '^my_LOG_DRIVER *=' Makefile.in \
+ && fatal_ 'unexpected $(my_LOG_DRIVER) in Makefile.in'
+
+grep '^TEST_LOG_DRIVER =.*\$(SHELL).*/test-driver' Makefile.in
+
+$PERL -MTAP::Parser -e 1 \
+ || skip_ "cannot import TAP::Parser perl module"
+
+./configure
+
+do_count ()
+{
+ count_test_results total=6 pass=3 fail=0 skip=1 xfail=2 xpass=0 error=0
+ grep '^PASS: foo, testcase 1 *$' stdout
+ grep '^SKIP: foo, testcase 2 *$' stdout
+ grep '^PASS: bar\.test *$' stdout
+ $EGREP 'PASS: baz\.sh 1( |$)' stdout
+ $EGREP 'XFAIL: baz\.sh 2( |$)' stdout
+ $EGREP 'XFAIL: baz\.sh 3( |$)' stdout
+}
+
+run_make -O -e IGNORE check
+cat test-suite.log
+cat foo.log
+cat bar.log
+cat baz.log
+test $am_make_rc -eq 0 || exit 1
+do_count
+
+run_make -O distcheck
+do_count
+
+:
diff --git a/t/test-driver-create-log-dir.sh b/t/test-driver-create-log-dir.sh
new file mode 100644
index 000000000..aedebd580
--- /dev/null
+++ b/t/test-driver-create-log-dir.sh
@@ -0,0 +1,82 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Custom test drivers: if a log file has a directory component (as in
+# e.g., 'sub/foo.log'), the Automake test harness must ensure that
+# directory exists before calling any custom test driver.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+# The extra '.' components below are meant.
+TESTS = sub/foo sub/subsub/bar.test ././sub1/./baz
+$(TESTS):
+LOG_DRIVER = $(srcdir)/checkdir-driver
+TEST_LOG_DRIVER = $(LOG_DRIVER)
+EXTRA_DIST = checkdir-driver
+
+check-local: $(TEST_SUITE_LOG)
+ test -d sub
+ test -d sub1
+ test -d sub/subsub
+ test -f sub/foo.log
+ test -f sub/subsub/bar.log
+ test -f sub1/baz.log
+ test -f sub/foo.trs
+ test -f sub/subsub/bar.trs
+ test -f sub1/baz.trs
+END
+
+echo "#!$AM_TEST_RUNNER_SHELL" > checkdir-driver
+cat >> checkdir-driver <<'END'
+set -e; set -u
+while test $# -gt 0; do
+ case $1 in
+ --log-file) log_file=$2; shift;;
+ --trs-file) trs_file=$2; shift;;
+ --test-name|--expect-failure|--color-tests|--enable-hard-errors) shift;;
+ --) shift; break;;
+ *) echo "$0: invalid option/argument: '$1'" >&2; exit 2;;
+ esac
+ shift
+done
+echo "log: $log_file" # For debugging.
+echo "trs: $trs_file" # Ditto.
+case $log_file in */*);; *) exit 1;; esac
+dir_log=${log_file%/*}
+dir_trs=${trs_file%/*}
+echo "dir_log: $dir_log" # For debugging.
+echo "dir_trs: $dir_trs" # Likewise.
+test x"$dir_trs" = x"$dir_log" || exit 1
+test -d "$dir_log" || exit 1
+echo dummy1 > "$log_file"
+echo dummy2 > "$trs_file"
+END
+chmod a+x checkdir-driver
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+$MAKE check
+$MAKE distcheck
+
+:
diff --git a/t/test-driver-custom-multitest-recheck.sh b/t/test-driver-custom-multitest-recheck.sh
new file mode 100644
index 000000000..68fdcfa5b
--- /dev/null
+++ b/t/test-driver-custom-multitest-recheck.sh
@@ -0,0 +1,220 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Custom test drivers: try the "recheck" functionality with test protocols
+# that allow multiple testcases in a single test script. This test not
+# only checks implementation details in Automake's custom test drivers
+# support, but also serves as a "usability test" for our APIs.
+# See also related tests 'test-driver-custom-multitest-recheck2.sh'
+# and 'parallel-tests-recheck-override.sh'.
+# Keep in sync with 'tap-recheck.sh'.
+
+. test-init.sh
+
+cp "$am_testaux_srcdir"/trivial-test-driver . \
+ || fatal_ "failed to fetch auxiliary script trivial-test-driver"
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TEST_LOG_DRIVER = $(SHELL) $(srcdir)/trivial-test-driver
+TESTS = a.test b.test c.test d.test
+END
+
+cat > a.test << 'END'
+#! /bin/sh
+echo PASS: aa
+echo PASS: AA
+: > a.run
+END
+
+cat > b.test << 'END'
+#! /bin/sh
+echo PASS:
+if test -f b.ok; then
+ echo PASS:
+else
+ echo ERROR:
+fi
+: > b.run
+END
+
+cat > c.test << 'END'
+#! /bin/sh
+if test -f c.pass; then
+ echo PASS: c0
+else
+ echo FAIL: c0
+fi
+if test -f c.xfail; then
+ echo XFAIL: c1
+else
+ echo XPASS: c1
+fi
+echo XFAIL: c2
+: > c.run
+END
+
+cat > d.test << 'END'
+#! /bin/sh
+echo SKIP: who cares ...
+(. ./d.extra) || echo FAIL: d.extra failed
+: > d.run
+END
+
+chmod a+x *.test
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+do_recheck ()
+{
+ case $* in
+ --fail) status=FAIL;;
+ --pass) status=0;;
+ *) fatal_ "invalid usage of function 'do_recheck'";;
+ esac
+ rm -f *.run
+ run_make -O -e $status recheck || { ls -l; exit 1; }
+ ls -l
+}
+
+for vpath in : false; do
+ if $vpath; then
+ mkdir build
+ cd build
+ srcdir=..
+ else
+ srcdir=.
+ fi
+
+ $srcdir/configure
+
+ : A "make recheck" in a clean tree should run no tests.
+ using_gmake || $sleep # Required by BSD make.
+ do_recheck --pass
+ cat test-suite.log
+ test ! -e a.run
+ test ! -e a.log
+ test ! -e b.run
+ test ! -e b.log
+ test ! -e c.run
+ test ! -e c.log
+ test ! -e d.run
+ test ! -e d.log
+ count_test_results total=0 pass=0 fail=0 xpass=0 xfail=0 skip=0 error=0
+
+ : Run the tests for the first time.
+ run_make -O -e FAIL check
+ ls -l
+ # All the test scripts should have run.
+ test -f a.run
+ test -f b.run
+ test -f c.run
+ test -f d.run
+ count_test_results total=9 pass=3 fail=2 xpass=1 xfail=1 skip=1 error=1
+
+ : Let us make b.test pass.
+ using_gmake || $sleep # Required by BSD make.
+ echo OK > b.ok
+ do_recheck --fail
+ # a.test has been successful the first time, so no need to re-run it.
+ # Similar considerations apply to similar checks, below.
+ test ! -e a.run
+ test -f b.run
+ test -f c.run
+ test -f d.run
+ count_test_results total=7 pass=2 fail=2 xpass=1 xfail=1 skip=1 error=0
+
+ : Let us make the first part of c.test pass.
+ using_gmake || $sleep # Required by BSD make.
+ echo OK > c.pass
+ do_recheck --fail
+ test ! -e a.run
+ test ! -e b.run
+ test -f c.run
+ test -f d.run
+ count_test_results total=5 pass=1 fail=1 xpass=1 xfail=1 skip=1 error=0
+
+ : Let us make also the second part of c.test pass.
+ using_gmake || $sleep # Required by BSD make.
+ echo KO > c.xfail
+ do_recheck --fail
+ test ! -e a.run
+ test ! -e b.run
+ test -f c.run
+ test -f d.run
+ count_test_results total=5 pass=1 fail=1 xpass=0 xfail=2 skip=1 error=0
+
+ : Nothing changed, so only d.test should be run.
+ for i in 1 2; do
+ using_gmake || $sleep # Required by BSD make.
+ do_recheck --fail
+ test ! -e a.run
+ test ! -e b.run
+ test ! -e c.run
+ test -f d.run
+ count_test_results total=2 pass=0 fail=1 xpass=0 xfail=0 skip=1 error=0
+ done
+
+ : Let us make d.test run more testcases, and experience _more_ failures.
+ using_gmake || $sleep # Required by BSD make.
+ unindent > d.extra <<'END'
+ echo SKIP: s
+ echo FAIL: f 1
+ echo PASS: p 1
+ echo FAIL: f 2
+ echo XPASS: xp
+ echo FAIL: f 3
+ echo FAIL: f 4
+ echo ERROR: e 1
+ echo PASS: p 2
+ echo ERROR: e 2
+END
+ do_recheck --fail
+ test ! -e a.run
+ test ! -e b.run
+ test ! -e c.run
+ test -f d.run
+ count_test_results total=11 pass=2 fail=4 xpass=1 xfail=0 skip=2 error=2
+
+ : Let us finally make d.test pass.
+ using_gmake || $sleep # Required by BSD make.
+ echo : > d.extra
+ do_recheck --pass
+ test ! -e a.run
+ test ! -e b.run
+ test ! -e c.run
+ test -f d.run
+ count_test_results total=1 pass=0 fail=0 xpass=0 xfail=0 skip=1 error=0
+
+ : All tests have been successful or skipped, nothing should be re-run.
+ using_gmake || $sleep # Required by BSD make.
+ do_recheck --pass
+ test ! -e a.run
+ test ! -e b.run
+ test ! -e c.run
+ test ! -e d.run
+ count_test_results total=0 pass=0 fail=0 xpass=0 xfail=0 skip=0 error=0
+
+ cd $srcdir
+
+done
+
+:
diff --git a/t/test-driver-custom-multitest-recheck2.sh b/t/test-driver-custom-multitest-recheck2.sh
new file mode 100644
index 000000000..a7c391049
--- /dev/null
+++ b/t/test-driver-custom-multitest-recheck2.sh
@@ -0,0 +1,176 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Custom test drivers: try the "recheck" functionality with test protocols
+# that allow multiple testcases in a single test script. In particular,
+# check that this still works when we override $(TESTS) and $(TEST_LOGS)
+# at make runtime.
+# See also related tests 'test-driver-custom-multitest-recheck.sh' and
+# 'parallel-tests-recheck-override.sh'.
+
+. test-init.sh
+
+cp "$am_testaux_srcdir"/trivial-test-driver . \
+ || fatal_ "failed to fetch auxiliary script trivial-test-driver"
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TEST_LOG_DRIVER = $(SHELL) $(srcdir)/trivial-test-driver
+TESTS = a.test b.test c.test
+END
+
+cat > a.test << 'END'
+#! /bin/sh
+echo PASS: 1
+echo PASS: 2
+: > a.run
+END
+
+cat > b.test << 'END'
+#! /bin/sh
+echo SKIP: b0
+if test -f b.ok; then
+ echo XFAIL: b1
+else
+ echo FAIL: b2
+fi
+: > b.run
+END
+
+cat > c.test << 'END'
+#! /bin/sh
+if test -f c.err; then
+ echo ERROR: xxx
+elif test -f c.ok; then
+ echo PASS: ok
+else
+ echo XPASS: xp
+fi
+: > c.run
+END
+
+chmod a+x *.test
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+for vpath in : false; do
+ if $vpath; then
+ mkdir build
+ cd build
+ srcdir=..
+ else
+ srcdir=.
+ fi
+
+ $srcdir/configure
+
+ : Run the tests for the first time.
+ run_make -O -e FAIL check
+ # All the test scripts should have run.
+ test -f a.run
+ test -f b.run
+ test -f c.run
+ count_test_results total=5 pass=2 fail=1 xpass=1 xfail=0 skip=1 error=0
+
+ rm -f *.run
+
+ : An empty '$(TESTS)' or '$(TEST_LOGS)' means that no test should be run.
+ for var in TESTS TEST_LOGS; do
+ run_make -O "$var=" recheck
+ count_test_results total=0 pass=0 fail=0 xpass=0 xfail=0 skip=0 error=0
+ test ! -e a.run
+ test ! -e b.run
+ test ! -e c.run
+ done
+ unset var
+
+ : a.test was successful the first time, no need to re-run it.
+ using_gmake || $sleep # Required by BSD make.
+ run_make -O TESTS=a.test recheck
+ count_test_results total=0 pass=0 fail=0 xpass=0 xfail=0 skip=0 error=0
+ test ! -e a.run
+ test ! -e b.run
+ test ! -e c.run
+
+ : b.test failed, it should be re-run. And make it pass this time.
+ using_gmake || $sleep # Required by BSD make.
+ echo OK > b.ok
+ run_make -O TEST_LOGS=b.log recheck
+ test ! -e a.run
+ test -f b.run
+ test ! -e c.run
+ count_test_results total=2 pass=0 fail=0 xpass=0 xfail=1 skip=1 error=0
+
+ rm -f *.run
+
+ : No need to re-run a.test or b.test anymore.
+ using_gmake || $sleep # Required by BSD make.
+ run_make -O TEST_LOGS=b.log recheck
+ count_test_results total=0 pass=0 fail=0 xpass=0 xfail=0 skip=0 error=0
+ test ! -e a.run
+ test ! -e b.run
+ test ! -e c.run
+ using_gmake || $sleep # Required by BSD make.
+ run_make -O TESTS='a.test b.test' recheck
+ count_test_results total=0 pass=0 fail=0 xpass=0 xfail=0 skip=0 error=0
+ test ! -e a.run
+ test ! -e b.run
+ test ! -e c.run
+
+ : No need to re-run a.test anymore, but c.test should be rerun,
+ : as it contained an XPASS. And this time, make it fail with
+ : an hard error.
+ echo dummy > c.err
+ run_make -e FAIL -O TEST_LOGS='a.log c.log' recheck
+ count_test_results total=1 pass=0 fail=0 xpass=0 xfail=0 skip=0 error=1
+ test ! -e a.run
+ test ! -e b.run
+ test -f c.run
+
+ rm -f *.run *.err
+
+ : c.test contained and hard error the last time, so it should be re-run.
+ : This time, make it pass
+ # Use 'echo', not ':'; see comments above for why.
+ using_gmake || $sleep # Required by BSD make.
+ echo dummy > c.ok
+ run_make -O TESTS='c.test a.test' recheck
+ count_test_results total=1 pass=1 fail=0 xpass=0 xfail=0 skip=0 error=0
+ test ! -e a.run
+ test ! -e b.run
+ test -f c.run
+
+ rm -f *.run *.err *.ok
+
+ : Nothing should be rerun anymore, as all tests have been eventually
+ : successful.
+ using_gmake || $sleep # Required by BSD make.
+ run_make -O recheck
+ count_test_results total=0 pass=0 fail=0 xpass=0 xfail=0 skip=0 error=0
+ test ! -e a.run
+ test ! -e b.run
+ test ! -e c.run
+
+ cd $srcdir
+
+done
+
+:
diff --git a/t/test-driver-custom-multitest.sh b/t/test-driver-custom-multitest.sh
new file mode 100644
index 000000000..1d8353314
--- /dev/null
+++ b/t/test-driver-custom-multitest.sh
@@ -0,0 +1,168 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Custom test drivers: check that we can easily support test protocols
+# that allow multiple testcases in a single test script. This test not
+# only checks implementation details in Automake's custom test drivers
+# support, but also serves as a "usability test" for our APIs.
+
+. test-init.sh
+
+cp "$am_testaux_srcdir"/trivial-test-driver . \
+ || fatal_ "failed to fetch auxiliary script trivial-test-driver"
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TEST_EXTENSIONS = .t
+T_LOG_DRIVER = $(SHELL) $(srcdir)/trivial-test-driver
+
+TESTS = \
+ pass.t \
+ fail.t \
+ fail2.t \
+ pass-fail.t \
+ pass4-skip.t \
+ pass3-skip2-xfail.t \
+ pass-xpass-fail-xfail-skip-error.t
+END
+
+cat > pass.t << 'END'
+echo %% pass %%
+echo PASS: pass
+END
+
+cat > fail.t << 'END'
+echo %% fail %%
+echo FAIL: fail
+END
+
+cat > fail2.t << 'END'
+echo %% fail2 %%
+echo FAIL: stdout >&1
+echo FAIL: stderr >&2
+echo :PASS: this should be ignored
+END
+
+cat > pass-fail.t << 'END'
+echo %% pass-fail %%
+echo 'FAIL: this fails :-('
+echo 'some randome message'
+echo 'some randome warning' >&2
+echo 'PASS: this passes :-)'
+echo 'INFO: blah'
+echo 'WARNING: blah blah' >&2
+END
+
+cat > pass4-skip.t << 'END'
+echo %% pass4-skip %%
+echo PASS: on stdout >&1
+echo PASS: on stderr >&2
+echo PASS: 3
+echo PASS: 4
+echo SKIP: 1
+echo this FAIL: should be ignored
+echo FAIL as should this
+exit 99
+END
+
+cat > pass3-skip2-xfail.t << 'END'
+echo %% pass4-skip2-xfail %%
+echo 'PASS: -v'
+echo 'PASS: --verbose'
+echo 'SKIP: Oops, unsupported system.'
+echo 'PASS: -#-#-#-'
+cp || echo "SKIP: cp cannot read users' mind" >&2
+mv || echo "XFAIL: mv cannot read users' mind yet"
+exit 127
+END
+
+cat > pass-xpass-fail-xfail-skip-error.t << 'END'
+echo PASS:
+echo FAIL:
+echo XFAIL:
+echo XPASS:
+echo SKIP:
+echo ERROR:
+echo %% pass-xpass-fail-xfail-skip-error %%
+END
+
+chmod a+x *.t
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+for vpath in : false; do
+ if $vpath; then
+ mkdir build
+ cd build
+ srcdir=..
+ else
+ srcdir=.
+ fi
+
+ $srcdir/configure
+
+ run_make -O -e FAIL check || { cat test-suite.log; exit 1; }
+ cat test-suite.log
+ # Couple of sanity checks. These might need to be updated if the
+ # 'trivial-test-driver' script is changed.
+ $FGREP INVALID.NAME stdout test-suite.log && exit 1
+ test -f BAD.LOG && exit 1
+ test -f BAD.TRS && exit 1
+ # These log files must all have been created by the testsuite.
+ cat pass.log
+ cat fail.log
+ cat fail2.log
+ cat pass-fail.log
+ cat pass4-skip.log
+ cat pass3-skip2-xfail.log
+ cat pass-xpass-fail-xfail-skip-error.log
+
+ count_test_results total=23 pass=10 fail=5 skip=4 xfail=2 xpass=1 error=1
+
+ tst=pass-xpass-fail-xfail-skip-error
+ grep "^PASS: $tst\.t, testcase 1" stdout
+ grep "^FAIL: $tst\.t, testcase 2" stdout
+ grep "^XFAIL: $tst\.t, testcase 3" stdout
+ grep "^XPASS: $tst\.t, testcase 4" stdout
+ grep "^SKIP: $tst\.t, testcase 5" stdout
+ grep "^ERROR: $tst\.t, testcase 6" stdout
+
+ # Check that the content of, and only of, the test logs with at least
+ # one failing test case has been copied into 'test-suite.log'. Note
+ # that test logs containing skipped or xfailed test cases are *not*
+ # copied into 'test-suite.log' -- a behaviour that deliberately differs
+ # from the one of the built-in Automake test drivers.
+ grep '%%' test-suite.log # For debugging.
+ grep '%% fail %%' test-suite.log
+ grep '%% fail2 %%' test-suite.log
+ grep '%% pass-fail %%' test-suite.log
+ grep '%% pass-xpass-fail-xfail-skip-error %%' test-suite.log
+ test $(grep -c '%% ' test-suite.log) -eq 4
+
+ run_make -O TESTS='pass.t pass3-skip2-xfail.t' check
+ cat test-suite.log
+ count_test_results total=7 pass=4 fail=0 skip=2 xfail=1 xpass=0 error=0
+
+ cd $srcdir
+
+done
+
+:
diff --git a/t/test-driver-custom-no-extra-driver.sh b/t/test-driver-custom-no-extra-driver.sh
new file mode 100644
index 000000000..e67cdca77
--- /dev/null
+++ b/t/test-driver-custom-no-extra-driver.sh
@@ -0,0 +1,63 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that auxiliary script 'test-driver' doesn't get needlessly
+# installed or referenced if it's not used, i.e., if the user has
+# defined his own '*LOG_DRIVER' variables.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_PROG_CC
+AC_CONFIG_FILES([sub1/Makefile sub2/Makefile])
+AC_SUBST([X_LOG_DRIVER], [none])
+AC_OUTPUT
+END
+
+mkdir sub1 sub2
+
+cat > Makefile.am <<'END'
+SUBDIRS = sub1 sub2
+LOG_DRIVER =
+TEST_LOG_DRIVER = :
+TESTS = foo bar.test
+END
+
+cat > sub1/Makefile.am <<'END'
+TEST_EXTENSIONS = .x .sh .pl
+SH_LOG_DRIVER = dummy1
+PL_LOG_DRIVER = dummy2
+TESTS = a.pl b.sh c.x
+END
+
+cat > sub2/Makefile.am <<'END'
+TEST_EXTENSIONS = .bar
+LOG_DRIVER = x
+BAR_LOG_DRIVER = y
+TESTS = 1 2.bar 3.test 4.t 5.tt $(check_PROGRAMS)
+check_PROGRAMS = p1 p2$(EXEEXT) p3.bar p4.suf
+END
+
+$ACLOCAL
+
+for opts in '' '--add-missing' '-a -c'; do
+ $AUTOMAKE $opts
+ $FGREP test-driver Makefile.in sub[12]/Makefile.in && exit 1
+ find . | $FGREP test-driver && exit 1
+ : For shells with busted 'set -e'.
+done
+
+:
diff --git a/t/test-driver-custom-xfail-tests.sh b/t/test-driver-custom-xfail-tests.sh
new file mode 100644
index 000000000..8feb879c5
--- /dev/null
+++ b/t/test-driver-custom-xfail-tests.sh
@@ -0,0 +1,163 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Custom test drivers: "abstract" XFAIL_TESTS support.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_SUBST([nihil], [])
+AC_SUBST([ac_xfail_tests], ['x5.test x6$(test_suffix)'])
+AC_CONFIG_FILES([sub1/Makefile sub2/Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+SUBDIRS = . sub1 sub2
+TEST_LOG_DRIVER = $(srcdir)/td
+TESTS = pass.test xfail.test
+XFAIL_TESTS = xfail.test
+END
+
+mkdir sub1 sub2
+
+cat > sub1/Makefile.am <<END
+empty =
+
+TEST_LOG_DRIVER = \$(top_srcdir)/td
+
+# XFAIL_TESTS should gracefully handle TAB characters, and multiple
+# whitespaces.
+XFAIL_TESTS =\$(empty)${tab}x1.test x2.test${tab}x3.test${tab}\
+x4.test ${tab} x5.test x6.test${tab}\$(empty)
+
+TESTS = pass.test x1.test x2.test x3.test x4.test x5.test x6.test
+END
+
+cat > sub2/Makefile.am <<'END'
+AUTOMAKE_OPTIONS = -Wno-portability-recursive
+
+TEST_LOG_DRIVER = $(srcdir)/../td
+
+# XFAIL_TESTS should gracefully AC_SUBST @substitution@ and
+# make variables indirections.
+an_xfail_test = x1.test
+test_suffix = .test
+v0 = x3.test
+v1 = v
+v2 = 0
+XFAIL_TESTS = $(an_xfail_test) x2.test @nihil@ x3${test_suffix}
+XFAIL_TESTS += $($(v1)$(v2)) x4.test @ac_xfail_tests@
+
+TESTS = pass.test x1.test x2.test x3.test x4.test x5.test x6.test
+END
+
+cat > pass.test <<'END'
+#!/bin/sh
+exit 0
+END
+
+cat > xfail.test <<'END'
+#!/bin/sh
+exit 1
+END
+
+chmod a+x pass.test xfail.test
+
+cp pass.test sub1/pass.test
+cp pass.test sub2/pass.test
+
+for i in 1 2 3 4 5 6; do
+ cp xfail.test sub1/x$i.test
+ cp xfail.test sub2/x$i.test
+done
+
+cat > td <<'END'
+#! /bin/sh
+set -e; set -u
+test_name=INVALID
+log_file=/dev/null
+trs_file=/dev/null
+expect_failure=no
+while test $# -gt 0; do
+ case $1 in
+ --test-name) test_name=$2; shift;;
+ --expect-failure) expect_failure=$2; shift;;
+ --log-file) log_file=$2; shift;;
+ --trs-file) trs_file=$2; shift;;
+ # Ignored.
+ --color-tests) shift;;
+ --enable-hard-errors) shift;;
+ # Explicitly terminate option list.
+ --) shift; break;;
+ # Shouldn't happen
+ *) echo "$0: invalid option/argument: '$1'" >&2; exit 2;;
+ esac
+ shift
+done
+st=0
+"$@" || st=$?
+case $st,$expect_failure in
+ 0,no)
+ echo "PASS: $test_name" | tee "$log_file"
+ echo ":test-result: PASS" > "$trs_file"
+ ;;
+ 1,no)
+ echo "FAIL: $test_name" | tee "$log_file"
+ echo ":test-result: FAIL" > "$trs_file"
+ ;;
+ 0,yes)
+ echo "XPASS: $test_name" | tee "$log_file"
+ echo ":test-result: XPASS" > "$trs_file"
+ ;;
+ 1,yes)
+ echo "XFAIL: $test_name" | tee "$log_file"
+ echo ":test-result: XFAIL" > "$trs_file"
+ ;;
+ *)
+ echo "INTERNAL ERROR" >&2
+ exit 99
+ ;;
+esac
+END
+chmod a+x td
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+
+run_make -O check
+test $(grep -c '^PASS:' stdout) -eq 3
+test $(grep -c '^XFAIL:' stdout) -eq 13
+
+for dir in sub1 sub2; do
+ cd $dir
+ cp pass.test x1.test
+ cp x2.test pass.test
+ run_make -O -e FAIL check
+ test "$(cat pass.trs)" = ":test-result: FAIL"
+ test "$(cat x1.trs)" = ":test-result: XPASS"
+ test "$(cat x2.trs)" = ":test-result: XFAIL"
+ grep '^FAIL: pass\.test$' stdout
+ grep '^XPASS: x1\.test$' stdout
+ grep '^XFAIL: x2\.test$' stdout
+ count_test_results total=7 pass=0 xpass=1 fail=1 xfail=5 skip=0 error=0
+ cd ..
+done
+
+:
diff --git a/t/test-driver-custom.sh b/t/test-driver-custom.sh
new file mode 100644
index 000000000..1978139f4
--- /dev/null
+++ b/t/test-driver-custom.sh
@@ -0,0 +1,143 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Custom test drivers: per-extension test drivers.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+# Automake shouldn't match the '/test' in 'sub/test' as '.test' suffix.
+TESTS = 1.chk 2.test 3 4.c.chk 5.suf sub/test
+
+TEST_EXTENSIONS = .chk .test
+
+CHK_LOG_DRIVER = ./chk-wrapper
+TEST_LOG_DRIVER = $(SHELL) $(srcdir)/test-wrapper
+LOG_DRIVER = noext-wrapper
+
+AM_CHK_LOG_DRIVER_FLAGS = --am-chk
+CHK_LOG_DRIVER_FLAGS = --chk
+AM_TEST_LOG_DRIVER_FLAGS = -am-test
+TEST_LOG_DRIVER_FLAGS = -test
+AM_LOG_DRIVER_FLAGS = am
+LOG_DRIVER_FLAGS = _
+END
+
+mkdir sub bin
+PATH=$(pwd)/bin$PATH_SEPARATOR$PATH; export PATH
+
+cat > wrapper.skel <<'END'
+#! /bin/sh
+set -e
+
+me=`echo "$0" | sed 's,^.*/,,'`
+if test -z "$me"; then
+ echo "$0: cannot determine program name" >&2
+ exit 99
+fi
+
+am_log_wflags='@am_log_wflags@'
+log_wflags='@log_wflags@'
+
+test_name=INVALID
+log_file=BAD.log
+trs_file=BAD.trs
+extra_opts=
+while test $# -gt 0; do
+ case $1 in
+ --test-name) test_name=$2; shift;;
+ --log-file) log_file=$2; shift;;
+ --trs-file) trs_file=$2; shift;;
+ # Ignored.
+ --expect-failure) shift;;
+ --color-tests) shift;;
+ --enable-hard-errors) shift;;
+ # Remembered in the same order they're passed in.
+ $am_log_wflags|$log_wflags) extra_opts="$extra_opts $1";;
+ # Explicitly terminate option list.
+ --) shift; break;;
+ # Shouldn't happen
+ *) echo "$0: invalid option/argument: '$1'" >&2; exit 2;;
+ esac
+ shift
+done
+
+echo "$me" "$test_name" $extra_opts > "$log_file"
+: > "$trs_file"
+
+exec "$@"
+exit 127
+END
+
+sed -e 's|@am_log_wflags@|--am-chk|' \
+ -e 's|@log_wflags@|--chk|' \
+ < wrapper.skel > chk-wrapper
+
+sed -e 's|@am_log_wflags@|-am-test|' \
+ -e 's|@log_wflags@|-test|' \
+ < wrapper.skel > test-wrapper
+
+sed -e 's|@am_log_wflags@|am|' \
+ -e 's|@log_wflags@|_|' \
+ < wrapper.skel > bin/noext-wrapper
+
+# 'test-wrapper' is deliberately not made executable.
+chmod a+x chk-wrapper bin/noext-wrapper
+
+# Not needed anymore.
+rm -f wrapper.skel
+
+cat > 1.chk << 'END'
+#! /bin/sh
+exit 0
+END
+chmod a+x 1.chk
+cp 1.chk 2.test
+cp 1.chk 3
+cp 1.chk 4.c.chk
+cp 1.chk 5.suf
+cp 1.chk sub/test
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+$MAKE
+VERBOSE=yes $MAKE check
+ls -l . sub
+
+test ! -e BAD.log
+test ! -e BAD.trs
+
+echo 'chk-wrapper 1.chk --am-chk --chk' > 1.exp
+echo 'test-wrapper 2.test -am-test -test' > 2.exp
+echo 'noext-wrapper 3 am _' > 3.exp
+echo 'chk-wrapper 4.c.chk --am-chk --chk' > 4.c.exp
+echo 'noext-wrapper 5.suf am _' > 5.suf.exp
+echo 'noext-wrapper sub/test am _' > sub/test.exp
+
+st=0
+for x in 1 2 3 4.c 5.suf sub/test; do
+ cat $x.log
+ diff $x.exp $x.log || st=1
+done
+
+exit $st
diff --git a/t/test-driver-fail.sh b/t/test-driver-fail.sh
new file mode 100644
index 000000000..bb4ba2ecc
--- /dev/null
+++ b/t/test-driver-fail.sh
@@ -0,0 +1,64 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Custom test drivers: what happens when a test driver fails? Well,
+# "make check" should at least fail too, and the test-suite.log
+# shouldn't be created. Unfortunately, we cannot truly control also
+# the (non-)creation of individual test logs, since those are expected
+# to be created by the drivers themselves, and an ill-behaved driver
+# (like our dummy one in this test) might leave around a test log even
+# in case of internal failures.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+TEST_LOG_DRIVER = ./oops
+TESTS = foo.test
+END
+
+cat > foo.test <<'END'
+#! /bin/sh
+exit 0
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+
+# The testsuite driver does not exist.
+$MAKE check && exit 1
+test ! -e test-suite.log
+
+# The testsuite driver exists and create the test log files, but fails.
+
+cat > oops <<'END'
+#!/bin/sh
+: > foo.log
+echo 'Oops, I fail!' >&2
+exit 1
+END
+chmod a+x oops
+
+$MAKE check && exit 1
+test ! -e test-suite.log
+
+:
diff --git a/t/test-driver-is-distributed.sh b/t/test-driver-is-distributed.sh
new file mode 100644
index 000000000..c78ac2538
--- /dev/null
+++ b/t/test-driver-is-distributed.sh
@@ -0,0 +1,83 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check regression of parallel-tests:
+# - 'test-driver' script not correctly distributed when TESTS is
+# defined in a subdir Makefile
+
+am_create_testdir=empty
+. test-init.sh
+
+ocwd=$(pwd) || fatal_ "getting current working directory"
+
+for i in 1 2; do
+ mkdir D$i
+ cd D$i
+ if test $i -eq 1; then
+ auxdir=.
+ test_driver=test-driver
+ else
+ auxdir=build-aux
+ test_driver=$auxdir/test-driver
+ mkdir $auxdir
+ fi
+ mkdir tests
+ unindent > configure.ac << END
+ AC_INIT([$me], [1.0])
+ AC_CONFIG_AUX_DIR([$auxdir])
+ AM_INIT_AUTOMAKE
+ AC_CONFIG_FILES([Makefile tests/Makefile])
+ AC_OUTPUT
+END
+ unindent > Makefile.am << END
+ SUBDIRS = tests
+ check-local: test-top
+ test-top: distdir
+ ls -l \$(distdir) \$(distdir)/* ;: For debugging.
+ test -f \$(distdir)/$test_driver
+ .PHONY: test-top
+END
+ unindent > tests/Makefile.am << END
+ check-local: test-sub
+ test-sub:
+ echo ' ' \$(DIST_COMMON) ' ' | grep '[ /]$test_driver '
+ TESTS = foo.test
+ EXTRA_DIST = \$(TESTS)
+END
+ unindent > tests/foo.test << 'END'
+ #!/bin/sh
+ exit 0
+END
+ chmod a+x tests/foo.test
+ $ACLOCAL
+ $AUTOCONF
+ $AUTOMAKE -a
+ ./configure
+ $MAKE test-top
+ cd tests
+ $MAKE test-sub
+ cd ..
+ $MAKE distcheck
+ # Try code path without automatic installation of required files.
+ mv -f Makefile.in Makefile.sav
+ mv -f tests/Makefile.in tests/Makefile.sav
+ $AUTOMAKE
+ diff Makefile.in Makefile.sav
+ diff tests/Makefile.in tests/Makefile.sav
+ cd "$ocwd" || fatal_ "cannot chdir back to '$ocwd'"
+done
+
+:
diff --git a/t/test-driver-strip-vpath.sh b/t/test-driver-strip-vpath.sh
new file mode 100644
index 000000000..ec3a5632c
--- /dev/null
+++ b/t/test-driver-strip-vpath.sh
@@ -0,0 +1,97 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Custom test drivers: check that the test name passed to the test
+# driver has any VPATH prefix stripped.
+
+. test-init.sh
+
+ocwd=$(pwd) || fatal_ "cannot get current working directory"
+
+mkdir src build
+mv install-sh missing configure.ac src
+rm -f depcomp
+
+cd src
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+# The directories of the 'bar.test' and 'baz.test' tests are deliberately
+# called as the source directory, to verify that the VPATH-stripping code
+# doesn't get too easily confused.
+# The $(empty) are for eliciting VPATH rewrites on make implementations
+# that support it (e.g., Solaris make), to improve coverage.
+empty =
+TESTS = $(empty) foo.test src/bar.test ./src/baz.test $(empty)
+$(TESTS):
+TEST_LOG_DRIVER = $(srcdir)/checkstrip-driver
+EXTRA_DIST = checkstrip-driver
+END
+
+cat > checkstrip-driver <<'END'
+#! /bin/sh
+set -e
+while test $# -gt 0; do
+ case $1 in
+ --log-file) log_file=$2; shift;;
+ --trs-file) trs_file=$2; shift;;
+ --test-name) test_name=$2; shift;;
+ --expect-failure|--color-tests|--enable-hard-errors) shift;;
+ --) shift; break;;
+ *) echo "$0: invalid option/argument: '$1'" >&2; exit 2;;
+ esac
+ shift
+done
+echo "test name: $test_name" # For debugging.
+case $test_name in
+ foo.test|./foo.test|src/ba[rz].test|./src/ba[rz].test);;
+ *) exit 1;;
+esac
+echo dummy > "$log_file"
+echo dummy > "$trs_file"
+END
+chmod a+x checkstrip-driver
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+cd ..
+
+mkdir build1
+cd build1
+../src/configure
+# "$MAKE -n" is for debugging, should highlight any VPATH rewrite.
+$MAKE -n check || :
+$MAKE check
+cd ..
+
+mkdir build2
+cd build2
+"$ocwd"/src/configure
+# "$MAKE -n" is for debugging, should highlight any VPATH rewrite.
+$MAKE -n check || :
+$MAKE check
+cd ..
+
+cd src
+./configure
+$MAKE distcheck
+
+:
diff --git a/t/test-driver-trs-suffix-registered.sh b/t/test-driver-trs-suffix-registered.sh
new file mode 100644
index 000000000..74c756b68
--- /dev/null
+++ b/t/test-driver-trs-suffix-registered.sh
@@ -0,0 +1,57 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# parallel-tests support: the following are registered with '.SUFFIXES':
+# - .log
+# - .trs (used by files that store test results and metadata)
+# - .test if $(TEST_EXTENSIONS) is not defined
+# - stuff in $(TEST_EXTENSIONS) otherwise
+
+. test-init.sh
+
+: > Makefile.am
+
+cat > 1.am << 'END'
+TESTS =
+END
+
+cat > 2.am << 'END'
+TEST_EXTENSIONS = .SH .abcdef
+TESTS =
+END
+
+: > test-driver
+
+$ACLOCAL
+
+$AUTOMAKE 1
+$AUTOMAKE 2
+
+sed -e 's/$/ /' 1.in > mk.1
+sed -e 's/$/ /' 2.in > mk.2
+
+grep '^\.SUFFIXES:' mk.1
+grep '^\.SUFFIXES:' mk.2
+
+for suf in test log trs; do
+ grep "^\\.SUFFIXES:.* \\.$suf " mk.1
+done
+
+for suf in SH abcdef log trs; do
+ grep "^\\.SUFFIXES:.* \\.$suf " mk.2
+done
+
+:
diff --git a/t/test-extensions-cond.sh b/t/test-extensions-cond.sh
new file mode 100644
index 000000000..a558b598e
--- /dev/null
+++ b/t/test-extensions-cond.sh
@@ -0,0 +1,69 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Expose bug in conditional definition of TEST_EXTENSIONS.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_CONDITIONAL([COND], [:])
+AM_CONDITIONAL([COND2], [:])
+END
+
+$ACLOCAL
+
+cat > 1.am << 'END'
+TESTS =
+if COND
+## lineno 4
+TEST_EXTENSIONS = .foo
+endif
+END
+
+cat > 2.am << 'END'
+TESTS =
+## lineno 3
+TEST_EXTENSIONS = .foo
+if COND
+# Do nothing.
+else
+TEST_EXTENSIONS += .bar
+endif
+END
+
+cat > 3.am << 'END'
+TESTS =
+if COND
+if !COND2
+TESTS = x
+else
+## lineno 7
+TEST_EXTENSIONS = .foo
+endif
+endif
+END
+
+: > test-driver
+
+for i in 1 2 3; do
+ AUTOMAKE_fails $i
+ lineno=$(sed -n 's/^## lineno //p' $i.am) \
+ && test 0 -lt "$lineno" \
+ || exit 99
+ grep "^$i\\.am:$lineno:.*TEST_EXTENSIONS.*conditional content" stderr
+done
+
+:
diff --git a/t/test-extensions.sh b/t/test-extensions.sh
new file mode 100644
index 000000000..64ea568b3
--- /dev/null
+++ b/t/test-extensions.sh
@@ -0,0 +1,71 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that Automake diagnose invalid entries in TEST_EXTENSIONS,
+# and do not diagnose valid (albeit more unusual) ones.
+# See automake bug#9400.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_OUTPUT
+END
+
+$ACLOCAL
+$AUTOCONF
+
+valid_extensions='sh T t1 _foo BAR x_Y_z _'
+
+echo TESTS = > Makefile.am
+echo " $valid_extensions" \
+ | sed -e 's/ / ./g' -e 's/^/TEST_EXTENSIONS =/' >> Makefile.am
+cat Makefile.am # For debugging.
+
+$AUTOMAKE -a
+
+grep -i 'log' Makefile.in # For debugging.
+
+for lc in $valid_extensions; do
+ uc=$(echo $lc | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ)
+ $FGREP "\$(${uc}_LOG_COMPILER)" Makefile.in
+ grep "^${uc}_LOG_COMPILE =" Makefile.in
+ grep "^\.${lc}\.log:" Makefile.in
+done
+
+# The produced Makefile is not broken.
+./configure
+$MAKE all check
+
+cat > Makefile.am << 'END'
+TESTS = foo.test bar.sh
+TEST_EXTENSIONS = .test mu .x-y a-b .t.1 .sh .6c .0 .11 .= @suf@ .@ext@
+TEST_EXTENSIONS += .= .t33 .a@b _&_
+END
+
+AUTOMAKE_fails
+for suf in mu .x-y a-b .t.1 .6c .0 .11 @suf@ .@ext@ '.=' '_&_'; do
+ suf2=$(printf '%s\n' "$suf" | sed -e 's/\./\\./')
+ $EGREP "^Makefile\.am:2:.*invalid test extension.* $suf2( |$)" stderr
+done
+
+# Verify that we accept valid suffixes, even if intermixed with
+# invalid ones.
+$EGREP '\.(sh|test|t33)' stderr && exit 1
+
+# Verify that we don't try to handle invalid suffixes.
+$EGREP '(LOG_COMPILER|non-POSIX var|bad character)' stderr && exit 1
+
+:
diff --git a/t/test-harness-vpath-rewrite.sh b/t/test-harness-vpath-rewrite.sh
new file mode 100644
index 000000000..643e6f925
--- /dev/null
+++ b/t/test-harness-vpath-rewrite.sh
@@ -0,0 +1,57 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that our concurrent test harness is not subject to spurious VPATH
+# rewrites.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+LOG_COMPILER = true
+TESTS = x0 foo bar baz x1
+EXTRA_DIST = $(TESTS)
+END
+
+: > x0
+: > foo
+: > bar
+: > baz
+: > x1
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+mkdir build
+cd build
+../configure
+$MAKE check
+test -f test-suite.log
+test -f foo.log
+test -f foo.trs
+test -f bar.log
+test -f bar.trs
+test -f baz.log
+test -f baz.trs
+# We don't want VPATH rewrites, really.
+$MAKE check -n | $EGREP '\.\./(foo|bar|baz)( |$)' && exit 1
+$MAKE distcheck
+
+:
diff --git a/t/test-log.sh b/t/test-log.sh
new file mode 100644
index 000000000..e450cabec
--- /dev/null
+++ b/t/test-log.sh
@@ -0,0 +1,176 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check parallel-tests features:
+# - log file creation
+# - log file removal
+# - stdout and stderr of a test script go in its log file
+# - TEST_SUITE_LOG redefinition, at either automake or make time
+# - VERBOSE environment variable support
+# Keep in sync with 'tap-log.sh'.
+
+. test-init.sh
+
+cat >> configure.ac <<END
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TESTS = pass.test skip.test xfail.test fail.test xpass.test error.test
+XFAIL_TESTS = xpass.test xfail.test
+TEST_SUITE_LOG = global.log
+END
+
+# Custom markers, for use in grepping checks.
+cmarker=::: # comment marker
+pmarker=%%% # plain maker
+
+cat > pass.test <<END
+#! /bin/sh
+echo "$pmarker pass $pmarker" >&2
+echo "# $cmarker pass $cmarker" >&2
+exit 0
+END
+
+cat > skip.test <<END
+#! /bin/sh
+echo "$pmarker skip $pmarker"
+echo "# $cmarker skip $cmarker"
+exit 77
+END
+
+cat > xfail.test <<END
+#! /bin/sh
+echo "$pmarker xfail $pmarker" >&2
+echo "# $cmarker xfail $cmarker" >&2
+exit 1
+END
+
+cat > fail.test <<END
+#! /bin/sh
+echo "$pmarker fail $pmarker"
+echo "# $cmarker fail $cmarker"
+exit 1
+END
+
+cat > xpass.test <<END
+#! /bin/sh
+echo "$pmarker xpass $pmarker" >&2
+echo "# $cmarker xpass $cmarker" >&2
+exit 0
+END
+
+cat > error.test <<END
+#! /bin/sh
+echo "$pmarker error $pmarker"
+echo "# $cmarker error $cmarker"
+exit 99
+END
+
+chmod a+x *.test
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+run_make -e FAIL TEST_SUITE_LOG=my.log check
+ls -l # For debugging.
+test ! -e test-suite.log
+test ! -e global.log
+test -f my.log
+st=0
+for result in pass fail xfail xpass skip error; do
+ cat $result.log # For debugging.
+ $FGREP "$pmarker $result $pmarker" $result.log || st=1
+ $FGREP "$cmarker $result $cmarker" $result.log || st=1
+done
+test $st -eq 0 || exit 1
+cat my.log # For debugging.
+for result in xfail fail xpass skip error; do
+ cat $result.log # For debugging.
+ $FGREP "$pmarker $result $pmarker" my.log || st=1
+ $FGREP "$cmarker $result $cmarker" my.log || st=1
+done
+test $($FGREP -c "$pmarker" my.log) -eq 5
+test $($FGREP -c "$cmarker" my.log) -eq 5
+
+have_rst_section ()
+{
+ eqeq=$(echo "$1" | sed 's/./=/g')
+ # Assume $1 contains no RE metacharacters.
+ sed -n "/^$1$/,/^$eqeq$/p" $2 > got
+ (echo "$1" && echo "$eqeq") > exp
+ cat exp
+ cat got
+ diff exp got
+}
+
+# Passed test scripts shouldn't be mentioned in the global log.
+$EGREP ':.*[^x]pass' my.log && exit 1
+# But failing (expectedly or not) and skipped ones should.
+have_rst_section 'SKIP: skip' my.log
+have_rst_section 'FAIL: fail' my.log
+have_rst_section 'XFAIL: xfail' my.log
+have_rst_section 'XPASS: xpass' my.log
+have_rst_section 'ERROR: error' my.log
+
+touch error2.log test-suite.log global.log
+run_make TEST_SUITE_LOG=my.log mostlyclean
+ls -l # For debugging.
+test ! -e my.log
+test ! -e pass.log
+test ! -e fail.log
+test ! -e xfail.log
+test ! -e xpass.log
+test ! -e skip.log
+test ! -e error.log
+# "make mostlyclean" shouldn't remove unrelated log files.
+test -f error2.log
+test -f test-suite.log
+test -f global.log
+
+rm -f *.log
+
+run_make -O -e FAIL check VERBOSE=yes
+cat global.log
+test ! -e my.log
+test ! -e test-suite.log
+# Check that VERBOSE causes the global testsuite log to be
+# emitted on stdout.
+out=$(cat stdout)
+log=$(cat global.log)
+case $out in *"$log"*) ;; *) exit 1;; esac
+
+touch error2.log test-suite.log my.log
+$MAKE clean
+ls -l # For debugging.
+test ! -e global.log
+test ! -e pass.log
+test ! -e fail.log
+test ! -e xfail.log
+test ! -e xpass.log
+test ! -e skip.log
+test ! -e error.log
+# "make clean" shouldn't remove unrelated log files.
+test -f error2.log
+test -f test-suite.log
+test -f my.log
+
+rm -f *.log
+
+:
diff --git a/t/test-logs-repeated.sh b/t/test-logs-repeated.sh
new file mode 100644
index 000000000..efd587a12
--- /dev/null
+++ b/t/test-logs-repeated.sh
@@ -0,0 +1,44 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check parallel-tests features:
+# - $(TESTS_LOGS) can end up holding duplicated entries
+# Such behaviour can be useful for projects that want to verify that
+# different test scripts don't end up sharing the same log file.
+# (Automake itself is such a project, BTW ;-)
+
+. test-init.sh
+
+cat >> configure.ac <<END
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TEST_EXTENSIONS = .sh .test .bar
+TESTS = foo.sh mu.test foo.test foo.bar
+.PHONY: verify
+verify:
+ is $(TEST_LOGS) == foo.log mu.log foo.log foo.log
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+$MAKE verify
+
+:
diff --git a/t/test-metadata-global-log.sh b/t/test-metadata-global-log.sh
new file mode 100644
index 000000000..03459b11b
--- /dev/null
+++ b/t/test-metadata-global-log.sh
@@ -0,0 +1,146 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Custom test drivers and parallel test harness: check the documented
+# semantics for deciding when the content of a test log file should be
+# copied in the global test-suite.log file. Currently, this is done
+# with the use of the reStructuredText field ':copy-in-global-log:' in
+# the associated '.trs' files.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TEST_LOG_DRIVER = ./passthrough-driver
+TEST_LOG_COMPILER = $(SHELL) -e
+END
+
+cat > passthrough-driver <<'END'
+#!/bin/sh
+set -e; set -u;
+while test $# -gt 0; do
+ case $1 in
+ --log-file) log_file=$2; shift;;
+ --trs-file) trs_file=$2; shift;;
+ --test-name) test_name=$2; shift;;
+ --expect-failure|--color-tests|--enable-hard-errors) shift;;
+ --) shift; break;;
+ *) echo "$0: invalid option/argument: '$1'" >&2; exit 2;;
+ esac
+ shift
+done
+echo "$test_name: RUN"
+"$@" >$log_file 2>&1 5>$trs_file
+END
+chmod a+x passthrough-driver
+
+# The ':test-result:' and ':recheck:' fields and the first line of the
+# log file should be be irrelevant for the decision of whether a test
+# output is to be copied in the 'test-suite.log'.
+
+cat > no-1.test <<END
+echo :test-result: SKIP >&5
+echo :copy-in-global-log: no >&5
+echo :test-result: FAIL >&5
+echo :test-result: XPASS >&5
+echo not seen 1
+END
+
+# In the last line, with leading and trailing whitespace in the value.
+cat > no-2.test <<END
+echo ":test-result: FAIL" >&5
+echo "not seen 2"
+echo ":recheck: yes" >&5
+echo ":copy-in-global-log:$tab $tab no $tab" >&5
+END
+
+for RES in XPASS FAIL XFAIL SKIP ERROR UNKNOWN; do
+ unindent > $RES.test <<END
+ echo :test-result: $RES >&5
+ echo :copy-in-global-log: no >&5
+ echo not seen $RES
+END
+done
+
+# In the first line, with no whitespace.
+cat > no-3.test <<END
+echo :copy-in-global-log:no >&5
+echo ":test-result: FAIL" >&5
+echo "not seen 3"
+END
+
+# Leading whitespace before the field.
+cat > no-4.test <<END
+echo ":test-result: FAIL" >&5
+echo " $tab $tab$tab :copy-in-global-log: no" >&5
+echo "not seen 4"
+END
+
+cat > yes-1.test <<END
+echo :test-result: PASS >&5
+echo :copy-in-global-log: yes >&5
+echo seen yes 1
+END
+
+# A lacking ':copy-in-global-log:' implies that the content of
+# the log file should be copied.
+cat > yes-2.test <<END
+echo :test-result: PASS >&5
+echo seen yes 2
+END
+
+# Three corner cases.
+
+cat > corn-1.test <<END
+echo seen corn 1
+echo ':copy-in-global-log:' >&5
+END
+
+cat > corn-2.test <<END
+echo seen corn 2
+echo '$tab $tab$tab' >&5
+END
+
+cat > corn-3.test <<'END'
+echo seen corn 31
+echo ':copy-in-global-log:#@%!' >&5
+echo seen corn 32
+END
+
+echo TESTS = *.test >> Makefile.am
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+
+# We don't care about the exit status of "make check" here, that
+# should be checked in other tests.
+$MAKE check || :
+cat test-suite.log
+grep '^seen yes 1$' test-suite.log
+grep '^seen yes 2$' test-suite.log
+grep '^seen corn 1$' test-suite.log
+grep '^seen corn 2$' test-suite.log
+grep '^seen corn 31$' test-suite.log
+grep '^seen corn 32$' test-suite.log
+$FGREP 'not seen' test-suite.log && exit 1
+
+:
diff --git a/t/test-metadata-global-result.sh b/t/test-metadata-global-result.sh
new file mode 100644
index 000000000..83235c5d5
--- /dev/null
+++ b/t/test-metadata-global-result.sh
@@ -0,0 +1,195 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Parallel testsuite harness: check APIs for the registering the
+# "global test result" in '*.trs' files, as documented in the automake
+# manual.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TEST_EXTENSIONS = .test .x
+TEST_LOG_DRIVER = ./dummy-driver
+X_LOG_DRIVER = ./dummy-driver
+TESTS = foo.test zar-doz.test
+END
+
+cat > dummy-driver <<'END'
+#! /bin/sh
+set -e; set -u
+while test $# -gt 0; do
+ case $1 in
+ --log-file) log_file=$2; shift;;
+ --trs-file) trs_file=$2; shift;;
+ --test-name) test_name=$2; shift;;
+ --expect-failure|--color-tests|--enable-hard-errors) shift;;
+ --) shift; break;;
+ *) echo "$0: invalid option/argument: '$1'" >&2; exit 2;;
+ esac
+ shift
+done
+echo logloglog > $log_file
+cp $1 $trs_file
+END
+chmod a+x dummy-driver
+
+# Do this in a subroutine to avoid quoting problem in the backticked
+# command substitution below.
+get_escaped_line()
+{
+ sed -e 's,[$^/\\\.],\\&,g' -e 1q "$@"
+}
+
+have_result ()
+{
+ cat > exp; echo >> exp; echo logloglog >> exp
+ eline=$(get_escaped_line exp)
+ sed -n -e "/^$eline$/,/^logloglog$/p" test-suite.log > got
+ cat exp; cat got
+ diff exp got
+}
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+
+: Basic checks.
+
+echo :global-test-result: PASS > foo.test
+echo :global-test-result: ERROR > zar-doz.x
+
+$MAKE check
+cat test-suite.log
+
+have_result <<END
+PASS: foo
+=========
+END
+
+have_result <<END
+ERROR: zar-doz
+==============
+END
+
+: Try usage documented in the manual.
+
+echo :global-test-result: PASS/SKIP > foo.test
+echo :global-test-result: ALMOST PASSED > zar-doz.x
+
+$MAKE check
+cat test-suite.log
+
+have_result <<END
+PASS/SKIP: foo
+==============
+END
+
+have_result <<END
+ALMOST PASSED: zar-doz
+======================
+END
+
+: Fields ':test-result:' does not interfere with the global test result.
+
+cat > foo.test << 'END'
+:test-result: FAIL
+:global-test-result: PASS
+:test-result: ERROR
+END
+
+cat > zar-doz.x << 'END'
+:global-test-result: FAIL
+:test-result: SKIP
+:test-result: XFAIL
+END
+
+$MAKE check && exit 1
+cat test-suite.log
+
+have_result <<END
+PASS: foo
+=========
+END
+
+have_result <<END
+FAIL: zar-doz
+=============
+END
+
+: What happens when ':global-test-result:' is absent.
+
+cat > foo.test << 'END'
+:test-result: PASS
+:test-result: ERROR
+END
+: > zar-doz.x
+
+$MAKE check && exit 1
+cat test-suite.log
+
+have_result <<END
+RUN: foo
+========
+END
+
+have_result <<END
+RUN: zar-doz
+============
+END
+
+# Leading and trailing whitespace gets eaten/normalized.
+
+echo ":global-test-result:SKIP${tab} ${tab}${tab}" > foo.test
+echo ":global-test-result:${tab} ${tab}XFAIL ${tab} " > zar-doz.x
+
+$MAKE check
+cat test-suite.log
+
+have_result <<END
+SKIP: foo
+=========
+END
+
+have_result <<END
+XFAIL: zar-doz
+==============
+END
+
+# Whitespaces before and after ':global-test-result:' are handled OK.
+
+echo " $tab:global-test-result:PASS" > foo.test
+echo "${tab}${tab}:global-test-result:${tab} ${tab}SKIP" > zar-doz.x
+
+$MAKE check
+cat test-suite.log
+
+have_result <<END
+PASS: foo
+=========
+END
+
+have_result <<END
+SKIP: zar-doz
+=============
+END
+
+:
diff --git a/t/test-metadata-recheck.sh b/t/test-metadata-recheck.sh
new file mode 100644
index 000000000..491d56c8b
--- /dev/null
+++ b/t/test-metadata-recheck.sh
@@ -0,0 +1,164 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test the "make recheck" semantics for custom test drivers, as documented
+# in the Automake manual.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+LOG_DRIVER = ./dummy-driver
+TEST_EXTENSIONS =
+TESTS =
+END
+
+#
+# Tests to be re-run by "make recheck"
+#
+
+: > y-1
+echo "foo bar" > y-2
+echo ":recheck:" > y-3
+echo ":recheck:yes" > y-4
+echo ":recheck: who cares" > y-5
+echo ":recheck: $tab y" > y-6
+echo ":recheck: yeah!$tab$tab " > y-7
+cat > y-10 <<END
+:foo:
+:recheck: ???
+END
+cat > y-11 <<END
+:recheck: YES
+:foo:
+END
+cat > y-12 <<END
+foo
+:recheck:yes
+
+bar
+zardoz
+END
+
+echo " $tab $tab$tab :recheck: yes" > y-8
+
+# The :test-result: fields and the fist line of the log should be
+# irrelevant for the decision of whether "make recheck" should or
+# should not re-run a test.
+
+echo ":test-result: PASS" > y-100
+
+echo "PASS: y-101"
+
+cat > y-102 <<END
+PASS: y-102
+===========
+
+:test-result: PASS
+END
+
+#
+# Tests *not* to be re-run by "make recheck"
+#
+
+echo ":recheck:no" > n-1
+echo ":recheck: no " > n-2
+echo ":recheck: $tab no" > n-3
+echo ":recheck: no $tab$tab " > n-4
+cat > n-5 <<END
+:foo:
+:recheck:no
+END
+cat > n-6 <<END
+:recheck: no
+:foo:
+END
+cat > n-7 <<END
+foo
+:recheck: no$tab$tab
+
+bar
+zardoz
+END
+
+echo " $tab $tab$tab :recheck: no" > n-8
+
+# The :test-result: fields should be irrelevant for the decision of
+# whether "make recheck" should or should not re-run a test.
+cat > n-100 <<END
+:test-result: FAIL
+:test-result: XPASS
+:test-result: ERROR
+:test-result: UNKNOWN
+:recheck: no
+END
+
+rechecked=$(echo y-[0-9]*)
+
+for t in [yn]-[0-9]*; do echo $t; done \
+ | sed 's/.*/TESTS += &/' >> Makefile.am
+
+cat Makefile.am # For debugging.
+
+cat > dummy-driver <<'END'
+#!/bin/sh
+set -e; set -u
+while test $# -gt 0; do
+ case $1 in
+ --log-file) log_file=$2; shift;;
+ --trs-file) trs_file=$2; shift;;
+ --test-name) test_name=$2; shift;;
+ --expect-failure|--color-tests|--enable-hard-errors) shift;;
+ --) shift; break;;
+ *) echo "$0: invalid option/argument: '$1'" >&2; exit 2;;
+ esac
+ shift
+done
+: > $test_name.run
+: > $log_file
+cp $1 $trs_file
+END
+chmod a+x dummy-driver
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+
+# The ':test-result:' fields should be ignored by "make recheck",
+# but should cause the testsuite report to detect errors.
+$MAKE check && exit 1
+ls -l
+for t in $tests; do test -f $t.run; done
+rm -f *.run
+
+# But now the tests that actually get re-run have only ':test-result:'
+# fields indicating success, so "make recheck" must pass. Still, the
+# next "make recheck" call should still re-run the same set of tests.
+for iteration in 1 2; do
+ using_gmake || $sleep # Required by BSD make.
+ $MAKE recheck
+ ls -l
+ for t in $rechecked; do test -f $t.run; done
+ find . -name 'n-*.run' | grep . && exit 1
+ : For shells with busted 'set -e'.
+done
+
+:
diff --git a/t/test-metadata-results.sh b/t/test-metadata-results.sh
new file mode 100644
index 000000000..edfe5f5d8
--- /dev/null
+++ b/t/test-metadata-results.sh
@@ -0,0 +1,177 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Parallel testsuite harness: check APIs for the registering of test
+# results in '*.trs' files, as documented in the automake manual.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TEST_LOG_DRIVER = ./dummy-driver
+TESTS = foo.test bar.test
+END
+
+cat > dummy-driver <<'END'
+#! /bin/sh
+set -e; set -u
+while test $# -gt 0; do
+ case $1 in
+ --log-file) log_file=$2; shift;;
+ --trs-file) trs_file=$2; shift;;
+ --test-name) test_name=$2; shift;;
+ --expect-failure|--color-tests|--enable-hard-errors) shift;;
+ --) shift; break;;
+ *) echo "$0: invalid option/argument: '$1'" >&2; exit 2;;
+ esac
+ shift
+done
+: > $log_file
+cp $1 $trs_file
+END
+chmod a+x dummy-driver
+
+mk_check ()
+{
+ stat=0
+ case $1 in
+ -e) stat=$2; shift 2;;
+ esac
+ run_make -O -e $stat -- check
+ # Our dummy driver make no testsuite progress report.
+ grep ': .*\.test' stdout && exit 1
+ # Nor it writes to the log files.
+ test -s foo.log && exit 1
+ test -s bar.log && exit 1
+ : For 'set -e'.
+}
+
+# This must be different from the one defined in 'test/defs', as that
+# assumes that the driver does proper testsuite progress reporting.
+count_test_results ()
+{
+ total=ERR pass=ERR fail=ERR xpass=ERR xfail=ERR skip=ERR error=ERR
+ eval "$@"
+ st=0
+ grep "^# TOTAL: *$total$" stdout || rc=1
+ grep "^# PASS: *$pass$" stdout || rc=1
+ grep "^# XFAIL: *$xfail$" stdout || rc=1
+ grep "^# SKIP: *$skip$" stdout || rc=1
+ grep "^# FAIL: *$fail$" stdout || rc=1
+ grep "^# XPASS: *$xpass$" stdout || rc=1
+ grep "^# ERROR: *$error$" stdout || rc=1
+ test $st -eq 0 || exit 1
+}
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+
+# Basic checks. Also that that ':global-test-result:' fields and
+# "old-style" directives with format "RESULT: test-name" are now ignored.
+
+: > foo.test
+echo blah blah blah > bar.test
+mk_check
+count_test_results total=0 pass=0 fail=0 xpass=0 xfail=0 skip=0 error=0
+
+cat > foo.test <<END
+:test-global-result: PASS
+:test-result: FAIL
+END
+cat > bar.test <<END
+:test-result: SKIP
+:test-global-result: ERROR
+END
+mk_check -e FAIL
+count_test_results total=2 pass=0 fail=1 xpass=0 xfail=0 skip=1 error=0
+
+cat > foo.test <<END
+FAIL: foo.test
+:test-result: PASS
+:test-global-result: XPASS
+END
+echo ERROR: bar.test > bar.test
+mk_check
+count_test_results total=1 pass=1 fail=0 xpass=0 xfail=0 skip=0 error=0
+
+cat > foo.test <<END
+:test-global-result: SKIP
+:test-result: FAIL
+END
+cat > bar.test <<END
+:test-global-result: PASS
+END
+mk_check -e FAIL
+count_test_results total=1 pass=0 fail=1 xpass=0 xfail=0 skip=0 error=0
+
+cat > foo.test <<END
+:test-result: XFAIL
+:test-result: PASS
+:test-result: SKIP
+END
+cat > bar.test <<END
+:test-result: SKIP
+:test-result: PASS
+:test-result: SKIP
+:test-result: PASS
+:test-result: PASS
+END
+mk_check
+count_test_results total=8 pass=4 fail=0 xpass=0 xfail=1 skip=3 error=0
+
+# Check that all results expected to be supported are *really* supported.
+
+cat > foo.test <<END
+:test-result: PASS
+:test-result: SKIP
+:test-result: XFAIL
+:test-result: FAIL
+:test-result: XPASS
+:test-result: ERROR
+END
+: > bar.test
+mk_check -e FAIL
+count_test_results total=6 pass=1 fail=1 xpass=1 xfail=1 skip=1 error=1
+
+cp foo.test bar.test
+mk_check -e FAIL
+count_test_results total=12 pass=2 fail=2 xpass=2 xfail=2 skip=2 error=2
+
+# Check that we are liberal w.r.t. whitespace use.
+
+: > foo.test
+: > bar.test
+for RESULT in PASS FAIL XPASS XFAIL SKIP ERROR; do
+ sed -e 's/^ *//' -e 's/|//g' >> foo.test <<END
+ |:test-result:$RESULT|
+ |:test-result: $tab $RESULT|
+ |:test-result:$RESULT $tab|
+ |:test-result:$tab$tab $RESULT$tab $tab |
+END
+ echo " $tab $tab$tab :test-result: $RESULT" >> bar.test
+done
+cat foo.test # For debugging.
+cat bar.test # Likewise.
+mk_check -e FAIL
+count_test_results total=30 pass=5 fail=5 xpass=5 xfail=5 skip=5 error=5
+
+:
diff --git a/t/test-missing.sh b/t/test-missing.sh
new file mode 100644
index 000000000..c828e5b4a
--- /dev/null
+++ b/t/test-missing.sh
@@ -0,0 +1,65 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# parallel-tests:
+# - non-existent scripts listed in TESTS get diagnosed
+# See also related test 'test-missing2.sh'.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TESTS = ok.test zardoz.test
+TEST_LOG_COMPILER = true
+END
+
+: > ok.test
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+run_make -e FAIL -M check
+test -f ok.log
+grep '^PASS: ok\.test' output
+$FGREP 'zardoz.log' output
+test ! -e test-suite.log
+
+run_make -M -e FAIL TESTS='zardoz2.test' check
+$FGREP 'zardoz2.log' output
+test ! -e test-suite.log
+
+run_make -M -e FAIL TEST_LOGS='zardoz3.log' check
+$FGREP 'zardoz3.log' output
+test ! -e test-suite.log
+
+# The errors should persist even after 'test-suite.log'
+# has been created.
+
+: > zardoz.test
+$MAKE check
+rm -f zardoz.test
+
+run_make -M -e FAIL check
+$FGREP 'zardoz.log' output
+test ! -e test-suite.log
+
+:
diff --git a/t/test-missing2.sh b/t/test-missing2.sh
new file mode 100644
index 000000000..efaff8d47
--- /dev/null
+++ b/t/test-missing2.sh
@@ -0,0 +1,52 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# parallel-tests:
+# - non-existent scripts listed in TESTS get diagnosed, even when
+# all the $(TEST_LOGS) have a dummy dependency.
+# See also related test 'test-missing.sh'.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TESTS = foobar1.test foobar2.test
+$(TEST_LOGS):
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+$MAKE foobar1.log foobar2.log || exit 99
+test ! -e foobar1.log || exit 99
+test ! -e foobar1.trs || exit 99
+test ! -e foobar2.log || exit 99
+test ! -e foobar2.trs || exit 99
+
+run_make -e FAIL -M check
+grep 'test-suite\.log.*foobar1\.log' output
+grep 'test-suite\.log.*foobar1\.trs' output
+grep 'test-suite\.log.*foobar2\.log' output
+grep 'test-suite\.log.*foobar2\.trs' output
+test ! -e test-suite.log
+
+:
diff --git a/t/test-trs-basic.sh b/t/test-trs-basic.sh
new file mode 100644
index 000000000..e734580ea
--- /dev/null
+++ b/t/test-trs-basic.sh
@@ -0,0 +1,157 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check parallel harness features:
+# - creation and removal of '.trs' auxiliary files
+# - check some internals regarding the use of '.trs' files.
+
+. test-init.sh
+
+cat >> configure.ac <<END
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TEST_EXTENSIONS = .sh .test
+TESTS = foo.test bar.sh sub/zardoz.test
+TEST_LOG_COMPILER = $(SHELL)
+SH_LOG_COMPILER = $(SHELL)
+
+## Used to check some internal details. And yes, the quotes around
+## '$bases' are deliberate: they check for whitespace normalization.
+tb:
+ $(am__set_TESTS_bases); echo "$$bases" > $@
+END
+
+cat > foo.test << 'END'
+#! /bin/sh
+exit $FOO_STATUS
+END
+: > bar.sh
+mkdir sub
+: > sub/zardoz.test
+
+FOO_STATUS=0; export FOO_STATUS
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+
+#
+# Check some internal details first.
+#
+
+for vpath in : false; do
+
+ if $vpath; then
+ srcdir=..
+ mkdir build
+ cd build
+ else
+ srcdir=.
+ fi
+
+ $srcdir/configure
+
+ $MAKE tb
+ test x"$(cat tb)" = x"foo bar sub/zardoz"
+ rm -f tb
+ # Please don't change the order of the stuff in TESTS, below.
+ run_make TESTS='foo.test foo2.sh foo-log foolog.test a.log.b.sh 0.exe' tb
+ test x"$(cat tb)" = x"foo foo2 foo-log foolog a.log.b 0.exe"
+ rm -f tb
+
+ cd $srcdir
+
+done
+
+#
+# The 'test-suite.stamp' file and the '.trs' files get created by
+# "make check" and removed by "make clean" and "make mostlyclean".
+#
+
+: > unrelated.trs
+: > sub/foo.trs
+
+$MAKE check
+test -f foo.trs
+test -f bar.trs
+test -f sub/zardoz.trs
+$MAKE clean
+test ! -e foo.trs
+test ! -e bar.trs
+test ! -e sub/zardoz.trs
+# Unrelated '.trs' files shouldn't be removed.
+test -f unrelated.trs
+test -f sub/foo.trs
+
+# The files should be properly created in case of testsuite failure too.
+FOO_STATUS=1 $MAKE check && exit 1
+test -f foo.trs
+test -f bar.trs
+test -f sub/zardoz.trs
+$MAKE mostlyclean
+test ! -e foo.trs
+test ! -e bar.trs
+test ! -e sub/zardoz.trs
+# Unrelated '.trs' files shouldn't be removed.
+test -f unrelated.trs
+test -f sub/foo.trs
+
+#
+# Try with a subset of TESTS.
+#
+
+run_make TESTS=foo.test check
+test -f foo.trs
+test ! -e bar.trs
+test ! -e sub/zardoz.trs
+$MAKE clean
+test ! -e foo.trs
+run_make TESTS='foo.test bar.sh' check
+test -f foo.trs
+test -f bar.trs
+test ! -e sub/zardoz.trs
+# "make clean" shouldn't remove '.trs' files for tests not in $(TESTS).
+run_make TESTS=bar.sh clean
+test -f foo.trs
+test ! -e bar.trs
+
+$MAKE clean
+
+#
+# Try with a subset of TEST_LOGS.
+#
+
+run_make TEST_LOGS=sub/zardoz.log check
+test ! -e foo.trs
+test ! -e bar.trs
+test -f sub/zardoz.trs
+$MAKE clean
+test ! -e sub/zardoz.trs
+run_make TEST_LOGS='foo.log bar.log' check
+test -f foo.trs
+test -f bar.trs
+test ! -e sub/zardoz.trs
+# "make clean" shouldn't remove '.trs' files for tests whose log
+# is not in $(TEST_LOGS).
+run_make TEST_LOGS=foo.log clean
+test ! -e foo.trs
+test -f bar.trs
+test ! -e sub/zardoz.trs
+
+:
diff --git a/t/test-trs-recover.sh b/t/test-trs-recover.sh
new file mode 100644
index 000000000..17169f266
--- /dev/null
+++ b/t/test-trs-recover.sh
@@ -0,0 +1,161 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check parallel harness features:
+# - recovery from deleted '.trs' files, in various scenarios
+# This test is complex and tricky, but that's acceptable since we are
+# testing semantics that are potentially complex and tricky.
+
+. test-init.sh
+
+cat >> configure.ac <<END
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TESTS = foo.test bar.test baz.test
+TEST_LOG_COMPILER = $(SHELL)
+END
+
+echo 'exit $TEST_STATUS' > foo.test
+echo 'exit $TEST_STATUS' > bar.test
+: > baz.test
+
+TEST_STATUS=0; export TEST_STATUS
+
+# Slower and possible overkill in some situations, but also clearer
+# and safer.
+update_stamp () { $sleep && touch stamp && $sleep; }
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+: Create the required log files.
+$MAKE check
+
+: Recreate by hand.
+rm -f foo.trs bar.trs baz.trs
+$MAKE foo.trs
+test -f foo.trs
+test ! -e bar.trs
+test ! -e baz.trs
+
+: Recreate by hand, several at the same time.
+rm -f foo.trs bar.trs baz.trs
+$MAKE foo.trs bar.trs
+test -f foo.trs
+test -f bar.trs
+test ! -e baz.trs
+
+: Recreate by hand, with a failing test.
+rm -f foo.trs bar.trs
+run_make -O TEST_STATUS=1 bar.trs baz.trs
+test ! -e foo.trs
+test -f bar.trs
+test -f baz.trs
+grep '^FAIL: bar\.test' stdout
+$EGREP '^(baz|foo)\.test' stdout && exit 1
+
+: Recreate with a sweeping "make check", and ensure that also up-to-date
+: '.trs' files are remade.
+update_stamp
+rm -f foo.trs bar.trs
+$MAKE check
+test -f foo.trs
+test -f bar.trs
+is_newest baz.trs stamp
+
+: Recreate with a sweeping "make check" with failing tests. Again,
+: ensure that also up-to-date '.trs' files are remade -- this time we
+: grep the "make check" output verify that.
+rm -f foo.trs bar.trs
+run_make -O -e FAIL TEST_STATUS=1 check
+test -f foo.trs
+test -f bar.trs
+grep '^FAIL: foo\.test' stdout
+grep '^FAIL: bar\.test' stdout
+grep '^PASS: baz\.test' stdout
+
+: Recreate with a "make check" with redefined TESTS.
+rm -f foo.trs bar.trs baz.trs
+run_make TESTS=foo.test check
+test -f foo.trs
+test ! -e bar.trs
+test ! -e baz.trs
+
+: Recreate with a "make check" with redefined TEST_LOGS.
+rm -f foo.trs bar.trs baz.trs
+run_make TEST_LOGS=bar.log check
+test ! -e foo.trs
+test -f bar.trs
+test ! -e baz.trs
+
+: Interactions with "make recheck" are OK.
+rm -f foo.trs bar.trs baz.log baz.trs
+run_make -O recheck
+test -f foo.trs
+test -f bar.trs
+test ! -e baz.trs
+test ! -e baz.log
+grep '^PASS: foo\.test' stdout
+grep '^PASS: bar\.test' stdout
+grep 'baz\.test' stdout && exit 1
+count_test_results total=2 pass=2 fail=0 xpass=0 xfail=0 skip=0 error=0
+
+: Setup for the next check.
+$MAKE check
+test -f foo.trs
+test -f bar.trs
+test -f baz.trs
+
+: Recreate by remaking the global test log, and ensure that up-to-date
+: '.trs' files are *not* remade.
+update_stamp
+rm -f foo.trs bar.trs test-suite.log
+run_make -O test-suite.log
+grep '^PASS: foo\.test' stdout
+grep '^PASS: bar\.test' stdout
+grep 'baz\.test' stdout && exit 1
+stat *.trs *.log stamp || : # For debugging.
+# Check that make has updated what it needed to, but no more.
+test -f foo.trs
+test -f bar.trs
+is_newest stamp baz.trs
+is_newest test-suite.log foo.trs bar.trs
+
+: Setup for the next check.
+$MAKE check
+test -f foo.trs
+test -f bar.trs
+test -f baz.trs
+
+: Interactions with lazy test reruns are OK.
+rm -f foo.trs
+update_stamp
+touch bar.test
+run_make -O RECHECK_LOGS= check
+# Check that make has updated what it needed to, but no more.
+test -f foo.trs
+is_newest bar.trs bar.test
+is_newest stamp baz.trs
+grep '^PASS: foo\.test' stdout
+grep '^PASS: bar\.test' stdout
+grep 'baz\.test' stdout && exit 1
+
+:
diff --git a/t/test-trs-recover2.sh b/t/test-trs-recover2.sh
new file mode 100644
index 000000000..e72f314ca
--- /dev/null
+++ b/t/test-trs-recover2.sh
@@ -0,0 +1,118 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check parallel harness features:
+# - recovery from unreadable '.trs' files, in various scenarios
+
+. test-init.sh
+
+cat >> configure.ac <<END
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TESTS = foo.test bar.test
+TEST_LOG_COMPILER = true
+END
+
+: > foo.test
+: > bar.test
+
+TEST_STATUS=0; export TEST_STATUS
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+: > t
+chmod a-r t && test ! -r t || skip_ "you can still read unreadable files"
+rm -f t
+
+: Create the required log files.
+$MAKE check
+test -f foo.trs
+test -f bar.trs
+
+: Recreate with a sweeping "make check".
+chmod a-r bar.trs
+$MAKE check
+test -f foo.trs
+test -r foo.trs
+test -f bar.trs
+test -r bar.trs
+
+: Again, this time with one .trs file missing and the other
+: one unreadable.
+rm -f foo.trs
+chmod a-r bar.trs
+$MAKE check
+test -f foo.trs
+test -r foo.trs
+test -f bar.trs
+test -r bar.trs
+
+: Again, but using "make recheck" this time.
+rm -f foo.trs
+chmod a-r bar.trs
+run_make -O recheck
+test -f foo.trs
+test -r foo.trs
+test -f bar.trs
+test -r bar.trs
+grep '^PASS: foo\.test' stdout
+grep '^PASS: bar\.test' stdout
+
+: Recreate by remaking the global test log.
+chmod a-r foo.trs
+rm -f test-suite.log
+run_make -O test-suite.log
+test -f foo.trs
+test -r foo.trs
+grep '^PASS: foo\.test' stdout
+grep 'bar\.test' stdout && exit 1
+# Also test that have only run before should be counted in the final
+# testsuite summary.
+grep '^# TOTAL: *2$' stdout
+
+: Setup for the next check.
+: > baz.test
+sed 's/^TESTS =.*/& baz.test/' Makefile > t
+diff t Makefile && exit 99
+mv -f t Makefile
+$MAKE check
+test -f foo.trs
+test -f bar.trs
+test -f baz.trs
+
+: Interactions with lazy test reruns are OK.
+chmod a-r foo.trs
+$sleep
+touch stamp
+$sleep
+touch bar.test
+run_make -O RECHECK_LOGS= check
+test -r foo.trs
+is_newest bar.trs bar.test
+grep '^PASS: foo\.test' stdout
+grep '^PASS: bar\.test' stdout
+grep 'baz\.test' stdout && exit 1
+# Also test that have only run before should be counted in the final
+# testsuite summary.
+grep '^# TOTAL: *3$' stdout
+
+:
diff --git a/t/tests-environment-and-log-compiler.sh b/t/tests-environment-and-log-compiler.sh
new file mode 100644
index 000000000..596b6a14f
--- /dev/null
+++ b/t/tests-environment-and-log-compiler.sh
@@ -0,0 +1,74 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# parallel-tests: check that we can use variables and functions set
+# by TESTS_ENVIRONMENT and AM_TESTS_ENVIRONMENT in LOG_COMPILER and
+# LOG_FLAGS (for tests both with and without registered extensions).
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+unset v0 v1 v2 v3 v4
+
+cat > Makefile.am << 'END'
+TESTS_ENVIRONMENT = am__f3 () { echo 3; }; v0='$(srcdir)' v1=1; :;
+AM_TESTS_ENVIRONMENT = v2=2; v4=4 && am__f5 () { echo 5; }; :;
+
+LOG_COMPILER = $$v0/log-compiler $$v1
+AM_LOG_FLAGS = $$v2 `am__f3`
+LOG_FLAGS = $$v4 `am__f5`
+
+TEST_LOG_COMPILER = $$v0/test-log-compiler $$v2
+AM_TEST_LOG_FLAGS = `am__f5` $$v1
+TEST_LOG_FLAGS = $$v4 `am__f3`
+
+EXTRA_DIST = log-compiler test-log-compiler
+
+TESTS = a b.test
+$(TESTS):
+END
+
+cat > log-compiler << 'END'
+#! /bin/sh
+echo "$0: $*"
+test x"$1$2$3$4$5" = x"12345"
+END
+
+cat > test-log-compiler << 'END'
+#! /bin/sh
+echo "$0: $*"
+test x"$1$2$3$4$5" = x"25143"
+END
+
+chmod a+x test-log-compiler log-compiler
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+$MAKE -n check || : # For debugging.
+VERBOSE=yes $MAKE check
+cat a.log
+cat b.log
+
+VERBOSE=yes $MAKE distcheck
+
+:
diff --git a/t/tests-environment-backcompat.sh b/t/tests-environment-backcompat.sh
new file mode 100644
index 000000000..5ad3f1942
--- /dev/null
+++ b/t/tests-environment-backcompat.sh
@@ -0,0 +1,59 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# With old serial testsuite driver, TESTS_ENVIRONMENT can be used to
+# define the "test runner", i.e. the program that the test scripts must
+# be run by (with the parallel test harness one should use LOG_COMPILER
+# for this). The behaviour tested here is also documented in the manual.
+
+am_serial_tests=yes
+. test-init.sh
+
+cat >> configure.ac <<END
+AC_SUBST([PERL], ['$PERL'])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TESTS_ENVIRONMENT = $(PERL) -Mstrict -w
+TESTS = foo.pl bar.pl baz.pl
+XFAIL_TESTS = baz.pl
+EXTRA_DIST = $(TESTS)
+END
+
+echo 'exit (0);' > foo.pl
+echo 'exit (0);' > bar.pl
+
+cat > baz.pl << 'END'
+# With "use strict" enacted, this will cause an error, since the
+# variable '$x' is not declared with 'my' nor specified with an
+# explicit package name.
+$x = 0;
+exit ($x);
+END
+
+chmod a+x *.pl
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+$MAKE check
+$MAKE distcheck
+
+:
diff --git a/t/tests-environment-fd-redirect.sh b/t/tests-environment-fd-redirect.sh
new file mode 100644
index 000000000..8af35c789
--- /dev/null
+++ b/t/tests-environment-fd-redirect.sh
@@ -0,0 +1,92 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for a behaviour of 'TESTS_ENVIRONMENT' and 'AM_TESTS_ENVIRONMENT'
+# w.r.t. file descriptor redirections which, although undocumented,
+# is nonetheless required by Gnulib's 'tests/init.sh' and by coreutils'
+# testsuite.
+# The checked behaviour is that we can portably do file descriptor
+# redirections by placing them at the end of a {AM_,}TESTS_ENVIRONMENT
+# definition without a following semicolon. The need to support this
+# is detailedly motivated by coreutils bug#8846:
+# <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=8846>
+# and the following CC:ed thread on bug-autoconf list:
+# <https://lists.gnu.org/archive/html/bug-autoconf/2011-06/msg00002.html>
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+# Use both a shell script and a perl script as tests,
+# for better coverage.
+
+cat >foo.test <<'END'
+#! /bin/sh
+set -e
+echo " " $0: foofoofoo >&8
+echo " " $0: barbarbar >&9
+END
+
+echo "#! $PERL -w" > bar.test
+cat >>bar.test <<'END'
+use warnings FATAL => 'all';
+use strict;
+open(FD8, ">&=8") or die "$!";
+open(FD9, ">&=9") or die "$!";
+print FD8 " $0: 8888\n";
+print FD9 " $0: 9999\n";
+END
+
+chmod a+x foo.test bar.test
+
+$ACLOCAL
+$AUTOCONF
+
+# Korn Shells seem more vulnerable to the issue highlighted in coreutils
+# bug#8846 than other shells are. In particular, the default Korn Shell
+# on Debian GNU/Linux is affected by the issue. So let's try to run our
+# test with a system Korn Shell too, if that's available.
+bin_ksh=:
+case $SHELL in
+ ksh|*/ksh) ;;
+ *) for d in /bin /usr/bin; do
+ test -f $d/ksh && { bin_ksh=$d/ksh; break; }
+ done;;
+esac
+
+for sh in "$SHELL" "$bin_ksh"; do
+ test "$sh" = : && continue
+ for pfx in AM_ ''; do
+ unindent > Makefile.am <<END
+ TESTS = foo.test bar.test
+ ## No trailing semicolon here, *deliberately*.
+ ${pfx}TESTS_ENVIRONMENT = 8>&1 9>&8
+END
+ $AUTOMAKE -a
+ CONFIG_SHELL="$sh" $sh ./configure CONFIG_SHELL="$sh"
+ run_make -O VERBOSE=y check
+ grep '[ /]foo\.test: foofoofoo$' stdout
+ grep '[ /]foo\.test: barbarbar$' stdout
+ grep '[ /]bar\.test: 8888$' stdout
+ grep '[ /]bar\.test: 9999$' stdout
+ $EGREP '(foofoofoo|barbarbar|8888|9999)' foo.log && exit 1
+ : # For shells with buggy 'set -e'.
+ done
+done
+
+:
diff --git a/t/tests-environment.sh b/t/tests-environment.sh
new file mode 100644
index 000000000..74a061a3f
--- /dev/null
+++ b/t/tests-environment.sh
@@ -0,0 +1,46 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# "Simple Tests" testsuite driver: check TESTS_ENVIRONMENT support.
+
+am_serial_tests=yes
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TESTS = foo.test
+EXTRA_DIST = $(TESTS)
+END
+
+cat > foo.test << 'END'
+#! /bin/sh
+test x"$FOO" = x"ok"
+END
+chmod a+x foo.test
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+FOO=bad TESTS_ENVIRONMENT='FOO=ok' $MAKE check
+FOO=ok TESTS_ENVIRONMENT='FOO=bad' $MAKE check && exit 1
+
+:
diff --git a/t/testsuite-summary-color.sh b/t/testsuite-summary-color.sh
new file mode 100644
index 000000000..5ea69217e
--- /dev/null
+++ b/t/testsuite-summary-color.sh
@@ -0,0 +1,197 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check coloring of the testsuite summary.
+
+. test-lib.sh
+
+use_colors=yes; use_vpath=no
+. testsuite-summary-checks.sh
+
+./configure
+
+# ANSI colors.
+red=''
+grn=''
+lgn=''
+blu=''
+mgn=''
+brg='';
+std='';
+
+success_header="\
+${grn}${br}${std}
+${grn}Testsuite summary for GNU AutoFoo 7.1${std}
+${grn}${br}${std}"
+
+success_footer=${grn}${br}${std}
+
+failure_header="\
+${red}${br}${std}
+${red}Testsuite summary for GNU AutoFoo 7.1${std}
+${red}${br}${std}"
+
+failure_footer="\
+${red}${br}${std}
+${red}See ./test-suite.log${std}
+${red}Please report to bug-automake@gnu.org${std}
+${red}${br}${std}"
+
+do_check '' <<END
+$success_header
+# TOTAL: 0
+# PASS: 0
+# SKIP: 0
+# XFAIL: 0
+# FAIL: 0
+# XPASS: 0
+# ERROR: 0
+$success_footer
+END
+
+do_check pass.t <<END
+$success_header
+${brg}# TOTAL: 1${std}
+${grn}# PASS: 1${std}
+# SKIP: 0
+# XFAIL: 0
+# FAIL: 0
+# XPASS: 0
+# ERROR: 0
+$success_footer
+END
+
+do_check skip.t <<END
+$success_header
+${brg}# TOTAL: 1${std}
+# PASS: 0
+${blu}# SKIP: 1${std}
+# XFAIL: 0
+# FAIL: 0
+# XPASS: 0
+# ERROR: 0
+$success_footer
+END
+
+do_check xfail.t <<END
+$success_header
+${brg}# TOTAL: 1${std}
+# PASS: 0
+# SKIP: 0
+${lgn}# XFAIL: 1${std}
+# FAIL: 0
+# XPASS: 0
+# ERROR: 0
+$success_footer
+END
+
+do_check fail.t <<END
+$failure_header
+${brg}# TOTAL: 1${std}
+# PASS: 0
+# SKIP: 0
+# XFAIL: 0
+${red}# FAIL: 1${std}
+# XPASS: 0
+# ERROR: 0
+$failure_footer
+END
+
+do_check xpass.t <<END
+$failure_header
+${brg}# TOTAL: 1${std}
+# PASS: 0
+# SKIP: 0
+# XFAIL: 0
+# FAIL: 0
+${red}# XPASS: 1${std}
+# ERROR: 0
+$failure_footer
+END
+
+do_check error.t <<END
+$failure_header
+${brg}# TOTAL: 1${std}
+# PASS: 0
+# SKIP: 0
+# XFAIL: 0
+# FAIL: 0
+# XPASS: 0
+${mgn}# ERROR: 1${std}
+$failure_footer
+END
+
+do_check pass.t xfail.t skip.t <<END
+$success_header
+${brg}# TOTAL: 3${std}
+${grn}# PASS: 1${std}
+${blu}# SKIP: 1${std}
+${lgn}# XFAIL: 1${std}
+# FAIL: 0
+# XPASS: 0
+# ERROR: 0
+$success_footer
+END
+
+do_check pass.t fail.t skip.t <<END
+$failure_header
+${brg}# TOTAL: 3${std}
+${grn}# PASS: 1${std}
+${blu}# SKIP: 1${std}
+# XFAIL: 0
+${red}# FAIL: 1${std}
+# XPASS: 0
+# ERROR: 0
+$failure_footer
+END
+
+do_check pass.t xfail.t xpass.t <<END
+$failure_header
+${brg}# TOTAL: 3${std}
+${grn}# PASS: 1${std}
+# SKIP: 0
+${lgn}# XFAIL: 1${std}
+# FAIL: 0
+${red}# XPASS: 1${std}
+# ERROR: 0
+$failure_footer
+END
+
+do_check skip.t xfail.t error.t <<END
+$failure_header
+${brg}# TOTAL: 3${std}
+# PASS: 0
+${blu}# SKIP: 1${std}
+${lgn}# XFAIL: 1${std}
+# FAIL: 0
+# XPASS: 0
+${mgn}# ERROR: 1${std}
+$failure_footer
+END
+
+do_check pass.t skip.t xfail.t fail.t xpass.t error.t <<END
+$failure_header
+${brg}# TOTAL: 6${std}
+${grn}# PASS: 1${std}
+${blu}# SKIP: 1${std}
+${lgn}# XFAIL: 1${std}
+${red}# FAIL: 1${std}
+${red}# XPASS: 1${std}
+${mgn}# ERROR: 1${std}
+$failure_footer
+END
+
+:
diff --git a/t/testsuite-summary-count-many.sh b/t/testsuite-summary-count-many.sh
new file mode 100644
index 000000000..ed23a7a79
--- /dev/null
+++ b/t/testsuite-summary-count-many.sh
@@ -0,0 +1,102 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check test counts in the testsuite summary, with test drivers allowing
+# multiple test results per test script, and for a huge number of tests.
+# Incidentally, this test also checks that the testsuite summary doesn't
+# give any bug-report address if it's not defined.
+
+. test-init.sh
+
+for s in trivial-test-driver extract-testsuite-summary.pl; do
+ cp "$am_testaux_srcdir/$s" . || fatal_ "failed to fetch auxiliary script $s"
+done
+
+br='============================================================================'
+
+header="\
+${br}
+Testsuite summary for $me 1.0
+${br}"
+
+footer="\
+${br}
+See ./test-suite.log
+${br}"
+
+echo AC_OUTPUT >> configure.ac
+
+cat > Makefile.am << 'END'
+TEST_LOG_DRIVER = $(SHELL) $(srcdir)/trivial-test-driver
+TESTS = all.test
+# Without this, the test driver will be horrendously slow.
+END
+
+cat > all.test <<'END'
+#!/bin/sh
+cat results.txt || { echo ERROR: weird; exit 99; }
+END
+chmod a+x all.test
+
+$PERL -w -e '
+ use warnings FATAL => "all";
+ use strict;
+
+ my $base = 1000;
+ my %count = (
+ TOTAL => $base * 1000,
+ PASS => $base * 700,
+ SKIP => $base * 200,
+ XFAIL => $base * 80,
+ FAIL => $base * 10,
+ XPASS => $base * 7,
+ ERROR => $base * 3,
+ );
+ my @results = qw/PASS SKIP XFAIL FAIL XPASS ERROR/;
+
+ open (RES, ">results.txt") or die "opening results.txt: $!\n";
+ open (CNT, ">count.txt") or die "opening count.txt: $!\n";
+
+ printf CNT "# %-6s %d\n", "TOTAL:", $count{TOTAL};
+ for my $res (@results)
+ {
+ my $uc_res = uc $res;
+ print STDERR "Generating list of $res ...\n";
+ for (1..$count{$res})
+ {
+ print RES "$uc_res: $_\n";
+ }
+ printf CNT "# %-6s %d\n", $res . ":", $count{$res};
+ }
+'
+
+(echo "$header" && cat count.txt && echo "$footer") > summary.exp
+
+$ACLOCAL
+$AUTOMAKE -a
+$AUTOCONF
+
+./configure
+
+($MAKE check || touch make.fail) | tee stdout
+test -f make.fail
+
+$PERL extract-testsuite-summary.pl stdout > summary.got
+cat summary.exp
+cat summary.got
+diff summary.exp summary.got || exit 1
+
+:
diff --git a/t/testsuite-summary-count.sh b/t/testsuite-summary-count.sh
new file mode 100644
index 000000000..bd2454506
--- /dev/null
+++ b/t/testsuite-summary-count.sh
@@ -0,0 +1,159 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check test counts in the testsuite summary.
+
+. test-lib.sh
+
+use_colors=no; use_vpath=no
+. testsuite-summary-checks.sh
+
+./configure
+
+header="\
+${br}
+Testsuite summary for GNU AutoFoo 7.1
+${br}"
+
+success_footer=${br}
+
+failure_footer="\
+${br}
+See ./test-suite.log
+Please report to bug-automake@gnu.org
+${br}"
+
+# Corner cases.
+
+do_check '' <<END
+$header
+# TOTAL: 0
+# PASS: 0
+# SKIP: 0
+# XFAIL: 0
+# FAIL: 0
+# XPASS: 0
+# ERROR: 0
+$success_footer
+END
+
+do_check pass.t <<END
+$header
+# TOTAL: 1
+# PASS: 1
+# SKIP: 0
+# XFAIL: 0
+# FAIL: 0
+# XPASS: 0
+# ERROR: 0
+$success_footer
+END
+
+do_check fail.t <<END
+$header
+# TOTAL: 1
+# PASS: 0
+# SKIP: 0
+# XFAIL: 0
+# FAIL: 1
+# XPASS: 0
+# ERROR: 0
+$failure_footer
+END
+
+# Some simpler checks, with low or moderate number of tests.
+
+do_check skip.t skip2.t skip3.t xfail.t xfail2.t <<END
+$header
+# TOTAL: 5
+# PASS: 0
+# SKIP: 3
+# XFAIL: 2
+# FAIL: 0
+# XPASS: 0
+# ERROR: 0
+$success_footer
+END
+
+do_check pass.t pass2.t xfail.t xpass.t error.t error2.t <<END
+$header
+# TOTAL: 6
+# PASS: 2
+# SKIP: 0
+# XFAIL: 1
+# FAIL: 0
+# XPASS: 1
+# ERROR: 2
+$failure_footer
+END
+
+pass_count=22
+skip_count=19
+xfail_count=21
+fail_count=18
+xpass_count=23
+error_count=17
+tests_count=120
+
+ pass=$(seq_ 1 $pass_count | sed 's/.*/pass-&.t/')
+ skip=$(seq_ 1 $skip_count | sed 's/.*/skip-&.t/')
+xfail=$(seq_ 1 $xfail_count | sed 's/.*/xfail-&.t/')
+ fail=$(seq_ 1 $fail_count | sed 's/.*/fail-&.t/')
+xpass=$(seq_ 1 $xpass_count | sed 's/.*/xpass-&.t/')
+error=$(seq_ 1 $error_count | sed 's/.*/error-&.t/')
+
+do_check $pass $skip $xfail $fail $xpass $error <<END
+$header
+# TOTAL: $tests_count
+# PASS: $pass_count
+# SKIP: $skip_count
+# XFAIL: $xfail_count
+# FAIL: $fail_count
+# XPASS: $xpass_count
+# ERROR: $error_count
+$failure_footer
+END
+
+# Mild stress test with a lot of test scripts.
+
+tests_count=1888
+pass_count=1403
+skip_count=292
+xfail_count=41
+fail_count=126
+xpass_count=17
+error_count=9
+
+ pass=$(seq_ 1 $pass_count | sed 's/.*/pass-&.t/')
+ skip=$(seq_ 1 $skip_count | sed 's/.*/skip-&.t/')
+xfail=$(seq_ 1 $xfail_count | sed 's/.*/xfail-&.t/')
+ fail=$(seq_ 1 $fail_count | sed 's/.*/fail-&.t/')
+xpass=$(seq_ 1 $xpass_count | sed 's/.*/xpass-&.t/')
+error=$(seq_ 1 $error_count | sed 's/.*/error-&.t/')
+
+do_check $pass $skip $xfail $fail $xpass $error <<END
+$header
+# TOTAL: $tests_count
+# PASS: $pass_count
+# SKIP: $skip_count
+# XFAIL: $xfail_count
+# FAIL: $fail_count
+# XPASS: $xpass_count
+# ERROR: $error_count
+$failure_footer
+END
+
+:
diff --git a/t/testsuite-summary-reference-log.sh b/t/testsuite-summary-reference-log.sh
new file mode 100644
index 000000000..92ab4d007
--- /dev/null
+++ b/t/testsuite-summary-reference-log.sh
@@ -0,0 +1,82 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that the global testsuite log file referenced in the testsuite
+# summary and in the global testsuite log itself is correct.
+
+. test-init.sh
+
+mv configure.ac configure.stub
+
+cat > fail << 'END'
+#!/bin/sh
+exit 1
+END
+chmod a+x fail
+
+cat configure.stub - > configure.ac <<'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TEST_SUITE_LOG = my_test_suite.log
+TESTS = fail
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+mkdir build
+cd build
+
+../configure
+
+run_make -O -e FAIL check
+grep '^See \./my_test_suite\.log$' stdout
+
+mkdir bar
+run_make -O -e FAIL TEST_SUITE_LOG=bar/bar.log check
+grep '^See \./bar/bar\.log$' stdout
+
+cd ..
+
+echo SUBDIRS = sub > Makefile.am
+mkdir sub
+echo TESTS = fail > sub/Makefile.am
+mv fail sub
+
+cat configure.stub - > configure.ac <<'END'
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+END
+
+$ACLOCAL --force
+$AUTOCONF --force
+$AUTOMAKE
+
+./configure
+run_make -O -e FAIL check
+grep '^See sub/test-suite\.log$' stdout
+cd sub
+run_make -O -e FAIL check
+grep '^See sub/test-suite\.log$' stdout
+cd ..
+
+run_make -O -e FAIL TEST_SUITE_LOG=foo.log check
+grep '^See sub/foo\.log$' stdout
+
+:
diff --git a/t/transform.sh b/t/transform.sh
new file mode 100644
index 000000000..94cc2a13f
--- /dev/null
+++ b/t/transform.sh
@@ -0,0 +1,68 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that --program-transform works.
+
+required=cc
+. test-init.sh
+
+cat >>configure.ac <<'END'
+AC_PROG_CC
+AC_OUTPUT
+END
+
+cat >Makefile.am <<'EOF'
+bin_PROGRAMS = h
+bin_SCRIPTS = h.sh
+man_MANS = h.1
+
+.PHONY: test-install
+test-install: install
+ test -f inst/bin/gnu-h$(EXEEXT)
+ test -f inst/bin/gnu-h.sh
+ test -f inst/man/man1/gnu-h.1
+EOF
+
+cat >h.c <<'EOF'
+int main (void)
+{
+ return 0;
+}
+EOF
+
+: > h.sh
+: > h.1
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+cwd=$(pwd) || fatal_ "getting current working directory"
+
+./configure --program-prefix=gnu- --prefix "$cwd/inst" \
+ --mandir "$cwd/inst/man"
+$MAKE
+$MAKE test-install
+$MAKE uninstall
+test $(find inst -type f -print | wc -l) -eq 0
+
+# Opportunistically test for installdirs.
+rm -rf inst
+$MAKE installdirs
+test -d inst/bin
+test -d inst/man/man1
+
+:
diff --git a/t/transform2.sh b/t/transform2.sh
new file mode 100644
index 000000000..0e9730aeb
--- /dev/null
+++ b/t/transform2.sh
@@ -0,0 +1,99 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that --program-transform works even when multiple files are
+# collapsed.
+
+required=cc
+. test-init.sh
+
+cat >>configure.ac <<'END'
+AC_PROG_CC
+AC_OUTPUT
+END
+
+cat >Makefile.am <<'EOF'
+bin_PROGRAMS = p1 p2
+bin_SCRIPTS = s1.sh s2.sh
+man_MANS = m1.1 m2.1
+
+test-install: install
+ test -f inst/bin/p$(EXEEXT)
+ test -f inst/bin/s.sh
+ test -f inst/man/man1/m.1
+
+test-install-foo: install
+ test -f inst/bin/foo$(EXEEXT)
+ test -f inst/bin/foo
+ test -f inst/man/man1/foo.1
+ test ! -f inst/bin/p1$(EXEEXT)
+ test ! -f inst/bin/p2$(EXEEXT)
+ test ! -f inst/bin/s1.sh
+ test ! -f inst/bin/s2.sh
+ test ! -f inst/man/man/m1.1
+ test ! -f inst/man/man/m2.1
+EOF
+
+cat >p1.c <<'EOF'
+int
+main ()
+{
+ return 0;
+}
+EOF
+
+cp p1.c p2.c
+
+: > s1.sh
+: > s2.sh
+: > m1.1
+: > m2.1
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+cwd=$(pwd) || fatal_ "getting current working directory"
+
+./configure --program-transform-name='s/[12]//' --prefix "$cwd/inst" \
+ --mandir "$cwd/inst/man"
+$MAKE
+$MAKE test-install
+$MAKE uninstall
+test $(find inst -type f -print | wc -l) -eq 0
+
+# Also squash all file types in question.
+
+# On newer Cygwin versions, that won't work, likely due to overly
+# aggressive appending of '.exe' suffix when copying/renaming Windows
+# executables. So let's skip this part of the test if we detect the
+# faulty heuristic is present. See also:
+# <https://lists.gnu.org/archive/html/automake-patches/2010-08/msg00153.html>
+# <http://thread.gmane.org/gmane.os.cygwin/119380>
+echo Foo > foo
+echo Bar > bar.exe
+chmod a+x foo bar.exe
+cp foo bar && cmp foo bar \
+ || skip_ "your Cygwin is too aggressive in tweaking '.exe' suffixes"
+
+./configure --program-transform-name='s/.*/foo/' --prefix "$cwd/inst" \
+ --mandir "$cwd/inst/man"
+$MAKE
+$MAKE test-install-foo
+$MAKE uninstall
+test $(find inst -type f -print | wc -l) -eq 0
+
+:
diff --git a/t/transform3.sh b/t/transform3.sh
new file mode 100644
index 000000000..9d6e28ce3
--- /dev/null
+++ b/t/transform3.sh
@@ -0,0 +1,92 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that --program-transform does not transform too much
+# stuff (in particular, pgklibdir, pkgdatadir and pkglibexecdir).
+
+required=cc
+. test-init.sh
+
+cat > configure.ac <<'END'
+AC_INIT([foo], [1.0])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile])
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+bin_SCRIPTS = foo
+pkgdata_DATA = bar.txt
+pkglib_LIBRARIES = libzap.a
+pkglibexec_SCRIPTS = mu
+
+test-install: install
+ find $(prefix) ;: For debugging.
+ test -f $(bindir)/gnu-foo
+ test -x $(bindir)/gnu-foo
+ test -f $(datadir)/foo/bar.txt
+ test ! -d $(datadir)/gnu-foo
+ test -f $(libdir)/foo/libzap.a
+ test ! -d $(libdir)/gnu-foo
+ test -f $(libexecdir)/foo/gnu-mu
+ test -x $(libexecdir)/foo/gnu-mu
+ test ! -d $(libexecdir)/gnu-foo
+
+test-installdirs: installdirs
+ find $(prefix) ;: For debugging.
+ test -d $(datadir)/foo
+ test ! -d $(datadir)/gnu-foo
+ test -d $(libdir)/foo
+ test ! -d $(libdir)/gnu-foo
+ test -d $(libexecdir)/foo
+ test ! -d $(libexecdir)/gnu-foo
+END
+
+cat > libzap.c <<'END'
+int zap (void)
+{
+ return 0;
+}
+END
+
+echo 'To be or not to be ...' > bar.txt
+
+cat > foo <<'END'
+#!/bin/sh
+exit 0
+END
+cp foo mu
+chmod a+x foo mu
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure --program-prefix=gnu- --prefix "$(pwd)/inst"
+
+$MAKE test-install
+
+$MAKE uninstall
+test $(find inst -type f -print | wc -l) -eq 0
+
+# Opportunistically test for installdirs.
+rm -rf inst
+$MAKE test-installdirs
+
+:
diff --git a/t/txinfo-absolute-srcdir-pr408.sh b/t/txinfo-absolute-srcdir-pr408.sh
new file mode 100644
index 000000000..63c47eb41
--- /dev/null
+++ b/t/txinfo-absolute-srcdir-pr408.sh
@@ -0,0 +1,70 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure Texinfo installation works when absolute --srcdir is used.
+# PR/408
+
+required='makeinfo'
+. test-init.sh
+
+echo AC_OUTPUT >> configure.ac
+
+cat > Makefile.am << 'END'
+info_TEXINFOS = main.texi
+END
+
+
+cat > main.texi << 'END'
+\input texinfo
+@setfilename main.info
+@settitle main
+@node Top
+Hello walls.
+@include version.texi
+@bye
+END
+
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+$AUTOCONF
+
+./configure
+$MAKE
+$MAKE distclean
+
+abscwd=$(pwd) || fatal_ "getting current working directory"
+
+mkdir build
+cd build
+../configure --srcdir="$abscwd" \
+ --prefix="$abscwd/build/_inst" \
+ --infodir="$abscwd/build/_inst/info"
+
+$MAKE install
+
+test -f ../main.info
+test ! -e ./main.info
+test -f _inst/info/main.info
+
+$MAKE uninstall
+test ! -e _inst/info/main.info
+test -f ../main.info
+
+# Multiple uninstall should not fail.
+$MAKE uninstall
+
+:
diff --git a/t/txinfo-add-missing-and-dist.sh b/t/txinfo-add-missing-and-dist.sh
new file mode 100644
index 000000000..62c8dbd7b
--- /dev/null
+++ b/t/txinfo-add-missing-and-dist.sh
@@ -0,0 +1,62 @@
+#! /bin/sh
+# Copyright (C) 1999-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure texinfo.tex is correctly installed and disted by
+# -a when we're using AC_CONFIG_AUX_DIR. Bug report by by Per
+# Cederqvist.
+
+. test-init.sh
+
+cat > configure.ac << END
+AC_INIT([$me], [1.0])
+AC_CONFIG_AUX_DIR([auxdir])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+info_TEXINFOS = textutils.texi
+.PHONY: test1 test2
+test1:
+ @echo DISTFILES = $(DISTFILES)
+ echo ' ' $(DISTFILES) ' ' | grep '[ /]auxdir/texinfo\.tex '
+test2: distdir
+ ls -l $(distdir)/*
+ test -f $(distdir)/auxdir/texinfo.tex
+END
+
+echo '@setfilename textutils.info' > textutils.texi
+
+mkdir auxdir
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+test -f auxdir/texinfo.tex
+
+./configure
+
+# Create textutils.info by hand, so that we don't have to require
+# makeinfo. Also ensure it's really newer than textutils.texi, so
+# that make won't try to re-create it.
+$sleep
+: > textutils.info
+
+$MAKE test1 test2
+
+:
diff --git a/t/txinfo-bsd-make-recurs.sh b/t/txinfo-bsd-make-recurs.sh
new file mode 100644
index 000000000..81c161aca
--- /dev/null
+++ b/t/txinfo-bsd-make-recurs.sh
@@ -0,0 +1,40 @@
+#! /bin/sh
+# Copyright (C) 2009-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure the documentation targets work as required with BSD make,
+# even in the presence of subdirs (requires presence of default *-am rules).
+
+. test-init.sh
+
+mkdir sub
+cat >>configure.ac <<'END'
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+END
+cat >Makefile.am <<'END'
+SUBDIRS = sub
+END
+: >sub/Makefile.am
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure --prefix="$(pwd)/inst"
+$MAKE html dvi ps pdf info \
+ install-html install-dvi install-ps install-pdf install-info \
+ install-man install-data install-exec install uninstall
+
+:
diff --git a/t/txinfo-builddir.sh b/t/txinfo-builddir.sh
new file mode 100644
index 000000000..68dec81ff
--- /dev/null
+++ b/t/txinfo-builddir.sh
@@ -0,0 +1,131 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that info files are built in builddir when needed.
+# This test that this can be done through the so far undocumented
+# option 'info-in-builddir', as requested by at least GCC, GDB,
+# GNU binutils and the GNU bfd library. See automake bug#11034.
+
+required='makeinfo tex texi2dvi'
+. test-init.sh
+
+if useless_vpath_rebuild; then
+ skip_ "$MAKE has brittle VPATH support"
+fi
+
+echo AC_OUTPUT >> configure.ac
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = info-in-builddir
+info_TEXINFOS = foo.texi subdir/bar.texi mu.texi
+subdir_bar_TEXINFOS = subdir/inc.texi
+CLEANFILES = mu.info
+
+# mu.info should not be rebuilt in the current directory, since
+# it's up-to-date in $(srcdir).
+# This can be caused by a subtle issue related to VPATH handling
+# of version.texi (see also the comment in texi-vers.am): because
+# stamp-vti is newer than version.texi, the 'version.texi: stamp-vti'
+# rule is always triggered. Still that's not a reason for 'make'
+# to think 'version.texi' has been created...
+check-local:
+ test ! -e mu.info
+ test -f $(srcdir)/mu.info
+END
+
+mkdir subdir
+
+cat > foo.texi << 'END'
+\input texinfo
+@setfilename foo.info
+@settitle foo
+@node Top
+Hello walls.
+@include version.texi
+@bye
+END
+
+cat > mu.texi << 'END'
+\input texinfo
+@setfilename mu.info
+@settitle mu
+@node Top
+Mu mu mu.
+@bye
+END
+
+cat > subdir/bar.texi << 'END'
+\input texinfo
+@setfilename bar.info
+@settitle bar
+@node Top
+Hello walls.
+@include inc.texi
+@bye
+END
+
+echo "I'm included." > subdir/inc.texi
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+$AUTOCONF
+
+mkdir build
+cd build
+../configure
+$MAKE info
+test -f foo.info
+test -f subdir/bar.info
+test -f mu.info
+test -f ../stamp-vti
+test -f ../version.texi
+test ! -e ../foo.info
+test ! -e ../subdir/bar.info
+test ! -e ../mu.info
+$MAKE clean
+test -f foo.info
+test -f subdir/bar.info
+test ! -e mu.info
+test -f ../stamp-vti
+test -f ../version.texi
+
+# Make sure stamp-vti is older that version.texi.
+# (A common situation in a real tree).
+$sleep
+touch ../stamp-vti
+
+$MAKE distcheck
+# Being distributed, this file should have been rebuilt.
+test -f mu.info
+
+$MAKE distclean
+test -f ../stamp-vti
+test -f ../version.texi
+test -f foo.info
+test -f subdir/bar.info
+test ! -e mu.info
+
+../configure
+$MAKE maintainer-clean
+test ! -e ../stamp-vti
+test ! -e ../version.texi
+test ! -e stamp-vti
+test ! -e version.texi
+test ! -e foo.info
+test ! -e subdir/bar.info
+test ! -e mu.info
+
+:
diff --git a/t/txinfo-clean.sh b/t/txinfo-clean.sh
new file mode 100644
index 000000000..9c1a23098
--- /dev/null
+++ b/t/txinfo-clean.sh
@@ -0,0 +1,126 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# DVIS, PDFS, PSS, HTMLS should not be cleaned upon 'mostlyclean'.
+# Similar to txinfo25.sh.
+
+required='makeinfo tex texi2dvi dvips'
+. test-init.sh
+
+mkdir sub
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+info_TEXINFOS = main.texi other.texi sub/another.texi
+END
+
+cat > main.texi << 'END'
+\input texinfo
+@setfilename main.info
+@settitle main
+@node Top
+Hello walls.
+@include version.texi
+@bye
+END
+
+cat > other.texi << 'END'
+\input texinfo
+@setfilename other.info
+@settitle other
+@node Top
+Hello walls.
+@include version2.texi
+@bye
+END
+
+cat > sub/another.texi << 'END'
+\input texinfo
+@setfilename another.info
+@settitle another
+@node Top
+Hello walls.
+@include version3.texi
+@bye
+END
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+$AUTOCONF
+
+# In-tree build.
+./configure
+$MAKE dvi ps pdf html
+
+test -f main.dvi
+test -f main.ps
+test -f main.html || test -d main.html
+test -f main.pdf
+test -f other.pdf
+test -f sub/another.pdf
+
+test -f other.dvi
+test -f other.html || test -d other.html
+test -f other.ps
+test -f sub/another.dvi
+test -f sub/another.html || test -d sub/another.html
+test -f sub/another.ps
+
+$MAKE mostlyclean
+
+ls *.aux && exit 1
+ls sub/*.aux && exit 1
+
+test -f main.dvi
+test -f main.ps
+test -f main.html || test -d main.html
+test -f main.pdf
+test -f other.pdf
+test -f sub/another.pdf
+
+test -f other.dvi
+test -f other.html || test -d other.html
+test -f other.ps
+test -f sub/another.dvi
+test -f sub/another.html || test -d sub/another.html
+test -f sub/another.ps
+
+$MAKE clean
+
+test ! -e main.dvi
+test ! -e main.ps
+test ! -e main.html
+test ! -e main.pdf
+test ! -e other.pdf
+test ! -e sub/another.pdf
+test ! -e sub/yetanother.pdf
+
+test ! -e other.dvi
+test ! -e other.html
+test ! -e other.ps
+test ! -e sub/another.dvi
+test ! -e sub/another.html
+test ! -e sub/another.ps
+
+./configure
+$MAKE
+
+$MAKE distcheck
+
+:
diff --git a/t/txinfo-dvi-recurs.sh b/t/txinfo-dvi-recurs.sh
new file mode 100644
index 000000000..f47e9ddad
--- /dev/null
+++ b/t/txinfo-dvi-recurs.sh
@@ -0,0 +1,39 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure dvi target recurses into subdir.
+# Reported by Pavel Roskin.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+SUBDIRS = sub
+END
+
+mkdir sub
+cat > sub/Makefile.am << 'END'
+info_TEXINFOS = maude.texi
+END
+
+echo '@setfilename maude.info' > sub/maude.texi
+: > sub/texinfo.tex
+
+$ACLOCAL
+$AUTOMAKE
+
+grep dvi-recursive Makefile.in
+grep '[^-]info-recursive' Makefile.in
+grep '[^n]install-info-recursive' Makefile.in
diff --git a/t/txinfo-include.sh b/t/txinfo-include.sh
new file mode 100644
index 000000000..eef4f927a
--- /dev/null
+++ b/t/txinfo-include.sh
@@ -0,0 +1,164 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Texinfo input files using @include directives. Check both in-tree
+# and VPATH builds, and both top-level and subdir input.
+
+required='makeinfo tex texi2dvi'
+. test-init.sh
+
+echo AC_OUTPUT >> configure.ac
+
+cat > Makefile.am << 'END'
+info_TEXINFOS = main.texi sub/more.texi
+main_TEXINFOS = one.texi two.texi three.texi
+sub_more_TEXINFOS = sub/desc.texi sub/hist.texi
+END
+
+cat > main.texi << 'END'
+\input texinfo
+@setfilename main.info
+@settitle main
+@ifnottex
+@node Top
+@top GNU dummy.
+@menu
+* one:: Chapter one
+* two:: Chapter two
+* three:: Chapter three
+@end menu
+@end ifnottex
+@include one.texi
+@include two.texi
+@include three.texi
+@bye
+END
+
+cat > one.texi << 'END'
+@node one
+@chapter Chapter one
+Foo bar, baz.
+END
+
+cat > two.texi << 'END'
+@node two
+@chapter Chapter two
+Blah Blah Blah.
+END
+
+cat > three.texi << 'END'
+@node three
+@chapter Chapter two
+GNU's Not Unix.
+END
+
+mkdir sub
+
+cat > sub/more.texi << 'END'
+\input texinfo
+@setfilename more.info
+@settitle main
+@ifnottex
+@node Top
+@top GNU more.
+@menu
+* desc:: Description of this program
+* hist:: History of this program
+@end menu
+@end ifnottex
+@include desc.texi
+@include hist.texi
+@bye
+END
+
+cat > sub/desc.texi << 'END'
+@node desc
+@chapter Description of this program
+It does something, really.
+END
+
+cat > sub/hist.texi << 'END'
+@node hist
+@chapter History of this program
+It was written somehow.
+END
+
+cat > exp << 'END'
+./main.info
+./sub/more.info
+END
+
+check_info_contents ()
+{
+ srcdir=${1-.}
+ $FGREP "Foo bar, baz." $srcdir/main.info
+ $FGREP "Blah Blah Blah." $srcdir/main.info
+ $FGREP "GNU's Not Unix." $srcdir/main.info
+ $FGREP 'It does something, really.' $srcdir/sub/more.info
+ $FGREP 'It was written somehow.' $srcdir/sub/more.info
+}
+
+get_info_names ()
+{
+ find ${1-.} -type f -name '*.info' | LC_ALL=C sort > got
+}
+
+check_expected ()
+{
+ cat exp
+ cat got
+ diff exp got
+}
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+$AUTOCONF
+
+./configure
+
+$MAKE info
+get_info_names
+check_expected
+
+check_info_contents
+
+$MAKE dvi
+test -f main.dvi
+test -f sub/more.dvi
+
+$MAKE maintainer-clean
+test ! -f main.dvi
+test ! -f sub/more.dvi
+test ! -f main.info
+test ! -f sub/more.info
+
+mkdir build
+cd build
+../configure
+$MAKE all dvi
+
+get_info_names ..
+sed 's|^\./|../|' ../exp > exp
+check_expected
+
+test -f main.dvi
+test -f sub/more.dvi
+
+check_info_contents ..
+
+$MAKE distcheck
+
+:
diff --git a/t/txinfo-info-in-srcdir.sh b/t/txinfo-info-in-srcdir.sh
new file mode 100644
index 000000000..13d38213b
--- /dev/null
+++ b/t/txinfo-info-in-srcdir.sh
@@ -0,0 +1,91 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that info files are normally built in $(srcdir),
+# not in $(builddir).
+
+required='makeinfo tex texi2dvi'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+info_TEXINFOS = main.texi
+END
+
+cat > main.texi << 'END'
+\input texinfo
+@setfilename main.info
+@settitle main
+@node Top
+Hello walls.
+@include version.texi
+@bye
+END
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+$AUTOCONF
+
+mkdir build
+cd build
+../configure
+$MAKE
+test -f ../main.info
+test ! -e main.info
+test -f ../stamp-vti
+test ! -e stamp-vti
+test -f ../version.texi
+test ! -e version.texi
+
+cd ..
+rm -rf build make.info* stamp-vti version.texi
+./configure
+$MAKE
+test -f main.info
+
+# Make sure stamp-vti is older that version.texi.
+# (A common situation in a real tree.)
+# This is needed to test the "subtle" issue described below.
+test -f stamp-vti
+test -f version.texi
+$sleep
+touch stamp-vti
+
+$MAKE distclean
+test -f stamp-vti
+test -f version.texi
+
+mkdir build
+cd build
+../configure
+$MAKE
+# main.info should not be rebuilt in the current directory, since
+# it's up-to-date in $(srcdir).
+# This can be caused by a subtle issue related to VPATH handling
+# of version.texi (see also the comment in texi-vers.am): because
+# stamp-vti is newer than version.texi, the 'version.texi: stamp-vti'
+# rule is always triggered. Still that's not a reason for 'make'
+# to think 'version.texi' has been created...
+test ! -e main.info
+$MAKE dvi
+test -f main.dvi
+
+$MAKE distcheck
+
+:
diff --git a/t/txinfo-makeinfo-error-no-clobber.sh b/t/txinfo-makeinfo-error-no-clobber.sh
new file mode 100644
index 000000000..b8d966dab
--- /dev/null
+++ b/t/txinfo-makeinfo-error-no-clobber.sh
@@ -0,0 +1,78 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure info files survive makeinfo errors.
+
+required=makeinfo
+. test-init.sh
+
+echo AC_OUTPUT >> configure.ac
+
+cat > Makefile.am << 'END'
+info_TEXINFOS = main.texi sub/main.texi
+END
+
+mkdir sub
+
+cat > main.texi << 'END'
+\input texinfo
+@setfilename main.info
+@settitle main
+@node Top
+Hello walls.
+@bye
+END
+
+cp main.texi sub/main.texi
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+$AUTOCONF
+
+./configure
+$MAKE
+
+# Feign more info files.
+: > main.info-1
+: > sub/main.info-1
+
+# Break main.texi.
+$sleep
+cp main.texi main.old
+cat > main.texi << 'END'
+\input texinfo
+@setfilename main.info
+@settitle main
+@node Top
+@unknown_macro{Hello walls.}
+@bye
+END
+
+# makeinfo will bail out, but we should conserve the old info files.
+$MAKE && exit 1
+test -f main.info
+test -f main.info-1
+
+# Restore main.texi, and break sub/main.texi.
+cp main.texi sub/main.texi
+mv main.old main.texi
+$MAKE && exit 1
+test -f main.info
+test ! -e main.info-1
+test -f sub/main.info
+test -f sub/main.info-1
+
+:
diff --git a/t/txinfo-many-output-formats-vpath.sh b/t/txinfo-many-output-formats-vpath.sh
new file mode 100644
index 000000000..7172a06b1
--- /dev/null
+++ b/t/txinfo-many-output-formats-vpath.sh
@@ -0,0 +1,206 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test support for building HTML documentation, and the many
+# install-DOC flavors, in VPATH builds.
+# Keep in sync with sister test 'txinfo-many-output-formats.sh'.
+# FIXME: in the long term, the best thing to do is probably to convert
+# FIXME: this test and that sister test to TAP, and merge them.
+
+required='makeinfo tex texi2dvi'
+. test-init.sh
+
+cat >>configure.ac <<\EOF
+AC_CONFIG_FILES([rec/Makefile])
+
+# At the time of writing, Autoconf does not supplies any of these
+# definitions (and those below are purposely not those of the standard).
+AC_SUBST([dvidir], ['${datadir}/${PACKAGE}/dvi'])
+AC_SUBST([htmldir], ['${datadir}/${PACKAGE}/html'])
+AC_SUBST([pdfdir], ['${datadir}/${PACKAGE}/pdf'])
+AC_SUBST([psdir], ['${datadir}/${PACKAGE}/ps'])
+
+AC_OUTPUT
+EOF
+
+cat > Makefile.am << 'END'
+SUBDIRS = rec
+info_TEXINFOS = main.texi sub/main2.texi
+END
+
+cat > main.texi << 'END'
+\input texinfo
+@setfilename main.info
+@settitle main
+@node Top
+Hello walls.
+@bye
+END
+
+mkdir sub
+cat > sub/main2.texi << 'END'
+\input texinfo
+@setfilename main2.info
+@settitle main2
+@node Top
+Hello walls.
+@bye
+END
+
+mkdir rec
+cat > rec/main3.texi << 'END'
+\input texinfo
+@setfilename main3.info
+@settitle main3
+@node Top
+Hello walls.
+@bye
+END
+
+cat > rec/Makefile.am << 'END'
+info_TEXINFOS = main3.texi
+
+install-pdf-local:
+ @$(MKDIR_P) "$(pdfdir)"
+ : > "$(pdfdir)/hello"
+uninstall-local:
+ rm -f "$(pdfdir)/hello"
+
+check-local: ps pdf dvi html # For "make distcheck".
+END
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+$AUTOCONF
+
+# To simplify syncing with sister test 'txinfo-many-output-formats.sh'
+srcdir=..
+
+if test $srcdir = ..; then
+ mkdir build
+ cd build
+fi
+
+$srcdir/configure --prefix="$(pwd)"
+
+$MAKE
+
+$sleep
+# Test production of split-per-node HTML.
+$MAKE html
+test -d main.html
+test -d sub/main2.html
+test -d rec/main3.html
+
+# Rebuilding main.html should cause its timestamp to be updated.
+is_newest main.html $srcdir/main.texi
+$sleep
+touch $srcdir/main.texi
+$MAKE html
+is_newest main.html $srcdir/main.texi
+
+$MAKE clean
+test ! -e main.html
+test ! -e sub/main2.html
+test ! -e rec/main3.html
+
+# Test production of a single HTML file.
+run_make MAKEINFOFLAGS=--no-split html
+test -f main.html
+test -f sub/main2.html
+test -f rec/main3.html
+$MAKE clean
+test ! -e main.html
+test ! -e sub/main2.html
+test ! -e rec/main3.html
+
+# Make sure AM_MAKEINFOHTMLFLAGS is supported, and override AM_MAKEINFO.
+
+cp $srcdir/Makefile.am $srcdir/Makefile.sav
+cat >> $srcdir/Makefile.am <<'EOF'
+AM_MAKEINFOHTMLFLAGS = --no-headers --no-split
+AM_MAKEINFOFLAGS = --unsupported-option
+EOF
+(cd $srcdir && $AUTOMAKE)
+./config.status Makefile
+
+$MAKE html
+test -f main.html
+test -f sub/main2.html
+test -d rec/main3.html
+$MAKE clean
+test ! -e main.html
+test ! -e sub/main2.html
+test ! -e rec/main3.html
+
+$MAKE install-html
+test -f share/$me/html/main.html
+test -f share/$me/html/main2.html
+test -d share/$me/html/main3.html
+$MAKE uninstall
+test ! -e share/$me/html/main.html
+test ! -e share/$me/html/main2.html
+test ! -e share/$me/html/main3.html
+
+$MAKE dvi
+test -f main.dvi
+test -f sub/main2.dvi
+test -f rec/main3.dvi
+$MAKE clean
+test ! -e main.dvi
+test ! -e sub/main2.dvi
+test ! -e rec/main3.dvi
+
+$MAKE install-dvi
+test -f share/$me/dvi/main.dvi
+test -f share/$me/dvi/main2.dvi
+test -f share/$me/dvi/main3.dvi
+$MAKE uninstall
+test ! -e share/$me/dvi/main.dvi
+test ! -e share/$me/dvi/main2.dvi
+test ! -e share/$me/dvi/main3.dvi
+
+dvips --help || skip_ "dvips is missing"
+
+$MAKE install-ps
+test -f share/$me/ps/main.ps
+test -f share/$me/ps/main2.ps
+test -f share/$me/ps/main3.ps
+$MAKE uninstall
+test ! -e share/$me/ps/main.ps
+test ! -e share/$me/ps/main2.ps
+test ! -e share/$me/ps/main3.ps
+
+pdfetex --help || pdftex --help \
+ || skip_ "pdftex and pdfetex are both missing"
+
+$MAKE install-pdf
+test -f share/$me/pdf/main.pdf
+test -f share/$me/pdf/main2.pdf
+test -f share/$me/pdf/main3.pdf
+test -f share/$me/pdf/hello
+$MAKE uninstall
+test ! -e share/$me/pdf/main.pdf
+test ! -e share/$me/pdf/main2.pdf
+test ! -e share/$me/pdf/main3.pdf
+test ! -e share/$me/pdf/hello
+
+# Restore the makefile without a broken AM_MAKEINFOFLAGS definition.
+cp -f $srcdir/Makefile.sav $srcdir/Makefile.am
+using_gmake || $MAKE Makefile
+$MAKE distcheck
+
+:
diff --git a/t/txinfo-many-output-formats.sh b/t/txinfo-many-output-formats.sh
new file mode 100644
index 000000000..cbc97bbf9
--- /dev/null
+++ b/t/txinfo-many-output-formats.sh
@@ -0,0 +1,206 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test support for building HTML documentation, and the many
+# install-DOC flavors.
+# Keep in sync with sister test 'txinfo-many-output-formats-vpath.sh'.
+# FIXME: in the long term, the best thing to do is probably to convert
+# FIXME: this test and that sister test to TAP, and merge them.
+
+required='makeinfo tex texi2dvi'
+. test-init.sh
+
+cat >>configure.ac <<\EOF
+AC_CONFIG_FILES([rec/Makefile])
+
+# At the time of writing, Autoconf does not supplies any of these
+# definitions (and those below are purposely not those of the standard).
+AC_SUBST([dvidir], ['${datadir}/${PACKAGE}/dvi'])
+AC_SUBST([htmldir], ['${datadir}/${PACKAGE}/html'])
+AC_SUBST([pdfdir], ['${datadir}/${PACKAGE}/pdf'])
+AC_SUBST([psdir], ['${datadir}/${PACKAGE}/ps'])
+
+AC_OUTPUT
+EOF
+
+cat > Makefile.am << 'END'
+SUBDIRS = rec
+info_TEXINFOS = main.texi sub/main2.texi
+END
+
+cat > main.texi << 'END'
+\input texinfo
+@setfilename main.info
+@settitle main
+@node Top
+Hello walls.
+@bye
+END
+
+mkdir sub
+cat > sub/main2.texi << 'END'
+\input texinfo
+@setfilename main2.info
+@settitle main2
+@node Top
+Hello walls.
+@bye
+END
+
+mkdir rec
+cat > rec/main3.texi << 'END'
+\input texinfo
+@setfilename main3.info
+@settitle main3
+@node Top
+Hello walls.
+@bye
+END
+
+cat > rec/Makefile.am << 'END'
+info_TEXINFOS = main3.texi
+
+install-pdf-local:
+ @$(MKDIR_P) "$(pdfdir)"
+ : > "$(pdfdir)/hello"
+uninstall-local:
+ rm -f "$(pdfdir)/hello"
+
+check-local: ps pdf dvi html # For "make distcheck".
+END
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+$AUTOCONF
+
+# To simplify syncing with sister test 'txinfo-many-output-formats.sh'
+srcdir=.
+
+if test $srcdir = ..; then
+ mkdir build
+ cd build
+fi
+
+$srcdir/configure --prefix="$(pwd)"
+
+$MAKE
+
+$sleep
+# Test production of split-per-node HTML.
+$MAKE html
+test -d main.html
+test -d sub/main2.html
+test -d rec/main3.html
+
+# Rebuilding main.html should cause its timestamp to be updated.
+is_newest main.html $srcdir/main.texi
+$sleep
+touch $srcdir/main.texi
+$MAKE html
+is_newest main.html $srcdir/main.texi
+
+$MAKE clean
+test ! -e main.html
+test ! -e sub/main2.html
+test ! -e rec/main3.html
+
+# Test production of a single HTML file.
+run_make MAKEINFOFLAGS=--no-split html
+test -f main.html
+test -f sub/main2.html
+test -f rec/main3.html
+$MAKE clean
+test ! -e main.html
+test ! -e sub/main2.html
+test ! -e rec/main3.html
+
+# Make sure AM_MAKEINFOHTMLFLAGS is supported, and override AM_MAKEINFO.
+
+cp $srcdir/Makefile.am $srcdir/Makefile.sav
+cat >> $srcdir/Makefile.am <<'EOF'
+AM_MAKEINFOHTMLFLAGS = --no-headers --no-split
+AM_MAKEINFOFLAGS = --unsupported-option
+EOF
+(cd $srcdir && $AUTOMAKE)
+./config.status Makefile
+
+$MAKE html
+test -f main.html
+test -f sub/main2.html
+test -d rec/main3.html
+$MAKE clean
+test ! -e main.html
+test ! -e sub/main2.html
+test ! -e rec/main3.html
+
+$MAKE install-html
+test -f share/$me/html/main.html
+test -f share/$me/html/main2.html
+test -d share/$me/html/main3.html
+$MAKE uninstall
+test ! -e share/$me/html/main.html
+test ! -e share/$me/html/main2.html
+test ! -e share/$me/html/main3.html
+
+$MAKE dvi
+test -f main.dvi
+test -f sub/main2.dvi
+test -f rec/main3.dvi
+$MAKE clean
+test ! -e main.dvi
+test ! -e sub/main2.dvi
+test ! -e rec/main3.dvi
+
+$MAKE install-dvi
+test -f share/$me/dvi/main.dvi
+test -f share/$me/dvi/main2.dvi
+test -f share/$me/dvi/main3.dvi
+$MAKE uninstall
+test ! -e share/$me/dvi/main.dvi
+test ! -e share/$me/dvi/main2.dvi
+test ! -e share/$me/dvi/main3.dvi
+
+dvips --help || skip_ "dvips is missing"
+
+$MAKE install-ps
+test -f share/$me/ps/main.ps
+test -f share/$me/ps/main2.ps
+test -f share/$me/ps/main3.ps
+$MAKE uninstall
+test ! -e share/$me/ps/main.ps
+test ! -e share/$me/ps/main2.ps
+test ! -e share/$me/ps/main3.ps
+
+pdfetex --help || pdftex --help \
+ || skip_ "pdftex and pdfetex are both missing"
+
+$MAKE install-pdf
+test -f share/$me/pdf/main.pdf
+test -f share/$me/pdf/main2.pdf
+test -f share/$me/pdf/main3.pdf
+test -f share/$me/pdf/hello
+$MAKE uninstall
+test ! -e share/$me/pdf/main.pdf
+test ! -e share/$me/pdf/main2.pdf
+test ! -e share/$me/pdf/main3.pdf
+test ! -e share/$me/pdf/hello
+
+# Restore the makefile without a broken AM_MAKEINFOFLAGS definition.
+cp -f $srcdir/Makefile.sav $srcdir/Makefile.am
+using_gmake || $MAKE Makefile
+$MAKE distcheck
+
+:
diff --git a/t/txinfo-no-clutter.sh b/t/txinfo-no-clutter.sh
new file mode 100644
index 000000000..9987aa856
--- /dev/null
+++ b/t/txinfo-no-clutter.sh
@@ -0,0 +1,146 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# The info, html, pdf, ps and dvi targets shouldn't let clutter in the
+# build directory. Related to automake bug#11146.
+
+required='makeinfo tex texi2dvi dvips'
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+all-local: ps pdf dvi html # For "make distcheck".
+info_TEXINFOS = foo.texi doc/bar.texi baz.texi
+SUBDIRS = sub
+END
+
+mkdir sub doc
+
+cat > sub/Makefile.am << 'END'
+all-local: ps pdf dvi html # For "make distcheck".
+info_TEXINFOS = baz.texi
+END
+
+cat > foo.texi << 'END'
+\input texinfo
+@setfilename foo.info
+@settitle foo
+@node Top
+Hello walls.
+@include version.texi
+@bye
+END
+
+cat > doc/bar.texi << 'END'
+\input texinfo
+@setfilename bar.info
+@settitle bar
+@node Top
+Hello walls.
+@include version2.texi
+@bye
+END
+
+cat > baz.texi << 'END'
+\input texinfo
+@setfilename baz.info
+@settitle baz
+@defindex au
+@defindex sa
+@defindex sb
+@node Top
+Hello walls.
+@cindex foo
+foo
+@pindex bar
+bar
+@auindex baz
+baz
+@saindex sa
+sa
+@sbindex sb
+sb
+@bye
+END
+
+cp baz.texi sub
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+$AUTOCONF
+
+./configure
+
+# Try one by one, to ensure later targets don't involuntarily
+# clean up potential cruft left by earlier ones.
+for fmt in info pdf ps dvi html all; do
+ $MAKE $fmt
+ # For debugging.
+ ls -l . doc sub
+ # Sanity check.
+ case $fmt in
+ html)
+ test -e foo.html
+ test -e doc/bar.html
+ test -e baz.html
+ test -e sub/baz.html
+ ;;
+ all)
+ for x in info pdf ps dvi; do
+ test -f foo.$x
+ test -f doc/bar.$x
+ test -f baz.$x
+ test -f sub/baz.$x
+ done
+ test -e foo.html
+ test -e doc/bar.html
+ test -e baz.html
+ test -e sub/baz.html
+ ;;
+ *)
+ test -f foo.$fmt
+ test -f doc/bar.$fmt
+ test -f baz.$fmt
+ test -f sub/baz.$fmt
+ ;;
+ esac
+ # Real test.
+ ls -d foo* baz* sub/baz* doc/bar* > lst
+ basename_rx='(foo|doc/bar|baz|sub/baz)'
+ case $fmt in
+ pdf) extension_rx="(texi|pdf|t2p)";;
+ dvi) extension_rx="(texi|dvi|t2d)";;
+ ps) extension_rx="(texi|ps|dvi|t2d)";;
+ info) extension_rx="(texi|info)";;
+ html) extension_rx="(texi|html)";;
+ all) extension_rx="(texi|html|info|pdf|ps|dvi|t2[pd])";;
+ *) fatal_ "unreachable code reached";;
+ esac
+ $EGREP -v "^$basename_rx\.$extension_rx$" lst && exit 1
+ # Cleanup for checks on the next format.
+ case $fmt in
+ info) rm -f *.info doc/*.info sub/*.info;;
+ *) $MAKE clean;;
+ esac
+done
+
+$MAKE distcheck
+
+:
diff --git a/t/txinfo-no-extra-dist.sh b/t/txinfo-no-extra-dist.sh
new file mode 100644
index 000000000..2e89cfb4a
--- /dev/null
+++ b/t/txinfo-no-extra-dist.sh
@@ -0,0 +1,59 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to ensure that a ".info~" or ".info.bak" file doesn't end up
+# in the distribution. Bug report from Greg McGary.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+info_TEXINFOS = textutils.texi subdir/main.texi
+test: distdir
+ @echo DISTFILES = $(DISTFILES)
+ @case '$(DISTFILES)' in *'~'*|*'.bak'*) exit 1;; *) exit 0;; esac
+ st=0; \
+ find $(distdir) | grep '~' && st=1; \
+ find $(distdir) | grep '\.bak' && st=1; \
+ exit $$st
+PHONY: test
+END
+
+: > texinfo.tex
+mkdir subdir
+echo '@setfilename textutils.info' > textutils.texi
+echo '@setfilename main.info' > subdir/main.texi
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure
+: > textutils.info
+: > subdir/main.info
+: > textutils.info~
+: > textutils.info.bak
+: > subdir/main.info~
+: > subdir/main.info.bak
+$MAKE test
+$MAKE maintainer-clean
+test -f subdir/main.info~
+test -f subdir/main.info.bak
+
+:
diff --git a/t/txinfo-no-installinfo.sh b/t/txinfo-no-installinfo.sh
new file mode 100644
index 000000000..31f99dacb
--- /dev/null
+++ b/t/txinfo-no-installinfo.sh
@@ -0,0 +1,48 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure install-info works even if no-installinfo is given.
+
+required='makeinfo'
+. test-init.sh
+
+echo AC_OUTPUT >> configure.ac
+
+cat > Makefile.am << 'END'
+info_TEXINFOS = main.texi
+AUTOMAKE_OPTIONS = no-installinfo
+END
+
+cat > main.texi << 'END'
+\input texinfo
+@setfilename main.info
+@settitle main
+@node Top
+Hello walls.
+@include version.texi
+@bye
+END
+
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+$AUTOCONF
+
+./configure --prefix="$(pwd)/inst" --infodir="$(pwd)/inst/info"
+$MAKE install-info
+test -f inst/info/main.info
+
+:
diff --git a/t/txinfo-no-repeated-targets.sh b/t/txinfo-no-repeated-targets.sh
new file mode 100644
index 000000000..03ab54140
--- /dev/null
+++ b/t/txinfo-no-repeated-targets.sh
@@ -0,0 +1,41 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure we only create texinfo-related targets once.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+info_TEXINFOS = maude.texi liver.texi heart.texi
+END
+
+echo '@setfilename maude.info' > maude.texi
+echo '@setfilename liver.info' > liver.texi
+echo '@setfilename heart.info' > heart.texi
+: > texinfo.tex
+
+$ACLOCAL
+$AUTOMAKE
+
+# These are just examples -- basically for many targets in texinfos.am
+# we only want them to appear once. But grepping them all would be
+# overkill.
+for t in info dist-info dvi-am install-html uninstall-pdf-am; do
+ $EGREP "(^| )$t*.:" Makefile.in # For debugging.
+ test $($EGREP -c "(^| )$t(:| *.:)" Makefile.in) -eq 1
+done
+
+:
diff --git a/t/txinfo-no-split.sh b/t/txinfo-no-split.sh
new file mode 100644
index 000000000..ba7ec0d29
--- /dev/null
+++ b/t/txinfo-no-split.sh
@@ -0,0 +1,101 @@
+#! /bin/sh
+# Copyright (C) 2013-2017 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 <https://www.gnu.org/licenses/>.
+
+# Info split files should not be produced (automake bug#13351).
+
+required=makeinfo
+. test-init.sh
+
+echo AC_OUTPUT >> configure.ac
+
+cat > Makefile.am <<'END'
+MAKEINFO = makeinfo --split-size 10
+info_TEXINFOS = foo.texi
+
+test-split: # A sanity check.
+ $(MAKEINFO) -o split.info foo.texi
+
+check-local:
+ test -f $(srcdir)/foo.info
+ test ! -f $(srcdir)/foo.info-1
+ test "`find $(srcdir) . | grep '\.info'`" = "$(srcdir)/foo.info"
+END
+
+# Systems lacking a working TeX installation cannot run "make dvi".
+if test -z "$TEX"; then
+ warn_ "TeX installation missing, \"make dvi\" will be skipped"
+ echo AUTOMAKE_OPTIONS = -Wno-override >> Makefile.am
+ echo 'dvi:; @echo Tex is missing, do nothing' >> Makefile.am
+fi
+
+cat > foo.texi << 'END'
+\input texinfo
+@setfilename foo.info
+@settitle foo
+@dircategory Dummy utilities
+@direntry
+* Foo: (foo). Does nothing at all.
+@end direntry
+
+@node Top
+@top Foo
+
+@menu
+* Intro:: Introduction
+* Planets:: List of Planets
+@end menu
+
+@node Intro
+@chapter Introduction
+Will list planets.
+
+@node Planets
+@chapter List of planets
+Hello Mercury.
+Hello Venus
+Hello Earth
+Hello Mars.
+Hello Jupiter.
+Hello Saturn.
+Hello Uran.
+Hello Neptune.
+Hello Pluto.
+@bye
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+$MAKE test-split
+ls -l # For debugging.
+test -f split.info
+test -f split.info-1
+test -f split.info-2
+rm -f split*
+
+$MAKE
+
+ls -l # For debugging.
+test -f foo.info
+test ! -f foo.info-1
+test "$(find . | $FGREP '.info' | sed 's|^\./||')" = foo.info
+
+$MAKE distcheck
+
+:
diff --git a/t/txinfo-nodist-info.sh b/t/txinfo-nodist-info.sh
new file mode 100644
index 000000000..3f4146b14
--- /dev/null
+++ b/t/txinfo-nodist-info.sh
@@ -0,0 +1,66 @@
+#! /bin/sh
+# Copyright (C) 2013-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that we can force generated '.info' info files not to be
+# distributed.
+
+required=makeinfo
+. test-init.sh
+
+echo AC_OUTPUT >> configure.ac
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = info-in-builddir
+info_TEXINFOS = foo.texi
+CLEANFILES = foo.info
+
+# To make distcheck work without requiring TeX and texi2dvi.
+dvi:
+
+# Do not distribute generated '.info' files.
+dist-info:
+ @:
+END
+
+mkdir subdir
+
+cat > foo.texi << 'END'
+\input texinfo
+@setfilename foo.info
+@settitle foo
+@node Top
+Hello walls.
+@include version.texi
+@bye
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a -Wno-override
+
+./configure
+$MAKE distdir
+ls -l . $distdir # For debugging.
+test ! -e foo.info
+test ! -e $distdir/foo.info
+$MAKE
+test -f foo.info
+$MAKE distdir
+ls -l $distdir # For debugging.
+test ! -f $distdir/foo.info
+$MAKE distcheck
+
+:
diff --git a/t/txinfo-other-suffixes.sh b/t/txinfo-other-suffixes.sh
new file mode 100644
index 000000000..83b20fbc6
--- /dev/null
+++ b/t/txinfo-other-suffixes.sh
@@ -0,0 +1,41 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure '.txi' and '.texinfo' extensions are deprecated,
+# but still work.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+info_TEXINFOS = foo.txi bar.texinfo
+END
+
+echo '@setfilename foo.info' > foo.txi
+echo '@setfilename bar.info' > bar.texinfo
+: > texinfo.tex
+
+$ACLOCAL
+AUTOMAKE_fails
+grep "^Makefile\.am:.*suffix '.txi'.*Texinfo file.*discouraged" stderr
+grep "^Makefile\.am:.*suffix '.texinfo'.*Texinfo file.*discouraged" stderr
+grep "^Makefile\.am:.* use '.texi' instead" stderr
+
+$AUTOMAKE -Wno-obsolete
+
+grep '^\.txi\.info: *$' Makefile.in
+grep '^\.texinfo\.info: *$' Makefile.in
+
+:
diff --git a/t/txinfo-override-infodeps.sh b/t/txinfo-override-infodeps.sh
new file mode 100644
index 000000000..9fd5a609a
--- /dev/null
+++ b/t/txinfo-override-infodeps.sh
@@ -0,0 +1,62 @@
+#! /bin/sh
+# Copyright (C) 2004-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that INFO_DEPS can be overridden.
+# Report from Bruce Korb.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+INFO_DEPS = foo.info
+info_TEXINFOS = bar.texi
+END
+
+echo '@setfilename baz.info' > bar.texi
+
+$ACLOCAL
+AUTOMAKE_fails --add-missing
+grep '^Makefile\.am:1:.*user variable.*INFO_DEPS' stderr
+grep 'overrides Automake variable.*INFO_DEPS' stderr
+
+$AUTOMAKE -Wno-override
+
+# There is only one definition of INFO_DEPS ...
+test 1 -eq $(grep -c '^INFO_DEPS.*=' Makefile.in)
+# ... and it is the right one.
+grep '^INFO_DEPS *= *foo.info *$' Makefile.in
+
+# Likewise with AC_SUBST.
+
+cat > Makefile.am << 'END'
+info_TEXINFOS = bar.texi
+END
+cat >> configure.ac << 'END'
+AC_SUBST([INFO_DEPS])
+END
+rm -rf autom4te.cache # Make sure autoconf sees the configure.ac update.
+AUTOMAKE_fails
+
+grep '^configure\.ac:4:.*user variable.*INFO_DEPS' stderr
+grep 'overrides Automake variable.*INFO_DEPS' stderr
+
+$AUTOMAKE -Wno-override
+
+# There is only one definition of INFO_DEPS ...
+test 1 -eq $(grep -c '^INFO_DEPS.*=' Makefile.in)
+# ... and it is the right one.
+grep '^INFO_DEPS *= *@INFO_DEPS@ *$' Makefile.in
+
+:
diff --git a/t/txinfo-override-texinfo-tex.sh b/t/txinfo-override-texinfo-tex.sh
new file mode 100644
index 000000000..b605bd55d
--- /dev/null
+++ b/t/txinfo-override-texinfo-tex.sh
@@ -0,0 +1,68 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure the user can override TEXINFO_TEX.
+# Also make sure TEXINFO_TEX is not distributed.
+# Report from Tom Tromey.
+
+required='makeinfo tex texi2dvi'
+. test-init.sh
+
+cat > configure.ac << END
+AC_INIT([$me], [1.0])
+AC_CONFIG_AUX_DIR([aux1])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+TEXINFO_TEX = ../tex/texinfo.tex
+info_TEXINFOS = main.texi
+sure_it_exists:
+ test -f $(srcdir)/$(TEXINFO_TEX)
+sure_it_is_not_distributed: distdir
+ test ! -f $(distdir)/tex/texinfo.tex
+check-local: sure_it_exists
+END
+
+cat > main.texi << 'END'
+\input texinfo
+@setfilename main.info
+@settitle main
+@node Top
+Hello walls.
+@bye
+END
+
+mkdir aux1
+mkdir tex
+cp "$am_pkgvdatadir/texinfo.tex" tex
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+$AUTOCONF
+
+test ! -e texinfo.tex
+test ! -e aux1/texinfo.tex
+test -f tex/texinfo.tex
+
+./configure
+
+$MAKE distcheck
+$MAKE sure_it_is_not_distributed
+
+:
diff --git a/t/txinfo-setfilename-repeated.sh b/t/txinfo-setfilename-repeated.sh
new file mode 100644
index 000000000..a9ab21fe1
--- /dev/null
+++ b/t/txinfo-setfilename-repeated.sh
@@ -0,0 +1,41 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure Automake uses the _first_ @setfilname it sees.
+# Report from Karl Berry.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+info_TEXINFOS = texinfo.texi
+END
+
+cat > texinfo.texi << 'END'
+@setfilename texinfo.info
+...
+@verbatim
+@setfilename example.info
+@end verbatim
+...
+END
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+
+grep 'example' Makefile.in && exit 1
+grep 'texinfo\.info:' Makefile.in
+
+:
diff --git a/t/txinfo-setfilename-suffix-strip.sh b/t/txinfo-setfilename-suffix-strip.sh
new file mode 100644
index 000000000..10453efa6
--- /dev/null
+++ b/t/txinfo-setfilename-suffix-strip.sh
@@ -0,0 +1,33 @@
+#! /bin/sh
+# Copyright (C) 2006-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure file extensions are matched correctly in the code
+# parsing texi files for @setfilename declarations.
+# Report from Eric Dorland.
+
+. test-init.sh
+
+echo info_TEXINFOS = bar.texi >Makefile.am
+cat >bar.texi <<EOF
+@setfilename bar-1.9.info
+EOF
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+
+$EGREP '[ /]bar-1\.9\.info( |$)' Makefile.in
+
+:
diff --git a/t/txinfo-subdir-pr343.sh b/t/txinfo-subdir-pr343.sh
new file mode 100644
index 000000000..ea393ea68
--- /dev/null
+++ b/t/txinfo-subdir-pr343.sh
@@ -0,0 +1,60 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check for subdir Texinfo (PR/343).
+
+required='makeinfo tex texi2dvi'
+. test-init.sh
+
+echo AC_OUTPUT >> configure.ac
+
+cat > Makefile.am << 'END'
+info_TEXINFOS = subdir/main.texi
+subdir_main_TEXINFOS = subdir/inc.texi
+
+installcheck-local:
+ test -f "$(infodir)/main.info"
+END
+
+mkdir subdir
+
+cat > subdir/main.texi << 'END'
+\input texinfo
+@setfilename main.info
+@settitle main
+@node Top
+Hello walls.
+@include version.texi
+@include inc.texi
+@bye
+END
+
+cat > subdir/inc.texi << 'END'
+I'm included.
+END
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+$AUTOCONF
+
+mkdir build
+cd build
+../configure
+$MAKE distcheck
+test -f ../subdir/main.info
+test ! -e subdir/main.info
+
+:
diff --git a/t/txinfo-tex-dist.sh b/t/txinfo-tex-dist.sh
new file mode 100644
index 000000000..68daacf94
--- /dev/null
+++ b/t/txinfo-tex-dist.sh
@@ -0,0 +1,47 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to ensure texinfo.tex is included in distribution. Bug report by
+# Jim Meyering.
+
+required=makeinfo
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+info_TEXINFOS = textutils.texi
+.PHONY: test1 test2
+test1:
+ @echo DISTFILES = $(DISTFILES)
+ echo ' ' $(DISTFILES) ' ' | grep '[ /]texinfo\.tex '
+test2: distdir
+ ls -l $(distdir)
+ test -f $(distdir)/texinfo.tex
+END
+
+echo '@setfilename textutils.info' > textutils.texi
+: > texinfo.tex
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+$MAKE test1 test2
+
+:
diff --git a/t/txinfo-unrecognized-extension.sh b/t/txinfo-unrecognized-extension.sh
new file mode 100644
index 000000000..c93c007ee
--- /dev/null
+++ b/t/txinfo-unrecognized-extension.sh
@@ -0,0 +1,38 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test that automake complains properly when the files with unrecognized
+# extensions are passed to the TEXINFOS primary.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+info_TEXINFOS = foobar.foo bazquux.tex zardoz.c
+END
+
+echo '@setfilename foobar.info' > foobar.foo
+echo '@setfilename bazquux.info' > bazquux.tex
+echo '@setfilename zardoz.info' > zardoz.c
+: > texinfo.tex
+
+$ACLOCAL
+AUTOMAKE_fails
+
+for x in 'foobar\.foo' 'bazquux\.tex' 'zardoz\.c'; do
+ grep "^Makefile\\.am:.* texinfo file .*$x.* unrecognized extension" stderr
+done
+
+:
diff --git a/t/txinfo-unrecognized-info-suffix.sh b/t/txinfo-unrecognized-info-suffix.sh
new file mode 100644
index 000000000..811e28e8d
--- /dev/null
+++ b/t/txinfo-unrecognized-info-suffix.sh
@@ -0,0 +1,32 @@
+#! /bin/sh
+# Copyright (C) 1997-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure non-empty, non-info suffixes are diagnosed.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+info_TEXINFOS = textutils.texi
+END
+
+echo '@setfilename textutils.frob' > textutils.texi
+: > texinfo.tex
+
+$ACLOCAL
+AUTOMAKE_fails
+grep 'textutils\.texi:1:.*textutils\.frob.*extension' stderr
+
+:
diff --git a/t/txinfo-vtexi.sh b/t/txinfo-vtexi.sh
new file mode 100644
index 000000000..7d8ff77f9
--- /dev/null
+++ b/t/txinfo-vtexi.sh
@@ -0,0 +1,62 @@
+#!/bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Basic checks and some regressions testing on 'version.texi'
+# support for texinfo files.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+info_TEXINFOS = textutils.texi
+END
+
+cat > textutils.texi << 'END'
+@include version.texi
+@setfilename textutils.info
+END
+
+# Required when using Texinfo.
+: > mdate-sh
+: > texinfo.tex
+
+$ACLOCAL
+$AUTOMAKE
+
+# Test for bug reported by Jim Meyering:
+# When I ran automake-0.29 on textutils,
+# I noticed that doc/Makefile.in had
+# textutils.info: textutils.texi
+# instead of
+# textutils.info: textutils.texi version.texi
+# Today this should be:
+# $(srcdir)/textutils.info: $(srcdir)/version.texi
+# or:
+# $(srcdir)/textutils.info: version.texi
+grep '^\$(srcdir)/textutils\.info:.*[ /]version\.texi *$' Makefile.in
+
+# Test for bug reported by Lars Hecking:
+# When running the first version of configure.ac aware automake,
+# @CONFIGURE_AC@ was not properly substituted.
+$EGREP 'stamp-vti:.*textutils\.texi( .*)?$' Makefile.in
+$EGREP 'stamp-vti:.*\$\(top_srcdir\)/configure( .*)?$' Makefile.in
+
+# Check that the path to mdate-sh is correct. Over escaping of '$'
+# etc. once led to '\$\(srcdir\)/mdate-sh'.
+# Filter out '$(srcdir)/mdate-sh'; there should be no occurrences
+# of '.../mdate-sh' left then.
+sed 's,\$(srcdir)/mdate-sh,,g' Makefile.in | grep '/mdate-sh' && exit 1
+
+:
diff --git a/t/txinfo-vtexi2.sh b/t/txinfo-vtexi2.sh
new file mode 100644
index 000000000..5f6fc7359
--- /dev/null
+++ b/t/txinfo-vtexi2.sh
@@ -0,0 +1,42 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for bug reported by Glenn Amerine:
+# When automake sees version.texi is being included by a texi file,
+# version.texi gets listed as a dependency for the .info file but
+# not the .dvi file.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+info_TEXINFOS = zardoz.texi
+END
+
+cat > zardoz.texi << 'END'
+@setfilename zardoz.info
+@include version.texi
+END
+
+# Required when using Texinfo.
+: > mdate-sh
+: > texinfo.tex
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '^zardoz\.dvi:.*[ /]version.texi' Makefile.in
+
+:
diff --git a/t/txinfo-vtexi3.sh b/t/txinfo-vtexi3.sh
new file mode 100644
index 000000000..043ba7a23
--- /dev/null
+++ b/t/txinfo-vtexi3.sh
@@ -0,0 +1,124 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that vers*.texi files are automatically created and distributed
+# if @included into a texi source. Also check that they correctly contain
+# the @values definitions they are advertised to.
+# See also the related test 'txinfo-vtexi4.sh', which does similar checks,
+# but for version.texi only, and requires makeinfo, tex and texi2dvi.
+
+. test-init.sh
+
+# We are going to override package version in AC_INIT, so we need
+# to redefine the name of the distdir as well.
+distdir=$me-7.45.3a
+
+# This should work without tex, texinfo or makeinfo.
+TEX=false TEXI2DVI=false MAKEINFO=false
+export TEX TEXI2DVI MAKEINFO
+
+cat > configure.ac << END
+AC_INIT([$me], [7.45.3a])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+info_TEXINFOS = foobar.texi quux.texi zardoz.texi
+.PHONY: echo-distfiles
+echo-distfiles:
+ @echo ' ' $(DISTFILES) ' '
+END
+
+cat > foobar.texi << 'END'
+@setfilename foobar.info
+random text
+@include version.texi
+END
+
+cat > quux.texi << 'END'
+@setfilename quux.info
+@include version-quux.texi
+random text
+END
+
+cat > zardoz.texi << 'END'
+@setfilename zardoz.info
+some randome text
+@include vers1a_2b.texi
+more random text
+END
+
+# Required when using Texinfo.
+: > texinfo.tex
+cp "$am_scriptdir"/mdate-sh .
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+day='([1-9]|1[0-9]|2[0-9]|3[01])'
+month='(January|February|March|April|May|June|July|August|September|October|November|December)'
+year='20[0-9][0-9]' # Hopefully automake will be obsolete in 80 years ;-)
+date="$day $month $year"
+
+do_check ()
+{
+ # Basename of the vers*.texi file.
+ vfile=$1
+ # The $(srcdir) of the current build.
+ srcdir=$2
+ # The vers*.texi file must be created in $(srcdir).
+ $MAKE $srcdir/$vfile.texi
+ cat $srcdir/$vfile.texi
+ # EDITION and VERSION are synonyms, as per documentation.
+ grep "^@set EDITION 7\\.45\\.3a$" $srcdir/$vfile.texi
+ grep "^@set VERSION 7\\.45\\.3a$" $srcdir/$vfile.texi
+ # Check that UPDATED seems right, and that UPDATED and UPDATED-MONTH
+ # are consistent.
+ $EGREP "^@set UPDATED $date$" $srcdir/$vfile.texi
+ vmonth=$(grep '^@set UPDATED ' $srcdir/$vfile.texi | awk '{print $4, $5}')
+ grep "^@set UPDATED-MONTH $vmonth$" $srcdir/$vfile.texi
+ # Check that the vers*.texi file is distributed according
+ # to $(DISTFILES).
+ $MAKE echo-distfiles # For debugging.
+ $MAKE -s echo-distfiles | grep "[ /]$vfile\\.texi"
+}
+
+mkdir build
+cd build
+../configure
+
+do_check version ..
+do_check version-quux ..
+do_check vers1a_2b ..
+
+# The various $(srcdir)/*.info are required for the distribution
+# and they must be newer than version.texi, so that make won't try
+# to rebuild them.
+$sleep
+touch ../foobar.info
+touch ../quux.info
+touch ../zardoz.info
+# Check that the vers*.texi files are really distributed.
+$MAKE distdir
+ls -l $distdir
+diff ../version.texi $distdir/version.texi
+diff ../version-quux.texi $distdir/version-quux.texi
+diff ../version.texi $distdir/vers1a_2b.texi
+
+:
diff --git a/t/txinfo-vtexi4.sh b/t/txinfo-vtexi4.sh
new file mode 100644
index 000000000..8f9eab414
--- /dev/null
+++ b/t/txinfo-vtexi4.sh
@@ -0,0 +1,106 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that the version.texi file is automatically created and distributed
+# if @included into a texi source. Also check that is correctly defined
+# @values definitions it is advertised to.
+# See also the related test 'txinfo-vtexi4.sh', which does similar checks,
+# but for more vers*.texi files, and does not require makeinfo, tex and
+# texi2dvi.
+
+required='makeinfo tex texi2dvi grep-nonprint'
+. test-init.sh
+
+test $(LC_ALL=C date '+%u') -gt 0 && test $(LC_ALL=C date '+%u') -lt 8 \
+ && day=$(LC_ALL=C date '+%d') && test -n "$day" \
+ && month=$(LC_ALL=C date '+%B') && test -n "$month" \
+ && year=$(LC_ALL=C date '+%Y') && test -n "$year" \
+ || skip_ "'date' is not POSIX-compliant enough"
+day=$(echo "$day" | sed 's/^0//')
+
+cat > configure.ac << END
+AC_INIT([$me], [123.456])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+END
+
+cat > defs.am <<END
+my_date_rx = $day $month $year
+my_month_rx = $month $year
+my_version_rx = 123\.456
+END
+
+cat > Makefile.am << 'END'
+include defs.am
+info_TEXINFOS = foo.texi
+test-grepinfo:
+## Not useless uses of cat: we only tested that grep works on
+## non-text input when that's given from a pipe.
+ cat $(srcdir)/foo.info | grep 'GREPVERSION=$(my_version_rx)='
+ cat $(srcdir)/foo.info | grep 'GREPEDITION=$(my_version_rx)='
+ cat $(srcdir)/foo.info | grep 'GREPDATE=$(my_date_rx)='
+ cat $(srcdir)/foo.info | grep 'GREPMONTH=$(my_month_rx)='
+test-distfiles:
+ @echo DISTFILES = $(DISTFILES)
+ echo ' ' $(DISTFILES) ' ' | grep '[ /]version.texi '
+test-distdir: distdir
+ ls -l $(distdir)
+ diff $(srcdir)/version.texi $(distdir)/version.texi
+.PHONY: test-grepinfo test-distfiles test-distdir
+check-local: test-grepinfo test-distfiles test-distdir
+END
+
+cat > foo.texi << 'END'
+\input texinfo
+@c %**start of header
+@setfilename foo.info
+@settitle Zardoz
+@c %**end of header
+
+@node Top
+@include version.texi
+
+GREPVERSION=@value{VERSION}=
+
+GREPEDITION=@value{EDITION}=
+
+GREPDATE=@value{UPDATED}=
+
+GREPMONTH=@value{UPDATED-MONTH}=
+
+@bye
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+$MAKE all dvi
+
+# Debugging & sanity checks.
+ls -l
+cat version.texi
+cat foo.info
+test -f foo.dvi
+
+$MAKE test-grepinfo
+$MAKE test-distfiles
+$MAKE test-distdir
+$MAKE distcheck
+
+:
diff --git a/t/txinfo-without-info-suffix.sh b/t/txinfo-without-info-suffix.sh
new file mode 100644
index 000000000..529596aab
--- /dev/null
+++ b/t/txinfo-without-info-suffix.sh
@@ -0,0 +1,57 @@
+#! /bin/sh
+# Copyright (C) 1997-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure .info-less @setfilename works.
+
+required='makeinfo tex texi2dvi'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+info_TEXINFOS = textutils.texi
+END
+
+cat > textutils.texi <<EOF
+\input texinfo
+@c dummy comment
+@setfilename textutils
+@settitle main
+@node Top
+Hello walls.
+@bye
+EOF
+
+$ACLOCAL
+$AUTOCONF
+AUTOMAKE_fails -a
+$EGREP '^(\./)?textutils\.texi:3:.*suffix-less info file' stderr
+
+$AUTOMAKE -a -Wno-obsolete
+
+grep '^INFO_DEPS.*textutils$' Makefile.in
+
+# We should not use single suffix inference rules (with separate
+# dependencies), this confuses Solaris make.
+grep '^\.texi:$' Makefile.in && exit 1
+grep 'textutils: *textutils\.texi' Makefile.in
+
+./configure
+$MAKE distcheck
+
+:
diff --git a/t/txinfo19.sh b/t/txinfo19.sh
new file mode 100644
index 000000000..45dd2f9ac
--- /dev/null
+++ b/t/txinfo19.sh
@@ -0,0 +1,72 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test support for DJGPP's .iNN info files.
+
+required=makeinfo
+. test-init.sh
+
+echo AC_OUTPUT >> configure.ac
+
+cat > Makefile.am << 'END'
+info_TEXINFOS = main.texi
+END
+
+cat > main.texi << 'END'
+\input texinfo
+@setfilename main.info
+@settitle main
+@node Top
+Hello walls.
+@bye
+END
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+$AUTOCONF
+
+./configure "--infodir=$(pwd)/_inst"
+$MAKE
+
+# Make sure .iNN files are installed.
+: > main.i1
+: > main.i21
+$MAKE install
+test -f _inst/main.i1
+test -f _inst/main.i21
+
+# They should be uninstalled too.
+$MAKE uninstall
+test ! -e _inst/main.i1
+test ! -e _inst/main.i21
+
+# Make sure rebuild rules erase old .iNN files when they run makeinfo.
+$sleep
+touch main.texi
+test -f main.i1
+test -f main.i21
+$MAKE
+test ! -e main.i1
+test ! -e main.i21
+
+# Finally, we also want them erased by maintainer-clean.
+: > main.i7
+: > main.i39
+$MAKE maintainer-clean
+test ! -e main.i7
+test ! -e main.i39
+
+:
diff --git a/t/txinfo23.sh b/t/txinfo23.sh
new file mode 100644
index 000000000..b684f9985
--- /dev/null
+++ b/t/txinfo23.sh
@@ -0,0 +1,69 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that info files are built in builddir when needed.
+# Test with subdir Texinfo.
+# (Similar to txinfo13.sh, plus DISTCLEANFILES).
+# (See also txinfo24.sh and txinfo25.sh).
+
+required='makeinfo tex texi2dvi'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+DISTCLEANFILES = subdir/*.info*
+info_TEXINFOS = subdir/main.texi
+subdir_main_TEXINFOS = subdir/inc.texi
+
+installcheck-local:
+ test -f "$(infodir)/main.info"
+END
+
+mkdir subdir
+
+cat > subdir/main.texi << 'END'
+\input texinfo
+@setfilename main.info
+@settitle main
+@node Top
+Hello walls.
+@include version.texi
+@include inc.texi
+@bye
+END
+
+cat > subdir/inc.texi << 'END'
+I'm included.
+END
+
+$ACLOCAL
+$AUTOCONF
+
+AUTOMAKE_run --add-missing -Wno-error
+grep "Makefile\.am:.*undocumented.* automake hack" stderr
+grep "Makefile\.am:.*'info-in-builddir' automake option" stderr
+
+mkdir build
+cd build
+../configure
+$MAKE distcheck
+test -f subdir/main.info
+test ! -e ../subdir/main.info
+
+:
diff --git a/t/txinfo24.sh b/t/txinfo24.sh
new file mode 100644
index 000000000..f3c908ce8
--- /dev/null
+++ b/t/txinfo24.sh
@@ -0,0 +1,83 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that info files are built in builddir when needed.
+# (Similar to txinfo16.sh, plus CLEANFILES).
+# (See also txinfo23.sh and txinfo25.sh).
+
+required='makeinfo tex texi2dvi'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+CLEANFILES = main.info
+info_TEXINFOS = main.texi
+END
+
+cat > main.texi << 'END'
+\input texinfo
+@setfilename main.info
+@settitle main
+@node Top
+Hello walls.
+@include version.texi
+@bye
+END
+
+$ACLOCAL
+$AUTOMAKE --add-missing -Wno-obsolete
+$AUTOCONF
+
+mkdir build
+cd build
+../configure
+$MAKE
+test ! -e ../main.info
+test -f main.info
+
+cd ..
+rm -rf build
+./configure
+$MAKE
+test -f main.info
+
+# Make sure stamp-vti is older that version.texi.
+# (A common situation in a real tree).
+test -f stamp-vti
+test -f version.texi
+$sleep
+touch stamp-vti
+
+$MAKE distclean
+test -f stamp-vti
+test -f version.texi
+
+mkdir build
+cd build
+../configure
+$MAKE
+# main.info should be rebuilt in the current directory.
+test -f main.info
+test ! -e ../main.info
+$MAKE dvi
+test -f main.dvi
+
+$MAKE distcheck
+
+:
diff --git a/t/txinfo25.sh b/t/txinfo25.sh
new file mode 100644
index 000000000..62237d351
--- /dev/null
+++ b/t/txinfo25.sh
@@ -0,0 +1,116 @@
+#! /bin/sh
+# Copyright (C) 2003-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that info files are built in builddir and in srcdir can safely
+# co-exist. This setup is obtained by having two info files, only one
+# of which being cleaned.
+# (Similar to txinfo16.sh, plus CLEANFILES).
+# (See also txinfo23.sh and txinfo24.sh).
+
+required='makeinfo tex texi2dvi'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+CLEANFILES = [a-m]*.info
+info_TEXINFOS = main.texi other.texi
+END
+
+cat > main.texi << 'END'
+\input texinfo
+@setfilename main.info
+@settitle main
+@node Top
+Hello walls.
+@include version.texi
+@bye
+END
+
+cat > other.texi << 'END'
+\input texinfo
+@setfilename other.info
+@settitle other
+@node Top
+Hello walls.
+@include version2.texi
+@bye
+END
+
+$ACLOCAL
+$AUTOCONF
+
+AUTOMAKE_fails --add-missing
+grep "Makefile\.am:.*undocumented.* automake hack" stderr
+grep "Makefile\.am:.*'info-in-builddir' automake option" stderr
+
+$AUTOMAKE --add-missing -Wno-obsolete
+
+mkdir build
+cd build
+../configure
+$MAKE
+test -f main.info
+test ! -e ../main.info
+test ! -e other.info
+test -f ../other.info
+
+cd ..
+rm -rf build
+./configure
+$MAKE
+test -f main.info
+test -f other.info
+
+# Make sure stamp-vti is older that version.texi.
+# (A common situation in a real tree).
+# This is needed to test the "subtle" issue described below.
+test -f stamp-vti
+test -f version.texi
+test -f stamp-1
+test -f version2.texi
+$sleep
+touch stamp-vti
+touch stamp-1
+
+$MAKE distclean
+test -f stamp-vti
+test -f stamp-1
+test -f version.texi
+test -f version2.texi
+
+mkdir build
+cd build
+../configure
+$MAKE
+# other.info should not be rebuilt in the current directory, since
+# it's up-to-date in $(srcdir).
+# This can be caused by a subtle issue related to VPATH handling
+# of version.texi (see also the comment in texi-vers.am): because
+# stamp-vti is newer than version.texi, the 'version.texi: stamp-vti'
+# rule is always triggered. Still that's not a reason for 'make'
+# to think 'version.texi' has been created...
+test -f main.info
+test ! -e other.info
+$MAKE dvi
+test -f main.dvi
+test -f other.dvi
+
+$MAKE distcheck
+
+:
diff --git a/t/txinfo28.sh b/t/txinfo28.sh
new file mode 100644
index 000000000..27974bd42
--- /dev/null
+++ b/t/txinfo28.sh
@@ -0,0 +1,89 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that info files are built in builddir when needed.
+# Similar to txinfo24.sh, but obfuscating filenames with variable
+# references.
+# Report from Ralf Corsepius.
+
+required='makeinfo tex texi2dvi'
+. test-init.sh
+
+# This setting, when honored by GNU ls, used to cause an infinite loop
+# in mdate-sh.
+TIME_STYLE="+%Y-%m-%d %H:%M:%S"
+export TIME_STYLE
+
+echo AC_OUTPUT >> configure.ac
+
+cat > Makefile.am << 'END'
+MA = ma
+IN = in
+PROJ = $(MA)$(IN)
+include fragment.mk
+info_TEXINFOS = ma$(IN).texi
+END
+
+echo 'CLEANFILES = $(PROJ).info' > fragment.mk
+
+cat > main.texi << 'END'
+\input texinfo
+@setfilename main.info
+@settitle main
+@node Top
+Hello walls.
+@include version.texi
+@bye
+END
+
+$ACLOCAL
+$AUTOMAKE --add-missing -Wno-error
+$AUTOCONF
+
+mkdir build
+cd build
+../configure
+$MAKE
+test -f main.info
+
+cd ..
+rm -rf build
+./configure
+$MAKE
+test -f main.info
+
+# Make sure stamp-vti is older that version.texi.
+# (A common situation in a real tree).
+test -f stamp-vti
+test -f version.texi
+$sleep
+touch stamp-vti
+
+$MAKE distclean
+test -f stamp-vti
+test -f version.texi
+
+mkdir build
+cd build
+../configure
+$MAKE
+# main.info should be rebuilt in the current directory.
+test -f main.info
+test ! -e ../main.info
+$MAKE dvi
+test -f main.dvi
+
+$MAKE distcheck
diff --git a/t/uninstall-fail.sh b/t/uninstall-fail.sh
new file mode 100644
index 000000000..d712f8c6f
--- /dev/null
+++ b/t/uninstall-fail.sh
@@ -0,0 +1,101 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# "make uninstall" complains and errors out on failures.
+
+# FIXME: this test only deal with DATA primary; maybe we need sister
+# tests for other primaries too? E.g., SCRIPTS, PROGRAMS, LISP, PYTHON,
+# etc...
+
+. test-init.sh
+
+mkdir d
+: > d/f
+chmod a-w d || skip "cannot make directories unwritable"
+
+# On Solaris 10, if '/bin/rm' is run with the '-f' option, it doesn't
+# print any error message when failing to remove a file (due to e.g.,
+# "Permission denied"). And it gets weirder. On OpenIndiana 11, the
+# /bin/sh shell (in many respects a decent POSIX shell) seems to somehow
+# "eat" the error message from 'rm' in some situation, although the 'rm'
+# utility itself correctly prints it when invoked from (say) 'env' or
+# 'bash'. Yikes.
+# We'll cater to these incompatibilities by relaxing a test below if
+# a faulty shell or 'rm' program is detected.
+st=0; $SHELL -c 'rm -f d/f' 2>stderr || st=$?
+cat stderr >&2
+test $st -gt 0 || skip_ "can delete files from unwritable directories"
+if grep 'rm:' stderr; then
+ rm_f_is_silent_on_error=no
+else
+ rm_f_is_silent_on_error=yes
+fi
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+data_DATA = foobar.txt
+END
+
+: > foobar.txt
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+# Weird name, to make it harder to experience false positives when
+# grepping error messages.
+inst=__inst-dir__
+
+./configure --prefix="$(pwd)/$inst"
+
+mkdir $inst $inst/share
+: > $inst/share/foobar.txt
+
+chmod a-w $inst/share
+run_make -M -e FAIL uninstall
+if test $rm_f_is_silent_on_error = yes; then
+ : "rm -f" is silent on errors, skip the grepping of make output
+else
+ grep "rm: .*foobar\.txt" output
+fi
+
+chmod a-rwx $inst/share
+(cd $inst/share) && skip_ "cannot make directories fully unreadable"
+
+run_make -M -e FAIL uninstall
+
+# Some shells, like Solaris 10 /bin/ksh and /usr/xpg4/bin/sh, do not
+# report the name of the 'cd' builtin upon a chdir error:
+#
+# $ /bin/ksh -c 'cd /none'
+# /bin/ksh: /none: not found
+#
+# and also print a line number in the error message *if the command
+# contains newlines*:
+#
+# $ /bin/ksh -c 'cd unreadable'
+# /bin/ksh: unreadable: permission denied
+# $ /bin/ksh -c '\
+# > \
+# > cd unreadable'
+# /bin/ksh[3]: unreadable: permission denied
+
+$EGREP "(cd|sh)(\[[0-9]*[0-9]\])?: .*$inst/share" output
+
+:
diff --git a/t/uninstall-pr9578.sh b/t/uninstall-pr9578.sh
new file mode 100644
index 000000000..5be96c77e
--- /dev/null
+++ b/t/uninstall-pr9578.sh
@@ -0,0 +1,67 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check against automake bug#9578: "make uninstall" issued before
+# "make install" or after a mere "make install-data" or a mere
+# "make install-exec" failed spuriously.
+#
+# FIXME: this test only deal with DATA and script primaries; maybe we
+# need sister tests for other primaries too? E.g., PROGRAMS, LISP,
+# PYTHON, etc...
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_OUTPUT
+END
+
+: > foo
+: > bar
+
+cat > Makefile.am << 'END'
+bin_SCRIPTS = foo
+data_DATA = bar
+END
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+./configure --prefix="$(pwd)/inst"
+
+$MAKE uninstall
+test ! -e inst
+
+rm -rf inst
+
+$MAKE install-exec
+test -f inst/bin/foo || exit 99 # Sanity check.
+$MAKE uninstall
+test ! -e inst/bin/foo
+
+$MAKE install-data
+test -f inst/share/bar || exit 99 # Sanity check.
+$MAKE uninstall
+test ! -e inst/share/bar
+
+rm -rf inst
+
+$MAKE install-exec
+test -f inst/bin/foo || exit 99 # Sanity check.
+$MAKE uninstall
+test ! -e inst/bin/foo
+
+:
diff --git a/t/unused.sh b/t/unused.sh
new file mode 100644
index 000000000..78a97d095
--- /dev/null
+++ b/t/unused.sh
@@ -0,0 +1,35 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for failing check for unused macros. From Johan Danielsson.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+MACRO_1
+MACRO_1_2
+MACRO_1_2_3
+END
+
+cat > acinclude.m4 << 'END'
+AC_DEFUN([MACRO_1], echo 1)
+AC_DEFUN([MACRO_1_2], echo 12)
+AC_DEFUN([MACRO_1_2_3], echo 123)
+END
+
+$ACLOCAL 2>stderr || { cat stderr >&2; exit 1; }
+cat stderr >&2
+test ! -s stderr
diff --git a/t/upc.sh b/t/upc.sh
new file mode 100644
index 000000000..e6453f60d
--- /dev/null
+++ b/t/upc.sh
@@ -0,0 +1,50 @@
+#! /bin/sh
+# Copyright (C) 2006-2017 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 <https://www.gnu.org/licenses/>.
+
+# A simple Hello World for UPC.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AM_PROG_UPC
+AC_OUTPUT
+END
+
+cat > hello.upc << 'END'
+#include <stdio.h>
+#include <upc.h>
+int
+main (void)
+{
+ printf ("Thread %d says, 'Hello.'\n", MYTHREAD);
+ return 0;
+}
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = hello
+hello_SOURCES = hello.upc
+hello_LDADD = -lm
+END
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+./configure || exit $?
+$MAKE distcheck
+
+:
diff --git a/t/upc2.sh b/t/upc2.sh
new file mode 100644
index 000000000..0b2c801ed
--- /dev/null
+++ b/t/upc2.sh
@@ -0,0 +1,31 @@
+#! /bin/sh
+# Copyright (C) 2006-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test that Automake suggests using AM_PROG_UPC if Unified Parallel C
+# sources are used.
+
+. test-init.sh
+
+echo AC_PROG_CC >>configure.ac
+
+cat >Makefile.am <<'END'
+bin_PROGRAMS = hello
+hello_SOURCES = hello.upc
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+grep AM_PROG_UPC stderr
diff --git a/t/upc3.sh b/t/upc3.sh
new file mode 100644
index 000000000..c5dce2607
--- /dev/null
+++ b/t/upc3.sh
@@ -0,0 +1,65 @@
+#! /bin/sh
+# Copyright (C) 2006-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test that C and Unified Parallel C link safely.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_UPC
+AC_OUTPUT
+END
+
+cat > hello.upc << 'END'
+#include <stdio.h>
+#include <upc.h>
+#include "message.h"
+int
+main (void)
+{
+ printf ("Thread %d says, '%s'\n", MYTHREAD, message());
+ return 0;
+}
+END
+
+cat > message.h << 'END'
+const char *message (void);
+END
+
+cat > mix.c << 'END'
+#include "message.h"
+const char *
+message (void)
+{
+ return "Hello.";
+}
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = hello
+hello_SOURCES = hello.upc mix.c message.h
+hello_LDADD = -lm
+END
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+./configure || exit $?
+$MAKE distcheck
+
+:
diff --git a/t/vala-configure.sh b/t/vala-configure.sh
new file mode 100644
index 000000000..b7ba9db14
--- /dev/null
+++ b/t/vala-configure.sh
@@ -0,0 +1,118 @@
+#! /bin/sh
+# Copyright (C) 2008-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test AM_PROG_VALAC.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_VALAC([1.2.3])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+has-valac:
+ case '$(VALAC)' in */bin/valac) exit 0;; *) exit 1;; esac
+no-valac:
+ test x'$(VALAC)' = x'valac'
+END
+
+mkdir bin
+cat > bin/valac << 'END'
+#! /bin/sh
+if test "x$1" = x--version; then
+ echo "${vala_version-1.2.3}"
+fi
+exit 0
+END
+chmod +x bin/valac
+
+cat > bin/valac.old << 'END'
+#! /bin/sh
+if test "x$1" = x--version; then
+ echo 0.1
+fi
+exit 0
+END
+chmod +x bin/valac.old
+
+PATH=$(pwd)/bin$PATH_SEPARATOR$PATH; export PATH
+
+# Avoid interferences from the environment.
+unset VALAC vala_version
+
+$ACLOCAL
+$AUTOMAKE -a
+$AUTOCONF
+
+st=0; ./configure 2>stderr || st=$?
+cat stderr >&2
+grep 'WARNING.*vala' stderr && exit 1
+test $st -eq 0
+$MAKE has-valac
+
+st=0; vala_version=99.9 ./configure 2>stderr || st=$?
+cat stderr >&2
+grep 'WARNING.*vala' stderr && exit 1
+test $st -eq 0
+$MAKE has-valac
+
+st=0; vala_version=0.1.2 ./configure 2>stderr || st=$?
+cat stderr >&2
+test $st -eq 0
+grep '^configure: WARNING: no proper vala compiler found' stderr
+$MAKE no-valac
+
+st=0; ./configure VALAC="$(pwd)/bin/valac.old" 2>stderr || st=$?
+cat stderr >&2
+test $st -eq 0 || exit 1
+grep '^configure: WARNING: no proper vala compiler found' stderr
+$MAKE no-valac
+
+sed 's/^\(AM_PROG_VALAC\).*/\1([1], [: > ok], [: > ko])/' <configure.ac >t
+mv -f t configure.ac
+rm -rf autom4te*.cache
+$ACLOCAL
+$AUTOCONF
+
+st=0; ./configure 2>stderr || st=$?
+cat stderr >&2
+grep 'WARNING.*vala' stderr && exit 1
+test -f ok
+test ! -e ko
+$MAKE has-valac
+rm -f ok ko
+
+st=0; vala_version=0.1.2 ./configure 2>stderr || st=$?
+cat stderr >&2
+grep 'WARNING.*vala' stderr && exit 1
+test $st -eq 0
+test ! -e ok
+test -f ko
+$MAKE no-valac
+rm -f ok ko
+
+st=0; ./configure VALAC="$(pwd)/bin/valac.old" 2>stderr || st=$?
+cat stderr >&2
+grep 'WARNING.*vala' stderr && exit 1
+test $st -eq 0
+test ! -e ok
+test -f ko
+$MAKE no-valac
+rm -f ok ko
+
+:
diff --git a/t/vala-grepping.sh b/t/vala-grepping.sh
new file mode 100644
index 000000000..528b9faad
--- /dev/null
+++ b/t/vala-grepping.sh
@@ -0,0 +1,86 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Basic "grepping" test on vala support.
+
+. test-init.sh
+
+# So that we won't require libtool macros.
+cat > acinclude.m4 <<'END'
+AC_DEFUN([AC_PROG_LIBTOOL],
+ [AC_SUBST([LIBTOOL], [:])])
+END
+
+cat >> 'configure.ac' << 'END'
+AC_PROG_CC
+AC_PROG_CXX
+AM_PROG_AR
+AC_PROG_LIBTOOL
+AM_PROG_VALAC
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+SUBDIRS = sub
+
+bin_PROGRAMS = zardoz
+zardoz_SOURCES = zardoz.vala
+zardoz_VALAFLAGS = --debug
+
+lib_LTLIBRARIES = libzardoz.la
+libzardoz_la_SOURCES = zardoz-foo.vala zardoz-bar.vala
+END
+
+mkdir sub
+
+cat > sub/Makefile.am <<'END'
+bin_PROGRAMS = foo
+foo_SOURCES = bar.vala baz.vala mu.c zap.cxx
+END
+
+: > ltmain.sh
+: > config.sub
+: > config.guess
+
+$ACLOCAL
+$AUTOMAKE -a
+
+grep '\$(VALAC).* \$(AM_VALAFLAGS) \$(VALAFLAGS) ' Makefile.in
+grep '\$(VALAC).* \$(zardoz_VALAFLAGS) \$(VALAFLAGS) ' Makefile.in
+$FGREP 'am_zardoz_OBJECTS' Makefile.in
+$FGREP 'am_libzardoz_la_OBJECTS' Makefile.in
+$FGREP 'zardoz_vala.stamp:' Makefile.in
+$FGREP 'libzardoz_la_vala.stamp:' Makefile.in
+test $($FGREP -c '.stamp:' Makefile.in) -eq 2
+$FGREP 'zardoz.c' Makefile.in
+$FGREP 'zardoz-foo.c' Makefile.in
+$FGREP 'zardoz-bar.c' Makefile.in
+
+grep '\$(VALAC).* \$(AM_VALAFLAGS) \$(VALAFLAGS) ' sub/Makefile.in
+$FGREP 'foo_VALAFLAGS' sub/Makefile.in && exit 1
+$FGREP 'am_foo_OBJECTS' sub/Makefile.in
+$FGREP 'bar.c' sub/Makefile.in
+$FGREP 'baz.c' sub/Makefile.in
+$FGREP 'foo_vala.stamp:' sub/Makefile.in
+test $($FGREP -c '.stamp:' sub/Makefile.in) -eq 1
+
+# Check against regression for weird bug due to unescaped '@'
+# characters used in a "..." perl string when writing the vala
+# rules from automake.in.
+grep '\$[0-9][0-9]*t' Makefile.in sub/Makefile.in && exit 1
+
+:
diff --git a/t/vala-headers.sh b/t/vala-headers.sh
new file mode 100644
index 000000000..07f471c25
--- /dev/null
+++ b/t/vala-headers.sh
@@ -0,0 +1,85 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure compiling Vala code really works with recursive make.
+
+required="pkg-config valac gcc GNUmake"
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_VALAC([0.7.0])
+PKG_CHECK_MODULES([GOBJECT], [gobject-2.0 >= 2.4])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = zardoz quux
+
+zardoz_SOURCES = zardoz.vala
+quux_SOURCES = quux.vala
+quux.vala: zardoz.vala
+ sed 's/Zardoz/Quux/' <zardoz.vala >quux.vala
+
+quux_VALAFLAGS = \
+ --header HDR.h \
+ --vapi hello.vapi
+
+zardoz_VALAFLAGS = \
+ -H foo.h \
+ --internal-header foo2.h \
+ --internal-vapi foo3.vapi
+
+AM_CFLAGS = $(GOBJECT_CFLAGS)
+LDADD = $(GOBJECT_LIBS)
+END
+
+headers='HDR.h hello.vapi foo.h foo2.h foo3.vapi'
+
+cat > zardoz.vala << 'END'
+using GLib;
+public class Zardoz {
+ public static void main () {
+ stdout.printf ("Zardoz!\n");
+ }
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+$MAKE
+
+# Test rebuild rules.
+
+for h in $headers; do
+ rm -f $h
+ $MAKE $h
+ test -f $h
+done
+
+rm -f $headers
+$MAKE $headers
+for h in $headers; do test -f $h; done
+
+$MAKE distcheck
+
+$MAKE maintainer-clean
+for h in $headers; do test ! -e $h; done
+
+:
diff --git a/t/vala-libs.sh b/t/vala-libs.sh
new file mode 100644
index 000000000..60e41579d
--- /dev/null
+++ b/t/vala-libs.sh
@@ -0,0 +1,100 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Building libraries (libtool and static) from Vala sources.
+# And use of vapi files to call C code from Vala.
+
+required="valac cc pkg-config libtoolize GNUmake"
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+AC_PROG_LIBTOOL
+AM_PROG_VALAC([0.7.3])
+PKG_CHECK_MODULES([GOBJECT], [gobject-2.0 >= 2.4])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = subdir-objects
+lib_LIBRARIES = libmu.a
+lib_LTLIBRARIES = src/libzardoz.la
+libmu_a_SOURCES = mu.vala mu2.c mu.vapi mu2.h
+libmu_a_CPPFLAGS = -DOKOKIMDEFINED=1
+libmu_a_VALAFLAGS = --vapidir=$(srcdir)
+AM_CFLAGS = $(GOBJECT_CFLAGS)
+src_libzardoz_la_LIBADD = $(GOBJECT_LIBS)
+src_libzardoz_la_SOURCES = src/zardoz-foo.vala src/zardoz-bar.vala
+src/zardoz-bar.vala: src/zardoz-foo.vala
+ sed 's/Foo/Bar/g' $< >$@
+END
+
+libtoolize
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+cat > mu2.c << 'END'
+#include "mu2.h"
+int mu2 (void)
+{
+ return OKOKIMDEFINED;
+}
+END
+
+cat > mu2.h << 'END'
+int mu2 (void);
+END
+
+cat > mu.vapi <<'END'
+[CCode (cheader_filename = "mu2.h", cname = "mu2")]
+public int c_mu2 ();
+END
+
+cat > mu.vala << 'END'
+int main ()
+{
+ stdout.printf ("mumumu\n");
+ return c_mu2 ();
+}
+END
+
+mkdir -p src
+cat > src/zardoz-foo.vala << 'END'
+using GLib;
+public class Foo {
+ public static void zap () {
+ stdout.printf ("FooFooFoo!\n");
+ }
+}
+END
+
+$MAKE
+test -f libmu.a
+test -f src/libzardoz.la
+$FGREP "mumumu" mu.c
+$FGREP "FooFooFoo" src/zardoz-foo.c
+$FGREP "BarBarBar" src/zardoz-bar.c
+test -f libmu_a_vala.stamp
+test -f src_libzardoz_la_vala.stamp
+
+$MAKE distcheck
+
+:
diff --git a/t/vala-mix.sh b/t/vala-mix.sh
new file mode 100644
index 000000000..384efa9ac
--- /dev/null
+++ b/t/vala-mix.sh
@@ -0,0 +1,125 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Vala sources and C sources in the same program. Functional test.
+
+required='valac cc pkg-config GNUmake'
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_PROG_CC
+AM_PROG_VALAC([0.7.3])
+PKG_CHECK_MODULES([GOBJECT], [gobject-2.0 >= 2.4])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+bin_PROGRAMS = zardoz mu baz
+AM_CFLAGS = $(GOBJECT_CFLAGS)
+LDADD = $(GOBJECT_LIBS)
+zardoz_SOURCES = foo.vala bar.c
+mu_SOURCES = 1.vala 2.c
+mu_VALAFLAGS = --main=run
+mu_CFLAGS = -DHAVE_MU $(AM_CFLAGS)
+baz_SOURCES = baz.c
+END
+
+if ! cross_compiling; then
+ unindent >> Makefile.am <<'END'
+ check-local:
+ ./zardoz
+ ./mu
+ ./zardoz | grep "foo is alive"
+ ./mu | grep "Howdy, World!"
+END
+fi
+
+cat > foo.vala <<'END'
+int main ()
+{
+ stdout.printf ("foo is alive\n");
+ return 0;
+}
+END
+
+echo 'extern int i = 0;' > bar.c
+
+cat > 1.vala <<'END'
+int run ()
+{
+ stdout.printf ("Howdy, World!\n");
+ return 0;
+}
+END
+
+cat > 2.c <<'END'
+#ifdef HAVE_MU
+int all_is_ok = 1;
+#else
+#error "HAVE_MU no defined"
+chocke me
+#endif
+END
+
+# For automake bug#11229.
+cat > baz.c <<'END'
+int main (void)
+{
+ return 0;
+}
+END
+
+$ACLOCAL
+$AUTOMAKE -a
+$AUTOCONF
+
+./configure
+
+$MAKE all
+ls -l # For debugging.
+$MAKE check
+
+have_generated_files ()
+{
+ test -f mu_vala.stamp
+ test -f zardoz_vala.stamp
+ test -f foo.c
+ test -f 1.c
+}
+
+# Our vala-related rules must create stamp files and intermediate
+# C files.
+have_generated_files
+
+# Remake rules are not uselessly triggered.
+$MAKE -q
+$MAKE -n | $FGREP vala.stamp && exit 1
+
+# Check the distribution.
+$MAKE distcheck
+
+# Stamp files and intermediate C files should *not* be removed
+# by "make clean".
+$MAKE clean
+have_generated_files
+
+# But stamp files should be removed by "maintainer-clean" (the
+# behaviour w.r.t. intermediate C files is still unclear, and
+# better left undefined for the moment).
+$MAKE maintainer-clean
+ls *vala*.stamp | grep . && exit 1
+
+:
diff --git a/t/vala-mix2.sh b/t/vala-mix2.sh
new file mode 100644
index 000000000..35f3abda6
--- /dev/null
+++ b/t/vala-mix2.sh
@@ -0,0 +1,122 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Vala sources, C and C++ sources and C and C++ headers in the same
+# program. Functional test. See automake bug#10894.
+
+required='valac cc c++ pkg-config GNUmake'
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_PROG_CC
+AC_PROG_CXX
+AM_PROG_VALAC([0.7.3])
+PKG_CHECK_MODULES([GOBJECT], [gobject-2.0 >= 2.4])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+bin_PROGRAMS = zardoz
+AM_CFLAGS = $(GOBJECT_CFLAGS)
+zardoz_LDADD = $(GOBJECT_LIBS)
+zardoz_SOURCES = zardoz.vala foo.h bar.c baz.c zen.hh master.cxx
+END
+
+cat > zardoz.vala <<'END'
+int main ()
+{
+ stdout.printf ("foo is alive\n");
+ return 0;
+}
+END
+
+cat > foo.h <<'END'
+int foo;
+int bar (void);
+int baz (void);
+END
+
+cat > bar.c <<'END'
+#include "foo.h"
+int bar (void) { return foo + baz (); }
+END
+
+cat > baz.c <<'END'
+#include "foo.h"
+extern int foo = 0;
+int baz (void) { return 0; }
+END
+
+cat > zen.hh <<'END'
+#include <iostream>
+END
+
+cat > master.cxx <<'END'
+#include "zen.hh"
+void chatty (void) { std::cout << "Hello, stranger!\n"; }
+END
+
+$ACLOCAL
+$AUTOMAKE -a
+$AUTOCONF
+
+# Do not reject slower dependency extractors.
+./configure --enable-dependency-tracking
+
+$MAKE all
+ls -l # For debugging.
+
+have_generated_files ()
+{
+ test -f zardoz_vala.stamp
+ test -f zardoz.c
+}
+
+# Our vala-related rules must create stamp files and intermediate
+# C files.
+have_generated_files
+
+# Remake rules are not uselessly triggered.
+$MAKE -q
+$MAKE -n | $FGREP vala.stamp && exit 1
+
+# But are triggered when they should.
+for file in zardoz.vala foo.h bar.c baz.c zen.hh master.cxx; do
+ $sleep
+ echo '& choke me !' >> $file
+ $MAKE && exit 1
+ $sleep
+ sed '$d' $file > t
+ mv -f t $file
+ $MAKE
+done
+
+# Check the distribution.
+$MAKE distcheck
+
+# Stamp files and intermediate C files should *not* be removed
+# by "make clean".
+$MAKE clean
+ls -l # For debugging.
+have_generated_files
+
+# But stamp files should be removed by "maintainer-clean" (the
+# behaviour w.r.t. intermediate C files is still unclear, and
+# better left undefined for the moment).
+$MAKE maintainer-clean
+ls *vala*.stamp | grep . && exit 1
+
+:
diff --git a/t/vala-non-recursive-setup.sh b/t/vala-non-recursive-setup.sh
new file mode 100644
index 000000000..6c20d9662
--- /dev/null
+++ b/t/vala-non-recursive-setup.sh
@@ -0,0 +1,94 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure compiling Vala code really works with non-recursive make.
+
+required="pkg-config valac gcc GNUmake"
+. test-init.sh
+
+mkdir src
+
+cat >> 'configure.ac' << 'END'
+AC_PROG_CC
+AM_PROG_VALAC([0.7.0])
+PKG_CHECK_MODULES([GOBJECT], [gobject-2.0 >= 2.4])
+AC_OUTPUT
+END
+
+cat > 'src/zardoz.vala' <<'END'
+using GLib;
+
+public class Zardoz {
+ public static void main () {
+ stdout.printf ("Zardoz!\n");
+ }
+}
+END
+
+cat > 'Makefile.am' <<'END'
+AUTOMAKE_OPTIONS = subdir-objects
+bin_PROGRAMS = src/zardoz
+src_zardoz_CFLAGS = $(GOBJECT_CFLAGS)
+src_zardoz_LDADD = $(GOBJECT_LIBS)
+src_zardoz_SOURCES = src/zardoz.vala
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+$MAKE
+test -f src/zardoz.c
+test -f src_zardoz_vala.stamp
+$MAKE distcheck
+$MAKE maintainer-clean
+test ! -e src/zardoz.c
+test ! -e src_zardoz_vala.stamp
+
+mkdir build
+cd build
+../configure
+$MAKE
+$MAKE distcheck
+
+cd ..
+rm -rf build
+
+# Try again with subdir-objects.
+
+cat > 'Makefile.am' <<'END'
+AUTOMAKE_OPTIONS = subdir-objects
+
+bin_PROGRAMS = src/zardoz
+src_zardoz_CFLAGS = $(GOBJECT_CFLAGS)
+src_zardoz_LDADD = $(GOBJECT_LIBS)
+src_zardoz_SOURCES = src/zardoz.vala
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure || skip_ "configure failure"
+$MAKE
+$MAKE distcheck
+$MAKE distclean
+mkdir build
+cd build
+../configure
+$MAKE
+$MAKE distcheck
diff --git a/t/vala-parallel.sh b/t/vala-parallel.sh
new file mode 100644
index 000000000..24a66c613
--- /dev/null
+++ b/t/vala-parallel.sh
@@ -0,0 +1,76 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Vala support with parallel make.
+
+required='valac cc pkg-config GNUmake'
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_PROG_CC
+AC_PROG_CXX
+PKG_CHECK_MODULES([GOBJECT], [gobject-2.0 >= 2.4])
+AM_PROG_VALAC([0.7.3])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+bin_PROGRAMS = zardoz
+AM_CFLAGS = $(GOBJECT_CFLAGS)
+LDADD = $(GOBJECT_LIBS)
+zardoz_SOURCES = main.vala 1.vala 2.vala 3.vala 4.vala 5.vala 6.vala
+END
+
+echo 'int main () {' > main.vala
+for i in 1 2 3 4 5 6; do
+ echo "void foo$i () { stdout.printf (\"ok $i\\n\"); }" > $i.vala
+ echo "foo$i ();" >> main.vala
+done
+echo 'return 0; }' >> main.vala
+
+cat main.vala # For debugging.
+
+$ACLOCAL
+$AUTOMAKE -a
+$AUTOCONF
+
+./configure
+
+$MAKE -j3
+ls -l # For debugging.
+for x in main 1 2 3 4 5 6; do test -f $x.c; done
+test -f zardoz_vala.stamp
+
+$MAKE maintainer-clean -j4
+ls -l # For debugging.
+for x in main 1 2 3 4 5 6; do test ! -e $x.c; done
+test ! -e zardoz_vala.stamp
+
+mkdir build
+cd build
+../configure
+$MAKE -j6
+ls -l . .. # For debugging.
+for x in main 1 2 3 4 5 6; do test -f ../$x.c; done
+test -f ../zardoz_vala.stamp
+
+$MAKE distcheck -j4
+
+$MAKE maintainer-clean -j2
+for x in main 1 2 3 4 5 6; do test ! -e ../$x.c; done
+test ! -e ../zardoz_vala.stamp
+
+:
diff --git a/t/vala-per-target-flags.sh b/t/vala-per-target-flags.sh
new file mode 100644
index 000000000..e0cf7ddb1
--- /dev/null
+++ b/t/vala-per-target-flags.sh
@@ -0,0 +1,100 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test per-target flags in vala support.
+
+required="pkg-config valac gcc GNUmake"
+. test-init.sh
+
+mkdir src
+
+cat >> configure.ac <<'END'
+AC_PROG_CC
+AM_PROG_VALAC([0.7.0])
+PKG_CHECK_MODULES([GOBJECT], [gobject-2.0 >= 2.4])
+AC_CONFIG_FILES([src/Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+SUBDIRS = src
+END
+
+cat > src/Makefile.am <<'END'
+bin_PROGRAMS = foo bar
+foo_CFLAGS = $(GOBJECT_CFLAGS)
+foo_LDADD = $(GOBJECT_LIBS)
+foo_SOURCES = xfoo.vala
+bar_SOURCES = xbar.vala
+bar_VALAFLAGS = -D BAR
+bar_CFLAGS = $(GOBJECT_CFLAGS)
+bar_LDADD = $(GOBJECT_LIBS)
+END
+
+cat > src/xfoo.vala <<'END'
+int main ()
+{
+ stdout.printf ("foo\n");
+ return 0;
+}
+END
+
+cat > src/xbar.vala <<'END'
+void main ()
+{
+#if BAR
+ stdout.printf ("bar\n");
+#else
+ stdout.oops_an_invalid_method ();
+#endif
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+$MAKE
+
+if ! cross_compiling; then
+ ./src/foo
+ ./src/bar
+ test "$(./src/foo)" = foo
+ test "$(./src/bar)" = bar
+fi
+
+# Test clean rules.
+
+cp config.status config.sav
+
+$MAKE clean
+test -f src/xfoo.c
+test -f src/xbar.c
+
+$MAKE distclean
+test -f src/xfoo.c
+test -f src/xbar.c
+
+# Re-create Makefile.
+mv config.sav config.status
+./config.status
+
+$MAKE maintainer-clean
+test ! -e src/xfoo.c
+test ! -e src/xbar.c
+
+:
diff --git a/t/vala-recursive-setup.sh b/t/vala-recursive-setup.sh
new file mode 100644
index 000000000..5404e8f8e
--- /dev/null
+++ b/t/vala-recursive-setup.sh
@@ -0,0 +1,107 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure compiling Vala code really works with recursive make.
+
+required="pkg-config valac gcc GNUmake"
+. test-init.sh
+
+mkdir src
+
+cat >> 'configure.ac' << 'END'
+AC_PROG_CC
+AM_PROG_VALAC([0.7.0])
+PKG_CHECK_MODULES([GOBJECT], [gobject-2.0 >= 2.4])
+AC_CONFIG_FILES([src/Makefile])
+AC_OUTPUT
+END
+
+cat > 'Makefile.am' <<'END'
+SUBDIRS = src
+END
+
+cat > 'src/Makefile.am' <<'END'
+bin_PROGRAMS = zardoz
+zardoz_VALAFLAGS = -H zardoz.h
+zardoz_CFLAGS = $(GOBJECT_CFLAGS)
+zardoz_LDADD = $(GOBJECT_LIBS)
+zardoz_SOURCES = zardoz.vala
+END
+
+cat > 'src/zardoz.vala' <<'END'
+using GLib;
+
+public class Zardoz {
+ public static void main () {
+ stdout.printf ("Zardoz!\n");
+ }
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+$MAKE
+
+# Test rebuild rules.
+
+rm -f src/zardoz.h
+$MAKE -C src zardoz.h
+test -f src/zardoz.h
+rm -f src/zardoz.c
+$MAKE -C src
+test -f src/zardoz.c
+
+echo am--error > src/zardoz.h
+echo am--error > src/zardoz.c
+$sleep
+touch src/zardoz.vala
+$MAKE
+grep 'am--error' src/zardoz.[ch] && exit 1
+
+# Check the distribution.
+
+$MAKE distcheck
+$MAKE distclean
+
+# Tru a VPATH setup.
+
+mkdir build
+cd build
+../configure
+$MAKE
+$MAKE distcheck
+
+# Test rebuild rules from builddir.
+
+rm -f ../src/zardoz.h
+$MAKE -C src ../../src/zardoz.h
+test -f ../src/zardoz.h
+
+rm -f ../src/zardoz.c
+$MAKE
+grep 'Zardoz!' ../src/zardoz.c
+
+$sleep
+sed 's/Zardoz!/FooBar!/' ../src/zardoz.vala > t
+mv -f t ../src/zardoz.vala
+$MAKE
+grep 'FooBar!' ../src/zardoz.c
+grep 'Zardoz!' ../src/zardoz.c && exit 1
+
+:
diff --git a/t/vala-vapi.sh b/t/vala-vapi.sh
new file mode 100644
index 000000000..67bdbd24d
--- /dev/null
+++ b/t/vala-vapi.sh
@@ -0,0 +1,95 @@
+#! /bin/sh
+# Copyright (C) 2012-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test and that vapi files are correctly handled by Vala support.
+
+required='pkg-config valac cc GNUmake'
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_PROG_CC
+AM_PROG_VALAC([0.7.3])
+PKG_CHECK_MODULES([GOBJECT], [gobject-2.0 >= 2.4])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+bin_PROGRAMS = zardoz
+AM_CFLAGS = $(GOBJECT_CFLAGS)
+LDADD = $(GOBJECT_LIBS)
+zardoz_SOURCES = zardoz.vala foo.vapi foo.h
+END
+
+cat > zardoz.vala <<'END'
+using GLib;
+public class Zardoz {
+ public static void main () {
+ stdout.printf (BARBAR);
+ }
+}
+END
+
+# Use printf, not echo, to avoid '\n' being considered and escape
+# sequence and printed as a newline in 'foo.h'.
+printf '%s\n' '#define BARBAR "Zardoz!\n"' > foo.h
+
+cat > foo.vapi <<'END'
+[CCode (cprefix="", lower_case_cprefix="", cheader_filename="foo.h")]
+public const string BARBAR;
+END
+
+if ! cross_compiling; then
+ unindent >> Makefile.am <<'END'
+ check-local: test2
+ .PHONY: test1 test2
+ test1:
+ ./zardoz
+ ./zardoz | grep 'Zardoz!'
+ test2:
+ ./zardoz
+ ./zardoz | grep 'Quux!'
+END
+fi
+
+$ACLOCAL
+$AUTOMAKE -a
+$AUTOCONF
+
+./configure --enable-dependency-tracking
+
+$MAKE
+ls -l # For debugging.
+cat zardoz.c # Likewise.
+grep 'BARBAR' zardoz.c
+cross_compiling || $MAKE test1 || exit 1
+
+# Simple check on remake rules.
+$sleep
+# Use printf, not echo, to avoid '\n' being considered and escape
+# sequence and printed as a newline in 'foo.h'.
+printf '%s\n' '#define BAZBAZ "Quux!\n"' > foo.h
+sed 's/BARBAR/BAZBAZ/' zardoz.vala > t && mv -f t zardoz.vala || exit 99
+$MAKE && exit 1
+sed 's/BARBAR/BAZBAZ/' foo.vapi > t && mv -f t foo.vapi || exit 99
+$MAKE
+cat zardoz.c # For debugging.
+grep 'BAZBAZ' zardoz.c
+cross_compiling || $MAKE test2 || exit 1
+
+# Check the distribution.
+$MAKE distcheck
+
+:
diff --git a/t/vala-vpath.sh b/t/vala-vpath.sh
new file mode 100644
index 000000000..5a841c6be
--- /dev/null
+++ b/t/vala-vpath.sh
@@ -0,0 +1,93 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure vala support handles from-scratch VPATH builds.
+# See automake bug#8753.
+
+required="cc valac pkg-config GNUmake"
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_SRCDIR([hello.vala])
+AC_PROG_CC
+AM_PROG_VALAC([0.7.3])
+PKG_CHECK_MODULES([GOBJECT], [gobject-2.0 >= 2.4])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+bin_PROGRAMS = foo bar
+AM_CFLAGS = $(GOBJECT_CFLAGS)
+LDADD = $(GOBJECT_LIBS)
+foo_SOURCES = hello.vala
+bar_VALAFLAGS = -H zardoz.h
+bar_SOURCES = goodbye.vala
+END
+
+cat > hello.vala <<'END'
+void main ()
+{
+ stdout.printf ("foofoofoo\n");
+}
+END
+cp hello.vala goodbye.vala
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+mkdir build
+cd build
+../configure
+$MAKE
+test -f ../foo_vala.stamp
+test -f ../bar_vala.stamp
+grep foofoofoo ../hello.c
+test -f ../zardoz.h
+$MAKE distcheck
+
+# Rebuild rules work also in VPATH builds.
+
+cat > ../hello.vala <<'END'
+int main ()
+{
+ stdout.printf ("barbarbar\n");
+ return 0;
+}
+END
+
+$MAKE
+test -f ../foo_vala.stamp
+test -f ../bar_vala.stamp
+grep barbarbar ../hello.c
+
+# Rebuild rules are not uselessly triggered.
+$MAKE -q
+$MAKE -n | grep '\.stamp' && exit 1
+
+# Cleanup rules work also in VPATH builds.
+$MAKE clean
+test -f ../foo_vala.stamp
+test -f ../bar_vala.stamp
+test -f ../zardoz.h
+test -f ../hello.c
+$MAKE maintainer-clean
+test ! -e ../zardoz.h
+test ! -e ../hello.c
+test ! -e ../foo_vala.stamp
+test ! -e ../bar_vala.stamp
+
+:
diff --git a/t/var-recurs.sh b/t/var-recurs.sh
new file mode 100644
index 000000000..571ea86bd
--- /dev/null
+++ b/t/var-recurs.sh
@@ -0,0 +1,34 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure recursive variable definitions die.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = $(foo)
+foo = $(bin_PROGRAMS)
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+grep 'Makefile\.am:.*bin_PROGRAMS.*recursively defined' stderr
+
+:
diff --git a/t/var-recurs2.sh b/t/var-recurs2.sh
new file mode 100644
index 000000000..a3480fae2
--- /dev/null
+++ b/t/var-recurs2.sh
@@ -0,0 +1,31 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure recursive variable definitions die.
+# From Jim Meyering.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+man_MANS = chgrp.1
+man_aux = $(man_MANS:.1=.x)
+EXTRA_DIST = $(man_aux) $(man_MANS)
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+:
diff --git a/t/vars.sh b/t/vars.sh
new file mode 100644
index 000000000..73ee29f45
--- /dev/null
+++ b/t/vars.sh
@@ -0,0 +1,36 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test various variable definitions that include an '=' sign.
+# From Raja R Harinath.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+MY_FLAGS_1=-DABC=345
+MY_FLAGS_2= -DABC=345
+MY_FLAGS_3 =-DABC=345
+MY_FLAGS_4 = -DABC=345
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+for i in 1 2 3 4; do
+ grep "^MY_FLAGS_$i *= *-DABC=345 *$" Makefile.in
+done
+
+:
diff --git a/t/vars3.sh b/t/vars3.sh
new file mode 100644
index 000000000..22931a54c
--- /dev/null
+++ b/t/vars3.sh
@@ -0,0 +1,72 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that Automake warns about variables containing spaces
+# and other non-POSIX characters.
+
+. test-init.sh
+
+cat >Makefile.am <<'EOF'
+L01 = $(shell echo *)
+L02 = $$(not an error)
+L03 = $$(this is)$${ok too}
+L04 = $(nextvariableisbad)$(addsuffix .a, $(A))
+L05 = "$(bad boy)"
+L06 = $(this:is= ok)
+L07 = ${three errors}${on this} $(long line)
+L08$(o u c h): $(wildcard *.c)
+ ${another Error}
+ echo $${ok-this is}
+L11: $(thisis) $(ok)
+ ${here}
+EOF
+
+$ACLOCAL
+# Make sure this warning is print in the 'portability' category.
+$AUTOMAKE --warnings=no-error,none,portability 2>stderr \
+ || { cat stderr >&2; exit 1; }
+cat stderr >&2
+
+# Lines number are printed in error message.
+# Use them to make sure errors are diagnosed against the right lines.
+
+# No error expected apart from those on these lines.
+grep -v '^Makefile\.am:[145789]:' stderr | grep . && exit 1
+
+# Now check some individual values.
+grep ':1:.*shell echo' stderr
+grep 'nextvariableisbad' stderr && exit 1
+grep ':4:.*addsuffix' stderr
+grep ':5:.*bad boy' stderr
+grep ':7:.*three errors' stderr
+grep ':7:.*on this' stderr
+grep ':7:.*long line' stderr
+grep ':8:.*o u c h' stderr
+grep ':8:.*wildcard' stderr
+grep ':9:.*another Error' stderr
+
+$EGREP 'ok|thisis|here' stderr && exit 1
+
+# None of these errors be diagnosed with '-Wno-portability'.
+$AUTOMAKE -Wno-portability
+
+# Likewise if we add this in the Makefile.am
+# (although this makes some difference internally: AUTOMAKE_OPTIONS is
+# processed far later).
+echo 'AUTOMAKE_OPTIONS = -Wno-portability' >> Makefile.am
+$AUTOMAKE
+
+:
diff --git a/t/vartar.sh b/t/vartar.sh
new file mode 100644
index 000000000..0e611b6e6
--- /dev/null
+++ b/t/vartar.sh
@@ -0,0 +1,39 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Targets and macros are two different name spaces.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+install = install
+install:
+ $(install) install
+END
+
+$ACLOCAL
+$AUTOMAKE -Wno-override
+
+grep '^install = install$' Makefile.in
+
+cat > target.expected <<'EOF'
+install:
+ $(install) install
+EOF
+sed -n '/^install:/,/^ /p' Makefile.in > target.value
+diff target.expected target.value
+
+:
diff --git a/t/vartypo2.sh b/t/vartypo2.sh
new file mode 100644
index 000000000..77c05a6d6
--- /dev/null
+++ b/t/vartypo2.sh
@@ -0,0 +1,69 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure we warn about possible variable typos when we should,
+# Libtool variant.
+
+required=libtoolize
+. test-init.sh
+
+cat >>configure.ac <<'END'
+AM_PROG_AR
+AC_PROG_LIBTOOL
+AC_OUTPUT
+END
+
+cat >Makefile.am <<'END'
+libfoo_la_SOURCES = unused
+nodist_libfoo_la_SOURCES = unused
+EXTRA_libfoo_la_SOURCES = unused
+libfoo_la_LIBADD = unused
+libfoo_la_DEPENDENCIES = unused
+EXTRA_libfoo_la_DEPENDENCIES = unused
+END
+
+libtoolize
+$ACLOCAL
+AUTOMAKE_fails --add-missing
+# The expected diagnostic is:
+# automake: warnings are treated as errors
+# Makefile.am:3: warning: variable 'EXTRA_libfoo_la_SOURCES' is defined but no program or
+# Makefile.am:3: library has 'libfoo_la' as canonical name (possible typo)
+# Makefile.am:1: warning: variable 'libfoo_la_SOURCES' is defined but no program or
+# Makefile.am:1: library has 'libfoo_la' as canonical name (possible typo)
+# Makefile.am:2: warning: variable 'nodist_libfoo_la_SOURCES' is defined but no program or
+# Makefile.am:2: library has 'libfoo_la' as canonical name (possible typo)
+# Makefile.am:4: warning: variable 'libfoo_la_LIBADD' is defined but no program or
+# Makefile.am:4: library has 'libfoo_la' as canonical name (possible typo)
+# Makefile.am:6: warning: variable 'EXTRA_libfoo_la_DEPENDENCIES' is defined but no program or
+# Makefile.am:6: library has 'libfoo_la' as canonical name (possible typo)
+# Makefile.am:5: warning: variable 'libfoo_la_DEPENDENCIES' is defined but no program or
+# Makefile.am:5: library has 'libfoo_la' as canonical name (possible typo)
+
+grep 'as canonical' stderr | grep -v ' .libfoo_la. ' && exit 1
+test $(grep -c 'variable.*is defined but' stderr) -eq 6
+
+# If we add a global -Wnone, all warnings should disappear.
+$AUTOMAKE -Wnone
+
+# Likewise, if matching programs or libraries are defined.
+cat >>Makefile.am <<'END'
+lib_LTLIBRARIES = libfoo.la
+END
+
+$AUTOMAKE
+
+:
diff --git a/t/vartypos.sh b/t/vartypos.sh
new file mode 100644
index 000000000..adfee9641
--- /dev/null
+++ b/t/vartypos.sh
@@ -0,0 +1,89 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure we warn about possible variable typos when we should.
+
+. test-init.sh
+
+cat >>configure.ac <<'END'
+AC_PROG_RANLIB
+AC_OUTPUT
+END
+
+cat >Makefile.am <<'END'
+foo_SOURCES = unused
+nodist_foo_SOURCES = unused
+EXTRA_foo_SOURCES = unused
+foo_LDADD = unused
+foo_LDFLAGS = unused
+foo_DEPENDENCIES = unused
+EXTRA_foo_DEPENDENCIES = unused
+
+libfoo_a_SOURCES = unused
+nodist_libfoo_a_SOURCES = unused
+EXTRA_libfoo_a_SOURCES = unused
+libfoo_a_LIBADD = unused
+libfoo_a_DEPENDENCIES = unused
+EXTRA_libfoo_a_DEPENDENCIES = unused
+END
+
+$ACLOCAL
+AUTOMAKE_fails -Wno-extra-portability
+# The expected diagnostic is:
+# automake: warnings are treated as errors
+# Makefile.am:2: warning: variable 'nodist_foo_SOURCES' is defined but no program or
+# Makefile.am:2: library has 'foo' as canonical name (possible typo)
+# Makefile.am:1: warning: variable 'foo_SOURCES' is defined but no program or
+# Makefile.am:1: library has 'foo' as canonical name (possible typo)
+# Makefile.am:9: warning: variable 'libfoo_a_SOURCES' is defined but no program or
+# Makefile.am:9: library has 'libfoo_a' as canonical name (possible typo)
+# Makefile.am:10: warning: variable 'nodist_libfoo_a_SOURCES' is defined but no program or
+# Makefile.am:10: library has 'libfoo_a' as canonical name (possible typo)
+# Makefile.am:11: warning: variable 'EXTRA_libfoo_a_SOURCES' is defined but no program or
+# Makefile.am:11: library has 'libfoo_a' as canonical name (possible typo)
+# Makefile.am:3: warning: variable 'EXTRA_foo_SOURCES' is defined but no program or
+# Makefile.am:3: library has 'foo' as canonical name (possible typo)
+# Makefile.am:12: warning: variable 'libfoo_a_LIBADD' is defined but no program or
+# Makefile.am:12: library has 'libfoo_a' as canonical name (possible typo)
+# Makefile.am:4: warning: variable 'foo_LDADD' is defined but no program or
+# Makefile.am:4: library has 'foo' as canonical name (possible typo)
+# Makefile.am:5: warning: variable 'foo_LDFLAGS' is defined but no program or
+# Makefile.am:5: library has 'foo' as canonical name (possible typo)
+# Makefile.am:14: warning: variable 'EXTRA_libfoo_a_DEPENDENCIES' is defined but no program or
+# Makefile.am:14: library has 'libfoo_a' as canonical name (possible typo)
+# Makefile.am:7: warning: variable 'EXTRA_foo_DEPENDENCIES' is defined but no program or
+# Makefile.am:7: library has 'foo' as canonical name (possible typo)
+# Makefile.am:6: warning: variable 'foo_DEPENDENCIES' is defined but no program or
+# Makefile.am:6: library has 'foo' as canonical name (possible typo)
+# Makefile.am:13: warning: variable 'libfoo_a_DEPENDENCIES' is defined but no program or
+# Makefile.am:13: library has 'libfoo_a' as canonical name (possible typo)
+
+grep 'as canonical' stderr | grep -v ' .foo. ' | grep -v ' .libfoo_a. ' \
+ && exit 1
+test $(grep -c 'variable.*is defined but' stderr) -eq 13
+
+# If we add a global -Wnone, all warnings should disappear.
+$AUTOMAKE -Wnone
+
+# Likewise, if matching programs or libraries are defined.
+cat >>Makefile.am <<'END'
+bin_PROGRAMS = foo
+lib_LIBRARIES = libfoo.a
+END
+
+$AUTOMAKE -Wno-extra-portability
+
+:
diff --git a/t/version3.sh b/t/version3.sh
new file mode 100644
index 000000000..b01eafbbf
--- /dev/null
+++ b/t/version3.sh
@@ -0,0 +1,27 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure version in AUTOMAKE_OPTIONS works.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = 9.9x
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+grep 'Makefile.am:1:.*Automake 9.9x' stderr
diff --git a/t/version4.sh b/t/version4.sh
new file mode 100644
index 000000000..2504ad77e
--- /dev/null
+++ b/t/version4.sh
@@ -0,0 +1,26 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure we are compatible with the 1.4-p1 series.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = 1.4-p3
+END
+
+$ACLOCAL
+$AUTOMAKE
diff --git a/t/version6.sh b/t/version6.sh
new file mode 100644
index 000000000..8d5dea74b
--- /dev/null
+++ b/t/version6.sh
@@ -0,0 +1,36 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure the current version can be required.
+
+. test-init.sh
+
+amver=$($AUTOMAKE --version | sed -e 's/.* //;1q')
+
+# Does the extracted version number seems legit?
+case $amver in
+ *[0-9].[0-9]*) ;;
+ *) fatal_ "couldn't extract version number from automake" ;;
+esac
+
+cat > Makefile.am << END
+AUTOMAKE_OPTIONS = $amver
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+:
diff --git a/t/version7.sh b/t/version7.sh
new file mode 100644
index 000000000..9f9cf7044
--- /dev/null
+++ b/t/version7.sh
@@ -0,0 +1,67 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for a special setup where the package's version isn't defined
+# in configure.ac. We want GNU Make for this test (part of the test
+# is to make sure Makefile.ins get rebuilt when a m4_included file
+# changes -- we don't support this feature on non-GNU Makes).
+
+required='makeinfo tex texi2dvi'
+. test-init.sh
+
+cat >configure.ac <<END
+m4_include([version.m4])
+AC_INIT([$me], [THE_VERSION])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+END
+
+echo 'm4_define([THE_VERSION], [2.718])' > version.m4
+
+cat > Makefile.am << 'END'
+info_TEXINFOS = zardoz.texi
+
+check:
+ test -f $(srcdir)/version.m4
+END
+
+cat > zardoz.texi << 'END'
+\input texinfo
+@setfilename zardoz.info
+@settitle Zardoz
+@node Top
+Hello walls.
+@include version.texi
+@bye
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+./configure --version | grep '2\.718'
+./configure
+$MAKE
+grep '2\.718' version.texi
+
+$sleep
+echo 'm4_define([THE_VERSION], [3.141])' > version.m4
+using_gmake || $MAKE Makefile
+$MAKE distcheck
+./configure --version | grep '3\.141'
+grep '3\.141' version.texi
+
+:
diff --git a/t/version8.sh b/t/version8.sh
new file mode 100644
index 000000000..82647589b
--- /dev/null
+++ b/t/version8.sh
@@ -0,0 +1,24 @@
+#! /bin/sh
+# Copyright (C) 2005-2017 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 <https://www.gnu.org/licenses/>.
+
+# Calling AM_AUTOMAKE_VERSION by hand is a bug.
+
+. test-init.sh
+
+echo 'AM_AUTOMAKE_VERSION([1.9])' >>configure.ac
+$ACLOCAL 2>stderr && { cat stderr >&2; exit 0; }
+cat stderr >&2
+$FGREP 'AM_INIT_AUTOMAKE([1.9])' stderr
diff --git a/t/vpath.sh b/t/vpath.sh
new file mode 100644
index 000000000..878e5420a
--- /dev/null
+++ b/t/vpath.sh
@@ -0,0 +1,33 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure VPATH can be overridden.
+# Report from Anthony Green.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+VPATH = zardoz
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+grep VPATH Makefile.in # For debugging.
+grep '^VPATH = zardoz$' Makefile.in
+grep 'VPATH.*@srcdir@' Makefile.in && exit 1
+
+:
diff --git a/t/warning-groups-win-over-strictness.sh b/t/warning-groups-win-over-strictness.sh
new file mode 100644
index 000000000..5c61357d4
--- /dev/null
+++ b/t/warning-groups-win-over-strictness.sh
@@ -0,0 +1,64 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that explicitly-defined warning levels take precedence over
+# implicit strictness-implied warnings, even when these explicit warning
+# levels are "catch-all warnings" (such as '-Wall' and '-Wnone').
+# Since we are at it, also throw in *.am and *.m4 file inclusions.
+
+. test-init.sh
+
+# We want complete control over automake options.
+AUTOMAKE=$am_original_AUTOMAKE
+
+# Files required in gnu and/or gnits strictness.
+touch README INSTALL NEWS AUTHORS ChangeLog COPYING THANKS
+
+cat > configure.ac << END
+AC_INIT([$me], [1.0])
+m4_include([am-init-automake.m4])
+AC_PROG_CC
+AC_CONFIG_FILES([Makefile])
+# Other similar tests do not use AC_OUTPUT, so we use it here,
+# for completeness and for better coverage.
+AC_OUTPUT
+END
+
+cat > Makefile.am <<END
+include automake-options.am
+FOO := bar
+END
+
+rm -rf autom4te*.cache
+: > automake-options.am
+echo 'AM_INIT_AUTOMAKE' > am-init-automake.m4
+$ACLOCAL
+AUTOMAKE_fails -Werror -Wall --foreign
+grep '^Makefile\.am:.*:=.*not portable' stderr
+
+rm -rf autom4te*.cache
+: > automake-options.am
+echo 'AM_INIT_AUTOMAKE([-Werror -Wnone gnu])' > am-init-automake.m4
+$ACLOCAL
+$AUTOMAKE
+
+rm -rf autom4te*.cache
+echo 'AUTOMAKE_OPTIONS = -Werror -Wnone gnits' > automake-options.am
+echo 'AM_INIT_AUTOMAKE' > am-init-automake.m4
+$ACLOCAL
+$AUTOMAKE
+
+:
diff --git a/t/warnings-obsolete-default.sh b/t/warnings-obsolete-default.sh
new file mode 100644
index 000000000..e95dd6b6e
--- /dev/null
+++ b/t/warnings-obsolete-default.sh
@@ -0,0 +1,39 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that automake warnings in the 'obsolete' category are enabled
+# by default.
+
+. test-init.sh
+
+# We want (almost) complete control over automake options.
+AUTOMAKE="$am_original_AUTOMAKE --foreign -Werror"
+
+echo AC_PROG_CC >> configure.ac
+
+cat > Makefile.am <<'END'
+bin_PROGRAMS = foo
+INCLUDES = -Ibar
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+grep '^Makefile\.am:2:.*INCLUDES.*AM_CPPFLAGS' stderr
+
+# Check that we can override warnings about obsolete stuff.
+$AUTOMAKE -Wno-obsolete
+
+:
diff --git a/t/warnings-override.sh b/t/warnings-override.sh
new file mode 100644
index 000000000..f5431ae74
--- /dev/null
+++ b/t/warnings-override.sh
@@ -0,0 +1,111 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# The warnings specified in Makefile.am:AUTOMAKE_OPTIONS should override
+# those specified in configure.ac:AM_INIT_AUTOMAKE, and both should
+# override the warnings specified on the command line.
+# NOTE: the current semantics might not be the best one (even if it has
+# been in place for quite a long time); see also Automake bug #7673.
+# Update this test if the semantics are changed.
+
+. test-init.sh
+
+# We want (almost) complete control over automake options.
+AUTOMAKE="$am_original_AUTOMAKE -Werror"
+
+cat > Makefile.am <<'END'
+FOO := bar
+AUTOMAKE_OPTIONS =
+END
+
+set_warnings ()
+{
+ set +x
+ sed <$2 >$2-t -e "s|^\\(AUTOMAKE_OPTIONS\\) *=.*|\\1 = $1|" \
+ -e "s|^\\(AM_INIT_AUTOMAKE\\).*|\\1([$1])|"
+ mv -f $2-t $2
+ set -x
+ cat $2
+}
+
+ok ()
+{
+ $AUTOMAKE $*
+}
+
+ko ()
+{
+ AUTOMAKE_fails $*
+ grep '^Makefile\.am:1:.*:=.*not portable' stderr
+}
+
+$ACLOCAL
+
+# Files required in gnu strictness.
+touch README INSTALL NEWS AUTHORS ChangeLog COPYING
+
+rm -rf autom4te*.cache
+set_warnings '-Wno-portability' Makefile.am
+set_warnings '' configure.ac
+
+ok -Wportability
+ok
+
+rm -rf autom4te*.cache
+set_warnings '' Makefile.am
+set_warnings '-Wno-portability' configure.ac
+
+ok -Wportability
+ok
+
+rm -rf autom4te*.cache
+set_warnings '-Wno-portability' Makefile.am
+set_warnings '-Wno-portability' configure.ac
+
+ok -Wportability
+
+rm -rf autom4te*.cache
+set_warnings '-Wportability' Makefile.am
+set_warnings '' configure.ac
+
+ko
+ko -Wno-portability
+
+rm -rf autom4te*.cache
+set_warnings '' Makefile.am
+set_warnings '-Wportability' configure.ac
+
+ko
+ko -Wno-portability
+
+rm -rf autom4te*.cache
+set_warnings '-Wportability' Makefile.am
+set_warnings '-Wportability' configure.ac
+ko -Wno-portability
+
+rm -rf autom4te*.cache
+set_warnings '-Wno-portability' Makefile.am
+set_warnings '-Wportability' configure.ac
+ok
+ok -Wportability
+
+rm -rf autom4te*.cache
+set_warnings '-Wportability' Makefile.am
+set_warnings '-Wno-portability' configure.ac
+ko
+ko -Wno-portability
+
+:
diff --git a/t/warnings-precedence.sh b/t/warnings-precedence.sh
new file mode 100644
index 000000000..d4237d49e
--- /dev/null
+++ b/t/warnings-precedence.sh
@@ -0,0 +1,77 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# On the command line, in AM_INIT_AUTOMAKE, and in AUTOMAKE_OPTIONS,
+# warnings specified later should take precedence over those specified
+# earlier.
+
+. test-init.sh
+
+# We want (almost) complete control over automake options.
+AUTOMAKE="$am_original_AUTOMAKE -Werror"
+
+cat > Makefile.am <<'END'
+FOO := bar
+AUTOMAKE_OPTIONS =
+END
+
+set_warnings ()
+{
+ set +x
+ sed <$2 >$2-t -e "s|^\\(AUTOMAKE_OPTIONS\\) *=.*|\\1 = $1|" \
+ -e "s|^\\(AM_INIT_AUTOMAKE\\).*|\\1([$1])|"
+ mv -f $2-t $2
+ set -x
+ cat $2
+}
+
+ok ()
+{
+ $AUTOMAKE $*
+}
+
+ko ()
+{
+ AUTOMAKE_fails $*
+ grep '^Makefile\.am:1:.*:=.*not portable' stderr
+}
+
+# Files required in gnu strictness.
+touch README INSTALL NEWS AUTHORS ChangeLog COPYING
+
+$ACLOCAL
+ok -Wportability -Wno-portability
+ko -Wno-portability -Wportability
+
+set_warnings '' Makefile.am
+set_warnings '-Wportability -Wno-portability' configure.ac
+rm -rf autom4te*.cache
+$ACLOCAL
+ok
+set_warnings '-Wno-portability -Wportability' configure.ac
+rm -rf autom4te*.cache
+$ACLOCAL
+ko
+
+set_warnings '' configure.ac
+rm -rf autom4te*.cache
+$ACLOCAL
+set_warnings '-Wportability -Wno-portability' Makefile.am
+ok
+set_warnings '-Wno-portability -Wportability' Makefile.am
+ko
+
+:
diff --git a/t/warnings-strictness-interactions.sh b/t/warnings-strictness-interactions.sh
new file mode 100644
index 000000000..206278b95
--- /dev/null
+++ b/t/warnings-strictness-interactions.sh
@@ -0,0 +1,59 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that the default warnings triggered by a strictness specified
+# in AUTOMAKE_OPTIONS take precedence over explicit warnings given in
+# AM_INIT_AUTOMAKE.
+
+. test-init.sh
+
+# We want (almost) complete control over automake options.
+AUTOMAKE="$am_original_AUTOMAKE -Werror"
+
+cat > Makefile.am <<END
+AUTOMAKE_OPTIONS =
+FOO := bar
+END
+
+set_am_opts ()
+{
+ set +x
+ sed <$2 >$2-t -e "s|^\\(AUTOMAKE_OPTIONS\\) *=.*|\\1 = $1|" \
+ -e "s|^\\(AM_INIT_AUTOMAKE\\).*|\\1([$1])|"
+ mv -f $2-t $2
+ set -x
+ cat $2
+}
+
+set_am_opts '-Wportability' configure.ac
+set_am_opts 'foreign' Makefile.am
+
+$ACLOCAL
+$AUTOMAKE
+
+rm -rf autom4te*.cache
+
+# Files required in gnu strictness.
+touch README INSTALL NEWS AUTHORS ChangeLog COPYING
+
+set_am_opts '-Wno-portability' configure.ac
+set_am_opts 'gnu' Makefile.am
+
+AUTOMAKE_fails
+$ACLOCAL
+grep '^Makefile\.am:2:.*:=.*not portable' stderr
+
+:
diff --git a/t/warnings-unknown.sh b/t/warnings-unknown.sh
new file mode 100644
index 000000000..7497dad03
--- /dev/null
+++ b/t/warnings-unknown.sh
@@ -0,0 +1,44 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that automake complains about unknown warnings.
+
+. test-init.sh
+
+# We want (almost) complete control over automake options.
+AUTOMAKE="$am_original_AUTOMAKE --foreign -Werror"
+
+cat > configure.ac <<END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE([-Wno-zardoz])
+AC_CONFIG_FILES([Makefile])
+END
+
+cat > Makefile.am <<END
+AUTOMAKE_OPTIONS = -Wfoobar
+END
+
+$ACLOCAL
+
+AUTOMAKE_fails -Wbazquux
+grep '^configure\.ac:2:.* unknown warning category.*zardoz' stderr
+grep '^Makefile\.am:1:.* unknown warning category.*foobar' stderr
+grep "^automake-$APIVERSION:.* unknown warning category.*bazquux" stderr
+
+# Check that we can override warnings about unknown warning categories.
+$AUTOMAKE -Wno-unsupported -Wbazquux
+
+:
diff --git a/t/warnings-win-over-strictness.sh b/t/warnings-win-over-strictness.sh
new file mode 100644
index 000000000..72d193ee2
--- /dev/null
+++ b/t/warnings-win-over-strictness.sh
@@ -0,0 +1,90 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that, on the command line, explicitly-defined warnings take
+# precedence over implicit strictness-implied warnings.
+
+. test-init.sh
+
+# We want complete control over automake options.
+AUTOMAKE=$am_original_AUTOMAKE
+
+ok ()
+{
+ AUTOMAKE_run $*
+ test ! -s stderr
+}
+
+ko ()
+{
+ AUTOMAKE_run $*
+ grep '^Makefile\.am:.*:=.*not portable' stderr
+ test $(wc -l <stderr) -eq 1
+}
+
+set_am_opts()
+{
+ set +x
+ sed <$2 >$2-t -e "s|^\\(AUTOMAKE_OPTIONS\\) *=.*|\\1 = $1|" \
+ -e "s|^\\(AM_INIT_AUTOMAKE\\).*|\\1([$1])|"
+ mv -f $2-t $2
+ set -x
+ cat $2
+}
+
+# Files required in gnu strictness.
+touch README INSTALL NEWS AUTHORS ChangeLog COPYING
+
+cat > Makefile.am <<END
+AUTOMAKE_OPTIONS =
+FOO := bar
+END
+
+$ACLOCAL
+
+ko --foreign -Wportability
+ko -Wportability --foreign
+ok --gnu -Wno-portability
+ok -Wno-portability --gnu
+
+set_am_opts '' Makefile.am
+
+rm -rf autom4te*.cache
+set_am_opts 'foreign -Wportability' configure.ac
+ko
+rm -rf autom4te*.cache
+set_am_opts '-Wportability foreign' configure.ac
+ko
+rm -rf autom4te*.cache
+set_am_opts 'gnu -Wno-portability' configure.ac
+ok
+rm -rf autom4te*.cache
+set_am_opts '-Wno-portability gnu' configure.ac
+ok
+
+rm -rf autom4te*.cache
+set_am_opts '' configure.ac
+
+set_am_opts 'foreign -Wportability' Makefile.am
+ko
+set_am_opts '-Wportability foreign' Makefile.am
+ko
+set_am_opts 'gnu -Wno-portability' Makefile.am
+ok
+set_am_opts '-Wno-portability gnu' Makefile.am
+ok
+
+:
diff --git a/t/warnopts.sh b/t/warnopts.sh
new file mode 100644
index 000000000..003e44ef6
--- /dev/null
+++ b/t/warnopts.sh
@@ -0,0 +1,75 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that we can enable or disable warnings on a per-file basis.
+
+. test-init.sh
+
+cat >>configure.ac <<END
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+END
+
+mkdir sub
+
+# These two Makefile contain the same errors, but have different
+# warnings disabled.
+
+cat >Makefile.am <<END
+AUTOMAKE_OPTIONS = -Wno-obsolete
+INCLUDES = -Ifoo
+foo_SOURCES = unused
+SUBDIRS = sub
+END
+
+cat >sub/Makefile.am <<END
+AUTOMAKE_OPTIONS = -Wno-syntax
+INCLUDES = -Ifoo
+foo_SOURCES = unused
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+# The expected diagnostic is
+# Makefile.am:3: warning: variable 'foo_SOURCES' is defined but no program or
+# library has 'foo' as canonical name (possible typo)
+# sub/Makefile.am:2: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS'
+grep '^Makefile.am:.*foo_SOURCES' stderr
+grep '^sub/Makefile.am:.*INCLUDES' stderr
+grep '^sub/Makefile.am:.*foo_SOURCES' stderr && exit 1
+grep '^Makefile.am:.*INCLUDES' stderr && exit 1
+# Only three lines of warnings.
+test $(grep -v 'warnings are treated as errors' stderr | wc -l) -eq 3
+
+# On fast machines the autom4te.cache created during the above run of
+# $AUTOMAKE is likely to have the same time stamp as the configure.ac
+# created below; thus causing traces for the old configure.ac to be
+# used. We could do '$sleep', but it's faster to erase the
+# directory. (Erase autom4te*.cache, not autom4te.cache, because some
+# bogus installations of Autoconf use a versioned cache).
+rm -rf autom4te*.cache
+
+# If we add a global -Wnone, all warnings should disappear.
+cat >configure.ac <<END
+AC_INIT([warnopts], [1.0])
+AM_INIT_AUTOMAKE([-Wnone])
+AC_CONFIG_FILES([Makefile sub/Makefile])
+AC_OUTPUT
+END
+$ACLOCAL
+$AUTOMAKE
+
+:
diff --git a/t/werror.sh b/t/werror.sh
new file mode 100644
index 000000000..18f445491
--- /dev/null
+++ b/t/werror.sh
@@ -0,0 +1,26 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure -Werror and --add-missing work together.
+
+. test-init.sh
+
+: > Makefile.am
+
+rm -f install-sh depcomp missing mkinstalldirs
+
+$ACLOCAL
+$AUTOMAKE -Werror --add-missing
diff --git a/t/werror2.sh b/t/werror2.sh
new file mode 100644
index 000000000..2605f3c4e
--- /dev/null
+++ b/t/werror2.sh
@@ -0,0 +1,48 @@
+#! /bin/sh
+# Copyright (C) 2004-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure that Makefile.in is not overwritten on error. Otherwise
+# although the rebuilding rules would fail on error, they would
+# succeed if make is run a second time immediately afterwards.
+# Report from Harlan Stenn.
+
+. test-init.sh
+
+echo AC_OUTPUT>>configure.ac
+
+: > Makefile.am
+
+$ACLOCAL
+# Create Makefile.in before configure. configure ensures files
+# generated by it or later are newer than configure, so this allows
+# us to avoid a $sleep before updating Makefile.am below.
+$AUTOMAKE
+$AUTOCONF
+
+./configure
+$MAKE
+
+cat >Makefile.am <<END
+AUTOMAKE_OPTIONS = -Werror
+INCLUDES = -Ifoo
+foo_SOURCES = unused
+END
+
+# This repetition is deliberate; see heading comments.
+$MAKE && exit 1
+$MAKE && exit 1
+
+:
diff --git a/t/werror3.sh b/t/werror3.sh
new file mode 100644
index 000000000..450f1101f
--- /dev/null
+++ b/t/werror3.sh
@@ -0,0 +1,48 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure a per-Makefile.am -Werror setting is not carried over
+# to another Makefile.am.
+
+. test-init.sh
+
+cat >>configure.ac <<\END
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+END
+
+mkdir sub
+cat >sub/Makefile.am <<\END
+AUTOMAKE_OPTIONS = -Werror
+END
+cat >Makefile.am <<\END
+VAR = foo
+VAR = bar
+END
+
+$ACLOCAL
+
+# The issue would not manifest with threaded execution.
+unset AUTOMAKE_JOBS
+AUTOMAKE_run -Wno-error
+grep 'VAR multiply defined' stderr
+
+AUTOMAKE_JOBS=2
+export AUTOMAKE_JOBS
+AUTOMAKE_run -Wno-error
+grep 'VAR multiply defined' stderr
+
+:
diff --git a/t/werror4.sh b/t/werror4.sh
new file mode 100644
index 000000000..e0d1118b1
--- /dev/null
+++ b/t/werror4.sh
@@ -0,0 +1,66 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# -Werror and local -Werror settings should be flagged for the user.
+
+. test-init.sh
+
+cat >>configure.ac <<\END
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+END
+
+mkdir sub
+cat >sub/Makefile.am <<\END
+AUTOMAKE_OPTIONS = -Werror
+SUB = foo
+SUB = bar
+END
+cat >Makefile.am <<\END
+AUTOMAKE_OPTIONS = -Werror
+VAR = foo
+VAR = bar
+END
+
+$ACLOCAL
+
+AUTOMAKE_fails -Wno-error
+grep 'VAR multiply defined' stderr
+grep 'SUB multiply defined' stderr
+test $(grep -c 'warnings are treated as errors' stderr) -eq 1
+
+sed '/AUTOMAKE_OPTIONS/d' sub/Makefile.am > t
+mv -f t sub/Makefile.am
+
+AUTOMAKE_fails -Wno-error
+grep 'VAR multiply defined' stderr
+grep 'SUB multiply defined' stderr
+test $(grep -c 'warnings are treated as errors' stderr) -eq 1
+
+sed '/AUTOMAKE_OPTIONS/d' Makefile.am > t
+mv -f t Makefile.am
+
+AUTOMAKE_fails -Werror
+grep 'VAR multiply defined' stderr
+grep 'SUB multiply defined' stderr
+test $(grep -c 'warnings are treated as errors' stderr) -eq 1
+
+AUTOMAKE_run -Wno-error
+grep 'VAR multiply defined' stderr
+grep 'SUB multiply defined' stderr
+grep 'warnings are treated as errors' stderr && exit 1
+
+:
diff --git a/t/whoami.sh b/t/whoami.sh
new file mode 100644
index 000000000..4eb32a9aa
--- /dev/null
+++ b/t/whoami.sh
@@ -0,0 +1,27 @@
+#! /bin/sh
+# Copyright (C) 1998-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure aclocal doesn't barf on "WHO_AM_I=...". Report
+# from Johan Danielsson (and a very nice bug report, too, I might
+# add).
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+WHO_AM_I=17
+END
+
+$ACLOCAL
diff --git a/t/xsource.sh b/t/xsource.sh
new file mode 100644
index 000000000..b0b503440
--- /dev/null
+++ b/t/xsource.sh
@@ -0,0 +1,38 @@
+#! /bin/sh
+# Copyright (C) 1997-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure multiple source files with the same object
+# file causes error.
+
+. test-init.sh
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = zardoz
+zardoz_SOURCES = z.c x/z.c
+END
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+END
+
+mkdir x
+
+: > z.c
+: > x/z.c
+
+$ACLOCAL
+AUTOMAKE_fails
+$FGREP 'z.$(OBJEXT)' stderr
diff --git a/t/yacc-auxdir.sh b/t/yacc-auxdir.sh
new file mode 100644
index 000000000..326a41957
--- /dev/null
+++ b/t/yacc-auxdir.sh
@@ -0,0 +1,56 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure ylwrap is put in right location.
+# Report from Tim Van Holder.
+
+. test-init.sh
+
+mkdir aux1 sub
+
+cat > configure.ac << END
+AC_INIT([$me], [1.0])
+# 'aux' is not an acceptable file/directory name on Windows systems
+AC_CONFIG_AUX_DIR([aux1])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile sub/Makefile])
+AC_PROG_CC
+AC_PROG_YACC
+END
+
+cat > Makefile.am << 'END'
+SUBDIRS = sub
+bin_PROGRAMS = foo
+AM_YFLAGS = -d
+foo_SOURCES = foo.y
+END
+
+cat > sub/Makefile.am << 'END'
+bin_PROGRAMS = bar
+AM_YFLAGS = -d
+bar_SOURCES = bar.y main.c
+END
+
+$ACLOCAL
+$AUTOMAKE -a
+test -f aux1/ylwrap
+test ! -e ylwrap
+test ! -e sub/ylwrap
+grep -i 'ylwrap' Makefile.in sub/Makefile.in # For debugging.
+$FGREP '$(top_srcdir)/aux1/ylwrap' Makefile.in
+$FGREP '$(top_srcdir)/aux1/ylwrap' sub/Makefile.in
+
+:
diff --git a/t/yacc-basic.sh b/t/yacc-basic.sh
new file mode 100644
index 000000000..4b33d6c2f
--- /dev/null
+++ b/t/yacc-basic.sh
@@ -0,0 +1,108 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Basic semantic checks on Yacc support (without yacc-generated headers).
+# Keep in sync with sister test 'yacc-cxx.sh'.
+
+required='cc yacc'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_YACC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo bar
+foo_SOURCES = parse.y foo.c
+bar_SOURCES = $(foo_SOURCES)
+bar_YFLAGS = -v
+
+.PHONY: echo-distcom
+echo-distcom:
+ @echo ' ' $(DIST_COMMON) ' '
+END
+
+cat > parse.y << 'END'
+%{
+#include <stdio.h>
+#include <stdlib.h>
+int yylex () { return getchar (); }
+void yyerror (char *s) {}
+%}
+%%
+a : 'a' { exit(0); };
+END
+
+cat > foo.c << 'END'
+int main () { yyparse (); return 1; }
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+$MAKE
+ls -l
+# The Yacc-derived C sources must be created, and not removed once
+# compiled (i.e., not treated like "intermediate files" in the GNU
+# make sense).
+test -f parse.c
+test -f bar-parse.c
+# Check that per-object flags are honored.
+test -f bar-parse.output
+
+if ! cross_compiling; then
+ echo a | ./foo
+ echo b | ./foo && exit 1
+ echo a | ./bar
+ echo b | ./bar && exit 1
+ : For shells with busted 'set -e'.
+fi
+
+# The Yacc-derived C sources must be shipped.
+$MAKE echo-distcom
+$MAKE -s echo-distcom | grep '[ /]parse\.c '
+$MAKE -s echo-distcom | grep '[ /]bar-parse\.c '
+$MAKE distdir
+ls -l $distdir
+test -f $distdir/parse.c
+test -f $distdir/bar-parse.c
+
+# Sanity check on distribution.
+# Note that, for this to succeed, bar-parse.output must either not
+# be distributed, or properly cleaned by automake-generated rules.
+# We don't want to set the exact semantics yet, but want to ensure
+# they are are consistent.
+yl_distcheck
+
+# Make sure that the Yacc-derived C sources are erased by
+# maintainer-clean, and not by distclean.
+test -f parse.c
+test -f bar-parse.c
+$MAKE distclean
+ls -l
+test -f parse.c
+test -f bar-parse.c
+./configure # We must re-create 'Makefile'.
+$MAKE maintainer-clean
+ls -l
+test ! -e parse.c
+test ! -e bar-parse.c
+
+:
diff --git a/t/yacc-bison-skeleton-cxx.sh b/t/yacc-bison-skeleton-cxx.sh
new file mode 100644
index 000000000..dde4a891b
--- /dev/null
+++ b/t/yacc-bison-skeleton-cxx.sh
@@ -0,0 +1,102 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure bison + bison's C++ skeleton + C++ works.
+# For Automake bug#7648 and PR automake/491.
+
+required='c++ bison'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CXX
+AC_PROG_YACC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = zardoz
+zardoz_SOURCES = zardoz.yy foo.cc
+
+# This is required even with %defines in zardoz.yy.
+AM_YFLAGS = -d
+
+BUILT_SOURCES = zardoz.hh
+EXTRA_DIST = stack.hh location.hh position.hh
+END
+
+cat > zardoz.yy << 'END'
+%skeleton "lalr1.cc"
+%defines
+%locations
+
+%union
+{
+ int ival;
+};
+%{
+int yylex (yy::parser::semantic_type *yylval,
+ yy::parser::location_type *yylloc);
+%}
+
+%%
+start : /* empty */
+%%
+
+int
+yylex (yy::parser::semantic_type *yylval,
+ yy::parser::location_type *yylloc)
+{
+ return 0;
+}
+
+void
+yy::parser::error(const yy::parser::location_type&, const std::string&)
+{
+ return;
+}
+END
+
+cat > foo.cc << 'END'
+#include "zardoz.hh"
+
+int
+main(int argc, char** argv)
+{
+ yy::parser my_parser;
+ return my_parser.parse ();
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+# Try a VPATH build first.
+mkdir build
+cd build
+../configure YACC='bison -y'
+$MAKE
+cd ..
+
+# Now try an in-tree build.
+./configure YACC='bison -y'
+$MAKE
+
+# Check that distribution is self-contained, and do not require
+# bison to be built.
+yl_distcheck YACC=false DISTCHECK_CONFIGURE_FLAGS='YACC=false'
+
+:
diff --git a/t/yacc-bison-skeleton.sh b/t/yacc-bison-skeleton.sh
new file mode 100644
index 000000000..0b28737be
--- /dev/null
+++ b/t/yacc-bison-skeleton.sh
@@ -0,0 +1,77 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure bison + bison's skeleton works.
+# For Automake bug#7648 and PR automake/491.
+
+required='cc bison'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_C_INLINE dnl Required by some pre-C99 compilers such as MSVC.
+AC_PROG_YACC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = zardoz
+zardoz_SOURCES = zardoz.y foo.c
+AM_YFLAGS = -d --skeleton glr.c
+BUILT_SOURCES = zardoz.h
+END
+
+# Parser.
+cat > zardoz.y << 'END'
+%{
+int yylex ();
+void yyerror (const char *s);
+%}
+%%
+foobar : 'f' 'o' 'o' 'b' 'a' 'r' {};
+%%
+int yylex () { return 0; }
+void yyerror (const char *s) { return; }
+END
+
+cat > foo.c << 'END'
+#include "zardoz.h"
+int main (void)
+{
+ return yyparse ();
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+# Try a VPATH build first.
+mkdir build
+cd build
+../configure YACC='bison -y'
+$MAKE
+cd ..
+
+# Now try an in-tree build.
+./configure YACC='bison -y'
+$MAKE
+
+# Check that distribution is self-contained, and do not require
+# bison to be built.
+yl_distcheck YACC=false DISTCHECK_CONFIGURE_FLAGS='YACC=false'
+
+:
diff --git a/t/yacc-clean-cxx.sh b/t/yacc-clean-cxx.sh
new file mode 100644
index 000000000..38dbb4adc
--- /dev/null
+++ b/t/yacc-clean-cxx.sh
@@ -0,0 +1,161 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that C++ source and header files derived from non-distributed
+# Yacc sources are cleaned by "make clean", while C++ source and
+# header files derived from distributed Yacc sources are cleaned by
+# "make maintainer-clean".
+# See also sister test 'yacc-clean.sh'.
+
+required='c++ yacc'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CXX
+AC_PROG_YACC
+AC_CONFIG_FILES([sub1/Makefile sub2/Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+# Use two subdirectories, one to test with '-d' in YFLAGS, the
+# other one to test with empty YFLAGS.
+SUBDIRS = sub1 sub2
+END
+
+mkdir sub1 sub2
+
+cat > sub1/Makefile.am << 'END'
+bin_PROGRAMS = foo bar baz qux
+
+foo_SOURCES = mainfoo.cc parsefoo.yxx
+
+bar_SOURCES = mainbar.cpp parsebar.yy
+bar_YFLAGS = $(AM_YFLAGS)
+
+baz_SOURCES = mainbaz.c++
+nodist_baz_SOURCES = parsebaz.y++
+
+qux_SOURCES = mainqux.cxx
+nodist_qux_SOURCES = parsequx.ypp
+qux_YFLAGS = $(AM_YFLAGS)
+
+parsebaz.y++ parsequx.ypp:
+ cp $(srcdir)/parsefoo.yxx $@
+
+CLEANFILES = parsebaz.y++ parsequx.ypp
+END
+
+cat > sub2/Makefile.am << 'END'
+include $(top_srcdir)/sub1/Makefile.am
+AM_YFLAGS = -d
+END
+
+cat > sub1/parsefoo.yxx << 'END'
+%{
+// This file should contain valid C++ but invalid C.
+#include <cstdio>
+// "std::" qualification required by Sun C++ 5.9.
+int yylex (void) { return std::getchar (); }
+void yyerror (const char *s) { return; }
+%}
+%%
+x : 'x' { };
+END
+cp sub1/parsefoo.yxx sub1/parsebar.yy
+cp sub1/parsefoo.yxx sub2/parsefoo.yxx
+cp sub1/parsefoo.yxx sub2/parsebar.yy
+
+cat > sub1/mainfoo.cc << 'END'
+// This file should contain valid C++ but invalid C.
+using namespace std;
+int main (int argc, char **argv)
+{
+ extern int yyparse (void);
+ return yyparse ();
+}
+END
+cp sub1/mainfoo.cc sub1/mainbar.cpp
+cp sub1/mainfoo.cc sub1/mainbaz.c++
+cp sub1/mainfoo.cc sub1/mainqux.cxx
+cp sub1/main???.c* sub2
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+cp config.status config.sav
+
+$MAKE
+ls -l . sub1 sub2
+# Sanity checks.
+test -f sub1/parsefoo.cxx
+test -f sub1/bar-parsebar.cc
+test -f sub1/parsebaz.y++
+test -f sub1/parsebaz.c++
+test -f sub1/parsequx.ypp
+test -f sub1/qux-parsequx.cpp
+test -f sub2/parsefoo.cxx
+test -f sub2/parsefoo.hxx
+test -f sub2/bar-parsebar.cc
+test -f sub2/bar-parsebar.hh
+test -f sub2/parsebaz.y++
+test -f sub2/parsebaz.c++
+test -f sub2/parsebaz.h++
+test -f sub2/parsequx.ypp
+test -f sub2/qux-parsequx.cpp
+test -f sub2/qux-parsequx.hpp
+
+for target in clean distclean; do
+ $MAKE $target
+ ls -l . sub1 sub2
+ test -f sub1/parsefoo.cxx
+ test -f sub1/bar-parsebar.cc
+ test ! -e sub1/parsebaz.y++
+ test ! -e sub1/parsebaz.c++
+ test ! -e sub1/parsequx.ypp
+ test ! -e sub1/qux-parsequx.cpp
+ test -f sub2/parsefoo.cxx
+ test -f sub2/parsefoo.hxx
+ test -f sub2/bar-parsebar.cc
+ test -f sub2/bar-parsebar.hh
+ test ! -e sub2/parsebaz.y++
+ test ! -e sub2/parsebaz.c++
+ test ! -e sub2/parsebaz.h++
+ test ! -e sub2/parsequx.ypp
+ test ! -e sub2/qux-parsequx.cpp
+ test ! -e sub2/qux-parsequx.hpp
+done
+
+cp config.sav config.status
+./config.status # re-create Makefile
+
+$MAKE maintainer-clean
+ls -l . sub1 sub2
+test -f sub1/parsefoo.yxx
+test -f sub1/parsebar.yy
+test ! -e sub1/parsefoo.cxx
+test ! -e sub1/bar-parsebar.cc
+test -f sub2/parsefoo.yxx
+test -f sub2/parsebar.yy
+test ! -e sub2/parsefoo.cxx
+test ! -e sub2/parsefoo.hxx
+test ! -e sub2/bar-parsebar.cc
+test ! -e sub2/bar-parsebar.hh
+
+:
diff --git a/t/yacc-clean.sh b/t/yacc-clean.sh
new file mode 100644
index 000000000..bbda4a275
--- /dev/null
+++ b/t/yacc-clean.sh
@@ -0,0 +1,147 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that .c and .h files derived from non-distributed .y sources
+# are cleaned by "make clean", while .c and .h files derived from
+# distributed .y sources are cleaned by "make maintainer-clean".
+# See also sister test 'yacc-cxx-clean.sh'.
+
+required='cc yacc'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_YACC
+AC_CONFIG_FILES([sub1/Makefile sub2/Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+# Use two subdirectories, one to test with '-d' in YFLAGS, the
+# other one to test with empty YFLAGS.
+SUBDIRS = sub1 sub2
+END
+
+mkdir sub1 sub2
+
+cat > sub1/Makefile.am << 'END'
+bin_PROGRAMS = foo bar baz qux
+
+foo_SOURCES = main.c parse.y
+
+bar_SOURCES = main.c parse.y
+bar_YFLAGS = $(AM_YFLAGS)
+
+baz_SOURCES = main.c
+nodist_baz_SOURCES = baz.y
+
+qux_SOURCES = main.c
+nodist_qux_SOURCES = baz.y
+qux_YFLAGS = $(AM_YFLAGS)
+
+baz.y:
+ cp $(srcdir)/parse.y $@
+
+CLEANFILES = baz.y
+END
+
+cat > sub2/Makefile.am << 'END'
+include $(top_srcdir)/sub1/Makefile.am
+AM_YFLAGS = -d
+END
+
+cat > sub1/parse.y << 'END'
+%{
+int yylex () { return (getchar ()); }
+void yyerror (char *s) {}
+%}
+%%
+x : 'x' { };
+END
+cp sub1/parse.y sub2/parse.y
+
+cat > sub1/main.c << 'END'
+int main ()
+{
+ return yyparse ();
+}
+END
+cp sub1/main.c sub2/main.c
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+cp config.status config.sav
+
+$MAKE
+ls -l . sub1 sub2
+# Sanity checks.
+test -f sub1/parse.y
+test -f sub1/parse.c
+test -f sub1/bar-parse.c
+test -f sub1/baz.y
+test -f sub1/baz.c
+test -f sub1/qux-baz.c
+test -f sub2/parse.y
+test -f sub2/parse.c
+test -f sub2/parse.h
+test -f sub2/bar-parse.c
+test -f sub2/bar-parse.h
+test -f sub2/baz.y
+test -f sub2/baz.c
+test -f sub2/baz.h
+test -f sub2/qux-baz.c
+test -f sub2/qux-baz.h
+
+for target in clean distclean; do
+ $MAKE $target
+ ls -l . sub1 sub2
+ test -f sub1/parse.y
+ test -f sub1/parse.c
+ test -f sub1/bar-parse.c
+ test ! -e sub1/baz.y
+ test ! -e sub1/baz.c
+ test ! -e sub1/qux-baz.c
+ test -f sub2/parse.y
+ test -f sub2/parse.c
+ test -f sub2/parse.h
+ test -f sub2/bar-parse.c
+ test -f sub2/bar-parse.h
+ test ! -e sub2/baz.y
+ test ! -e sub2/baz.c
+ test ! -e sub2/baz.h
+ test ! -e sub2/qux-baz.c
+ test ! -e sub2/qux-baz.h
+done
+
+cp config.sav config.status
+./config.status # Re-create 'Makefile'.
+
+$MAKE maintainer-clean
+ls -l . sub1 sub2
+test -f sub1/parse.y
+test ! -e sub1/parse.c
+test ! -e sub1/bar-parse.c
+test -f sub2/parse.y
+test ! -e sub2/parse.c
+test ! -e sub2/parse.h
+test ! -e sub2/bar-parse.c
+test ! -e sub2/bar-parse.h
+
+:
diff --git a/t/yacc-cxx-grepping.sh b/t/yacc-cxx-grepping.sh
new file mode 100644
index 000000000..3de9a7dc9
--- /dev/null
+++ b/t/yacc-cxx-grepping.sh
@@ -0,0 +1,81 @@
+#! /bin/sh
+# Copyright (C) 1997-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure Yacc + C++ is not obviously broken.
+# See also related tests 'yacc-cxx.sh' and 'yacc-d-cxx.sh',
+# which does much more in-depth checks (but requires an actual
+# Yacc program and a working C++ compiler).
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CXX
+AC_PROG_YACC
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo bar baz qux
+foo_SOURCES = foo.y++
+bar_SOURCES = bar.ypp
+baz_SOURCES = baz.yy
+qux_SOURCES = qux.yxx
+END
+
+$ACLOCAL
+$AUTOMAKE -a
+
+$EGREP '(\.[ch]|foo|bar|baz|qux)' Makefile.in # For debugging.
+
+$EGREP '(foo|bar|baz|qux)\.h' Makefile.in && exit 1
+
+sed -e 's/^/ /' -e 's/$/ /' Makefile.in >mk
+
+$FGREP ' foo.c++ ' mk
+$FGREP ' bar.cpp ' mk
+$FGREP ' baz.cc ' mk
+$FGREP ' qux.cxx ' mk
+
+cat >> Makefile.am <<END
+AM_YFLAGS = -d
+qux_YFLAGS = foo
+END
+
+$AUTOMAKE
+
+$EGREP '(\.[ch]|foo|bar|baz|qux)' Makefile.in # For debugging.
+
+sed -e 's/^/ /' -e 's/$/ /' Makefile.in >mk
+
+$FGREP ' foo.c++ ' mk
+$FGREP ' foo.h++ ' mk
+$FGREP ' bar.cpp ' mk
+$FGREP ' bar.hpp ' mk
+$FGREP ' baz.cc ' mk
+$FGREP ' baz.hh ' mk
+
+$EGREP '(^| )foo\.h\+\+(:| .*:)' Makefile.in
+$EGREP '(^| )bar\.hpp(:| .*:)' Makefile.in
+$EGREP '(^| )baz\.hh(:| .*:)' Makefile.in
+
+grep ' foo\.h[ :]' mk && exit 1
+grep ' bar\.h[ :]' mk && exit 1
+grep ' baz\.h[ :]' mk && exit 1
+
+$FGREP ' qux-qux.cxx ' mk
+$EGREP '(^| )qux-qux\.cxx(:| .*:)' Makefile.in
+grep 'qux\.h.*:' Makefile.in && exit 1
+
+:
diff --git a/t/yacc-cxx.sh b/t/yacc-cxx.sh
new file mode 100644
index 000000000..a351e7af9
--- /dev/null
+++ b/t/yacc-cxx.sh
@@ -0,0 +1,140 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Basic semantic checks on Yacc + C++ support (when yacc-generated
+# headers are not involved).
+# Keep in sync with sister test 'yacc-basic.sh'.
+
+required='c++ yacc'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CXX
+AC_PROG_YACC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo1 foo2 foo3 foo4
+foo1_SOURCES = parse1.yy foo.cc
+foo2_SOURCES = parse2.y++ bar.c++
+foo3_SOURCES = parse3.yxx foo.cc
+foo4_SOURCES = parse4.ypp bar2.cxx
+foo3_YFLAGS = -v
+foo4_YFLAGS = $(foo3_YFLAGS)
+
+.PHONY: echo-distcom
+echo-distcom:
+ @echo ' ' $(DIST_COMMON) ' '
+END
+
+cat > parse1.yy << 'END'
+%{
+// Valid C++, but deliberately invalid C.
+#include <cstdio>
+#include <cstdlib>
+// "std::" qualification required by Sun C++ 5.9.
+int yylex (void) { return std::getchar (); }
+void yyerror (const char *s) { return; }
+%}
+%%
+a : 'a' { exit(0); };
+END
+cp parse1.yy parse2.y++
+cp parse1.yy parse3.yxx
+cp parse1.yy parse4.ypp
+
+cat > foo.cc << 'END'
+// Valid C++, but deliberately invalid C.
+using namespace std;
+int main (int argc, char **argv)
+{
+ int yyparse (void);
+ yyparse ();
+ return 1;
+}
+END
+cp foo.cc bar.c++
+cp foo.cc bar2.cxx
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+
+$MAKE
+
+# The Yacc-derived C++ sources must be created, and not removed once
+# compiled (i.e., not treated like "intermediate files" in the GNU
+# make sense).
+test -f parse1.cc
+test -f parse2.c++
+test -f foo3-parse3.cxx
+test -f foo4-parse4.cpp
+# Check that per-object flags are honored.
+test -f foo3-parse3.output
+test -f foo4-parse4.output
+
+if ! cross_compiling; then
+ for i in 1 2 3 4; do
+ echo a | ./foo$i
+ echo b | ./foo$i && exit 1
+ : For shells with busted 'set -e'.
+ done
+fi
+
+# The Yacc-derived C++ sources must be shipped.
+$MAKE echo-distcom
+$MAKE -s echo-distcom | grep '[ /]parse1\.cc '
+$MAKE -s echo-distcom | grep '[ /]parse2\.c++ '
+$MAKE -s echo-distcom | grep '[ /]foo3-parse3\.cxx '
+$MAKE -s echo-distcom | grep '[ /]foo4-parse4\.cpp '
+$MAKE distdir
+ls -l $distdir
+test -f $distdir/parse1.cc
+test -f $distdir/parse2.c++
+test -f $distdir/foo3-parse3.cxx
+test -f $distdir/foo4-parse4.cpp
+
+# Sanity check on distribution.
+# Note that, for this to succeed, foo3-parse3.output and foo4-parse4.output
+# must either not be distributed, or properly cleaned by automake-generated
+# rules. We don't want to set the exact semantics yet, but want to ensure
+# they are are consistent.
+yl_distcheck
+
+# Make sure that the Yacc-derived C++ sources are erased by
+# maintainer-clean, and not by distclean.
+test -f parse1.cc
+test -f parse2.c++
+test -f foo3-parse3.cxx
+test -f foo4-parse4.cpp
+$MAKE distclean
+ls -l
+test -f parse1.cc
+test -f parse2.c++
+test -f foo3-parse3.cxx
+test -f foo4-parse4.cpp
+./configure # Re-create 'Makefile'.
+$MAKE maintainer-clean
+ls -l
+test ! -e parse1.cc
+test ! -e parse2.c++
+test ! -e foo3-parse3.cxx
+test ! -e foo4-parse4.cpp
+
+:
diff --git a/t/yacc-d-basic.sh b/t/yacc-d-basic.sh
new file mode 100644
index 000000000..9e9e94b10
--- /dev/null
+++ b/t/yacc-d-basic.sh
@@ -0,0 +1,163 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Tests Yacc support with yacc-generated headers
+# (i.e., '-d' in *YFLAGS).
+# Keep in sync with sister test 'yacc-d-cxx.sh'.
+
+required='cc yacc'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_YACC
+AC_CONFIG_FILES([foo/Makefile bar/Makefile baz/Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+SUBDIRS = foo bar baz
+END
+
+mkdir foo bar baz
+
+cat > foo/Makefile.am <<'END'
+bin_PROGRAMS = zardoz
+zardoz_SOURCES = parse.y main.c
+.PHONY: echo-distcom
+echo-distcom:
+ @echo ' ' $(DIST_COMMON) ' '
+END
+cp foo/Makefile.am bar/Makefile.am
+cp foo/Makefile.am baz/Makefile.am
+
+cat > foo/parse.y << 'END'
+%{
+#include "parse.h"
+int yylex () { return 0; }
+void yyerror (char *s) {}
+%}
+%%
+x : 'x' {};
+%%
+END
+# Using ylwrap, we actually generate y.tab.[ch]. Unfortunately, we
+# forgot to rename #include "y.tab.h" into #include "parse.h" during
+# the conversion from y.tab.c to parse.c. This was OK when Bison was
+# not issuing such an #include (up to 2.6).
+#
+# To make sure that we perform this conversion even with version of
+# Bison that do not generate this include, in bar/parse.y, use y.tab.h
+# instead of parse.h, and check the ylwrap does replace "y.tab.h" with
+# "parse.h".
+sed -e 's/parse\.h/y.tab.h/' <foo/parse.y >bar/parse.y
+
+cat > foo/main.c << 'END'
+#include "parse.h"
+int main ()
+{
+ return yyparse ();
+}
+END
+cp foo/main.c bar/main.c
+
+# Even the generated header file is renamed when target-specific YFLAGS
+# are used. This might not be the best behavior, but it has been in
+# place for quite a long time, so just go along with it for now.
+sed 's/"parse\.h"/"zardoz-parse.h"/' foo/parse.y > baz/parse.y
+sed 's/"parse\.h"/"zardoz-parse.h"/' foo/main.c > baz/main.c
+
+$ACLOCAL
+$AUTOCONF
+
+$AUTOMAKE -a
+$FGREP parse.h foo/Makefile.in bar/Makefile.in baz/Makefile.in && exit 1
+
+cat >> foo/Makefile.am <<END
+BUILT_SOURCES = parse.h
+YFLAGS=\
+-d
+END
+$AUTOMAKE -Wno-gnu foo/Makefile
+
+sed 's/EOL$//' >> bar/Makefile.am <<END
+AM_YFLAGS${tab}= -d EOL
+BUILT_SOURCES = parse.h
+END
+$AUTOMAKE bar/Makefile
+
+cat >> baz/Makefile.am <<END
+BUILT_SOURCES = zardoz-parse.h
+zardoz_YFLAGS =-d${tab}
+END
+$AUTOMAKE baz/Makefile
+
+./configure
+
+$MAKE
+
+generated="
+ foo/parse.c
+ foo/parse.h
+ bar/parse.c
+ bar/parse.h
+ baz/zardoz-parse.c
+ baz/zardoz-parse.h
+"
+
+for i in $generated; do
+ test -f $i
+done
+
+# There must remain no obsolete header guard.
+grep Y_TAB_H $generated && exit 1
+
+# The generated C source and header files must be shipped.
+for dir in foo bar; do
+ cd $dir
+ $MAKE echo-distcom
+ $MAKE -s echo-distcom | grep '[ /]parse.c '
+ $MAKE -s echo-distcom | grep '[ /]parse.h '
+ cd ..
+done
+cd baz
+$MAKE echo-distcom
+$MAKE -s echo-distcom | grep '[ /]zardoz-parse.c '
+$MAKE -s echo-distcom | grep '[ /]zardoz-parse.h '
+cd ..
+
+$MAKE distdir
+ls -l $distdir
+for i in $generated; do
+ test -f $distdir/$i
+done
+
+# Sanity check the distribution.
+yl_distcheck
+
+# While we are at it, make sure that 'parse.c' and 'parse.h' are erased
+# by maintainer-clean, and not by distclean.
+$MAKE distclean
+for i in $generated; do
+ test -f $i
+done
+./configure # Re-create 'Makefile'.
+$MAKE maintainer-clean
+for i in $generated; do
+ test ! -e $i
+done
+
+:
diff --git a/t/yacc-d-cxx.sh b/t/yacc-d-cxx.sh
new file mode 100644
index 000000000..c6452a3ad
--- /dev/null
+++ b/t/yacc-d-cxx.sh
@@ -0,0 +1,232 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Various tests on Yacc/C++ support with yacc-generated headers
+# (i.e., '-d' in *YFLAGS).
+# Keep in sync with sister test 'yacc-d-basic.sh'.
+
+required='c++ yacc'
+. test-init.sh
+
+write_parse ()
+{
+ header=$1
+ unindent <<END
+ %{
+ // Valid C++, but deliberately invalid C.
+ #include <cstdlib>
+ #include "$header"
+ int yylex (void) { return 0; }
+ void yyerror (const char *s) {}
+ %}
+ %%
+ x : 'x' {};
+ %%
+END
+}
+
+write_main ()
+{
+ header=$1
+ unindent <<END
+ // Valid C++, but deliberately invalid C.
+ #include <cstdio>
+ #include "$header"
+ int main (int argc, char **argv)
+ {
+ int yyparse (void);
+ return yyparse ();
+ }
+END
+}
+
+cat >> configure.ac << 'END'
+AC_PROG_CXX
+AC_PROG_YACC
+AC_CONFIG_FILES([foo/Makefile bar/Makefile baz/Makefile qux/Makefile])
+AC_OUTPUT
+END
+
+mkdir foo bar baz qux baz/sub
+
+# These makefiles will be extended later.
+cat > Makefile.am <<'END'
+.PHONY: echo-distcom
+echo-distcom:
+ @echo ' ' $(DIST_COMMON) ' '
+END
+cp Makefile.am foo/Makefile.am
+cp Makefile.am bar/Makefile.am
+cp Makefile.am baz/Makefile.am
+cp Makefile.am qux/Makefile.am
+
+cat >> Makefile.am <<'END'
+SUBDIRS = foo bar baz qux
+END
+
+$ACLOCAL
+$AUTOCONF
+
+cp "$am_scriptdir/ylwrap" . \
+ || fatal_ "cannot fetch auxiliary script 'ylwrap'"
+
+$AUTOMAKE Makefile
+
+# Try with -d in $(YFLAGS) (don't do this in real life!).
+cat >> foo/Makefile.am <<END
+bin_PROGRAMS = zardoz
+zardoz_SOURCES = parse.yy main.cc
+BUILT_SOURCES = parse.hh
+YFLAGS=\
+-d
+END
+
+$AUTOMAKE -Wno-gnu foo/Makefile
+
+write_parse parse.hh > foo/parse.yy
+write_main parse.hh > foo/main.cc
+
+# Try with -d in $(AM_YFLAGS).
+cat >> bar/Makefile.am <<END
+bin_PROGRAMS = zardoz
+zardoz_SOURCES = parse.ypp main.cpp
+BUILT_SOURCES = parse.hpp
+AM_YFLAGS${tab}= -d ${tab}
+END
+
+$AUTOMAKE bar/Makefile
+
+write_parse parse.hpp > bar/parse.ypp
+write_main parse.hpp > bar/main.cpp
+
+# Try with -d in $(AM_YFLAGS), and a subdir parser.
+cat >> baz/Makefile.am <<END
+AUTOMAKE_OPTIONS = subdir-objects
+bin_PROGRAMS = joe
+joe_SOURCES = sub/parse.y++ sub/main.c++
+BUILT_SOURCES = sub/parse.h++
+AM_YFLAGS = \
+${tab}-d
+END
+
+$AUTOMAKE baz/Makefile
+
+write_parse sub/parse.h++ > baz/sub/parse.y++
+write_main sub/parse.h++ > baz/sub/main.c++
+
+# Try with -d in $(xxx_YFLAGS) (per-object flag).
+cat >> qux/Makefile.am <<END
+bin_PROGRAMS = maude
+maude_SOURCES = parse.yxx main.cxx
+maude_YFLAGS=${tab} -d${tab}
+BUILT_SOURCES = maude-parse.hxx
+END
+
+$AUTOMAKE qux/Makefile
+
+write_parse maude-parse.hxx > qux/parse.yxx
+write_main maude-parse.hxx > qux/main.cxx
+
+./configure
+
+$MAKE
+ls -l . foo bar baz baz/sub qux # For debugging.
+
+test -f foo/parse.cc
+test -f foo/parse.hh
+test -f bar/parse.cpp
+test -f bar/parse.hpp
+test -f baz/sub/parse.c++
+test -f baz/sub/parse.h++
+test -f qux/maude-parse.cxx
+test -f qux/maude-parse.hxx
+
+# The ylwrap script must be shipped.
+$MAKE echo-distcom
+$MAKE -s echo-distcom | grep '[ /]ylwrap '
+
+# The generated C++ source and header files must be shipped.
+cd foo
+$MAKE echo-distcom
+$MAKE -s echo-distcom | grep '[ /]parse\.cc '
+$MAKE -s echo-distcom | grep '[ /]parse\.hh '
+cd ..
+cd bar
+$MAKE echo-distcom
+$MAKE -s echo-distcom | grep '[ /]parse\.cpp '
+$MAKE -s echo-distcom | grep '[ /]parse\.hpp '
+cd ..
+cd baz
+$MAKE echo-distcom
+$MAKE -s echo-distcom | grep '[ /]sub/parse\.c++ '
+$MAKE -s echo-distcom | grep '[ /]sub/parse\.h++ '
+cd ..
+cd qux
+$MAKE echo-distcom
+$MAKE -s echo-distcom | grep '[ /]maude-parse\.cxx '
+$MAKE -s echo-distcom | grep '[ /]maude-parse\.hxx '
+cd ..
+
+$MAKE distdir
+find $distdir # For debugging.
+
+test -f $distdir/ylwrap
+test -f $distdir/foo/parse.cc
+test -f $distdir/foo/parse.hh
+test -f $distdir/bar/parse.cpp
+test -f $distdir/bar/parse.hpp
+test -f $distdir/baz/sub/parse.c++
+test -f $distdir/baz/sub/parse.h++
+test -f $distdir/qux/maude-parse.cxx
+test -f $distdir/qux/maude-parse.hxx
+
+# The Yacc-derived C++ sources must be created, and not removed once
+# compiled (i.e., not treated like "intermediate files" in the GNU
+# make sense).
+yl_distcheck
+
+# Check that we can recover from deleted headers.
+$MAKE clean
+rm -f foo/parse.hh bar/parse.hpp baz/sub/parse.h++ qux/maude-parse.hxx
+$MAKE
+test -f foo/parse.hh
+test -f bar/parse.hpp
+test -f baz/sub/parse.h++
+test -f qux/maude-parse.hxx
+
+# Make sure that the Yacc-derived C++ sources are erased by
+# maintainer-clean, and not by distclean.
+$MAKE distclean
+test -f foo/parse.cc
+test -f foo/parse.hh
+test -f bar/parse.cpp
+test -f bar/parse.hpp
+test -f baz/sub/parse.c++
+test -f baz/sub/parse.h++
+test -f qux/maude-parse.cxx
+test -f qux/maude-parse.hxx
+./configure # Re-create 'Makefile'.
+$MAKE maintainer-clean
+test ! -e foo/parse.cc
+test ! -e foo/parse.hh
+test ! -e bar/parse.cpp
+test ! -e bar/parse.hpp
+test ! -e baz/sub/parse.c++
+test ! -e baz/sub/parse.h++
+test ! -e qux/maude-parse.cxx
+test ! -e qux/maude-parse.hxx
+
+:
diff --git a/t/yacc-d-vpath.sh b/t/yacc-d-vpath.sh
new file mode 100644
index 000000000..da679b413
--- /dev/null
+++ b/t/yacc-d-vpath.sh
@@ -0,0 +1,108 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# This test checks that dependent files are updated before including
+# in the distribution. 'parse.c' depends on 'parse.y'. The latter is
+# updated so that 'parse.c' should be rebuilt. Then we are running
+# 'make' and 'make distdir' and check whether the version of 'parse.c'
+# to be distributed is up to date.
+
+# Please keep this in sync with sister test 'yaccvpath.sh'.
+
+required='cc yacc'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_YACC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo
+foo_SOURCES = parse.y foo.c
+AM_YFLAGS = -d
+END
+
+# Original parser, with 'foobar'.
+cat > parse.y << 'END'
+%{
+int yylex () { return 0; }
+void yyerror (char *s) {}
+%}
+%token FOOBAR
+%%
+foobar : 'f' 'o' 'o' 'b' 'a' 'r' {};
+END
+
+cat > foo.c << 'END'
+#include "parse.h"
+int main () { return 0; }
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+$YACC -d parse.y
+mv y.tab.c parse.c
+mv y.tab.h parse.h
+# Sanity checks.
+grep foobar parse.c
+grep FOOBAR parse.h
+
+mkdir sub
+cd sub
+../configure
+
+$sleep
+
+# New parser, with 'fubar'.
+cat > ../parse.y << 'END'
+%{
+int yylex () { return 0; }
+void yyerror (char *s) {}
+%}
+%token FUBAR
+%%
+fubar : 'f' 'u' 'b' 'a' 'r' {};
+END
+
+$MAKE
+$MAKE distdir
+$FGREP fubar $distdir/parse.c
+$FGREP FUBAR $distdir/parse.h
+
+# Now check to make sure that 'make dist' will rebuild the parser.
+
+$sleep
+
+# New parser, with 'maude'.
+cat > ../parse.y << 'END'
+%{
+int yylex () { return 0; }
+void yyerror (char *s) {}
+%}
+%token MAUDE
+%%
+maude : 'm' 'a' 'u' 'd' 'e' {};
+END
+
+$MAKE distdir
+$FGREP maude $distdir/parse.c
+$FGREP MAUDE $distdir/parse.h
+
+:
diff --git a/t/yacc-deleted-headers.sh b/t/yacc-deleted-headers.sh
new file mode 100644
index 000000000..87a2acca1
--- /dev/null
+++ b/t/yacc-deleted-headers.sh
@@ -0,0 +1,163 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Tests that we can recover from deleted headers generated by 'yacc -d'.
+
+required='cc yacc'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_YACC
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+bin_PROGRAMS = p1 p2 p3 p4
+# The order in which files are listed in the p*_SOURCES variables
+# below is significant, since it causes make failures whenever
+# the proper definition of BUILT_SOURCES or the declaration of
+# extra dependencies for 'main3.o' are removed.
+p1_SOURCES = main1.c parse1.y
+p2_SOURCES = main2.c parse2.y
+p3_SOURCES = main3.c parse3.y parse3.h
+p4_SOURCES = parse4.y
+AM_YFLAGS = -d
+p2_YFLAGS = -d
+
+BUILT_SOURCES = parse1.h p2-parse2.h
+
+# When we know which files include a yacc-generated header, we
+# should be able to just declare dependencies directly instead
+# of relying on the BUILT_SOURCES hack, and things should still
+# work correctly.
+main3.@OBJEXT@ parse3.@OBJEXT@: parse3.h
+
+.PHONY: clean-p3 build-p3
+build-p3: p3$(EXEEXT)
+clean-p3:
+ rm -f p3$(EXEEXT)
+END
+
+cat > parse1.y << 'END'
+%{
+#include "parse1.h"
+int yylex () { return 0; }
+void yyerror (char *s) { return; }
+%}
+%token ZARDOZ
+%%
+x : 'x' {};
+%%
+END
+
+cat > main1.c << 'END'
+#include "parse1.h"
+int main (void)
+{
+ return ZARDOZ + yyparse ();
+}
+END
+
+sed 's/"parse1\.h"/"p2-parse2.h"/' parse1.y > parse2.y
+sed 's/"parse1\.h"/"p2-parse2.h"/' main1.c > main2.c
+
+sed 's/"parse1\.h"/"parse3.h"/' parse1.y > parse3.y
+sed 's/"parse1\.h"/"parse3.h"/' main1.c > main3.c
+
+cat > parse4.y << 'END'
+%{
+int yylex () { return 0; }
+void yyerror (char *s) { return; }
+%}
+%%
+x : 'x' {};
+%%
+int main (void)
+{
+ return 0;
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+$MAKE
+
+headers='parse1.h p2-parse2.h parse3.h parse4.h'
+
+# Check that we remake only the necessary headers.
+
+rm -f $headers
+$MAKE parse1.h
+test -f parse1.h
+test ! -e p2-parse2.h
+test ! -e parse3.h
+test ! -e parse4.h
+
+rm -f $headers
+$MAKE p2-parse2.h
+test ! -e parse1.h
+test -f p2-parse2.h
+test ! -e parse3.h
+test ! -e parse4.h
+
+rm -f $headers
+$MAKE parse3.h
+test ! -e parse1.h
+test ! -e p2-parse2.h
+test -f parse3.h
+test ! -e parse4.h
+# Since we declared parse3.h into $(p3_SOURCES), make should be
+# able to rebuild it automatically before remaking 'p3'.
+rm -f $headers
+$MAKE clean-p3
+test ! -e parse3.h # Sanity check.
+$MAKE build-p3
+test -f parse3.h
+
+$MAKE
+
+rm -f $headers
+$MAKE parse4.h
+test ! -e parse1.h
+test ! -e p2-parse2.h
+test ! -e parse3.h
+test -f parse4.h
+
+# Now remake all the headers together.
+
+rm -f $headers
+$MAKE $headers
+test -f parse1.h
+test -f p2-parse2.h
+test -f parse3.h
+test -f parse4.h
+
+# Most headers should be remade by "make all".
+
+rm -f $headers
+$MAKE all
+test -f parse1.h
+test -f p2-parse2.h
+test -f parse3.h
+# parse4.h is not declared in any *_SOURCES variable, nor #included
+# by any C source file, so it shouldn't be rebuilt by "make all".
+test ! -e parse4.h
+
+:
diff --git a/t/yacc-depend.sh b/t/yacc-depend.sh
new file mode 100644
index 000000000..d3d568b0a
--- /dev/null
+++ b/t/yacc-depend.sh
@@ -0,0 +1,82 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure depcomp does not needlessly update headers for yacc rules.
+# Report from Paolo Bonzini.
+
+required='cc yacc'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_YACC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo
+AM_YFLAGS = -d
+foo_SOURCES = foo.y main.c
+BUILT_SOURCES = foo.h
+END
+
+cat > foo.y << 'END'
+%{
+int yylex () { return 0; }
+void yyerror (char *s) { return; }
+%}
+%token TOKEN
+%%
+foobar : 'f' 'o' 'o' 'b' 'a' 'r' {};
+END
+
+
+cat > main.c << 'END'
+#include "foo.h"
+int main(void)
+{
+ return yyparse ();
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+# Try to enable dependency tracking if possible, even if that means
+# using slow dependency extractors.
+./configure --enable-dependency-tracking
+$MAKE
+ls -l # For debugging.
+
+# Make sure foo.h is not updated if not really needed.
+$sleep
+: > my-timestamp
+$sleep
+touch foo.y
+$MAKE
+stat my-timestamp foo.* || : # For debugging.
+is_newest my-timestamp foo.h
+
+# Make sure foo.h is updated if needed.
+$sleep
+sed 's/TOKEN/TEKON/g' foo.y > t
+mv -f t foo.y
+$MAKE
+stat my-timestamp foo.* || : # For debugging.
+is_newest foo.h my-timestamp
+
+:
diff --git a/t/yacc-depend2.sh b/t/yacc-depend2.sh
new file mode 100644
index 000000000..3d9ebb1d0
--- /dev/null
+++ b/t/yacc-depend2.sh
@@ -0,0 +1,81 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Make sure depcomp does not needlessly update headers and objects
+# for yacc rules. This test still fails with FreeBSD make (but passes
+# with NetBSD make).
+
+required='cc yacc'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_YACC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo
+AM_YFLAGS = -d
+foo_SOURCES = foo.y main.c
+BUILT_SOURCES = foo.h
+.PHONY: test-time-unchanged test-time-changed
+test-time-unchanged:
+ is_newest foo.y foo.h main.$(OBJEXT)
+test-time-changed:
+ is_newest main.$(OBJEXT) foo.y foo.h
+END
+
+cat > foo.y << 'END'
+%{
+int yylex () { return 0; }
+void yyerror (char *s) { return; }
+%}
+%token TOKEN
+%%
+foobar : 'f' 'o' 'o' 'b' 'a' 'r' {};
+END
+
+
+cat > main.c << 'END'
+#include "foo.h"
+int main(void)
+{
+ return yyparse ();
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+# Try to enable dependency tracking if possible, even if that means
+# using slow dependency extractors.
+./configure --enable-dependency-tracking
+$MAKE
+ls -l # For debugging.
+
+$sleep
+touch foo.y
+$MAKE
+$MAKE test-time-unchanged
+$sleep
+sed 's/TOKEN/TEKON/g' foo.y > t
+mv -f t foo.y
+$MAKE
+$MAKE test-time-changed
+
+:
diff --git a/t/yacc-dist-nobuild-subdir.sh b/t/yacc-dist-nobuild-subdir.sh
new file mode 100644
index 000000000..5fe1b5218
--- /dev/null
+++ b/t/yacc-dist-nobuild-subdir.sh
@@ -0,0 +1,92 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that VPATH builds and "make distcheck" works with packages
+# using yacc and the automake 'subdir-objects' option.
+# Exposes automake bug#8485.
+
+required='cc yacc'
+. test-init.sh
+
+# This test is bounded to fail for any implementation that
+# triggers automake bug#7884.
+useless_vpath_rebuild && skip_ "would trip on automake bug#7884"
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_YACC
+AC_OUTPUT
+END
+
+mkdir sub
+
+cat > sub/parse.y << 'END'
+%{
+int yylex () { return 0; }
+void yyerror (char *s) { return; }
+%}
+%%
+x : 'x' {};
+%%
+int main (void)
+{
+ return yyparse ();
+}
+END
+
+cat > Makefile.am <<'END'
+AUTOMAKE_OPTIONS = subdir-objects
+noinst_PROGRAMS = foo bar
+foo_SOURCES = sub/parse.y
+bar_SOURCES = $(foo_SOURCES)
+AM_YFLAGS = -d
+bar_YFLAGS =
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+$MAKE distdir
+
+# Yacc-derived C source and header files must be built and distributed.
+
+test -f sub/parse.c
+test -f sub/parse.h
+test -f sub/bar-parse.c
+test ! -e sub/bar-parse.h
+
+test -f $distdir/sub/parse.c
+test -f $distdir/sub/parse.h
+test -f $distdir/sub/bar-parse.c
+test ! -e $distdir/sub/bar-parse.h
+
+# But they shouldn't be rebuilt in VPATH builds.
+
+mkdir $distdir/build
+chmod -R a-w $distdir
+cd $distdir/build
+chmod u+w .
+# Try to enable dependency tracking even with slow dependency
+# extractors, to improve coverage.
+../configure --enable-dependency-tracking YACC=false
+$MAKE
+ls -l sub/*.[ch] && exit 1
+
+env DISTCHECK_CONFIGURE_FLAGS='YACC=false' $MAKE distcheck
+
+:
diff --git a/t/yacc-dist-nobuild.sh b/t/yacc-dist-nobuild.sh
new file mode 100644
index 000000000..247e32b3f
--- /dev/null
+++ b/t/yacc-dist-nobuild.sh
@@ -0,0 +1,89 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that distributed Yacc-generated parsers are not uselessly
+# remade from an unpacked distributed tarball.
+# See automake bug#7884.
+
+required='cc yacc'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_YACC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foobar zardoz
+foobar_SOURCES = parse.y main.c
+zardoz_SOURCES = $(foobar_SOURCES)
+zardoz_YFLAGS = -d
+END
+
+cat > parse.y << 'END'
+%{
+int yylex () { return 0; }
+void yyerror (char *s) {}
+%}
+%%
+foobar : 'f' 'o' 'o' 'b' 'a' 'r' {};
+END
+
+cat > main.c << 'END'
+int main () { return 0; }
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+$MAKE
+
+$MAKE distdir
+chmod -R a-w $distdir
+
+mkdir bin
+cat > bin/yacc <<'END'
+#!/bin/sh
+echo "$0 invoked, shouldn't happen!" >&2
+exit 1
+END
+cp bin/yacc bin/bison
+chmod a+x bin/yacc bin/bison
+PATH=$(pwd)/bin$PATH_SEPARATOR$PATH
+
+YACC=yacc BISON=bison
+export YACC BISON
+
+mkdir build
+cd build
+../$distdir/configure
+$MAKE
+
+# Sanity check.
+cd ..
+chmod u+w $distdir
+rm -f $distdir/parse.c
+chmod a-w $distdir
+mkdir build2
+cd build2
+../$distdir/configure
+run_make -e FAIL -M
+$FGREP parse.c output
+
+:
diff --git a/t/yacc-dry.sh b/t/yacc-dry.sh
new file mode 100644
index 000000000..d76f26ffe
--- /dev/null
+++ b/t/yacc-dry.sh
@@ -0,0 +1,58 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Removal recovery rules for headers should not remove files with 'make -n'.
+
+required='cc yacc'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_YACC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AM_YFLAGS = -d
+bin_PROGRAMS = foo
+foo_SOURCES = foo.c parse.y
+END
+
+cat > foo.c << 'END'
+int main () { return 0; }
+END
+
+cat > parse.y << 'END'
+%{
+int yylex () { return 0; }
+void yyerror (char *s) {}
+%}
+%%
+foobar : 'f' 'o' 'o' 'b' 'a' 'r' {};
+END
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+$AUTOCONF
+./configure
+$MAKE
+
+rm -f parse.h
+$MAKE -n parse.h
+test -f parse.c
+test ! -e parse.h
+
+:
diff --git a/t/yacc-grepping.sh b/t/yacc-grepping.sh
new file mode 100644
index 000000000..b45ca7abc
--- /dev/null
+++ b/t/yacc-grepping.sh
@@ -0,0 +1,80 @@
+#! /bin/sh
+# Copyright (C) 1996-2017 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 <https://www.gnu.org/licenses/>.
+
+# Some grep-based checks on yacc support:
+#
+# - Make sure intermediate .c file is built from yacc source.
+# Report from Thomas Morgan.
+#
+# - Make sure intermediate .h file is not generated nor removed
+# if (AM_)?YFLAGS do not contain '-d'.
+# Requested by Jim Meyering.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_YACC
+END
+
+# Run it here once and for all, since we are not going to modify
+# configure.ac anymore.
+$ACLOCAL
+
+cat > Makefile.am <<'END'
+bin_PROGRAMS = zardoz
+zardoz_SOURCES = zardoz.y
+END
+
+# Don't redefine several times the same variable.
+cp Makefile.am Makefile.src
+
+$AUTOMAKE -a
+$FGREP 'zardoz.c' Makefile.in
+# If zardoz.h IS mentioned, fail.
+$FGREP 'zardoz.h' Makefile.in && exit 1
+
+cp Makefile.src Makefile.am
+echo 'AM_YFLAGS = -d' >> Makefile.am
+$AUTOMAKE
+$FGREP 'zardoz.c' Makefile.in
+# If zardoz.h is NOT mentioned, fail.
+$FGREP 'zardoz.h' Makefile.in
+
+cp Makefile.src Makefile.am
+echo 'AM_YFLAGS = ' >> Makefile.am
+$AUTOMAKE
+$FGREP 'zardoz.c' Makefile.in
+# If zardoz.h IS mentioned, fail.
+$FGREP 'zardoz.h' Makefile.in && exit 1
+
+cp Makefile.src Makefile.am
+echo 'YFLAGS = -d' >> Makefile.am
+# YFLAGS is a user variable.
+AUTOMAKE_fails
+grep 'YFLAGS.* user variable' stderr
+grep 'AM_YFLAGS.* instead' stderr
+$AUTOMAKE -Wno-gnu
+# If zardoz.h is NOT mentioned, fail.
+$FGREP 'zardoz.h' Makefile.in
+
+cp Makefile.src Makefile.am
+echo 'YFLAGS = ' >> Makefile.am
+$AUTOMAKE -Wno-gnu
+# If zardoz.h IS mentioned, fail.
+$FGREP 'zardoz.h' Makefile.in && exit 1
+
+:
diff --git a/t/yacc-grepping2.sh b/t/yacc-grepping2.sh
new file mode 100644
index 000000000..71be64dbe
--- /dev/null
+++ b/t/yacc-grepping2.sh
@@ -0,0 +1,81 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test of yacc functionality, derived from GNU binutils
+# by Tim Van Holder.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_YACC
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = maude
+maude_SOURCES = sub/maude.y
+END
+
+mkdir sub
+
+: > sub/maude.y
+
+$ACLOCAL
+# FIXME: stop disabling the warnings in the 'unsupported' category
+# FIXME: once the 'subdir-objects' option has been mandatory.
+$AUTOMAKE -a -Wno-unsupported
+
+grep '^maude\.c:.*maude\.y' Makefile.in
+
+
+## Try again with subdir-objects.
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = subdir-objects
+bin_PROGRAMS = maude
+maude_SOURCES = sub/maude.y
+END
+
+$AUTOMAKE -a
+
+# No rule needed, the default .y.c: inference rule is enough
+# (but there may be an additional dependency on a dirstamp file).
+grep '^sub/maude\.c:.*maude\.y' Makefile.in && exit 1
+
+
+## Try again with per-exe flags.
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = maude
+maude_SOURCES = sub/maude.y
+## A particularly trickey case.
+maude_YFLAGS = -d
+END
+
+# FIXME: stop disabling the warnings in the 'unsupported' category
+# FIXME: once the 'subdir-objects' option has been mandatory.
+$AUTOMAKE -a -Wno-unsupported
+
+# Rule should use maude_YFLAGS.
+grep 'AM_YFLAGS.*maude' Makefile.in && exit 1
+
+# Silly regression.
+grep 'maudec' Makefile.in && exit 1
+
+# Make sure the .o file is required.
+grep '^am_maude_OBJECTS.*maude' Makefile.in
+
+:
diff --git a/t/yacc-headers-and-dist-pr47.sh b/t/yacc-headers-and-dist-pr47.sh
new file mode 100644
index 000000000..ef81f7a23
--- /dev/null
+++ b/t/yacc-headers-and-dist-pr47.sh
@@ -0,0 +1,89 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test to make sure dependencies are generated correctly for .h files.
+# Report from Richard Boulton.
+#
+# Also check that the sources of the generated parser are distributed.
+# PR/47.
+
+required='cc yacc'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_YACC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo
+foo_SOURCES = foo.y
+AM_YFLAGS = -d
+
+check-dist: distdir
+ test -f $(distdir)/foo.y
+ test -f $(distdir)/foo.c
+ test -f $(distdir)/foo.h
+END
+
+# The %union will cause Bison to output '#line's in y.tab.h too.
+cat > foo.y << 'END'
+%union
+{
+ int i;
+ char c;
+}
+%%
+WORD: "up";
+%%
+END
+
+$ACLOCAL
+$AUTOMAKE -a
+$AUTOCONF
+./configure
+
+$MAKE foo.h
+
+test -f foo.h
+
+rm -f foo.h foo.c
+$MAKE check-dist
+
+# We should be able to recover if foo.h is deleted.
+
+rm -f foo.h
+$MAKE foo.h
+test -f foo.h
+
+# Make sure '#line ... y.tab.h' gets replaced.
+$FGREP 'y.tab.h' foo.h && exit 1
+
+# Make distclean must not erase foo.c nor foo.h (by GNU standards) ...
+$MAKE foo.c
+test -f foo.h
+test -f foo.c
+$MAKE distclean
+test -f foo.h
+test -f foo.c
+# ... but maintainer-clean should.
+./configure # Re-create 'Makefile'.
+$MAKE maintainer-clean
+test ! -e foo.h
+test ! -e foo.c
+
+:
diff --git a/t/yacc-line.sh b/t/yacc-line.sh
new file mode 100644
index 000000000..6bf349f17
--- /dev/null
+++ b/t/yacc-line.sh
@@ -0,0 +1,126 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that automake yacc support ensures that yacc-generated C
+# files use correct "#line" directives. Try also with the
+# 'subdir-object' option enabled.
+# See also sister test 'lex-line.sh'.
+
+required='cc yacc'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_CONFIG_FILES([sub/Makefile])
+AC_PROG_CC
+AC_PROG_YACC
+AC_OUTPUT
+END
+
+mkdir dir sub sub/dir
+
+cat > Makefile.am << 'END'
+SUBDIRS = sub
+bin_PROGRAMS = foo bar
+AM_YFLAGS = -d
+bar_YFLAGS =
+foo_SOURCES = zardoz.y
+bar_SOURCES = dir/quux.y
+## Avoid spurious failures with Solaris make.
+zardoz.@OBJEXT@: zardoz.c
+bar-quux.@OBJEXT@: bar-quux.c
+END
+
+cat > sub/Makefile.am << 'END'
+AUTOMAKE_OPTIONS = subdir-objects
+noinst_PROGRAMS = foo bar
+foo_YFLAGS = -d
+foo_SOURCES = zardoz.y
+bar_SOURCES = dir/quux.y
+## Avoid spurious failures with Solaris make.
+foo-zardoz.@OBJEXT@: foo-zardoz.c
+dir/quux.@OBJEXT@: dir/quux.c
+END
+
+cat > zardoz.y << 'END'
+%{
+int yylex () { return 0; }
+void yyerror (char *s) { return; }
+%}
+%%
+x : 'x' {};
+%%
+int main(void)
+{
+ return yyparse ();
+}
+END
+
+cp zardoz.y dir/quux.y
+cp zardoz.y sub/zardoz.y
+cp zardoz.y sub/dir/quux.y
+
+c_outputs='zardoz.c bar-quux.c sub/foo-zardoz.c sub/dir/quux.c'
+
+$ACLOCAL
+$AUTOCONF
+# FIXME: stop disabling the warnings in the 'unsupported' category
+# FIXME: once the 'subdir-objects' option has been mandatory.
+$AUTOMAKE -a -Wno-unsupported
+
+for vpath in : false; do
+
+ if $vpath; then
+ srcdir=..
+ mkdir build
+ cd build
+ else
+ srcdir=.
+ fi
+
+ $srcdir/configure
+ $MAKE
+
+ # For debugging,
+ ls -l . sub sub/dir
+ $EGREP 'line|\.y' $c_outputs
+
+ # Adjusted "#line" should not contain reference to the builddir.
+ grep '#.*line.*build.*\.y' $c_outputs && exit 1
+ # Adjusted "#line" should not contain reference to the absolute
+ # srcdir.
+ $EGREP '#.*line *"?/.*\.y' $c_outputs && exit 1
+ # Adjusted "#line" should not contain reference to the default
+ # output file names, e.g., 'y.tab.c' and 'y.tab.h'.
+ grep '#.*line.*y\.tab\.' $c_outputs && exit 1
+ # Look out for a silly regression.
+ grep "#.*\.y.*\.y" $c_outputs && exit 1
+ if $vpath; then
+ grep '#.*line.*"\.\./zardoz\.y"' zardoz.c
+ grep '#.*line.*"\.\./dir/quux\.y"' bar-quux.c
+ grep '#.*line.*"\.\./\.\./sub/zardoz\.y"' sub/foo-zardoz.c
+ grep '#.*line.*"\.\./\.\./sub/dir/quux\.y"' sub/dir/quux.c
+ else
+ grep '#.*line.*"zardoz\.y"' zardoz.c
+ grep '#.*line.*"dir/quux\.y"' bar-quux.c
+ grep '#.*line.*"zardoz\.y"' sub/foo-zardoz.c
+ grep '#.*line.*"dir/quux\.y"' sub/dir/quux.c
+ fi
+
+ cd $srcdir
+
+done
+
+:
diff --git a/t/yacc-misc.sh b/t/yacc-misc.sh
new file mode 100644
index 000000000..2206073c7
--- /dev/null
+++ b/t/yacc-misc.sh
@@ -0,0 +1,86 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# Some simple tests of ylwrap functionality.
+
+required='cc yacc'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_YACC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo bar
+foo_SOURCES = parse.y foo.c
+bar_SOURCES = bar.y foo.c
+END
+
+# First parser.
+cat > parse.y << 'END'
+%{
+int yylex () { return 0; }
+void yyerror (char *s) {}
+%}
+%%
+foobar : 'f' 'o' 'o' 'b' 'a' 'r' {};
+END
+
+# Second parser.
+cat > bar.y << 'END'
+%{
+int yylex () { return 0; }
+void yyerror (char *s) {}
+%}
+%%
+fubar : 'f' 'o' 'o' 'b' 'a' 'r' {};
+END
+
+cat > foo.c << 'END'
+int main (void)
+{
+ return 0;
+}
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+test -f ylwrap
+
+mkdir sub
+cd sub
+
+../configure
+$MAKE
+
+grep '^#.*/sub/\.\./' bar.c && exit 1
+grep '^#.*/sub/\.\./' parse.c && exit 1
+
+# Make distclean must not erase bar.c nor parse.c (by GNU standards) ...
+$MAKE distclean
+test -f bar.c
+test -f parse.c
+# ... but maintainer-clean should.
+../configure
+$MAKE maintainer-clean
+test ! -e bar.c
+test ! -e parse.c
+
+:
diff --git a/t/yacc-mix-c-cxx.sh b/t/yacc-mix-c-cxx.sh
new file mode 100644
index 000000000..615a3a258
--- /dev/null
+++ b/t/yacc-mix-c-cxx.sh
@@ -0,0 +1,206 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that many different Yacc parsers (both C and C++) can co-exists
+# in the same directory.
+
+required='cc c++ yacc'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_CXX
+AC_PROG_YACC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = c1 c2 cxx1 cxx2 cxx3
+AM_YFLAGS = -d
+
+c1_SOURCES = p.y p.h 1.c
+c2_SOURCES = p.y 2.c
+c2_YFLAGS =
+
+cxx1_SOURCES = parse.yy main1.cc parse.hh
+
+cxx2_SOURCES = parse2.y++ main2.c++
+cxx2_YFLAGS =
+
+cxx3_SOURCES = parse3.yxx main3.cxx
+
+BUILT_SOURCES = p.h parse.hh parse3.hxx
+END
+
+# The content of all the .c and .y files created below is valid C but
+# deliberately invalid C++.
+# Vice versa, the content of all the .c++, .cxx, .cc, .y++, .yxx and
+# .yy files created below is valid C++ but deliberately invalid C.
+
+cat > p.y <<'END'
+%{
+int yylex (void) { int new = 0; return new; }
+void yyerror (char *s) { return; }
+%}
+%token ZARDOZ
+%%
+x : 'x' {};
+%%
+END
+
+cat > 1.c <<'END'
+#include "p.h"
+int main ()
+{
+ int new = ZARDOZ;
+ return yyparse () + new;
+}
+
+END
+
+cat > 2.c <<'END'
+int main ()
+{
+ int yyparse ();
+ int new = 0;
+ return yyparse () + new;
+}
+END
+
+cat > parse.yy <<'END'
+%{
+#include <cstdlib>
+#include "parse.hh"
+int yylex (void) { return 0; }
+void yyerror (const char *s) { return; }
+%}
+%token FOOBAR
+%%
+x : 'x' {};
+%%
+END
+
+cat > parse2.y++ <<'END'
+%{
+#include <cstdlib>
+int yylex (void) { return 0; }
+void yyerror (const char *s) { return; }
+%}
+%%
+x : 'x' {};
+%%
+END
+
+cat > main1.cc <<'END'
+using namespace std;
+#include "parse.hh"
+int main (int argc, char **argv)
+{
+ int yyparse (void);
+ return yyparse () + FOOBAR;
+}
+END
+
+cat > main2.c++ <<'END'
+using namespace std;
+int main (int argc, char **argv)
+{
+ int yyparse (void);
+ return yyparse ();
+}
+END
+
+edit () { sed -e 's/FOOBAR/BAZQUUX/' -e 's/"parse\.hh"/"parse3.hxx"/'; }
+edit <parse.yy >parse3.yxx
+edit <main1.cc >main3.cxx
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+# Try a VPATH and by default serial build first, and then an in-tree
+# and by default parallel build.
+
+for try in 0 1; do
+
+ if test $try -eq 0; then
+ # VPATH serial build.
+ mkdir build
+ cd build
+ srcdir=..
+ debug_info="ls -l . $srcdir"
+ run_make=$MAKE
+ elif test $try -eq 1; then
+ # In-tree parallel build.
+ srcdir=.
+ debug_info="ls -l"
+ case $MAKE in
+ *\ -j*)
+ # Degree of parallelism already specified by the user: do
+ # not override it.
+ run_make=$MAKE;;
+ *)
+ # Some make implementations (e.g., HP-UX) don't grok '-j',
+ # some require no space between '-j' and the number of jobs
+ # (e.g., older GNU make versions), and some *do* require a
+ # space between '-j' and the number of jobs (e.g., Solaris
+ # dmake). We need a runtime test to see what works.
+ echo 'all:' > Makefile
+ for run_make in "$MAKE -j3" "$MAKE -j 3" "$MAKE"; do
+ $run_make && break
+ done
+ rm -f Makefile
+ esac
+ else
+ echo "$me: invalid value of \$try '$try'" >&2
+ exit 99
+ fi
+
+ $srcdir/configure
+
+ $run_make
+ $debug_info
+
+ test -f p.c
+ test -f p.h
+ test -f c2-p.c
+ test ! -e c2-p.h
+
+ test -f parse.cc
+ test -f parse.hh
+ test -f parse3.cxx
+ test -f parse3.hxx
+
+ test -f cxx2-parse2.c++
+ test ! -e parse2.h++
+ test ! -e cxx2-parse2.h++
+
+ # Minimal checks about recovering from header removal.
+ rm -f p.h parse.hh parse3.hxx
+ $run_make p.h parse.hh
+ $debug_info
+ test -f p.h
+ test -f parse.hh
+ test ! -e parse3.hxx
+ $run_make
+ $debug_info
+ test -f parse3.hxx
+
+ cd $srcdir
+
+done
+
+:
diff --git a/t/yacc-nodist.sh b/t/yacc-nodist.sh
new file mode 100644
index 000000000..8717d67a3
--- /dev/null
+++ b/t/yacc-nodist.sh
@@ -0,0 +1,101 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Checks for .c and .h files derived from non-distributed yacc sources.
+# The test 'yacc-pr204.sh' does similar check with AM_MAINTAINER_MODE
+# enabled.
+# The tests 'lex-nodist.sh' and 'lex-pr204.sh' does similar checks
+# for lex-generated .c files.
+
+required='cc yacc'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_YACC
+AC_CONFIG_FILES([sub1/Makefile sub2/Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+SUBDIRS = sub1 sub2
+.PHONY: test-build test-dist
+test-build: all
+ ls -l . sub1 sub2
+ test -f sub1/parse.y
+ test -f sub1/parse.c
+ test -f sub2/parse.y
+ test -f sub2/parse.c
+ test -f sub2/parse.h
+test-dist: distdir
+ ls -l $(distdir) $(distdir)/sub1 $(distdir)/sub2
+ test ! -r $(distdir)/sub1/parse.y
+ test ! -r $(distdir)/sub1/parse.c
+ test ! -r $(distdir)/sub1/parse.h
+ test ! -r $(distdir)/sub2/parse.y
+ test ! -r $(distdir)/sub2/parse.c
+ test ! -r $(distdir)/sub2/parse.h
+check-local: test-build test-dist
+END
+
+mkdir sub1 sub2
+
+cat > sub1/Makefile.am << 'END'
+parse.y:
+ rm -f $@ $@-t
+ :; { : \
+ && echo "%{" \
+ && echo "int yylex () { return 0; }" \
+ && echo "void yyerror (char *s) {}" \
+ && echo "%}" \
+ && echo "%%" \
+ && echo "maude : 'm' 'a' 'u' 'd' 'e' {}"; \
+ } > $@-t
+ chmod a-w $@-t && mv -f $@-t $@
+
+bin_PROGRAMS = prog
+prog_SOURCES = main.c
+nodist_prog_SOURCES = parse.y
+CLEANFILES = $(nodist_prog_SOURCES)
+END
+
+cat sub1/Makefile.am - > sub2/Makefile.am << 'END'
+AM_YFLAGS = -d
+BUILT_SOURCES = parse.h
+END
+
+cat > sub1/main.c << 'END'
+int main ()
+{
+ return yyparse ();
+}
+END
+cat - sub1/main.c > sub2/main.c << 'END'
+#include "parse.h"
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+$MAKE
+$MAKE test-build
+$MAKE test-dist
+
+yl_distcheck
+
+:
diff --git a/t/yacc-pr204.sh b/t/yacc-pr204.sh
new file mode 100644
index 000000000..edf463f0c
--- /dev/null
+++ b/t/yacc-pr204.sh
@@ -0,0 +1,83 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# For PR 204.
+# C sources derived from nodist_ yacc sources should not be distributed.
+# See also related test 'yacc-nodist.sh'.
+# The tests 'lex-nodist.sh' and 'lex-pr204.sh' does similar checks
+# for lex-generated C files.
+
+required='cc yacc'
+. test-init.sh
+
+cat >> configure.ac <<'EOF'
+AM_MAINTAINER_MODE
+AC_PROG_CC
+AC_PROG_YACC
+AC_OUTPUT
+EOF
+
+# The PARSE2 intermediate variable is there to make
+# sure Automake match 'nodist_' against the right
+# variable name...
+cat > Makefile.am << 'EOF'
+AM_YFLAGS = -d
+EXTRA_PROGRAMS = foo
+PARSE2 = parse2.y
+nodist_foo_SOURCES = parse.y $(PARSE2)
+
+distdirtest: distdir
+ test ! -f $(distdir)/parse.c
+ test ! -f $(distdir)/parse.y
+ test ! -f $(distdir)/parse.h
+ test ! -f $(distdir)/parse2.c
+ test ! -f $(distdir)/parse2.y
+ test ! -f $(distdir)/parse2.h
+EOF
+
+cat > parse.y << 'END'
+%{
+int yylex () {return 0;}
+void yyerror (char *s) {}
+%}
+%%
+maude : 'm' 'a' 'u' 'd' 'e' {};
+END
+
+cp parse.y parse2.y
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+./configure
+$MAKE distdirtest
+
+# Make sure parse.c and parse2.c are still targets.
+$MAKE parse.c parse2.c
+test -f parse.c
+test -f parse2.c
+
+# Ensure the rebuild rule works despite AM_MAINTAINER_MODE, because
+# it's a nodist_ parser.
+$sleep
+touch parse.y parse2.y
+$sleep
+$MAKE parse.c parse2.c
+is_newest parse.c parse.y
+is_newest parse2.c parse2.y
+
+:
diff --git a/t/yacc-subdir.sh b/t/yacc-subdir.sh
new file mode 100644
index 000000000..f34868576
--- /dev/null
+++ b/t/yacc-subdir.sh
@@ -0,0 +1,106 @@
+#! /bin/sh
+# Copyright (C) 2002-2017 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 <https://www.gnu.org/licenses/>.
+
+# Test for subdir parsers.
+
+required='cc yacc'
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_YACC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+AUTOMAKE_OPTIONS = subdir-objects
+bin_PROGRAMS = foo/foo
+foo_foo_SOURCES = foo/parse.y
+AM_YFLAGS = -d
+
+.PHONY: obj
+obj: foo/parse.$(OBJEXT)
+
+.PHONY: test1 test2
+test1: foo/parse.$(OBJEXT)
+ test -f foo/parse.c
+ test -f foo/parse.$(OBJEXT)
+test2: foo/parse2.$(OBJEXT)
+ test -f foo/parse2.c
+ test -f foo/parse2.$(OBJEXT)
+END
+
+mkdir foo
+
+cat > foo/parse.y << 'END'
+%{
+int yylex () { return 0; }
+void yyerror (char *s) {}
+%}
+%%
+foobar : 'f' 'o' 'o' 'b' 'a' 'r' {};
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+mkdir sub
+cd sub
+
+../configure
+$MAKE test1
+
+# Aside of the rest of this test, let's see if we can recover from
+# parse.h removal.
+test -f foo/parse.h
+rm -f foo/parse.h
+$MAKE foo/parse.h
+test -f foo/parse.h
+
+# Make sure foo/parse.h is not updated, unless when needed.
+$sleep
+touch ../foo/parse.y
+$MAKE obj
+is_newest ../foo/parse.y foo/parse.h
+$sleep
+sed 's/%%/%token TOKEN\n%%/g' ../foo/parse.y >../foo/parse.yt
+mv -f ../foo/parse.yt ../foo/parse.y
+$MAKE obj
+is_newest foo/parse.h ../foo/parse.y
+
+# Now, adds another parser to test ylwrap.
+
+cd ..
+
+# Sleep some to make sure timestamp of Makefile.am will change.
+$sleep
+
+cp foo/parse.y foo/parse2.y
+cat >> Makefile.am << 'END'
+EXTRA_foo_foo_SOURCES = foo/parse2.y
+END
+
+$AUTOMAKE -a
+test -f ./ylwrap
+
+cd sub
+# Regenerate Makefile (automatic in GNU Make, but not in other Makes).
+./config.status
+$MAKE test2
+
+:
diff --git a/t/yacc-vpath.sh b/t/yacc-vpath.sh
new file mode 100644
index 000000000..55dff67c2
--- /dev/null
+++ b/t/yacc-vpath.sh
@@ -0,0 +1,97 @@
+#! /bin/sh
+# Copyright (C) 2001-2017 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 <https://www.gnu.org/licenses/>.
+
+# This test checks that dependent files are updated before including
+# in the distribution. 'parse.c' depends on 'parse.y'. The later is
+# updated so that 'parse.c' should be rebuild. Then we are running
+# 'make' and 'make distdir' and check whether the version of 'parse.c'
+# to be distributed is up to date.
+
+# Please keep this in sync with sister test 'yacc-d-vpath.sh'.
+
+required='cc yacc'
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_YACC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo
+foo_SOURCES = parse.y foo.c
+END
+
+# Original parser, with 'foobar'.
+cat > parse.y << 'END'
+%{
+int yylex () { return 0; }
+void yyerror (char *s) {}
+%}
+%%
+foobar : 'f' 'o' 'o' 'b' 'a' 'r' {};
+END
+
+cat > foo.c << 'END'
+int main () { return 0; }
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+$YACC parse.y
+mv y.tab.c parse.c
+
+mkdir sub
+cd sub
+../configure
+
+$sleep
+
+# New parser, with 'fubar'.
+cat > ../parse.y << 'END'
+%{
+int yylex () { return 0; }
+void yyerror (char *s) {}
+%}
+%%
+fubar : 'f' 'o' 'o' 'b' 'a' 'r' {};
+END
+
+$MAKE
+$MAKE distdir
+$FGREP fubar $distdir/parse.c
+
+# Now check to make sure that 'make dist' will rebuild the parser.
+
+$sleep
+
+# New parser, with 'maude'.
+cat > ../parse.y << 'END'
+%{
+int yylex () { return 0; }
+void yyerror (char *s) {}
+%}
+%%
+maude : 'm' 'a' 'u' 'd' 'e' {};
+END
+
+$MAKE distdir
+$FGREP maude $distdir/parse.c
+
+:
diff --git a/t/yacc-weirdnames.sh b/t/yacc-weirdnames.sh
new file mode 100644
index 000000000..a40e55725
--- /dev/null
+++ b/t/yacc-weirdnames.sh
@@ -0,0 +1,54 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that yacc sources with many dots in their name are handled
+# correctly.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AC_PROG_CXX
+AC_PROG_YACC
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = foo bar foo2 bar2
+
+foo_SOURCES = parse.y.y
+bar_SOURCES = parse.s.f..y
+bar_YFLAGS = -d
+
+foo2_SOURCES = parse..5.y++
+bar2_SOURCES = parse.yxx.yy
+bar2_YFLAGS = -d
+END
+
+outputs=' parse.y.c bar-parse.s.f..c bar-parse.s.f..h
+ parse..5.c++ bar2-parse.yxx.cc bar2-parse.yxx.hh '
+
+$ACLOCAL
+$AUTOMAKE -a
+
+$EGREP '(\.[ch]|parse)' Makefile.in # For debugging.
+
+# All expected files should be mentioned in the generated Makefile.in.
+for s in $outputs; do
+ $FGREP $s Makefile.in
+done
+
+:
diff --git a/t/yflags-cmdline-override.sh b/t/yflags-cmdline-override.sh
new file mode 100644
index 000000000..dd2bc644f
--- /dev/null
+++ b/t/yflags-cmdline-override.sh
@@ -0,0 +1,87 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that automake can cope with user-redefinition of $(YFLAGS)
+# at configure time and/or at make time.
+
+required='cc yacc'
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_PROG_CC
+AC_PROG_YACC
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+bin_PROGRAMS = foo
+foo_SOURCES = foo.y
+# A minor automake wart: automake doesn't generate code to clean
+# '*.output' files generated by yacc (it's not even clear if that
+# would be useful in general, so it's probably better to be
+# conservative).
+CLEANFILES = foo.output
+# As the '-d' flag won't be given at automake time, automake won't
+# be able to generate code to clean 'foo.h'. We can't really blame
+# automake for that.
+MAINTAINERCLEANFILES = foo.h
+END
+
+cat > foo.y << 'END'
+%{
+int yylex () { return 0; }
+void yyerror (char *s) { return; }
+int main () { return 0; }
+%}
+%%
+foobar : 'f' 'o' 'o' 'b' 'a' 'r' {};
+END
+
+$ACLOCAL
+$AUTOMAKE -a
+$AUTOCONF
+
+./configure YFLAGS='-d -v'
+$MAKE
+ls -l
+test -f foo.c
+test -f foo.h
+test -f foo.output
+
+$MAKE maintainer-clean
+ls -l
+
+./configure YFLAGS='-v'
+$MAKE
+ls -l
+test -f foo.c
+test ! -e foo.h
+test -f foo.output
+
+$MAKE maintainer-clean
+ls -l
+
+./configure YFLAGS='-v'
+run_make YFLAGS=-d
+ls -l
+test -f foo.c
+test -f foo.h
+test ! -e foo.output
+
+$MAKE maintainer-clean
+ls -l
+
+:
diff --git a/t/yflags-conditional.sh b/t/yflags-conditional.sh
new file mode 100644
index 000000000..612c5219b
--- /dev/null
+++ b/t/yflags-conditional.sh
@@ -0,0 +1,143 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that automake complains about *_YFLAGS variables which have
+# conditional content.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_PROG_CC
+
+# 'YFLAGS' is AC_SUBST'd by AC_PROG_YACC by default, but we
+# don't want this, since it might confuse our error messages.
+# Also, AM_SUBST_NOTMAKE seems not to help about this.
+# So we simply define $(YACC) by hand.
+AC_SUBST([YACC], [yacc])
+
+AM_CONDITIONAL([COND], [:])
+END
+
+$ACLOCAL
+
+cat > Makefile.am <<'END'
+bin_PROGRAMS = foo zardoz
+foo_SOURCES = foo.y
+zardoz_SOURCES = zardoz.y
+if COND
+AM_YFLAGS = -v
+zardoz_YFLAGS = -v
+endif COND
+END
+
+cat > Makefile1.am <<'END'
+bin_PROGRAMS = foo
+foo_SOURCES = foo.y
+## This is a dummy comment to keep line count right.
+if COND
+YFLAGS = foo
+endif COND
+END
+
+cat > Makefile2.am <<'END'
+bin_PROGRAMS = foo
+foo_SOURCES = foo.y
+AM_YFLAGS = am_yflags
+if COND
+YFLAGS = yflags
+endif COND
+END
+
+cat > Makefile3.am <<'END'
+bin_PROGRAMS = foo
+foo_SOURCES = foo.y
+foo_YFLAGS = foo_yflags
+if COND
+YFLAGS = yflags
+endif COND
+END
+
+cat > Makefile4.am <<'END'
+bin_PROGRAMS = foo zardoz
+
+foo_SOURCES = foo.y
+zardoz_SOURCES = $(foo_SOURCES)
+
+YFLAGS =
+AM_YFLAGS = $(COND_VAR1)
+zardoz_YFLAGS = $(COND_VAR2:z=r)
+
+COND_VAR2 = foo
+if COND
+YFLAGS += -v
+COND_VAR2 += bar
+else !COND
+COND_VAR1 = -d
+endif !COND
+END
+
+cat > Makefile5.am <<'END'
+bin_PROGRAMS = foo zardoz
+foo_SOURCES = foo.y
+zardoz_SOURCES = zardoz.y
+YFLAGS = -v
+AM_YFLAGS = -v
+if COND
+zardoz_YFLAGS = -v
+endif
+END
+
+cat > Makefile6.am <<'END'
+bin_PROGRAMS = foo
+foo_SOURCES = foo.y
+foo_YFLAGS = -v
+if COND
+quux_YFLAGS = -v
+AM_YFLAGS = -v
+endif
+END
+
+: > ylwrap
+
+LC_ALL=C; export LC_ALL; # For grep regexes below.
+
+AUTOMAKE_fails -Wnone -Wunsupported Makefile
+grep '^Makefile\.am:5:.*AM_YFLAGS.* conditional contents' stderr
+grep '^Makefile\.am:6:.*zardoz_YFLAGS.* conditional contents' stderr
+
+for i in 1 2 3; do
+ AUTOMAKE_fails -Wnone -Wunsupported Makefile$i
+ grep "^Makefile$i\\.am:5:.*[^a-zA-Z0-9_]YFLAGS.* conditional contents" \
+ stderr
+done
+
+AUTOMAKE_fails -Wnone -Wunsupported Makefile4
+grep '^Makefile4\.am:6:.*[^a-zA-Z0-9_]YFLAGS.* conditional contents' stderr
+grep '^Makefile4\.am:7:.*AM_YFLAGS.* conditional contents' stderr
+grep '^Makefile4\.am:8:.*zardoz_YFLAGS.* conditional contents' stderr
+
+# Now let's check we avoid false positives.
+
+# Disable 'gnu' warnings because we override the user variable 'YFLAGS'.
+AUTOMAKE_fails -Wno-gnu Makefile5
+grep -v '^Makefile5\.am:.*zardoz_YFLAGS' stderr \
+ | grep -v ': warnings are treated as errors' \
+ | grep . && exit 1
+
+# Disable 'gnu' warnings because we override the user variable 'YFLAGS'.
+$AUTOMAKE -Wno-gnu Makefile6
+
+:
diff --git a/t/yflags-cxx.sh b/t/yflags-cxx.sh
new file mode 100644
index 000000000..bf4a25cee
--- /dev/null
+++ b/t/yflags-cxx.sh
@@ -0,0 +1,68 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that $(YFLAGS) takes precedence over both $(AM_YFLAGS) and
+# $(foo_YFLAGS). This is the C++ case.
+# Please keep this in sync with the sister tests:
+# - yflags.sh
+# - lflags.sh
+# - lflags-cxx.sh
+
+. test-init.sh
+
+cat >fake-yacc <<'END'
+#!/bin/sh
+echo '/*' "$*" '*/' >y.tab.c
+echo 'extern int dummy;' >> y.tab.c
+END
+chmod a+x fake-yacc
+
+cat >> configure.ac <<'END'
+AC_SUBST([CXX], [false])
+# Simulate presence of Yacc using our fake-yacc script.
+AC_SUBST([YACC], ['$(abs_top_srcdir)'/fake-yacc])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+AUTOMAKE_OPTIONS = no-dependencies
+bin_PROGRAMS = foo bar
+foo_SOURCES = main.cc foo.yy
+bar_SOURCES = main.cc bar.y++
+AM_YFLAGS = __am_flags__
+bar_YFLAGS = __bar_flags__
+END
+
+$ACLOCAL
+$AUTOMAKE -a
+
+grep '\$(YFLAGS).*\$(bar_YFLAGS)' Makefile.in && exit 1
+grep '\$(YFLAGS).*\$(AM_YFLAGS)' Makefile.in && exit 1
+
+: > foo.yy
+: > bar.y++
+
+$AUTOCONF
+./configure
+run_make YFLAGS=__user_flags__ foo.cc bar-bar.c++
+
+cat foo.cc
+cat bar-bar.c++
+
+grep '__am_flags__.*__user_flags__' foo.cc
+grep '__bar_flags__.*__user_flags__' bar-bar.c++
+
+:
diff --git a/t/yflags-d-false-positives.sh b/t/yflags-d-false-positives.sh
new file mode 100644
index 000000000..f3d172fd0
--- /dev/null
+++ b/t/yflags-d-false-positives.sh
@@ -0,0 +1,41 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check for false positives in automake recognition of '-d' in YFLAGS.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_PROG_CC
+AC_PROG_YACC
+END
+
+$ACLOCAL
+
+cat > Makefile.am <<'END'
+bin_PROGRAMS = zardoz foobar
+zardoz_SOURCES = zardoz.y
+foobar_SOURCES = foobar.y
+# All the "almost -d" substrings ("- d", "-dd", etc.) are meant.
+AM_YFLAGS = -xd --d - d --output=d
+foobar_YFLAGS = - d $(foovar)-d -dd
+END
+
+$AUTOMAKE -a
+$EGREP '(foobar|zardoz)\.h.*:' Makefile.in && exit 1
+$EGREP '(foobar|zardoz)\.h' Makefile.in | $FGREP -v '$(YLWRAP) ' && exit 1
+
+:
diff --git a/t/yflags-force-conditional.sh b/t/yflags-force-conditional.sh
new file mode 100644
index 000000000..edae2b963
--- /dev/null
+++ b/t/yflags-force-conditional.sh
@@ -0,0 +1,85 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that the user can force automake to use *_YFLAGS variables
+# which have conditional content.
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_SUBST([CC], [false])
+AC_PROG_YACC
+AM_CONDITIONAL([COND], [test x"$cond" = x"yes"])
+AC_OUTPUT
+END
+
+mkdir bin
+cat > bin/fake-yacc <<'END'
+#!/bin/sh
+echo "/* $* */" > y.tab.c
+echo 'extern int dummy;' >> y.tab.c
+END
+chmod a+x bin/fake-yacc
+PATH=$(pwd)/bin$PATH_SEPARATOR$PATH; export PATH
+YACC=fake-yacc; export YACC
+
+cat > Makefile.am <<'END'
+AUTOMAKE_OPTIONS = no-dependencies
+bin_PROGRAMS = foo bar
+foo_SOURCES = foo.y main.c
+bar_SOURCES = $(foo_SOURCES)
+bar_YFLAGS = $(bar_yflags2)
+if COND
+AM_YFLAGS = __am_cond_yes__
+bar_YFLAGS += __bar_cond_yes__
+else !COND
+AM_YFLAGS = __am_cond_no__
+bar_yflags2 = __bar_cond_no__
+endif !COND
+END
+
+: > foo.y
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a -Wno-unsupported
+
+$EGREP '(YFLAGS|yflags|am__append)' Makefile.in # For debugging.
+
+./configure cond=yes
+$MAKE foo.c bar-foo.c
+
+cat foo.c
+cat bar-foo.c
+
+$FGREP ' __am_cond_yes__ ' foo.c
+$FGREP ' __bar_cond_yes__ ' bar-foo.c
+$FGREP 'cond_no' foo.c bar-foo.c && exit 1
+
+$MAKE maintainer-clean
+ls -l
+
+./configure cond=no
+$MAKE foo.c bar-foo.c
+
+cat foo.c
+cat bar-foo.c
+
+$FGREP ' __am_cond_no__ ' foo.c
+$FGREP ' __bar_cond_no__ ' bar-foo.c
+$FGREP 'cond_yes' foo.c bar-foo.c && exit 1
+
+:
diff --git a/t/yflags-force-override.sh b/t/yflags-force-override.sh
new file mode 100644
index 000000000..aa078d40b
--- /dev/null
+++ b/t/yflags-force-override.sh
@@ -0,0 +1,62 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that automake can cope with a definition of the $(YFLAGS) variable
+# in Makefile.am (even if that is extremely bad practice, because that
+# variable is user-reserved).
+
+required='cc yacc'
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_PROG_CC
+AC_PROG_YACC
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+bin_PROGRAMS = foo
+foo_SOURCES = foo.y
+# Don't do this in a real-life Makefile.am!
+YFLAGS = -d -v
+END
+
+cat > foo.y << 'END'
+%{
+int yylex () { return 0; }
+void yyerror (char *s) { return; }
+int main () { return 0; }
+%}
+%%
+foobar : 'f' 'o' 'o' 'b' 'a' 'r' {};
+END
+
+$ACLOCAL
+$AUTOMAKE -a -Wno-gnu
+
+$EGREP '(foo|YFLAGS)' Makefile.in # For debugging.
+grep '^foo\.h *:' Makefile.in
+
+$AUTOCONF
+./configure
+
+$MAKE
+
+test -f foo.c
+test -f foo.h
+test -f foo.output
+
+:
diff --git a/t/yflags-var-expand.sh b/t/yflags-var-expand.sh
new file mode 100644
index 000000000..2a6b8832e
--- /dev/null
+++ b/t/yflags-var-expand.sh
@@ -0,0 +1,61 @@
+#! /bin/sh
+# Copyright (C) 2011-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that automake expand variables when looking for '-d' in YFLAGS;
+# for example, the following is supposed to work:
+# foo_flags = -d
+# AM_YFLAGS = $(foo_flags)
+
+. test-init.sh
+
+cat >> configure.ac <<'END'
+AC_PROG_CC
+AC_PROG_YACC
+END
+
+$ACLOCAL
+
+cat > Makefile.am <<'END'
+bin_PROGRAMS = foo bar
+foo_SOURCES = foo.y
+bar_SOURCES = bar.y
+my_YFLAGS = -x
+AM_YFLAGS = $(my_YFLAGS:x=d)
+bar_YFLAGS = $(AM_YFLAGS)
+END
+
+$AUTOMAKE -a
+
+$EGREP '(foo|bar|YFLAGS)' Makefile.in # For debugging.
+grep '^foo.h *:' Makefile.in
+grep '^bar-bar.h *:' Makefile.in
+
+cat > Makefile.am <<'END'
+AUTOMAKE_OPTIONS = -Wno-gnu
+bin_PROGRAMS = zardoz
+zardoz_SOURCES = parser.y
+my_YFLAGS = $(my_YFLAGS_1)
+my_YFLAGS += $(my_YFLAGS_2)
+my_YFLAGS_2 = -d
+YFLAGS = $(my_YFLAGS)
+END
+
+$AUTOMAKE
+
+$EGREP 'parser|YFLAGS' Makefile.in # For debugging.
+grep '^parser.h *:' Makefile.in
+
+:
diff --git a/t/yflags.sh b/t/yflags.sh
new file mode 100644
index 000000000..3aaec0eb2
--- /dev/null
+++ b/t/yflags.sh
@@ -0,0 +1,68 @@
+#! /bin/sh
+# Copyright (C) 2010-2017 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 <https://www.gnu.org/licenses/>.
+
+# Check that $(YFLAGS) takes precedence over both $(AM_YFLAGS) and
+# $(foo_YFLAGS).
+# Please keep this in sync with the sister tests:
+# - yflags-cxx.sh
+# - lflags.sh
+# - lflags-cxx.sh
+
+. test-init.sh
+
+cat >fake-yacc <<'END'
+#!/bin/sh
+echo '/*' "$*" '*/' >y.tab.c
+echo 'extern int dummy;' >> y.tab.c
+END
+chmod a+x fake-yacc
+
+cat >> configure.ac <<'END'
+AC_SUBST([CC], [false])
+# Simulate presence of Yacc using our fake-yacc script.
+AC_SUBST([YACC], ['$(abs_top_srcdir)'/fake-yacc])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+AUTOMAKE_OPTIONS = no-dependencies
+bin_PROGRAMS = foo bar
+foo_SOURCES = main.c foo.y
+bar_SOURCES = main.c bar.y
+AM_YFLAGS = __am_flags__
+bar_YFLAGS = __bar_flags__
+END
+
+$ACLOCAL
+$AUTOMAKE -a
+
+grep '\$(YFLAGS).*\$(bar_YFLAGS)' Makefile.in && exit 1
+grep '\$(YFLAGS).*\$(AM_YFLAGS)' Makefile.in && exit 1
+
+: > foo.y
+: > bar.y
+
+$AUTOCONF
+./configure
+run_make YFLAGS=__user_flags__ foo.c bar-bar.c
+
+cat foo.c
+cat bar-bar.c
+
+grep '__am_flags__.*__user_flags__' foo.c
+grep '__bar_flags__.*__user_flags__' bar-bar.c
+
+: